diff -Nrc3pad gcc-3.3.2/.brik gcc-3.3.3/.brik *** gcc-3.3.2/.brik Thu Oct 16 22:52:23 2003 --- gcc-3.3.3/.brik Sat Feb 14 21:25:40 2004 *************** *** 3,25 **** # CRC-32 filename # ------ -------- 1177862404b ./boehm-gc/acinclude.m4 1236612374b ./boehm-gc/aclocal.m4 971051254b ./boehm-gc/add_gc_prefix.c 2056900000b ./boehm-gc/allchblk.c 33265057b ./boehm-gc/alloc.c 1198071641b ./boehm-gc/alpha_mach_dep.s - 655018850b ./boehm-gc/AmigaOS.c 3099799990b ./boehm-gc/backgraph.c - 2411687152b ./boehm-gc/BCC_MAKEFILE 394605993b ./boehm-gc/blacklst.c 971406525b ./boehm-gc/callprocs - 3646085849b ./boehm-gc/ChangeLog 2542310219b ./boehm-gc/checksums.c 1272640704b ./boehm-gc/config.guess 4182969326b ./boehm-gc/config.sub 2350970747b ./boehm-gc/configure ! 2331870630b ./boehm-gc/configure.host 725430640b ./boehm-gc/configure.in 3430717956b ./boehm-gc/cord/cordbscs.c 473686535b ./boehm-gc/cord/cordprnt.c --- 3,67 ---- # CRC-32 filename # ------ -------- + 2864072627b ./.cvsignore + 454904501b ./BUGS + 2171125041b ./COPYING + 508743035b ./COPYING.LIB + 3759805510b ./ChangeLog + 1351330966b ./FAQ + 2229468985b ./INSTALL/README + 2873940805b ./INSTALL/binaries.html + 2824636383b ./INSTALL/build.html + 65998970b ./INSTALL/configure.html + 2768939892b ./INSTALL/download.html + 3285738462b ./INSTALL/finalinstall.html + 1676470193b ./INSTALL/gfdl.html + 2051725251b ./INSTALL/index.html + 3273734043b ./INSTALL/old.html + 975149080b ./INSTALL/specific.html + 1887949984b ./INSTALL/test.html + 387185131b ./MAINTAINERS + 459788085b ./Makefile.def + 673596399b ./Makefile.in + 1638614068b ./Makefile.tpl + 3697693037b ./README + 3286946454b ./README.SCO + 655018850b ./boehm-gc/AmigaOS.c + 2411687152b ./boehm-gc/BCC_MAKEFILE + 3243278359b ./boehm-gc/ChangeLog + 3428452570b ./boehm-gc/EMX_MAKEFILE + 145946109b ./boehm-gc/MacOS.c + 591574792b ./boehm-gc/MacProjects.sit.hqx + 3338272940b ./boehm-gc/Mac_files/MacOS_Test_config.h + 537693184b ./boehm-gc/Mac_files/MacOS_config.h + 789649079b ./boehm-gc/Mac_files/dataend.c + 3520138091b ./boehm-gc/Mac_files/datastart.c + 2647418481b ./boehm-gc/Makefile.DLLs + 2938168783b ./boehm-gc/Makefile.am + 3148936110b ./boehm-gc/Makefile.direct + 3806813747b ./boehm-gc/Makefile.dist + 87051491b ./boehm-gc/Makefile.dj + 3291187154b ./boehm-gc/Makefile.in + 3941839401b ./boehm-gc/NT_MAKEFILE + 3607948475b ./boehm-gc/NT_THREADS_MAKEFILE + 3289014202b ./boehm-gc/OS2_MAKEFILE + 2438519321b ./boehm-gc/PCR-Makefile + 2956367466b ./boehm-gc/SMakefile.amiga + 205379550b ./boehm-gc/WCC_MAKEFILE 1177862404b ./boehm-gc/acinclude.m4 1236612374b ./boehm-gc/aclocal.m4 971051254b ./boehm-gc/add_gc_prefix.c 2056900000b ./boehm-gc/allchblk.c 33265057b ./boehm-gc/alloc.c 1198071641b ./boehm-gc/alpha_mach_dep.s 3099799990b ./boehm-gc/backgraph.c 394605993b ./boehm-gc/blacklst.c 971406525b ./boehm-gc/callprocs 2542310219b ./boehm-gc/checksums.c 1272640704b ./boehm-gc/config.guess 4182969326b ./boehm-gc/config.sub 2350970747b ./boehm-gc/configure ! 4265937088b ./boehm-gc/configure.host 725430640b ./boehm-gc/configure.in 3430717956b ./boehm-gc/cord/cordbscs.c 473686535b ./boehm-gc/cord/cordprnt.c *************** *** 27,43 **** 3610557498b ./boehm-gc/cord/cordxtra.c 1399512076b ./boehm-gc/cord/de.c 3493089115b ./boehm-gc/cord/de_cmds.h - 1274913051b ./boehm-gc/cord/de_win.c - 1969645283b ./boehm-gc/cord/de_win.h 2226183422b ./boehm-gc/cord/de_win.ICO 2296745137b ./boehm-gc/cord/de_win.RC 3479570773b ./boehm-gc/dbg_mlc.c 4155306217b ./boehm-gc/digimars.mak - 602673483b ./boehm-gc/doc/barrett_diagram - 2134574438b ./boehm-gc/doc/debugging.html - 4112273729b ./boehm-gc/doc/gcdescr.html - 2587456343b ./boehm-gc/doc/gc.man 1852147885b ./boehm-gc/doc/README 1398938057b ./boehm-gc/doc/README.amiga 3968038895b ./boehm-gc/doc/README.autoconf 609394135b ./boehm-gc/doc/README.changes --- 69,84 ---- 3610557498b ./boehm-gc/cord/cordxtra.c 1399512076b ./boehm-gc/cord/de.c 3493089115b ./boehm-gc/cord/de_cmds.h 2226183422b ./boehm-gc/cord/de_win.ICO 2296745137b ./boehm-gc/cord/de_win.RC + 1274913051b ./boehm-gc/cord/de_win.c + 1969645283b ./boehm-gc/cord/de_win.h 3479570773b ./boehm-gc/dbg_mlc.c 4155306217b ./boehm-gc/digimars.mak 1852147885b ./boehm-gc/doc/README + 2912965872b ./boehm-gc/doc/README.Mac + 3192387476b ./boehm-gc/doc/README.MacOSX + 1009764294b ./boehm-gc/doc/README.OS2 1398938057b ./boehm-gc/doc/README.amiga 3968038895b ./boehm-gc/doc/README.autoconf 609394135b ./boehm-gc/doc/README.changes *************** *** 48,86 **** 1544667036b ./boehm-gc/doc/README.ews4800 2032435380b ./boehm-gc/doc/README.hp 261398962b ./boehm-gc/doc/README.linux - 2912965872b ./boehm-gc/doc/README.Mac - 3192387476b ./boehm-gc/doc/README.MacOSX 3651372180b ./boehm-gc/doc/README.macros - 1009764294b ./boehm-gc/doc/README.OS2 3249391671b ./boehm-gc/doc/README.rs6000 2157435131b ./boehm-gc/doc/README.sgi 2210572734b ./boehm-gc/doc/README.solaris2 1044770375b ./boehm-gc/doc/README.uts 3162142981b ./boehm-gc/doc/README.win32 1244216301b ./boehm-gc/doc/tree.html 414780111b ./boehm-gc/dyn_load.c - 3428452570b ./boehm-gc/EMX_MAKEFILE 110360283b ./boehm-gc/finalize.c 3449835837b ./boehm-gc/gc_cpp.cc 231223753b ./boehm-gc/gc_cpp.cpp - 3458300802b ./boehm-gc/gcc_support.c 145159317b ./boehm-gc/gc_dlopen.c 4111426693b ./boehm-gc/gcj_mlc.c - 3607948475b ./boehm-gc/gc.mak 3106502053b ./boehm-gc/gcname.c 1644234138b ./boehm-gc/headers.c 1596485799b ./boehm-gc/hpux_test_and_clear.s 1676909184b ./boehm-gc/ia64_save_regs_in_stack.s 3582080946b ./boehm-gc/if_mach.c 387600055b ./boehm-gc/if_not_there.c 3897882033b ./boehm-gc/include/cord.h 214150158b ./boehm-gc/include/ec.h 2874534410b ./boehm-gc/include/gc_alloc.h 1922524680b ./boehm-gc/include/gc_amiga_redirects.h 3531915622b ./boehm-gc/include/gc_backptr.h 1564499082b ./boehm-gc/include/gc_cpp.h 2080667503b ./boehm-gc/include/gc_gcj.h - 61666144b ./boehm-gc/include/gc.h 30043067b ./boehm-gc/include/gc_inl.h 601682422b ./boehm-gc/include/gc_inline.h 2851726125b ./boehm-gc/include/gc_local_alloc.h --- 89,129 ---- 1544667036b ./boehm-gc/doc/README.ews4800 2032435380b ./boehm-gc/doc/README.hp 261398962b ./boehm-gc/doc/README.linux 3651372180b ./boehm-gc/doc/README.macros 3249391671b ./boehm-gc/doc/README.rs6000 2157435131b ./boehm-gc/doc/README.sgi 2210572734b ./boehm-gc/doc/README.solaris2 1044770375b ./boehm-gc/doc/README.uts 3162142981b ./boehm-gc/doc/README.win32 + 602673483b ./boehm-gc/doc/barrett_diagram + 2134574438b ./boehm-gc/doc/debugging.html + 2587456343b ./boehm-gc/doc/gc.man + 4112273729b ./boehm-gc/doc/gcdescr.html 1244216301b ./boehm-gc/doc/tree.html 414780111b ./boehm-gc/dyn_load.c 110360283b ./boehm-gc/finalize.c + 3607948475b ./boehm-gc/gc.mak 3449835837b ./boehm-gc/gc_cpp.cc 231223753b ./boehm-gc/gc_cpp.cpp 145159317b ./boehm-gc/gc_dlopen.c + 3458300802b ./boehm-gc/gcc_support.c 4111426693b ./boehm-gc/gcj_mlc.c 3106502053b ./boehm-gc/gcname.c 1644234138b ./boehm-gc/headers.c 1596485799b ./boehm-gc/hpux_test_and_clear.s 1676909184b ./boehm-gc/ia64_save_regs_in_stack.s 3582080946b ./boehm-gc/if_mach.c 387600055b ./boehm-gc/if_not_there.c + 1222266555b ./boehm-gc/include/Makefile.am + 2340206284b ./boehm-gc/include/Makefile.in 3897882033b ./boehm-gc/include/cord.h 214150158b ./boehm-gc/include/ec.h + 61666144b ./boehm-gc/include/gc.h 2874534410b ./boehm-gc/include/gc_alloc.h 1922524680b ./boehm-gc/include/gc_amiga_redirects.h 3531915622b ./boehm-gc/include/gc_backptr.h 1564499082b ./boehm-gc/include/gc_cpp.h 2080667503b ./boehm-gc/include/gc_gcj.h 30043067b ./boehm-gc/include/gc_inl.h 601682422b ./boehm-gc/include/gc_inline.h 2851726125b ./boehm-gc/include/gc_local_alloc.h *************** *** 89,104 **** 3286861254b ./boehm-gc/include/gc_typed.h 2246764458b ./boehm-gc/include/javaxfc.h 4237951566b ./boehm-gc/include/leak_detector.h - 1222266555b ./boehm-gc/include/Makefile.am - 2340206284b ./boehm-gc/include/Makefile.in 3792791209b ./boehm-gc/include/new_gc_alloc.h 1547838704b ./boehm-gc/include/private/cord_pos.h 902196938b ./boehm-gc/include/private/dbg_mlc.h - 3820561693b ./boehm-gc/include/private/gcconfig.h 1215170430b ./boehm-gc/include/private/gc_hdrs.h 3411375301b ./boehm-gc/include/private/gc_locks.h 583510369b ./boehm-gc/include/private/gc_pmark.h 1990877525b ./boehm-gc/include/private/gc_priv.h 2686914147b ./boehm-gc/include/private/solaris_threads.h 3935909412b ./boehm-gc/include/private/specific.h 2262051120b ./boehm-gc/include/weakpointer.h --- 132,145 ---- 3286861254b ./boehm-gc/include/gc_typed.h 2246764458b ./boehm-gc/include/javaxfc.h 4237951566b ./boehm-gc/include/leak_detector.h 3792791209b ./boehm-gc/include/new_gc_alloc.h 1547838704b ./boehm-gc/include/private/cord_pos.h 902196938b ./boehm-gc/include/private/dbg_mlc.h 1215170430b ./boehm-gc/include/private/gc_hdrs.h 3411375301b ./boehm-gc/include/private/gc_locks.h 583510369b ./boehm-gc/include/private/gc_pmark.h 1990877525b ./boehm-gc/include/private/gc_priv.h + 3820561693b ./boehm-gc/include/private/gcconfig.h 2686914147b ./boehm-gc/include/private/solaris_threads.h 3935909412b ./boehm-gc/include/private/specific.h 2262051120b ./boehm-gc/include/weakpointer.h *************** *** 108,126 **** 3899988461b ./boehm-gc/linux_threads.c 604657675b ./boehm-gc/ltconfig 3301916719b ./boehm-gc/ltmain.sh - 789649079b ./boehm-gc/Mac_files/dataend.c - 3520138091b ./boehm-gc/Mac_files/datastart.c - 537693184b ./boehm-gc/Mac_files/MacOS_config.h - 3338272940b ./boehm-gc/Mac_files/MacOS_Test_config.h 1572371745b ./boehm-gc/mach_dep.c - 145946109b ./boehm-gc/MacOS.c - 591574792b ./boehm-gc/MacProjects.sit.hqx - 2938168783b ./boehm-gc/Makefile.am - 3148936110b ./boehm-gc/Makefile.direct - 3806813747b ./boehm-gc/Makefile.dist - 87051491b ./boehm-gc/Makefile.dj - 2647418481b ./boehm-gc/Makefile.DLLs - 3291187154b ./boehm-gc/Makefile.in 4270565414b ./boehm-gc/malloc.c 3656007348b ./boehm-gc/mallocx.c 2488176063b ./boehm-gc/mark.c --- 149,155 ---- *************** *** 130,150 **** 3319150875b ./boehm-gc/misc.c 4236112450b ./boehm-gc/mkinstalldirs 2583630088b ./boehm-gc/new_hblk.c - 3941839401b ./boehm-gc/NT_MAKEFILE - 3607948475b ./boehm-gc/NT_THREADS_MAKEFILE 1361724709b ./boehm-gc/obj_map.c - 3289014202b ./boehm-gc/OS2_MAKEFILE 2236606828b ./boehm-gc/os_dep.c 600864111b ./boehm-gc/pc_excludes 735852084b ./boehm-gc/pcr_interface.c - 2438519321b ./boehm-gc/PCR-Makefile 811834911b ./boehm-gc/powerpc_macosx_mach_dep.s 105828241b ./boehm-gc/ptr_chck.c 3988382907b ./boehm-gc/real_malloc.c 2946495074b ./boehm-gc/reclaim.c 2737439630b ./boehm-gc/rs6000_mach_dep.s 636267038b ./boehm-gc/setjmp_t.c - 2956367466b ./boehm-gc/SMakefile.amiga 751650501b ./boehm-gc/solaris_pthreads.c 275051372b ./boehm-gc/solaris_threads.c 1425695416b ./boehm-gc/sparc_mach_dep.S --- 159,174 ---- *************** *** 160,174 **** 3287937987b ./boehm-gc/threadlibs.c 2467355438b ./boehm-gc/typd_mlc.c 332085760b ./boehm-gc/version.h - 205379550b ./boehm-gc/WCC_MAKEFILE 62682092b ./boehm-gc/win32_threads.c ! 971684819b ./BUGS ! 4173866843b ./bugs.html ! 934441312b ./ChangeLog ! 430854799b ./config/acinclude.m4 ! 1748632144b ./config/ChangeLog 3794184949b ./config.guess 2016379063b ./config.if 636889995b ./config/mh-a68bsd 1442196770b ./config/mh-aix386 3252332438b ./config/mh-apollo68 --- 184,197 ---- 3287937987b ./boehm-gc/threadlibs.c 2467355438b ./boehm-gc/typd_mlc.c 332085760b ./boehm-gc/version.h 62682092b ./boehm-gc/win32_threads.c ! 1119116469b ./bugs.html ! 71055409b ./config-ml.in 3794184949b ./config.guess 2016379063b ./config.if + 537897852b ./config.sub + 2651333699b ./config/ChangeLog + 430854799b ./config/acinclude.m4 636889995b ./config/mh-a68bsd 1442196770b ./config/mh-aix386 3252332438b ./config/mh-apollo68 *************** *** 207,213 **** 1114762032b ./config/mh-sysv4 1114762032b ./config/mh-sysv5 3265825290b ./config/mh-x86pic - 71055409b ./config-ml.in 2474610656b ./config/mt-aix43 3955224621b ./config/mt-alphaieee 1487563357b ./config/mt-d30v --- 230,235 ---- *************** *** 216,290 **** 971016637b ./config/mt-ospace 787786243b ./config/mt-v810 2659154290b ./config/mt-wince - 537897852b ./config.sub 4143692422b ./configure ! 2474773756b ./configure.in 1948950130b ./contrib/analyze_brprob - 1043864154b ./contrib/ChangeLog 550196746b ./contrib/compare_tests 2828387446b ./contrib/convert_to_f2c 2929939770b ./contrib/convert_to_g2c 2025073358b ./contrib/download_f2c - 1336632236b ./contrib/gccbug.el 4190705069b ./contrib/gcc_build ! 349855123b ./contrib/gcc_update 752127234b ./contrib/gennews 4256039795b ./contrib/index-prop 3683285493b ./contrib/newcvsroot 3406928738b ./contrib/paranoia.cc 3661855799b ./contrib/regression/btest-gcc.sh - 3682328122b ./contrib/regression/ChangeLog 1435553453b ./contrib/regression/objs-gcc.sh - 1757898889b ./contrib/regression/README 3103378580b ./contrib/regression/site.exp 3168894978b ./contrib/test_installed 2176599191b ./contrib/test_summary 1581263438b ./contrib/texi2pod.pl 4228623080b ./contrib/warn_summary - 2171125041b ./COPYING - 508743035b ./COPYING.LIB - 2864072627b ./.cvsignore - 998335541b ./FAQ 1764901825b ./faq.html ! 54199525b ./fastjar/acinclude.m4 ! 1369101675b ./fastjar/aclocal.m4 1005262133b ./fastjar/AUTHORS - 2435650698b ./fastjar/ChangeLog 1745615150b ./fastjar/CHANGES 3743222129b ./fastjar/compress.c 1169302702b ./fastjar/compress.h 1117462681b ./fastjar/config.h.in 2619265826b ./fastjar/configure 3663315504b ./fastjar/configure.in - 1396100520b ./fastjar/COPYING - 3707811223b ./fastjar/.cvsignore 2553867110b ./fastjar/dostime.c 446939748b ./fastjar/dostime.h ! 3900501519b ./fastjar/fastjar.info 3589129523b ./fastjar/fastjar.texi ! 2261192900b ./fastjar/grepjar.1 ! 2770615802b ./fastjar/INSTALL 2331671736b ./fastjar/install-defs.sh.in 1178077958b ./fastjar/install-sh ! 1406665953b ./fastjar/jar.1 2281221680b ./fastjar/jargrep.c 4062871816b ./fastjar/jargrep.h 2905933595b ./fastjar/jartool.c 2754304773b ./fastjar/jartool.h - 1805291518b ./fastjar/Makefile.am - 2841639681b ./fastjar/Makefile.in 990942143b ./fastjar/missing 1455437353b ./fastjar/mkinstalldirs - 4038493440b ./fastjar/NEWS 1315168235b ./fastjar/pushback.c 302085493b ./fastjar/pushback.h - 3943963407b ./fastjar/README 216805921b ./fastjar/stamp-h.in 3071504729b ./fastjar/zipfile.h 2215240433b ./gcc/ABOUT-GCC-NLS 1413896246b ./gcc/ABOUT-NLS 3729933059b ./gcc/acconfig.h 4067360570b ./gcc/aclocal.m4 3476755371b ./gcc/ada/1aexcept.adb 3022880533b ./gcc/ada/1aexcept.ads 2251433832b ./gcc/ada/1ic.ads --- 238,331 ---- 971016637b ./config/mt-ospace 787786243b ./config/mt-v810 2659154290b ./config/mt-wince 4143692422b ./configure ! 4078400456b ./configure.in ! 1869491039b ./contrib/ChangeLog 1948950130b ./contrib/analyze_brprob 550196746b ./contrib/compare_tests 2828387446b ./contrib/convert_to_f2c 2929939770b ./contrib/convert_to_g2c 2025073358b ./contrib/download_f2c 4190705069b ./contrib/gcc_build ! 515992328b ./contrib/gcc_update ! 1336632236b ./contrib/gccbug.el 752127234b ./contrib/gennews 4256039795b ./contrib/index-prop 3683285493b ./contrib/newcvsroot 3406928738b ./contrib/paranoia.cc + 1172428181b ./contrib/regression/ChangeLog + 1757898889b ./contrib/regression/README 3661855799b ./contrib/regression/btest-gcc.sh 1435553453b ./contrib/regression/objs-gcc.sh 3103378580b ./contrib/regression/site.exp 3168894978b ./contrib/test_installed 2176599191b ./contrib/test_summary 1581263438b ./contrib/texi2pod.pl 4228623080b ./contrib/warn_summary 1764901825b ./faq.html ! 3707811223b ./fastjar/.cvsignore 1005262133b ./fastjar/AUTHORS 1745615150b ./fastjar/CHANGES + 1396100520b ./fastjar/COPYING + 513215636b ./fastjar/ChangeLog + 2770615802b ./fastjar/INSTALL + 1805291518b ./fastjar/Makefile.am + 2841639681b ./fastjar/Makefile.in + 4038493440b ./fastjar/NEWS + 3943963407b ./fastjar/README + 54199525b ./fastjar/acinclude.m4 + 1369101675b ./fastjar/aclocal.m4 3743222129b ./fastjar/compress.c 1169302702b ./fastjar/compress.h 1117462681b ./fastjar/config.h.in 2619265826b ./fastjar/configure 3663315504b ./fastjar/configure.in 2553867110b ./fastjar/dostime.c 446939748b ./fastjar/dostime.h ! 2011191902b ./fastjar/fastjar.info 3589129523b ./fastjar/fastjar.texi ! 2140953762b ./fastjar/grepjar.1 2331671736b ./fastjar/install-defs.sh.in 1178077958b ./fastjar/install-sh ! 715748854b ./fastjar/jar.1 2281221680b ./fastjar/jargrep.c 4062871816b ./fastjar/jargrep.h 2905933595b ./fastjar/jartool.c 2754304773b ./fastjar/jartool.h 990942143b ./fastjar/missing 1455437353b ./fastjar/mkinstalldirs 1315168235b ./fastjar/pushback.c 302085493b ./fastjar/pushback.h 216805921b ./fastjar/stamp-h.in 3071504729b ./fastjar/zipfile.h + 1308782881b ./gcc/.cvsignore 2215240433b ./gcc/ABOUT-GCC-NLS 1413896246b ./gcc/ABOUT-NLS + 2171125041b ./gcc/COPYING + 508743035b ./gcc/COPYING.LIB + 1746505507b ./gcc/ChangeLog + 4112479902b ./gcc/ChangeLog.0 + 3216066841b ./gcc/ChangeLog.1 + 2323556130b ./gcc/ChangeLog.2 + 3176640938b ./gcc/ChangeLog.3 + 3015000601b ./gcc/ChangeLog.4 + 4176743933b ./gcc/ChangeLog.5 + 2548364434b ./gcc/ChangeLog.6 + 1208082050b ./gcc/ChangeLog.7 + 3235050590b ./gcc/ChangeLog.lib + 2146007539b ./gcc/FSFChangeLog + 2696443822b ./gcc/FSFChangeLog.10 + 1302016933b ./gcc/FSFChangeLog.11 + 3016546082b ./gcc/LANGUAGES + 27665921b ./gcc/Makefile.in + 515860724b ./gcc/NEWS + 1799560872b ./gcc/ONEWS + 2799003008b ./gcc/README-fixinc + 756162762b ./gcc/README.Portability + 1084935625b ./gcc/SERVICE 3729933059b ./gcc/acconfig.h 4067360570b ./gcc/aclocal.m4 + 1423685038b ./gcc/ada/.cvsignore 3476755371b ./gcc/ada/1aexcept.adb 3022880533b ./gcc/ada/1aexcept.ads 2251433832b ./gcc/ada/1ic.ads *************** *** 475,480 **** --- 516,525 ---- 1363857210b ./gcc/ada/86numaux.adb 4053303068b ./gcc/ada/86numaux.ads 3760778950b ./gcc/ada/9drpc.adb + 998495436b ./gcc/ada/ChangeLog + 1311661804b ./gcc/ada/Make-lang.in + 4249262083b ./gcc/ada/Makefile.adalib + 3255053300b ./gcc/ada/Makefile.in 2280800531b ./gcc/ada/a-astaco.adb 3259280671b ./gcc/ada/a-astaco.ads 367890918b ./gcc/ada/a-caldel.adb *************** *** 494,508 **** 2676889573b ./gcc/ada/a-comlin.ads 2671391885b ./gcc/ada/a-cwila1.ads 3799548269b ./gcc/ada/a-cwila9.ads - 3768095897b ./gcc/ada/ada.ads - 1295005255b ./gcc/ada/adadecode.c - 1590048241b ./gcc/ada/adadecode.h - 3752930348b ./gcc/ada/adafinal.c - 1951378334b ./gcc/ada/ada.h - 4254504525b ./gcc/ada/adaint.c - 842239939b ./gcc/ada/adaint.h - 1982115237b ./gcc/ada/ada-tree.def - 1334528231b ./gcc/ada/ada-tree.h 2562885096b ./gcc/ada/a-decima.adb 3964508631b ./gcc/ada/a-decima.ads 4162793785b ./gcc/ada/a-diocst.adb --- 539,544 ---- *************** *** 534,550 **** 1320750593b ./gcc/ada/a-iwteio.ads 3184637491b ./gcc/ada/a-lfteio.ads 3399197938b ./gcc/ada/a-lfwtio.ads - 394580827b ./gcc/ada/ali.adb - 2668171343b ./gcc/ada/ali.ads 4181349523b ./gcc/ada/a-liteio.ads - 510875974b ./gcc/ada/ali-util.adb - 3777303034b ./gcc/ada/ali-util.ads 4061818571b ./gcc/ada/a-liwtio.ads 2391273921b ./gcc/ada/a-llftio.ads 589145108b ./gcc/ada/a-llfwti.ads 733828438b ./gcc/ada/a-llitio.ads 2019981437b ./gcc/ada/a-lliwti.ads - 641549079b ./gcc/ada/alloc.ads 4202114661b ./gcc/ada/a-ncelfu.ads 2982795424b ./gcc/ada/a-ngcefu.adb 2417195295b ./gcc/ada/a-ngcefu.ads --- 570,581 ---- *************** *** 573,579 **** 3420934441b ./gcc/ada/a-reatim.ads 2422313336b ./gcc/ada/a-retide.adb 2786353850b ./gcc/ada/a-retide.ads - 899190514b ./gcc/ada/argv.c 915291874b ./gcc/ada/a-sequio.adb 2781518414b ./gcc/ada/a-sequio.ads 1028548096b ./gcc/ada/a-sfteio.ads --- 604,609 ---- *************** *** 664,675 **** 4121988035b ./gcc/ada/a-tiocst.ads 3910455454b ./gcc/ada/a-titest.adb 3599822963b ./gcc/ada/a-titest.ads - 618728363b ./gcc/ada/atree.adb - 1328381436b ./gcc/ada/atree.ads - 3927429423b ./gcc/ada/atree.h 2501643743b ./gcc/ada/a-unccon.ads 125078292b ./gcc/ada/a-uncdea.ads - 3257044236b ./gcc/ada/aux-io.c 29969073b ./gcc/ada/a-witeio.adb 1654805280b ./gcc/ada/a-witeio.ads 399909379b ./gcc/ada/a-wtcoau.adb --- 694,701 ---- *************** *** 706,711 **** --- 732,756 ---- 775232154b ./gcc/ada/a-wtmoio.ads 663806314b ./gcc/ada/a-wttest.adb 2990280730b ./gcc/ada/a-wttest.ads + 1982115237b ./gcc/ada/ada-tree.def + 1334528231b ./gcc/ada/ada-tree.h + 3768095897b ./gcc/ada/ada.ads + 1951378334b ./gcc/ada/ada.h + 1295005255b ./gcc/ada/adadecode.c + 1590048241b ./gcc/ada/adadecode.h + 3752930348b ./gcc/ada/adafinal.c + 4254504525b ./gcc/ada/adaint.c + 842239939b ./gcc/ada/adaint.h + 510875974b ./gcc/ada/ali-util.adb + 3777303034b ./gcc/ada/ali-util.ads + 394580827b ./gcc/ada/ali.adb + 2668171343b ./gcc/ada/ali.ads + 641549079b ./gcc/ada/alloc.ads + 899190514b ./gcc/ada/argv.c + 618728363b ./gcc/ada/atree.adb + 1328381436b ./gcc/ada/atree.ads + 3927429423b ./gcc/ada/atree.h + 3257044236b ./gcc/ada/aux-io.c 1819935344b ./gcc/ada/back_end.adb 2085249332b ./gcc/ada/back_end.ads 2077333587b ./gcc/ada/bcheck.adb *************** *** 725,731 **** 819907824b ./gcc/ada/casing.adb 383971693b ./gcc/ada/casing.ads 2658802005b ./gcc/ada/ceinfo.adb - 2122962180b ./gcc/ada/ChangeLog 2766796861b ./gcc/ada/checks.adb 2020343191b ./gcc/ada/checks.ads 1422160412b ./gcc/ada/cio.c --- 770,775 ---- *************** *** 739,752 **** 281967843b ./gcc/ada/cstand.ads 2588845972b ./gcc/ada/cstreams.c 1496314704b ./gcc/ada/cuintp.c - 1423685038b ./gcc/ada/.cvsignore - 282379933b ./gcc/ada/debug_a.adb - 2893733810b ./gcc/ada/debug_a.ads 4058447839b ./gcc/ada/debug.adb 1164136597b ./gcc/ada/debug.ads ! 4020479104b ./gcc/ada/dec.ads 2327476984b ./gcc/ada/dec-io.adb 564204733b ./gcc/ada/dec-io.ads 269093773b ./gcc/ada/decl.c 3825382514b ./gcc/ada/deftarg.c 238197807b ./gcc/ada/directio.ads --- 783,795 ---- 281967843b ./gcc/ada/cstand.ads 2588845972b ./gcc/ada/cstreams.c 1496314704b ./gcc/ada/cuintp.c 4058447839b ./gcc/ada/debug.adb 1164136597b ./gcc/ada/debug.ads ! 282379933b ./gcc/ada/debug_a.adb ! 2893733810b ./gcc/ada/debug_a.ads 2327476984b ./gcc/ada/dec-io.adb 564204733b ./gcc/ada/dec-io.ads + 4020479104b ./gcc/ada/dec.ads 269093773b ./gcc/ada/decl.c 3825382514b ./gcc/ada/deftarg.c 238197807b ./gcc/ada/directio.ads *************** *** 764,771 **** 1134022627b ./gcc/ada/exit.c 2205430929b ./gcc/ada/exp_aggr.adb 407903332b ./gcc/ada/exp_aggr.ads - 1707095337b ./gcc/ada/expander.adb - 326210343b ./gcc/ada/expander.ads 4053842288b ./gcc/ada/exp_attr.adb 3526764645b ./gcc/ada/exp_attr.ads 235818397b ./gcc/ada/exp_ch10.ads --- 807,812 ---- *************** *** 799,805 **** 2931129238b ./gcc/ada/exp_disp.ads 1762813961b ./gcc/ada/exp_dist.adb 1584948667b ./gcc/ada/exp_dist.ads - 4257430321b ./gcc/ada/expect.c 611747716b ./gcc/ada/exp_fixd.adb 3285837422b ./gcc/ada/exp_fixd.ads 2525026740b ./gcc/ada/exp_imgv.adb --- 840,845 ---- *************** *** 820,834 **** 2076521219b ./gcc/ada/exp_util.ads 700545860b ./gcc/ada/exp_vfpt.adb 100115849b ./gcc/ada/exp_vfpt.ads 1835720949b ./gcc/ada/fe.h 4158495892b ./gcc/ada/fmap.adb 3938265786b ./gcc/ada/fmap.ads - 3153532790b ./gcc/ada/fname.adb - 4114894862b ./gcc/ada/fname.ads 88842572b ./gcc/ada/fname-sf.adb 3062888730b ./gcc/ada/fname-sf.ads 3767595337b ./gcc/ada/fname-uf.adb 406969945b ./gcc/ada/fname-uf.ads 2227723631b ./gcc/ada/freeze.adb 1206777338b ./gcc/ada/freeze.ads 1826922110b ./gcc/ada/frontend.adb --- 860,877 ---- 2076521219b ./gcc/ada/exp_util.ads 700545860b ./gcc/ada/exp_vfpt.adb 100115849b ./gcc/ada/exp_vfpt.ads + 1707095337b ./gcc/ada/expander.adb + 326210343b ./gcc/ada/expander.ads + 4257430321b ./gcc/ada/expect.c 1835720949b ./gcc/ada/fe.h 4158495892b ./gcc/ada/fmap.adb 3938265786b ./gcc/ada/fmap.ads 88842572b ./gcc/ada/fname-sf.adb 3062888730b ./gcc/ada/fname-sf.ads 3767595337b ./gcc/ada/fname-uf.adb 406969945b ./gcc/ada/fname-uf.ads + 3153532790b ./gcc/ada/fname.adb + 4114894862b ./gcc/ada/fname.ads 2227723631b ./gcc/ada/freeze.adb 1206777338b ./gcc/ada/freeze.ads 1826922110b ./gcc/ada/frontend.adb *************** *** 867,874 **** 397180417b ./gcc/ada/g-dyntab.adb 748979667b ./gcc/ada/g-dyntab.ads 514040300b ./gcc/ada/g-enblsp.adb - 1210185367b ./gcc/ada/get_targ.adb - 667434559b ./gcc/ada/get_targ.ads 997169893b ./gcc/ada/g-except.ads 401435319b ./gcc/ada/g-exctra.adb 3791669892b ./gcc/ada/g-exctra.ads --- 910,915 ---- *************** *** 881,887 **** 650879790b ./gcc/ada/g-hesorg.ads 3338369479b ./gcc/ada/g-htable.adb 3587450756b ./gcc/ada/g-htable.ads - 2523297721b ./gcc/ada/gigi.h 2866037851b ./gcc/ada/g-io.adb 648542470b ./gcc/ada/g-io.ads 2816296285b ./gcc/ada/g-io_aux.adb --- 922,927 ---- *************** *** 890,940 **** 2765360318b ./gcc/ada/g-locfil.ads 1110643939b ./gcc/ada/g-md5.adb 313686793b ./gcc/ada/g-md5.ads - 1321722641b ./gcc/ada/gmem.c 1229364627b ./gcc/ada/g-moreex.adb 1570727780b ./gcc/ada/g-moreex.ads - 394153681b ./gcc/ada/gnat1drv.adb - 1023650319b ./gcc/ada/gnat1drv.ads - 1113521052b ./gcc/ada/gnat.ads - 3119768779b ./gcc/ada/gnatbind.adb - 33603998b ./gcc/ada/gnatbind.ads - 1627437503b ./gcc/ada/gnatbl.c - 540500642b ./gcc/ada/gnatchop.adb - 2969604217b ./gcc/ada/gnatcmd.adb - 4090853881b ./gcc/ada/gnatcmd.ads - 2859978646b ./gcc/ada/gnatdll.adb - 897045337b ./gcc/ada/gnatfind.adb - 4239198286b ./gcc/ada/gnatkr.adb - 2263227460b ./gcc/ada/gnatkr.ads - 2824021054b ./gcc/ada/gnatlbr.adb - 2717759059b ./gcc/ada/gnatlink.adb - 2418815267b ./gcc/ada/gnatlink.ads - 424096833b ./gcc/ada/gnatls.adb - 1028292021b ./gcc/ada/gnatls.ads - 3044577120b ./gcc/ada/gnatmake.adb - 2090105224b ./gcc/ada/gnatmake.ads - 3774075467b ./gcc/ada/gnatmem.adb - 1656761015b ./gcc/ada/gnatname.adb - 2261990630b ./gcc/ada/gnatname.ads - 2304496705b ./gcc/ada/gnatprep.adb - 2739505905b ./gcc/ada/gnatprep.ads - 2618438921b ./gcc/ada/gnatpsta.adb - 2704394259b ./gcc/ada/gnat_rm.info - 2672136726b ./gcc/ada/gnat_rm.texi - 4056210887b ./gcc/ada/gnat-style.info - 4283135334b ./gcc/ada/gnat-style.texi - 2087208411b ./gcc/ada/gnat_ug.texi - 606904986b ./gcc/ada/gnat_ug_unx.info - 804303635b ./gcc/ada/gnat_ug_unx.texi - 2054672295b ./gcc/ada/gnat_ug_vms.info - 1719659850b ./gcc/ada/gnat_ug_vms.texi - 3136932359b ./gcc/ada/gnat_ug_vxw.info - 1705774003b ./gcc/ada/gnat_ug_vxw.texi - 2763851577b ./gcc/ada/gnat_ug_wnt.info - 1236505387b ./gcc/ada/gnat_ug_wnt.texi - 3334144073b ./gcc/ada/gnatvsn.adb - 1947192708b ./gcc/ada/gnatvsn.ads - 1802022950b ./gcc/ada/gnatxref.adb 338464037b ./gcc/ada/g-os_lib.adb 513796027b ./gcc/ada/g-os_lib.ads 3830058578b ./gcc/ada/g-regexp.adb --- 930,937 ---- *************** *** 969,974 **** --- 966,1011 ---- 110997839b ./gcc/ada/g-traceb.ads 4154493035b ./gcc/ada/g-trasym.adb 2114872806b ./gcc/ada/g-trasym.ads + 1210185367b ./gcc/ada/get_targ.adb + 667434559b ./gcc/ada/get_targ.ads + 2523297721b ./gcc/ada/gigi.h + 1321722641b ./gcc/ada/gmem.c + 4283135334b ./gcc/ada/gnat-style.texi + 1113521052b ./gcc/ada/gnat.ads + 394153681b ./gcc/ada/gnat1drv.adb + 1023650319b ./gcc/ada/gnat1drv.ads + 2672136726b ./gcc/ada/gnat_rm.texi + 2087208411b ./gcc/ada/gnat_ug.texi + 804303635b ./gcc/ada/gnat_ug_unx.texi + 1719659850b ./gcc/ada/gnat_ug_vms.texi + 1705774003b ./gcc/ada/gnat_ug_vxw.texi + 1236505387b ./gcc/ada/gnat_ug_wnt.texi + 3119768779b ./gcc/ada/gnatbind.adb + 33603998b ./gcc/ada/gnatbind.ads + 1627437503b ./gcc/ada/gnatbl.c + 540500642b ./gcc/ada/gnatchop.adb + 2969604217b ./gcc/ada/gnatcmd.adb + 4090853881b ./gcc/ada/gnatcmd.ads + 2859978646b ./gcc/ada/gnatdll.adb + 897045337b ./gcc/ada/gnatfind.adb + 4239198286b ./gcc/ada/gnatkr.adb + 2263227460b ./gcc/ada/gnatkr.ads + 2824021054b ./gcc/ada/gnatlbr.adb + 2717759059b ./gcc/ada/gnatlink.adb + 2418815267b ./gcc/ada/gnatlink.ads + 424096833b ./gcc/ada/gnatls.adb + 1028292021b ./gcc/ada/gnatls.ads + 3044577120b ./gcc/ada/gnatmake.adb + 2090105224b ./gcc/ada/gnatmake.ads + 3774075467b ./gcc/ada/gnatmem.adb + 1656761015b ./gcc/ada/gnatname.adb + 2261990630b ./gcc/ada/gnatname.ads + 2304496705b ./gcc/ada/gnatprep.adb + 2739505905b ./gcc/ada/gnatprep.ads + 2618438921b ./gcc/ada/gnatpsta.adb + 3334144073b ./gcc/ada/gnatvsn.adb + 1947192708b ./gcc/ada/gnatvsn.ads + 1802022950b ./gcc/ada/gnatxref.adb 1992194948b ./gcc/ada/hlo.adb 7965000b ./gcc/ada/hlo.ads 3338520812b ./gcc/ada/hostparm.ads *************** *** 987,992 **** --- 1024,1037 ---- 760004464b ./gcc/ada/i-cstrin.ads 1082363589b ./gcc/ada/i-fortra.adb 437203870b ./gcc/ada/i-fortra.ads + 3167896627b ./gcc/ada/i-os2err.ads + 1197558233b ./gcc/ada/i-os2lib.adb + 2393101475b ./gcc/ada/i-os2lib.ads + 3768225662b ./gcc/ada/i-os2syn.ads + 113148653b ./gcc/ada/i-os2thr.ads + 1225602965b ./gcc/ada/i-pacdec.adb + 2496798758b ./gcc/ada/i-pacdec.ads + 2140184443b ./gcc/ada/i-vxwork.ads 2860077370b ./gcc/ada/impunit.adb 1270682056b ./gcc/ada/impunit.ads 3972829514b ./gcc/ada/init.c *************** *** 995,1018 **** 2192188241b ./gcc/ada/interfac.ads 629054167b ./gcc/ada/io-aux.c 2207881126b ./gcc/ada/ioexcept.ads - 3167896627b ./gcc/ada/i-os2err.ads - 1197558233b ./gcc/ada/i-os2lib.adb - 2393101475b ./gcc/ada/i-os2lib.ads - 3768225662b ./gcc/ada/i-os2syn.ads - 113148653b ./gcc/ada/i-os2thr.ads - 1225602965b ./gcc/ada/i-pacdec.adb - 2496798758b ./gcc/ada/i-pacdec.ads 2314855848b ./gcc/ada/itypes.adb 2459378339b ./gcc/ada/itypes.ads - 2140184443b ./gcc/ada/i-vxwork.ads 632117246b ./gcc/ada/krunch.adb 4246886280b ./gcc/ada/krunch.ads 1862862910b ./gcc/ada/lang-options.h 3845386634b ./gcc/ada/lang-specs.h 4287853992b ./gcc/ada/layout.adb 4081150350b ./gcc/ada/layout.ads - 2230935205b ./gcc/ada/lib.adb - 2936051516b ./gcc/ada/lib.ads 2597706667b ./gcc/ada/lib-list.adb 4055706216b ./gcc/ada/lib-load.adb 1245484453b ./gcc/ada/lib-load.ads --- 1040,1053 ---- *************** *** 1023,1053 **** 1673066597b ./gcc/ada/lib-writ.ads 2264530243b ./gcc/ada/lib-xref.adb 901200146b ./gcc/ada/lib-xref.ads 999948081b ./gcc/ada/link.c 2630990747b ./gcc/ada/live.adb 2000138918b ./gcc/ada/live.ads 1415864294b ./gcc/ada/machcode.ads 122623076b ./gcc/ada/make.adb 793009024b ./gcc/ada/make.ads - 4249262083b ./gcc/ada/Makefile.adalib - 3255053300b ./gcc/ada/Makefile.in - 1311661804b ./gcc/ada/Make-lang.in 2487708892b ./gcc/ada/makeusg.adb 3790916888b ./gcc/ada/makeusg.ads 3923163233b ./gcc/ada/math_lib.adb - 1956935174b ./gcc/ada/mdll.adb - 3933871472b ./gcc/ada/mdll.ads 3362749341b ./gcc/ada/mdll-fil.adb 1485790591b ./gcc/ada/mdll-fil.ads 1067337271b ./gcc/ada/mdll-utl.adb 1242830681b ./gcc/ada/mdll-utl.ads 1750383127b ./gcc/ada/memroot.adb 3615380192b ./gcc/ada/memroot.ads 608378712b ./gcc/ada/memtrack.adb 2932384816b ./gcc/ada/misc.c 3998763736b ./gcc/ada/mkdir.c - 203897137b ./gcc/ada/mlib.adb - 2020670378b ./gcc/ada/mlib.ads 2065833419b ./gcc/ada/mlib-fil.adb 1905259349b ./gcc/ada/mlib-fil.ads 2608943021b ./gcc/ada/mlib-prj.adb --- 1058,1085 ---- 1673066597b ./gcc/ada/lib-writ.ads 2264530243b ./gcc/ada/lib-xref.adb 901200146b ./gcc/ada/lib-xref.ads + 2230935205b ./gcc/ada/lib.adb + 2936051516b ./gcc/ada/lib.ads 999948081b ./gcc/ada/link.c 2630990747b ./gcc/ada/live.adb 2000138918b ./gcc/ada/live.ads 1415864294b ./gcc/ada/machcode.ads 122623076b ./gcc/ada/make.adb 793009024b ./gcc/ada/make.ads 2487708892b ./gcc/ada/makeusg.adb 3790916888b ./gcc/ada/makeusg.ads 3923163233b ./gcc/ada/math_lib.adb 3362749341b ./gcc/ada/mdll-fil.adb 1485790591b ./gcc/ada/mdll-fil.ads 1067337271b ./gcc/ada/mdll-utl.adb 1242830681b ./gcc/ada/mdll-utl.ads + 1956935174b ./gcc/ada/mdll.adb + 3933871472b ./gcc/ada/mdll.ads 1750383127b ./gcc/ada/memroot.adb 3615380192b ./gcc/ada/memroot.ads 608378712b ./gcc/ada/memtrack.adb 2932384816b ./gcc/ada/misc.c 3998763736b ./gcc/ada/mkdir.c 2065833419b ./gcc/ada/mlib-fil.adb 1905259349b ./gcc/ada/mlib-fil.ads 2608943021b ./gcc/ada/mlib-prj.adb *************** *** 1056,1061 **** --- 1088,1095 ---- 3830455991b ./gcc/ada/mlib-tgt.ads 81774383b ./gcc/ada/mlib-utl.adb 1275564670b ./gcc/ada/mlib-utl.ads + 203897137b ./gcc/ada/mlib.adb + 2020670378b ./gcc/ada/mlib.ads 3538350861b ./gcc/ada/namet.adb 3639574738b ./gcc/ada/namet.ads 1508657599b ./gcc/ada/namet.h *************** *** 1067,1074 **** 3284608311b ./gcc/ada/nmake.adt 3260145123b ./gcc/ada/opt.adb 3447732531b ./gcc/ada/opt.ads - 915506958b ./gcc/ada/osint.adb - 2272158773b ./gcc/ada/osint.ads 1098506633b ./gcc/ada/osint-b.adb 1413972832b ./gcc/ada/osint-b.ads 516902818b ./gcc/ada/osint-c.adb --- 1101,1106 ---- *************** *** 1077,1086 **** 1051131321b ./gcc/ada/osint-l.ads 1024511265b ./gcc/ada/osint-m.adb 3386418329b ./gcc/ada/osint-m.ads 1573212521b ./gcc/ada/output.adb 2178583884b ./gcc/ada/output.ads - 4267838632b ./gcc/ada/par.adb - 3463587827b ./gcc/ada/par.ads 4236451772b ./gcc/ada/par-ch10.adb 1865473235b ./gcc/ada/par-ch11.adb 169758113b ./gcc/ada/par-ch12.adb --- 1109,1118 ---- 1051131321b ./gcc/ada/osint-l.ads 1024511265b ./gcc/ada/osint-m.adb 3386418329b ./gcc/ada/osint-m.ads + 915506958b ./gcc/ada/osint.adb + 2272158773b ./gcc/ada/osint.ads 1573212521b ./gcc/ada/output.adb 2178583884b ./gcc/ada/output.ads 4236451772b ./gcc/ada/par-ch10.adb 1865473235b ./gcc/ada/par-ch11.adb 169758113b ./gcc/ada/par-ch12.adb *************** *** 1100,1107 **** 2376621938b ./gcc/ada/par-sync.adb 288991157b ./gcc/ada/par-tchk.adb 2421943630b ./gcc/ada/par-util.adb ! 1783366994b ./gcc/ada/prj.adb ! 273475311b ./gcc/ada/prj.ads 4198954950b ./gcc/ada/prj-attr.adb 455900702b ./gcc/ada/prj-attr.ads 1801774749b ./gcc/ada/prj-com.adb --- 1132,1139 ---- 2376621938b ./gcc/ada/par-sync.adb 288991157b ./gcc/ada/par-tchk.adb 2421943630b ./gcc/ada/par-util.adb ! 4267838632b ./gcc/ada/par.adb ! 3463587827b ./gcc/ada/par.ads 4198954950b ./gcc/ada/prj-attr.adb 455900702b ./gcc/ada/prj-attr.ads 1801774749b ./gcc/ada/prj-com.adb *************** *** 1130,1135 **** --- 1162,1169 ---- 11711493b ./gcc/ada/prj-tree.ads 1004920764b ./gcc/ada/prj-util.adb 2130834746b ./gcc/ada/prj-util.ads + 1783366994b ./gcc/ada/prj.adb + 273475311b ./gcc/ada/prj.ads 3391358262b ./gcc/ada/raise.c 3177561595b ./gcc/ada/raise.h 1627893020b ./gcc/ada/repinfo.adb *************** *** 1154,1236 **** 351034639b ./gcc/ada/s-auxdec.ads 809451314b ./gcc/ada/s-bitops.adb 1402671709b ./gcc/ada/s-bitops.ads - 128154809b ./gcc/ada/scans.adb - 345695149b ./gcc/ada/scans.ads 1684329982b ./gcc/ada/s-chepoo.ads - 2641128141b ./gcc/ada/scn.adb - 3913556059b ./gcc/ada/scn.ads - 96767155b ./gcc/ada/scn-nlit.adb - 4141266749b ./gcc/ada/scn-slit.adb 2895675623b ./gcc/ada/s-crc32.adb 132785702b ./gcc/ada/s-crc32.ads - 3456501945b ./gcc/ada/sdefault.ads 1025936575b ./gcc/ada/s-direio.adb 2310567932b ./gcc/ada/s-direio.ads - 457587035b ./gcc/ada/sem.adb - 3718551417b ./gcc/ada/sem.ads - 1853623673b ./gcc/ada/sem_aggr.adb - 4131551728b ./gcc/ada/sem_aggr.ads - 153562469b ./gcc/ada/sem_attr.adb - 453667776b ./gcc/ada/sem_attr.ads - 564785830b ./gcc/ada/sem_case.adb - 495176024b ./gcc/ada/sem_case.ads - 2598563707b ./gcc/ada/sem_cat.adb - 1516953566b ./gcc/ada/sem_cat.ads - 237781320b ./gcc/ada/sem_ch10.adb - 95842022b ./gcc/ada/sem_ch10.ads - 1597810602b ./gcc/ada/sem_ch11.adb - 301514658b ./gcc/ada/sem_ch11.ads - 905665264b ./gcc/ada/sem_ch12.adb - 1406477684b ./gcc/ada/sem_ch12.ads - 2427266513b ./gcc/ada/sem_ch13.adb - 3162337120b ./gcc/ada/sem_ch13.ads - 675010544b ./gcc/ada/sem_ch2.adb - 1337056150b ./gcc/ada/sem_ch2.ads - 2468230337b ./gcc/ada/sem_ch3.adb - 2282414621b ./gcc/ada/sem_ch3.ads - 3533963930b ./gcc/ada/sem_ch4.adb - 1626692841b ./gcc/ada/sem_ch4.ads - 574340438b ./gcc/ada/sem_ch5.adb - 3874469898b ./gcc/ada/sem_ch5.ads - 1081660985b ./gcc/ada/sem_ch6.adb - 1784406070b ./gcc/ada/sem_ch6.ads - 3448287303b ./gcc/ada/sem_ch7.adb - 3876690738b ./gcc/ada/sem_ch7.ads - 532800431b ./gcc/ada/sem_ch8.adb - 1332122704b ./gcc/ada/sem_ch8.ads - 1333912384b ./gcc/ada/sem_ch9.adb - 1981701559b ./gcc/ada/sem_ch9.ads - 2874178694b ./gcc/ada/sem_disp.adb - 64069076b ./gcc/ada/sem_disp.ads - 3106266291b ./gcc/ada/sem_dist.adb - 448784348b ./gcc/ada/sem_dist.ads - 820420908b ./gcc/ada/sem_elab.adb - 1737329980b ./gcc/ada/sem_elab.ads - 1101292401b ./gcc/ada/sem_elim.adb - 1586521596b ./gcc/ada/sem_elim.ads - 1855970064b ./gcc/ada/sem_eval.adb - 1644532762b ./gcc/ada/sem_eval.ads - 2923550281b ./gcc/ada/sem_intr.adb - 1636056678b ./gcc/ada/sem_intr.ads - 3707937295b ./gcc/ada/sem_maps.adb - 1420921962b ./gcc/ada/sem_maps.ads - 823176495b ./gcc/ada/sem_mech.adb - 3673774677b ./gcc/ada/sem_mech.ads - 21685246b ./gcc/ada/sem_prag.adb - 1882250315b ./gcc/ada/sem_prag.ads - 573356616b ./gcc/ada/sem_res.adb - 3045351009b ./gcc/ada/sem_res.ads - 1138920335b ./gcc/ada/sem_smem.adb - 2750071125b ./gcc/ada/sem_smem.ads - 1762658297b ./gcc/ada/sem_type.adb - 103784610b ./gcc/ada/sem_type.ads - 1845973319b ./gcc/ada/sem_util.adb - 2371663768b ./gcc/ada/sem_util.ads - 784565722b ./gcc/ada/sem_vfpt.adb - 3753664166b ./gcc/ada/sem_vfpt.ads - 989663054b ./gcc/ada/sem_warn.adb - 2835167594b ./gcc/ada/sem_warn.ads - 2659804483b ./gcc/ada/sequenio.ads 3003047560b ./gcc/ada/s-errrep.adb 773860744b ./gcc/ada/s-errrep.ads 3034094549b ./gcc/ada/s-except.ads --- 1188,1198 ---- *************** *** 1277,1284 **** 1794340590b ./gcc/ada/s-finimp.ads 2900827968b ./gcc/ada/s-finroo.adb 2894460b ./gcc/ada/s-finroo.ads - 3879844819b ./gcc/ada/sfn_scan.adb - 3386500562b ./gcc/ada/sfn_scan.ads 2452192785b ./gcc/ada/s-fore.adb 2647276537b ./gcc/ada/s-fore.ads 1958017185b ./gcc/ada/s-gloloc.adb --- 1239,1244 ---- *************** *** 1313,1332 **** 3303847345b ./gcc/ada/s-imgwch.ads 2781247757b ./gcc/ada/s-imgwiu.adb 1501445148b ./gcc/ada/s-imgwiu.ads - 1510702737b ./gcc/ada/sinfo.adb - 776264779b ./gcc/ada/sinfo.ads - 3157179136b ./gcc/ada/sinfo-cn.adb - 1838430262b ./gcc/ada/sinfo-cn.ads - 3191222610b ./gcc/ada/sinfo.h 539067745b ./gcc/ada/s-inmaop.ads - 1602228275b ./gcc/ada/sinput.adb - 3934432023b ./gcc/ada/sinput.ads - 1139072857b ./gcc/ada/sinput-d.adb - 1552980541b ./gcc/ada/sinput-d.ads - 1072947695b ./gcc/ada/sinput-l.adb - 1344432336b ./gcc/ada/sinput-l.ads - 3419288990b ./gcc/ada/sinput-p.adb - 4012597971b ./gcc/ada/sinput-p.ads 1744313288b ./gcc/ada/s-interr.adb 636552118b ./gcc/ada/s-interr.ads 2883071225b ./gcc/ada/s-intman.ads --- 1273,1279 ---- *************** *** 1339,1347 **** 2897130749b ./gcc/ada/s-mastop.ads 243974377b ./gcc/ada/s-memory.adb 4199680369b ./gcc/ada/s-memory.ads - 1625013762b ./gcc/ada/snames.adb - 1436168100b ./gcc/ada/snames.ads - 3744225773b ./gcc/ada/snames.h 4294421032b ./gcc/ada/s-osprim.ads 1606354282b ./gcc/ada/s-pack03.adb 209622955b ./gcc/ada/s-pack03.ads --- 1286,1291 ---- *************** *** 1468,1475 **** 2673838793b ./gcc/ada/s-poosiz.adb 438866099b ./gcc/ada/s-poosiz.ads 3029625785b ./gcc/ada/s-powtab.ads - 4234849843b ./gcc/ada/sprint.adb - 2040623862b ./gcc/ada/sprint.ads 830131794b ./gcc/ada/s-proinf.adb 271040113b ./gcc/ada/s-proinf.ads 2019333834b ./gcc/ada/s-rpc.adb --- 1412,1417 ---- *************** *** 1508,1515 **** 4037517831b ./gcc/ada/s-tadert.ads 3686545646b ./gcc/ada/s-taenca.adb 3926496203b ./gcc/ada/s-taenca.ads - 1915984406b ./gcc/ada/stand.adb - 3516623899b ./gcc/ada/stand.ads 2333648438b ./gcc/ada/s-taprob.adb 3419796729b ./gcc/ada/s-taprob.ads 571402338b ./gcc/ada/s-taprop.ads --- 1450,1455 ---- *************** *** 1548,1560 **** 783758788b ./gcc/ada/s-traces.ads 922433200b ./gcc/ada/s-tratas.adb 1365141773b ./gcc/ada/s-tratas.ads - 3202054863b ./gcc/ada/stringt.adb - 3453373995b ./gcc/ada/stringt.ads - 1716263916b ./gcc/ada/stringt.h - 1443073414b ./gcc/ada/style.adb - 3757146219b ./gcc/ada/style.ads - 4004656796b ./gcc/ada/stylesw.adb - 2425837244b ./gcc/ada/stylesw.ads 297299147b ./gcc/ada/s-unstyp.ads 3663234314b ./gcc/ada/s-vaflop.adb 1802491369b ./gcc/ada/s-vaflop.ads --- 1488,1493 ---- *************** *** 1607,1626 **** 2104007358b ./gcc/ada/s-widllu.ads 777204248b ./gcc/ada/s-widwch.adb 2602874053b ./gcc/ada/s-widwch.ads - 507332671b ./gcc/ada/switch.adb - 3452617480b ./gcc/ada/switch.ads - 2685331831b ./gcc/ada/switch-b.adb - 3801384459b ./gcc/ada/switch-b.ads - 3455476498b ./gcc/ada/switch-c.adb - 3473960847b ./gcc/ada/switch-c.ads - 1451377305b ./gcc/ada/switch-m.adb - 1510716097b ./gcc/ada/switch-m.ads 3179820469b ./gcc/ada/s-wwdcha.adb 566151854b ./gcc/ada/s-wwdcha.ads 2981811991b ./gcc/ada/s-wwdenu.adb 876921949b ./gcc/ada/s-wwdenu.ads 742539160b ./gcc/ada/s-wwdwch.adb 1368753201b ./gcc/ada/s-wwdwch.ads 1097000358b ./gcc/ada/sysdep.c 863555368b ./gcc/ada/system.ads 1599555682b ./gcc/ada/table.adb --- 1540,1660 ---- 2104007358b ./gcc/ada/s-widllu.ads 777204248b ./gcc/ada/s-widwch.adb 2602874053b ./gcc/ada/s-widwch.ads 3179820469b ./gcc/ada/s-wwdcha.adb 566151854b ./gcc/ada/s-wwdcha.ads 2981811991b ./gcc/ada/s-wwdenu.adb 876921949b ./gcc/ada/s-wwdenu.ads 742539160b ./gcc/ada/s-wwdwch.adb 1368753201b ./gcc/ada/s-wwdwch.ads + 128154809b ./gcc/ada/scans.adb + 345695149b ./gcc/ada/scans.ads + 96767155b ./gcc/ada/scn-nlit.adb + 4141266749b ./gcc/ada/scn-slit.adb + 2641128141b ./gcc/ada/scn.adb + 3913556059b ./gcc/ada/scn.ads + 3456501945b ./gcc/ada/sdefault.ads + 457587035b ./gcc/ada/sem.adb + 3718551417b ./gcc/ada/sem.ads + 1853623673b ./gcc/ada/sem_aggr.adb + 4131551728b ./gcc/ada/sem_aggr.ads + 153562469b ./gcc/ada/sem_attr.adb + 453667776b ./gcc/ada/sem_attr.ads + 564785830b ./gcc/ada/sem_case.adb + 495176024b ./gcc/ada/sem_case.ads + 2598563707b ./gcc/ada/sem_cat.adb + 1516953566b ./gcc/ada/sem_cat.ads + 237781320b ./gcc/ada/sem_ch10.adb + 95842022b ./gcc/ada/sem_ch10.ads + 1597810602b ./gcc/ada/sem_ch11.adb + 301514658b ./gcc/ada/sem_ch11.ads + 905665264b ./gcc/ada/sem_ch12.adb + 1406477684b ./gcc/ada/sem_ch12.ads + 2427266513b ./gcc/ada/sem_ch13.adb + 3162337120b ./gcc/ada/sem_ch13.ads + 675010544b ./gcc/ada/sem_ch2.adb + 1337056150b ./gcc/ada/sem_ch2.ads + 2468230337b ./gcc/ada/sem_ch3.adb + 2282414621b ./gcc/ada/sem_ch3.ads + 3533963930b ./gcc/ada/sem_ch4.adb + 1626692841b ./gcc/ada/sem_ch4.ads + 574340438b ./gcc/ada/sem_ch5.adb + 3874469898b ./gcc/ada/sem_ch5.ads + 1081660985b ./gcc/ada/sem_ch6.adb + 1784406070b ./gcc/ada/sem_ch6.ads + 3448287303b ./gcc/ada/sem_ch7.adb + 3876690738b ./gcc/ada/sem_ch7.ads + 532800431b ./gcc/ada/sem_ch8.adb + 1332122704b ./gcc/ada/sem_ch8.ads + 1333912384b ./gcc/ada/sem_ch9.adb + 1981701559b ./gcc/ada/sem_ch9.ads + 2874178694b ./gcc/ada/sem_disp.adb + 64069076b ./gcc/ada/sem_disp.ads + 3106266291b ./gcc/ada/sem_dist.adb + 448784348b ./gcc/ada/sem_dist.ads + 820420908b ./gcc/ada/sem_elab.adb + 1737329980b ./gcc/ada/sem_elab.ads + 1101292401b ./gcc/ada/sem_elim.adb + 1586521596b ./gcc/ada/sem_elim.ads + 1855970064b ./gcc/ada/sem_eval.adb + 1644532762b ./gcc/ada/sem_eval.ads + 2923550281b ./gcc/ada/sem_intr.adb + 1636056678b ./gcc/ada/sem_intr.ads + 3707937295b ./gcc/ada/sem_maps.adb + 1420921962b ./gcc/ada/sem_maps.ads + 823176495b ./gcc/ada/sem_mech.adb + 3673774677b ./gcc/ada/sem_mech.ads + 21685246b ./gcc/ada/sem_prag.adb + 1882250315b ./gcc/ada/sem_prag.ads + 573356616b ./gcc/ada/sem_res.adb + 3045351009b ./gcc/ada/sem_res.ads + 1138920335b ./gcc/ada/sem_smem.adb + 2750071125b ./gcc/ada/sem_smem.ads + 1762658297b ./gcc/ada/sem_type.adb + 103784610b ./gcc/ada/sem_type.ads + 1845973319b ./gcc/ada/sem_util.adb + 2371663768b ./gcc/ada/sem_util.ads + 784565722b ./gcc/ada/sem_vfpt.adb + 3753664166b ./gcc/ada/sem_vfpt.ads + 989663054b ./gcc/ada/sem_warn.adb + 2835167594b ./gcc/ada/sem_warn.ads + 2659804483b ./gcc/ada/sequenio.ads + 3879844819b ./gcc/ada/sfn_scan.adb + 3386500562b ./gcc/ada/sfn_scan.ads + 3157179136b ./gcc/ada/sinfo-cn.adb + 1838430262b ./gcc/ada/sinfo-cn.ads + 1510702737b ./gcc/ada/sinfo.adb + 776264779b ./gcc/ada/sinfo.ads + 3191222610b ./gcc/ada/sinfo.h + 1139072857b ./gcc/ada/sinput-d.adb + 1552980541b ./gcc/ada/sinput-d.ads + 1072947695b ./gcc/ada/sinput-l.adb + 1344432336b ./gcc/ada/sinput-l.ads + 3419288990b ./gcc/ada/sinput-p.adb + 4012597971b ./gcc/ada/sinput-p.ads + 1602228275b ./gcc/ada/sinput.adb + 3934432023b ./gcc/ada/sinput.ads + 1625013762b ./gcc/ada/snames.adb + 1436168100b ./gcc/ada/snames.ads + 3744225773b ./gcc/ada/snames.h + 4234849843b ./gcc/ada/sprint.adb + 2040623862b ./gcc/ada/sprint.ads + 1915984406b ./gcc/ada/stand.adb + 3516623899b ./gcc/ada/stand.ads + 3202054863b ./gcc/ada/stringt.adb + 3453373995b ./gcc/ada/stringt.ads + 1716263916b ./gcc/ada/stringt.h + 1443073414b ./gcc/ada/style.adb + 3757146219b ./gcc/ada/style.ads + 4004656796b ./gcc/ada/stylesw.adb + 2425837244b ./gcc/ada/stylesw.ads + 2685331831b ./gcc/ada/switch-b.adb + 3801384459b ./gcc/ada/switch-b.ads + 3455476498b ./gcc/ada/switch-c.adb + 3473960847b ./gcc/ada/switch-c.ads + 1451377305b ./gcc/ada/switch-m.adb + 1510716097b ./gcc/ada/switch-m.ads + 507332671b ./gcc/ada/switch.adb + 3452617480b ./gcc/ada/switch.ads 1097000358b ./gcc/ada/sysdep.c 863555368b ./gcc/ada/system.ads 1599555682b ./gcc/ada/table.adb *************** *** 1661,1668 **** 2654407585b ./gcc/ada/urealp.h 2228862505b ./gcc/ada/usage.adb 319517319b ./gcc/ada/usage.ads - 1439939771b ./gcc/ada/utils2.c 3812277810b ./gcc/ada/utils.c 48927045b ./gcc/ada/validsw.adb 3951594422b ./gcc/ada/validsw.ads 1550194581b ./gcc/ada/widechar.adb --- 1695,1702 ---- 2654407585b ./gcc/ada/urealp.h 2228862505b ./gcc/ada/usage.adb 319517319b ./gcc/ada/usage.ads 3812277810b ./gcc/ada/utils.c + 1439939771b ./gcc/ada/utils2.c 48927045b ./gcc/ada/validsw.adb 3951594422b ./gcc/ada/validsw.ads 1550194581b ./gcc/ada/widechar.adb *************** *** 1670,1679 **** 3406844766b ./gcc/ada/xeinfo.adb 208322693b ./gcc/ada/xgnatug.adb 268664355b ./gcc/ada/xnmake.adb - 1730081979b ./gcc/ada/xref_lib.adb - 1668630154b ./gcc/ada/xref_lib.ads 2160162827b ./gcc/ada/xr_tabls.adb 1571871756b ./gcc/ada/xr_tabls.ads 3573112600b ./gcc/ada/xsinfo.adb 4190686960b ./gcc/ada/xsnames.adb 511048883b ./gcc/ada/xtreeprs.adb --- 1704,1713 ---- 3406844766b ./gcc/ada/xeinfo.adb 208322693b ./gcc/ada/xgnatug.adb 268664355b ./gcc/ada/xnmake.adb 2160162827b ./gcc/ada/xr_tabls.adb 1571871756b ./gcc/ada/xr_tabls.ads + 1730081979b ./gcc/ada/xref_lib.adb + 1668630154b ./gcc/ada/xref_lib.ads 3573112600b ./gcc/ada/xsinfo.adb 4190686960b ./gcc/ada/xsnames.adb 511048883b ./gcc/ada/xtreeprs.adb *************** *** 1684,1694 **** 3592689596b ./gcc/bitmap.c 3888731700b ./gcc/bitmap.h 866389233b ./gcc/builtin-attrs.def - 148394392b ./gcc/builtins.c - 3399851061b ./gcc/builtins.def 2231934789b ./gcc/builtin-types.def ! 1937217650b ./gcc/caller-save.c ! 1946827628b ./gcc/calls.c 266754123b ./gcc/c-aux-info.c 1775829814b ./gcc/c-common.c 1911269762b ./gcc/c-common.def --- 1718,1726 ---- 3592689596b ./gcc/bitmap.c 3888731700b ./gcc/bitmap.h 866389233b ./gcc/builtin-attrs.def 2231934789b ./gcc/builtin-types.def ! 3267464475b ./gcc/builtins.c ! 3399851061b ./gcc/builtins.def 266754123b ./gcc/c-aux-info.c 1775829814b ./gcc/c-common.c 1911269762b ./gcc/c-common.def *************** *** 1698,1749 **** 579906276b ./gcc/c-decl.c 420078897b ./gcc/c-dump.c 3988343334b ./gcc/c-errors.c 1424850360b ./gcc/cfganal.c 2497073643b ./gcc/cfgbuild.c ! 2570201327b ./gcc/cfg.c ! 830773923b ./gcc/cfgcleanup.c 2495299687b ./gcc/cfglayout.c 397535119b ./gcc/cfglayout.h 3649311558b ./gcc/cfgloop.c ! 847004601b ./gcc/cfgrtl.c ! 1308520655b ./gcc/c-format.c ! 2444607425b ./gcc/ChangeLog ! 4112479902b ./gcc/ChangeLog.0 ! 3216066841b ./gcc/ChangeLog.1 ! 2323556130b ./gcc/ChangeLog.2 ! 3176640938b ./gcc/ChangeLog.3 ! 3015000601b ./gcc/ChangeLog.4 ! 4176743933b ./gcc/ChangeLog.5 ! 2548364434b ./gcc/ChangeLog.6 ! 1208082050b ./gcc/ChangeLog.7 ! 3235050590b ./gcc/ChangeLog.lib ! 2967450474b ./gcc/c-lang.c ! 940015516b ./gcc/c-lex.c ! 615654456b ./gcc/c-objc-common.c ! 600457259b ./gcc/collect2.c 1843868705b ./gcc/collect2.h ! 2227256180b ./gcc/combine.c 4122382037b ./gcc/conditions.h ! 3915788506b ./gcc/config/alpha/alpha32.h ! 3673620331b ./gcc/config/alpha/alpha.c ! 1346602339b ./gcc/config/alpha/alpha.h 1081521208b ./gcc/config/alpha/alpha-interix.h - 3145148145b ./gcc/config/alpha/alpha.md 1148890194b ./gcc/config/alpha/alpha-protos.h 1407988137b ./gcc/config/alpha/crtfastmath.c 1689355033b ./gcc/config/alpha/elf.h 4100757221b ./gcc/config/alpha/ev4.md 592376398b ./gcc/config/alpha/ev5.md 320649145b ./gcc/config/alpha/ev6.md ! 2266038551b ./gcc/config/alpha/freebsd.h 2439445430b ./gcc/config/alpha/gnu.h 2998860143b ./gcc/config/alpha/lib1funcs.asm ! 3980115873b ./gcc/config/alpha/linux-elf.h 2178551847b ./gcc/config/alpha/linux.h 1246797152b ./gcc/config/alpha/netbsd.h 3083238444b ./gcc/config/alpha/openbsd.h - 1148914945b ./gcc/config/alpha/osf5.h 2934606255b ./gcc/config/alpha/osf.h 1190572001b ./gcc/config/alpha/qrnnd.asm 2672344824b ./gcc/config/alpha/t-alpha 2436402688b ./gcc/config/alpha/t-crtfm --- 1730,1788 ---- 579906276b ./gcc/c-decl.c 420078897b ./gcc/c-dump.c 3988343334b ./gcc/c-errors.c + 1308520655b ./gcc/c-format.c + 2967450474b ./gcc/c-lang.c + 940015516b ./gcc/c-lex.c + 3974543740b ./gcc/c-objc-common.c + 327769972b ./gcc/c-opts.c + 215284404b ./gcc/c-parse.c + 2637246862b ./gcc/c-parse.in + 1656602684b ./gcc/c-parse.y + 3843981782b ./gcc/c-pragma.c + 2824587351b ./gcc/c-pragma.h + 1364992996b ./gcc/c-pretty-print.c + 322270390b ./gcc/c-pretty-print.h + 2307648174b ./gcc/c-semantics.c + 3323894092b ./gcc/c-tree.h + 3800723537b ./gcc/c-typeck.c + 1929894132b ./gcc/caller-save.c + 1946827628b ./gcc/calls.c + 2570201327b ./gcc/cfg.c 1424850360b ./gcc/cfganal.c 2497073643b ./gcc/cfgbuild.c ! 1214884536b ./gcc/cfgcleanup.c 2495299687b ./gcc/cfglayout.c 397535119b ./gcc/cfglayout.h 3649311558b ./gcc/cfgloop.c ! 1528447670b ./gcc/cfgrtl.c ! 879130284b ./gcc/collect2.c 1843868705b ./gcc/collect2.h ! 3800413649b ./gcc/combine.c 4122382037b ./gcc/conditions.h ! 3072373159b ./gcc/config.gcc ! 1315260558b ./gcc/config.guess ! 1565770251b ./gcc/config.in ! 3917072699b ./gcc/config/README 1081521208b ./gcc/config/alpha/alpha-interix.h 1148890194b ./gcc/config/alpha/alpha-protos.h + 3977497323b ./gcc/config/alpha/alpha.c + 1346602339b ./gcc/config/alpha/alpha.h + 3145148145b ./gcc/config/alpha/alpha.md + 3915788506b ./gcc/config/alpha/alpha32.h 1407988137b ./gcc/config/alpha/crtfastmath.c 1689355033b ./gcc/config/alpha/elf.h 4100757221b ./gcc/config/alpha/ev4.md 592376398b ./gcc/config/alpha/ev5.md 320649145b ./gcc/config/alpha/ev6.md ! 3434499482b ./gcc/config/alpha/freebsd.h 2439445430b ./gcc/config/alpha/gnu.h 2998860143b ./gcc/config/alpha/lib1funcs.asm ! 116786968b ./gcc/config/alpha/linux-elf.h 2178551847b ./gcc/config/alpha/linux.h 1246797152b ./gcc/config/alpha/netbsd.h 3083238444b ./gcc/config/alpha/openbsd.h 2934606255b ./gcc/config/alpha/osf.h + 1148914945b ./gcc/config/alpha/osf5.h 1190572001b ./gcc/config/alpha/qrnnd.asm 2672344824b ./gcc/config/alpha/t-alpha 2436402688b ./gcc/config/alpha/t-crtfm *************** *** 1755,1792 **** 3342100479b ./gcc/config/alpha/t-vms64 1874402377b ./gcc/config/alpha/unicosmk.h 2817356982b ./gcc/config/alpha/va_list.h - 2920918174b ./gcc/config/alpha/vms64.h 2980547348b ./gcc/config/alpha/vms-cc.c 3010004084b ./gcc/config/alpha/vms-crt0-64.c 4198282733b ./gcc/config/alpha/vms-crt0.c 3572749067b ./gcc/config/alpha/vms-dwarf2.asm 3031921581b ./gcc/config/alpha/vms-dwarf2eh.asm - 2505978720b ./gcc/config/alpha/vms.h 278320441b ./gcc/config/alpha/vms-ld.c 3270218594b ./gcc/config/alpha/vms-psxcrt0-64.c 2164189970b ./gcc/config/alpha/vms-psxcrt0.c 1497613985b ./gcc/config/alpha/vms_tramp.asm 945163077b ./gcc/config/alpha/vxworks.h 1631226706b ./gcc/config/alpha/xm-alpha-interix.h - 2164887597b ./gcc/config/alpha/xm-vms64.h 1813891070b ./gcc/config/alpha/xm-vms.h ! 1756604664b ./gcc/config/alpha/x-vms 662120966b ./gcc/config/aoutos.h 984169977b ./gcc/config/arc/arc.c 1864215868b ./gcc/config/arc/arc.h 2879061285b ./gcc/config/arc/arc.md - 3176057659b ./gcc/config/arc/arc-modes.def - 1430913830b ./gcc/config/arc/arc-protos.h 2242623574b ./gcc/config/arc/initfini.c 4224412506b ./gcc/config/arc/lib1funcs.asm 1378203063b ./gcc/config/arc/t-arc 2219060296b ./gcc/config/arm/aof.h 2675616798b ./gcc/config/arm/aout.h 2570786956b ./gcc/config/arm/arm.c 2554986637b ./gcc/config/arm/arm.h 1970299264b ./gcc/config/arm/arm.md - 1511706560b ./gcc/config/arm/arm-modes.def - 2313150707b ./gcc/config/arm/arm-protos.h 152133707b ./gcc/config/arm/coff.h 3566890009b ./gcc/config/arm/conix-elf.h 1666366669b ./gcc/config/arm/crti.asm --- 1794,1832 ---- 3342100479b ./gcc/config/alpha/t-vms64 1874402377b ./gcc/config/alpha/unicosmk.h 2817356982b ./gcc/config/alpha/va_list.h 2980547348b ./gcc/config/alpha/vms-cc.c 3010004084b ./gcc/config/alpha/vms-crt0-64.c 4198282733b ./gcc/config/alpha/vms-crt0.c 3572749067b ./gcc/config/alpha/vms-dwarf2.asm 3031921581b ./gcc/config/alpha/vms-dwarf2eh.asm 278320441b ./gcc/config/alpha/vms-ld.c 3270218594b ./gcc/config/alpha/vms-psxcrt0-64.c 2164189970b ./gcc/config/alpha/vms-psxcrt0.c + 2505978720b ./gcc/config/alpha/vms.h + 2920918174b ./gcc/config/alpha/vms64.h 1497613985b ./gcc/config/alpha/vms_tramp.asm 945163077b ./gcc/config/alpha/vxworks.h + 1756604664b ./gcc/config/alpha/x-vms 1631226706b ./gcc/config/alpha/xm-alpha-interix.h 1813891070b ./gcc/config/alpha/xm-vms.h ! 2164887597b ./gcc/config/alpha/xm-vms64.h 662120966b ./gcc/config/aoutos.h + 3176057659b ./gcc/config/arc/arc-modes.def + 1430913830b ./gcc/config/arc/arc-protos.h 984169977b ./gcc/config/arc/arc.c 1864215868b ./gcc/config/arc/arc.h 2879061285b ./gcc/config/arc/arc.md 2242623574b ./gcc/config/arc/initfini.c 4224412506b ./gcc/config/arc/lib1funcs.asm 1378203063b ./gcc/config/arc/t-arc + 751909821b ./gcc/config/arm/README-interworking 2219060296b ./gcc/config/arm/aof.h 2675616798b ./gcc/config/arm/aout.h + 1511706560b ./gcc/config/arm/arm-modes.def + 2313150707b ./gcc/config/arm/arm-protos.h 2570786956b ./gcc/config/arm/arm.c 2554986637b ./gcc/config/arm/arm.h 1970299264b ./gcc/config/arm/arm.md 152133707b ./gcc/config/arm/coff.h 3566890009b ./gcc/config/arm/conix-elf.h 1666366669b ./gcc/config/arm/crti.asm *************** *** 1801,1810 **** 3559608348b ./gcc/config/arm/netbsd.h 152326865b ./gcc/config/arm/pe.c 2382903214b ./gcc/config/arm/pe.h - 751909821b ./gcc/config/arm/README-interworking 1835834968b ./gcc/config/arm/rtems-elf.h - 3907181312b ./gcc/config/arm/semiaof.h 4226743428b ./gcc/config/arm/semi.h 1676744073b ./gcc/config/arm/strongarm-coff.h 2572947596b ./gcc/config/arm/strongarm-elf.h 4084147202b ./gcc/config/arm/strongarm-pe.h --- 1841,1849 ---- 3559608348b ./gcc/config/arm/netbsd.h 152326865b ./gcc/config/arm/pe.c 2382903214b ./gcc/config/arm/pe.h 1835834968b ./gcc/config/arm/rtems-elf.h 4226743428b ./gcc/config/arm/semi.h + 3907181312b ./gcc/config/arm/semiaof.h 1676744073b ./gcc/config/arm/strongarm-coff.h 2572947596b ./gcc/config/arm/strongarm-elf.h 4084147202b ./gcc/config/arm/strongarm-pe.h *************** *** 1821,1854 **** 3941249553b ./gcc/config/arm/t-xscale-coff 4238855457b ./gcc/config/arm/t-xscale-elf 3331622085b ./gcc/config/arm/uclinux-elf.h - 1071156127b ./gcc/config/arm/unknown-elf.h 4033330429b ./gcc/config/arm/unknown-elf-oabi.h 1588213826b ./gcc/config/arm/vxarm.h 2210599114b ./gcc/config/arm/xscale-coff.h 1990441242b ./gcc/config/arm/xscale-elf.h 1025531934b ./gcc/config/avr/avr.c 4086669495b ./gcc/config/avr/avr.h 3351685131b ./gcc/config/avr/avr.md - 1358701110b ./gcc/config/avr/avr-protos.h 4272425436b ./gcc/config/avr/libgcc.S 2062536157b ./gcc/config/avr/t-avr - 2961519321b ./gcc/config/c4x/c4x.c 2135324155b ./gcc/config/c4x/c4x-c.c - 2694923076b ./gcc/config/c4x/c4x.h - 455436257b ./gcc/config/c4x/c4x.md 3103028321b ./gcc/config/c4x/c4x-modes.def 3891197136b ./gcc/config/c4x/c4x-protos.h 611817595b ./gcc/config/c4x/libgcc.S 2241768860b ./gcc/config/c4x/rtems.h 2323387481b ./gcc/config/c4x/t-c4x 1330177116b ./gcc/config/chorus.h 3983475564b ./gcc/config/cris/aout.h 3670658933b ./gcc/config/cris/arit.c - 4228128527b ./gcc/config/cris/cris_abi_symbol.c - 490446796b ./gcc/config/cris/cris.c - 2926215766b ./gcc/config/cris/cris.h - 3538699081b ./gcc/config/cris/cris.md 881494957b ./gcc/config/cris/cris-protos.h 744364725b ./gcc/config/cris/linux.h 907689569b ./gcc/config/cris/mulsi3.asm 45521295b ./gcc/config/cris/t-aout --- 1860,1893 ---- 3941249553b ./gcc/config/arm/t-xscale-coff 4238855457b ./gcc/config/arm/t-xscale-elf 3331622085b ./gcc/config/arm/uclinux-elf.h 4033330429b ./gcc/config/arm/unknown-elf-oabi.h + 1071156127b ./gcc/config/arm/unknown-elf.h 1588213826b ./gcc/config/arm/vxarm.h 2210599114b ./gcc/config/arm/xscale-coff.h 1990441242b ./gcc/config/arm/xscale-elf.h + 1358701110b ./gcc/config/avr/avr-protos.h 1025531934b ./gcc/config/avr/avr.c 4086669495b ./gcc/config/avr/avr.h 3351685131b ./gcc/config/avr/avr.md 4272425436b ./gcc/config/avr/libgcc.S 2062536157b ./gcc/config/avr/t-avr 2135324155b ./gcc/config/c4x/c4x-c.c 3103028321b ./gcc/config/c4x/c4x-modes.def 3891197136b ./gcc/config/c4x/c4x-protos.h + 2961519321b ./gcc/config/c4x/c4x.c + 2694923076b ./gcc/config/c4x/c4x.h + 455436257b ./gcc/config/c4x/c4x.md 611817595b ./gcc/config/c4x/libgcc.S 2241768860b ./gcc/config/c4x/rtems.h 2323387481b ./gcc/config/c4x/t-c4x 1330177116b ./gcc/config/chorus.h 3983475564b ./gcc/config/cris/aout.h 3670658933b ./gcc/config/cris/arit.c 881494957b ./gcc/config/cris/cris-protos.h + 2733582021b ./gcc/config/cris/cris.c + 718151887b ./gcc/config/cris/cris.h + 3653765946b ./gcc/config/cris/cris.md + 4228128527b ./gcc/config/cris/cris_abi_symbol.c 744364725b ./gcc/config/cris/linux.h 907689569b ./gcc/config/cris/mulsi3.asm 45521295b ./gcc/config/cris/t-aout *************** *** 1856,1910 **** 2080407099b ./gcc/config/cris/t-elfmulti 1112852607b ./gcc/config/cris/t-linux 3834330727b ./gcc/config/d30v/abi 2625081148b ./gcc/config/d30v/d30v.c 1965727304b ./gcc/config/d30v/d30v.h 3430463305b ./gcc/config/d30v/d30v.md - 3447920759b ./gcc/config/d30v/d30v-protos.h 1512688016b ./gcc/config/d30v/libgcc1.asm 2120255627b ./gcc/config/d30v/t-d30v - 3101942541b ./gcc/config/darwin.c 4059801364b ./gcc/config/darwin-c.c 3226016932b ./gcc/config/darwin-crt2.c - 3020045688b ./gcc/config/darwin.h 1838012452b ./gcc/config/darwin-protos.h 2063159136b ./gcc/config/dbxcoff.h 741369544b ./gcc/config/dbxelf.h - 2662634125b ./gcc/config/dbx.h 4083711028b ./gcc/config/divmod.c 2358823832b ./gcc/config/dsp16xx/dsp16xx.c 749466720b ./gcc/config/dsp16xx/dsp16xx.h 3159876720b ./gcc/config/dsp16xx/dsp16xx.md - 3807169411b ./gcc/config/dsp16xx/dsp16xx-protos.h 3752303804b ./gcc/config/elfos.h 4261313761b ./gcc/config/fp-bit.c 174418986b ./gcc/config/fp-bit.h 2304723625b ./gcc/config/fr30/crti.asm 2025473533b ./gcc/config/fr30/crtn.asm 1284148066b ./gcc/config/fr30/fr30.c 1920296356b ./gcc/config/fr30/fr30.h 1664440102b ./gcc/config/fr30/fr30.md - 2264307288b ./gcc/config/fr30/fr30-protos.h 2734319269b ./gcc/config/fr30/lib1funcs.asm 3068633205b ./gcc/config/fr30/t-fr30 3857422654b ./gcc/config/freebsd3.h 2210711654b ./gcc/config/freebsd4.h 1531797731b ./gcc/config/freebsd5.h 3920011053b ./gcc/config/freebsd6.h - 3873089153b ./gcc/config/freebsd.h - 3532526787b ./gcc/config/freebsd-nthr.h - 3606513384b ./gcc/config/freebsd-spec.h 927977764b ./gcc/config/frv/cmovd.c 1433509166b ./gcc/config/frv/cmovh.c 2671877583b ./gcc/config/frv/cmovw.c 1018636984b ./gcc/config/frv/frv-abi.h 2218059281b ./gcc/config/frv/frv-asm.h ! 1047071374b ./gcc/config/frv/frvbegin.c 4224181574b ./gcc/config/frv/frv.c - 1886816641b ./gcc/config/frv/frvend.c 1111096050b ./gcc/config/frv/frv.h 3428515036b ./gcc/config/frv/frv.md ! 3648172764b ./gcc/config/frv/frv-modes.def ! 923550243b ./gcc/config/frv/frv-protos.h 3504198099b ./gcc/config/frv/lib1funcs.asm 3184593289b ./gcc/config/frv/modi.c 3995816317b ./gcc/config/frv/t-frv --- 1895,1949 ---- 2080407099b ./gcc/config/cris/t-elfmulti 1112852607b ./gcc/config/cris/t-linux 3834330727b ./gcc/config/d30v/abi + 3447920759b ./gcc/config/d30v/d30v-protos.h 2625081148b ./gcc/config/d30v/d30v.c 1965727304b ./gcc/config/d30v/d30v.h 3430463305b ./gcc/config/d30v/d30v.md 1512688016b ./gcc/config/d30v/libgcc1.asm 2120255627b ./gcc/config/d30v/t-d30v 4059801364b ./gcc/config/darwin-c.c 3226016932b ./gcc/config/darwin-crt2.c 1838012452b ./gcc/config/darwin-protos.h + 3101942541b ./gcc/config/darwin.c + 3020045688b ./gcc/config/darwin.h + 2662634125b ./gcc/config/dbx.h 2063159136b ./gcc/config/dbxcoff.h 741369544b ./gcc/config/dbxelf.h 4083711028b ./gcc/config/divmod.c + 3807169411b ./gcc/config/dsp16xx/dsp16xx-protos.h 2358823832b ./gcc/config/dsp16xx/dsp16xx.c 749466720b ./gcc/config/dsp16xx/dsp16xx.h 3159876720b ./gcc/config/dsp16xx/dsp16xx.md 3752303804b ./gcc/config/elfos.h 4261313761b ./gcc/config/fp-bit.c 174418986b ./gcc/config/fp-bit.h 2304723625b ./gcc/config/fr30/crti.asm 2025473533b ./gcc/config/fr30/crtn.asm + 2264307288b ./gcc/config/fr30/fr30-protos.h 1284148066b ./gcc/config/fr30/fr30.c 1920296356b ./gcc/config/fr30/fr30.h 1664440102b ./gcc/config/fr30/fr30.md 2734319269b ./gcc/config/fr30/lib1funcs.asm 3068633205b ./gcc/config/fr30/t-fr30 + 3532526787b ./gcc/config/freebsd-nthr.h + 3606513384b ./gcc/config/freebsd-spec.h + 3873089153b ./gcc/config/freebsd.h 3857422654b ./gcc/config/freebsd3.h 2210711654b ./gcc/config/freebsd4.h 1531797731b ./gcc/config/freebsd5.h 3920011053b ./gcc/config/freebsd6.h 927977764b ./gcc/config/frv/cmovd.c 1433509166b ./gcc/config/frv/cmovh.c 2671877583b ./gcc/config/frv/cmovw.c 1018636984b ./gcc/config/frv/frv-abi.h 2218059281b ./gcc/config/frv/frv-asm.h ! 3648172764b ./gcc/config/frv/frv-modes.def ! 923550243b ./gcc/config/frv/frv-protos.h 4224181574b ./gcc/config/frv/frv.c 1111096050b ./gcc/config/frv/frv.h 3428515036b ./gcc/config/frv/frv.md ! 1047071374b ./gcc/config/frv/frvbegin.c ! 1886816641b ./gcc/config/frv/frvend.c 3504198099b ./gcc/config/frv/lib1funcs.asm 3184593289b ./gcc/config/frv/modi.c 3995816317b ./gcc/config/frv/t-frv *************** *** 1913,1943 **** 3087488293b ./gcc/config/frv/ulltod.c 788903798b ./gcc/config/frv/ulltof.c 946276139b ./gcc/config/frv/umodi.c - 2730027050b ./gcc/config.gcc 2184744613b ./gcc/config/gnu.h 2188992916b ./gcc/config/gofast.h - 1315260558b ./gcc/config.guess 2135233002b ./gcc/config/h8300/crti.asm 3919963794b ./gcc/config/h8300/crtn.asm 367022637b ./gcc/config/h8300/elf.h 4087866448b ./gcc/config/h8300/fixunssfsi.c - 913149092b ./gcc/config/h8300/h8300.c - 2515220433b ./gcc/config/h8300/h8300.h - 2784078000b ./gcc/config/h8300/h8300.md 2922330864b ./gcc/config/h8300/h8300-protos.h ! 1484792841b ./gcc/config/h8300/lib1funcs.asm 186420544b ./gcc/config/h8300/rtems.h 2094865057b ./gcc/config/h8300/t-elf 3777445358b ./gcc/config/h8300/t-h8300 ! 273465087b ./gcc/config/i370/i370.c 4183152766b ./gcc/config/i370/i370-c.c 2997303532b ./gcc/config/i370/i370.h 4214408308b ./gcc/config/i370/i370.md - 2357921251b ./gcc/config/i370/i370-protos.h 577722511b ./gcc/config/i370/linux.h 191137681b ./gcc/config/i370/mvs.h 3293906116b ./gcc/config/i370/oe.h - 2187046003b ./gcc/config/i370/README 1034372910b ./gcc/config/i370/t-i370 1100145942b ./gcc/config/i370/t-oe 2939308789b ./gcc/config/i386/athlon.md --- 1952,1981 ---- 3087488293b ./gcc/config/frv/ulltod.c 788903798b ./gcc/config/frv/ulltof.c 946276139b ./gcc/config/frv/umodi.c 2184744613b ./gcc/config/gnu.h 2188992916b ./gcc/config/gofast.h 2135233002b ./gcc/config/h8300/crti.asm 3919963794b ./gcc/config/h8300/crtn.asm 367022637b ./gcc/config/h8300/elf.h 4087866448b ./gcc/config/h8300/fixunssfsi.c 2922330864b ./gcc/config/h8300/h8300-protos.h ! 2060412524b ./gcc/config/h8300/h8300.c ! 3743077297b ./gcc/config/h8300/h8300.h ! 4265687184b ./gcc/config/h8300/h8300.md ! 1262063656b ./gcc/config/h8300/lib1funcs.asm 186420544b ./gcc/config/h8300/rtems.h 2094865057b ./gcc/config/h8300/t-elf 3777445358b ./gcc/config/h8300/t-h8300 ! 1257665765b ./gcc/config/h8300/t-rtems ! 2187046003b ./gcc/config/i370/README 4183152766b ./gcc/config/i370/i370-c.c + 2357921251b ./gcc/config/i370/i370-protos.h + 273465087b ./gcc/config/i370/i370.c 2997303532b ./gcc/config/i370/i370.h 4214408308b ./gcc/config/i370/i370.md 577722511b ./gcc/config/i370/linux.h 191137681b ./gcc/config/i370/mvs.h 3293906116b ./gcc/config/i370/oe.h 1034372910b ./gcc/config/i370/t-i370 1100145942b ./gcc/config/i370/t-oe 2939308789b ./gcc/config/i386/athlon.md *************** *** 1950,1990 **** 349707370b ./gcc/config/i386/cygwin.h 2056477512b ./gcc/config/i386/darwin.h 608631702b ./gcc/config/i386/djgpp.h ! 3229457143b ./gcc/config/i386/freebsd64.h 1846061297b ./gcc/config/i386/freebsd-aout.h 2385678914b ./gcc/config/i386/freebsd.h 1581335257b ./gcc/config/i386/gas.h 4266288971b ./gcc/config/i386/gmon-sol2.c 2242373399b ./gcc/config/i386/gnu.h 240648641b ./gcc/config/i386/gstabs.h 798942156b ./gcc/config/i386/gthr-win32.c 3155216183b ./gcc/config/i386/i386-aout.h - 184235754b ./gcc/config/i386/i386.c 2124176398b ./gcc/config/i386/i386-coff.h - 3652974168b ./gcc/config/i386/i386elf.h - 1387308539b ./gcc/config/i386/i386.h - 1579586996b ./gcc/config/i386/i386-interix3.h 1295044612b ./gcc/config/i386/i386-interix.h ! 3432265157b ./gcc/config/i386/i386.md 1349730319b ./gcc/config/i386/i386-modes.def 1963183629b ./gcc/config/i386/i386-protos.h 3010218896b ./gcc/config/i386/k6.md 877642037b ./gcc/config/i386/libgcc-x86_64-glibc.ver - 398104951b ./gcc/config/i386/linux64.h 2740762784b ./gcc/config/i386/linux-aout.h ! 3496202642b ./gcc/config/i386/linux.h ! 4257006542b ./gcc/config/i386/lynx.h 2085036314b ./gcc/config/i386/lynx-ng.h 720171487b ./gcc/config/i386/mach.h 2356303309b ./gcc/config/i386/mingw32.h ! 1934170596b ./gcc/config/i386/mmintrin.h 2276904589b ./gcc/config/i386/moss.h - 1802874307b ./gcc/config/i386/netbsd64.h 1701064821b ./gcc/config/i386/netbsd-elf.h 4058916110b ./gcc/config/i386/netbsd.h 3368473133b ./gcc/config/i386/netware.h 1680355485b ./gcc/config/i386/openbsd.h 3736205979b ./gcc/config/i386/pentium.md 3476241273b ./gcc/config/i386/ppro.md 1986050166b ./gcc/config/i386/ptx4-i.h 574801934b ./gcc/config/i386/rtemself.h --- 1988,2030 ---- 349707370b ./gcc/config/i386/cygwin.h 2056477512b ./gcc/config/i386/darwin.h 608631702b ./gcc/config/i386/djgpp.h ! 3766969086b ./gcc/config/i386/emmintrin.h 1846061297b ./gcc/config/i386/freebsd-aout.h 2385678914b ./gcc/config/i386/freebsd.h + 77685811b ./gcc/config/i386/freebsd64.h 1581335257b ./gcc/config/i386/gas.h 4266288971b ./gcc/config/i386/gmon-sol2.c 2242373399b ./gcc/config/i386/gnu.h 240648641b ./gcc/config/i386/gstabs.h 798942156b ./gcc/config/i386/gthr-win32.c 3155216183b ./gcc/config/i386/i386-aout.h 2124176398b ./gcc/config/i386/i386-coff.h 1295044612b ./gcc/config/i386/i386-interix.h ! 1579586996b ./gcc/config/i386/i386-interix3.h 1349730319b ./gcc/config/i386/i386-modes.def 1963183629b ./gcc/config/i386/i386-protos.h + 4151473718b ./gcc/config/i386/i386.c + 3999975198b ./gcc/config/i386/i386.h + 1850777154b ./gcc/config/i386/i386.md + 3652974168b ./gcc/config/i386/i386elf.h 3010218896b ./gcc/config/i386/k6.md 877642037b ./gcc/config/i386/libgcc-x86_64-glibc.ver 2740762784b ./gcc/config/i386/linux-aout.h ! 1734112220b ./gcc/config/i386/linux.h ! 1143030283b ./gcc/config/i386/linux64.h 2085036314b ./gcc/config/i386/lynx-ng.h + 4257006542b ./gcc/config/i386/lynx.h 720171487b ./gcc/config/i386/mach.h 2356303309b ./gcc/config/i386/mingw32.h ! 792087563b ./gcc/config/i386/mmintrin.h 2276904589b ./gcc/config/i386/moss.h 1701064821b ./gcc/config/i386/netbsd-elf.h 4058916110b ./gcc/config/i386/netbsd.h + 1802874307b ./gcc/config/i386/netbsd64.h 3368473133b ./gcc/config/i386/netware.h 1680355485b ./gcc/config/i386/openbsd.h 3736205979b ./gcc/config/i386/pentium.md + 2175093847b ./gcc/config/i386/pmmintrin.h 3476241273b ./gcc/config/i386/ppro.md 1986050166b ./gcc/config/i386/ptx4-i.h 574801934b ./gcc/config/i386/rtemself.h *************** *** 1994,2002 **** 4008317666b ./gcc/config/i386/sol2-cn.asm 2045686122b ./gcc/config/i386/sol2-gc1.asm 3525567971b ./gcc/config/i386/sol2.h 2491384943b ./gcc/config/i386/svr3dbx.h 4076081204b ./gcc/config/i386/svr3gas.h - 3846064431b ./gcc/config/i386/svr3.ifile 1523044645b ./gcc/config/i386/svr3z.ifile 139630777b ./gcc/config/i386/sysv3.h 1152040164b ./gcc/config/i386/sysv4-cpp.h --- 2034,2042 ---- 4008317666b ./gcc/config/i386/sol2-cn.asm 2045686122b ./gcc/config/i386/sol2-gc1.asm 3525567971b ./gcc/config/i386/sol2.h + 3846064431b ./gcc/config/i386/svr3.ifile 2491384943b ./gcc/config/i386/svr3dbx.h 4076081204b ./gcc/config/i386/svr3gas.h 1523044645b ./gcc/config/i386/svr3z.ifile 139630777b ./gcc/config/i386/sysv3.h 1152040164b ./gcc/config/i386/sysv4-cpp.h *************** *** 2032,2046 **** 3902343879b ./gcc/config/i386/xm-djgpp.h 3631826497b ./gcc/config/i386/xm-i386-interix.h 92688945b ./gcc/config/i386/xm-mingw32.h - 2685510744b ./gcc/config/i386/xmmintrin.h 3684275717b ./gcc/config/i386/xm-vsta.h ! 1340742553b ./gcc/config/i960/i960.c 3455814797b ./gcc/config/i960/i960-c.c 3384279950b ./gcc/config/i960/i960-coff.h - 283530641b ./gcc/config/i960/i960.h - 3878035903b ./gcc/config/i960/i960.md 1168116397b ./gcc/config/i960/i960-modes.def 2301317945b ./gcc/config/i960/i960-protos.h 1281966645b ./gcc/config/i960/rtems.h 2106185496b ./gcc/config/i960/t-960bare 3631800738b ./gcc/config/i960/t-vxworks960 --- 2072,2086 ---- 3902343879b ./gcc/config/i386/xm-djgpp.h 3631826497b ./gcc/config/i386/xm-i386-interix.h 92688945b ./gcc/config/i386/xm-mingw32.h 3684275717b ./gcc/config/i386/xm-vsta.h ! 551915097b ./gcc/config/i386/xmmintrin.h 3455814797b ./gcc/config/i960/i960-c.c 3384279950b ./gcc/config/i960/i960-coff.h 1168116397b ./gcc/config/i960/i960-modes.def 2301317945b ./gcc/config/i960/i960-protos.h + 1340742553b ./gcc/config/i960/i960.c + 283530641b ./gcc/config/i960/i960.h + 3878035903b ./gcc/config/i960/i960.md 1281966645b ./gcc/config/i960/rtems.h 2106185496b ./gcc/config/i960/t-960bare 3631800738b ./gcc/config/i960/t-vxworks960 *************** *** 2055,2072 **** 1650540400b ./gcc/config/ia64/elf.h 2446839914b ./gcc/config/ia64/fde-glibc.c 2020318486b ./gcc/config/ia64/freebsd.h ! 145205945b ./gcc/config/ia64/hpux.h 3568056609b ./gcc/config/ia64/hpux_longdouble.h - 3496380550b ./gcc/config/ia64/ia64.c 1964471896b ./gcc/config/ia64/ia64-c.c - 776147292b ./gcc/config/ia64/ia64.h - 511545686b ./gcc/config/ia64/ia64intrin.h - 2724938558b ./gcc/config/ia64/ia64.md 342783782b ./gcc/config/ia64/ia64-modes.def 3227157966b ./gcc/config/ia64/ia64-protos.h 3488320870b ./gcc/config/ia64/lib1funcs.asm 2632266533b ./gcc/config/ia64/libgcc-ia64.ver ! 3882388711b ./gcc/config/ia64/linux.h 3940638341b ./gcc/config/ia64/quadlib.c 4206796904b ./gcc/config/ia64/sysv4.h 3165145488b ./gcc/config/ia64/t-aix --- 2095,2112 ---- 1650540400b ./gcc/config/ia64/elf.h 2446839914b ./gcc/config/ia64/fde-glibc.c 2020318486b ./gcc/config/ia64/freebsd.h ! 89320936b ./gcc/config/ia64/hpux.h 3568056609b ./gcc/config/ia64/hpux_longdouble.h 1964471896b ./gcc/config/ia64/ia64-c.c 342783782b ./gcc/config/ia64/ia64-modes.def 3227157966b ./gcc/config/ia64/ia64-protos.h + 2795822269b ./gcc/config/ia64/ia64.c + 1078623376b ./gcc/config/ia64/ia64.h + 3224577197b ./gcc/config/ia64/ia64.md + 2966325857b ./gcc/config/ia64/ia64intrin.h 3488320870b ./gcc/config/ia64/lib1funcs.asm 2632266533b ./gcc/config/ia64/libgcc-ia64.ver ! 2199665684b ./gcc/config/ia64/linux.h 3940638341b ./gcc/config/ia64/quadlib.c 4206796904b ./gcc/config/ia64/sysv4.h 3165145488b ./gcc/config/ia64/t-aix *************** *** 2074,2113 **** 1051208108b ./gcc/config/ia64/t-hpux 308156643b ./gcc/config/ia64/t-ia64 2759923269b ./gcc/config/ia64/unwind-aix.c ! 1278555130b ./gcc/config/ia64/unwind-ia64.c 2355075302b ./gcc/config/ia64/unwind-ia64.h ! 1745697809b ./gcc/config.in 3221870490b ./gcc/config/interix3.h - 782966245b ./gcc/config/interix.h 1877317600b ./gcc/config/ip2k/crt0.S 2273505501b ./gcc/config/ip2k/ip2k.c 379096003b ./gcc/config/ip2k/ip2k.h 3634264842b ./gcc/config/ip2k/ip2k.md - 2278252724b ./gcc/config/ip2k/ip2k-protos.h 3381820128b ./gcc/config/ip2k/libgcc.S 3899189512b ./gcc/config/ip2k/t-ip2k 3774321010b ./gcc/config/libgcc-glibc.ver 431681775b ./gcc/config/libgloss.h 1132125030b ./gcc/config/linux-aout.h 3480817898b ./gcc/config/linux.h - 836960090b ./gcc/config/lynx.h 1696444785b ./gcc/config/lynx-ng.h 2460604231b ./gcc/config/m32r/initfini.c 3082370632b ./gcc/config/m32r/m32r.c 582485384b ./gcc/config/m32r/m32r.h 3253973863b ./gcc/config/m32r/m32r.md - 4238084767b ./gcc/config/m32r/m32r-protos.h 3043182144b ./gcc/config/m32r/t-m32r 2563624329b ./gcc/config/m68hc11/larith.asm - 3705868201b ./gcc/config/m68hc11/m68hc11.c 763404077b ./gcc/config/m68hc11/m68hc11-crt0.S 1421065453b ./gcc/config/m68hc11/m68hc11.h 2108112324b ./gcc/config/m68hc11/m68hc11.md - 3203494610b ./gcc/config/m68hc11/m68hc11-protos.h 900567272b ./gcc/config/m68hc11/m68hc12.h 414967778b ./gcc/config/m68hc11/t-m68hc11-gas - 4152566641b ./gcc/config/m68k/3b1g.h 950165799b ./gcc/config/m68k/3b1.h 3699861513b ./gcc/config/m68k/amix.h 407639156b ./gcc/config/m68k/atari.h 2332207756b ./gcc/config/m68k/ccur-GAS.h --- 2114,2152 ---- 1051208108b ./gcc/config/ia64/t-hpux 308156643b ./gcc/config/ia64/t-ia64 2759923269b ./gcc/config/ia64/unwind-aix.c ! 2016093184b ./gcc/config/ia64/unwind-ia64.c 2355075302b ./gcc/config/ia64/unwind-ia64.h ! 4115959553b ./gcc/config/interix.h 3221870490b ./gcc/config/interix3.h 1877317600b ./gcc/config/ip2k/crt0.S + 2278252724b ./gcc/config/ip2k/ip2k-protos.h 2273505501b ./gcc/config/ip2k/ip2k.c 379096003b ./gcc/config/ip2k/ip2k.h 3634264842b ./gcc/config/ip2k/ip2k.md 3381820128b ./gcc/config/ip2k/libgcc.S 3899189512b ./gcc/config/ip2k/t-ip2k 3774321010b ./gcc/config/libgcc-glibc.ver 431681775b ./gcc/config/libgloss.h 1132125030b ./gcc/config/linux-aout.h 3480817898b ./gcc/config/linux.h 1696444785b ./gcc/config/lynx-ng.h + 836960090b ./gcc/config/lynx.h 2460604231b ./gcc/config/m32r/initfini.c + 4238084767b ./gcc/config/m32r/m32r-protos.h 3082370632b ./gcc/config/m32r/m32r.c 582485384b ./gcc/config/m32r/m32r.h 3253973863b ./gcc/config/m32r/m32r.md 3043182144b ./gcc/config/m32r/t-m32r 2563624329b ./gcc/config/m68hc11/larith.asm 763404077b ./gcc/config/m68hc11/m68hc11-crt0.S + 3203494610b ./gcc/config/m68hc11/m68hc11-protos.h + 3705868201b ./gcc/config/m68hc11/m68hc11.c 1421065453b ./gcc/config/m68hc11/m68hc11.h 2108112324b ./gcc/config/m68hc11/m68hc11.md 900567272b ./gcc/config/m68hc11/m68hc12.h 414967778b ./gcc/config/m68hc11/t-m68hc11-gas 950165799b ./gcc/config/m68k/3b1.h + 4152566641b ./gcc/config/m68k/3b1g.h 3699861513b ./gcc/config/m68k/amix.h 407639156b ./gcc/config/m68k/atari.h 2332207756b ./gcc/config/m68k/ccur-GAS.h *************** *** 2117,2143 **** 4181788584b ./gcc/config/m68k/crtn.s 2518640661b ./gcc/config/m68k/fpgnulib.c 835972293b ./gcc/config/m68k/hp2bsd.h - 2008864906b ./gcc/config/m68k/hp310g.h 2184215546b ./gcc/config/m68k/hp310.h ! 2880102244b ./gcc/config/m68k/hp320g.h 3937265644b ./gcc/config/m68k/hp320.h ! 724663990b ./gcc/config/m68k/hp3bsd44.h 2670392370b ./gcc/config/m68k/hp3bsd.h 2864047424b ./gcc/config/m68k/hpux7.h 704862081b ./gcc/config/m68k/lb1sf68.asm 1561647958b ./gcc/config/m68k/linux-aout.h ! 753548289b ./gcc/config/m68k/linux.h 3379792683b ./gcc/config/m68k/m68020-elf.h 1327537006b ./gcc/config/m68k/m68k-aout.h - 2980964013b ./gcc/config/m68k/m68k.c 3882947461b ./gcc/config/m68k/m68k-coff.h - 2319834314b ./gcc/config/m68k/m68kelf.h - 1120822994b ./gcc/config/m68k/m68kemb.h - 2362160659b ./gcc/config/m68k/m68k.h - 1138622429b ./gcc/config/m68k/m68k.md 3855098247b ./gcc/config/m68k/m68k-none.h 3524361138b ./gcc/config/m68k/m68k-protos.h 1109594909b ./gcc/config/m68k/m68k-psos.h 2697287693b ./gcc/config/m68k/m68kv4.h 3047408322b ./gcc/config/m68k/math-68881.h 1902334218b ./gcc/config/m68k/mot3300-crt0.S --- 2156,2182 ---- 4181788584b ./gcc/config/m68k/crtn.s 2518640661b ./gcc/config/m68k/fpgnulib.c 835972293b ./gcc/config/m68k/hp2bsd.h 2184215546b ./gcc/config/m68k/hp310.h ! 2008864906b ./gcc/config/m68k/hp310g.h 3937265644b ./gcc/config/m68k/hp320.h ! 2880102244b ./gcc/config/m68k/hp320g.h 2670392370b ./gcc/config/m68k/hp3bsd.h + 724663990b ./gcc/config/m68k/hp3bsd44.h 2864047424b ./gcc/config/m68k/hpux7.h 704862081b ./gcc/config/m68k/lb1sf68.asm 1561647958b ./gcc/config/m68k/linux-aout.h ! 2094168098b ./gcc/config/m68k/linux.h 3379792683b ./gcc/config/m68k/m68020-elf.h 1327537006b ./gcc/config/m68k/m68k-aout.h 3882947461b ./gcc/config/m68k/m68k-coff.h 3855098247b ./gcc/config/m68k/m68k-none.h 3524361138b ./gcc/config/m68k/m68k-protos.h 1109594909b ./gcc/config/m68k/m68k-psos.h + 2980964013b ./gcc/config/m68k/m68k.c + 2362160659b ./gcc/config/m68k/m68k.h + 1138622429b ./gcc/config/m68k/m68k.md + 2319834314b ./gcc/config/m68k/m68kelf.h + 1120822994b ./gcc/config/m68k/m68kemb.h 2697287693b ./gcc/config/m68k/m68kv4.h 3047408322b ./gcc/config/m68k/math-68881.h 1902334218b ./gcc/config/m68k/mot3300-crt0.S *************** *** 2154,2161 **** 2831407670b ./gcc/config/m68k/sun2o4.h 1923166176b ./gcc/config/m68k/sun3.h 3724598161b ./gcc/config/m68k/sun3mach.h - 864417723b ./gcc/config/m68k/sun3n3.h 120628064b ./gcc/config/m68k/sun3n.h 2298299278b ./gcc/config/m68k/sun3o3.h 2957852228b ./gcc/config/m68k/t-crtstuff 1845413337b ./gcc/config/m68k/t-hp320 --- 2193,2200 ---- 2831407670b ./gcc/config/m68k/sun2o4.h 1923166176b ./gcc/config/m68k/sun3.h 3724598161b ./gcc/config/m68k/sun3mach.h 120628064b ./gcc/config/m68k/sun3n.h + 864417723b ./gcc/config/m68k/sun3n3.h 2298299278b ./gcc/config/m68k/sun3o3.h 2957852228b ./gcc/config/m68k/t-crtstuff 1845413337b ./gcc/config/m68k/t-hp320 *************** *** 2168,2186 **** 505153656b ./gcc/config/m68k/t-mot3300-gas 2294965883b ./gcc/config/m68k/t-mot3300-gld 3937644742b ./gcc/config/m68k/t-openbsd - 888720875b ./gcc/config/m68k/tower-as.h - 2265492461b ./gcc/config/m68k/tower.h 1448405083b ./gcc/config/m68k/t-rtems 2710264317b ./gcc/config/m68k/t-vxworks68 1353236462b ./gcc/config/m68k/vxm68k.h 1448728884b ./gcc/config/m88k/aout-dbx.h 814579860b ./gcc/config/m88k/m88k-aout.h - 2923906961b ./gcc/config/m88k/m88k.c - 3578315082b ./gcc/config/m88k/m88k.h - 1160618394b ./gcc/config/m88k/m88k.md 2226816021b ./gcc/config/m88k/m88k-modes.def 2517732507b ./gcc/config/m88k/m88k-move.sh 491055328b ./gcc/config/m88k/m88k-protos.h 2690751438b ./gcc/config/m88k/openbsd.h 2064243939b ./gcc/config/m88k/sysv4.h 2294317049b ./gcc/config/m88k/t-luna --- 2207,2225 ---- 505153656b ./gcc/config/m68k/t-mot3300-gas 2294965883b ./gcc/config/m68k/t-mot3300-gld 3937644742b ./gcc/config/m68k/t-openbsd 1448405083b ./gcc/config/m68k/t-rtems 2710264317b ./gcc/config/m68k/t-vxworks68 + 888720875b ./gcc/config/m68k/tower-as.h + 2265492461b ./gcc/config/m68k/tower.h 1353236462b ./gcc/config/m68k/vxm68k.h 1448728884b ./gcc/config/m88k/aout-dbx.h 814579860b ./gcc/config/m88k/m88k-aout.h 2226816021b ./gcc/config/m88k/m88k-modes.def 2517732507b ./gcc/config/m88k/m88k-move.sh 491055328b ./gcc/config/m88k/m88k-protos.h + 2923906961b ./gcc/config/m88k/m88k.c + 3578315082b ./gcc/config/m88k/m88k.h + 1160618394b ./gcc/config/m88k/m88k.md 2690751438b ./gcc/config/m88k/openbsd.h 2064243939b ./gcc/config/m88k/sysv4.h 2294317049b ./gcc/config/m88k/t-luna *************** *** 2191,2235 **** 3021138350b ./gcc/config/mcore/crtn.asm 3514021936b ./gcc/config/mcore/gfloat.h 3510059529b ./gcc/config/mcore/lib1.asm - 3015468298b ./gcc/config/mcore/mcore.c 3525073614b ./gcc/config/mcore/mcore-elf.h - 1860330775b ./gcc/config/mcore/mcore.h - 2494707438b ./gcc/config/mcore/mcore.md 3932339189b ./gcc/config/mcore/mcore-pe.h ! 1929010568b ./gcc/config/mcore/mcore-protos.h 1343396749b ./gcc/config/mcore/t-mcore 3157111889b ./gcc/config/mcore/t-mcore-pe 526658279b ./gcc/config/mips/5400.md 3343843219b ./gcc/config/mips/5500.md 930726788b ./gcc/config/mips/cross64.h 1227388398b ./gcc/config/mips/crti.asm 184329613b ./gcc/config/mips/crtn.asm 3246369176b ./gcc/config/mips/dbxmdebug.h - 489357128b ./gcc/config/mips/elf64.h 1664872088b ./gcc/config/mips/elf.h 4210328521b ./gcc/config/mips/elforion.h 2770872793b ./gcc/config/mips/iris3.h 3161243087b ./gcc/config/mips/iris4.h - 2484360049b ./gcc/config/mips/iris5gas.h 1890953057b ./gcc/config/mips/iris5.h ! 1743286067b ./gcc/config/mips/iris6gld.h ! 3983539867b ./gcc/config/mips/iris6.h 1379341701b ./gcc/config/mips/iris6-o32-as.h 1057753556b ./gcc/config/mips/iris6-o32-gas.h 1584241356b ./gcc/config/mips/iris6-o32.h 3658812670b ./gcc/config/mips/irix6-libc-compat.c ! 4097126978b ./gcc/config/mips/linux.h ! 2024693888b ./gcc/config/mips/mips16.S 3380342822b ./gcc/config/mips/mips.c 2942767704b ./gcc/config/mips/mips.h 673414041b ./gcc/config/mips/mips.md ! 4197939422b ./gcc/config/mips/mips-protos.h 405403345b ./gcc/config/mips/netbsd.h 391873849b ./gcc/config/mips/openbsd-be.h 3247383226b ./gcc/config/mips/openbsd.h 513268154b ./gcc/config/mips/r3900.h - 1571389171b ./gcc/config/mips/rtems64.h 1600925076b ./gcc/config/mips/rtems.h 1275620168b ./gcc/config/mips/sni-gas.h 3908832052b ./gcc/config/mips/sni-svr4.h 215042761b ./gcc/config/mips/sr71k.md --- 2230,2275 ---- 3021138350b ./gcc/config/mcore/crtn.asm 3514021936b ./gcc/config/mcore/gfloat.h 3510059529b ./gcc/config/mcore/lib1.asm 3525073614b ./gcc/config/mcore/mcore-elf.h 3932339189b ./gcc/config/mcore/mcore-pe.h ! 1034717961b ./gcc/config/mcore/mcore-protos.h ! 1137017935b ./gcc/config/mcore/mcore.c ! 832147748b ./gcc/config/mcore/mcore.h ! 2657428975b ./gcc/config/mcore/mcore.md 1343396749b ./gcc/config/mcore/t-mcore 3157111889b ./gcc/config/mcore/t-mcore-pe 526658279b ./gcc/config/mips/5400.md 3343843219b ./gcc/config/mips/5500.md + 373382813b ./gcc/config/mips/_tilib.c 930726788b ./gcc/config/mips/cross64.h 1227388398b ./gcc/config/mips/crti.asm 184329613b ./gcc/config/mips/crtn.asm 3246369176b ./gcc/config/mips/dbxmdebug.h 1664872088b ./gcc/config/mips/elf.h + 489357128b ./gcc/config/mips/elf64.h 4210328521b ./gcc/config/mips/elforion.h 2770872793b ./gcc/config/mips/iris3.h 3161243087b ./gcc/config/mips/iris4.h 1890953057b ./gcc/config/mips/iris5.h ! 2484360049b ./gcc/config/mips/iris5gas.h 1379341701b ./gcc/config/mips/iris6-o32-as.h 1057753556b ./gcc/config/mips/iris6-o32-gas.h 1584241356b ./gcc/config/mips/iris6-o32.h + 3983539867b ./gcc/config/mips/iris6.h + 1743286067b ./gcc/config/mips/iris6gld.h 3658812670b ./gcc/config/mips/irix6-libc-compat.c ! 1675872610b ./gcc/config/mips/linux.h ! 4197939422b ./gcc/config/mips/mips-protos.h 3380342822b ./gcc/config/mips/mips.c 2942767704b ./gcc/config/mips/mips.h 673414041b ./gcc/config/mips/mips.md ! 2024693888b ./gcc/config/mips/mips16.S 405403345b ./gcc/config/mips/netbsd.h 391873849b ./gcc/config/mips/openbsd-be.h 3247383226b ./gcc/config/mips/openbsd.h 513268154b ./gcc/config/mips/r3900.h 1600925076b ./gcc/config/mips/rtems.h + 1571389171b ./gcc/config/mips/rtems64.h 1275620168b ./gcc/config/mips/sni-gas.h 3908832052b ./gcc/config/mips/sni-svr4.h 215042761b ./gcc/config/mips/sr71k.md *************** *** 2237,2243 **** 3731674899b ./gcc/config/mips/t-ecoff 2711887540b ./gcc/config/mips/t-elf 2701118387b ./gcc/config/mips/t-gofast - 373382813b ./gcc/config/mips/_tilib.c 2896429436b ./gcc/config/mips/t-iris 3150583838b ./gcc/config/mips/t-iris5-6 2253279697b ./gcc/config/mips/t-iris5-as --- 2277,2282 ---- *************** *** 2254,2317 **** 3454112118b ./gcc/config/mips/xm-iris5.h 1256346916b ./gcc/config/mmix/crti.asm 4149276856b ./gcc/config/mmix/crtn.asm 3056375389b ./gcc/config/mmix/mmix.c 2979287903b ./gcc/config/mmix/mmix.h 2332454758b ./gcc/config/mmix/mmix.md - 3695780430b ./gcc/config/mmix/mmix-modes.def - 1739297186b ./gcc/config/mmix/mmix-protos.h 2544911756b ./gcc/config/mmix/t-mmix 38698671b ./gcc/config/mn10200/lib1funcs.asm 3768163681b ./gcc/config/mn10200/mn10200.c 1348550779b ./gcc/config/mn10200/mn10200.h 1601326717b ./gcc/config/mn10200/mn10200.md - 4029388596b ./gcc/config/mn10200/mn10200-protos.h 2767557893b ./gcc/config/mn10200/t-mn10200 278523869b ./gcc/config/mn10300/mn10300.c 1667691994b ./gcc/config/mn10300/mn10300.h 3287195528b ./gcc/config/mn10300/mn10300.md - 1573606752b ./gcc/config/mn10300/mn10300-protos.h 3295955402b ./gcc/config/mn10300/t-mn10300 3492004077b ./gcc/config/netbsd-aout.h 2406981515b ./gcc/config/netbsd-elf.h 1701673410b ./gcc/config/netbsd.h 621398283b ./gcc/config/netware.h 3408818866b ./gcc/config/ns32k/netbsd.h 1927659146b ./gcc/config/ns32k/ns32k.c 406227706b ./gcc/config/ns32k/ns32k.h 1692887503b ./gcc/config/ns32k/ns32k.md - 1708247420b ./gcc/config/ns32k/ns32k-protos.h 4229357330b ./gcc/config/ns32k/t-ns32k - 1380708403b ./gcc/config/ns32k/__unorddf2.c - 4035660070b ./gcc/config/ns32k/__unordsf2.c - 4192993745b ./gcc/config/openbsd.h 3737584717b ./gcc/config/openbsd-oldgas.h 481445295b ./gcc/config/pa/elf.h 2599819123b ./gcc/config/pa/fptr.c 454965220b ./gcc/config/pa/lib2funcs.asm 3163635737b ./gcc/config/pa/long_double.h 446221591b ./gcc/config/pa/milli64.S - 2968109913b ./gcc/config/pa/pa32-linux.h - 4077989132b ./gcc/config/pa/pa32-regs.h 1229145373b ./gcc/config/pa/pa-64.h - 1058350505b ./gcc/config/pa/pa64-hpux.h - 2920878761b ./gcc/config/pa/pa64-linux.h - 653142328b ./gcc/config/pa/pa64-regs.h - 3813586304b ./gcc/config/pa/pa64-start.h - 1461752469b ./gcc/config/pa/pa.c - 921995916b ./gcc/config/pa/pa.h 3786607524b ./gcc/config/pa/pa-hiux.h 3365446155b ./gcc/config/pa/pa-hpux10.h 1196664519b ./gcc/config/pa/pa-hpux11.h 1833709162b ./gcc/config/pa/pa-hpux7.h 3124002443b ./gcc/config/pa/pa-hpux9.h - 605433968b ./gcc/config/pa/pa-hpux.h 469628573b ./gcc/config/pa/pa-linux.h - 1569454373b ./gcc/config/pa/pa.md 1508149926b ./gcc/config/pa/pa-modes.def 3618123809b ./gcc/config/pa/pa-oldas.h 2438052750b ./gcc/config/pa/pa-osf.h 1438700001b ./gcc/config/pa/pa-pro-end.h 2077118199b ./gcc/config/pa/pa-protos.h 710975505b ./gcc/config/pa/quadlib.c 232001645b ./gcc/config/pa/rtems.h 4119006164b ./gcc/config/pa/som.h --- 2293,2356 ---- 3454112118b ./gcc/config/mips/xm-iris5.h 1256346916b ./gcc/config/mmix/crti.asm 4149276856b ./gcc/config/mmix/crtn.asm + 3695780430b ./gcc/config/mmix/mmix-modes.def + 1739297186b ./gcc/config/mmix/mmix-protos.h 3056375389b ./gcc/config/mmix/mmix.c 2979287903b ./gcc/config/mmix/mmix.h 2332454758b ./gcc/config/mmix/mmix.md 2544911756b ./gcc/config/mmix/t-mmix 38698671b ./gcc/config/mn10200/lib1funcs.asm + 4029388596b ./gcc/config/mn10200/mn10200-protos.h 3768163681b ./gcc/config/mn10200/mn10200.c 1348550779b ./gcc/config/mn10200/mn10200.h 1601326717b ./gcc/config/mn10200/mn10200.md 2767557893b ./gcc/config/mn10200/t-mn10200 + 1573606752b ./gcc/config/mn10300/mn10300-protos.h 278523869b ./gcc/config/mn10300/mn10300.c 1667691994b ./gcc/config/mn10300/mn10300.h 3287195528b ./gcc/config/mn10300/mn10300.md 3295955402b ./gcc/config/mn10300/t-mn10300 3492004077b ./gcc/config/netbsd-aout.h 2406981515b ./gcc/config/netbsd-elf.h 1701673410b ./gcc/config/netbsd.h 621398283b ./gcc/config/netware.h + 1380708403b ./gcc/config/ns32k/__unorddf2.c + 4035660070b ./gcc/config/ns32k/__unordsf2.c 3408818866b ./gcc/config/ns32k/netbsd.h + 1708247420b ./gcc/config/ns32k/ns32k-protos.h 1927659146b ./gcc/config/ns32k/ns32k.c 406227706b ./gcc/config/ns32k/ns32k.h 1692887503b ./gcc/config/ns32k/ns32k.md 4229357330b ./gcc/config/ns32k/t-ns32k 3737584717b ./gcc/config/openbsd-oldgas.h + 4192993745b ./gcc/config/openbsd.h 481445295b ./gcc/config/pa/elf.h 2599819123b ./gcc/config/pa/fptr.c 454965220b ./gcc/config/pa/lib2funcs.asm 3163635737b ./gcc/config/pa/long_double.h 446221591b ./gcc/config/pa/milli64.S 1229145373b ./gcc/config/pa/pa-64.h 3786607524b ./gcc/config/pa/pa-hiux.h + 605433968b ./gcc/config/pa/pa-hpux.h 3365446155b ./gcc/config/pa/pa-hpux10.h 1196664519b ./gcc/config/pa/pa-hpux11.h 1833709162b ./gcc/config/pa/pa-hpux7.h 3124002443b ./gcc/config/pa/pa-hpux9.h 469628573b ./gcc/config/pa/pa-linux.h 1508149926b ./gcc/config/pa/pa-modes.def 3618123809b ./gcc/config/pa/pa-oldas.h 2438052750b ./gcc/config/pa/pa-osf.h 1438700001b ./gcc/config/pa/pa-pro-end.h 2077118199b ./gcc/config/pa/pa-protos.h + 1461752469b ./gcc/config/pa/pa.c + 921995916b ./gcc/config/pa/pa.h + 1569454373b ./gcc/config/pa/pa.md + 2968109913b ./gcc/config/pa/pa32-linux.h + 4077989132b ./gcc/config/pa/pa32-regs.h + 1058350505b ./gcc/config/pa/pa64-hpux.h + 2920878761b ./gcc/config/pa/pa64-linux.h + 653142328b ./gcc/config/pa/pa64-regs.h + 3813586304b ./gcc/config/pa/pa64-start.h 710975505b ./gcc/config/pa/quadlib.c 232001645b ./gcc/config/pa/rtems.h 4119006164b ./gcc/config/pa/som.h *************** *** 2322,2390 **** 3127053933b ./gcc/config/pa/t-linux64 1211178790b ./gcc/config/pa/t-mpeix 3597581162b ./gcc/config/pa/t-pa - 4115616919b ./gcc/config/pa/t-pa64 2754633370b ./gcc/config/pa/t-pa-hpux 817714064b ./gcc/config/pa/t-pro 2014893074b ./gcc/config/pa/x-ada 4118902235b ./gcc/config/pdp11/2bsd.h 4146554778b ./gcc/config/pdp11/pdp11.c 3331219601b ./gcc/config/pdp11/pdp11.h 205132985b ./gcc/config/pdp11/pdp11.md - 2255762635b ./gcc/config/pdp11/pdp11-modes.def - 1678731791b ./gcc/config/pdp11/pdp11-protos.h 2346269274b ./gcc/config/pdp11/t-pdp11 1282778420b ./gcc/config/psos.h 1534158272b ./gcc/config/ptx4.h ! 3917072699b ./gcc/config/README 4279253212b ./gcc/config/romp/romp.c 4167579613b ./gcc/config/romp/romp.h 4096557609b ./gcc/config/romp/romp.md ! 1229374838b ./gcc/config/romp/romp-protos.h 3436640225b ./gcc/config/rs6000/aix31.h 2741987967b ./gcc/config/rs6000/aix3newas.h 2369811082b ./gcc/config/rs6000/aix41.h 3414143559b ./gcc/config/rs6000/aix43.h 4162957869b ./gcc/config/rs6000/aix51.h 3058334962b ./gcc/config/rs6000/aix52.h - 4220070344b ./gcc/config/rs6000/aix.h 1953946692b ./gcc/config/rs6000/altivec-defs.h ! 1917820999b ./gcc/config/rs6000/altivec.h ! 3171179683b ./gcc/config/rs6000/altivec.md 944517579b ./gcc/config/rs6000/beos.h 511519789b ./gcc/config/rs6000/crtsavres.asm - 1250348227b ./gcc/config/rs6000/darwin.h 2580871176b ./gcc/config/rs6000/darwin-tramp.asm ! 2850637315b ./gcc/config/rs6000/eabiaix.h ! 1991998428b ./gcc/config/rs6000/eabialtivec.h ! 1237235856b ./gcc/config/rs6000/eabi.asm 383867253b ./gcc/config/rs6000/eabi-ci.asm 3758141774b ./gcc/config/rs6000/eabi-cn.asm 3857080442b ./gcc/config/rs6000/eabi.h 2914196204b ./gcc/config/rs6000/eabisim.h 3977992822b ./gcc/config/rs6000/eabispe.h 2165084479b ./gcc/config/rs6000/freebsd.h 977386394b ./gcc/config/rs6000/gnu.h ! 1412389761b ./gcc/config/rs6000/linux64.h 1351560312b ./gcc/config/rs6000/linuxaltivec.h - 1443196669b ./gcc/config/rs6000/linux.h 1826004816b ./gcc/config/rs6000/lynx.h 662544262b ./gcc/config/rs6000/mach.h 1820610909b ./gcc/config/rs6000/milli.exp 3596315410b ./gcc/config/rs6000/netbsd.h - 1801910688b ./gcc/config/rs6000/ppc64-fp.c 1765497648b ./gcc/config/rs6000/ppc-asm.h ! 3209769093b ./gcc/config/rs6000/rs6000.c 1345436052b ./gcc/config/rs6000/rs6000-c.c - 3590135572b ./gcc/config/rs6000/rs6000.h - 1596117806b ./gcc/config/rs6000/rs6000.md 3173719444b ./gcc/config/rs6000/rs6000-modes.def 528775605b ./gcc/config/rs6000/rs6000-protos.h 255651415b ./gcc/config/rs6000/rtems.h 3703627966b ./gcc/config/rs6000/sol-ci.asm 3016810975b ./gcc/config/rs6000/sol-cn.asm 1152541462b ./gcc/config/rs6000/spe.h 1909067452b ./gcc/config/rs6000/spe.md ! 2720576646b ./gcc/config/rs6000/sysv4.h 1653865007b ./gcc/config/rs6000/sysv4le.h 2203981804b ./gcc/config/rs6000/t-aix43 4039940345b ./gcc/config/rs6000/t-aix52 --- 2361,2428 ---- 3127053933b ./gcc/config/pa/t-linux64 1211178790b ./gcc/config/pa/t-mpeix 3597581162b ./gcc/config/pa/t-pa 2754633370b ./gcc/config/pa/t-pa-hpux + 4115616919b ./gcc/config/pa/t-pa64 817714064b ./gcc/config/pa/t-pro 2014893074b ./gcc/config/pa/x-ada 4118902235b ./gcc/config/pdp11/2bsd.h + 2255762635b ./gcc/config/pdp11/pdp11-modes.def + 1678731791b ./gcc/config/pdp11/pdp11-protos.h 4146554778b ./gcc/config/pdp11/pdp11.c 3331219601b ./gcc/config/pdp11/pdp11.h 205132985b ./gcc/config/pdp11/pdp11.md 2346269274b ./gcc/config/pdp11/t-pdp11 1282778420b ./gcc/config/psos.h 1534158272b ./gcc/config/ptx4.h ! 1229374838b ./gcc/config/romp/romp-protos.h 4279253212b ./gcc/config/romp/romp.c 4167579613b ./gcc/config/romp/romp.h 4096557609b ./gcc/config/romp/romp.md ! 4220070344b ./gcc/config/rs6000/aix.h 3436640225b ./gcc/config/rs6000/aix31.h 2741987967b ./gcc/config/rs6000/aix3newas.h 2369811082b ./gcc/config/rs6000/aix41.h 3414143559b ./gcc/config/rs6000/aix43.h 4162957869b ./gcc/config/rs6000/aix51.h 3058334962b ./gcc/config/rs6000/aix52.h 1953946692b ./gcc/config/rs6000/altivec-defs.h ! 3249293069b ./gcc/config/rs6000/altivec.h ! 2123046300b ./gcc/config/rs6000/altivec.md 944517579b ./gcc/config/rs6000/beos.h 511519789b ./gcc/config/rs6000/crtsavres.asm 2580871176b ./gcc/config/rs6000/darwin-tramp.asm ! 1250348227b ./gcc/config/rs6000/darwin.h 383867253b ./gcc/config/rs6000/eabi-ci.asm 3758141774b ./gcc/config/rs6000/eabi-cn.asm + 1237235856b ./gcc/config/rs6000/eabi.asm 3857080442b ./gcc/config/rs6000/eabi.h + 2850637315b ./gcc/config/rs6000/eabiaix.h + 1991998428b ./gcc/config/rs6000/eabialtivec.h 2914196204b ./gcc/config/rs6000/eabisim.h 3977992822b ./gcc/config/rs6000/eabispe.h 2165084479b ./gcc/config/rs6000/freebsd.h 977386394b ./gcc/config/rs6000/gnu.h ! 2347723759b ./gcc/config/rs6000/linux.h ! 189817169b ./gcc/config/rs6000/linux64.h 1351560312b ./gcc/config/rs6000/linuxaltivec.h 1826004816b ./gcc/config/rs6000/lynx.h 662544262b ./gcc/config/rs6000/mach.h 1820610909b ./gcc/config/rs6000/milli.exp 3596315410b ./gcc/config/rs6000/netbsd.h 1765497648b ./gcc/config/rs6000/ppc-asm.h ! 1801910688b ./gcc/config/rs6000/ppc64-fp.c 1345436052b ./gcc/config/rs6000/rs6000-c.c 3173719444b ./gcc/config/rs6000/rs6000-modes.def 528775605b ./gcc/config/rs6000/rs6000-protos.h + 1041172543b ./gcc/config/rs6000/rs6000.c + 3955032986b ./gcc/config/rs6000/rs6000.h + 1596117806b ./gcc/config/rs6000/rs6000.md 255651415b ./gcc/config/rs6000/rtems.h 3703627966b ./gcc/config/rs6000/sol-ci.asm 3016810975b ./gcc/config/rs6000/sol-cn.asm 1152541462b ./gcc/config/rs6000/spe.h 1909067452b ./gcc/config/rs6000/spe.md ! 2504151540b ./gcc/config/rs6000/sysv4.h 1653865007b ./gcc/config/rs6000/sysv4le.h 2203981804b ./gcc/config/rs6000/t-aix43 4039940345b ./gcc/config/rs6000/t-aix52 *************** *** 2397,2418 **** 3571256406b ./gcc/config/rs6000/t-ppcendian 365048301b ./gcc/config/rs6000/t-ppcgas 3552141086b ./gcc/config/rs6000/t-ppcos - 85679922b ./gcc/config/rs6000/tramp.asm 946774617b ./gcc/config/rs6000/t-rs6000 174540514b ./gcc/config/rs6000/t-rs6000-c-rule 3304625655b ./gcc/config/rs6000/t-rtems 2873364089b ./gcc/config/rs6000/vxppc.h 1708069305b ./gcc/config/rs6000/windiss.h 1783558965b ./gcc/config/rs6000/xcoff.h 1142085470b ./gcc/config/rtems.h 3459519933b ./gcc/config/s390/fixdfdi.h 1186498086b ./gcc/config/s390/libgcc-glibc.ver ! 3967953893b ./gcc/config/s390/linux.h ! 1273877598b ./gcc/config/s390/s390.c ! 2941523125b ./gcc/config/s390/s390.h ! 3078564823b ./gcc/config/s390/s390.md 3010749633b ./gcc/config/s390/s390-modes.def ! 1089888757b ./gcc/config/s390/s390-protos.h 3998835120b ./gcc/config/s390/s390x.h 2119089207b ./gcc/config/s390/t-crtstuff 4260873024b ./gcc/config/s390/t-linux64 --- 2435,2456 ---- 3571256406b ./gcc/config/rs6000/t-ppcendian 365048301b ./gcc/config/rs6000/t-ppcgas 3552141086b ./gcc/config/rs6000/t-ppcos 946774617b ./gcc/config/rs6000/t-rs6000 174540514b ./gcc/config/rs6000/t-rs6000-c-rule 3304625655b ./gcc/config/rs6000/t-rtems + 85679922b ./gcc/config/rs6000/tramp.asm 2873364089b ./gcc/config/rs6000/vxppc.h 1708069305b ./gcc/config/rs6000/windiss.h 1783558965b ./gcc/config/rs6000/xcoff.h 1142085470b ./gcc/config/rtems.h 3459519933b ./gcc/config/s390/fixdfdi.h 1186498086b ./gcc/config/s390/libgcc-glibc.ver ! 287768826b ./gcc/config/s390/linux.h 3010749633b ./gcc/config/s390/s390-modes.def ! 256640970b ./gcc/config/s390/s390-protos.h ! 2031787402b ./gcc/config/s390/s390.c ! 3430773218b ./gcc/config/s390/s390.h ! 1850339257b ./gcc/config/s390/s390.md 3998835120b ./gcc/config/s390/s390x.h 2119089207b ./gcc/config/s390/t-crtstuff 4260873024b ./gcc/config/s390/t-linux64 *************** *** 2423,2444 **** 3224910313b ./gcc/config/sh/elf.h 1949707998b ./gcc/config/sh/embed-elf.h 2071066204b ./gcc/config/sh/lib1funcs.asm ! 979530234b ./gcc/config/sh/linux.h 3434577439b ./gcc/config/sh/little.h ! 3344891430b ./gcc/config/sh/netbsd-elf.h ! 2022181827b ./gcc/config/sh/rtemself.h ! 1498631144b ./gcc/config/sh/rtems.h ! 2384035668b ./gcc/config/sh/sh64.h ! 2495818533b ./gcc/config/sh/sh.c 818613438b ./gcc/config/sh/sh.h ! 47786791b ./gcc/config/sh/sh.md 3656510246b ./gcc/config/sh/shmedia.h - 2501796428b ./gcc/config/sh/sh-protos.h 4192915538b ./gcc/config/sh/sshmedia.h 549411496b ./gcc/config/sh/t-be 3555569248b ./gcc/config/sh/t-elf 1397704314b ./gcc/config/sh/t-le ! 1224367083b ./gcc/config/sh/t-linux 2944701435b ./gcc/config/sh/t-monolib 2090927389b ./gcc/config/sh/t-netbsd 448959963b ./gcc/config/sh/t-netbsd-sh5 --- 2461,2483 ---- 3224910313b ./gcc/config/sh/elf.h 1949707998b ./gcc/config/sh/embed-elf.h 2071066204b ./gcc/config/sh/lib1funcs.asm ! 2535439209b ./gcc/config/sh/libgcc-glibc.ver ! 1099192225b ./gcc/config/sh/linux.h 3434577439b ./gcc/config/sh/little.h ! 369306873b ./gcc/config/sh/netbsd-elf.h ! 252295721b ./gcc/config/sh/rtems.h ! 2180360594b ./gcc/config/sh/rtemself.h ! 626627764b ./gcc/config/sh/sh-protos.h ! 3880315160b ./gcc/config/sh/sh.c 818613438b ./gcc/config/sh/sh.h ! 2307903251b ./gcc/config/sh/sh.md ! 2384035668b ./gcc/config/sh/sh64.h 3656510246b ./gcc/config/sh/shmedia.h 4192915538b ./gcc/config/sh/sshmedia.h 549411496b ./gcc/config/sh/t-be 3555569248b ./gcc/config/sh/t-elf 1397704314b ./gcc/config/sh/t-le ! 4033898766b ./gcc/config/sh/t-linux 2944701435b ./gcc/config/sh/t-monolib 2090927389b ./gcc/config/sh/t-netbsd 448959963b ./gcc/config/sh/t-netbsd-sh5 *************** *** 2446,2500 **** 441324574b ./gcc/config/sh/t-sh 3415403265b ./gcc/config/sh/t-sh64 2893164163b ./gcc/config/sh/ushmedia.h ! 2207860794b ./gcc/config/sol2.h 103179472b ./gcc/config/sparc/aout.h 3461838008b ./gcc/config/sparc/biarch64.h 1386942151b ./gcc/config/sparc/bsd.h 1479022830b ./gcc/config/sparc/crtfastmath.c 1419363945b ./gcc/config/sparc/cypress.md 54964474b ./gcc/config/sparc/elf.h ! 1767099878b ./gcc/config/sparc/freebsd.h 1390270186b ./gcc/config/sparc/gmon-sol2.c 3746795534b ./gcc/config/sparc/hal.h 3138252280b ./gcc/config/sparc/hypersparc.md 2939495704b ./gcc/config/sparc/lb1spc.asm 1395104248b ./gcc/config/sparc/lb1spl.asm 1761187951b ./gcc/config/sparc/libgcc-sparc-glibc.ver - 890665079b ./gcc/config/sparc/linux64.h 34002579b ./gcc/config/sparc/linux-aout.h ! 3987833697b ./gcc/config/sparc/linux.h 1314010724b ./gcc/config/sparc/litecoff.h 2270102558b ./gcc/config/sparc/liteelf.h - 2424336991b ./gcc/config/sparc/lite.h - 4235090054b ./gcc/config/sparc/lynx.h 2334021382b ./gcc/config/sparc/lynx-ng.h 2980510703b ./gcc/config/sparc/netbsd-elf.h 480283694b ./gcc/config/sparc/netbsd.h 1122827784b ./gcc/config/sparc/openbsd1-64.h 1977030271b ./gcc/config/sparc/openbsd64.h - 3160524574b ./gcc/config/sparc/openbsd.h 1553479245b ./gcc/config/sparc/pbd.h 2243601282b ./gcc/config/sparc/rtemself.h 1579903847b ./gcc/config/sparc/sol2-64.h ! 3203477114b ./gcc/config/sparc/sol26-sld.h ! 1333200498b ./gcc/config/sparc/sol2-bi.h 2592132520b ./gcc/config/sparc/sol2-c1.asm 3288323690b ./gcc/config/sparc/sol2-ci.asm 2004370404b ./gcc/config/sparc/sol2-cn.asm 878755050b ./gcc/config/sparc/sol2-gas-bi.h ! 3173831404b ./gcc/config/sparc/sol2-gld-bi.h 4206582763b ./gcc/config/sparc/sol2-gld.h 1852489434b ./gcc/config/sparc/sol2.h 3918002150b ./gcc/config/sparc/sp64-aout.h 3549760155b ./gcc/config/sparc/sp64-elf.h 3128199560b ./gcc/config/sparc/sp86x-aout.h 632930923b ./gcc/config/sparc/sp86x-elf.h - 2951430128b ./gcc/config/sparc/sparc.c - 433855780b ./gcc/config/sparc/sparc.h - 113806067b ./gcc/config/sparc/sparclet.md - 1259137706b ./gcc/config/sparc/sparc.md 5497380b ./gcc/config/sparc/sparc-modes.def 2593826026b ./gcc/config/sparc/sparc-protos.h 842964351b ./gcc/config/sparc/splet.h 952337645b ./gcc/config/sparc/sun4gas.h 1795303911b ./gcc/config/sparc/sun4o3.h --- 2485,2539 ---- 441324574b ./gcc/config/sh/t-sh 3415403265b ./gcc/config/sh/t-sh64 2893164163b ./gcc/config/sh/ushmedia.h ! 1901221556b ./gcc/config/sol2.h 103179472b ./gcc/config/sparc/aout.h 3461838008b ./gcc/config/sparc/biarch64.h 1386942151b ./gcc/config/sparc/bsd.h 1479022830b ./gcc/config/sparc/crtfastmath.c 1419363945b ./gcc/config/sparc/cypress.md 54964474b ./gcc/config/sparc/elf.h ! 3237101420b ./gcc/config/sparc/freebsd.h 1390270186b ./gcc/config/sparc/gmon-sol2.c 3746795534b ./gcc/config/sparc/hal.h 3138252280b ./gcc/config/sparc/hypersparc.md 2939495704b ./gcc/config/sparc/lb1spc.asm 1395104248b ./gcc/config/sparc/lb1spl.asm 1761187951b ./gcc/config/sparc/libgcc-sparc-glibc.ver 34002579b ./gcc/config/sparc/linux-aout.h ! 3607976878b ./gcc/config/sparc/linux.h ! 2951666700b ./gcc/config/sparc/linux64.h ! 2424336991b ./gcc/config/sparc/lite.h 1314010724b ./gcc/config/sparc/litecoff.h 2270102558b ./gcc/config/sparc/liteelf.h 2334021382b ./gcc/config/sparc/lynx-ng.h + 4235090054b ./gcc/config/sparc/lynx.h 2980510703b ./gcc/config/sparc/netbsd-elf.h 480283694b ./gcc/config/sparc/netbsd.h + 3160524574b ./gcc/config/sparc/openbsd.h 1122827784b ./gcc/config/sparc/openbsd1-64.h 1977030271b ./gcc/config/sparc/openbsd64.h 1553479245b ./gcc/config/sparc/pbd.h 2243601282b ./gcc/config/sparc/rtemself.h 1579903847b ./gcc/config/sparc/sol2-64.h ! 2923078367b ./gcc/config/sparc/sol2-bi.h 2592132520b ./gcc/config/sparc/sol2-c1.asm 3288323690b ./gcc/config/sparc/sol2-ci.asm 2004370404b ./gcc/config/sparc/sol2-cn.asm 878755050b ./gcc/config/sparc/sol2-gas-bi.h ! 4065185768b ./gcc/config/sparc/sol2-gld-bi.h 4206582763b ./gcc/config/sparc/sol2-gld.h 1852489434b ./gcc/config/sparc/sol2.h + 3203477114b ./gcc/config/sparc/sol26-sld.h 3918002150b ./gcc/config/sparc/sp64-aout.h 3549760155b ./gcc/config/sparc/sp64-elf.h 3128199560b ./gcc/config/sparc/sp86x-aout.h 632930923b ./gcc/config/sparc/sp86x-elf.h 5497380b ./gcc/config/sparc/sparc-modes.def 2593826026b ./gcc/config/sparc/sparc-protos.h + 1648958243b ./gcc/config/sparc/sparc.c + 3359941887b ./gcc/config/sparc/sparc.h + 1783747926b ./gcc/config/sparc/sparc.md + 113806067b ./gcc/config/sparc/sparclet.md 842964351b ./gcc/config/sparc/splet.h 952337645b ./gcc/config/sparc/sun4gas.h 1795303911b ./gcc/config/sparc/sun4o3.h *************** *** 2520,2548 **** 1090529931b ./gcc/config/sparc/ultra1_2.md 3616257275b ./gcc/config/sparc/ultra3.md 3193374968b ./gcc/config/sparc/vxsim.h - 1659951640b ./gcc/config/sparc/vxsparc64.h 1610820992b ./gcc/config/sparc/vxsparc.h 777689939b ./gcc/config/stormy16/stormy16.c 684595050b ./gcc/config/stormy16/stormy16.h - 4011003560b ./gcc/config/stormy16/stormy16-lib2.c 2715629841b ./gcc/config/stormy16/stormy16.md - 2395767221b ./gcc/config/stormy16/stormy16-protos.h - 4145515672b ./gcc/config/stormy16/stormy-abi 3561720924b ./gcc/config/stormy16/t-stormy16 2525748108b ./gcc/config/svr3.h 2147853147b ./gcc/config/svr4.h 1733958440b ./gcc/config/t-darwin 2749923948b ./gcc/config/t-freebsd 3853732254b ./gcc/config/t-freebsd-thread ! 2512129728b ./gcc/config/t-gnu 825269638b ./gcc/config/t-interix 4174365071b ./gcc/config/t-libc-ok 2753685882b ./gcc/config/t-libgcc-pic ! 2687879286b ./gcc/config/t-libunwind 2752897962b ./gcc/config/t-linux 825269638b ./gcc/config/t-linux-aout 4098486992b ./gcc/config/t-linux-gnulibc1 - 121353396b ./gcc/config/tm-dwarf2.h 3907753730b ./gcc/config/t-netbsd 2903849127b ./gcc/config/t-openbsd 2917904648b ./gcc/config/t-openbsd-thread --- 2559,2586 ---- 1090529931b ./gcc/config/sparc/ultra1_2.md 3616257275b ./gcc/config/sparc/ultra3.md 3193374968b ./gcc/config/sparc/vxsim.h 1610820992b ./gcc/config/sparc/vxsparc.h + 1659951640b ./gcc/config/sparc/vxsparc64.h + 4145515672b ./gcc/config/stormy16/stormy-abi + 4011003560b ./gcc/config/stormy16/stormy16-lib2.c + 2395767221b ./gcc/config/stormy16/stormy16-protos.h 777689939b ./gcc/config/stormy16/stormy16.c 684595050b ./gcc/config/stormy16/stormy16.h 2715629841b ./gcc/config/stormy16/stormy16.md 3561720924b ./gcc/config/stormy16/t-stormy16 2525748108b ./gcc/config/svr3.h 2147853147b ./gcc/config/svr4.h 1733958440b ./gcc/config/t-darwin 2749923948b ./gcc/config/t-freebsd 3853732254b ./gcc/config/t-freebsd-thread ! 2906882249b ./gcc/config/t-gnu 825269638b ./gcc/config/t-interix 4174365071b ./gcc/config/t-libc-ok 2753685882b ./gcc/config/t-libgcc-pic ! 2878001881b ./gcc/config/t-libunwind 2752897962b ./gcc/config/t-linux 825269638b ./gcc/config/t-linux-aout 4098486992b ./gcc/config/t-linux-gnulibc1 3907753730b ./gcc/config/t-netbsd 2903849127b ./gcc/config/t-openbsd 2917904648b ./gcc/config/t-openbsd-thread *************** *** 2551,2581 **** 2124668958b ./gcc/config/t-slibgcc-nolc-override 1087805219b ./gcc/config/t-slibgcc-sld 321200235b ./gcc/config/t-svr4 937080303b ./gcc/config/udivmod.c 2590328114b ./gcc/config/udivmodsi4.c - 2426675102b ./gcc/configure - 2239237249b ./gcc/configure.frag - 3433367808b ./gcc/configure.in 1401546799b ./gcc/config/usegas.h 1979686065b ./gcc/config/v850/lib1funcs.asm 3345272584b ./gcc/config/v850/rtems.h 3003464882b ./gcc/config/v850/t-v850 - 1936936995b ./gcc/config/v850/v850.c 622471920b ./gcc/config/v850/v850-c.c 4260177643b ./gcc/config/v850/v850.h 26734558b ./gcc/config/v850/v850.md - 3302034740b ./gcc/config/v850/v850-protos.h 2302540552b ./gcc/config/vax/bsd.h 1499903501b ./gcc/config/vax/elf.h 1260908819b ./gcc/config/vax/netbsd-elf.h 4122206431b ./gcc/config/vax/netbsd.h - 3271953013b ./gcc/config/vax/openbsd1.h 3310399842b ./gcc/config/vax/openbsd.h 958978039b ./gcc/config/vax/ultrix.h 717787243b ./gcc/config/vax/vax.c 1777867058b ./gcc/config/vax/vax.h 1389545853b ./gcc/config/vax/vax.md - 826363414b ./gcc/config/vax/vax-protos.h 1161511202b ./gcc/config/vax/vaxv.h 2954412003b ./gcc/config/vax/vms.h 1260653442b ./gcc/config/vax/xm-vms.h --- 2589,2617 ---- 2124668958b ./gcc/config/t-slibgcc-nolc-override 1087805219b ./gcc/config/t-slibgcc-sld 321200235b ./gcc/config/t-svr4 + 121353396b ./gcc/config/tm-dwarf2.h 937080303b ./gcc/config/udivmod.c 2590328114b ./gcc/config/udivmodsi4.c 1401546799b ./gcc/config/usegas.h 1979686065b ./gcc/config/v850/lib1funcs.asm 3345272584b ./gcc/config/v850/rtems.h 3003464882b ./gcc/config/v850/t-v850 622471920b ./gcc/config/v850/v850-c.c + 3302034740b ./gcc/config/v850/v850-protos.h + 1936936995b ./gcc/config/v850/v850.c 4260177643b ./gcc/config/v850/v850.h 26734558b ./gcc/config/v850/v850.md 2302540552b ./gcc/config/vax/bsd.h 1499903501b ./gcc/config/vax/elf.h 1260908819b ./gcc/config/vax/netbsd-elf.h 4122206431b ./gcc/config/vax/netbsd.h 3310399842b ./gcc/config/vax/openbsd.h + 3271953013b ./gcc/config/vax/openbsd1.h 958978039b ./gcc/config/vax/ultrix.h + 826363414b ./gcc/config/vax/vax-protos.h 717787243b ./gcc/config/vax/vax.c 1777867058b ./gcc/config/vax/vax.h 1389545853b ./gcc/config/vax/vax.md 1161511202b ./gcc/config/vax/vaxv.h 2954412003b ./gcc/config/vax/vms.h 1260653442b ./gcc/config/vax/xm-vms.h *************** *** 2585,2681 **** 1529835891b ./gcc/config/xtensa/lib2funcs.S 2079961902b ./gcc/config/xtensa/linux.h 856985218b ./gcc/config/xtensa/t-xtensa - 2323376682b ./gcc/config/xtensa/xtensa.c 2796950173b ./gcc/config/xtensa/xtensa-config.h 1634616005b ./gcc/config/xtensa/xtensa.h 992524755b ./gcc/config/xtensa/xtensa.md ! 2260785040b ./gcc/config/xtensa/xtensa-protos.h 1207339419b ./gcc/conflict.c 4183575079b ./gcc/convert.c 2020855935b ./gcc/convert.h ! 327769972b ./gcc/c-opts.c ! 2171125041b ./gcc/COPYING ! 508743035b ./gcc/COPYING.LIB ! 1231075891b ./gcc/c-parse.c ! 2637246862b ./gcc/c-parse.in ! 1656602684b ./gcc/c-parse.y ! 1395283318b ./gcc/cp/call.c ! 2726184849b ./gcc/cp/cfns.gperf ! 3403558692b ./gcc/cp/cfns.h ! 2127780464b ./gcc/cp/ChangeLog 190176486b ./gcc/cp/ChangeLog.1 97583749b ./gcc/cp/ChangeLog.2 2546444747b ./gcc/cp/ChangeLog.egcs ! 840174612b ./gcc/cp/class.c 4001109630b ./gcc/cp/config-lang.in ! 3345049029b ./gcc/cp/cp-lang.c 2277233898b ./gcc/cp/cp-tree.def ! 2040135329b ./gcc/cp/cp-tree.h ! 1230086821b ./gcc/cp/.cvsignore 1969471444b ./gcc/cp/cvt.c ! 1843026114b ./gcc/cp/decl2.c ! 1186021619b ./gcc/cp/decl.c 1385119476b ./gcc/cp/decl.h 757230858b ./gcc/cp/dump.c ! 1424479906b ./gcc/cp/error.c 452521469b ./gcc/cp/except.c 1201332681b ./gcc/cp/expr.c 1270190491b ./gcc/cp/friend.c 1574667259b ./gcc/cp/g++.1 729602332b ./gcc/cp/g++spec.c ! 3323910007b ./gcc/cp/init.c 1486125690b ./gcc/cp/lang-options.h 2659645047b ./gcc/cp/lang-specs.h 2140565483b ./gcc/cp/lex.c 3229077171b ./gcc/cp/lex.h - 3233008176b ./gcc/cp/Make-lang.in 1436438891b ./gcc/cp/mangle.c 868524005b ./gcc/cp/method.c - 1213810021b ./gcc/cp/NEWS 3193855424b ./gcc/cp/operators.def 1390979693b ./gcc/cp/optimize.c ! 439273656b ./gcc/cp/parse.c ! 1860010587b ./gcc/cp/parse.h 2206367944b ./gcc/cp/parse.y ! 1602205564b ./gcc/cppdefault.c ! 2551769006b ./gcc/cppdefault.h 3019979850b ./gcc/cpperror.c 2655604389b ./gcc/cppexp.c 3546454282b ./gcc/cppfiles.c 3476502948b ./gcc/cpphash.c ! 1755335704b ./gcc/cpphash.h ! 1758176761b ./gcc/cppinit.c 3206802280b ./gcc/cpplex.c 3323456088b ./gcc/cpplib.c ! 2894228879b ./gcc/cpplib.h 1301003990b ./gcc/cppmacro.c 4012085958b ./gcc/cppmain.c 2457788577b ./gcc/cppspec.c ! 1471038424b ./gcc/cp/pt.c ! 1890705605b ./gcc/cpptrad.c ! 660118186b ./gcc/cp/ptree.c ! 3843981782b ./gcc/c-pragma.c ! 2824587351b ./gcc/c-pragma.h ! 2028729644b ./gcc/cp/repo.c ! 1364992996b ./gcc/c-pretty-print.c ! 322270390b ./gcc/c-pretty-print.h ! 4034613095b ./gcc/cp/rtti.c ! 645435452b ./gcc/cp/search.c ! 1948405158b ./gcc/cp/semantics.c ! 1129915797b ./gcc/cp/spew.c ! 4048187454b ./gcc/cp/tree.c ! 1959780068b ./gcc/cp/typeck2.c ! 545237975b ./gcc/cp/typeck.c 3987640245b ./gcc/crtstuff.c 4070757557b ./gcc/cse.c 1095744296b ./gcc/cselib.c 2819991749b ./gcc/cselib.h - 2307648174b ./gcc/c-semantics.c 216805921b ./gcc/cstamp-h.in ! 3323894092b ./gcc/c-tree.h ! 1266267684b ./gcc/c-typeck.c ! 1308782881b ./gcc/.cvsignore ! 4202760861b ./gcc/dbxout.c 2583180678b ./gcc/dbxout.h 1104788844b ./gcc/dbxstclass.h 105350690b ./gcc/debug.c --- 2621,2706 ---- 1529835891b ./gcc/config/xtensa/lib2funcs.S 2079961902b ./gcc/config/xtensa/linux.h 856985218b ./gcc/config/xtensa/t-xtensa 2796950173b ./gcc/config/xtensa/xtensa-config.h + 2260785040b ./gcc/config/xtensa/xtensa-protos.h + 2323376682b ./gcc/config/xtensa/xtensa.c 1634616005b ./gcc/config/xtensa/xtensa.h 992524755b ./gcc/config/xtensa/xtensa.md ! 722449861b ./gcc/configure ! 2239237249b ./gcc/configure.frag ! 3653195722b ./gcc/configure.in 1207339419b ./gcc/conflict.c 4183575079b ./gcc/convert.c 2020855935b ./gcc/convert.h ! 1230086821b ./gcc/cp/.cvsignore ! 3800780522b ./gcc/cp/ChangeLog 190176486b ./gcc/cp/ChangeLog.1 97583749b ./gcc/cp/ChangeLog.2 2546444747b ./gcc/cp/ChangeLog.egcs ! 3233008176b ./gcc/cp/Make-lang.in ! 1213810021b ./gcc/cp/NEWS ! 1022212391b ./gcc/cp/call.c ! 2726184849b ./gcc/cp/cfns.gperf ! 3403558692b ./gcc/cp/cfns.h ! 1102478473b ./gcc/cp/class.c 4001109630b ./gcc/cp/config-lang.in ! 3624674049b ./gcc/cp/cp-lang.c 2277233898b ./gcc/cp/cp-tree.def ! 222408911b ./gcc/cp/cp-tree.h 1969471444b ./gcc/cp/cvt.c ! 3764097079b ./gcc/cp/decl.c 1385119476b ./gcc/cp/decl.h + 1843026114b ./gcc/cp/decl2.c 757230858b ./gcc/cp/dump.c ! 2188196379b ./gcc/cp/error.c 452521469b ./gcc/cp/except.c 1201332681b ./gcc/cp/expr.c 1270190491b ./gcc/cp/friend.c 1574667259b ./gcc/cp/g++.1 729602332b ./gcc/cp/g++spec.c ! 4201962631b ./gcc/cp/init.c 1486125690b ./gcc/cp/lang-options.h 2659645047b ./gcc/cp/lang-specs.h 2140565483b ./gcc/cp/lex.c 3229077171b ./gcc/cp/lex.h 1436438891b ./gcc/cp/mangle.c 868524005b ./gcc/cp/method.c 3193855424b ./gcc/cp/operators.def 1390979693b ./gcc/cp/optimize.c ! 1958572835b ./gcc/cp/parse.c ! 347693869b ./gcc/cp/parse.h 2206367944b ./gcc/cp/parse.y ! 253080353b ./gcc/cp/pt.c ! 660118186b ./gcc/cp/ptree.c ! 2028729644b ./gcc/cp/repo.c ! 4034613095b ./gcc/cp/rtti.c ! 645435452b ./gcc/cp/search.c ! 1948405158b ./gcc/cp/semantics.c ! 1129915797b ./gcc/cp/spew.c ! 3953515268b ./gcc/cp/tree.c ! 3375104317b ./gcc/cp/typeck.c ! 1959780068b ./gcc/cp/typeck2.c ! 3576138321b ./gcc/cppdefault.c ! 438802138b ./gcc/cppdefault.h 3019979850b ./gcc/cpperror.c 2655604389b ./gcc/cppexp.c 3546454282b ./gcc/cppfiles.c 3476502948b ./gcc/cpphash.c ! 3455547586b ./gcc/cpphash.h ! 870628956b ./gcc/cppinit.c 3206802280b ./gcc/cpplex.c 3323456088b ./gcc/cpplib.c ! 3918562409b ./gcc/cpplib.h 1301003990b ./gcc/cppmacro.c 4012085958b ./gcc/cppmain.c 2457788577b ./gcc/cppspec.c ! 968619349b ./gcc/cpptrad.c 3987640245b ./gcc/crtstuff.c 4070757557b ./gcc/cse.c 1095744296b ./gcc/cselib.c 2819991749b ./gcc/cselib.h 216805921b ./gcc/cstamp-h.in ! 4197208992b ./gcc/dbxout.c 2583180678b ./gcc/dbxout.h 1104788844b ./gcc/dbxstclass.h 105350690b ./gcc/debug.c *************** *** 2686,2735 **** 3534449034b ./gcc/diagnostic.c 2028699711b ./gcc/diagnostic.def 2170035053b ./gcc/diagnostic.h 613396038b ./gcc/doc/bugreport.texi 295372029b ./gcc/doc/collect2.texi 2676162650b ./gcc/doc/compat.texi 2785243168b ./gcc/doc/configfiles.texi 3399730921b ./gcc/doc/configterms.texi ! 874591811b ./gcc/doc/contrib.texi 2272556046b ./gcc/doc/contribute.texi ! 2817450277b ./gcc/doc/cpp.1 4226490983b ./gcc/doc/cppenv.texi ! 818116428b ./gcc/doc/cpp.info ! 4128300115b ./gcc/doc/cppinternals.info 1958814700b ./gcc/doc/cppinternals.texi 1294675045b ./gcc/doc/cppopts.texi ! 1183227635b ./gcc/doc/cpp.texi ! 982930533b ./gcc/doc/c-tree.texi ! 1123688643b ./gcc/doc/.cvsignore ! 3830403079b ./gcc/doc/extend.texi 803819253b ./gcc/doc/fragments.texi 2401477723b ./gcc/doc/frontends.texi ! 737064711b ./gcc/doc/fsf-funding.7 ! 3672915547b ./gcc/doc/gcc.1 ! 2879597060b ./gcc/doc/gcc.info ! 1525034435b ./gcc/doc/gccinstall.info ! 1436299138b ./gcc/doc/gccint.info ! 4222820739b ./gcc/doc/gccint.texi 1998340815b ./gcc/doc/gcc.texi ! 3672734819b ./gcc/doc/gcov.1 799484262b ./gcc/doc/gcov.texi ! 2654046990b ./gcc/doc/gfdl.7 4217859569b ./gcc/doc/gnu.texi ! 2692696284b ./gcc/doc/gpl.7 2598049702b ./gcc/doc/gty.texi 2874371193b ./gcc/doc/headerdirs.texi 1425599017b ./gcc/doc/hostconfig.texi 3288537183b ./gcc/doc/include/fdl.texi 2048065465b ./gcc/doc/include/funding.texi ! 4074697841b ./gcc/doc/include/gcc-common.texi 3092587370b ./gcc/doc/include/gpl.texi 124394628b ./gcc/doc/include/texinfo.tex 3427634226b ./gcc/doc/install-old.texi ! 800471831b ./gcc/doc/install.texi 1451529977b ./gcc/doc/install.texi2html 3000332536b ./gcc/doc/interface.texi ! 2525709574b ./gcc/doc/invoke.texi 1327866291b ./gcc/doc/languages.texi 904420347b ./gcc/doc/makefile.texi 241984823b ./gcc/doc/md.texi --- 2711,2760 ---- 3534449034b ./gcc/diagnostic.c 2028699711b ./gcc/diagnostic.def 2170035053b ./gcc/diagnostic.h + 1123688643b ./gcc/doc/.cvsignore 613396038b ./gcc/doc/bugreport.texi + 3382305353b ./gcc/doc/c-tree.texi 295372029b ./gcc/doc/collect2.texi 2676162650b ./gcc/doc/compat.texi 2785243168b ./gcc/doc/configfiles.texi 3399730921b ./gcc/doc/configterms.texi ! 2901937683b ./gcc/doc/contrib.texi 2272556046b ./gcc/doc/contribute.texi ! 3470974240b ./gcc/doc/cpp.1 ! 1734701030b ./gcc/doc/cpp.info ! 2327079292b ./gcc/doc/cpp.texi 4226490983b ./gcc/doc/cppenv.texi ! 1575039155b ./gcc/doc/cppinternals.info 1958814700b ./gcc/doc/cppinternals.texi 1294675045b ./gcc/doc/cppopts.texi ! 3684147379b ./gcc/doc/extend.texi 803819253b ./gcc/doc/fragments.texi 2401477723b ./gcc/doc/frontends.texi ! 1174875497b ./gcc/doc/fsf-funding.7 ! 1150993227b ./gcc/doc/gcc.1 ! 1520709202b ./gcc/doc/gcc.info 1998340815b ./gcc/doc/gcc.texi ! 924665797b ./gcc/doc/gccinstall.info ! 2694630683b ./gcc/doc/gccint.info ! 4222820739b ./gcc/doc/gccint.texi ! 2779318379b ./gcc/doc/gcov.1 799484262b ./gcc/doc/gcov.texi ! 1609433609b ./gcc/doc/gfdl.7 4217859569b ./gcc/doc/gnu.texi ! 3978439329b ./gcc/doc/gpl.7 2598049702b ./gcc/doc/gty.texi 2874371193b ./gcc/doc/headerdirs.texi 1425599017b ./gcc/doc/hostconfig.texi 3288537183b ./gcc/doc/include/fdl.texi 2048065465b ./gcc/doc/include/funding.texi ! 2975375281b ./gcc/doc/include/gcc-common.texi 3092587370b ./gcc/doc/include/gpl.texi 124394628b ./gcc/doc/include/texinfo.tex 3427634226b ./gcc/doc/install-old.texi ! 3857557723b ./gcc/doc/install.texi 1451529977b ./gcc/doc/install.texi2html 3000332536b ./gcc/doc/interface.texi ! 333630846b ./gcc/doc/invoke.texi 1327866291b ./gcc/doc/languages.texi 904420347b ./gcc/doc/makefile.texi 241984823b ./gcc/doc/md.texi *************** *** 2740,2810 **** 1759580304b ./gcc/doc/service.texi 3166516007b ./gcc/doc/sourcebuild.texi 3565606796b ./gcc/doc/standards.texi ! 2405268332b ./gcc/doc/tm.texi 128574166b ./gcc/doc/trouble.texi 3258612192b ./gcc/doloop.c 1146162220b ./gcc/dominance.c 2102135385b ./gcc/doschk.c 2221635105b ./gcc/dummy-conditions.c 4027179154b ./gcc/dwarf2asm.c 538758205b ./gcc/dwarf2asm.h - 1582620025b ./gcc/dwarf2.h 2150551288b ./gcc/dwarf2out.c 3517290530b ./gcc/dwarf2out.h - 109276966b ./gcc/dwarf.h 3351836985b ./gcc/dwarfout.c ! 854538269b ./gcc/emit-rtl.c 2953931641b ./gcc/errors.c 3556563741b ./gcc/errors.h 100350032b ./gcc/et-forest.c 2508316488b ./gcc/et-forest.h 656135734b ./gcc/except.c 3819344801b ./gcc/except.h ! 1662793030b ./gcc/explow.c 2338822673b ./gcc/expmed.c ! 2359221535b ./gcc/expr.c 1872989667b ./gcc/expr.h 1934744031b ./gcc/f/ansify.c 1172411862b ./gcc/f/bad.c 3978113547b ./gcc/f/bad.def 2128126262b ./gcc/f/bad.h 1136773989b ./gcc/f/bit.c 194938753b ./gcc/f/bit.h 3553474552b ./gcc/f/bld.c 3286267604b ./gcc/f/bld.h - 2128697889b ./gcc/f/bld-op.def - 1837378607b ./gcc/f/BUGS - 235013049b ./gcc/f/bugs0.texi 3922562500b ./gcc/f/bugs.texi ! 2243337282b ./gcc/f/ChangeLog ! 3233190569b ./gcc/f/ChangeLog.0 ! 3391364885b ./gcc/f/com.c ! 3386200382b ./gcc/f/com.h 2664732170b ./gcc/f/com-rt.def 565949339b ./gcc/f/config-lang.in - 1546791101b ./gcc/f/.cvsignore 3871229020b ./gcc/f/data.c 1923155684b ./gcc/f/data.h 1611338677b ./gcc/f/equiv.c 2175994638b ./gcc/f/equiv.h ! 4275508610b ./gcc/f/expr.c 417834755b ./gcc/f/expr.h 333493781b ./gcc/f/ffe.texi 782070966b ./gcc/f/fini.c ! 1828195012b ./gcc/f/g77.1 ! 235598750b ./gcc/f/g77.info ! 1023118578b ./gcc/f/g77spec.c 3302596636b ./gcc/f/g77.texi 4062822261b ./gcc/f/global.c 3559352394b ./gcc/f/global.h 1392305407b ./gcc/f/implic.c 3939649511b ./gcc/f/implic.h - 517586974b ./gcc/final.c 2287601317b ./gcc/f/info-b.def - 2342702754b ./gcc/f/info.c - 1115234844b ./gcc/f/info.h 2535813338b ./gcc/f/info-k.def 2242176401b ./gcc/f/info-w.def 3953937189b ./gcc/f/intdoc.c 3123274482b ./gcc/f/intdoc.in 3862113235b ./gcc/f/intdoc.texi --- 2765,2837 ---- 1759580304b ./gcc/doc/service.texi 3166516007b ./gcc/doc/sourcebuild.texi 3565606796b ./gcc/doc/standards.texi ! 975697525b ./gcc/doc/tm.texi 128574166b ./gcc/doc/trouble.texi 3258612192b ./gcc/doloop.c 1146162220b ./gcc/dominance.c 2102135385b ./gcc/doschk.c 2221635105b ./gcc/dummy-conditions.c + 109276966b ./gcc/dwarf.h + 1582620025b ./gcc/dwarf2.h 4027179154b ./gcc/dwarf2asm.c 538758205b ./gcc/dwarf2asm.h 2150551288b ./gcc/dwarf2out.c 3517290530b ./gcc/dwarf2out.h 3351836985b ./gcc/dwarfout.c ! 2104441699b ./gcc/emit-rtl.c 2953931641b ./gcc/errors.c 3556563741b ./gcc/errors.h 100350032b ./gcc/et-forest.c 2508316488b ./gcc/et-forest.h 656135734b ./gcc/except.c 3819344801b ./gcc/except.h ! 490409806b ./gcc/explow.c 2338822673b ./gcc/expmed.c ! 2095490193b ./gcc/expr.c 1872989667b ./gcc/expr.h + 1546791101b ./gcc/f/.cvsignore + 425385891b ./gcc/f/BUGS + 865163855b ./gcc/f/ChangeLog + 3233190569b ./gcc/f/ChangeLog.0 + 3329871744b ./gcc/f/Make-lang.in + 3650365852b ./gcc/f/NEWS + 3295584012b ./gcc/f/RELEASE-PREP 1934744031b ./gcc/f/ansify.c 1172411862b ./gcc/f/bad.c 3978113547b ./gcc/f/bad.def 2128126262b ./gcc/f/bad.h 1136773989b ./gcc/f/bit.c 194938753b ./gcc/f/bit.h + 2128697889b ./gcc/f/bld-op.def 3553474552b ./gcc/f/bld.c 3286267604b ./gcc/f/bld.h 3922562500b ./gcc/f/bugs.texi ! 235013049b ./gcc/f/bugs0.texi 2664732170b ./gcc/f/com-rt.def + 1487956635b ./gcc/f/com.c + 3386200382b ./gcc/f/com.h 565949339b ./gcc/f/config-lang.in 3871229020b ./gcc/f/data.c 1923155684b ./gcc/f/data.h 1611338677b ./gcc/f/equiv.c 2175994638b ./gcc/f/equiv.h ! 1399715770b ./gcc/f/expr.c 417834755b ./gcc/f/expr.h 333493781b ./gcc/f/ffe.texi 782070966b ./gcc/f/fini.c ! 3111156901b ./gcc/f/g77.1 ! 1664581766b ./gcc/f/g77.info 3302596636b ./gcc/f/g77.texi + 1023118578b ./gcc/f/g77spec.c 4062822261b ./gcc/f/global.c 3559352394b ./gcc/f/global.h 1392305407b ./gcc/f/implic.c 3939649511b ./gcc/f/implic.h 2287601317b ./gcc/f/info-b.def 2535813338b ./gcc/f/info-k.def 2242176401b ./gcc/f/info-w.def + 2342702754b ./gcc/f/info.c + 1115234844b ./gcc/f/info.h 3953937189b ./gcc/f/intdoc.c 3123274482b ./gcc/f/intdoc.in 3862113235b ./gcc/f/intdoc.texi *************** *** 2812,2843 **** 1048488593b ./gcc/f/intrin.def 3418049706b ./gcc/f/intrin.h 2907149479b ./gcc/f/invoke.texi 4178345561b ./gcc/fix-header.c 353743878b ./gcc/fixinc/check.tpl 1043093163b ./gcc/fixinc/fixfixes.c 1862241894b ./gcc/fixinc/fixinc.dgux 15758129b ./gcc/fixinc/fixinc.interix - 1824978333b ./gcc/fixinc/fixincl.c - 2267967746b ./gcc/fixinc/fixincl.sh - 2178021789b ./gcc/fixinc/fixincl.tpl - 1748144386b ./gcc/fixinc/fixincl.x 1474597097b ./gcc/fixinc/fixinc.ptx 3187846170b ./gcc/fixinc/fixinc.svr4 1864448151b ./gcc/fixinc/fixinc.winnt 1439814780b ./gcc/fixinc/fixinc.wrap 1372603529b ./gcc/fixinc/fixlib.c 971233728b ./gcc/fixinc/fixlib.h 4013194329b ./gcc/fixinc/fixtests.c 2003329934b ./gcc/fixinc/genfixes 2190395998b ./gcc/fixinc/gnu-regex.c 1403987073b ./gcc/fixinc/gnu-regex.h ! 1730486141b ./gcc/fixinc/inclhack.def ! 333067513b ./gcc/fixinc/Makefile.in ! 1990838210b ./gcc/fixinc/mkfixinc.sh 1834585069b ./gcc/fixinc/procopen.c - 2750464368b ./gcc/fixinc/README 1750379031b ./gcc/fixinc/server.c 3490851801b ./gcc/fixinc/server.h 1165473466b ./gcc/fixinc/tests/base/ansi/math.h 3124694417b ./gcc/fixinc/tests/base/ansi/stdlib.h 483312381b ./gcc/fixinc/tests/base/ansi/string.h --- 2839,2940 ---- 1048488593b ./gcc/f/intrin.def 3418049706b ./gcc/f/intrin.h 2907149479b ./gcc/f/invoke.texi + 1861938661b ./gcc/f/lab.c + 3674332618b ./gcc/f/lab.h + 136843109b ./gcc/f/lang-options.h + 87061712b ./gcc/f/lang-specs.h + 3588095999b ./gcc/f/lex.c + 722310274b ./gcc/f/lex.h + 3929672430b ./gcc/f/malloc.c + 1633854048b ./gcc/f/malloc.h + 2687881356b ./gcc/f/name.c + 558328466b ./gcc/f/name.h + 2025578594b ./gcc/f/news.texi + 3453379674b ./gcc/f/news0.texi + 3383472522b ./gcc/f/parse.c + 1067232252b ./gcc/f/proj.h + 1741768325b ./gcc/f/root.texi + 3531682397b ./gcc/f/src.c + 246620254b ./gcc/f/src.h + 3466162958b ./gcc/f/st.c + 1705988958b ./gcc/f/st.h + 3608541363b ./gcc/f/sta.c + 520236030b ./gcc/f/sta.h + 520927036b ./gcc/f/stb.c + 2810193132b ./gcc/f/stb.h + 1376080614b ./gcc/f/stc.c + 1751601456b ./gcc/f/stc.h + 1940318197b ./gcc/f/std.c + 1219390242b ./gcc/f/std.h + 2584461253b ./gcc/f/ste.c + 1786873989b ./gcc/f/ste.h + 1100581971b ./gcc/f/storag.c + 790029114b ./gcc/f/storag.h + 2404416327b ./gcc/f/stp.c + 3782361290b ./gcc/f/stp.h + 3722860946b ./gcc/f/str-1t.fin + 2828127862b ./gcc/f/str-2t.fin + 4215029898b ./gcc/f/str-fo.fin + 281471485b ./gcc/f/str-io.fin + 3735910053b ./gcc/f/str-nq.fin + 3134124633b ./gcc/f/str-op.fin + 2608567153b ./gcc/f/str-ot.fin + 920153914b ./gcc/f/str.c + 2184386780b ./gcc/f/str.h + 610725318b ./gcc/f/sts.c + 1450832819b ./gcc/f/sts.h + 2301635495b ./gcc/f/stt.c + 514307919b ./gcc/f/stt.h + 3188469687b ./gcc/f/stu.c + 166252279b ./gcc/f/stu.h + 857063390b ./gcc/f/stv.c + 971049710b ./gcc/f/stv.h + 2156320080b ./gcc/f/stw.c + 3741680211b ./gcc/f/stw.h + 659922490b ./gcc/f/symbol.c + 1323122026b ./gcc/f/symbol.def + 690030434b ./gcc/f/symbol.h + 991497974b ./gcc/f/target.c + 2424410241b ./gcc/f/target.h + 501866674b ./gcc/f/top.c + 2232338664b ./gcc/f/top.h + 3443401298b ./gcc/f/type.c + 2499934202b ./gcc/f/type.h + 316201735b ./gcc/f/where.c + 3857741668b ./gcc/f/where.h + 3271022079b ./gcc/final.c 4178345561b ./gcc/fix-header.c + 333067513b ./gcc/fixinc/Makefile.in + 2750464368b ./gcc/fixinc/README 353743878b ./gcc/fixinc/check.tpl 1043093163b ./gcc/fixinc/fixfixes.c 1862241894b ./gcc/fixinc/fixinc.dgux 15758129b ./gcc/fixinc/fixinc.interix 1474597097b ./gcc/fixinc/fixinc.ptx 3187846170b ./gcc/fixinc/fixinc.svr4 1864448151b ./gcc/fixinc/fixinc.winnt 1439814780b ./gcc/fixinc/fixinc.wrap + 1824978333b ./gcc/fixinc/fixincl.c + 2267967746b ./gcc/fixinc/fixincl.sh + 2178021789b ./gcc/fixinc/fixincl.tpl + 67361470b ./gcc/fixinc/fixincl.x 1372603529b ./gcc/fixinc/fixlib.c 971233728b ./gcc/fixinc/fixlib.h 4013194329b ./gcc/fixinc/fixtests.c 2003329934b ./gcc/fixinc/genfixes 2190395998b ./gcc/fixinc/gnu-regex.c 1403987073b ./gcc/fixinc/gnu-regex.h ! 818290950b ./gcc/fixinc/inclhack.def ! 3144429405b ./gcc/fixinc/mkfixinc.sh 1834585069b ./gcc/fixinc/procopen.c 1750379031b ./gcc/fixinc/server.c 3490851801b ./gcc/fixinc/server.h + 1516247519b ./gcc/fixinc/tests/base/X11/Intrinsic.h + 2715935838b ./gcc/fixinc/tests/base/X11/ShellP.h + 4147305037b ./gcc/fixinc/tests/base/X11/Xmu.h + 3373785317b ./gcc/fixinc/tests/base/Xm/BaseClassI.h + 2132924768b ./gcc/fixinc/tests/base/Xm/Traversal.h + 2707131863b ./gcc/fixinc/tests/base/_G_config.h 1165473466b ./gcc/fixinc/tests/base/ansi/math.h 3124694417b ./gcc/fixinc/tests/base/ansi/stdlib.h 483312381b ./gcc/fixinc/tests/base/ansi/string.h *************** *** 2851,2857 **** 3049981119b ./gcc/fixinc/tests/base/curses.h 2909636960b ./gcc/fixinc/tests/base/fcntl.h 3901972537b ./gcc/fixinc/tests/base/fixinc-test-limits.h - 2707131863b ./gcc/fixinc/tests/base/_G_config.h 4150745363b ./gcc/fixinc/tests/base/hsfs/hsfs_spec.h 1298358958b ./gcc/fixinc/tests/base/internal/sgimacros.h 2484816269b ./gcc/fixinc/tests/base/internal/wchar_core.h --- 2948,2953 ---- *************** *** 2865,2880 **** 4211518276b ./gcc/fixinc/tests/base/netinet/ip.h 3107111098b ./gcc/fixinc/tests/base/pixrect/memvar.h 2157512402b ./gcc/fixinc/tests/base/pthread.h - 2876721819b ./gcc/fixinc/tests/base/regex.h 351364386b ./gcc/fixinc/tests/base/reg_types.h 2249464053b ./gcc/fixinc/tests/base/rpc/auth.h 4166238922b ./gcc/fixinc/tests/base/rpc/rpc.h 778394431b ./gcc/fixinc/tests/base/rpc/svc.h 1831085175b ./gcc/fixinc/tests/base/rpcsvc/rstat.h 2162639252b ./gcc/fixinc/tests/base/rpcsvc/rusers.h - 164451816b ./gcc/fixinc/tests/base/rpc/xdr.h 135186565b ./gcc/fixinc/tests/base/sparc/asm_linkage.h ! 1583769396b ./gcc/fixinc/tests/base/stdio.h 1529509815b ./gcc/fixinc/tests/base/stdio_tag.h 298829255b ./gcc/fixinc/tests/base/stdlib.h 2274134488b ./gcc/fixinc/tests/base/string.h --- 2961,2976 ---- 4211518276b ./gcc/fixinc/tests/base/netinet/ip.h 3107111098b ./gcc/fixinc/tests/base/pixrect/memvar.h 2157512402b ./gcc/fixinc/tests/base/pthread.h 351364386b ./gcc/fixinc/tests/base/reg_types.h + 2876721819b ./gcc/fixinc/tests/base/regex.h 2249464053b ./gcc/fixinc/tests/base/rpc/auth.h 4166238922b ./gcc/fixinc/tests/base/rpc/rpc.h 778394431b ./gcc/fixinc/tests/base/rpc/svc.h + 164451816b ./gcc/fixinc/tests/base/rpc/xdr.h 1831085175b ./gcc/fixinc/tests/base/rpcsvc/rstat.h 2162639252b ./gcc/fixinc/tests/base/rpcsvc/rusers.h 135186565b ./gcc/fixinc/tests/base/sparc/asm_linkage.h ! 876451122b ./gcc/fixinc/tests/base/stdio.h 1529509815b ./gcc/fixinc/tests/base/stdio_tag.h 298829255b ./gcc/fixinc/tests/base/stdlib.h 2274134488b ./gcc/fixinc/tests/base/string.h *************** *** 2907,3006 **** 4209310059b ./gcc/fixinc/tests/base/types/vxTypesBase.h 3839547353b ./gcc/fixinc/tests/base/unistd.h 1242753480b ./gcc/fixinc/tests/base/widec.h - 1516247519b ./gcc/fixinc/tests/base/X11/Intrinsic.h - 2715935838b ./gcc/fixinc/tests/base/X11/ShellP.h - 4147305037b ./gcc/fixinc/tests/base/X11/Xmu.h - 3373785317b ./gcc/fixinc/tests/base/Xm/BaseClassI.h - 2132924768b ./gcc/fixinc/tests/base/Xm/Traversal.h 2113569167b ./gcc/fixproto - 1861938661b ./gcc/f/lab.c - 3674332618b ./gcc/f/lab.h 3381524450b ./gcc/flags.h - 136843109b ./gcc/f/lang-options.h - 87061712b ./gcc/f/lang-specs.h - 3588095999b ./gcc/f/lex.c - 722310274b ./gcc/f/lex.h 1465737068b ./gcc/floatlib.c 1755734781b ./gcc/flow.c ! 3329871744b ./gcc/f/Make-lang.in ! 3929672430b ./gcc/f/malloc.c ! 1633854048b ./gcc/f/malloc.h ! 2687881356b ./gcc/f/name.c ! 558328466b ./gcc/f/name.h ! 2173085709b ./gcc/f/NEWS ! 3453379674b ./gcc/f/news0.texi ! 2025578594b ./gcc/f/news.texi ! 77254354b ./gcc/fold-const.c ! 3383472522b ./gcc/f/parse.c ! 1067232252b ./gcc/f/proj.h 3820449811b ./gcc/fp-test.c ! 281424983b ./gcc/f/README ! 3295584012b ./gcc/f/RELEASE-PREP ! 1741768325b ./gcc/f/root.texi ! 2146007539b ./gcc/FSFChangeLog ! 2696443822b ./gcc/FSFChangeLog.10 ! 1302016933b ./gcc/FSFChangeLog.11 ! 3531682397b ./gcc/f/src.c ! 246620254b ./gcc/f/src.h ! 3608541363b ./gcc/f/sta.c ! 520236030b ./gcc/f/sta.h ! 520927036b ./gcc/f/stb.c ! 2810193132b ./gcc/f/stb.h ! 3466162958b ./gcc/f/st.c ! 1376080614b ./gcc/f/stc.c ! 1751601456b ./gcc/f/stc.h ! 1940318197b ./gcc/f/std.c ! 1219390242b ./gcc/f/std.h ! 2584461253b ./gcc/f/ste.c ! 1786873989b ./gcc/f/ste.h ! 1705988958b ./gcc/f/st.h ! 1100581971b ./gcc/f/storag.c ! 790029114b ./gcc/f/storag.h ! 2404416327b ./gcc/f/stp.c ! 3782361290b ./gcc/f/stp.h ! 3722860946b ./gcc/f/str-1t.fin ! 2828127862b ./gcc/f/str-2t.fin ! 920153914b ./gcc/f/str.c ! 4215029898b ./gcc/f/str-fo.fin ! 2184386780b ./gcc/f/str.h ! 281471485b ./gcc/f/str-io.fin ! 3735910053b ./gcc/f/str-nq.fin ! 3134124633b ./gcc/f/str-op.fin ! 2608567153b ./gcc/f/str-ot.fin ! 610725318b ./gcc/f/sts.c ! 1450832819b ./gcc/f/sts.h ! 2301635495b ./gcc/f/stt.c ! 514307919b ./gcc/f/stt.h ! 3188469687b ./gcc/f/stu.c ! 166252279b ./gcc/f/stu.h ! 857063390b ./gcc/f/stv.c ! 971049710b ./gcc/f/stv.h ! 2156320080b ./gcc/f/stw.c ! 3741680211b ./gcc/f/stw.h ! 659922490b ./gcc/f/symbol.c ! 1323122026b ./gcc/f/symbol.def ! 690030434b ./gcc/f/symbol.h ! 991497974b ./gcc/f/target.c ! 2424410241b ./gcc/f/target.h ! 501866674b ./gcc/f/top.c ! 2232338664b ./gcc/f/top.h ! 3443401298b ./gcc/f/type.c ! 2499934202b ./gcc/f/type.h ! 1462737491b ./gcc/function.c ! 2092834276b ./gcc/function.h 3058774034b ./gcc/future.options - 316201735b ./gcc/f/where.c - 3857741668b ./gcc/f/where.h 3783840564b ./gcc/gbl-ctors.h ! 1115769236b ./gcc/gccbug.in ! 2921634145b ./gcc/gcc.c 4230721321b ./gcc/gcc.h 3093644366b ./gcc/gcc.hlp 2622773729b ./gcc/gccspec.c - 3225546711b ./gcc/gcov.c 2762855893b ./gcc/gcov-io.h ! 2021237068b ./gcc/gcse.c 696210819b ./gcc/gdbinit.in 2036947252b ./gcc/genattr.c 3347934187b ./gcc/genattrtab.c 49201825b ./gcc/genattrtab.h --- 3003,3028 ---- 4209310059b ./gcc/fixinc/tests/base/types/vxTypesBase.h 3839547353b ./gcc/fixinc/tests/base/unistd.h 1242753480b ./gcc/fixinc/tests/base/widec.h 2113569167b ./gcc/fixproto 3381524450b ./gcc/flags.h 1465737068b ./gcc/floatlib.c 1755734781b ./gcc/flow.c ! 429314078b ./gcc/fold-const.c 3820449811b ./gcc/fp-test.c ! 371039034b ./gcc/function.c ! 660035943b ./gcc/function.h 3058774034b ./gcc/future.options 3783840564b ./gcc/gbl-ctors.h ! 3411062223b ./gcc/gcc.c 4230721321b ./gcc/gcc.h 3093644366b ./gcc/gcc.hlp + 1115769236b ./gcc/gccbug.in 2622773729b ./gcc/gccspec.c 2762855893b ./gcc/gcov-io.h ! 3225546711b ./gcc/gcov.c ! 3501854258b ./gcc/gcse.c 696210819b ./gcc/gdbinit.in + 4293398944b ./gcc/gen-protos.c 2036947252b ./gcc/genattr.c 3347934187b ./gcc/genattrtab.c 49201825b ./gcc/genattrtab.h *************** *** 3014,3040 **** 2648961261b ./gcc/genextract.c 1430019866b ./gcc/genflags.c 904540311b ./gcc/gengenrtl.c ! 2765427045b ./gcc/gengtype.c ! 1706925807b ./gcc/gengtype.h ! 362087221b ./gcc/gengtype-lex.c 3137000585b ./gcc/gengtype-lex.l ! 283432982b ./gcc/gengtype-yacc.c ! 2625416625b ./gcc/gengtype-yacc.h 1642276134b ./gcc/gengtype-yacc.y 2574485728b ./gcc/genmultilib 3934270274b ./gcc/genopinit.c 4030468350b ./gcc/genoutput.c 2221468101b ./gcc/genpeep.c 2157311337b ./gcc/genpreds.c - 4293398944b ./gcc/gen-protos.c 1456235423b ./gcc/genrecog.c 2155964351b ./gcc/gensupport.c 3939490572b ./gcc/gensupport.h 2009469051b ./gcc/ggc-common.c - 852202395b ./gcc/ggc.h 4038703287b ./gcc/ggc-none.c 2613240984b ./gcc/ggc-page.c 3850484049b ./gcc/ggc-simple.c 158790627b ./gcc/ginclude/float.h 684549565b ./gcc/ginclude/iso646.h 2119154547b ./gcc/ginclude/stdarg.h --- 3036,3061 ---- 2648961261b ./gcc/genextract.c 1430019866b ./gcc/genflags.c 904540311b ./gcc/gengenrtl.c ! 1317340942b ./gcc/gengtype-lex.c 3137000585b ./gcc/gengtype-lex.l ! 3799875986b ./gcc/gengtype-yacc.c ! 1378639098b ./gcc/gengtype-yacc.h 1642276134b ./gcc/gengtype-yacc.y + 2765427045b ./gcc/gengtype.c + 1706925807b ./gcc/gengtype.h 2574485728b ./gcc/genmultilib 3934270274b ./gcc/genopinit.c 4030468350b ./gcc/genoutput.c 2221468101b ./gcc/genpeep.c 2157311337b ./gcc/genpreds.c 1456235423b ./gcc/genrecog.c 2155964351b ./gcc/gensupport.c 3939490572b ./gcc/gensupport.h 2009469051b ./gcc/ggc-common.c 4038703287b ./gcc/ggc-none.c 2613240984b ./gcc/ggc-page.c 3850484049b ./gcc/ggc-simple.c + 852202395b ./gcc/ggc.h 158790627b ./gcc/ginclude/float.h 684549565b ./gcc/ginclude/iso646.h 2119154547b ./gcc/ginclude/stdarg.h *************** *** 3051,3063 **** 808024354b ./gcc/gsyslimits.h 2343151743b ./gcc/gthr-aix.h 2817714080b ./gcc/gthr-dce.h - 920778145b ./gcc/gthr.h 1878777757b ./gcc/gthr-posix.h 2735875105b ./gcc/gthr-rtems.h 3347178149b ./gcc/gthr-single.h 335757205b ./gcc/gthr-solaris.h 26784372b ./gcc/gthr-vxworks.h 1467201133b ./gcc/gthr-win32.h 3058985741b ./gcc/haifa-sched.c 1344641109b ./gcc/hard-reg-set.h 1833150569b ./gcc/hashtable.c --- 3072,3084 ---- 808024354b ./gcc/gsyslimits.h 2343151743b ./gcc/gthr-aix.h 2817714080b ./gcc/gthr-dce.h 1878777757b ./gcc/gthr-posix.h 2735875105b ./gcc/gthr-rtems.h 3347178149b ./gcc/gthr-single.h 335757205b ./gcc/gthr-solaris.h 26784372b ./gcc/gthr-vxworks.h 1467201133b ./gcc/gthr-win32.h + 920778145b ./gcc/gthr.h 3058985741b ./gcc/haifa-sched.c 1344641109b ./gcc/hard-reg-set.h 1833150569b ./gcc/hashtable.c *************** *** 3065,3078 **** 127562897b ./gcc/hooks.c 3729897617b ./gcc/hooks.h 4221207654b ./gcc/hwint.h ! 3162676548b ./gcc/ifcvt.c 1952228975b ./gcc/input.h 3384627434b ./gcc/insn-addr.h 2417292013b ./gcc/integrate.c 3129523647b ./gcc/integrate.h - 3847321727b ./gcc/intl/bindtextdom.c 3277280645b ./gcc/intl.c ! 2907030698b ./gcc/intl/ChangeLog 3698301396b ./gcc/intl/config.charset 3683549278b ./gcc/intl/dcgettext.c 1537282354b ./gcc/intl/dcigettext.c --- 3086,3102 ---- 127562897b ./gcc/hooks.c 3729897617b ./gcc/hooks.h 4221207654b ./gcc/hwint.h ! 1775598304b ./gcc/ifcvt.c 1952228975b ./gcc/input.h 3384627434b ./gcc/insn-addr.h 2417292013b ./gcc/integrate.c 3129523647b ./gcc/integrate.h 3277280645b ./gcc/intl.c ! 2379664116b ./gcc/intl.h ! 68457480b ./gcc/intl/ChangeLog ! 680616337b ./gcc/intl/Makefile.in ! 1166279255b ./gcc/intl/VERSION ! 3847321727b ./gcc/intl/bindtextdom.c 3698301396b ./gcc/intl/config.charset 3683549278b ./gcc/intl/dcgettext.c 1537282354b ./gcc/intl/dcigettext.c *************** *** 3084,3090 **** 3807651580b ./gcc/intl/gettext.c 864082220b ./gcc/intl/gettext.h 3298993106b ./gcc/intl/gettextP.h - 2379664116b ./gcc/intl.h 3470048606b ./gcc/intl/hash-string.h 3803759614b ./gcc/intl/intl-compat.c 3500562604b ./gcc/intl/l10nflist.c --- 3108,3113 ---- *************** *** 3095,3167 **** 934932803b ./gcc/intl/localcharset.c 3093413149b ./gcc/intl/locale.alias 2364750309b ./gcc/intl/localealias.c - 680616337b ./gcc/intl/Makefile.in 2022997717b ./gcc/intl/ngettext.c 543478295b ./gcc/intl/plural.c 1047167798b ./gcc/intl/plural.y 409545719b ./gcc/intl/ref-add.sin 1121743739b ./gcc/intl/ref-del.sin 1971238900b ./gcc/intl/textdomain.c ! 1166279255b ./gcc/intl/VERSION 700876101b ./gcc/java/boehm.c 674770997b ./gcc/java/buffer.c 1535113190b ./gcc/java/buffer.h 2471190840b ./gcc/java/builtins.c - 711626241b ./gcc/java/ChangeLog 2409493226b ./gcc/java/chartables.h 1669534513b ./gcc/java/check-init.c 1987085295b ./gcc/java/class.c 771837757b ./gcc/java/config-lang.in 2852494447b ./gcc/java/constants.c 640032177b ./gcc/java/convert.h - 503022028b ./gcc/java/.cvsignore 2447326245b ./gcc/java/decl.c 808662179b ./gcc/java/except.c 3550734029b ./gcc/java/expr.c ! 4140633080b ./gcc/java/gcj.1 ! 650127821b ./gcc/java/gcjh.1 ! 3037774527b ./gcc/java/gcj.info 3613529008b ./gcc/java/gcj.texi 533046670b ./gcc/java/gen-table.pl ! 1159065701b ./gcc/java/gij.1 871232158b ./gcc/java/gjavah.c 1545050516b ./gcc/java/java-except.h 1953641142b ./gcc/java/java-opcodes.h - 2538410445b ./gcc/java/javaop.def - 3553057247b ./gcc/java/javaop.h 2113802419b ./gcc/java/java-tree.def 1585333829b ./gcc/java/java-tree.h 1618392854b ./gcc/java/jcf-depend.c ! 1330782242b ./gcc/java/jcf-dump.1 989986345b ./gcc/java/jcf-dump.c - 1096034698b ./gcc/java/jcf.h 265802933b ./gcc/java/jcf-io.c 2201709088b ./gcc/java/jcf-parse.c 3649177865b ./gcc/java/jcf-path.c 3469145485b ./gcc/java/jcf-reader.c 2779561656b ./gcc/java/jcf-write.c ! 1607884657b ./gcc/java/jv-convert.1 ! 3805988298b ./gcc/java/jvgenmain.c ! 2969973964b ./gcc/java/jv-scan.1 1608362154b ./gcc/java/jv-scan.c 1503112447b ./gcc/java/jvspec.c 1823669543b ./gcc/java/keyword.gperf 4241021965b ./gcc/java/keyword.h - 2677885666b ./gcc/java/lang.c 366330104b ./gcc/java/lang-options.h 3731853870b ./gcc/java/lang-specs.h 3540740791b ./gcc/java/lex.c 3065888956b ./gcc/java/lex.h - 827934844b ./gcc/java/Make-lang.in 3475732428b ./gcc/java/mangle.c 1178542691b ./gcc/java/mangle_name.c ! 1612011901b ./gcc/java/parse.c ! 1819635606b ./gcc/java/parse.h ! 1406773240b ./gcc/java/parse-scan.c 222108707b ./gcc/java/parse-scan.y 3662037178b ./gcc/java/parse.y ! 2458901806b ./gcc/java/rmic.1 ! 3179582836b ./gcc/java/rmiregistry.1 4133292138b ./gcc/java/typeck.c 3461608157b ./gcc/java/verify.c 3887545656b ./gcc/java/win32-host.c --- 3118,3188 ---- 934932803b ./gcc/intl/localcharset.c 3093413149b ./gcc/intl/locale.alias 2364750309b ./gcc/intl/localealias.c 2022997717b ./gcc/intl/ngettext.c 543478295b ./gcc/intl/plural.c 1047167798b ./gcc/intl/plural.y 409545719b ./gcc/intl/ref-add.sin 1121743739b ./gcc/intl/ref-del.sin 1971238900b ./gcc/intl/textdomain.c ! 503022028b ./gcc/java/.cvsignore ! 112847771b ./gcc/java/ChangeLog ! 827934844b ./gcc/java/Make-lang.in 700876101b ./gcc/java/boehm.c 674770997b ./gcc/java/buffer.c 1535113190b ./gcc/java/buffer.h 2471190840b ./gcc/java/builtins.c 2409493226b ./gcc/java/chartables.h 1669534513b ./gcc/java/check-init.c 1987085295b ./gcc/java/class.c 771837757b ./gcc/java/config-lang.in 2852494447b ./gcc/java/constants.c 640032177b ./gcc/java/convert.h 2447326245b ./gcc/java/decl.c 808662179b ./gcc/java/except.c 3550734029b ./gcc/java/expr.c ! 2303455424b ./gcc/java/gcj.1 ! 1285466178b ./gcc/java/gcj.info 3613529008b ./gcc/java/gcj.texi + 3134108520b ./gcc/java/gcjh.1 533046670b ./gcc/java/gen-table.pl ! 3664868515b ./gcc/java/gij.1 871232158b ./gcc/java/gjavah.c 1545050516b ./gcc/java/java-except.h 1953641142b ./gcc/java/java-opcodes.h 2113802419b ./gcc/java/java-tree.def 1585333829b ./gcc/java/java-tree.h + 2538410445b ./gcc/java/javaop.def + 3553057247b ./gcc/java/javaop.h 1618392854b ./gcc/java/jcf-depend.c ! 1145142244b ./gcc/java/jcf-dump.1 989986345b ./gcc/java/jcf-dump.c 265802933b ./gcc/java/jcf-io.c 2201709088b ./gcc/java/jcf-parse.c 3649177865b ./gcc/java/jcf-path.c 3469145485b ./gcc/java/jcf-reader.c 2779561656b ./gcc/java/jcf-write.c ! 1096034698b ./gcc/java/jcf.h ! 1300895839b ./gcc/java/jv-convert.1 ! 1028955287b ./gcc/java/jv-scan.1 1608362154b ./gcc/java/jv-scan.c + 3805988298b ./gcc/java/jvgenmain.c 1503112447b ./gcc/java/jvspec.c 1823669543b ./gcc/java/keyword.gperf 4241021965b ./gcc/java/keyword.h 366330104b ./gcc/java/lang-options.h 3731853870b ./gcc/java/lang-specs.h + 2677885666b ./gcc/java/lang.c 3540740791b ./gcc/java/lex.c 3065888956b ./gcc/java/lex.h 3475732428b ./gcc/java/mangle.c 1178542691b ./gcc/java/mangle_name.c ! 348918369b ./gcc/java/parse-scan.c 222108707b ./gcc/java/parse-scan.y + 2596574559b ./gcc/java/parse.c + 1819635606b ./gcc/java/parse.h 3662037178b ./gcc/java/parse.y ! 3027172474b ./gcc/java/rmic.1 ! 581770323b ./gcc/java/rmiregistry.1 4133292138b ./gcc/java/typeck.c 3461608157b ./gcc/java/verify.c 3887545656b ./gcc/java/win32-host.c *************** *** 3170,3184 **** 2742723736b ./gcc/java/zextract.c 1459175152b ./gcc/java/zipfile.h 364600072b ./gcc/jump.c - 184861402b ./gcc/langhooks.c 2067476875b ./gcc/langhooks-def.h 1489632855b ./gcc/langhooks.h - 3016546082b ./gcc/LANGUAGES 2478673079b ./gcc/lcm.c 95519294b ./gcc/libfuncs.h 1895885741b ./gcc/libgcc2.c 3322762549b ./gcc/libgcc2.h - 1203905598b ./gcc/libgcc-std.ver 2497915666b ./gcc/limitx.h 1045880008b ./gcc/limity.h 1060915850b ./gcc/line-map.c --- 3191,3204 ---- 2742723736b ./gcc/java/zextract.c 1459175152b ./gcc/java/zipfile.h 364600072b ./gcc/jump.c 2067476875b ./gcc/langhooks-def.h + 184861402b ./gcc/langhooks.c 1489632855b ./gcc/langhooks.h 2478673079b ./gcc/lcm.c 95519294b ./gcc/libfuncs.h + 1203905598b ./gcc/libgcc-std.ver 1895885741b ./gcc/libgcc2.c 3322762549b ./gcc/libgcc2.h 2497915666b ./gcc/limitx.h 1045880008b ./gcc/limity.h 1060915850b ./gcc/line-map.c *************** *** 3187,3198 **** 2979000969b ./gcc/local-alloc.c 1812783525b ./gcc/location.h 3570672314b ./gcc/longlong.h ! 3976331173b ./gcc/loop.c 3228595845b ./gcc/loop.h 1751002388b ./gcc/machmode.def 2912025978b ./gcc/machmode.h 189930733b ./gcc/main.c - 892780542b ./gcc/Makefile.in 2927199649b ./gcc/mbchar.c 1508701785b ./gcc/mbchar.h 886384654b ./gcc/mips-tdump.c --- 3207,3217 ---- 2979000969b ./gcc/local-alloc.c 1812783525b ./gcc/location.h 3570672314b ./gcc/longlong.h ! 2461034006b ./gcc/loop.c 3228595845b ./gcc/loop.h 1751002388b ./gcc/machmode.def 2912025978b ./gcc/machmode.h 189930733b ./gcc/main.c 2927199649b ./gcc/mbchar.c 1508701785b ./gcc/mbchar.h 886384654b ./gcc/mips-tdump.c *************** *** 3202,3255 **** 3976112005b ./gcc/mkdeps.h 27366989b ./gcc/mkheaders.in 827441351b ./gcc/mkinstalldirs ! 3700388981b ./gcc/mklibgcc.in 4201050746b ./gcc/mkmap-flat.awk 2348443687b ./gcc/mkmap-symver.awk 1597314052b ./gcc/move-if-change - 492608708b ./gcc/NEWS - 753535702b ./gcc/objc/config-lang.in 1966957144b ./gcc/objc/.cvsignore 588115418b ./gcc/objc/lang-options.h 2708854894b ./gcc/objc/lang-specs.h ! 1745196153b ./gcc/objc/Make-lang.in ! 883149047b ./gcc/objc/objc-act.c 288378628b ./gcc/objc/objc-act.h 1462887932b ./gcc/objc/objc-lang.c ! 999686990b ./gcc/objc/objc-parse.c 2857922994b ./gcc/objc/objc-parse.y 688475759b ./gcc/objc/objc-tree.def - 3823063152b ./gcc/objc/README - 1799560872b ./gcc/ONEWS 4252415064b ./gcc/optabs.c 2466464809b ./gcc/optabs.h 4051333287b ./gcc/output.h 3801250653b ./gcc/params.c 3767044429b ./gcc/params.def 984476649b ./gcc/params.h ! 3291441019b ./gcc/po/be.gmo ! 3594423100b ./gcc/po/be.po ! 1199822984b ./gcc/po/ChangeLog ! 958960227b ./gcc/po/da.gmo ! 473883872b ./gcc/po/da.po ! 389901689b ./gcc/po/de.gmo ! 2076067091b ./gcc/po/de.po ! 2873323341b ./gcc/po/el.gmo ! 4121888903b ./gcc/po/el.po ! 825518036b ./gcc/po/es.gmo ! 1730559885b ./gcc/po/es.po 4281232887b ./gcc/po/EXCLUDES 1546479817b ./gcc/po/exgettext ! 1211531287b ./gcc/po/fr.gmo ! 2260476203b ./gcc/po/fr.po ! 1817488335b ./gcc/po/gcc.pot ! 2362789050b ./gcc/po/ja.gmo ! 3621631224b ./gcc/po/ja.po ! 2038182908b ./gcc/po/nl.gmo ! 192023463b ./gcc/po/nl.po ! 1998743696b ./gcc/po/sv.gmo ! 3947169934b ./gcc/po/sv.po ! 3854613066b ./gcc/po/tr.gmo ! 58566242b ./gcc/po/tr.po 2822615021b ./gcc/predict.c 2384316111b ./gcc/predict.def 3422815786b ./gcc/predict.h --- 3221,3274 ---- 3976112005b ./gcc/mkdeps.h 27366989b ./gcc/mkheaders.in 827441351b ./gcc/mkinstalldirs ! 1822686237b ./gcc/mklibgcc.in 4201050746b ./gcc/mkmap-flat.awk 2348443687b ./gcc/mkmap-symver.awk 1597314052b ./gcc/move-if-change 1966957144b ./gcc/objc/.cvsignore + 1745196153b ./gcc/objc/Make-lang.in + 3823063152b ./gcc/objc/README + 753535702b ./gcc/objc/config-lang.in 588115418b ./gcc/objc/lang-options.h 2708854894b ./gcc/objc/lang-specs.h ! 1816865798b ./gcc/objc/objc-act.c 288378628b ./gcc/objc/objc-act.h 1462887932b ./gcc/objc/objc-lang.c ! 4201559909b ./gcc/objc/objc-parse.c 2857922994b ./gcc/objc/objc-parse.y 688475759b ./gcc/objc/objc-tree.def 4252415064b ./gcc/optabs.c 2466464809b ./gcc/optabs.h 4051333287b ./gcc/output.h 3801250653b ./gcc/params.c 3767044429b ./gcc/params.def 984476649b ./gcc/params.h ! 232711754b ./gcc/po/ChangeLog 4281232887b ./gcc/po/EXCLUDES + 1765678219b ./gcc/po/be.gmo + 2095359229b ./gcc/po/be.po + 4127882944b ./gcc/po/ca.gmo + 3020694974b ./gcc/po/ca.po + 3477757828b ./gcc/po/da.gmo + 770435044b ./gcc/po/da.po + 3139180654b ./gcc/po/de.gmo + 3761208068b ./gcc/po/de.po + 4252108517b ./gcc/po/el.gmo + 3238429704b ./gcc/po/el.po + 2070211671b ./gcc/po/es.gmo + 1202246575b ./gcc/po/es.po 1546479817b ./gcc/po/exgettext ! 1413648343b ./gcc/po/fr.gmo ! 2179384167b ./gcc/po/fr.po ! 1930890857b ./gcc/po/gcc.pot ! 3008828447b ./gcc/po/ja.gmo ! 2590678436b ./gcc/po/ja.po ! 2578977527b ./gcc/po/nl.gmo ! 3243705577b ./gcc/po/nl.po ! 3860930468b ./gcc/po/sv.gmo ! 1280363272b ./gcc/po/sv.po ! 2399217721b ./gcc/po/tr.gmo ! 1555835385b ./gcc/po/tr.po 2822615021b ./gcc/predict.c 2384316111b ./gcc/predict.def 3422815786b ./gcc/predict.h *************** *** 3262,3301 **** 1617327067b ./gcc/profile.h 4281450539b ./gcc/protoize.c 807691307b ./gcc/ra-build.c - 3695686739b ./gcc/ra.c 2476204354b ./gcc/ra-colorize.c 1510897850b ./gcc/ra-debug.c - 2452573025b ./gcc/ra.h 2855776542b ./gcc/ra-rewrite.c ! 2799003008b ./gcc/README-fixinc ! 756162762b ./gcc/README.Portability 58262063b ./gcc/read-rtl.c ! 1960863459b ./gcc/real.c 2102844529b ./gcc/real.h ! 3893622176b ./gcc/recog.c 3658154165b ./gcc/recog.h 1445421371b ./gcc/regclass.c 1380845695b ./gcc/regmove.c 886698666b ./gcc/regrename.c 4261713084b ./gcc/regs.h ! 2988316224b ./gcc/reg-stack.c ! 1851607546b ./gcc/reload1.c ! 2803735528b ./gcc/reload.c 3481272321b ./gcc/reload.h 926972925b ./gcc/reorg.c ! 249014842b ./gcc/resource.c ! 2605579460b ./gcc/resource.h ! 3358091595b ./gcc/rtlanal.c 2941705038b ./gcc/rtl.c 3774845754b ./gcc/rtl.def - 3586047414b ./gcc/rtl-error.c 462167881b ./gcc/rtl.h 1290811844b ./gcc/sbitmap.c 7124827b ./gcc/sbitmap.h - 75721905b ./gcc/scan.c 1193388276b ./gcc/scan-decls.c - 339714129b ./gcc/scan.h 3912741047b ./gcc/scan-types.sh 2704776331b ./gcc/sched-deps.c 3401032447b ./gcc/sched-ebb.c 227158360b ./gcc/sched-int.h --- 3281,3318 ---- 1617327067b ./gcc/profile.h 4281450539b ./gcc/protoize.c 807691307b ./gcc/ra-build.c 2476204354b ./gcc/ra-colorize.c 1510897850b ./gcc/ra-debug.c 2855776542b ./gcc/ra-rewrite.c ! 3695686739b ./gcc/ra.c ! 2452573025b ./gcc/ra.h 58262063b ./gcc/read-rtl.c ! 3710307879b ./gcc/real.c 2102844529b ./gcc/real.h ! 1280779673b ./gcc/recog.c 3658154165b ./gcc/recog.h + 1537960625b ./gcc/reg-stack.c 1445421371b ./gcc/regclass.c 1380845695b ./gcc/regmove.c 886698666b ./gcc/regrename.c 4261713084b ./gcc/regs.h ! 4081923274b ./gcc/reload.c 3481272321b ./gcc/reload.h + 963102091b ./gcc/reload1.c 926972925b ./gcc/reorg.c ! 998121861b ./gcc/resource.c ! 1496727907b ./gcc/resource.h ! 3586047414b ./gcc/rtl-error.c 2941705038b ./gcc/rtl.c 3774845754b ./gcc/rtl.def 462167881b ./gcc/rtl.h + 3358091595b ./gcc/rtlanal.c 1290811844b ./gcc/sbitmap.c 7124827b ./gcc/sbitmap.h 1193388276b ./gcc/scan-decls.c 3912741047b ./gcc/scan-types.sh + 75721905b ./gcc/scan.c + 339714129b ./gcc/scan.h 2704776331b ./gcc/sched-deps.c 3401032447b ./gcc/sched-ebb.c 227158360b ./gcc/sched-int.h *************** *** 3303,3315 **** 1669243185b ./gcc/sched-vis.c 3973591925b ./gcc/sdbout.c 1391855772b ./gcc/sdbout.h - 1084935625b ./gcc/SERVICE 2597421288b ./gcc/sibcall.c 2308948279b ./gcc/simplify-rtx.c 3345261950b ./gcc/sort-protos - 391689662b ./gcc/ssa.c 2842654676b ./gcc/ssa-ccp.c 2028254015b ./gcc/ssa-dce.c 3490823511b ./gcc/ssa.h 661640452b ./gcc/stab.def 471587796b ./gcc/stack.h --- 3320,3331 ---- 1669243185b ./gcc/sched-vis.c 3973591925b ./gcc/sdbout.c 1391855772b ./gcc/sdbout.h 2597421288b ./gcc/sibcall.c 2308948279b ./gcc/simplify-rtx.c 3345261950b ./gcc/sort-protos 2842654676b ./gcc/ssa-ccp.c 2028254015b ./gcc/ssa-dce.c + 391689662b ./gcc/ssa.c 3490823511b ./gcc/ssa.h 661640452b ./gcc/stab.def 471587796b ./gcc/stack.h *************** *** 3317,3345 **** 859696767b ./gcc/stor-layout.c 3600592812b ./gcc/stringpool.c 567176141b ./gcc/sys-protos.h - 1032468258b ./gcc/system.h 482558466b ./gcc/sys-types.h 3943359312b ./gcc/target-def.h 1185210674b ./gcc/target.h ! 776473652b ./gcc/testsuite/ChangeLog 1101480727b ./gcc/testsuite/config/default.exp 3657217366b ./gcc/testsuite/consistency.vlad/layout/a-char.c 2814769741b ./gcc/testsuite/consistency.vlad/layout/a-double.c 789833107b ./gcc/testsuite/consistency.vlad/layout/a-float.c 1654384929b ./gcc/testsuite/consistency.vlad/layout/a-int.c - 4146459649b ./gcc/testsuite/consistency.vlad/layout/align-bool.cpp - 2242642270b ./gcc/testsuite/consistency.vlad/layout/align-char.c - 1789069487b ./gcc/testsuite/consistency.vlad/layout/align-double.c - 2365706302b ./gcc/testsuite/consistency.vlad/layout/align-float.c - 1139013298b ./gcc/testsuite/consistency.vlad/layout/align-int.c - 2305175273b ./gcc/testsuite/consistency.vlad/layout/align-long.c - 1683867594b ./gcc/testsuite/consistency.vlad/layout/align-longdouble.c - 2116189486b ./gcc/testsuite/consistency.vlad/layout/align-longlong.c - 3775705613b ./gcc/testsuite/consistency.vlad/layout/align-pointer.c - 3243328118b ./gcc/testsuite/consistency.vlad/layout/align-ptrdiff.c - 3355052908b ./gcc/testsuite/consistency.vlad/layout/align-short.c - 2446562994b ./gcc/testsuite/consistency.vlad/layout/align-size.c - 4125888825b ./gcc/testsuite/consistency.vlad/layout/align-wchar.c 4126836986b ./gcc/testsuite/consistency.vlad/layout/a-long.c 2082883507b ./gcc/testsuite/consistency.vlad/layout/a-longdouble.c 1870550230b ./gcc/testsuite/consistency.vlad/layout/a-longlong.c --- 3333,3354 ---- 859696767b ./gcc/stor-layout.c 3600592812b ./gcc/stringpool.c 567176141b ./gcc/sys-protos.h 482558466b ./gcc/sys-types.h + 644385845b ./gcc/system.h 3943359312b ./gcc/target-def.h 1185210674b ./gcc/target.h ! 538408163b ./gcc/testsuite/ChangeLog ! 986418331b ./gcc/testsuite/README ! 3846056859b ./gcc/testsuite/README.QMTEST ! 922475304b ./gcc/testsuite/README.compat ! 4258789052b ./gcc/testsuite/README.g++ ! 174183124b ./gcc/testsuite/README.gcc 1101480727b ./gcc/testsuite/config/default.exp + 3207711727b ./gcc/testsuite/consistency.vlad/README 3657217366b ./gcc/testsuite/consistency.vlad/layout/a-char.c 2814769741b ./gcc/testsuite/consistency.vlad/layout/a-double.c 789833107b ./gcc/testsuite/consistency.vlad/layout/a-float.c 1654384929b ./gcc/testsuite/consistency.vlad/layout/a-int.c 4126836986b ./gcc/testsuite/consistency.vlad/layout/a-long.c 2082883507b ./gcc/testsuite/consistency.vlad/layout/a-longdouble.c 1870550230b ./gcc/testsuite/consistency.vlad/layout/a-longlong.c *************** *** 3358,3363 **** --- 3367,3385 ---- 3218633480b ./gcc/testsuite/consistency.vlad/layout/a-short.c 1126124139b ./gcc/testsuite/consistency.vlad/layout/a-size_t.c 3526110053b ./gcc/testsuite/consistency.vlad/layout/a-wchar_t.c + 4146459649b ./gcc/testsuite/consistency.vlad/layout/align-bool.cpp + 2242642270b ./gcc/testsuite/consistency.vlad/layout/align-char.c + 1789069487b ./gcc/testsuite/consistency.vlad/layout/align-double.c + 2365706302b ./gcc/testsuite/consistency.vlad/layout/align-float.c + 1139013298b ./gcc/testsuite/consistency.vlad/layout/align-int.c + 2305175273b ./gcc/testsuite/consistency.vlad/layout/align-long.c + 1683867594b ./gcc/testsuite/consistency.vlad/layout/align-longdouble.c + 2116189486b ./gcc/testsuite/consistency.vlad/layout/align-longlong.c + 3775705613b ./gcc/testsuite/consistency.vlad/layout/align-pointer.c + 3243328118b ./gcc/testsuite/consistency.vlad/layout/align-ptrdiff.c + 3355052908b ./gcc/testsuite/consistency.vlad/layout/align-short.c + 2446562994b ./gcc/testsuite/consistency.vlad/layout/align-size.c + 4125888825b ./gcc/testsuite/consistency.vlad/layout/align-wchar.c 3324795146b ./gcc/testsuite/consistency.vlad/layout/biggest-field-align.c 1487466473b ./gcc/testsuite/consistency.vlad/layout/c-char-1-c-char.cpp 3519286859b ./gcc/testsuite/consistency.vlad/layout/c-char-1-c-double.cpp *************** *** 3431,3445 **** 3230342428b ./gcc/testsuite/consistency.vlad/layout/c-int-2-c-longlong.cpp 443814793b ./gcc/testsuite/consistency.vlad/layout/c-int-2-c-pointer.cpp 986131700b ./gcc/testsuite/consistency.vlad/layout/c-int-2-c-short.cpp - 1839888072b ./gcc/testsuite/consistency.vlad/layout/class-char-and-virtual.cpp - 2259371507b ./gcc/testsuite/consistency.vlad/layout/class-double-and-virtual.cpp - 3308691044b ./gcc/testsuite/consistency.vlad/layout/class-float-and-virtual.cpp - 4237514561b ./gcc/testsuite/consistency.vlad/layout/class-int-and-virtual.cpp - 3380766571b ./gcc/testsuite/consistency.vlad/layout/class-long-and-virtual.cpp - 815671556b ./gcc/testsuite/consistency.vlad/layout/class-longdouble-and-virtual.cpp - 3694413639b ./gcc/testsuite/consistency.vlad/layout/class-longlong-and-virtual.cpp - 361431068b ./gcc/testsuite/consistency.vlad/layout/class-pointer-and-virtual.cpp - 4030637509b ./gcc/testsuite/consistency.vlad/layout/class-short-and-virtual.cpp 3640144004b ./gcc/testsuite/consistency.vlad/layout/c-long-1-c-char.cpp 3170239534b ./gcc/testsuite/consistency.vlad/layout/c-long-1-c-double.cpp 1373364368b ./gcc/testsuite/consistency.vlad/layout/c-long-1-c-float.cpp --- 3453,3458 ---- *************** *** 3530,3551 **** 4128191352b ./gcc/testsuite/consistency.vlad/layout/c-short-2-c-longlong.cpp 249914684b ./gcc/testsuite/consistency.vlad/layout/c-short-2-c-pointer.cpp 967840663b ./gcc/testsuite/consistency.vlad/layout/c-short-2-c-short.cpp 2630760029b ./gcc/testsuite/consistency.vlad/layout/endian.c 3691894150b ./gcc/testsuite/consistency.vlad/layout/f-0-0-5.c 2906280459b ./gcc/testsuite/consistency.vlad/layout/f-0-20-17.c 4153795460b ./gcc/testsuite/consistency.vlad/layout/f-0-24-24.c - 2223677750b ./gcc/testsuite/consistency.vlad/layout/f-10-11-10.c - 1656961235b ./gcc/testsuite/consistency.vlad/layout/f-11-12-10.c 2616499905b ./gcc/testsuite/consistency.vlad/layout/f-1-21-31.c 877204714b ./gcc/testsuite/consistency.vlad/layout/f-1-3-1.c 628897670b ./gcc/testsuite/consistency.vlad/layout/f-14-22-10.c 2499257242b ./gcc/testsuite/consistency.vlad/layout/f-14-29-30.c 1116508393b ./gcc/testsuite/consistency.vlad/layout/f-14-31-26.c 3215710590b ./gcc/testsuite/consistency.vlad/layout/f-14-8-9.c 2598471587b ./gcc/testsuite/consistency.vlad/layout/f-15-1-22.c 1235023325b ./gcc/testsuite/consistency.vlad/layout/f-16-30-15.c - 3175789490b ./gcc/testsuite/consistency.vlad/layout/f-17-17-20.c 1483764145b ./gcc/testsuite/consistency.vlad/layout/f-17-17-2.c 2825171767b ./gcc/testsuite/consistency.vlad/layout/f-17-21-17.c 3571484701b ./gcc/testsuite/consistency.vlad/layout/f-18-15-30.c 325844328b ./gcc/testsuite/consistency.vlad/layout/f-18-26-0.c --- 3543,3573 ---- 4128191352b ./gcc/testsuite/consistency.vlad/layout/c-short-2-c-longlong.cpp 249914684b ./gcc/testsuite/consistency.vlad/layout/c-short-2-c-pointer.cpp 967840663b ./gcc/testsuite/consistency.vlad/layout/c-short-2-c-short.cpp + 1839888072b ./gcc/testsuite/consistency.vlad/layout/class-char-and-virtual.cpp + 2259371507b ./gcc/testsuite/consistency.vlad/layout/class-double-and-virtual.cpp + 3308691044b ./gcc/testsuite/consistency.vlad/layout/class-float-and-virtual.cpp + 4237514561b ./gcc/testsuite/consistency.vlad/layout/class-int-and-virtual.cpp + 3380766571b ./gcc/testsuite/consistency.vlad/layout/class-long-and-virtual.cpp + 815671556b ./gcc/testsuite/consistency.vlad/layout/class-longdouble-and-virtual.cpp + 3694413639b ./gcc/testsuite/consistency.vlad/layout/class-longlong-and-virtual.cpp + 361431068b ./gcc/testsuite/consistency.vlad/layout/class-pointer-and-virtual.cpp + 4030637509b ./gcc/testsuite/consistency.vlad/layout/class-short-and-virtual.cpp 2630760029b ./gcc/testsuite/consistency.vlad/layout/endian.c 3691894150b ./gcc/testsuite/consistency.vlad/layout/f-0-0-5.c 2906280459b ./gcc/testsuite/consistency.vlad/layout/f-0-20-17.c 4153795460b ./gcc/testsuite/consistency.vlad/layout/f-0-24-24.c 2616499905b ./gcc/testsuite/consistency.vlad/layout/f-1-21-31.c 877204714b ./gcc/testsuite/consistency.vlad/layout/f-1-3-1.c + 2223677750b ./gcc/testsuite/consistency.vlad/layout/f-10-11-10.c + 1656961235b ./gcc/testsuite/consistency.vlad/layout/f-11-12-10.c 628897670b ./gcc/testsuite/consistency.vlad/layout/f-14-22-10.c 2499257242b ./gcc/testsuite/consistency.vlad/layout/f-14-29-30.c 1116508393b ./gcc/testsuite/consistency.vlad/layout/f-14-31-26.c 3215710590b ./gcc/testsuite/consistency.vlad/layout/f-14-8-9.c 2598471587b ./gcc/testsuite/consistency.vlad/layout/f-15-1-22.c 1235023325b ./gcc/testsuite/consistency.vlad/layout/f-16-30-15.c 1483764145b ./gcc/testsuite/consistency.vlad/layout/f-17-17-2.c + 3175789490b ./gcc/testsuite/consistency.vlad/layout/f-17-17-20.c 2825171767b ./gcc/testsuite/consistency.vlad/layout/f-17-21-17.c 3571484701b ./gcc/testsuite/consistency.vlad/layout/f-18-15-30.c 325844328b ./gcc/testsuite/consistency.vlad/layout/f-18-26-0.c *************** *** 3553,3558 **** --- 3575,3581 ---- 1812484656b ./gcc/testsuite/consistency.vlad/layout/f-18-4-17.c 3026961559b ./gcc/testsuite/consistency.vlad/layout/f-18-5-16.c 3538065200b ./gcc/testsuite/consistency.vlad/layout/f-19-6-22.c + 1424392875b ./gcc/testsuite/consistency.vlad/layout/f-2-25-27.c 2636321909b ./gcc/testsuite/consistency.vlad/layout/f-20-19-9.c 4072544979b ./gcc/testsuite/consistency.vlad/layout/f-20-20-15.c 3513144108b ./gcc/testsuite/consistency.vlad/layout/f-20-26-14.c *************** *** 3563,3569 **** 1590859529b ./gcc/testsuite/consistency.vlad/layout/f-21-5-26.c 1027772335b ./gcc/testsuite/consistency.vlad/layout/f-22-2-19.c 1959300243b ./gcc/testsuite/consistency.vlad/layout/f-22-2-28.c - 1424392875b ./gcc/testsuite/consistency.vlad/layout/f-2-25-27.c 4169983870b ./gcc/testsuite/consistency.vlad/layout/f-23-17-8.c 728940177b ./gcc/testsuite/consistency.vlad/layout/f-24-18-9.c 851596736b ./gcc/testsuite/consistency.vlad/layout/f-24-27-8.c --- 3586,3591 ---- *************** *** 3572,3586 **** 2248812453b ./gcc/testsuite/consistency.vlad/layout/f-27-22-7.c 3851531263b ./gcc/testsuite/consistency.vlad/layout/f-29-16-7.c 1140548972b ./gcc/testsuite/consistency.vlad/layout/f-29-4-10.c 3817519794b ./gcc/testsuite/consistency.vlad/layout/f-30-15-26.c 2254570093b ./gcc/testsuite/consistency.vlad/layout/f-30-24-30.c 1287065065b ./gcc/testsuite/consistency.vlad/layout/f-31-28-16.c 1393314717b ./gcc/testsuite/consistency.vlad/layout/f-31-4-14.c 1649382578b ./gcc/testsuite/consistency.vlad/layout/f-31-9-0.c - 600206604b ./gcc/testsuite/consistency.vlad/layout/f-3-7-1.c 666347310b ./gcc/testsuite/consistency.vlad/layout/f-4-14-29.c 821467656b ./gcc/testsuite/consistency.vlad/layout/f-5-23-7.c 2794715020b ./gcc/testsuite/consistency.vlad/layout/f-7-14-12.c 281818021b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-char.out 281818021b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-char.out++ 1727061245b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-double.out --- 3594,3609 ---- 2248812453b ./gcc/testsuite/consistency.vlad/layout/f-27-22-7.c 3851531263b ./gcc/testsuite/consistency.vlad/layout/f-29-16-7.c 1140548972b ./gcc/testsuite/consistency.vlad/layout/f-29-4-10.c + 600206604b ./gcc/testsuite/consistency.vlad/layout/f-3-7-1.c 3817519794b ./gcc/testsuite/consistency.vlad/layout/f-30-15-26.c 2254570093b ./gcc/testsuite/consistency.vlad/layout/f-30-24-30.c 1287065065b ./gcc/testsuite/consistency.vlad/layout/f-31-28-16.c 1393314717b ./gcc/testsuite/consistency.vlad/layout/f-31-4-14.c 1649382578b ./gcc/testsuite/consistency.vlad/layout/f-31-9-0.c 666347310b ./gcc/testsuite/consistency.vlad/layout/f-4-14-29.c 821467656b ./gcc/testsuite/consistency.vlad/layout/f-5-23-7.c 2794715020b ./gcc/testsuite/consistency.vlad/layout/f-7-14-12.c + 2156310103b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/README 281818021b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-char.out 281818021b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-char.out++ 1727061245b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-double.out *************** *** 3589,3625 **** 1601851831b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-float.out++ 3221406627b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-int.out 3221406627b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-int.out++ ! 3462656330b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-bool.out++ ! 2284866161b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-char.out ! 2284866161b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-char.out++ ! 2016168953b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-double.out ! 2016168953b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-double.out++ ! 3778571582b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-float.out ! 3778571582b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-float.out++ ! 2268947026b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-int.out ! 2268947026b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-int.out++ ! 3232401121b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-longdouble.out ! 3232401121b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-longdouble.out++ ! 2659664521b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-longlong.out ! 2659664521b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-longlong.out++ ! 3668254953b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-long.out ! 3668254953b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-long.out++ ! 3544657861b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-pointer.out ! 3544657861b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-pointer.out++ ! 568190957b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-ptrdiff.out ! 568190957b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-ptrdiff.out++ ! 1592598882b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-short.out ! 1592598882b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-short.out++ ! 2711568334b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-size.out ! 2711568334b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-size.out++ ! 1604716971b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-wchar.out ! 1604716971b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-wchar.out++ 2227734332b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-longdouble.out 2227734332b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-longdouble.out++ 1069590031b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-longlong.out 1069590031b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-longlong.out++ - 3142186771b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-long.out - 3142186771b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-long.out++ 1963275345b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-char.out 1963275345b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-char.out++ 2939358541b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-double.out --- 3612,3623 ---- 1601851831b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-float.out++ 3221406627b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-int.out 3221406627b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-int.out++ ! 3142186771b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-long.out ! 3142186771b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-long.out++ 2227734332b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-longdouble.out 2227734332b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-longdouble.out++ 1069590031b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-longlong.out 1069590031b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-longlong.out++ 1963275345b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-char.out 1963275345b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-char.out++ 2939358541b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-double.out *************** *** 3628,3639 **** 4001039866b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-float.out++ 3232823433b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-int.out 3232823433b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-int.out++ 2623902989b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-longdouble.out 2623902989b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-longdouble.out++ 1713649002b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-longlong.out 1713649002b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-longlong.out++ - 3779601801b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-long.out - 3779601801b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-long.out++ 2443484079b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-pointer.out 2443484079b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-pointer.out++ 3159633525b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-ptrdiff_t.out --- 3626,3637 ---- 4001039866b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-float.out++ 3232823433b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-int.out 3232823433b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-int.out++ + 3779601801b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-long.out + 3779601801b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-long.out++ 2623902989b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-longdouble.out 2623902989b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-longdouble.out++ 1713649002b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-longlong.out 1713649002b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-longlong.out++ 2443484079b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-pointer.out 2443484079b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-pointer.out++ 3159633525b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-ptrdiff_t.out *************** *** 3650,3746 **** 4156594561b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-size_t.out++ 492360794b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-wchar_t.out 492360794b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-wchar_t.out++ 4129036106b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/biggest-field-align.out 4129036106b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/biggest-field-align.out++ 4100226006b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-1-c-char.out++ 3647609206b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-1-c-double.out++ 706559590b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-1-c-float.out++ 1215678453b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-1-c-int.out++ 2100244020b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-1-c-longdouble.out+ 48453457b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-1-c-longlong.out++ - 4196765215b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-1-c-long.out++ 3131996511b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-1-c-pointer.out++ 1181309658b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-1-c-short.out++ 3978860778b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-2-c-char.out++ 2575125216b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-2-c-double.out++ 3758626543b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-2-c-float.out++ 876931045b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-2-c-int.out++ 2507562199b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-2-c-longdouble.out+ 1079948168b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-2-c-longlong.out++ - 3122728674b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-2-c-long.out++ 557528819b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-2-c-pointer.out++ 984328826b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-2-c-short.out++ 3870081867b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-1-c-char.out++ 19559768b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-1-c-double.out++ 2915080636b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-1-c-float.out++ 391114415b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-1-c-int.out++ - 2943384114b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-1-c-longlong.out+ 897790368b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-1-c-long.out++ 1812530953b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-1-c-pointer.out++ 4419316b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-1-c-short.out++ 1529425773b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-2-c-char.out++ 2110018195b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-2-c-double.out++ 431267742b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-2-c-float.out++ 4127117436b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-2-c-int.out++ - 3919625178b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-2-c-longlong.out+ 3610473804b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-2-c-long.out++ 4161112465b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-2-c-pointer.out++ 2097187829b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-2-c-short.out++ 638577261b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-1-c-char.out++ 476074193b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-1-c-double.out++ 384192667b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-1-c-float.out++ 3196085957b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-1-c-int.out++ 3708436693b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-1-c-longdouble.out 2203415599b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-1-c-longlong.out++ - 964541378b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-1-c-long.out++ 317097833b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-1-c-pointer.out++ 2217857064b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-1-c-short.out++ 3381433116b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-2-c-char.out++ 429641349b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-2-c-double.out++ 3143138522b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-2-c-float.out++ 637049178b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-2-c-int.out++ 2436155461b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-2-c-longdouble.out 1035042416b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-2-c-longlong.out++ - 3915291152b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-2-c-long.out++ 2715660950b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-2-c-pointer.out++ 1668069472b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-2-c-short.out++ 3152579670b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-1-c-char.out++ 1138705949b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-1-c-double.out++ 2023313489b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-1-c-float.out++ 1706645581b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-1-c-int.out++ 1167102151b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-1-c-longdouble.out++ 853135804b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-1-c-longlong.out++ - 824095637b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-1-c-long.out++ 2845722513b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-1-c-pointer.out++ 1032279461b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-1-c-short.out++ 150139450b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-2-c-char.out++ 3993039563b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-2-c-double.out++ 1771341638b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-2-c-float.out++ 981734500b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-2-c-int.out++ 1272920488b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-2-c-longdouble.out++ 2082772967b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-2-c-longlong.out++ - 673250102b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-2-c-long.out++ 1447464664b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-2-c-pointer.out++ 2980070396b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-2-c-short.out++ - 3338202537b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/class-char-and-virtual.out - 836464684b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/class-int-and-virtual.out+ - 3651827794b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/class-long-and-virtual.out 978303701b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-1-c-char.out++ 1349831301b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-1-c-double.out++ 4055309409b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-1-c-float.out++ 281114634b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-1-c-int.out++ 1591591915b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-1-c-longdouble.out+ 1601182123b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-1-c-longlong.out++ - 2092387878b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-1-c-long.out++ 1167331858b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-1-c-pointer.out++ 1373996143b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-1-c-short.out++ 328768010b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-2-c-char.out++ 3391651497b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-2-c-double.out++ 1331092866b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-2-c-float.out++ 1363762993b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-2-c-int.out++ 3764776043b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-2-c-longdouble.out+ 3487659489b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-2-c-longlong.out++ - 860525318b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-2-c-long.out++ 1919812282b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-2-c-pointer.out++ 2539788600b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-2-c-short.out++ 1261002308b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-longdouble-1-c-char.out+ --- 3648,3766 ---- 4156594561b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-size_t.out++ 492360794b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-wchar_t.out 492360794b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-wchar_t.out++ + 3462656330b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-bool.out++ + 2284866161b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-char.out + 2284866161b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-char.out++ + 2016168953b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-double.out + 2016168953b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-double.out++ + 3778571582b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-float.out + 3778571582b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-float.out++ + 2268947026b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-int.out + 2268947026b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-int.out++ + 3668254953b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-long.out + 3668254953b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-long.out++ + 3232401121b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-longdouble.out + 3232401121b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-longdouble.out++ + 2659664521b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-longlong.out + 2659664521b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-longlong.out++ + 3544657861b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-pointer.out + 3544657861b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-pointer.out++ + 568190957b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-ptrdiff.out + 568190957b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-ptrdiff.out++ + 1592598882b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-short.out + 1592598882b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-short.out++ + 2711568334b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-size.out + 2711568334b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-size.out++ + 1604716971b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-wchar.out + 1604716971b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-wchar.out++ 4129036106b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/biggest-field-align.out 4129036106b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/biggest-field-align.out++ 4100226006b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-1-c-char.out++ 3647609206b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-1-c-double.out++ 706559590b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-1-c-float.out++ 1215678453b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-1-c-int.out++ + 4196765215b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-1-c-long.out++ 2100244020b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-1-c-longdouble.out+ 48453457b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-1-c-longlong.out++ 3131996511b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-1-c-pointer.out++ 1181309658b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-1-c-short.out++ 3978860778b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-2-c-char.out++ 2575125216b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-2-c-double.out++ 3758626543b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-2-c-float.out++ 876931045b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-2-c-int.out++ + 3122728674b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-2-c-long.out++ 2507562199b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-2-c-longdouble.out+ 1079948168b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-2-c-longlong.out++ 557528819b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-2-c-pointer.out++ 984328826b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-2-c-short.out++ 3870081867b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-1-c-char.out++ 19559768b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-1-c-double.out++ 2915080636b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-1-c-float.out++ 391114415b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-1-c-int.out++ 897790368b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-1-c-long.out++ + 2943384114b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-1-c-longlong.out+ 1812530953b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-1-c-pointer.out++ 4419316b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-1-c-short.out++ 1529425773b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-2-c-char.out++ 2110018195b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-2-c-double.out++ 431267742b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-2-c-float.out++ 4127117436b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-2-c-int.out++ 3610473804b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-2-c-long.out++ + 3919625178b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-2-c-longlong.out+ 4161112465b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-2-c-pointer.out++ 2097187829b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-2-c-short.out++ 638577261b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-1-c-char.out++ 476074193b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-1-c-double.out++ 384192667b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-1-c-float.out++ 3196085957b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-1-c-int.out++ + 964541378b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-1-c-long.out++ 3708436693b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-1-c-longdouble.out 2203415599b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-1-c-longlong.out++ 317097833b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-1-c-pointer.out++ 2217857064b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-1-c-short.out++ 3381433116b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-2-c-char.out++ 429641349b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-2-c-double.out++ 3143138522b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-2-c-float.out++ 637049178b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-2-c-int.out++ + 3915291152b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-2-c-long.out++ 2436155461b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-2-c-longdouble.out 1035042416b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-2-c-longlong.out++ 2715660950b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-2-c-pointer.out++ 1668069472b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-2-c-short.out++ 3152579670b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-1-c-char.out++ 1138705949b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-1-c-double.out++ 2023313489b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-1-c-float.out++ 1706645581b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-1-c-int.out++ + 824095637b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-1-c-long.out++ 1167102151b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-1-c-longdouble.out++ 853135804b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-1-c-longlong.out++ 2845722513b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-1-c-pointer.out++ 1032279461b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-1-c-short.out++ 150139450b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-2-c-char.out++ 3993039563b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-2-c-double.out++ 1771341638b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-2-c-float.out++ 981734500b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-2-c-int.out++ + 673250102b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-2-c-long.out++ 1272920488b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-2-c-longdouble.out++ 2082772967b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-2-c-longlong.out++ 1447464664b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-2-c-pointer.out++ 2980070396b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-2-c-short.out++ 978303701b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-1-c-char.out++ 1349831301b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-1-c-double.out++ 4055309409b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-1-c-float.out++ 281114634b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-1-c-int.out++ + 2092387878b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-1-c-long.out++ 1591591915b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-1-c-longdouble.out+ 1601182123b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-1-c-longlong.out++ 1167331858b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-1-c-pointer.out++ 1373996143b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-1-c-short.out++ 328768010b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-2-c-char.out++ 3391651497b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-2-c-double.out++ 1331092866b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-2-c-float.out++ 1363762993b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-2-c-int.out++ + 860525318b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-2-c-long.out++ 3764776043b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-2-c-longdouble.out+ 3487659489b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-2-c-longlong.out++ 1919812282b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-2-c-pointer.out++ 2539788600b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-2-c-short.out++ 1261002308b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-longdouble-1-c-char.out+ *************** *** 3771,3806 **** 1049692423b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-1-c-double.out++ 1162385065b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-1-c-float.out++ 1723690768b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-1-c-int.out++ - 1018652914b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-1-c-longlong.out 1122627681b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-1-c-long.out++ 3157843542b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-1-c-pointer.out+ 274267090b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-1-c-short.out++ 1856515882b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-2-c-char.out++ 1292784229b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-2-c-double.out++ 1950731775b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-2-c-float.out++ 1717751486b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-2-c-int.out++ - 2591426150b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-2-c-longlong.out 1316628006b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-2-c-long.out++ 4115148406b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-2-c-pointer.out+ 2893089093b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-2-c-short.out++ 3269036579b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-1-c-char.out++ 327031780b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-1-c-double.out++ 1794337572b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-1-c-float.out++ 799398662b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-1-c-int.out++ 82846972b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-1-c-longdouble.out 3028299097b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-1-c-longlong.out++ - 294463294b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-1-c-long.out++ 3616473829b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-1-c-pointer.out++ 4123209829b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-1-c-short.out++ 2386618953b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-2-c-char.out++ 337500653b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-2-c-double.out++ 2241141027b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-2-c-float.out++ 3329743364b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-2-c-int.out++ 3880624999b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-2-c-longdouble.out 3865506072b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-2-c-longlong.out++ - 1783534270b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-2-c-long.out++ 2891687422b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-2-c-pointer.out++ 3938727462b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-2-c-short.out++ 2162077044b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/endian.out 2162077044b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/endian.out++ 3419137637b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-0-0-5.out --- 3791,3829 ---- 1049692423b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-1-c-double.out++ 1162385065b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-1-c-float.out++ 1723690768b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-1-c-int.out++ 1122627681b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-1-c-long.out++ + 1018652914b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-1-c-longlong.out 3157843542b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-1-c-pointer.out+ 274267090b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-1-c-short.out++ 1856515882b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-2-c-char.out++ 1292784229b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-2-c-double.out++ 1950731775b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-2-c-float.out++ 1717751486b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-2-c-int.out++ 1316628006b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-2-c-long.out++ + 2591426150b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-2-c-longlong.out 4115148406b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-2-c-pointer.out+ 2893089093b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-2-c-short.out++ 3269036579b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-1-c-char.out++ 327031780b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-1-c-double.out++ 1794337572b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-1-c-float.out++ 799398662b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-1-c-int.out++ + 294463294b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-1-c-long.out++ 82846972b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-1-c-longdouble.out 3028299097b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-1-c-longlong.out++ 3616473829b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-1-c-pointer.out++ 4123209829b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-1-c-short.out++ 2386618953b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-2-c-char.out++ 337500653b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-2-c-double.out++ 2241141027b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-2-c-float.out++ 3329743364b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-2-c-int.out++ + 1783534270b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-2-c-long.out++ 3880624999b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-2-c-longdouble.out 3865506072b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-2-c-longlong.out++ 2891687422b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-2-c-pointer.out++ 3938727462b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-2-c-short.out++ + 3338202537b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/class-char-and-virtual.out + 836464684b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/class-int-and-virtual.out+ + 3651827794b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/class-long-and-virtual.out 2162077044b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/endian.out 2162077044b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/endian.out++ 3419137637b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-0-0-5.out *************** *** 3809,3822 **** 4063785218b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-0-20-17.out++ 3595644405b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-0-24-24.out 2437734191b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-0-24-24.out++ - 3203785748b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-10-11-10.out - 3203785748b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-10-11-10.out++ - 3883743979b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-11-12-10.out - 3883743979b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-11-12-10.out++ 1776162150b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-1-21-31.out 1776162150b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-1-21-31.out++ 4292846411b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-1-3-1.out 4292846411b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-1-3-1.out++ 268554786b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-14-22-10.out 268554786b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-14-22-10.out++ 3887247867b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-14-29-30.out --- 3832,3845 ---- 4063785218b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-0-20-17.out++ 3595644405b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-0-24-24.out 2437734191b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-0-24-24.out++ 1776162150b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-1-21-31.out 1776162150b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-1-21-31.out++ 4292846411b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-1-3-1.out 4292846411b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-1-3-1.out++ + 3203785748b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-10-11-10.out + 3203785748b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-10-11-10.out++ + 3883743979b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-11-12-10.out + 3883743979b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-11-12-10.out++ 268554786b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-14-22-10.out 268554786b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-14-22-10.out++ 3887247867b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-14-29-30.out *************** *** 3829,3838 **** 2504143009b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-15-1-22.out++ 285193031b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-16-30-15.out 285193031b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-16-30-15.out++ - 1491637755b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-17-17-20.out - 1491637755b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-17-17-20.out++ 3346294426b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-17-17-2.out 3346294426b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-17-17-2.out++ 2949641380b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-17-21-17.out 2949641380b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-17-21-17.out++ 3877885575b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-18-15-30.out --- 3852,3861 ---- 2504143009b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-15-1-22.out++ 285193031b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-16-30-15.out 285193031b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-16-30-15.out++ 3346294426b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-17-17-2.out 3346294426b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-17-17-2.out++ + 1491637755b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-17-17-20.out + 1491637755b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-17-17-20.out++ 2949641380b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-17-21-17.out 2949641380b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-17-21-17.out++ 3877885575b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-18-15-30.out *************** *** 3847,3852 **** --- 3870,3877 ---- 1291671333b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-18-5-16.out++ 1700775495b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-19-6-22.out 1700775495b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-19-6-22.out++ + 906364881b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-2-25-27.out + 906364881b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-2-25-27.out++ 123227249b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-20-19-9.out 123227249b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-20-19-9.out++ 1217631134b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-20-20-15.out *************** *** 3867,3874 **** 1675033355b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-22-2-19.out++ 419856428b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-22-2-28.out 419856428b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-22-2-28.out++ - 906364881b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-2-25-27.out - 906364881b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-2-25-27.out++ 2034059518b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-23-17-8.out 2034059518b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-23-17-8.out++ 4200924887b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-24-18-9.out --- 3892,3897 ---- *************** *** 3885,3890 **** --- 3908,3915 ---- 3387583484b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-29-16-7.out++ 2411254670b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-29-4-10.out 2411254670b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-29-4-10.out++ + 1816309710b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-3-7-1.out + 1816309710b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-3-7-1.out++ 1870571592b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-30-15-26.out 1870571592b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-30-15-26.out++ 1466032498b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-30-24-30.out *************** *** 3895,3909 **** 663265344b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-31-4-14.out++ 1272990598b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-31-9-0.out 785742212b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-31-9-0.out++ - 1816309710b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-3-7-1.out - 1816309710b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-3-7-1.out++ 4120030053b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-4-14-29.out 4120030053b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-4-14-29.out++ 140937946b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-5-23-7.out 140937946b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-5-23-7.out++ 1100765591b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-7-14-12.out 1100765591b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-7-14-12.out++ - 2156310103b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/README 13174497b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-char.out 13174497b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-char.out++ 1263879599b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-double.out --- 3920,3931 ---- *************** *** 3912,3923 **** 3169577204b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-float.out++ 3237207754b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-int.out 3237207754b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-int.out++ 300638802b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-longdouble.out 300638802b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-longdouble.out++ 851353395b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-longlong.out 851353395b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-longlong.out++ - 1717871431b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-long.out - 1717871431b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-long.out++ 2838094559b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-pointer.out 2838094559b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-pointer.out++ 4192163054b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-short.out --- 3934,3945 ---- 3169577204b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-float.out++ 3237207754b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-int.out 3237207754b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-int.out++ + 1717871431b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-long.out + 1717871431b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-long.out++ 300638802b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-longdouble.out 300638802b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-longdouble.out++ 851353395b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-longlong.out 851353395b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-longlong.out++ 2838094559b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-pointer.out 2838094559b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-pointer.out++ 4192163054b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-short.out *************** *** 3930,3941 **** 3332841867b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-float.out++ 1726003194b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-int.out 1726003194b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-int.out++ 2075118149b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-longdouble.out 2075118149b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-longdouble.out++ 4051434430b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-longlong.out 4051434430b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-longlong.out++ - 1941216341b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-long.out - 1941216341b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-long.out++ 3517893171b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-pointer.out 3517893171b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-pointer.out++ 1361556762b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-ptrdiff_t.out --- 3952,3963 ---- 3332841867b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-float.out++ 1726003194b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-int.out 1726003194b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-int.out++ + 1941216341b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-long.out + 1941216341b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-long.out++ 2075118149b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-longdouble.out 2075118149b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-longdouble.out++ 4051434430b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-longlong.out 4051434430b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-longlong.out++ 3517893171b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-pointer.out 3517893171b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-pointer.out++ 1361556762b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-ptrdiff_t.out *************** *** 3946,3977 **** 3472798323b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-double.out++ 1163555929b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-float.out 1163555929b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-float.out++ - 2797269136b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-short.out - 2797269136b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-short.out++ 611130168b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-int.out 611130168b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-int.out++ ! 3946363802b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-size_t.out ! 3946363802b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-size_t.out++ 1330421760b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-longdouble.out 1330421760b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-longdouble.out++ 2813748371b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-longlong.out 2813748371b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-longlong.out++ - 3300687114b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-long.out - 3300687114b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-long.out++ 622013241b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-pointer.out 622013241b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-pointer.out++ 2254695019b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-short.out 2254695019b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-short.out++ 782081091b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-wchar_t.out 782081091b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-wchar_t.out++ 4058125827b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-zf-char.out 2028972393b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-zf-char.out++ 2183773616b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-zf-int.out 720666868b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-zf-int.out++ - 2722211350b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-zf-longlong.out - 3171703288b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-zf-longlong.out++ 3570596356b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-zf-long.out 3870166054b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-zf-long.out++ 3936055108b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-zf-short.out 2420900899b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-zf-short.out++ 4236338674b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-char.out --- 3968,3999 ---- 3472798323b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-double.out++ 1163555929b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-float.out 1163555929b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-float.out++ 611130168b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-int.out 611130168b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-int.out++ ! 3300687114b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-long.out ! 3300687114b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-long.out++ 1330421760b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-longdouble.out 1330421760b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-longdouble.out++ 2813748371b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-longlong.out 2813748371b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-longlong.out++ 622013241b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-pointer.out 622013241b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-pointer.out++ 2254695019b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-short.out 2254695019b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-short.out++ + 2797269136b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-short.out + 2797269136b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-short.out++ + 3946363802b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-size_t.out + 3946363802b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-size_t.out++ 782081091b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-wchar_t.out 782081091b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-wchar_t.out++ 4058125827b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-zf-char.out 2028972393b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-zf-char.out++ 2183773616b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-zf-int.out 720666868b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-zf-int.out++ 3570596356b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-zf-long.out 3870166054b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-zf-long.out++ + 2722211350b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-zf-longlong.out + 3171703288b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-zf-longlong.out++ 3936055108b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-zf-short.out 2420900899b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-zf-short.out++ 4236338674b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-char.out *************** *** 3982,3993 **** 424524236b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-float.out++ 2185924966b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-int.out 2185924966b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-int.out++ 3208408277b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-longdouble.out 3208408277b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-longdouble.out+ 616366511b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-longlong.out 616366511b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-longlong.out++ - 1377847542b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-long.out - 1377847542b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-long.out++ 1932644731b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-pointer.out 1932644731b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-pointer.out++ 2597633381b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-short.out --- 4004,4015 ---- 424524236b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-float.out++ 2185924966b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-int.out 2185924966b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-int.out++ + 1377847542b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-long.out + 1377847542b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-long.out++ 3208408277b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-longdouble.out 3208408277b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-longdouble.out+ 616366511b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-longlong.out 616366511b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-longlong.out++ 1932644731b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-pointer.out 1932644731b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-pointer.out++ 2597633381b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-short.out *************** *** 4000,4011 **** 3759577000b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-float.out++ 51600390b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-int.out 51600390b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-int.out++ 3808892329b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-longdouble.out 3808892329b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-longdouble.out++ 3894925976b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-longlong.out 3894925976b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-longlong.out++ - 3724144772b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-long.out - 3724144772b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-long.out++ 1869357795b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-pointer.out 1869357795b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-pointer.out++ 993350744b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-ptrdiff_t.out --- 4022,4033 ---- 3759577000b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-float.out++ 51600390b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-int.out 51600390b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-int.out++ + 3724144772b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-long.out + 3724144772b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-long.out++ 3808892329b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-longdouble.out 3808892329b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-longdouble.out++ 3894925976b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-longlong.out 3894925976b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-longlong.out++ 1869357795b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-pointer.out 1869357795b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-pointer.out++ 993350744b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-ptrdiff_t.out *************** *** 4016,4047 **** 2223824125b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-double.out++ 3883069309b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-float.out 3883069309b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-float.out++ - 351083924b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-short.out - 351083924b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-short.out++ 2863998748b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-int.out 2863998748b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-int.out++ ! 3505234855b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-size_t.out ! 3505234855b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-size_t.out++ 1829775023b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-longdouble.out 1829775023b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-longdouble.out+ 284599855b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-longlong.out 284599855b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-longlong.out++ - 2272464711b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-long.out - 2272464711b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-long.out++ 598623650b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-pointer.out 598623650b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-pointer.out++ 2749602529b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-short.out 2749602529b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-short.out++ 3026762224b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-wchar_t.out 3026762224b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-wchar_t.out++ 3986574077b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-zf-char.out 2222066822b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-zf-char.out++ 1754736725b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-zf-int.out 1559899710b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-zf-int.out++ - 3088104680b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-zf-longlong.out - 3583168624b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-zf-longlong.out++ 2138195968b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-zf-long.out 1206677029b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-zf-long.out++ 868552483b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-zf-short.out 3855067152b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-zf-short.out++ 424345382b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-char.out --- 4038,4069 ---- 2223824125b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-double.out++ 3883069309b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-float.out 3883069309b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-float.out++ 2863998748b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-int.out 2863998748b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-int.out++ ! 2272464711b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-long.out ! 2272464711b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-long.out++ 1829775023b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-longdouble.out 1829775023b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-longdouble.out+ 284599855b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-longlong.out 284599855b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-longlong.out++ 598623650b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-pointer.out 598623650b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-pointer.out++ 2749602529b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-short.out 2749602529b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-short.out++ + 351083924b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-short.out + 351083924b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-short.out++ + 3505234855b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-size_t.out + 3505234855b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-size_t.out++ 3026762224b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-wchar_t.out 3026762224b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-wchar_t.out++ 3986574077b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-zf-char.out 2222066822b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-zf-char.out++ 1754736725b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-zf-int.out 1559899710b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-zf-int.out++ 2138195968b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-zf-long.out 1206677029b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-zf-long.out++ + 3088104680b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-zf-longlong.out + 3583168624b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-zf-longlong.out++ 868552483b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-zf-short.out 3855067152b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-zf-short.out++ 424345382b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-char.out *************** *** 4052,4063 **** 1489296274b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-float.out++ 1250016403b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-int.out 1250016403b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-int.out++ 1568017389b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-longdouble.out 1568017389b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-longdouble.out++ 1248642357b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-longlong.out 1248642357b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-longlong.out++ - 2598597791b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-long.out - 2598597791b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-long.out++ 799116997b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-pointer.out 799116997b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-pointer.out++ 3756480259b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-short.out --- 4074,4085 ---- 1489296274b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-float.out++ 1250016403b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-int.out 1250016403b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-int.out++ + 2598597791b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-long.out + 2598597791b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-long.out++ 1568017389b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-longdouble.out 1568017389b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-longdouble.out++ 1248642357b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-longlong.out 1248642357b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-longlong.out++ 799116997b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-pointer.out 799116997b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-pointer.out++ 3756480259b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-short.out *************** *** 4070,4081 **** 1556696261b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-float.out++ 1622170282b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-int.out 1622170282b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-int.out++ 1134958145b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-longdouble.out 1134958145b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-longdouble.out++ 3168453682b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-longlong.out 3168453682b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-longlong.out++ - 530122249b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-long.out - 530122249b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-long.out++ 2922640763b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-pointer.out 2922640763b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-pointer.out++ 4066163210b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-ptrdiff_t.out --- 4092,4103 ---- 1556696261b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-float.out++ 1622170282b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-int.out 1622170282b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-int.out++ + 530122249b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-long.out + 530122249b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-long.out++ 1134958145b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-longdouble.out 1134958145b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-longdouble.out++ 3168453682b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-longlong.out 3168453682b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-longlong.out++ 2922640763b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-pointer.out 2922640763b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-pointer.out++ 4066163210b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-ptrdiff_t.out *************** *** 4086,4117 **** 1420738760b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-double.out++ 1009261265b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-float.out 1009261265b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-float.out++ - 233068758b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-short.out - 233068758b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-short.out++ 2256009544b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-int.out 2256009544b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-int.out++ ! 3735342934b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-size_t.out ! 3735342934b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-size_t.out++ 310608698b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-longdouble.out 310608698b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-longdouble.out++ 229917060b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-longlong.out 229917060b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-longlong.out++ - 1389606757b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-long.out - 1389606757b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-long.out++ 1605766695b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-pointer.out 1605766695b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-pointer.out++ 1493100197b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-short.out 1493100197b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-short.out++ 1525245762b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-wchar_t.out 1525245762b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-wchar_t.out++ 2458932893b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-zf-char.out 2965855099b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-zf-char.out++ 349006013b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-zf-int.out 2335123085b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-zf-int.out++ - 1503454956b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-zf-longlong.out - 2287857977b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-zf-longlong.out++ 1137560689b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-zf-long.out 430614706b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-zf-long.out++ 811714276b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-zf-short.out 2579260275b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-zf-short.out++ 3026572564b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-char.out --- 4108,4139 ---- 1420738760b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-double.out++ 1009261265b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-float.out 1009261265b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-float.out++ 2256009544b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-int.out 2256009544b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-int.out++ ! 1389606757b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-long.out ! 1389606757b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-long.out++ 310608698b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-longdouble.out 310608698b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-longdouble.out++ 229917060b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-longlong.out 229917060b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-longlong.out++ 1605766695b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-pointer.out 1605766695b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-pointer.out++ 1493100197b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-short.out 1493100197b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-short.out++ + 233068758b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-short.out + 233068758b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-short.out++ + 3735342934b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-size_t.out + 3735342934b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-size_t.out++ 1525245762b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-wchar_t.out 1525245762b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-wchar_t.out++ 2458932893b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-zf-char.out 2965855099b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-zf-char.out++ 349006013b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-zf-int.out 2335123085b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-zf-int.out++ 1137560689b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-zf-long.out 430614706b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-zf-long.out++ + 1503454956b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-zf-longlong.out + 2287857977b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-zf-longlong.out++ 811714276b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-zf-short.out 2579260275b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-zf-short.out++ 3026572564b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-char.out *************** *** 4122,4133 **** 879973237b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-float.out++ 3051633289b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-int.out 3051633289b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-int.out++ 2410327242b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-longdouble.out 2410327242b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-longdouble.out++ 3929531475b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-longlong.out 3929531475b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-longlong.out++ - 2062849219b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-long.out - 2062849219b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-long.out++ 3096965928b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-pointer.out 3096965928b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-pointer.out++ 1204833150b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-short.out --- 4144,4155 ---- 879973237b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-float.out++ 3051633289b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-int.out 3051633289b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-int.out++ + 2062849219b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-long.out + 2062849219b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-long.out++ 2410327242b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-longdouble.out 2410327242b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-longdouble.out++ 3929531475b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-longlong.out 3929531475b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-longlong.out++ 3096965928b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-pointer.out 3096965928b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-pointer.out++ 1204833150b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-short.out *************** *** 4140,4151 **** 3856842277b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-float.out++ 3890912034b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-int.out 3890912034b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-int.out++ 3592101251b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-longdouble.out 3592101251b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-longdouble.out++ 881354323b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-longlong.out 881354323b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-longlong.out++ - 162876982b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-long.out - 162876982b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-long.out++ 3497380019b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-pointer.out 3497380019b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-pointer.out++ 127240785b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-ptrdiff_t.out --- 4162,4173 ---- 3856842277b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-float.out++ 3890912034b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-int.out 3890912034b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-int.out++ + 162876982b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-long.out + 162876982b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-long.out++ 3592101251b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-longdouble.out 3592101251b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-longdouble.out++ 881354323b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-longlong.out 881354323b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-longlong.out++ 3497380019b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-pointer.out 3497380019b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-pointer.out++ 127240785b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-ptrdiff_t.out *************** *** 4156,4214 **** 1788492129b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-double.out++ 3331892538b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-float.out 3331892538b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-float.out++ - 3410880438b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-short.out - 3410880438b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-short.out++ 446524396b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-int.out 446524396b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-int.out++ ! 2907962645b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-size_t.out ! 2907962645b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-size_t.out++ 476184310b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-longdouble.out 476184310b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-longdouble.out++ 4058854518b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-longlong.out 4058854518b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-longlong.out++ - 751158190b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-long.out - 751158190b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-long.out++ 1766070031b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-pointer.out 1766070031b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-pointer.out++ 2844975244b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-short.out 2844975244b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-short.out++ 496574257b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-wchar_t.out 496574257b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-wchar_t.out++ 3465834813b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-zf-char.out 3886284191b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-zf-char.out++ 1090439347b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-zf-int.out 3979163905b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-zf-int.out++ - 2062836287b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-zf-longlong.out - 3075841449b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-zf-longlong.out++ 2400092189b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-zf-long.out 3700180902b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-zf-long.out++ 2158685975b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-zf-short.out 1012271831b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-zf-short.out++ - 4107261541b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-bool.out++ - 919632946b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-char.out - 919632946b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-char.out++ - 1524915532b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-double.out - 1524915532b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-double.out++ - 594930693b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-float.out - 594930693b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-float.out++ - 1957268000b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-int.out - 1957268000b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-int.out++ - 1658583497b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-longdouble.out - 1658583497b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-longdouble.out++ - 312453039b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-longlong.out - 312453039b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-longlong.out++ - 1244662439b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-long.out - 1244662439b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-long.out++ - 3802875737b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-pointer.out - 3802875737b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-pointer.out++ - 1324451320b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-ptrdiff.out - 1324451320b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-ptrdiff.out++ - 1620300254b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-short.out - 1620300254b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-short.out++ - 1933118540b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-size.out - 1933118540b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-size.out++ - 3741425609b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-wchar.out - 3741425609b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-wchar.out++ 1870109470b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-char.out 1870109470b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-char.out++ 1651744974b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-double.out --- 4178,4211 ---- 1788492129b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-double.out++ 3331892538b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-float.out 3331892538b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-float.out++ 446524396b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-int.out 446524396b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-int.out++ ! 751158190b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-long.out ! 751158190b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-long.out++ 476184310b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-longdouble.out 476184310b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-longdouble.out++ 4058854518b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-longlong.out 4058854518b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-longlong.out++ 1766070031b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-pointer.out 1766070031b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-pointer.out++ 2844975244b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-short.out 2844975244b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-short.out++ + 3410880438b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-short.out + 3410880438b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-short.out++ + 2907962645b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-size_t.out + 2907962645b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-size_t.out++ 496574257b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-wchar_t.out 496574257b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-wchar_t.out++ 3465834813b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-zf-char.out 3886284191b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-zf-char.out++ 1090439347b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-zf-int.out 3979163905b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-zf-int.out++ 2400092189b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-zf-long.out 3700180902b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-zf-long.out++ + 2062836287b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-zf-longlong.out + 3075841449b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-zf-longlong.out++ 2158685975b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-zf-short.out 1012271831b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-zf-short.out++ 1870109470b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-char.out 1870109470b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-char.out++ 1651744974b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-double.out *************** *** 4217,4234 **** 362585434b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-float.out++ 1163094327b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-int.out 1163094327b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-int.out++ 291703399b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-longdouble.out 291703399b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-longdouble.out++ 3762408624b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-longlong.out 3762408624b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-longlong.out++ - 3555956076b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-long.out - 3555956076b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-long.out++ 2332886721b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-pointer.out 2332886721b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-pointer.out++ 2480870612b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-short.out 2480870612b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-short.out++ 2916189460b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-char.out 2916189460b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-char.out++ 2502123578b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-a-char.out 2502123578b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-a-char.out++ 908745179b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-a-double.out --- 4214,4281 ---- 362585434b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-float.out++ 1163094327b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-int.out 1163094327b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-int.out++ + 3555956076b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-long.out + 3555956076b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-long.out++ 291703399b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-longdouble.out 291703399b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-longdouble.out++ 3762408624b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-longlong.out 3762408624b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-longlong.out++ 2332886721b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-pointer.out 2332886721b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-pointer.out++ 2480870612b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-short.out 2480870612b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-short.out++ 2916189460b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-char.out 2916189460b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-char.out++ + 497513900b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-double.out + 497513900b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-double.out++ + 2489472050b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-float.out + 2489472050b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-float.out++ + 2743476630b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-int.out + 2743476630b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-int.out++ + 2654575439b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-long.out + 2654575439b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-long.out++ + 3665863579b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-longdouble.out + 3665863579b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-longdouble.out++ + 4020247482b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-longlong.out + 4020247482b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-longlong.out++ + 628108037b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-pointer.out + 628108037b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-pointer.out++ + 1311213846b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-ptrdiff_t.out + 1311213846b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-ptrdiff_t.out++ + 2141238480b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-char.out + 2141238480b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-char.out++ + 1859208772b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-double.out + 1859208772b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-double.out++ + 4206164034b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-float.out + 4206164034b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-float.out++ + 3679940725b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-int.out + 3679940725b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-int.out++ + 2261218946b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-long.out + 2261218946b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-long.out++ + 3251153332b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-longdouble.out + 3251153332b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-longdouble.out++ + 247594466b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-longlong.out + 247594466b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-longlong.out++ + 3759513989b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-pointer.out + 3759513989b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-pointer.out++ + 3008225932b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-short.out + 3008225932b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-short.out++ + 945387931b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-short.out + 945387931b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-short.out++ + 2232487072b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-size_t.out + 2232487072b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-size_t.out++ + 3661856117b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-wchar_t.out + 3661856117b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-wchar_t.out++ + 2003883578b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-zf-char.out + 1185711188b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-zf-char.out++ + 79396233b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-zf-int.out + 347581897b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-zf-int.out++ + 1379940925b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-zf-long.out + 3639419163b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-zf-long.out++ + 2617412395b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-zf-longlong.out + 2872220966b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-zf-longlong.out++ + 1812574077b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-zf-short.out + 2920229150b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-zf-short.out++ 2502123578b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-a-char.out 2502123578b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-a-char.out++ 908745179b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-a-double.out *************** *** 4250,4261 **** 3081730244b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-float.out++ 830680808b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-int.out 830680808b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-int.out++ - 4111931150b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-longlong.out - 4111931150b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-longlong.out+ 1437253678b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-long.out 1437253678b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-long.out++ ! 497513900b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-double.out ! 497513900b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-double.out++ 3184654982b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-pointer.out 3184654982b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-pointer.out++ 2209121894b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-ptrdiff_t.out --- 4297,4306 ---- 3081730244b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-float.out++ 830680808b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-int.out 830680808b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-int.out++ 1437253678b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-long.out 1437253678b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-long.out++ ! 4111931150b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-longlong.out ! 4111931150b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-longlong.out+ 3184654982b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-pointer.out 3184654982b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-pointer.out++ 2209121894b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-ptrdiff_t.out *************** *** 4265,4281 **** 1592572645b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-s-double.out+ 2123592192b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-s-float.out 2123592192b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-s-float.out++ - 1624565665b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-short.out - 1624565665b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-short.out++ 2058112871b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-s-int.out 2058112871b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-s-int.out++ - 18114278b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-size_t.out - 18114278b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-size_t.out++ 1209643017b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-s-long.out 1209643017b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-s-long.out++ 137221407b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-s-pointer.out 2707233896b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-s-short.out 2707233896b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-s-short.out++ 2306040258b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-wchar_t.out 2306040258b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-wchar_t.out++ 561421555b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-zf-char.out --- 4310,4326 ---- 1592572645b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-s-double.out+ 2123592192b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-s-float.out 2123592192b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-s-float.out++ 2058112871b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-s-int.out 2058112871b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-s-int.out++ 1209643017b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-s-long.out 1209643017b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-s-long.out++ 137221407b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-s-pointer.out 2707233896b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-s-short.out 2707233896b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-s-short.out++ + 1624565665b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-short.out + 1624565665b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-short.out++ + 18114278b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-size_t.out + 18114278b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-size_t.out++ 2306040258b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-wchar_t.out 2306040258b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-wchar_t.out++ 561421555b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-zf-char.out *************** *** 4286,4295 **** 1403753192b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-zf-long.out++ 2463066035b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-zf-short.out 24031023b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-zf-short.out+ - 2489472050b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-float.out - 2489472050b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-float.out++ - 2743476630b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-int.out - 2743476630b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-int.out++ 2821438118b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-char.out 2821438118b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-char.out++ 44039327b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-double.out --- 4331,4336 ---- *************** *** 4298,4331 **** 3941392051b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-float.out++ 2609834450b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-int.out 2609834450b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-int.out++ - 2868812260b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-longlong.out - 2868812260b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-longlong.out+ 3407178115b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-long.out 3407178115b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-long.out++ 855452388b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-pointer.out 855452388b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-pointer.out++ 3186715271b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-short.out 3186715271b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-short.out++ 3073461247b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-char.out 3073461247b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-char.out++ - 3665863579b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-longdouble.out - 3665863579b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-longdouble.out++ 3026224568b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-double.out 3026224568b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-double.out++ 1191292162b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-float.out 1191292162b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-float.out++ 1548870351b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-int.out 1548870351b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-int.out++ 3829659624b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-longdouble.out 3829659624b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-longdouble.out+ 1372837239b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-longlong.out 1372837239b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-longlong.out++ - 4020247482b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-longlong.out - 4020247482b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-longlong.out++ - 470378869b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-long.out - 470378869b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-long.out++ - 2654575439b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-long.out - 2654575439b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-long.out++ 3536102064b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-pointer.out 3536102064b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-pointer.out++ 579862700b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-ptrdiff_t.out --- 4339,4366 ---- 3941392051b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-float.out++ 2609834450b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-int.out 2609834450b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-int.out++ 3407178115b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-long.out 3407178115b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-long.out++ + 2868812260b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-longlong.out + 2868812260b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-longlong.out+ 855452388b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-pointer.out 855452388b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-pointer.out++ 3186715271b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-short.out 3186715271b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-short.out++ 3073461247b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-char.out 3073461247b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-char.out++ 3026224568b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-double.out 3026224568b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-double.out++ 1191292162b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-float.out 1191292162b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-float.out++ 1548870351b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-int.out 1548870351b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-int.out++ + 470378869b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-long.out + 470378869b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-long.out++ 3829659624b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-longdouble.out 3829659624b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-longdouble.out+ 1372837239b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-longlong.out 1372837239b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-longlong.out++ 3536102064b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-pointer.out 3536102064b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-pointer.out++ 579862700b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-ptrdiff_t.out *************** *** 4336,4404 **** 397921610b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-double.out++ 2538191755b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-float.out 2538191755b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-float.out++ - 1971310399b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-short.out - 1971310399b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-short.out++ 4237589805b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-int.out 4237589805b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-int.out++ - 2419011586b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-size_t.out - 2419011586b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-size_t.out++ - 1624025758b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-longlong.out - 1624025758b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-longlong.out+ 3782463750b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-long.out 3782463750b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-long.out++ 1972186934b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-pointer.out 1972186934b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-pointer.out++ 829099133b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-short.out 829099133b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-short.out++ 1350491757b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-wchar_t.out 1350491757b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-wchar_t.out++ 2215666329b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-zf-char.out 745407154b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-zf-char.out++ 140198870b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-zf-int.out 3397457298b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-zf-int.out++ - 972059489b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-zf-longlong.out 904046880b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-zf-long.out 2657286993b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-zf-long.out++ 2804701286b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-zf-short.out 22008069b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-zf-short.out++ - 628108037b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-pointer.out - 628108037b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-pointer.out++ - 1311213846b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-ptrdiff_t.out - 1311213846b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-ptrdiff_t.out++ - 2141238480b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-char.out - 2141238480b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-char.out++ - 1859208772b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-double.out - 1859208772b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-double.out++ - 4206164034b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-float.out - 4206164034b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-float.out++ - 945387931b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-short.out - 945387931b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-short.out++ - 3679940725b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-int.out - 3679940725b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-int.out++ - 2232487072b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-size_t.out - 2232487072b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-size_t.out++ - 3251153332b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-longdouble.out - 3251153332b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-longdouble.out++ - 247594466b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-longlong.out - 247594466b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-longlong.out++ - 2261218946b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-long.out - 2261218946b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-long.out++ - 3759513989b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-pointer.out - 3759513989b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-pointer.out++ - 3008225932b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-short.out - 3008225932b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-short.out++ - 3661856117b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-wchar_t.out - 3661856117b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-wchar_t.out++ - 2003883578b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-zf-char.out - 1185711188b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-zf-char.out++ - 79396233b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-zf-int.out - 347581897b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-zf-int.out++ - 2617412395b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-zf-longlong.out - 2872220966b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-zf-longlong.out++ - 1379940925b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-zf-long.out - 3639419163b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-zf-long.out++ - 1812574077b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-zf-short.out - 2920229150b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-zf-short.out++ 638071746b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-char.out 638071746b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-char.out++ 3332432545b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-double.out --- 4371,4401 ---- 397921610b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-double.out++ 2538191755b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-float.out 2538191755b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-float.out++ 4237589805b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-int.out 4237589805b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-int.out++ 3782463750b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-long.out 3782463750b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-long.out++ + 1624025758b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-longlong.out + 1624025758b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-longlong.out+ 1972186934b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-pointer.out 1972186934b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-pointer.out++ 829099133b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-short.out 829099133b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-short.out++ + 1971310399b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-short.out + 1971310399b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-short.out++ + 2419011586b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-size_t.out + 2419011586b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-size_t.out++ 1350491757b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-wchar_t.out 1350491757b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-wchar_t.out++ 2215666329b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-zf-char.out 745407154b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-zf-char.out++ 140198870b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-zf-int.out 3397457298b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-zf-int.out++ 904046880b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-zf-long.out 2657286993b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-zf-long.out++ + 972059489b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-zf-longlong.out 2804701286b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-zf-short.out 22008069b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-zf-short.out++ 638071746b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-char.out 638071746b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-char.out++ 3332432545b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-double.out *************** *** 4407,4417 **** 1534334155b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-float.out++ 3880550727b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-int.out 3880550727b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-int.out++ 251411986b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-longdouble.out 2493905430b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-longlong.out 2493905430b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-longlong.out++ - 180275403b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-long.out - 180275403b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-long.out++ 1868637423b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-pointer.out 1868637423b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-pointer.out++ 3971852122b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-short.out --- 4404,4414 ---- 1534334155b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-float.out++ 3880550727b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-int.out 3880550727b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-int.out++ + 180275403b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-long.out + 180275403b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-long.out++ 251411986b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-longdouble.out 2493905430b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-longlong.out 2493905430b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-longlong.out++ 1868637423b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-pointer.out 1868637423b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-pointer.out++ 3971852122b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-short.out *************** *** 4424,4435 **** 3364520721b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-float.out++ 2026186277b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-int.out 2026186277b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-int.out++ 1274562854b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-longdouble.out 1274562854b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-longdouble.out++ 2670045344b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-longlong.out 2670045344b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-longlong.out++ - 554032384b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-long.out - 554032384b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-long.out++ 2655788537b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-pointer.out 2655788537b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-pointer.out++ 797630104b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-ptrdiff_t.out --- 4421,4432 ---- 3364520721b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-float.out++ 2026186277b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-int.out 2026186277b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-int.out++ + 554032384b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-long.out + 554032384b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-long.out++ 1274562854b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-longdouble.out 1274562854b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-longdouble.out++ 2670045344b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-longlong.out 2670045344b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-longlong.out++ 2655788537b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-pointer.out 2655788537b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-pointer.out++ 797630104b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-ptrdiff_t.out *************** *** 4440,4470 **** 4073638002b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-double.out++ 3219629814b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-float.out 3219629814b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-float.out++ - 3050131671b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-short.out - 3050131671b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-short.out++ 2810751409b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-int.out 2810751409b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-int.out++ ! 3655683515b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-size_t.out ! 3655683515b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-size_t.out++ 2708502837b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-longdouble.out 753682265b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-longlong.out 753682265b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-longlong.out++ - 4193535248b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-long.out - 4193535248b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-long.out++ 554657656b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-pointer.out 554657656b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-pointer.out++ 843107606b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-short.out 843107606b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-short.out++ 2293091315b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-wchar_t.out 2293091315b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-wchar_t.out++ 1599802745b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-zf-char.out 3264566923b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-zf-char.out++ 2587475685b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-zf-int.out 1005185879b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-zf-int.out++ - 2426330969b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-zf-longlong.out - 3112366542b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-zf-longlong.out+ 273113417b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-zf-long.out 3825433163b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-zf-long.out++ 1180077740b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-zf-short.out 875920723b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-zf-short.out++ 2651380458b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-char.out --- 4437,4467 ---- 4073638002b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-double.out++ 3219629814b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-float.out 3219629814b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-float.out++ 2810751409b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-int.out 2810751409b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-int.out++ ! 4193535248b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-long.out ! 4193535248b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-long.out++ 2708502837b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-longdouble.out 753682265b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-longlong.out 753682265b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-longlong.out++ 554657656b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-pointer.out 554657656b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-pointer.out++ 843107606b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-short.out 843107606b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-short.out++ + 3050131671b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-short.out + 3050131671b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-short.out++ + 3655683515b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-size_t.out + 3655683515b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-size_t.out++ 2293091315b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-wchar_t.out 2293091315b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-wchar_t.out++ 1599802745b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-zf-char.out 3264566923b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-zf-char.out++ 2587475685b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-zf-int.out 1005185879b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-zf-int.out++ 273113417b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-zf-long.out 3825433163b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-zf-long.out++ + 2426330969b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-zf-longlong.out + 3112366542b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-zf-longlong.out+ 1180077740b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-zf-short.out 875920723b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-zf-short.out++ 2651380458b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-char.out *************** *** 4475,4485 **** 2483342b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-float.out++ 3030027871b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-int.out 3030027871b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-int.out++ 842815367b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-longdouble.out 2374908820b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-longlong.out 2374908820b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-longlong.out++ - 2742634608b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-long.out - 2742634608b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-long.out++ 1105378681b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-pointer.out 1105378681b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-pointer.out++ 2222112016b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-ptrdiff_t.out --- 4472,4482 ---- 2483342b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-float.out++ 3030027871b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-int.out 3030027871b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-int.out++ + 2742634608b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-long.out + 2742634608b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-long.out++ 842815367b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-longdouble.out 2374908820b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-longlong.out 2374908820b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-longlong.out++ 1105378681b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-pointer.out 1105378681b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-pointer.out++ 2222112016b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-ptrdiff_t.out *************** *** 4498,4509 **** 3441673581b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-float.out++ 911216572b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-int.out 911216572b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-int.out++ 3193177612b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-longdouble.out 3193177612b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-longdouble.out++ 3997296607b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-longlong.out 3997296607b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-longlong.out++ - 1537969173b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-long.out - 1537969173b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-long.out++ 364952624b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-pointer.out 364952624b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-pointer.out++ 970855379b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-short.out --- 4495,4506 ---- 3441673581b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-float.out++ 911216572b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-int.out 911216572b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-int.out++ + 1537969173b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-long.out + 1537969173b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-long.out++ 3193177612b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-longdouble.out 3193177612b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-longdouble.out++ 3997296607b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-longlong.out 3997296607b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-longlong.out++ 364952624b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-pointer.out 364952624b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-pointer.out++ 970855379b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-short.out *************** *** 4516,4527 **** 3721234230b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-float.out++ 1012475701b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-int.out 1012475701b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-int.out++ 2555149638b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-longdouble.out 2555149638b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-longdouble.out++ 2273094318b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-longlong.out 2273094318b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-longlong.out++ - 3766414610b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-long.out - 3766414610b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-long.out++ 1639107229b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-pointer.out 1639107229b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-pointer.out++ 1075156439b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-ptrdiff_t.out --- 4513,4524 ---- 3721234230b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-float.out++ 1012475701b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-int.out 1012475701b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-int.out++ + 3766414610b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-long.out + 3766414610b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-long.out++ 2555149638b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-longdouble.out 2555149638b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-longdouble.out++ 2273094318b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-longlong.out 2273094318b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-longlong.out++ 1639107229b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-pointer.out 1639107229b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-pointer.out++ 1075156439b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-ptrdiff_t.out *************** *** 4532,4563 **** 2528716480b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-double.out++ 785209287b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-float.out 785209287b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-float.out++ - 2164738263b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-short.out - 2164738263b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-short.out++ 1126071492b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-int.out 1126071492b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-int.out++ ! 3593875829b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-size_t.out ! 3593875829b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-size_t.out++ 3460438392b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-longdouble.out 3460438392b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-longdouble.out++ 1289753849b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-longlong.out 1289753849b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-longlong.out++ - 1435590236b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-long.out - 1435590236b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-long.out++ 1476260714b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-pointer.out 1476260714b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-pointer.out++ 500188532b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-short.out 500188532b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-short.out++ 2506643620b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-wchar_t.out 2506643620b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-wchar_t.out++ 3126905441b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-zf-char.out 1940799148b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-zf-char.out++ 1010693185b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-zf-int.out 1212564314b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-zf-int.out++ - 2599781179b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-zf-longlong.out - 3990788430b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-zf-longlong.out++ 1799180429b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-zf-long.out 3670265189b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-zf-long.out++ 412178968b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-zf-short.out 1523910308b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-zf-short.out++ 177607961b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-char.out --- 4529,4560 ---- 2528716480b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-double.out++ 785209287b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-float.out 785209287b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-float.out++ 1126071492b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-int.out 1126071492b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-int.out++ ! 1435590236b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-long.out ! 1435590236b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-long.out++ 3460438392b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-longdouble.out 3460438392b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-longdouble.out++ 1289753849b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-longlong.out 1289753849b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-longlong.out++ 1476260714b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-pointer.out 1476260714b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-pointer.out++ 500188532b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-short.out 500188532b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-short.out++ + 2164738263b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-short.out + 2164738263b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-short.out++ + 3593875829b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-size_t.out + 3593875829b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-size_t.out++ 2506643620b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-wchar_t.out 2506643620b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-wchar_t.out++ 3126905441b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-zf-char.out 1940799148b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-zf-char.out++ 1010693185b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-zf-int.out 1212564314b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-zf-int.out++ 1799180429b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-zf-long.out 3670265189b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-zf-long.out++ + 2599781179b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-zf-longlong.out + 3990788430b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-zf-longlong.out++ 412178968b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-zf-short.out 1523910308b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-zf-short.out++ 177607961b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-char.out *************** *** 4568,4579 **** 2227123143b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-float.out++ 2732243950b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-int.out 2732243950b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-int.out++ 2655501391b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-longdouble.out 2655501391b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-longdouble.out++ 3487867828b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-longlong.out 3487867828b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-longlong.out++ - 978381513b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-long.out - 978381513b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-long.out++ 4141092354b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-pointer.out 4141092354b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-pointer.out++ 282420262b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-ptrdiff_t.out --- 4565,4576 ---- 2227123143b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-float.out++ 2732243950b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-int.out 2732243950b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-int.out++ + 978381513b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-long.out + 978381513b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-long.out++ 2655501391b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-longdouble.out 2655501391b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-longdouble.out++ 3487867828b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-longlong.out 3487867828b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-longlong.out++ 4141092354b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-pointer.out 4141092354b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-pointer.out++ 282420262b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-ptrdiff_t.out *************** *** 4592,4603 **** 4175033844b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-float.out++ 2745764679b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-int.out 2745764679b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-int.out++ 3007141392b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-longdouble.out 3007141392b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-longdouble.out++ 1445387844b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-longlong.out 1445387844b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-longlong.out++ - 2937616530b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-long.out - 2937616530b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-long.out++ 2501204111b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-pointer.out 2501204111b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-pointer.out++ 887379829b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-ptrdiff_t.out --- 4589,4600 ---- 4175033844b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-float.out++ 2745764679b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-int.out 2745764679b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-int.out++ + 2937616530b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-long.out + 2937616530b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-long.out++ 3007141392b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-longdouble.out 3007141392b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-longdouble.out++ 1445387844b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-longlong.out 1445387844b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-longlong.out++ 2501204111b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-pointer.out 2501204111b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-pointer.out++ 887379829b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-ptrdiff_t.out *************** *** 4608,4613 **** --- 4605,4635 ---- 676320345b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-size_t.out++ 2213842565b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-wchar_t.out 2213842565b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-wchar_t.out++ + 4107261541b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-bool.out++ + 919632946b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-char.out + 919632946b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-char.out++ + 1524915532b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-double.out + 1524915532b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-double.out++ + 594930693b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-float.out + 594930693b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-float.out++ + 1957268000b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-int.out + 1957268000b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-int.out++ + 1244662439b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-long.out + 1244662439b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-long.out++ + 1658583497b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-longdouble.out + 1658583497b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-longdouble.out++ + 312453039b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-longlong.out + 312453039b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-longlong.out++ + 3802875737b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-pointer.out + 3802875737b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-pointer.out++ + 1324451320b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-ptrdiff.out + 1324451320b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-ptrdiff.out++ + 1620300254b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-short.out + 1620300254b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-short.out++ + 1933118540b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-size.out + 1933118540b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-size.out++ + 3741425609b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-wchar.out + 3741425609b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-wchar.out++ 2700306833b ./gcc/testsuite/consistency.vlad/layout/minimal-struct-size-align.c 3619982975b ./gcc/testsuite/consistency.vlad/layout/s-char-a-char.c 727040386b ./gcc/testsuite/consistency.vlad/layout/s-char-a-double.c *************** *** 4630,4643 **** 1919204038b ./gcc/testsuite/consistency.vlad/layout/s-char-s-char.c 2356076301b ./gcc/testsuite/consistency.vlad/layout/s-char-s-double.c 765329706b ./gcc/testsuite/consistency.vlad/layout/s-char-s-float.c - 3605211274b ./gcc/testsuite/consistency.vlad/layout/s-char-short.c 3351760677b ./gcc/testsuite/consistency.vlad/layout/s-char-s-int.c - 3130164308b ./gcc/testsuite/consistency.vlad/layout/s-char-size_t.c 1763672929b ./gcc/testsuite/consistency.vlad/layout/s-char-s-long.c 1834388031b ./gcc/testsuite/consistency.vlad/layout/s-char-s-longdouble.c 559076232b ./gcc/testsuite/consistency.vlad/layout/s-char-s-longlong.c 2344655103b ./gcc/testsuite/consistency.vlad/layout/s-char-s-pointer.c 220067620b ./gcc/testsuite/consistency.vlad/layout/s-char-s-short.c 4159231551b ./gcc/testsuite/consistency.vlad/layout/s-char-wchar_t.c 2462993036b ./gcc/testsuite/consistency.vlad/layout/s-char-zf-char.c 541003594b ./gcc/testsuite/consistency.vlad/layout/s-char-zf-int.c --- 4652,4665 ---- 1919204038b ./gcc/testsuite/consistency.vlad/layout/s-char-s-char.c 2356076301b ./gcc/testsuite/consistency.vlad/layout/s-char-s-double.c 765329706b ./gcc/testsuite/consistency.vlad/layout/s-char-s-float.c 3351760677b ./gcc/testsuite/consistency.vlad/layout/s-char-s-int.c 1763672929b ./gcc/testsuite/consistency.vlad/layout/s-char-s-long.c 1834388031b ./gcc/testsuite/consistency.vlad/layout/s-char-s-longdouble.c 559076232b ./gcc/testsuite/consistency.vlad/layout/s-char-s-longlong.c 2344655103b ./gcc/testsuite/consistency.vlad/layout/s-char-s-pointer.c 220067620b ./gcc/testsuite/consistency.vlad/layout/s-char-s-short.c + 3605211274b ./gcc/testsuite/consistency.vlad/layout/s-char-short.c + 3130164308b ./gcc/testsuite/consistency.vlad/layout/s-char-size_t.c 4159231551b ./gcc/testsuite/consistency.vlad/layout/s-char-wchar_t.c 2462993036b ./gcc/testsuite/consistency.vlad/layout/s-char-zf-char.c 541003594b ./gcc/testsuite/consistency.vlad/layout/s-char-zf-int.c *************** *** 4665,4678 **** 1892057278b ./gcc/testsuite/consistency.vlad/layout/s-double-s-char.c 2394566615b ./gcc/testsuite/consistency.vlad/layout/s-double-s-double.c 4064931917b ./gcc/testsuite/consistency.vlad/layout/s-double-s-float.c - 1137455402b ./gcc/testsuite/consistency.vlad/layout/s-double-short.c 3672946380b ./gcc/testsuite/consistency.vlad/layout/s-double-s-int.c - 3731114983b ./gcc/testsuite/consistency.vlad/layout/s-double-size_t.c 4099130503b ./gcc/testsuite/consistency.vlad/layout/s-double-s-long.c 2508841997b ./gcc/testsuite/consistency.vlad/layout/s-double-s-longdouble.c 2547516874b ./gcc/testsuite/consistency.vlad/layout/s-double-s-longlong.c 2394584890b ./gcc/testsuite/consistency.vlad/layout/s-double-s-pointer.c 1087857878b ./gcc/testsuite/consistency.vlad/layout/s-double-s-short.c 1074227714b ./gcc/testsuite/consistency.vlad/layout/s-double-wchar_t.c 4075513176b ./gcc/testsuite/consistency.vlad/layout/s-double-zf-char.c 2181060239b ./gcc/testsuite/consistency.vlad/layout/s-double-zf-int.c --- 4687,4700 ---- 1892057278b ./gcc/testsuite/consistency.vlad/layout/s-double-s-char.c 2394566615b ./gcc/testsuite/consistency.vlad/layout/s-double-s-double.c 4064931917b ./gcc/testsuite/consistency.vlad/layout/s-double-s-float.c 3672946380b ./gcc/testsuite/consistency.vlad/layout/s-double-s-int.c 4099130503b ./gcc/testsuite/consistency.vlad/layout/s-double-s-long.c 2508841997b ./gcc/testsuite/consistency.vlad/layout/s-double-s-longdouble.c 2547516874b ./gcc/testsuite/consistency.vlad/layout/s-double-s-longlong.c 2394584890b ./gcc/testsuite/consistency.vlad/layout/s-double-s-pointer.c 1087857878b ./gcc/testsuite/consistency.vlad/layout/s-double-s-short.c + 1137455402b ./gcc/testsuite/consistency.vlad/layout/s-double-short.c + 3731114983b ./gcc/testsuite/consistency.vlad/layout/s-double-size_t.c 1074227714b ./gcc/testsuite/consistency.vlad/layout/s-double-wchar_t.c 4075513176b ./gcc/testsuite/consistency.vlad/layout/s-double-zf-char.c 2181060239b ./gcc/testsuite/consistency.vlad/layout/s-double-zf-int.c *************** *** 4700,4713 **** 3748837421b ./gcc/testsuite/consistency.vlad/layout/s-float-s-char.c 1026162480b ./gcc/testsuite/consistency.vlad/layout/s-float-s-double.c 1757829971b ./gcc/testsuite/consistency.vlad/layout/s-float-s-float.c - 1092900439b ./gcc/testsuite/consistency.vlad/layout/s-float-short.c 1286304248b ./gcc/testsuite/consistency.vlad/layout/s-float-s-int.c - 1246576103b ./gcc/testsuite/consistency.vlad/layout/s-float-size_t.c 1058880033b ./gcc/testsuite/consistency.vlad/layout/s-float-s-long.c 3954384291b ./gcc/testsuite/consistency.vlad/layout/s-float-s-longdouble.c 2151659662b ./gcc/testsuite/consistency.vlad/layout/s-float-s-longlong.c 3825039217b ./gcc/testsuite/consistency.vlad/layout/s-float-s-pointer.c 4061428355b ./gcc/testsuite/consistency.vlad/layout/s-float-s-short.c 1758331367b ./gcc/testsuite/consistency.vlad/layout/s-float-wchar_t.c 3117484708b ./gcc/testsuite/consistency.vlad/layout/s-float-zf-char.c 550306535b ./gcc/testsuite/consistency.vlad/layout/s-float-zf-int.c --- 4722,4735 ---- 3748837421b ./gcc/testsuite/consistency.vlad/layout/s-float-s-char.c 1026162480b ./gcc/testsuite/consistency.vlad/layout/s-float-s-double.c 1757829971b ./gcc/testsuite/consistency.vlad/layout/s-float-s-float.c 1286304248b ./gcc/testsuite/consistency.vlad/layout/s-float-s-int.c 1058880033b ./gcc/testsuite/consistency.vlad/layout/s-float-s-long.c 3954384291b ./gcc/testsuite/consistency.vlad/layout/s-float-s-longdouble.c 2151659662b ./gcc/testsuite/consistency.vlad/layout/s-float-s-longlong.c 3825039217b ./gcc/testsuite/consistency.vlad/layout/s-float-s-pointer.c 4061428355b ./gcc/testsuite/consistency.vlad/layout/s-float-s-short.c + 1092900439b ./gcc/testsuite/consistency.vlad/layout/s-float-short.c + 1246576103b ./gcc/testsuite/consistency.vlad/layout/s-float-size_t.c 1758331367b ./gcc/testsuite/consistency.vlad/layout/s-float-wchar_t.c 3117484708b ./gcc/testsuite/consistency.vlad/layout/s-float-zf-char.c 550306535b ./gcc/testsuite/consistency.vlad/layout/s-float-zf-int.c *************** *** 4735,4767 **** 2014925874b ./gcc/testsuite/consistency.vlad/layout/s-int-s-char.c 1964724618b ./gcc/testsuite/consistency.vlad/layout/s-int-s-double.c 3513841278b ./gcc/testsuite/consistency.vlad/layout/s-int-s-float.c - 3104696131b ./gcc/testsuite/consistency.vlad/layout/s-int-short.c 1905836586b ./gcc/testsuite/consistency.vlad/layout/s-int-s-int.c - 2371102487b ./gcc/testsuite/consistency.vlad/layout/s-int-size_t.c 2587799721b ./gcc/testsuite/consistency.vlad/layout/s-int-s-long.c 3343583899b ./gcc/testsuite/consistency.vlad/layout/s-int-s-longdouble.c 3181309941b ./gcc/testsuite/consistency.vlad/layout/s-int-s-longlong.c 3198349197b ./gcc/testsuite/consistency.vlad/layout/s-int-s-pointer.c 1300436407b ./gcc/testsuite/consistency.vlad/layout/s-int-s-short.c 1358869671b ./gcc/testsuite/consistency.vlad/layout/s-int-wchar_t.c 2934034901b ./gcc/testsuite/consistency.vlad/layout/s-int-zf-char.c 3777217979b ./gcc/testsuite/consistency.vlad/layout/s-int-zf-int.c 823148372b ./gcc/testsuite/consistency.vlad/layout/s-int-zf-long.c 55540591b ./gcc/testsuite/consistency.vlad/layout/s-int-zf-longlong.c 3825926612b ./gcc/testsuite/consistency.vlad/layout/s-int-zf-short.c - 1746672839b ./gcc/testsuite/consistency.vlad/layout/size-bool.cpp - 1662052327b ./gcc/testsuite/consistency.vlad/layout/size-char.c - 3361924014b ./gcc/testsuite/consistency.vlad/layout/size-double.c - 3608174439b ./gcc/testsuite/consistency.vlad/layout/size-float.c - 224133749b ./gcc/testsuite/consistency.vlad/layout/size-int.c - 2229647371b ./gcc/testsuite/consistency.vlad/layout/size-long.c - 1496097293b ./gcc/testsuite/consistency.vlad/layout/size-longdouble.c - 4243493805b ./gcc/testsuite/consistency.vlad/layout/size-longlong.c - 4234774016b ./gcc/testsuite/consistency.vlad/layout/size-pointer.c - 2742276437b ./gcc/testsuite/consistency.vlad/layout/size-ptrdiff.c - 2302838291b ./gcc/testsuite/consistency.vlad/layout/size-short.c - 1008704183b ./gcc/testsuite/consistency.vlad/layout/size-size.c - 767395346b ./gcc/testsuite/consistency.vlad/layout/size-wchar.c 1014160019b ./gcc/testsuite/consistency.vlad/layout/s-long-a-char.c 1536711874b ./gcc/testsuite/consistency.vlad/layout/s-long-a-double.c 3755724289b ./gcc/testsuite/consistency.vlad/layout/s-long-a-float.c --- 4757,4776 ---- 2014925874b ./gcc/testsuite/consistency.vlad/layout/s-int-s-char.c 1964724618b ./gcc/testsuite/consistency.vlad/layout/s-int-s-double.c 3513841278b ./gcc/testsuite/consistency.vlad/layout/s-int-s-float.c 1905836586b ./gcc/testsuite/consistency.vlad/layout/s-int-s-int.c 2587799721b ./gcc/testsuite/consistency.vlad/layout/s-int-s-long.c 3343583899b ./gcc/testsuite/consistency.vlad/layout/s-int-s-longdouble.c 3181309941b ./gcc/testsuite/consistency.vlad/layout/s-int-s-longlong.c 3198349197b ./gcc/testsuite/consistency.vlad/layout/s-int-s-pointer.c 1300436407b ./gcc/testsuite/consistency.vlad/layout/s-int-s-short.c + 3104696131b ./gcc/testsuite/consistency.vlad/layout/s-int-short.c + 2371102487b ./gcc/testsuite/consistency.vlad/layout/s-int-size_t.c 1358869671b ./gcc/testsuite/consistency.vlad/layout/s-int-wchar_t.c 2934034901b ./gcc/testsuite/consistency.vlad/layout/s-int-zf-char.c 3777217979b ./gcc/testsuite/consistency.vlad/layout/s-int-zf-int.c 823148372b ./gcc/testsuite/consistency.vlad/layout/s-int-zf-long.c 55540591b ./gcc/testsuite/consistency.vlad/layout/s-int-zf-longlong.c 3825926612b ./gcc/testsuite/consistency.vlad/layout/s-int-zf-short.c 1014160019b ./gcc/testsuite/consistency.vlad/layout/s-long-a-char.c 1536711874b ./gcc/testsuite/consistency.vlad/layout/s-long-a-double.c 3755724289b ./gcc/testsuite/consistency.vlad/layout/s-long-a-float.c *************** *** 4772,4777 **** --- 4781,4811 ---- 4219127792b ./gcc/testsuite/consistency.vlad/layout/s-long-a-pointer.c 1534004990b ./gcc/testsuite/consistency.vlad/layout/s-long-a-short.c 34352633b ./gcc/testsuite/consistency.vlad/layout/s-long-char.c + 1855339665b ./gcc/testsuite/consistency.vlad/layout/s-long-double.c + 1325299293b ./gcc/testsuite/consistency.vlad/layout/s-long-float.c + 1780742682b ./gcc/testsuite/consistency.vlad/layout/s-long-int.c + 2290380505b ./gcc/testsuite/consistency.vlad/layout/s-long-long.c + 1915663861b ./gcc/testsuite/consistency.vlad/layout/s-long-longdouble.c + 2368362338b ./gcc/testsuite/consistency.vlad/layout/s-long-longlong.c + 843227723b ./gcc/testsuite/consistency.vlad/layout/s-long-pointer.c + 501034814b ./gcc/testsuite/consistency.vlad/layout/s-long-ptrdiff_t.c + 1174469544b ./gcc/testsuite/consistency.vlad/layout/s-long-s-char.c + 1007870215b ./gcc/testsuite/consistency.vlad/layout/s-long-s-double.c + 1307839500b ./gcc/testsuite/consistency.vlad/layout/s-long-s-float.c + 3475912781b ./gcc/testsuite/consistency.vlad/layout/s-long-s-int.c + 1568391695b ./gcc/testsuite/consistency.vlad/layout/s-long-s-long.c + 74365094b ./gcc/testsuite/consistency.vlad/layout/s-long-s-longdouble.c + 501521658b ./gcc/testsuite/consistency.vlad/layout/s-long-s-longlong.c + 1748381535b ./gcc/testsuite/consistency.vlad/layout/s-long-s-pointer.c + 1836579330b ./gcc/testsuite/consistency.vlad/layout/s-long-s-short.c + 3071018593b ./gcc/testsuite/consistency.vlad/layout/s-long-short.c + 3723194327b ./gcc/testsuite/consistency.vlad/layout/s-long-size_t.c + 531244141b ./gcc/testsuite/consistency.vlad/layout/s-long-wchar_t.c + 3081442820b ./gcc/testsuite/consistency.vlad/layout/s-long-zf-char.c + 914301375b ./gcc/testsuite/consistency.vlad/layout/s-long-zf-int.c + 1562082244b ./gcc/testsuite/consistency.vlad/layout/s-long-zf-long.c + 2520232686b ./gcc/testsuite/consistency.vlad/layout/s-long-zf-longlong.c + 3568433576b ./gcc/testsuite/consistency.vlad/layout/s-long-zf-short.c 2174891233b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-a-char.c 2263495912b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-a-double.c 3626355134b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-a-float.c *************** *** 4781,4787 **** 2001710554b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-a-longlong.c 1208252647b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-a-pointer.c 2636586618b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-a-short.c - 1855339665b ./gcc/testsuite/consistency.vlad/layout/s-long-double.c 1490423944b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-char.c 838089339b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-double.c 1901020700b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-float.c --- 4815,4820 ---- *************** *** 4794,4815 **** 3172036867b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-s-char.c 3278313495b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-s-double.c 717089781b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-s-float.c - 2851776236b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-short.c 585061394b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-s-int.c - 1105156962b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-size_t.c 2473143756b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-s-long.c 3638726274b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-s-longdouble.c 2023017496b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-s-longlong.c 54720140b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-s-pointer.c 1046498915b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-s-short.c 696506953b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-wchar_t.c 928069138b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-zf-char.c 258209983b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-zf-int.c 2227123382b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-zf-long.c 2318782753b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-zf-longlong.c 558562280b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-zf-short.c - 1325299293b ./gcc/testsuite/consistency.vlad/layout/s-long-float.c - 1780742682b ./gcc/testsuite/consistency.vlad/layout/s-long-int.c 2746913946b ./gcc/testsuite/consistency.vlad/layout/s-longlong-a-char.c 2756929591b ./gcc/testsuite/consistency.vlad/layout/s-longlong-a-double.c 2279164925b ./gcc/testsuite/consistency.vlad/layout/s-longlong-a-float.c --- 4827,4846 ---- 3172036867b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-s-char.c 3278313495b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-s-double.c 717089781b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-s-float.c 585061394b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-s-int.c 2473143756b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-s-long.c 3638726274b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-s-longdouble.c 2023017496b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-s-longlong.c 54720140b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-s-pointer.c 1046498915b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-s-short.c + 2851776236b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-short.c + 1105156962b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-size_t.c 696506953b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-wchar_t.c 928069138b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-zf-char.c 258209983b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-zf-int.c 2227123382b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-zf-long.c 2318782753b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-zf-longlong.c 558562280b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-zf-short.c 2746913946b ./gcc/testsuite/consistency.vlad/layout/s-longlong-a-char.c 2756929591b ./gcc/testsuite/consistency.vlad/layout/s-longlong-a-double.c 2279164925b ./gcc/testsuite/consistency.vlad/layout/s-longlong-a-float.c *************** *** 4819,4831 **** 2072567607b ./gcc/testsuite/consistency.vlad/layout/s-longlong-a-longlong.c 3659263135b ./gcc/testsuite/consistency.vlad/layout/s-longlong-a-pointer.c 2702861495b ./gcc/testsuite/consistency.vlad/layout/s-longlong-a-short.c - 2290380505b ./gcc/testsuite/consistency.vlad/layout/s-long-long.c 1507260206b ./gcc/testsuite/consistency.vlad/layout/s-longlong-char.c - 1915663861b ./gcc/testsuite/consistency.vlad/layout/s-long-longdouble.c 3018473966b ./gcc/testsuite/consistency.vlad/layout/s-longlong-double.c 3253702018b ./gcc/testsuite/consistency.vlad/layout/s-longlong-float.c 2941557918b ./gcc/testsuite/consistency.vlad/layout/s-longlong-int.c - 2368362338b ./gcc/testsuite/consistency.vlad/layout/s-long-longlong.c 4153967841b ./gcc/testsuite/consistency.vlad/layout/s-longlong-long.c 3405846513b ./gcc/testsuite/consistency.vlad/layout/s-longlong-longdouble.c 2651247883b ./gcc/testsuite/consistency.vlad/layout/s-longlong-longlong.c --- 4850,4859 ---- *************** *** 4834,4872 **** 183550901b ./gcc/testsuite/consistency.vlad/layout/s-longlong-s-char.c 1353709337b ./gcc/testsuite/consistency.vlad/layout/s-longlong-s-double.c 1622859985b ./gcc/testsuite/consistency.vlad/layout/s-longlong-s-float.c - 922091281b ./gcc/testsuite/consistency.vlad/layout/s-longlong-short.c 3395819121b ./gcc/testsuite/consistency.vlad/layout/s-longlong-s-int.c - 3366304494b ./gcc/testsuite/consistency.vlad/layout/s-longlong-size_t.c 263554828b ./gcc/testsuite/consistency.vlad/layout/s-longlong-s-long.c 3292604731b ./gcc/testsuite/consistency.vlad/layout/s-longlong-s-longdouble.c 591712639b ./gcc/testsuite/consistency.vlad/layout/s-longlong-s-longlong.c 1892567537b ./gcc/testsuite/consistency.vlad/layout/s-longlong-s-pointer.c 108932916b ./gcc/testsuite/consistency.vlad/layout/s-longlong-s-short.c 2585353545b ./gcc/testsuite/consistency.vlad/layout/s-longlong-wchar_t.c 1992502711b ./gcc/testsuite/consistency.vlad/layout/s-longlong-zf-char.c 943400451b ./gcc/testsuite/consistency.vlad/layout/s-longlong-zf-int.c 2630463188b ./gcc/testsuite/consistency.vlad/layout/s-longlong-zf-long.c 108059264b ./gcc/testsuite/consistency.vlad/layout/s-longlong-zf-longlong.c 162090179b ./gcc/testsuite/consistency.vlad/layout/s-longlong-zf-short.c - 843227723b ./gcc/testsuite/consistency.vlad/layout/s-long-pointer.c - 501034814b ./gcc/testsuite/consistency.vlad/layout/s-long-ptrdiff_t.c - 1174469544b ./gcc/testsuite/consistency.vlad/layout/s-long-s-char.c - 1007870215b ./gcc/testsuite/consistency.vlad/layout/s-long-s-double.c - 1307839500b ./gcc/testsuite/consistency.vlad/layout/s-long-s-float.c - 3071018593b ./gcc/testsuite/consistency.vlad/layout/s-long-short.c - 3475912781b ./gcc/testsuite/consistency.vlad/layout/s-long-s-int.c - 3723194327b ./gcc/testsuite/consistency.vlad/layout/s-long-size_t.c - 1568391695b ./gcc/testsuite/consistency.vlad/layout/s-long-s-long.c - 74365094b ./gcc/testsuite/consistency.vlad/layout/s-long-s-longdouble.c - 501521658b ./gcc/testsuite/consistency.vlad/layout/s-long-s-longlong.c - 1748381535b ./gcc/testsuite/consistency.vlad/layout/s-long-s-pointer.c - 1836579330b ./gcc/testsuite/consistency.vlad/layout/s-long-s-short.c - 531244141b ./gcc/testsuite/consistency.vlad/layout/s-long-wchar_t.c - 3081442820b ./gcc/testsuite/consistency.vlad/layout/s-long-zf-char.c - 914301375b ./gcc/testsuite/consistency.vlad/layout/s-long-zf-int.c - 1562082244b ./gcc/testsuite/consistency.vlad/layout/s-long-zf-long.c - 2520232686b ./gcc/testsuite/consistency.vlad/layout/s-long-zf-longlong.c - 3568433576b ./gcc/testsuite/consistency.vlad/layout/s-long-zf-short.c 2431525882b ./gcc/testsuite/consistency.vlad/layout/s-pointer-a-char.c 4182828966b ./gcc/testsuite/consistency.vlad/layout/s-pointer-a-double.c 2030442801b ./gcc/testsuite/consistency.vlad/layout/s-pointer-a-float.c --- 4862,4881 ---- 183550901b ./gcc/testsuite/consistency.vlad/layout/s-longlong-s-char.c 1353709337b ./gcc/testsuite/consistency.vlad/layout/s-longlong-s-double.c 1622859985b ./gcc/testsuite/consistency.vlad/layout/s-longlong-s-float.c 3395819121b ./gcc/testsuite/consistency.vlad/layout/s-longlong-s-int.c 263554828b ./gcc/testsuite/consistency.vlad/layout/s-longlong-s-long.c 3292604731b ./gcc/testsuite/consistency.vlad/layout/s-longlong-s-longdouble.c 591712639b ./gcc/testsuite/consistency.vlad/layout/s-longlong-s-longlong.c 1892567537b ./gcc/testsuite/consistency.vlad/layout/s-longlong-s-pointer.c 108932916b ./gcc/testsuite/consistency.vlad/layout/s-longlong-s-short.c + 922091281b ./gcc/testsuite/consistency.vlad/layout/s-longlong-short.c + 3366304494b ./gcc/testsuite/consistency.vlad/layout/s-longlong-size_t.c 2585353545b ./gcc/testsuite/consistency.vlad/layout/s-longlong-wchar_t.c 1992502711b ./gcc/testsuite/consistency.vlad/layout/s-longlong-zf-char.c 943400451b ./gcc/testsuite/consistency.vlad/layout/s-longlong-zf-int.c 2630463188b ./gcc/testsuite/consistency.vlad/layout/s-longlong-zf-long.c 108059264b ./gcc/testsuite/consistency.vlad/layout/s-longlong-zf-longlong.c 162090179b ./gcc/testsuite/consistency.vlad/layout/s-longlong-zf-short.c 2431525882b ./gcc/testsuite/consistency.vlad/layout/s-pointer-a-char.c 4182828966b ./gcc/testsuite/consistency.vlad/layout/s-pointer-a-double.c 2030442801b ./gcc/testsuite/consistency.vlad/layout/s-pointer-a-float.c *************** *** 4888,4901 **** 1074103467b ./gcc/testsuite/consistency.vlad/layout/s-pointer-s-char.c 902838190b ./gcc/testsuite/consistency.vlad/layout/s-pointer-s-double.c 2754137289b ./gcc/testsuite/consistency.vlad/layout/s-pointer-s-float.c - 2645485672b ./gcc/testsuite/consistency.vlad/layout/s-pointer-short.c 157709325b ./gcc/testsuite/consistency.vlad/layout/s-pointer-s-int.c - 3640207262b ./gcc/testsuite/consistency.vlad/layout/s-pointer-size_t.c 663732630b ./gcc/testsuite/consistency.vlad/layout/s-pointer-s-long.c 1874509941b ./gcc/testsuite/consistency.vlad/layout/s-pointer-s-longdouble.c 2063875624b ./gcc/testsuite/consistency.vlad/layout/s-pointer-s-longlong.c 3199456656b ./gcc/testsuite/consistency.vlad/layout/s-pointer-s-pointer.c 2883478056b ./gcc/testsuite/consistency.vlad/layout/s-pointer-s-short.c 1316769493b ./gcc/testsuite/consistency.vlad/layout/s-pointer-wchar_t.c 2773199310b ./gcc/testsuite/consistency.vlad/layout/s-pointer-zf-char.c 2595768381b ./gcc/testsuite/consistency.vlad/layout/s-pointer-zf-int.c --- 4897,4910 ---- 1074103467b ./gcc/testsuite/consistency.vlad/layout/s-pointer-s-char.c 902838190b ./gcc/testsuite/consistency.vlad/layout/s-pointer-s-double.c 2754137289b ./gcc/testsuite/consistency.vlad/layout/s-pointer-s-float.c 157709325b ./gcc/testsuite/consistency.vlad/layout/s-pointer-s-int.c 663732630b ./gcc/testsuite/consistency.vlad/layout/s-pointer-s-long.c 1874509941b ./gcc/testsuite/consistency.vlad/layout/s-pointer-s-longdouble.c 2063875624b ./gcc/testsuite/consistency.vlad/layout/s-pointer-s-longlong.c 3199456656b ./gcc/testsuite/consistency.vlad/layout/s-pointer-s-pointer.c 2883478056b ./gcc/testsuite/consistency.vlad/layout/s-pointer-s-short.c + 2645485672b ./gcc/testsuite/consistency.vlad/layout/s-pointer-short.c + 3640207262b ./gcc/testsuite/consistency.vlad/layout/s-pointer-size_t.c 1316769493b ./gcc/testsuite/consistency.vlad/layout/s-pointer-wchar_t.c 2773199310b ./gcc/testsuite/consistency.vlad/layout/s-pointer-zf-char.c 2595768381b ./gcc/testsuite/consistency.vlad/layout/s-pointer-zf-int.c *************** *** 4935,4948 **** 4244286521b ./gcc/testsuite/consistency.vlad/layout/s-short-s-char.c 2777905017b ./gcc/testsuite/consistency.vlad/layout/s-short-s-double.c 2756050532b ./gcc/testsuite/consistency.vlad/layout/s-short-s-float.c - 524161230b ./gcc/testsuite/consistency.vlad/layout/s-short-short.c 374910896b ./gcc/testsuite/consistency.vlad/layout/s-short-s-int.c - 1327871729b ./gcc/testsuite/consistency.vlad/layout/s-short-size_t.c 479538741b ./gcc/testsuite/consistency.vlad/layout/s-short-s-long.c 4025001367b ./gcc/testsuite/consistency.vlad/layout/s-short-s-longdouble.c 1274385076b ./gcc/testsuite/consistency.vlad/layout/s-short-s-longlong.c 2921220650b ./gcc/testsuite/consistency.vlad/layout/s-short-s-pointer.c 1050140596b ./gcc/testsuite/consistency.vlad/layout/s-short-s-short.c 2735755699b ./gcc/testsuite/consistency.vlad/layout/s-short-wchar_t.c 2947437906b ./gcc/testsuite/consistency.vlad/layout/s-short-zf-char.c 3330463439b ./gcc/testsuite/consistency.vlad/layout/s-short-zf-int.c --- 4944,4957 ---- 4244286521b ./gcc/testsuite/consistency.vlad/layout/s-short-s-char.c 2777905017b ./gcc/testsuite/consistency.vlad/layout/s-short-s-double.c 2756050532b ./gcc/testsuite/consistency.vlad/layout/s-short-s-float.c 374910896b ./gcc/testsuite/consistency.vlad/layout/s-short-s-int.c 479538741b ./gcc/testsuite/consistency.vlad/layout/s-short-s-long.c 4025001367b ./gcc/testsuite/consistency.vlad/layout/s-short-s-longdouble.c 1274385076b ./gcc/testsuite/consistency.vlad/layout/s-short-s-longlong.c 2921220650b ./gcc/testsuite/consistency.vlad/layout/s-short-s-pointer.c 1050140596b ./gcc/testsuite/consistency.vlad/layout/s-short-s-short.c + 524161230b ./gcc/testsuite/consistency.vlad/layout/s-short-short.c + 1327871729b ./gcc/testsuite/consistency.vlad/layout/s-short-size_t.c 2735755699b ./gcc/testsuite/consistency.vlad/layout/s-short-wchar_t.c 2947437906b ./gcc/testsuite/consistency.vlad/layout/s-short-zf-char.c 3330463439b ./gcc/testsuite/consistency.vlad/layout/s-short-zf-int.c *************** *** 4973,7717 **** 4089915411b ./gcc/testsuite/consistency.vlad/layout/s-wchar_t-short.c 2415574017b ./gcc/testsuite/consistency.vlad/layout/s-wchar_t-size_t.c 2755349152b ./gcc/testsuite/consistency.vlad/layout/s-wchar_t-wchar_t.c ! 3207711727b ./gcc/testsuite/consistency.vlad/README 2068139423b ./gcc/testsuite/consistency.vlad/vlad.exp ! 2710099993b ./gcc/testsuite/g77.dg/20010216-1.f ! 88255324b ./gcc/testsuite/g77.dg/7388.f ! 2513750825b ./gcc/testsuite/g77.dg/bprob/bprob.exp ! 211215127b ./gcc/testsuite/g77.dg/bprob/g77-bprob-1.f ! 1815830648b ./gcc/testsuite/g77.dg/dg.exp ! 4034508570b ./gcc/testsuite/g77.dg/f77-edit-apostrophe-out.f ! 245196963b ./gcc/testsuite/g77.dg/f77-edit-colon-out.f ! 549518023b ./gcc/testsuite/g77.dg/f77-edit-h-out.f ! 3116993853b ./gcc/testsuite/g77.dg/f77-edit-i-in.f ! 462852590b ./gcc/testsuite/g77.dg/f77-edit-i-out.f ! 188941937b ./gcc/testsuite/g77.dg/f77-edit-slash-out.f ! 1014931200b ./gcc/testsuite/g77.dg/f77-edit-s-out.f ! 583752102b ./gcc/testsuite/g77.dg/f77-edit-t-in.f ! 819764799b ./gcc/testsuite/g77.dg/f77-edit-t-out.f ! 3976930856b ./gcc/testsuite/g77.dg/f77-edit-x-out.f ! 3692598063b ./gcc/testsuite/g77.dg/fbackslash.f ! 3349950140b ./gcc/testsuite/g77.dg/fcase-preserve.f ! 3493107241b ./gcc/testsuite/g77.dg/ff90-1.f ! 846110140b ./gcc/testsuite/g77.dg/ffixed-line-length-0.f ! 306302525b ./gcc/testsuite/g77.dg/ffixed-line-length-132.f ! 256008601b ./gcc/testsuite/g77.dg/ffixed-line-length-72.f ! 1293833923b ./gcc/testsuite/g77.dg/ffixed-line-length-7.f ! 2426259256b ./gcc/testsuite/g77.dg/ffixed-line-length-none.f ! 382313186b ./gcc/testsuite/g77.dg/ffree-form-1.f ! 1427613779b ./gcc/testsuite/g77.dg/fno-backslash.f ! 1787673713b ./gcc/testsuite/g77.dg/fno-f90-1.f ! 1073584992b ./gcc/testsuite/g77.dg/fno-fixed-form-1.f ! 2730066868b ./gcc/testsuite/g77.dg/fno-onetrip.f ! 109115498b ./gcc/testsuite/g77.dg/fno-typeless-boz.f ! 2720105997b ./gcc/testsuite/g77.dg/fno-underscoring.f ! 614291430b ./gcc/testsuite/g77.dg/fno-vxt-1.f ! 646478354b ./gcc/testsuite/g77.dg/fonetrip.f ! 298378793b ./gcc/testsuite/g77.dg/ftypeless-boz.f ! 1970388396b ./gcc/testsuite/g77.dg/fugly-assumed.f ! 813122842b ./gcc/testsuite/g77.dg/funderscoring.f ! 2755287889b ./gcc/testsuite/g77.dg/fvxt-1.f ! 4218369628b ./gcc/testsuite/g77.dg/gcov/gcov-1.f ! 2262587727b ./gcc/testsuite/g77.dg/gcov/gcov-1.x ! 3439770285b ./gcc/testsuite/g77.dg/gcov/gcov.exp ! 2336318971b ./gcc/testsuite/g77.dg/pr3743-1.f ! 3986109564b ./gcc/testsuite/g77.dg/pr3743-2.f ! 202729794b ./gcc/testsuite/g77.dg/pr3743-3.f ! 2533314951b ./gcc/testsuite/g77.dg/pr3743-4.f ! 3959051916b ./gcc/testsuite/g77.dg/pr5473.f ! 3348380351b ./gcc/testsuite/g77.dg/pr9258.f ! 724796683b ./gcc/testsuite/g77.dg/strlen0.f ! 2382988813b ./gcc/testsuite/g77.f-torture/compile/19990218-0.f ! 687255164b ./gcc/testsuite/g77.f-torture/compile/19990305-0.f ! 4067537756b ./gcc/testsuite/g77.f-torture/compile/19990419-0.f ! 3411435248b ./gcc/testsuite/g77.f-torture/compile/19990502-0.f ! 1869005611b ./gcc/testsuite/g77.f-torture/compile/19990502-1.f ! 4129788740b ./gcc/testsuite/g77.f-torture/compile/19990525-0.f ! 2117801028b ./gcc/testsuite/g77.f-torture/compile/19990826-1.f ! 1740583941b ./gcc/testsuite/g77.f-torture/compile/19990826-3.f ! 2822256200b ./gcc/testsuite/g77.f-torture/compile/19990905-0.f ! 1729432512b ./gcc/testsuite/g77.f-torture/compile/19990905-2.f ! 3873649497b ./gcc/testsuite/g77.f-torture/compile/20000412-1.f ! 2840421610b ./gcc/testsuite/g77.f-torture/compile/20000511-1.f ! 2723712181b ./gcc/testsuite/g77.f-torture/compile/20000511-2.f ! 82013928b ./gcc/testsuite/g77.f-torture/compile/20000518.f ! 412413004b ./gcc/testsuite/g77.f-torture/compile/20000601-1.f ! 3180214474b ./gcc/testsuite/g77.f-torture/compile/20000601-2.f ! 4055621021b ./gcc/testsuite/g77.f-torture/compile/20000629-1.f ! 2336002500b ./gcc/testsuite/g77.f-torture/compile/20000630-2.f ! 3970776632b ./gcc/testsuite/g77.f-torture/compile/20010115.f ! 3772314415b ./gcc/testsuite/g77.f-torture/compile/20010321-1.f ! 2213180372b ./gcc/testsuite/g77.f-torture/compile/20010426.f ! 756384820b ./gcc/testsuite/g77.f-torture/compile/20010519-1.f ! 139739226b ./gcc/testsuite/g77.f-torture/compile/20020307-1.f ! 3911540126b ./gcc/testsuite/g77.f-torture/compile/20030326-1.f ! 1776224360b ./gcc/testsuite/g77.f-torture/compile/960317-1.f ! 2528706840b ./gcc/testsuite/g77.f-torture/compile/970125-0.f ! 3100920780b ./gcc/testsuite/g77.f-torture/compile/970915-0.f ! 3454578083b ./gcc/testsuite/g77.f-torture/compile/980310-1.f ! 1063918752b ./gcc/testsuite/g77.f-torture/compile/980310-2.f ! 3699662809b ./gcc/testsuite/g77.f-torture/compile/980310-3.f ! 1046454488b ./gcc/testsuite/g77.f-torture/compile/980310-4.f ! 581995045b ./gcc/testsuite/g77.f-torture/compile/980310-6.f ! 758602941b ./gcc/testsuite/g77.f-torture/compile/980310-7.f ! 3264996889b ./gcc/testsuite/g77.f-torture/compile/980310-8.f ! 55455134b ./gcc/testsuite/g77.f-torture/compile/980419-2.f ! 2284181108b ./gcc/testsuite/g77.f-torture/compile/980424-0.f ! 585713859b ./gcc/testsuite/g77.f-torture/compile/980427-0.f ! 2853235618b ./gcc/testsuite/g77.f-torture/compile/980519-2.f ! 2138526345b ./gcc/testsuite/g77.f-torture/compile/980729-0.f ! 1069123470b ./gcc/testsuite/g77.f-torture/compile/981117-1.f ! 2053478041b ./gcc/testsuite/g77.f-torture/compile/990115-1.f ! 3973737388b ./gcc/testsuite/g77.f-torture/compile/alpha1.f ! 2107279947b ./gcc/testsuite/g77.f-torture/compile/alpha1.x ! 4148688482b ./gcc/testsuite/g77.f-torture/compile/compile.exp ! 1347946300b ./gcc/testsuite/g77.f-torture/compile/cpp2.F ! 883444817b ./gcc/testsuite/g77.f-torture/compile/cpp.F ! 407305629b ./gcc/testsuite/g77.f-torture/compile/toon_1.f ! 3599334924b ./gcc/testsuite/g77.f-torture/execute/10197.f ! 842468456b ./gcc/testsuite/g77.f-torture/execute/1832.f ! 1875205813b ./gcc/testsuite/g77.f-torture/execute/19981119-0.f ! 207133658b ./gcc/testsuite/g77.f-torture/execute/19990313-0.f ! 1311165077b ./gcc/testsuite/g77.f-torture/execute/19990313-1.f ! 2827041779b ./gcc/testsuite/g77.f-torture/execute/19990313-2.f ! 3627217083b ./gcc/testsuite/g77.f-torture/execute/19990313-3.f ! 334442269b ./gcc/testsuite/g77.f-torture/execute/19990325-0.f ! 2498790248b ./gcc/testsuite/g77.f-torture/execute/19990325-1.f ! 1566943825b ./gcc/testsuite/g77.f-torture/execute/19990419-1.f ! 1702408878b ./gcc/testsuite/g77.f-torture/execute/19990826-0.f ! 548549288b ./gcc/testsuite/g77.f-torture/execute/19990826-2.f ! 2245832686b ./gcc/testsuite/g77.f-torture/execute/20000503-1.f ! 119817854b ./gcc/testsuite/g77.f-torture/execute/20001111.f ! 3778266196b ./gcc/testsuite/g77.f-torture/execute/20001201.f ! 1721706271b ./gcc/testsuite/g77.f-torture/execute/20001201.x ! 3482653018b ./gcc/testsuite/g77.f-torture/execute/20010116.f ! 104441706b ./gcc/testsuite/g77.f-torture/execute/20010426.f ! 2134591728b ./gcc/testsuite/g77.f-torture/execute/20010430.f ! 2127502131b ./gcc/testsuite/g77.f-torture/execute/20010610.f ! 1835626441b ./gcc/testsuite/g77.f-torture/execute/5122.f ! 93616433b ./gcc/testsuite/g77.f-torture/execute/6177.f ! 4276687406b ./gcc/testsuite/g77.f-torture/execute/6367.f ! 1721706271b ./gcc/testsuite/g77.f-torture/execute/6367.x ! 166046708b ./gcc/testsuite/g77.f-torture/execute/947.f ! 2872624206b ./gcc/testsuite/g77.f-torture/execute/970625-2.f ! 2944713164b ./gcc/testsuite/g77.f-torture/execute/970816-3.f ! 3043987240b ./gcc/testsuite/g77.f-torture/execute/971102-1.f ! 1356010785b ./gcc/testsuite/g77.f-torture/execute/980520-1.f ! 2822825054b ./gcc/testsuite/g77.f-torture/execute/980628-0.f ! 1154425496b ./gcc/testsuite/g77.f-torture/execute/980628-10.f ! 731282896b ./gcc/testsuite/g77.f-torture/execute/980628-1.f ! 652392894b ./gcc/testsuite/g77.f-torture/execute/980628-2.f ! 3891656681b ./gcc/testsuite/g77.f-torture/execute/980628-3.f ! 4188896500b ./gcc/testsuite/g77.f-torture/execute/980628-4.f ! 2107279947b ./gcc/testsuite/g77.f-torture/execute/980628-4.x ! 3480269714b ./gcc/testsuite/g77.f-torture/execute/980628-5.f ! 2107279947b ./gcc/testsuite/g77.f-torture/execute/980628-5.x ! 1467613590b ./gcc/testsuite/g77.f-torture/execute/980628-6.f ! 2107279947b ./gcc/testsuite/g77.f-torture/execute/980628-6.x ! 1104933088b ./gcc/testsuite/g77.f-torture/execute/980628-7.f ! 1264093278b ./gcc/testsuite/g77.f-torture/execute/980628-8.f ! 2969694593b ./gcc/testsuite/g77.f-torture/execute/980628-9.f ! 1979661682b ./gcc/testsuite/g77.f-torture/execute/980701-0.f ! 2199388550b ./gcc/testsuite/g77.f-torture/execute/980701-1.f ! 2519492399b ./gcc/testsuite/g77.f-torture/execute/alpha2.f ! 2107279947b ./gcc/testsuite/g77.f-torture/execute/alpha2.x ! 2259027475b ./gcc/testsuite/g77.f-torture/execute/auto0.f ! 2107279947b ./gcc/testsuite/g77.f-torture/execute/auto0.x ! 4202240464b ./gcc/testsuite/g77.f-torture/execute/auto1.f ! 2107279947b ./gcc/testsuite/g77.f-torture/execute/auto1.x ! 232981110b ./gcc/testsuite/g77.f-torture/execute/cabs.f ! 877306443b ./gcc/testsuite/g77.f-torture/execute/claus.f ! 2682388459b ./gcc/testsuite/g77.f-torture/execute/complex_1.f ! 268027241b ./gcc/testsuite/g77.f-torture/execute/cpp2.F ! 274053025b ./gcc/testsuite/g77.f-torture/execute/cpp.F ! 3689042274b ./gcc/testsuite/g77.f-torture/execute/dcomplex.f ! 2431087293b ./gcc/testsuite/g77.f-torture/execute/dnrm2.f ! 1012852742b ./gcc/testsuite/g77.f-torture/execute/erfc.f ! 574860802b ./gcc/testsuite/g77.f-torture/execute/execute.exp ! 2348837361b ./gcc/testsuite/g77.f-torture/execute/exp.f ! 1166305221b ./gcc/testsuite/g77.f-torture/execute/f90-intrinsic-bit.f ! 1401151480b ./gcc/testsuite/g77.f-torture/execute/f90-intrinsic-mathematical.f ! 296501581b ./gcc/testsuite/g77.f-torture/execute/f90-intrinsic-numeric.f ! 1448802159b ./gcc/testsuite/g77.f-torture/execute/intrinsic77.f ! 1619227376b ./gcc/testsuite/g77.f-torture/execute/intrinsic-f2c-z.f ! 2512429495b ./gcc/testsuite/g77.f-torture/execute/intrinsic-unix-bessel.f ! 846341057b ./gcc/testsuite/g77.f-torture/execute/intrinsic-unix-erf.f ! 3837275230b ./gcc/testsuite/g77.f-torture/execute/intrinsic-vax-cd.f ! 3527337523b ./gcc/testsuite/g77.f-torture/execute/io0.f ! 1721706271b ./gcc/testsuite/g77.f-torture/execute/io0.x ! 1499748556b ./gcc/testsuite/g77.f-torture/execute/io1.f ! 1721706271b ./gcc/testsuite/g77.f-torture/execute/io1.x ! 3838992103b ./gcc/testsuite/g77.f-torture/execute/labug1.f ! 273345472b ./gcc/testsuite/g77.f-torture/execute/large_vec.f ! 775036014b ./gcc/testsuite/g77.f-torture/execute/le.f ! 873992663b ./gcc/testsuite/g77.f-torture/execute/select.f ! 3780459526b ./gcc/testsuite/g77.f-torture/execute/short.f ! 85764886b ./gcc/testsuite/g77.f-torture/execute/u77-test.f ! 991484451b ./gcc/testsuite/g77.f-torture/execute/u77-test.x ! 2234422141b ./gcc/testsuite/g77.f-torture/noncompile/19981216-0.f ! 2509327097b ./gcc/testsuite/g77.f-torture/noncompile/19990218-1.f ! 684708897b ./gcc/testsuite/g77.f-torture/noncompile/19990826-4.f ! 3593377062b ./gcc/testsuite/g77.f-torture/noncompile/19990905-1.f ! 118086646b ./gcc/testsuite/g77.f-torture/noncompile/9263.f ! 3649968898b ./gcc/testsuite/g77.f-torture/noncompile/970626-2.f ! 3382416911b ./gcc/testsuite/g77.f-torture/noncompile/980615-0.f ! 4269744935b ./gcc/testsuite/g77.f-torture/noncompile/980616-0.f ! 2374591598b ./gcc/testsuite/g77.f-torture/noncompile/check0.f ! 351555731b ./gcc/testsuite/g77.f-torture/noncompile/noncompile.exp ! 276625067b ./gcc/testsuite/g77.f-torture/noncompile/select_no_compile.f ! 2075770423b ./gcc/testsuite/gcc.c-torture/ChangeLog.0 ! 1091110310b ./gcc/testsuite/gcc.c-torture/compat/strct-layout.c ! 684784126b ./gcc/testsuite/gcc.c-torture/compat/struct-align.c ! 92980596b ./gcc/testsuite/gcc.c-torture/compat/struct-big.c ! 2993970556b ./gcc/testsuite/gcc.c-torture/compat/struct-i.c ! 1373131310b ./gcc/testsuite/gcc.c-torture/compat/struct-ic.c ! 367335173b ./gcc/testsuite/gcc.c-torture/compat/struct-ii.c ! 954170066b ./gcc/testsuite/gcc.c-torture/compat/struct-ret-1.c ! 452836178b ./gcc/testsuite/gcc.c-torture/compile/20000105-1.c ! 1901634825b ./gcc/testsuite/gcc.c-torture/compile/20000105-2.c ! 3139355726b ./gcc/testsuite/gcc.c-torture/compile/20000120-1.c ! 193146344b ./gcc/testsuite/gcc.c-torture/compile/20000120-2.c ! 3770371830b ./gcc/testsuite/gcc.c-torture/compile/20000127-1.c ! 1457334923b ./gcc/testsuite/gcc.c-torture/compile/20000211-1.c ! 3072124491b ./gcc/testsuite/gcc.c-torture/compile/20000211-3.c ! 2487027780b ./gcc/testsuite/gcc.c-torture/compile/20000224-1.c ! 976060843b ./gcc/testsuite/gcc.c-torture/compile/20000314-1.c ! 2716819908b ./gcc/testsuite/gcc.c-torture/compile/20000314-2.c ! 3323098889b ./gcc/testsuite/gcc.c-torture/compile/20000319-1.c ! 621983670b ./gcc/testsuite/gcc.c-torture/compile/20000326-1.c ! 362965832b ./gcc/testsuite/gcc.c-torture/compile/20000326-2.c ! 1360671142b ./gcc/testsuite/gcc.c-torture/compile/20000329-1.c ! 1376990121b ./gcc/testsuite/gcc.c-torture/compile/20000403-1.c ! 1295018105b ./gcc/testsuite/gcc.c-torture/compile/20000403-2.c ! 2994009121b ./gcc/testsuite/gcc.c-torture/compile/20000405-1.c ! 1202553741b ./gcc/testsuite/gcc.c-torture/compile/20000405-2.c ! 1972736685b ./gcc/testsuite/gcc.c-torture/compile/20000405-3.c ! 4185438508b ./gcc/testsuite/gcc.c-torture/compile/20000412-1.c ! 1020690516b ./gcc/testsuite/gcc.c-torture/compile/20000412-2.c ! 606471227b ./gcc/testsuite/gcc.c-torture/compile/20000420-1.c ! 3618930753b ./gcc/testsuite/gcc.c-torture/compile/20000420-2.c ! 1513651895b ./gcc/testsuite/gcc.c-torture/compile/20000427-1.c ! 1253394561b ./gcc/testsuite/gcc.c-torture/compile/20000502-1.c ! 2301846307b ./gcc/testsuite/gcc.c-torture/compile/20000504-1.c ! 4216707490b ./gcc/testsuite/gcc.c-torture/compile/20000511-1.c ! 160078686b ./gcc/testsuite/gcc.c-torture/compile/20000517-1.c ! 138460064b ./gcc/testsuite/gcc.c-torture/compile/20000518-1.c ! 4277321614b ./gcc/testsuite/gcc.c-torture/compile/20000523-1.c ! 894948419b ./gcc/testsuite/gcc.c-torture/compile/20000605-1.c ! 1801476756b ./gcc/testsuite/gcc.c-torture/compile/20000606-1.c ! 3807623957b ./gcc/testsuite/gcc.c-torture/compile/20000609-1.c ! 3889196710b ./gcc/testsuite/gcc.c-torture/compile/20000629-1.c ! 2019168881b ./gcc/testsuite/gcc.c-torture/compile/20000701-1.c ! 23561090b ./gcc/testsuite/gcc.c-torture/compile/20000717-1.c ! 1282603692b ./gcc/testsuite/gcc.c-torture/compile/20000718.c ! 1628213540b ./gcc/testsuite/gcc.c-torture/compile/20000728-1.c ! 1312817714b ./gcc/testsuite/gcc.c-torture/compile/20000802-1.c ! 726930164b ./gcc/testsuite/gcc.c-torture/compile/20000803-1.c ! 221685889b ./gcc/testsuite/gcc.c-torture/compile/20000804-1.c ! 3819705114b ./gcc/testsuite/gcc.c-torture/compile/20000804-1.x ! 14592370b ./gcc/testsuite/gcc.c-torture/compile/20000818-1.c ! 3951998464b ./gcc/testsuite/gcc.c-torture/compile/20000825-1.c ! 568900271b ./gcc/testsuite/gcc.c-torture/compile/20000827-1.c ! 1702972966b ./gcc/testsuite/gcc.c-torture/compile/20000922-1.c ! 1072305501b ./gcc/testsuite/gcc.c-torture/compile/20000923-1.c ! 3797844565b ./gcc/testsuite/gcc.c-torture/compile/20001018-1.c ! 1683967360b ./gcc/testsuite/gcc.c-torture/compile/20001024-1.c ! 2747210984b ./gcc/testsuite/gcc.c-torture/compile/20001109-1.c ! 1480527842b ./gcc/testsuite/gcc.c-torture/compile/20001109-2.c ! 1361242877b ./gcc/testsuite/gcc.c-torture/compile/20001116-1.c ! 3966980994b ./gcc/testsuite/gcc.c-torture/compile/20001121-1.c ! 599106867b ./gcc/testsuite/gcc.c-torture/compile/20001123-1.c ! 533599449b ./gcc/testsuite/gcc.c-torture/compile/20001123-2.c ! 3673931755b ./gcc/testsuite/gcc.c-torture/compile/20001205-1.c ! 2693813894b ./gcc/testsuite/gcc.c-torture/compile/20001205-1.x ! 1735535039b ./gcc/testsuite/gcc.c-torture/compile/20001212-1.c ! 2993397009b ./gcc/testsuite/gcc.c-torture/compile/20001221-1.c ! 2331416953b ./gcc/testsuite/gcc.c-torture/compile/20001222-1.c ! 1872827667b ./gcc/testsuite/gcc.c-torture/compile/20001226-1.c ! 3985327824b ./gcc/testsuite/gcc.c-torture/compile/20001226-1.x ! 4099141482b ./gcc/testsuite/gcc.c-torture/compile/20010102-1.c ! 2413955943b ./gcc/testsuite/gcc.c-torture/compile/20010107-1.c ! 1898226085b ./gcc/testsuite/gcc.c-torture/compile/20010112-1.c ! 2489493145b ./gcc/testsuite/gcc.c-torture/compile/20010113-1.c ! 297170965b ./gcc/testsuite/gcc.c-torture/compile/20010114-1.c ! 419921862b ./gcc/testsuite/gcc.c-torture/compile/20010114-2.c ! 1452007589b ./gcc/testsuite/gcc.c-torture/compile/20010117-1.c ! 704576096b ./gcc/testsuite/gcc.c-torture/compile/20010117-2.c ! 3392519430b ./gcc/testsuite/gcc.c-torture/compile/20010118-1.c ! 3355150280b ./gcc/testsuite/gcc.c-torture/compile/20010124-1.c ! 1731094577b ./gcc/testsuite/gcc.c-torture/compile/20010202-1.c ! 459778149b ./gcc/testsuite/gcc.c-torture/compile/20010209-1.c ! 620156961b ./gcc/testsuite/gcc.c-torture/compile/20010226-1.c ! 501795051b ./gcc/testsuite/gcc.c-torture/compile/20010227-1.c ! 1832317029b ./gcc/testsuite/gcc.c-torture/compile/20010313-1.c ! 2854417844b ./gcc/testsuite/gcc.c-torture/compile/20010320-1.c ! 3271306723b ./gcc/testsuite/gcc.c-torture/compile/20010326-1.c ! 2222955049b ./gcc/testsuite/gcc.c-torture/compile/20010327-1.c ! 3399421780b ./gcc/testsuite/gcc.c-torture/compile/20010328-1.c ! 3356008690b ./gcc/testsuite/gcc.c-torture/compile/20010329-1.c ! 4152637354b ./gcc/testsuite/gcc.c-torture/compile/20010404-1.c ! 1548469760b ./gcc/testsuite/gcc.c-torture/compile/20010408-1.c ! 3063630520b ./gcc/testsuite/gcc.c-torture/compile/20010421-1.c ! 3134579946b ./gcc/testsuite/gcc.c-torture/compile/20010423-1.c ! 2289909284b ./gcc/testsuite/gcc.c-torture/compile/20010426-1.c ! 2357536931b ./gcc/testsuite/gcc.c-torture/compile/20010503-1.c ! 1212631565b ./gcc/testsuite/gcc.c-torture/compile/20010510-1.c ! 1882079811b ./gcc/testsuite/gcc.c-torture/compile/20010516-1.c ! 3166989448b ./gcc/testsuite/gcc.c-torture/compile/20010518-1.c ! 3017611134b ./gcc/testsuite/gcc.c-torture/compile/20010518-2.c ! 2404992642b ./gcc/testsuite/gcc.c-torture/compile/20010518-2.x ! 3272357537b ./gcc/testsuite/gcc.c-torture/compile/20010525-1.c ! 475581102b ./gcc/testsuite/gcc.c-torture/compile/20010605-1.c ! 2936945185b ./gcc/testsuite/gcc.c-torture/compile/20010605-2.c ! 1294346331b ./gcc/testsuite/gcc.c-torture/compile/20010605-3.c ! 1636067950b ./gcc/testsuite/gcc.c-torture/compile/20010610-1.c ! 3077114319b ./gcc/testsuite/gcc.c-torture/compile/20010611-1.c ! 2584744929b ./gcc/testsuite/gcc.c-torture/compile/20010701-1.c ! 3815198051b ./gcc/testsuite/gcc.c-torture/compile/20010706-1.c ! 2713093522b ./gcc/testsuite/gcc.c-torture/compile/20010711-1.c ! 2299173088b ./gcc/testsuite/gcc.c-torture/compile/20010711-2.c ! 2571658330b ./gcc/testsuite/gcc.c-torture/compile/20010714-1.c ! 3287379546b ./gcc/testsuite/gcc.c-torture/compile/20010824-1.c ! 246682254b ./gcc/testsuite/gcc.c-torture/compile/20010903-1.c ! 2923439609b ./gcc/testsuite/gcc.c-torture/compile/20010903-2.c ! 4222197564b ./gcc/testsuite/gcc.c-torture/compile/20010911-1.c ! 1179192833b ./gcc/testsuite/gcc.c-torture/compile/20011010-1.c ! 3994663975b ./gcc/testsuite/gcc.c-torture/compile/20011023-1.c ! 1413783183b ./gcc/testsuite/gcc.c-torture/compile/20011029-1.c ! 2871784009b ./gcc/testsuite/gcc.c-torture/compile/20011106-1.c ! 3630952349b ./gcc/testsuite/gcc.c-torture/compile/20011106-2.c ! 259957404b ./gcc/testsuite/gcc.c-torture/compile/20011109-1.c ! 2924929463b ./gcc/testsuite/gcc.c-torture/compile/20011114-1.c ! 3434496008b ./gcc/testsuite/gcc.c-torture/compile/20011114-2.c ! 2760161415b ./gcc/testsuite/gcc.c-torture/compile/20011114-3.c ! 3547339064b ./gcc/testsuite/gcc.c-torture/compile/20011114-4.c ! 3653343012b ./gcc/testsuite/gcc.c-torture/compile/20011119-1.c ! 2885054257b ./gcc/testsuite/gcc.c-torture/compile/20011119-2.c ! 174415171b ./gcc/testsuite/gcc.c-torture/compile/20011130-1.c ! 1745547919b ./gcc/testsuite/gcc.c-torture/compile/20011130-2.c ! 3987052556b ./gcc/testsuite/gcc.c-torture/compile/20011205-1.c ! 1179199950b ./gcc/testsuite/gcc.c-torture/compile/20011217-1.c ! 315452475b ./gcc/testsuite/gcc.c-torture/compile/20011217-2.c ! 3416537061b ./gcc/testsuite/gcc.c-torture/compile/20011218-1.c ! 2149414673b ./gcc/testsuite/gcc.c-torture/compile/20011219-1.c ! 1484609615b ./gcc/testsuite/gcc.c-torture/compile/20011219-2.c ! 3590162726b ./gcc/testsuite/gcc.c-torture/compile/20011229-1.c ! 1849951092b ./gcc/testsuite/gcc.c-torture/compile/20011229-2.c ! 3637150343b ./gcc/testsuite/gcc.c-torture/compile/20020103-1.c ! 3505269843b ./gcc/testsuite/gcc.c-torture/compile/20020106-1.c ! 3398919425b ./gcc/testsuite/gcc.c-torture/compile/20020109-1.c ! 2348431150b ./gcc/testsuite/gcc.c-torture/compile/20020109-2.c ! 4197667212b ./gcc/testsuite/gcc.c-torture/compile/20020110.c ! 208428249b ./gcc/testsuite/gcc.c-torture/compile/20020116-1.c ! 966527433b ./gcc/testsuite/gcc.c-torture/compile/20020120-1.c ! 3002186865b ./gcc/testsuite/gcc.c-torture/compile/20020121-1.c ! 2862264485b ./gcc/testsuite/gcc.c-torture/compile/20020206-1.c ! 1009994283b ./gcc/testsuite/gcc.c-torture/compile/20020210-1.c ! 1193130025b ./gcc/testsuite/gcc.c-torture/compile/20020303-1.c ! 1683706700b ./gcc/testsuite/gcc.c-torture/compile/20020304-1.c ! 3186842248b ./gcc/testsuite/gcc.c-torture/compile/20020304-2.c ! 1366050512b ./gcc/testsuite/gcc.c-torture/compile/20020309-1.c ! 1174986914b ./gcc/testsuite/gcc.c-torture/compile/20020309-2.c ! 1727441689b ./gcc/testsuite/gcc.c-torture/compile/20020312-1.c ! 2872650660b ./gcc/testsuite/gcc.c-torture/compile/20020312-1.x ! 16580553b ./gcc/testsuite/gcc.c-torture/compile/20020314-1.c ! 2378124589b ./gcc/testsuite/gcc.c-torture/compile/20020315-1.c ! 4029159547b ./gcc/testsuite/gcc.c-torture/compile/20020318-1.c ! 4089657504b ./gcc/testsuite/gcc.c-torture/compile/20020319-1.c ! 2837722984b ./gcc/testsuite/gcc.c-torture/compile/20020320-1.c ! 1380106070b ./gcc/testsuite/gcc.c-torture/compile/20020323-1.c ! 392286369b ./gcc/testsuite/gcc.c-torture/compile/20020330-1.c ! 4289507025b ./gcc/testsuite/gcc.c-torture/compile/20020409-1.c ! 631285907b ./gcc/testsuite/gcc.c-torture/compile/20020415-1.c ! 3246888365b ./gcc/testsuite/gcc.c-torture/compile/20020418-1.c ! 1318297601b ./gcc/testsuite/gcc.c-torture/compile/20020530-1.c ! 1207151280b ./gcc/testsuite/gcc.c-torture/compile/20020604-1.c ! 1992100052b ./gcc/testsuite/gcc.c-torture/compile/20020604-1.x ! 909926902b ./gcc/testsuite/gcc.c-torture/compile/20020605-1.c ! 168620187b ./gcc/testsuite/gcc.c-torture/compile/20020701-1.c ! 1534237110b ./gcc/testsuite/gcc.c-torture/compile/20020706-1.c ! 2582470567b ./gcc/testsuite/gcc.c-torture/compile/20020706-2.c ! 1098925370b ./gcc/testsuite/gcc.c-torture/compile/20020709-1.c ! 1564612166b ./gcc/testsuite/gcc.c-torture/compile/20020710-1.c ! 737897185b ./gcc/testsuite/gcc.c-torture/compile/20020715-1.c ! 1067410022b ./gcc/testsuite/gcc.c-torture/compile/20020910-1.c ! 4042098602b ./gcc/testsuite/gcc.c-torture/compile/20020926-1.c ! 337401938b ./gcc/testsuite/gcc.c-torture/compile/20020927-1.c ! 597765545b ./gcc/testsuite/gcc.c-torture/compile/20020930-1.c ! 170766928b ./gcc/testsuite/gcc.c-torture/compile/20021001-1.c ! 1009786556b ./gcc/testsuite/gcc.c-torture/compile/20021007-1.c ! 778329230b ./gcc/testsuite/gcc.c-torture/compile/20021015-1.c ! 25981859b ./gcc/testsuite/gcc.c-torture/compile/20021015-2.c ! 2807893986b ./gcc/testsuite/gcc.c-torture/compile/20021103-1.c ! 3505925860b ./gcc/testsuite/gcc.c-torture/compile/20021108-1.c ! 2007214546b ./gcc/testsuite/gcc.c-torture/compile/20021110.c ! 3537627700b ./gcc/testsuite/gcc.c-torture/compile/20021119-1.c ! 3188218514b ./gcc/testsuite/gcc.c-torture/compile/20021120-1.c ! 3735410464b ./gcc/testsuite/gcc.c-torture/compile/20021120-2.c ! 2007214546b ./gcc/testsuite/gcc.c-torture/compile/20021123-1.c ! 3188218514b ./gcc/testsuite/gcc.c-torture/compile/20021123-2.c ! 3735410464b ./gcc/testsuite/gcc.c-torture/compile/20021123-3.c ! 3537627700b ./gcc/testsuite/gcc.c-torture/compile/20021123-4.c ! 2814356441b ./gcc/testsuite/gcc.c-torture/compile/20021124-1.c ! 3155365897b ./gcc/testsuite/gcc.c-torture/compile/20021204-1.c ! 953842788b ./gcc/testsuite/gcc.c-torture/compile/20021205-1.c ! 3765901682b ./gcc/testsuite/gcc.c-torture/compile/20021212-1.c ! 1694594576b ./gcc/testsuite/gcc.c-torture/compile/20030110-1.c ! 3005267439b ./gcc/testsuite/gcc.c-torture/compile/20030125-1.c ! 3514558242b ./gcc/testsuite/gcc.c-torture/compile/20030206-1.c ! 4268170432b ./gcc/testsuite/gcc.c-torture/compile/20030219-1.c ! 3214532330b ./gcc/testsuite/gcc.c-torture/compile/20030305-1.c ! 3074411947b ./gcc/testsuite/gcc.c-torture/compile/20030314-1.c ! 1095885293b ./gcc/testsuite/gcc.c-torture/compile/20030330-1.c ! 3865220381b ./gcc/testsuite/gcc.c-torture/compile/20030405-1.c ! 3497948189b ./gcc/testsuite/gcc.c-torture/compile/20030418-1.c ! 139115612b ./gcc/testsuite/gcc.c-torture/compile/20030604-1.c ! 3168385659b ./gcc/testsuite/gcc.c-torture/compile/20030625-1.c ! 1844731542b ./gcc/testsuite/gcc.c-torture/compile/20030703-1.c ! 421671839b ./gcc/testsuite/gcc.c-torture/compile/20030821-1.c ! 144576078b ./gcc/testsuite/gcc.c-torture/compile/20030907-1.c ! 3163338462b ./gcc/testsuite/gcc.c-torture/compile/20031002-1.c ! 1569879978b ./gcc/testsuite/gcc.c-torture/compile/20031011-1.c ! 375311401b ./gcc/testsuite/gcc.c-torture/compile/900116-1.c ! 4181931788b ./gcc/testsuite/gcc.c-torture/compile/900216-1.c ! 426860692b ./gcc/testsuite/gcc.c-torture/compile/900313-1.c ! 221307575b ./gcc/testsuite/gcc.c-torture/compile/900407-1.c ! 197356982b ./gcc/testsuite/gcc.c-torture/compile/900516-1.c ! 1548983744b ./gcc/testsuite/gcc.c-torture/compile/920301-1.c ! 4282140702b ./gcc/testsuite/gcc.c-torture/compile/920409-1.c ! 1778084656b ./gcc/testsuite/gcc.c-torture/compile/920409-2.c ! 213155575b ./gcc/testsuite/gcc.c-torture/compile/920410-1.c ! 645991439b ./gcc/testsuite/gcc.c-torture/compile/920410-2.c ! 3957037518b ./gcc/testsuite/gcc.c-torture/compile/920411-2.c ! 2334498932b ./gcc/testsuite/gcc.c-torture/compile/920413-1.c ! 962899604b ./gcc/testsuite/gcc.c-torture/compile/920415-1.c ! 2539976202b ./gcc/testsuite/gcc.c-torture/compile/920428-1.c ! 1013934609b ./gcc/testsuite/gcc.c-torture/compile/920428-2.c ! 788296187b ./gcc/testsuite/gcc.c-torture/compile/920428-3.c ! 972355256b ./gcc/testsuite/gcc.c-torture/compile/920428-4.c ! 2850012644b ./gcc/testsuite/gcc.c-torture/compile/920428-5.c ! 3327240012b ./gcc/testsuite/gcc.c-torture/compile/920428-6.c ! 1997719687b ./gcc/testsuite/gcc.c-torture/compile/920428-7.c ! 2992320179b ./gcc/testsuite/gcc.c-torture/compile/920501-10.c ! 2609541759b ./gcc/testsuite/gcc.c-torture/compile/920501-11.c ! 46877596b ./gcc/testsuite/gcc.c-torture/compile/920501-12.c ! 2383031034b ./gcc/testsuite/gcc.c-torture/compile/920501-12.x ! 432031083b ./gcc/testsuite/gcc.c-torture/compile/920501-13.c ! 3986866565b ./gcc/testsuite/gcc.c-torture/compile/920501-15.c ! 2140301132b ./gcc/testsuite/gcc.c-torture/compile/920501-16.c ! 2776840158b ./gcc/testsuite/gcc.c-torture/compile/920501-17.c ! 2935229477b ./gcc/testsuite/gcc.c-torture/compile/920501-18.c ! 2462018157b ./gcc/testsuite/gcc.c-torture/compile/920501-19.c ! 3673935883b ./gcc/testsuite/gcc.c-torture/compile/920501-1.c ! 3480599006b ./gcc/testsuite/gcc.c-torture/compile/920501-20.c ! 1689258794b ./gcc/testsuite/gcc.c-torture/compile/920501-21.c ! 693947540b ./gcc/testsuite/gcc.c-torture/compile/920501-22.c ! 195826579b ./gcc/testsuite/gcc.c-torture/compile/920501-23.c ! 825734676b ./gcc/testsuite/gcc.c-torture/compile/920501-2.c ! 2815077449b ./gcc/testsuite/gcc.c-torture/compile/920501-3.c ! 3150704176b ./gcc/testsuite/gcc.c-torture/compile/920501-4.c ! 3513772660b ./gcc/testsuite/gcc.c-torture/compile/920501-4.x ! 3936438856b ./gcc/testsuite/gcc.c-torture/compile/920501-6.c ! 2978363162b ./gcc/testsuite/gcc.c-torture/compile/920501-7.c ! 3178366367b ./gcc/testsuite/gcc.c-torture/compile/920501-8.c ! 3988773566b ./gcc/testsuite/gcc.c-torture/compile/920501-9.c ! 4273234272b ./gcc/testsuite/gcc.c-torture/compile/920502-1.c ! 451473472b ./gcc/testsuite/gcc.c-torture/compile/920502-2.c ! 1332166500b ./gcc/testsuite/gcc.c-torture/compile/920520-1.c ! 2245440507b ./gcc/testsuite/gcc.c-torture/compile/920520-1.x ! 901366109b ./gcc/testsuite/gcc.c-torture/compile/920521-1.c ! 85616231b ./gcc/testsuite/gcc.c-torture/compile/920521-1.x ! 1216353647b ./gcc/testsuite/gcc.c-torture/compile/920529-1.c ! 619512296b ./gcc/testsuite/gcc.c-torture/compile/920608-1.c ! 2459147095b ./gcc/testsuite/gcc.c-torture/compile/920611-2.c ! 2108915266b ./gcc/testsuite/gcc.c-torture/compile/920615-1.c ! 1738386639b ./gcc/testsuite/gcc.c-torture/compile/920617-1.c ! 1497386838b ./gcc/testsuite/gcc.c-torture/compile/920617-2.c ! 15254500b ./gcc/testsuite/gcc.c-torture/compile/920623-1.c ! 1775235688b ./gcc/testsuite/gcc.c-torture/compile/920624-1.c ! 3157795265b ./gcc/testsuite/gcc.c-torture/compile/920625-1.c ! 3813813093b ./gcc/testsuite/gcc.c-torture/compile/920625-1.x ! 832571494b ./gcc/testsuite/gcc.c-torture/compile/920625-2.c ! 1209301541b ./gcc/testsuite/gcc.c-torture/compile/920626-1.c ! 1071302436b ./gcc/testsuite/gcc.c-torture/compile/920701-1.c ! 2769689708b ./gcc/testsuite/gcc.c-torture/compile/920702-1.c ! 2699685766b ./gcc/testsuite/gcc.c-torture/compile/920706-1.c ! 2611774952b ./gcc/testsuite/gcc.c-torture/compile/920710-2.c ! 3175710753b ./gcc/testsuite/gcc.c-torture/compile/920711-1.c ! 1838641399b ./gcc/testsuite/gcc.c-torture/compile/920721-1.c ! 1730574618b ./gcc/testsuite/gcc.c-torture/compile/920723-1.c ! 2728140867b ./gcc/testsuite/gcc.c-torture/compile/920729-1.c ! 3543134222b ./gcc/testsuite/gcc.c-torture/compile/920806-1.c ! 301898459b ./gcc/testsuite/gcc.c-torture/compile/920808-1.c ! 4286663396b ./gcc/testsuite/gcc.c-torture/compile/920809-1.c ! 1519893227b ./gcc/testsuite/gcc.c-torture/compile/920817-1.c ! 1506959740b ./gcc/testsuite/gcc.c-torture/compile/920820-1.c ! 2009298978b ./gcc/testsuite/gcc.c-torture/compile/920821-1.c ! 153303695b ./gcc/testsuite/gcc.c-torture/compile/920821-2.c ! 1035421587b ./gcc/testsuite/gcc.c-torture/compile/920825-1.c ! 1883204896b ./gcc/testsuite/gcc.c-torture/compile/920825-2.c ! 378919939b ./gcc/testsuite/gcc.c-torture/compile/920826-1.c ! 324445241b ./gcc/testsuite/gcc.c-torture/compile/920828-1.c ! 2512376601b ./gcc/testsuite/gcc.c-torture/compile/920829-1.c ! 1175894768b ./gcc/testsuite/gcc.c-torture/compile/920831-1.c ! 3615669663b ./gcc/testsuite/gcc.c-torture/compile/920902-1.c ! 3213642392b ./gcc/testsuite/gcc.c-torture/compile/920909-1.c ! 923773306b ./gcc/testsuite/gcc.c-torture/compile/920917-1.c ! 313805874b ./gcc/testsuite/gcc.c-torture/compile/920928-1.c ! 3576009210b ./gcc/testsuite/gcc.c-torture/compile/920928-2.c ! 2038558878b ./gcc/testsuite/gcc.c-torture/compile/920928-3.c ! 2544344324b ./gcc/testsuite/gcc.c-torture/compile/920928-4.c ! 934086546b ./gcc/testsuite/gcc.c-torture/compile/920928-5.c ! 6106016b ./gcc/testsuite/gcc.c-torture/compile/920928-6.c ! 735506239b ./gcc/testsuite/gcc.c-torture/compile/921004-1.c ! 3888639831b ./gcc/testsuite/gcc.c-torture/compile/921011-1.c ! 3956087084b ./gcc/testsuite/gcc.c-torture/compile/921011-2.c ! 1370935236b ./gcc/testsuite/gcc.c-torture/compile/921012-1.c ! 2304808730b ./gcc/testsuite/gcc.c-torture/compile/921012-2.c ! 3157047871b ./gcc/testsuite/gcc.c-torture/compile/921013-1.c ! 3740334758b ./gcc/testsuite/gcc.c-torture/compile/921019-1.c ! 2811091388b ./gcc/testsuite/gcc.c-torture/compile/921021-1.c ! 3551171868b ./gcc/testsuite/gcc.c-torture/compile/921024-1.c ! 3924542394b ./gcc/testsuite/gcc.c-torture/compile/921026-1.c ! 1165569278b ./gcc/testsuite/gcc.c-torture/compile/921103-1.c ! 1243246144b ./gcc/testsuite/gcc.c-torture/compile/921109-1.c ! 2203220429b ./gcc/testsuite/gcc.c-torture/compile/921111-1.c ! 1990624597b ./gcc/testsuite/gcc.c-torture/compile/921116-2.c ! 517704894b ./gcc/testsuite/gcc.c-torture/compile/921118-1.c ! 3811420781b ./gcc/testsuite/gcc.c-torture/compile/921126-1.c ! 3727547715b ./gcc/testsuite/gcc.c-torture/compile/921202-1.c ! 568945264b ./gcc/testsuite/gcc.c-torture/compile/921202-2.c ! 2130176572b ./gcc/testsuite/gcc.c-torture/compile/921203-1.c ! 492266852b ./gcc/testsuite/gcc.c-torture/compile/921203-2.c ! 855574805b ./gcc/testsuite/gcc.c-torture/compile/921206-1.c ! 2014683974b ./gcc/testsuite/gcc.c-torture/compile/921227-1.c ! 96957459b ./gcc/testsuite/gcc.c-torture/compile/930109-1.c ! 1189423329b ./gcc/testsuite/gcc.c-torture/compile/930109-2.c ! 1543922161b ./gcc/testsuite/gcc.c-torture/compile/930111-1.c ! 1357888911b ./gcc/testsuite/gcc.c-torture/compile/930117-1.c ! 2068061905b ./gcc/testsuite/gcc.c-torture/compile/930118-1.c ! 2900924058b ./gcc/testsuite/gcc.c-torture/compile/930120-1.c ! 4121817111b ./gcc/testsuite/gcc.c-torture/compile/930126-1.c ! 1532460815b ./gcc/testsuite/gcc.c-torture/compile/930210-1.c ! 3625302497b ./gcc/testsuite/gcc.c-torture/compile/930217-1.c ! 3938239975b ./gcc/testsuite/gcc.c-torture/compile/930222-1.c ! 1557388855b ./gcc/testsuite/gcc.c-torture/compile/930325-1.c ! 3378061921b ./gcc/testsuite/gcc.c-torture/compile/930326-1.c ! 2931382100b ./gcc/testsuite/gcc.c-torture/compile/930411-1.c ! 3578370973b ./gcc/testsuite/gcc.c-torture/compile/930421-1.c ! 3734830625b ./gcc/testsuite/gcc.c-torture/compile/930427-2.c ! 3885379756b ./gcc/testsuite/gcc.c-torture/compile/930503-1.c ! 959725141b ./gcc/testsuite/gcc.c-torture/compile/930503-2.c ! 140786434b ./gcc/testsuite/gcc.c-torture/compile/930506-1.c ! 3305652641b ./gcc/testsuite/gcc.c-torture/compile/930506-2.c ! 1442644232b ./gcc/testsuite/gcc.c-torture/compile/930510-1.c ! 3993332569b ./gcc/testsuite/gcc.c-torture/compile/930513-1.c ! 2006581046b ./gcc/testsuite/gcc.c-torture/compile/930513-2.c ! 2698332239b ./gcc/testsuite/gcc.c-torture/compile/930513-3.c ! 90110464b ./gcc/testsuite/gcc.c-torture/compile/930523-1.c ! 2548234910b ./gcc/testsuite/gcc.c-torture/compile/930525-1.c ! 422873186b ./gcc/testsuite/gcc.c-torture/compile/930527-1.c ! 784172570b ./gcc/testsuite/gcc.c-torture/compile/930529-1.c ! 3569132715b ./gcc/testsuite/gcc.c-torture/compile/930530-1.c ! 3200160962b ./gcc/testsuite/gcc.c-torture/compile/930602-1.c ! 3142735794b ./gcc/testsuite/gcc.c-torture/compile/930603-1.c ! 1973176638b ./gcc/testsuite/gcc.c-torture/compile/930607-1.c ! 208901999b ./gcc/testsuite/gcc.c-torture/compile/930611-1.c ! 3976001091b ./gcc/testsuite/gcc.c-torture/compile/930618-1.c ! 583248042b ./gcc/testsuite/gcc.c-torture/compile/930621-1.c ! 3751666180b ./gcc/testsuite/gcc.c-torture/compile/930623-1.c ! 3714994986b ./gcc/testsuite/gcc.c-torture/compile/930702-1.c ! 3138367793b ./gcc/testsuite/gcc.c-torture/compile/930926-1.c ! 126934282b ./gcc/testsuite/gcc.c-torture/compile/930927-1.c ! 2046421038b ./gcc/testsuite/gcc.c-torture/compile/931003-1.c ! 2795307593b ./gcc/testsuite/gcc.c-torture/compile/931004-1.c ! 2248992767b ./gcc/testsuite/gcc.c-torture/compile/931013-1.c ! 554284027b ./gcc/testsuite/gcc.c-torture/compile/931013-2.c ! 1170847752b ./gcc/testsuite/gcc.c-torture/compile/931013-3.c ! 752631056b ./gcc/testsuite/gcc.c-torture/compile/931018-1.c ! 4120231716b ./gcc/testsuite/gcc.c-torture/compile/931031-1.c ! 2466554678b ./gcc/testsuite/gcc.c-torture/compile/931102-1.c ! 4193170992b ./gcc/testsuite/gcc.c-torture/compile/931102-2.c ! 3312404691b ./gcc/testsuite/gcc.c-torture/compile/931203-1.c ! 2144495581b ./gcc/testsuite/gcc.c-torture/compile/940611-1.c ! 2217967256b ./gcc/testsuite/gcc.c-torture/compile/940712-1.c ! 43398345b ./gcc/testsuite/gcc.c-torture/compile/940718-1.c ! 2813422857b ./gcc/testsuite/gcc.c-torture/compile/941014-1.c ! 714535983b ./gcc/testsuite/gcc.c-torture/compile/941014-2.c ! 236968493b ./gcc/testsuite/gcc.c-torture/compile/941014-3.c ! 772624016b ./gcc/testsuite/gcc.c-torture/compile/941014-4.c ! 2255123649b ./gcc/testsuite/gcc.c-torture/compile/941019-1.c ! 3482340577b ./gcc/testsuite/gcc.c-torture/compile/941111-1.c ! 4138121525b ./gcc/testsuite/gcc.c-torture/compile/941113-1.c ! 938329066b ./gcc/testsuite/gcc.c-torture/compile/950122-1.c ! 4155644724b ./gcc/testsuite/gcc.c-torture/compile/950124-1.c ! 3810294661b ./gcc/testsuite/gcc.c-torture/compile/950221-1.c ! 3460610209b ./gcc/testsuite/gcc.c-torture/compile/950329-1.c ! 3474584992b ./gcc/testsuite/gcc.c-torture/compile/950512-1.c ! 3344132126b ./gcc/testsuite/gcc.c-torture/compile/950530-1.c ! 1876592424b ./gcc/testsuite/gcc.c-torture/compile/950607-1.c ! 1023117358b ./gcc/testsuite/gcc.c-torture/compile/950610-1.c ! 2634556580b ./gcc/testsuite/gcc.c-torture/compile/950612-1.c ! 1196693335b ./gcc/testsuite/gcc.c-torture/compile/950613-1.c ! 447206228b ./gcc/testsuite/gcc.c-torture/compile/950618-1.c ! 267255638b ./gcc/testsuite/gcc.c-torture/compile/950719-1.c ! 3590503950b ./gcc/testsuite/gcc.c-torture/compile/950729-1.c ! 3836055170b ./gcc/testsuite/gcc.c-torture/compile/950816-1.c ! 2188937099b ./gcc/testsuite/gcc.c-torture/compile/950816-2.c ! 2634731147b ./gcc/testsuite/gcc.c-torture/compile/950816-3.c ! 2650686602b ./gcc/testsuite/gcc.c-torture/compile/950910-1.c ! 2979160187b ./gcc/testsuite/gcc.c-torture/compile/950919-1.c ! 3635621359b ./gcc/testsuite/gcc.c-torture/compile/950921-1.c ! 3500911374b ./gcc/testsuite/gcc.c-torture/compile/950922-1.c ! 2220749535b ./gcc/testsuite/gcc.c-torture/compile/951004-1.c ! 1578339532b ./gcc/testsuite/gcc.c-torture/compile/951106-1.c ! 459531698b ./gcc/testsuite/gcc.c-torture/compile/951116-1.c ! 2236702069b ./gcc/testsuite/gcc.c-torture/compile/951128-1.c ! 559124320b ./gcc/testsuite/gcc.c-torture/compile/951220-1.c ! 2931610069b ./gcc/testsuite/gcc.c-torture/compile/951222-1.c ! 834462352b ./gcc/testsuite/gcc.c-torture/compile/960106-1.c ! 2810957446b ./gcc/testsuite/gcc.c-torture/compile/960130-1.c ! 3942840130b ./gcc/testsuite/gcc.c-torture/compile/960201-1.c ! 1531419420b ./gcc/testsuite/gcc.c-torture/compile/960218-1.c ! 1748987127b ./gcc/testsuite/gcc.c-torture/compile/960220-1.c ! 4272797008b ./gcc/testsuite/gcc.c-torture/compile/960221-1.c ! 2932166589b ./gcc/testsuite/gcc.c-torture/compile/960319-1.c ! 1856173622b ./gcc/testsuite/gcc.c-torture/compile/960514-1.c ! 3435740171b ./gcc/testsuite/gcc.c-torture/compile/960704-1.c ! 2939040127b ./gcc/testsuite/gcc.c-torture/compile/960829-1.c ! 497475088b ./gcc/testsuite/gcc.c-torture/compile/961004-1.c ! 1946932829b ./gcc/testsuite/gcc.c-torture/compile/961010-1.c ! 304816181b ./gcc/testsuite/gcc.c-torture/compile/961019-1.c ! 2048507537b ./gcc/testsuite/gcc.c-torture/compile/961031-1.c ! 3079865887b ./gcc/testsuite/gcc.c-torture/compile/961126-1.c ! 1672232168b ./gcc/testsuite/gcc.c-torture/compile/961203-1.c ! 601500610b ./gcc/testsuite/gcc.c-torture/compile/961203-1.x ! 3759439975b ./gcc/testsuite/gcc.c-torture/compile/970206-1.c ! 1182708149b ./gcc/testsuite/gcc.c-torture/compile/970214-1.c ! 3593522245b ./gcc/testsuite/gcc.c-torture/compile/980329-1.c ! 3672497829b ./gcc/testsuite/gcc.c-torture/compile/980408-1.c ! 2062728359b ./gcc/testsuite/gcc.c-torture/compile/980504-1.c ! 4232017618b ./gcc/testsuite/gcc.c-torture/compile/980506-1.c ! 2725121828b ./gcc/testsuite/gcc.c-torture/compile/980506-1.x ! 32528983b ./gcc/testsuite/gcc.c-torture/compile/980506-2.c ! 4270541716b ./gcc/testsuite/gcc.c-torture/compile/980511-1.c ! 3713274322b ./gcc/testsuite/gcc.c-torture/compile/980701-1.c ! 777674549b ./gcc/testsuite/gcc.c-torture/compile/980706-1.c ! 610537079b ./gcc/testsuite/gcc.c-torture/compile/980726-1.c ! 3564634914b ./gcc/testsuite/gcc.c-torture/compile/980729-1.c ! 1437208592b ./gcc/testsuite/gcc.c-torture/compile/980816-1.c ! 4262061714b ./gcc/testsuite/gcc.c-torture/compile/980821-1.c ! 411994094b ./gcc/testsuite/gcc.c-torture/compile/980825-1.c ! 84987168b ./gcc/testsuite/gcc.c-torture/compile/981001-1.c ! 3572428069b ./gcc/testsuite/gcc.c-torture/compile/981001-2.c ! 668832071b ./gcc/testsuite/gcc.c-torture/compile/981001-3.c ! 2581029790b ./gcc/testsuite/gcc.c-torture/compile/981001-4.c ! 2455813842b ./gcc/testsuite/gcc.c-torture/compile/981006-1.c ! 4074276501b ./gcc/testsuite/gcc.c-torture/compile/981006-1.x ! 436023456b ./gcc/testsuite/gcc.c-torture/compile/981007-1.c ! 3644509388b ./gcc/testsuite/gcc.c-torture/compile/981022-1.c ! 2402428546b ./gcc/testsuite/gcc.c-torture/compile/981022-1.x ! 2312981402b ./gcc/testsuite/gcc.c-torture/compile/981107-1.c ! 1534948383b ./gcc/testsuite/gcc.c-torture/compile/981223-1.c ! 2200568070b ./gcc/testsuite/gcc.c-torture/compile/981223-1.x ! 4068323857b ./gcc/testsuite/gcc.c-torture/compile/990107-1.c ! 2146948130b ./gcc/testsuite/gcc.c-torture/compile/990117-1.c ! 569996007b ./gcc/testsuite/gcc.c-torture/compile/990203-1.c ! 415305492b ./gcc/testsuite/gcc.c-torture/compile/990517-1.c ! 3394640266b ./gcc/testsuite/gcc.c-torture/compile/990519-1.c ! 2791783349b ./gcc/testsuite/gcc.c-torture/compile/990523-1.c ! 3000844764b ./gcc/testsuite/gcc.c-torture/compile/990527-1.c ! 582106274b ./gcc/testsuite/gcc.c-torture/compile/990617-1.c ! 2322013805b ./gcc/testsuite/gcc.c-torture/compile/990617-1.x ! 492504629b ./gcc/testsuite/gcc.c-torture/compile/990625-1.c ! 884965957b ./gcc/testsuite/gcc.c-torture/compile/990625-2.c ! 4084131388b ./gcc/testsuite/gcc.c-torture/compile/990801-1.c ! 2266581816b ./gcc/testsuite/gcc.c-torture/compile/990801-2.c ! 3317513113b ./gcc/testsuite/gcc.c-torture/compile/990829-1.c ! 3956045070b ./gcc/testsuite/gcc.c-torture/compile/990913-1.c ! 3319682501b ./gcc/testsuite/gcc.c-torture/compile/990928-1.c ! 3933777529b ./gcc/testsuite/gcc.c-torture/compile/991008-1.c ! 2673675627b ./gcc/testsuite/gcc.c-torture/compile/991026-1.c ! 1674528994b ./gcc/testsuite/gcc.c-torture/compile/991026-2.c ! 4044514395b ./gcc/testsuite/gcc.c-torture/compile/991127-1.c ! 4090550720b ./gcc/testsuite/gcc.c-torture/compile/991202-1.c ! 2790904959b ./gcc/testsuite/gcc.c-torture/compile/991208-1.c ! 3320607847b ./gcc/testsuite/gcc.c-torture/compile/991213-1.c ! 337781771b ./gcc/testsuite/gcc.c-torture/compile/991213-2.c ! 2183919411b ./gcc/testsuite/gcc.c-torture/compile/991213-3.c ! 2401949194b ./gcc/testsuite/gcc.c-torture/compile/991214-1.c ! 490622457b ./gcc/testsuite/gcc.c-torture/compile/991214-2.c ! 4103871327b ./gcc/testsuite/gcc.c-torture/compile/991229-1.c ! 3992734927b ./gcc/testsuite/gcc.c-torture/compile/991229-2.c ! 4256185088b ./gcc/testsuite/gcc.c-torture/compile/991229-3.c ! 1572386559b ./gcc/testsuite/gcc.c-torture/compile/calls.c ! 2432910359b ./gcc/testsuite/gcc.c-torture/compile/cmpdi-1.c ! 614750703b ./gcc/testsuite/gcc.c-torture/compile/combine-hang.c ! 1983287936b ./gcc/testsuite/gcc.c-torture/compile/compile.exp ! 1794942657b ./gcc/testsuite/gcc.c-torture/compile/cpp-1.c ! 970559481b ./gcc/testsuite/gcc.c-torture/compile/cpp-2.c ! 1931627759b ./gcc/testsuite/gcc.c-torture/compile/dll.c ! 3830564423b ./gcc/testsuite/gcc.c-torture/compile/dll.x ! 3452765233b ./gcc/testsuite/gcc.c-torture/compile/funcptr-1.c ! 1935315878b ./gcc/testsuite/gcc.c-torture/compile/goto-1.c ! 1601988128b ./gcc/testsuite/gcc.c-torture/compile/iftrap-1.c ! 335811326b ./gcc/testsuite/gcc.c-torture/compile/iftrap-2.c ! 4225667120b ./gcc/testsuite/gcc.c-torture/compile/init-1.c ! 2861967846b ./gcc/testsuite/gcc.c-torture/compile/init-2.c ! 2669634792b ./gcc/testsuite/gcc.c-torture/compile/init-3.c ! 4126878501b ./gcc/testsuite/gcc.c-torture/compile/labels-1.c ! 2067585207b ./gcc/testsuite/gcc.c-torture/compile/labels-2.c ! 3607951474b ./gcc/testsuite/gcc.c-torture/compile/labels-3.c ! 709334018b ./gcc/testsuite/gcc.c-torture/compile/labels-3.x ! 1059776974b ./gcc/testsuite/gcc.c-torture/compile/mipscop-1.c ! 935994442b ./gcc/testsuite/gcc.c-torture/compile/mipscop-1.x ! 679674485b ./gcc/testsuite/gcc.c-torture/compile/mipscop-2.c ! 935994442b ./gcc/testsuite/gcc.c-torture/compile/mipscop-2.x ! 1448278998b ./gcc/testsuite/gcc.c-torture/compile/mipscop-3.c ! 935994442b ./gcc/testsuite/gcc.c-torture/compile/mipscop-3.x ! 1045891263b ./gcc/testsuite/gcc.c-torture/compile/mipscop-4.c ! 935994442b ./gcc/testsuite/gcc.c-torture/compile/mipscop-4.x ! 1060389673b ./gcc/testsuite/gcc.c-torture/compile/packed-1.c ! 3351120683b ./gcc/testsuite/gcc.c-torture/compile/simd-1.c ! 3894704862b ./gcc/testsuite/gcc.c-torture/compile/simd-2.c ! 1096508861b ./gcc/testsuite/gcc.c-torture/compile/simd-3.c ! 3477152513b ./gcc/testsuite/gcc.c-torture/compile/simd-4.c ! 2652812557b ./gcc/testsuite/gcc.c-torture/compile/simd-5.c ! 4093453999b ./gcc/testsuite/gcc.c-torture/compile/simd-5.x ! 69389766b ./gcc/testsuite/gcc.c-torture/compile/structs.c ! 2677779184b ./gcc/testsuite/gcc.c-torture/compile/trunctfdf.c ! 3723113555b ./gcc/testsuite/gcc.c-torture/compile/widechar-1.c ! 2985433108b ./gcc/testsuite/gcc.c-torture/compile/zero-strct-1.c ! 1339023163b ./gcc/testsuite/gcc.c-torture/compile/zero-strct-2.c ! 1530761060b ./gcc/testsuite/gcc.c-torture/execute/20000112-1.c ! 2481066019b ./gcc/testsuite/gcc.c-torture/execute/20000113-1.c ! 1162771092b ./gcc/testsuite/gcc.c-torture/execute/20000121-1.c ! 2528273823b ./gcc/testsuite/gcc.c-torture/execute/20000205-1.c ! 763627167b ./gcc/testsuite/gcc.c-torture/execute/20000217-1.c ! 778222354b ./gcc/testsuite/gcc.c-torture/execute/20000223-1.c ! 2810936145b ./gcc/testsuite/gcc.c-torture/execute/20000224-1.c ! 2859303587b ./gcc/testsuite/gcc.c-torture/execute/20000225-1.c ! 2200813341b ./gcc/testsuite/gcc.c-torture/execute/20000227-1.c ! 1085530082b ./gcc/testsuite/gcc.c-torture/execute/20000313-1.c ! 1558819196b ./gcc/testsuite/gcc.c-torture/execute/20000314-1.c ! 1363719296b ./gcc/testsuite/gcc.c-torture/execute/20000314-2.c ! 1833012317b ./gcc/testsuite/gcc.c-torture/execute/20000314-3.c ! 3834437988b ./gcc/testsuite/gcc.c-torture/execute/20000402-1.c ! 4060238122b ./gcc/testsuite/gcc.c-torture/execute/20000403-1.c ! 3672378029b ./gcc/testsuite/gcc.c-torture/execute/20000412-1.c ! 2857396630b ./gcc/testsuite/gcc.c-torture/execute/20000412-2.c ! 3640032771b ./gcc/testsuite/gcc.c-torture/execute/20000412-3.c ! 4233239850b ./gcc/testsuite/gcc.c-torture/execute/20000412-4.c ! 3642307617b ./gcc/testsuite/gcc.c-torture/execute/20000412-5.c ! 122352684b ./gcc/testsuite/gcc.c-torture/execute/20000412-6.c ! 939777600b ./gcc/testsuite/gcc.c-torture/execute/20000419-1.c ! 1445008654b ./gcc/testsuite/gcc.c-torture/execute/20000422-1.c ! 677800698b ./gcc/testsuite/gcc.c-torture/execute/20000503-1.c ! 531516808b ./gcc/testsuite/gcc.c-torture/execute/20000511-1.c ! 301599840b ./gcc/testsuite/gcc.c-torture/execute/20000519-1.c ! 2363078014b ./gcc/testsuite/gcc.c-torture/execute/20000519-2.c ! 2387696776b ./gcc/testsuite/gcc.c-torture/execute/20000523-1.c ! 185622639b ./gcc/testsuite/gcc.c-torture/execute/20000528-1.c ! 3522437520b ./gcc/testsuite/gcc.c-torture/execute/20000603-1.c ! 1679879990b ./gcc/testsuite/gcc.c-torture/execute/20000605-1.c ! 2664922764b ./gcc/testsuite/gcc.c-torture/execute/20000605-2.c ! 3650927220b ./gcc/testsuite/gcc.c-torture/execute/20000605-3.c ! 3450155788b ./gcc/testsuite/gcc.c-torture/execute/20000622-1.c ! 1183204743b ./gcc/testsuite/gcc.c-torture/execute/20000703-1.c ! 2031552411b ./gcc/testsuite/gcc.c-torture/execute/20000706-1.c ! 425477806b ./gcc/testsuite/gcc.c-torture/execute/20000706-2.c ! 690409016b ./gcc/testsuite/gcc.c-torture/execute/20000706-3.c ! 388840900b ./gcc/testsuite/gcc.c-torture/execute/20000706-4.c ! 3881852138b ./gcc/testsuite/gcc.c-torture/execute/20000706-5.c ! 4202259059b ./gcc/testsuite/gcc.c-torture/execute/20000707-1.c ! 444353142b ./gcc/testsuite/gcc.c-torture/execute/20000715-1.c ! 1455669777b ./gcc/testsuite/gcc.c-torture/execute/20000715-2.c ! 1355649270b ./gcc/testsuite/gcc.c-torture/execute/20000717-1.c ! 2506273608b ./gcc/testsuite/gcc.c-torture/execute/20000717-2.c ! 3729674446b ./gcc/testsuite/gcc.c-torture/execute/20000717-3.c ! 843831990b ./gcc/testsuite/gcc.c-torture/execute/20000717-4.c ! 3868604235b ./gcc/testsuite/gcc.c-torture/execute/20000717-5.c ! 3718377161b ./gcc/testsuite/gcc.c-torture/execute/20000722-1.c ! 1809610528b ./gcc/testsuite/gcc.c-torture/execute/20000726-1.c ! 3447416803b ./gcc/testsuite/gcc.c-torture/execute/20000731-1.c ! 1979644625b ./gcc/testsuite/gcc.c-torture/execute/20000731-2.c ! 622038460b ./gcc/testsuite/gcc.c-torture/execute/20000801-1.c ! 379050989b ./gcc/testsuite/gcc.c-torture/execute/20000801-2.c ! 1541984007b ./gcc/testsuite/gcc.c-torture/execute/20000801-3.c ! 73769468b ./gcc/testsuite/gcc.c-torture/execute/20000801-4.c ! 3273221977b ./gcc/testsuite/gcc.c-torture/execute/20000808-1.c ! 3715226001b ./gcc/testsuite/gcc.c-torture/execute/20000815-1.c ! 2910084298b ./gcc/testsuite/gcc.c-torture/execute/20000818-1.c ! 3982907773b ./gcc/testsuite/gcc.c-torture/execute/20000819-1.c ! 806186932b ./gcc/testsuite/gcc.c-torture/execute/20000822-1.c ! 1842039169b ./gcc/testsuite/gcc.c-torture/execute/20000910-1.c ! 187331803b ./gcc/testsuite/gcc.c-torture/execute/20000910-2.c ! 2672323622b ./gcc/testsuite/gcc.c-torture/execute/20000914-1.c ! 3900394210b ./gcc/testsuite/gcc.c-torture/execute/20000917-1.c ! 3471632940b ./gcc/testsuite/gcc.c-torture/execute/20001009-1.c ! 1469841059b ./gcc/testsuite/gcc.c-torture/execute/20001009-2.c ! 1399364540b ./gcc/testsuite/gcc.c-torture/execute/20001011-1.c ! 1742992606b ./gcc/testsuite/gcc.c-torture/execute/20001013-1.c ! 4079653839b ./gcc/testsuite/gcc.c-torture/execute/20001017-1.c ! 915214225b ./gcc/testsuite/gcc.c-torture/execute/20001017-2.c ! 411820211b ./gcc/testsuite/gcc.c-torture/execute/20001024-1.c ! 4210982727b ./gcc/testsuite/gcc.c-torture/execute/20001026-1.c ! 2907247602b ./gcc/testsuite/gcc.c-torture/execute/20001027-1.c ! 731083799b ./gcc/testsuite/gcc.c-torture/execute/20001031-1.c ! 123108566b ./gcc/testsuite/gcc.c-torture/execute/20001101.c ! 3554851734b ./gcc/testsuite/gcc.c-torture/execute/20001108-1.c ! 696351685b ./gcc/testsuite/gcc.c-torture/execute/20001111-1.c ! 1813795050b ./gcc/testsuite/gcc.c-torture/execute/20001112-1.c ! 3234051961b ./gcc/testsuite/gcc.c-torture/execute/20001121-1.c ! 2035849840b ./gcc/testsuite/gcc.c-torture/execute/20001124-1.c ! 378727792b ./gcc/testsuite/gcc.c-torture/execute/20001130-1.c ! 1876645280b ./gcc/testsuite/gcc.c-torture/execute/20001130-2.c ! 3253069371b ./gcc/testsuite/gcc.c-torture/execute/20001203-1.c ! 2873524021b ./gcc/testsuite/gcc.c-torture/execute/20001203-2.c ! 315046176b ./gcc/testsuite/gcc.c-torture/execute/20001221-1.c ! 3430334061b ./gcc/testsuite/gcc.c-torture/execute/20001228-1.c ! 4145547631b ./gcc/testsuite/gcc.c-torture/execute/20001229-1.c ! 2867964338b ./gcc/testsuite/gcc.c-torture/execute/20010106-1.c ! 4104575350b ./gcc/testsuite/gcc.c-torture/execute/20010114-1.c ! 4274826155b ./gcc/testsuite/gcc.c-torture/execute/20010116-1.c ! 1853154998b ./gcc/testsuite/gcc.c-torture/execute/20010118-1.c ! 1273676691b ./gcc/testsuite/gcc.c-torture/execute/20010119-1.c ! 367104834b ./gcc/testsuite/gcc.c-torture/execute/20010122-1.c ! 598227125b ./gcc/testsuite/gcc.c-torture/execute/20010122-1.x ! 2126355226b ./gcc/testsuite/gcc.c-torture/execute/20010123-1.c ! 2748204733b ./gcc/testsuite/gcc.c-torture/execute/20010124-1.c ! 962969845b ./gcc/testsuite/gcc.c-torture/execute/20010129-1.c ! 3261363423b ./gcc/testsuite/gcc.c-torture/execute/20010129-1.x ! 3208398809b ./gcc/testsuite/gcc.c-torture/execute/20010206-1.c ! 1778342214b ./gcc/testsuite/gcc.c-torture/execute/20010209-1.c ! 3579334795b ./gcc/testsuite/gcc.c-torture/execute/20010221-1.c ! 2457134781b ./gcc/testsuite/gcc.c-torture/execute/20010222-1.c ! 3606901851b ./gcc/testsuite/gcc.c-torture/execute/20010224-1.c ! 1780176502b ./gcc/testsuite/gcc.c-torture/execute/20010325-1.c ! 111828245b ./gcc/testsuite/gcc.c-torture/execute/20010329-1.c ! 4181677122b ./gcc/testsuite/gcc.c-torture/execute/20010403-1.c ! 1255405665b ./gcc/testsuite/gcc.c-torture/execute/20010409-1.c ! 2948781834b ./gcc/testsuite/gcc.c-torture/execute/20010422-1.c ! 3990119664b ./gcc/testsuite/gcc.c-torture/execute/20010518-1.c ! 3221966760b ./gcc/testsuite/gcc.c-torture/execute/20010518-2.c ! 4150058335b ./gcc/testsuite/gcc.c-torture/execute/20010520-1.c ! 3398306936b ./gcc/testsuite/gcc.c-torture/execute/20010604-1.c ! 1597970944b ./gcc/testsuite/gcc.c-torture/execute/20010605-1.c ! 2151082111b ./gcc/testsuite/gcc.c-torture/execute/20010605-2.c ! 2682131177b ./gcc/testsuite/gcc.c-torture/execute/20010711-1.c ! 873772836b ./gcc/testsuite/gcc.c-torture/execute/20010717-1.c ! 2673367189b ./gcc/testsuite/gcc.c-torture/execute/20010723-1.c ! 3978892519b ./gcc/testsuite/gcc.c-torture/execute/20010724-1.c ! 1723617799b ./gcc/testsuite/gcc.c-torture/execute/20010724-1.x ! 731866148b ./gcc/testsuite/gcc.c-torture/execute/20010904-1.c ! 731377342b ./gcc/testsuite/gcc.c-torture/execute/20010904-2.c ! 2522784842b ./gcc/testsuite/gcc.c-torture/execute/20010910-1.c ! 2397573972b ./gcc/testsuite/gcc.c-torture/execute/20010915-1.c ! 3737091006b ./gcc/testsuite/gcc.c-torture/execute/20010924-1.c ! 260325577b ./gcc/testsuite/gcc.c-torture/execute/20010925-1.c ! 4188355089b ./gcc/testsuite/gcc.c-torture/execute/20011008-3.c ! 2281713299b ./gcc/testsuite/gcc.c-torture/execute/20011019-1.c ! 2655569315b ./gcc/testsuite/gcc.c-torture/execute/20011024-1.c ! 1814584846b ./gcc/testsuite/gcc.c-torture/execute/20011109-1.c ! 1662612200b ./gcc/testsuite/gcc.c-torture/execute/20011109-2.c ! 2550685908b ./gcc/testsuite/gcc.c-torture/execute/20011113-1.c ! 172432599b ./gcc/testsuite/gcc.c-torture/execute/20011114-1.c ! 809814896b ./gcc/testsuite/gcc.c-torture/execute/20011115-1.c ! 4092518b ./gcc/testsuite/gcc.c-torture/execute/20011121-1.c ! 31392419b ./gcc/testsuite/gcc.c-torture/execute/20011126-1.c ! 2732339842b ./gcc/testsuite/gcc.c-torture/execute/20011126-2.c ! 815133002b ./gcc/testsuite/gcc.c-torture/execute/20011128-1.c ! 241656074b ./gcc/testsuite/gcc.c-torture/execute/20011217-1.c ! 2277704872b ./gcc/testsuite/gcc.c-torture/execute/20011219-1.c ! 2006770303b ./gcc/testsuite/gcc.c-torture/execute/20011223-1.c ! 4135985164b ./gcc/testsuite/gcc.c-torture/execute/20020103-1.c ! 2284569670b ./gcc/testsuite/gcc.c-torture/execute/20020107-1.c ! 2382854982b ./gcc/testsuite/gcc.c-torture/execute/20020108-1.c ! 2848042033b ./gcc/testsuite/gcc.c-torture/execute/20020118-1.c ! 2653510244b ./gcc/testsuite/gcc.c-torture/execute/20020127-1.c ! 1739097481b ./gcc/testsuite/gcc.c-torture/execute/20020129-1.c ! 1264770028b ./gcc/testsuite/gcc.c-torture/execute/20020201-1.c ! 502375258b ./gcc/testsuite/gcc.c-torture/execute/20020206-1.c ! 3691690701b ./gcc/testsuite/gcc.c-torture/execute/20020206-2.c ! 4078405558b ./gcc/testsuite/gcc.c-torture/execute/20020213-1.c ! 125431111b ./gcc/testsuite/gcc.c-torture/execute/20020215-1.c ! 1599210871b ./gcc/testsuite/gcc.c-torture/execute/20020216-1.c ! 1360698555b ./gcc/testsuite/gcc.c-torture/execute/20020219-1.c ! 756862614b ./gcc/testsuite/gcc.c-torture/execute/20020225-1.c ! 2250800547b ./gcc/testsuite/gcc.c-torture/execute/20020225-2.c ! 53329258b ./gcc/testsuite/gcc.c-torture/execute/20020226-1.c ! 127051635b ./gcc/testsuite/gcc.c-torture/execute/20020227-1.c ! 222551441b ./gcc/testsuite/gcc.c-torture/execute/20020227-1.x ! 1982547595b ./gcc/testsuite/gcc.c-torture/execute/20020307-1.c ! 2236973257b ./gcc/testsuite/gcc.c-torture/execute/20020314-1.c ! 3091941732b ./gcc/testsuite/gcc.c-torture/execute/20020320-1.c ! 3564527352b ./gcc/testsuite/gcc.c-torture/execute/20020321-1.c ! 353921064b ./gcc/testsuite/gcc.c-torture/execute/20020328-1.c ! 577542360b ./gcc/testsuite/gcc.c-torture/execute/20020402-1.c ! 3290123747b ./gcc/testsuite/gcc.c-torture/execute/20020402-2.c ! 2122778375b ./gcc/testsuite/gcc.c-torture/execute/20020402-3.c ! 2806949247b ./gcc/testsuite/gcc.c-torture/execute/20020404-1.c ! 658725271b ./gcc/testsuite/gcc.c-torture/execute/20020406-1.c ! 1900879256b ./gcc/testsuite/gcc.c-torture/execute/20020411-1.c ! 1497258578b ./gcc/testsuite/gcc.c-torture/execute/20020412-1.c ! 2788774617b ./gcc/testsuite/gcc.c-torture/execute/20020413-1.c ! 2439380096b ./gcc/testsuite/gcc.c-torture/execute/20020418-1.c ! 49470659b ./gcc/testsuite/gcc.c-torture/execute/20020423-1.c ! 484359727b ./gcc/testsuite/gcc.c-torture/execute/20020503-1.c ! 659437566b ./gcc/testsuite/gcc.c-torture/execute/20020506-1.c ! 3085688005b ./gcc/testsuite/gcc.c-torture/execute/20020508-1.c ! 2813884435b ./gcc/testsuite/gcc.c-torture/execute/20020508-2.c ! 846728332b ./gcc/testsuite/gcc.c-torture/execute/20020508-3.c ! 3411191897b ./gcc/testsuite/gcc.c-torture/execute/20020510-1.c ! 1286592631b ./gcc/testsuite/gcc.c-torture/execute/20020529-1.c ! 2563139669b ./gcc/testsuite/gcc.c-torture/execute/20020611-1.c ! 2588225457b ./gcc/testsuite/gcc.c-torture/execute/20020614-1.c ! 2304661446b ./gcc/testsuite/gcc.c-torture/execute/20020615-1.c ! 1625459055b ./gcc/testsuite/gcc.c-torture/execute/20020619-1.c ! 2876236122b ./gcc/testsuite/gcc.c-torture/execute/20020716-1.c ! 2090219848b ./gcc/testsuite/gcc.c-torture/execute/20020720-1.c ! 1392513436b ./gcc/testsuite/gcc.c-torture/execute/20020720-1.x ! 1859138834b ./gcc/testsuite/gcc.c-torture/execute/20020805-1.c ! 492121497b ./gcc/testsuite/gcc.c-torture/execute/20020904-1.c ! 572636623b ./gcc/testsuite/gcc.c-torture/execute/20020911-1.c ! 1548331694b ./gcc/testsuite/gcc.c-torture/execute/20020916-1.c ! 1916205927b ./gcc/testsuite/gcc.c-torture/execute/20021010-1.c ! 20734874b ./gcc/testsuite/gcc.c-torture/execute/20021010-2.c ! 3494808673b ./gcc/testsuite/gcc.c-torture/execute/20021011-1.c ! 1275043517b ./gcc/testsuite/gcc.c-torture/execute/20021015-1.c ! 2849369814b ./gcc/testsuite/gcc.c-torture/execute/20021024-1.c ! 3361882342b ./gcc/testsuite/gcc.c-torture/execute/20021111-1.c ! 2966353244b ./gcc/testsuite/gcc.c-torture/execute/20021118-1.c ! 582186764b ./gcc/testsuite/gcc.c-torture/execute/20021118-2.c ! 3834877290b ./gcc/testsuite/gcc.c-torture/execute/20021118-3.c ! 2087431710b ./gcc/testsuite/gcc.c-torture/execute/20021119-1.c ! 2543457728b ./gcc/testsuite/gcc.c-torture/execute/20021120-1.c ! 2916213179b ./gcc/testsuite/gcc.c-torture/execute/20021120-2.c ! 1499334675b ./gcc/testsuite/gcc.c-torture/execute/20021120-3.c ! 3171635785b ./gcc/testsuite/gcc.c-torture/execute/20021127-1.c ! 1067752545b ./gcc/testsuite/gcc.c-torture/execute/20021127-1.x ! 989736458b ./gcc/testsuite/gcc.c-torture/execute/20021204-1.c ! 624734562b ./gcc/testsuite/gcc.c-torture/execute/20021219-1.c ! 2820909676b ./gcc/testsuite/gcc.c-torture/execute/20030109-1.c ! 302087111b ./gcc/testsuite/gcc.c-torture/execute/20030120-1.c ! 3272014655b ./gcc/testsuite/gcc.c-torture/execute/20030120-2.c ! 689965669b ./gcc/testsuite/gcc.c-torture/execute/20030218-1.c ! 855486154b ./gcc/testsuite/gcc.c-torture/execute/20030221-1.c ! 821090783b ./gcc/testsuite/gcc.c-torture/execute/20030224-2.c ! 4076291177b ./gcc/testsuite/gcc.c-torture/execute/20030307-1.c ! 2371585447b ./gcc/testsuite/gcc.c-torture/execute/20030313-1.c ! 2637074483b ./gcc/testsuite/gcc.c-torture/execute/20030316-1.c ! 4701210b ./gcc/testsuite/gcc.c-torture/execute/20030613-1.c ! 1633117452b ./gcc/testsuite/gcc.c-torture/execute/20030714-1.c ! 966093144b ./gcc/testsuite/gcc.c-torture/execute/20030715-1.c ! 479976333b ./gcc/testsuite/gcc.c-torture/execute/20030907-1.c ! 37158978b ./gcc/testsuite/gcc.c-torture/execute/900409-1.c ! 1241514475b ./gcc/testsuite/gcc.c-torture/execute/920202-1.c ! 651529975b ./gcc/testsuite/gcc.c-torture/execute/920302-1.c ! 2196801137b ./gcc/testsuite/gcc.c-torture/execute/920409-1.c ! 1816933206b ./gcc/testsuite/gcc.c-torture/execute/920410-1.c ! 1957456510b ./gcc/testsuite/gcc.c-torture/execute/920411-1.c ! 1749111501b ./gcc/testsuite/gcc.c-torture/execute/920415-1.c ! 508706990b ./gcc/testsuite/gcc.c-torture/execute/920428-1.c ! 3878413130b ./gcc/testsuite/gcc.c-torture/execute/920428-2.c ! 4127832878b ./gcc/testsuite/gcc.c-torture/execute/920428-2.x ! 158200597b ./gcc/testsuite/gcc.c-torture/execute/920429-1.c ! 1826863267b ./gcc/testsuite/gcc.c-torture/execute/920501-1.c ! 4177429300b ./gcc/testsuite/gcc.c-torture/execute/920501-2.c ! 1351528020b ./gcc/testsuite/gcc.c-torture/execute/920501-3.c ! 700639089b ./gcc/testsuite/gcc.c-torture/execute/920501-4.c ! 798860387b ./gcc/testsuite/gcc.c-torture/execute/920501-5.c ! 4199344202b ./gcc/testsuite/gcc.c-torture/execute/920501-6.c ! 2006299034b ./gcc/testsuite/gcc.c-torture/execute/920501-7.c ! 4127832878b ./gcc/testsuite/gcc.c-torture/execute/920501-7.x ! 1420615555b ./gcc/testsuite/gcc.c-torture/execute/920501-8.c ! 1273235575b ./gcc/testsuite/gcc.c-torture/execute/920501-8.x ! 2227123057b ./gcc/testsuite/gcc.c-torture/execute/920501-9.c ! 3928484317b ./gcc/testsuite/gcc.c-torture/execute/920506-1.c ! 3897601778b ./gcc/testsuite/gcc.c-torture/execute/920520-1.c ! 4049662034b ./gcc/testsuite/gcc.c-torture/execute/920603-1.c ! 2593769598b ./gcc/testsuite/gcc.c-torture/execute/920604-1.c ! 2294544032b ./gcc/testsuite/gcc.c-torture/execute/920612-1.c ! 102881897b ./gcc/testsuite/gcc.c-torture/execute/920612-2.c ! 484477154b ./gcc/testsuite/gcc.c-torture/execute/920618-1.c ! 937300795b ./gcc/testsuite/gcc.c-torture/execute/920625-1.c ! 3030586241b ./gcc/testsuite/gcc.c-torture/execute/920710-1.c ! 1902096790b ./gcc/testsuite/gcc.c-torture/execute/920710-1.x ! 3876529175b ./gcc/testsuite/gcc.c-torture/execute/920711-1.c ! 818049019b ./gcc/testsuite/gcc.c-torture/execute/920721-1.c ! 3191124720b ./gcc/testsuite/gcc.c-torture/execute/920721-2.c ! 3879255001b ./gcc/testsuite/gcc.c-torture/execute/920721-3.c ! 2852120360b ./gcc/testsuite/gcc.c-torture/execute/920721-4.c ! 792790044b ./gcc/testsuite/gcc.c-torture/execute/920726-1.c ! 2154603996b ./gcc/testsuite/gcc.c-torture/execute/920728-1.c ! 917858221b ./gcc/testsuite/gcc.c-torture/execute/920730-1.c ! 3574659813b ./gcc/testsuite/gcc.c-torture/execute/920731-1.c ! 1308229799b ./gcc/testsuite/gcc.c-torture/execute/920810-1.c ! 950989321b ./gcc/testsuite/gcc.c-torture/execute/920812-1.c ! 4187598456b ./gcc/testsuite/gcc.c-torture/execute/920829-1.c ! 559637020b ./gcc/testsuite/gcc.c-torture/execute/920908-1.c ! 2513627586b ./gcc/testsuite/gcc.c-torture/execute/920908-2.c ! 2499750871b ./gcc/testsuite/gcc.c-torture/execute/920909-1.c ! 714100171b ./gcc/testsuite/gcc.c-torture/execute/920922-1.c ! 2279537940b ./gcc/testsuite/gcc.c-torture/execute/920929-1.c ! 70714742b ./gcc/testsuite/gcc.c-torture/execute/921006-1.c ! 137444921b ./gcc/testsuite/gcc.c-torture/execute/921007-1.c ! 2897219149b ./gcc/testsuite/gcc.c-torture/execute/921013-1.c ! 1296914634b ./gcc/testsuite/gcc.c-torture/execute/921016-1.c ! 1596244093b ./gcc/testsuite/gcc.c-torture/execute/921017-1.c ! 4199584647b ./gcc/testsuite/gcc.c-torture/execute/921019-1.c ! 2431715965b ./gcc/testsuite/gcc.c-torture/execute/921019-2.c ! 3170380362b ./gcc/testsuite/gcc.c-torture/execute/921029-1.c ! 487195362b ./gcc/testsuite/gcc.c-torture/execute/921104-1.c ! 2352124020b ./gcc/testsuite/gcc.c-torture/execute/921110-1.c ! 207021478b ./gcc/testsuite/gcc.c-torture/execute/921112-1.c ! 283175496b ./gcc/testsuite/gcc.c-torture/execute/921113-1.c ! 2879836698b ./gcc/testsuite/gcc.c-torture/execute/921117-1.c ! 201436377b ./gcc/testsuite/gcc.c-torture/execute/921123-1.c ! 4236695419b ./gcc/testsuite/gcc.c-torture/execute/921123-2.c ! 316909011b ./gcc/testsuite/gcc.c-torture/execute/921124-1.c ! 3328444406b ./gcc/testsuite/gcc.c-torture/execute/921202-1.c ! 2280032251b ./gcc/testsuite/gcc.c-torture/execute/921202-2.c ! 1311000952b ./gcc/testsuite/gcc.c-torture/execute/921204-1.c ! 2949408934b ./gcc/testsuite/gcc.c-torture/execute/921207-1.c ! 870865911b ./gcc/testsuite/gcc.c-torture/execute/921208-1.c ! 2032495193b ./gcc/testsuite/gcc.c-torture/execute/921208-2.c ! 283353483b ./gcc/testsuite/gcc.c-torture/execute/921215-1.c ! 130096086b ./gcc/testsuite/gcc.c-torture/execute/921218-1.c ! 2115073235b ./gcc/testsuite/gcc.c-torture/execute/921218-2.c ! 3561999462b ./gcc/testsuite/gcc.c-torture/execute/930106-1.c ! 3160736499b ./gcc/testsuite/gcc.c-torture/execute/930111-1.c ! 4162371994b ./gcc/testsuite/gcc.c-torture/execute/930123-1.c ! 3265874780b ./gcc/testsuite/gcc.c-torture/execute/930126-1.c ! 2299871172b ./gcc/testsuite/gcc.c-torture/execute/930208-1.c ! 3144873997b ./gcc/testsuite/gcc.c-torture/execute/930406-1.c ! 3189774734b ./gcc/testsuite/gcc.c-torture/execute/930408-1.c ! 3400489427b ./gcc/testsuite/gcc.c-torture/execute/930429-1.c ! 2948158283b ./gcc/testsuite/gcc.c-torture/execute/930429-2.c ! 3905354169b ./gcc/testsuite/gcc.c-torture/execute/930513-1.c ! 1273235575b ./gcc/testsuite/gcc.c-torture/execute/930513-1.x ! 2524183853b ./gcc/testsuite/gcc.c-torture/execute/930513-2.c ! 2391753101b ./gcc/testsuite/gcc.c-torture/execute/930518-1.c ! 576031745b ./gcc/testsuite/gcc.c-torture/execute/930526-1.c ! 956415563b ./gcc/testsuite/gcc.c-torture/execute/930527-1.c ! 4026322841b ./gcc/testsuite/gcc.c-torture/execute/930529-1.c ! 2050475769b ./gcc/testsuite/gcc.c-torture/execute/930529-1.x ! 310850888b ./gcc/testsuite/gcc.c-torture/execute/930603-1.c ! 572652809b ./gcc/testsuite/gcc.c-torture/execute/930603-2.c ! 3452170691b ./gcc/testsuite/gcc.c-torture/execute/930603-3.c ! 352498879b ./gcc/testsuite/gcc.c-torture/execute/930608-1.c ! 2318312710b ./gcc/testsuite/gcc.c-torture/execute/930614-1.c ! 307026414b ./gcc/testsuite/gcc.c-torture/execute/930614-2.c ! 380017129b ./gcc/testsuite/gcc.c-torture/execute/930621-1.c ! 852093434b ./gcc/testsuite/gcc.c-torture/execute/930622-1.c ! 1010026580b ./gcc/testsuite/gcc.c-torture/execute/930622-2.c ! 2381515578b ./gcc/testsuite/gcc.c-torture/execute/930628-1.c ! 3968663339b ./gcc/testsuite/gcc.c-torture/execute/930630-1.c ! 1360276333b ./gcc/testsuite/gcc.c-torture/execute/930702-1.c ! 2690450552b ./gcc/testsuite/gcc.c-torture/execute/930713-1.c ! 3621302381b ./gcc/testsuite/gcc.c-torture/execute/930718-1.c ! 1853260970b ./gcc/testsuite/gcc.c-torture/execute/930719-1.c ! 2257054643b ./gcc/testsuite/gcc.c-torture/execute/930725-1.c ! 1877434408b ./gcc/testsuite/gcc.c-torture/execute/930818-1.c ! 1262159860b ./gcc/testsuite/gcc.c-torture/execute/930916-1.c ! 2667793229b ./gcc/testsuite/gcc.c-torture/execute/930921-1.c ! 2351038398b ./gcc/testsuite/gcc.c-torture/execute/930929-1.c ! 2863421839b ./gcc/testsuite/gcc.c-torture/execute/930930-1.c ! 557816592b ./gcc/testsuite/gcc.c-torture/execute/930930-2.c ! 2101614510b ./gcc/testsuite/gcc.c-torture/execute/931002-1.c ! 1700898376b ./gcc/testsuite/gcc.c-torture/execute/931004-10.c ! 962417771b ./gcc/testsuite/gcc.c-torture/execute/931004-11.c ! 2700865821b ./gcc/testsuite/gcc.c-torture/execute/931004-12.c ! 3436458492b ./gcc/testsuite/gcc.c-torture/execute/931004-13.c ! 4127270352b ./gcc/testsuite/gcc.c-torture/execute/931004-14.c ! 2742393702b ./gcc/testsuite/gcc.c-torture/execute/931004-1.c ! 346996272b ./gcc/testsuite/gcc.c-torture/execute/931004-2.c ! 1206221721b ./gcc/testsuite/gcc.c-torture/execute/931004-3.c ! 3166093368b ./gcc/testsuite/gcc.c-torture/execute/931004-4.c ! 1452916171b ./gcc/testsuite/gcc.c-torture/execute/931004-5.c ! 2022610295b ./gcc/testsuite/gcc.c-torture/execute/931004-6.c ! 2036744892b ./gcc/testsuite/gcc.c-torture/execute/931004-7.c ! 1586770276b ./gcc/testsuite/gcc.c-torture/execute/931004-8.c ! 3369996669b ./gcc/testsuite/gcc.c-torture/execute/931004-9.c ! 3731237663b ./gcc/testsuite/gcc.c-torture/execute/931005-1.c ! 3432311031b ./gcc/testsuite/gcc.c-torture/execute/931009-1.c ! 1834388885b ./gcc/testsuite/gcc.c-torture/execute/931012-1.c ! 2534034619b ./gcc/testsuite/gcc.c-torture/execute/931017-1.c ! 1949677962b ./gcc/testsuite/gcc.c-torture/execute/931018-1.c ! 3825241545b ./gcc/testsuite/gcc.c-torture/execute/931031-1.c ! 1877484625b ./gcc/testsuite/gcc.c-torture/execute/931102-1.c ! 3927915289b ./gcc/testsuite/gcc.c-torture/execute/931102-2.c ! 480430370b ./gcc/testsuite/gcc.c-torture/execute/931110-1.c ! 3822785940b ./gcc/testsuite/gcc.c-torture/execute/931110-2.c ! 967340546b ./gcc/testsuite/gcc.c-torture/execute/931208-1.c ! 2682740818b ./gcc/testsuite/gcc.c-torture/execute/931228-1.c ! 2017170797b ./gcc/testsuite/gcc.c-torture/execute/940115-1.c ! 82400069b ./gcc/testsuite/gcc.c-torture/execute/940122-1.c ! 4235476365b ./gcc/testsuite/gcc.c-torture/execute/941014-1.c ! 2525145377b ./gcc/testsuite/gcc.c-torture/execute/941014-1.x ! 1977507646b ./gcc/testsuite/gcc.c-torture/execute/941014-2.c ! 310736147b ./gcc/testsuite/gcc.c-torture/execute/941015-1.c ! 1318043175b ./gcc/testsuite/gcc.c-torture/execute/941021-1.c ! 3185365004b ./gcc/testsuite/gcc.c-torture/execute/941025-1.c ! 678677907b ./gcc/testsuite/gcc.c-torture/execute/941031-1.c ! 3905782643b ./gcc/testsuite/gcc.c-torture/execute/941101-1.c ! 1810551831b ./gcc/testsuite/gcc.c-torture/execute/941110-1.c ! 3428057334b ./gcc/testsuite/gcc.c-torture/execute/941202-1.c ! 3908063718b ./gcc/testsuite/gcc.c-torture/execute/950221-1.c ! 1873160895b ./gcc/testsuite/gcc.c-torture/execute/950322-1.c ! 1672610716b ./gcc/testsuite/gcc.c-torture/execute/950426-1.c ! 3465653006b ./gcc/testsuite/gcc.c-torture/execute/950426-2.c ! 3696703975b ./gcc/testsuite/gcc.c-torture/execute/950503-1.c ! 1556250294b ./gcc/testsuite/gcc.c-torture/execute/950511-1.c ! 2857896870b ./gcc/testsuite/gcc.c-torture/execute/950512-1.c ! 114570668b ./gcc/testsuite/gcc.c-torture/execute/950605-1.c ! 2991280268b ./gcc/testsuite/gcc.c-torture/execute/950607-1.c ! 437837801b ./gcc/testsuite/gcc.c-torture/execute/950607-2.c ! 3950265298b ./gcc/testsuite/gcc.c-torture/execute/950612-1.c ! 1778400537b ./gcc/testsuite/gcc.c-torture/execute/950621-1.c ! 2070936302b ./gcc/testsuite/gcc.c-torture/execute/950628-1.c ! 3165536281b ./gcc/testsuite/gcc.c-torture/execute/950704-1.c ! 2486390814b ./gcc/testsuite/gcc.c-torture/execute/950706-1.c ! 1322454782b ./gcc/testsuite/gcc.c-torture/execute/950710-1.c ! 4241980915b ./gcc/testsuite/gcc.c-torture/execute/950714-1.c ! 3308590304b ./gcc/testsuite/gcc.c-torture/execute/950809-1.c ! 4154904713b ./gcc/testsuite/gcc.c-torture/execute/950906-1.c ! 1101166652b ./gcc/testsuite/gcc.c-torture/execute/950915-1.c ! 24392721b ./gcc/testsuite/gcc.c-torture/execute/950929-1.c ! 1234781098b ./gcc/testsuite/gcc.c-torture/execute/951003-1.c ! 3737612481b ./gcc/testsuite/gcc.c-torture/execute/951115-1.c ! 2658922424b ./gcc/testsuite/gcc.c-torture/execute/951204-1.c ! 3956410619b ./gcc/testsuite/gcc.c-torture/execute/960116-1.c ! 2093624467b ./gcc/testsuite/gcc.c-torture/execute/960117-1.c ! 1694357534b ./gcc/testsuite/gcc.c-torture/execute/960209-1.c ! 1952007331b ./gcc/testsuite/gcc.c-torture/execute/960215-1.c ! 60263952b ./gcc/testsuite/gcc.c-torture/execute/960218-1.c ! 1161569283b ./gcc/testsuite/gcc.c-torture/execute/960219-1.c ! 3429934900b ./gcc/testsuite/gcc.c-torture/execute/960301-1.c ! 160802950b ./gcc/testsuite/gcc.c-torture/execute/960302-1.c ! 2772979130b ./gcc/testsuite/gcc.c-torture/execute/960311-1.c ! 1259407124b ./gcc/testsuite/gcc.c-torture/execute/960311-2.c ! 3608527152b ./gcc/testsuite/gcc.c-torture/execute/960311-3.c ! 2087520542b ./gcc/testsuite/gcc.c-torture/execute/960312-1.c ! 1534960321b ./gcc/testsuite/gcc.c-torture/execute/960312-1.x ! 1208600766b ./gcc/testsuite/gcc.c-torture/execute/960317-1.c ! 1889026562b ./gcc/testsuite/gcc.c-torture/execute/960321-1.c ! 271449701b ./gcc/testsuite/gcc.c-torture/execute/960326-1.c ! 2449729039b ./gcc/testsuite/gcc.c-torture/execute/960327-1.c ! 2463095434b ./gcc/testsuite/gcc.c-torture/execute/960402-1.c ! 3079720318b ./gcc/testsuite/gcc.c-torture/execute/960405-1.c ! 4251399269b ./gcc/testsuite/gcc.c-torture/execute/960416-1.c ! 2615797380b ./gcc/testsuite/gcc.c-torture/execute/960416-1.x ! 2014388579b ./gcc/testsuite/gcc.c-torture/execute/960419-1.c ! 235840907b ./gcc/testsuite/gcc.c-torture/execute/960419-2.c ! 4266479970b ./gcc/testsuite/gcc.c-torture/execute/960512-1.c ! 3785913788b ./gcc/testsuite/gcc.c-torture/execute/960513-1.c ! 488880971b ./gcc/testsuite/gcc.c-torture/execute/960521-1.c ! 2321951599b ./gcc/testsuite/gcc.c-torture/execute/960608-1.c ! 4052360482b ./gcc/testsuite/gcc.c-torture/execute/960801-1.c ! 2655742085b ./gcc/testsuite/gcc.c-torture/execute/960802-1.c ! 135771086b ./gcc/testsuite/gcc.c-torture/execute/960830-1.c ! 2582740546b ./gcc/testsuite/gcc.c-torture/execute/960909-1.c ! 1944495033b ./gcc/testsuite/gcc.c-torture/execute/961004-1.c ! 658313774b ./gcc/testsuite/gcc.c-torture/execute/961017-1.c ! 785421501b ./gcc/testsuite/gcc.c-torture/execute/961017-2.c ! 2852845535b ./gcc/testsuite/gcc.c-torture/execute/961026-1.c ! 2375210094b ./gcc/testsuite/gcc.c-torture/execute/961112-1.c ! 2553026408b ./gcc/testsuite/gcc.c-torture/execute/961122-1.c ! 2422282222b ./gcc/testsuite/gcc.c-torture/execute/961122-2.c ! 3575956796b ./gcc/testsuite/gcc.c-torture/execute/961125-1.c ! 577488172b ./gcc/testsuite/gcc.c-torture/execute/961206-1.c ! 1182447544b ./gcc/testsuite/gcc.c-torture/execute/961213-1.c ! 2704046666b ./gcc/testsuite/gcc.c-torture/execute/961223-1.c ! 1973936950b ./gcc/testsuite/gcc.c-torture/execute/970214-1.c ! 1571629264b ./gcc/testsuite/gcc.c-torture/execute/970214-2.c ! 167780433b ./gcc/testsuite/gcc.c-torture/execute/970217-1.c ! 2343108590b ./gcc/testsuite/gcc.c-torture/execute/970923-1.c ! 2894602056b ./gcc/testsuite/gcc.c-torture/execute/980205.c ! 4265139835b ./gcc/testsuite/gcc.c-torture/execute/980223.c ! 1143734080b ./gcc/testsuite/gcc.c-torture/execute/980424-1.c ! 3704443102b ./gcc/testsuite/gcc.c-torture/execute/980505-1.c ! 2419800133b ./gcc/testsuite/gcc.c-torture/execute/980505-2.c ! 1955794056b ./gcc/testsuite/gcc.c-torture/execute/980506-1.c ! 2173791379b ./gcc/testsuite/gcc.c-torture/execute/980506-2.c ! 492472793b ./gcc/testsuite/gcc.c-torture/execute/980506-3.c ! 3939060245b ./gcc/testsuite/gcc.c-torture/execute/980526-1.c ! 1183240780b ./gcc/testsuite/gcc.c-torture/execute/980526-2.c ! 798626284b ./gcc/testsuite/gcc.c-torture/execute/980526-3.c ! 686935511b ./gcc/testsuite/gcc.c-torture/execute/980602-1.c ! 148166585b ./gcc/testsuite/gcc.c-torture/execute/980602-2.c ! 2555041864b ./gcc/testsuite/gcc.c-torture/execute/980604-1.c ! 2921367481b ./gcc/testsuite/gcc.c-torture/execute/980605-1.c ! 327024946b ./gcc/testsuite/gcc.c-torture/execute/980608-1.c ! 636602589b ./gcc/testsuite/gcc.c-torture/execute/980612-1.c ! 1796014237b ./gcc/testsuite/gcc.c-torture/execute/980617-1.c ! 1416887007b ./gcc/testsuite/gcc.c-torture/execute/980618-1.c ! 3252251770b ./gcc/testsuite/gcc.c-torture/execute/980701-1.c ! 3843080992b ./gcc/testsuite/gcc.c-torture/execute/980707-1.c ! 3327976229b ./gcc/testsuite/gcc.c-torture/execute/980709-1.c ! 2346484511b ./gcc/testsuite/gcc.c-torture/execute/980709-1.x ! 1464453071b ./gcc/testsuite/gcc.c-torture/execute/980716-1.c ! 1144140014b ./gcc/testsuite/gcc.c-torture/execute/980929-1.c ! 2567595595b ./gcc/testsuite/gcc.c-torture/execute/981001-1.c ! 1496092063b ./gcc/testsuite/gcc.c-torture/execute/981019-1.c ! 1493534646b ./gcc/testsuite/gcc.c-torture/execute/981130-1.c ! 296945303b ./gcc/testsuite/gcc.c-torture/execute/981130-1.x ! 2098827021b ./gcc/testsuite/gcc.c-torture/execute/981206-1.c ! 785276758b ./gcc/testsuite/gcc.c-torture/execute/990106-1.c ! 1458926953b ./gcc/testsuite/gcc.c-torture/execute/990106-2.c ! 1443443587b ./gcc/testsuite/gcc.c-torture/execute/990117-1.c ! 98144727b ./gcc/testsuite/gcc.c-torture/execute/990127-1.c ! 4206968879b ./gcc/testsuite/gcc.c-torture/execute/990127-2.c ! 1805424399b ./gcc/testsuite/gcc.c-torture/execute/990128-1.c ! 1406479809b ./gcc/testsuite/gcc.c-torture/execute/990130-1.c ! 1075245403b ./gcc/testsuite/gcc.c-torture/execute/990208-1.c ! 2607456693b ./gcc/testsuite/gcc.c-torture/execute/990208-1.x ! 1910322968b ./gcc/testsuite/gcc.c-torture/execute/990211-1.c ! 2520747136b ./gcc/testsuite/gcc.c-torture/execute/990222-1.c ! 4167898413b ./gcc/testsuite/gcc.c-torture/execute/990324-1.c ! 1316369295b ./gcc/testsuite/gcc.c-torture/execute/990326-1.c ! 2237806705b ./gcc/testsuite/gcc.c-torture/execute/990404-1.c ! 3506652867b ./gcc/testsuite/gcc.c-torture/execute/990413-2.c ! 1028733236b ./gcc/testsuite/gcc.c-torture/execute/990413-2.x ! 533594278b ./gcc/testsuite/gcc.c-torture/execute/990513-1.c ! 2242042026b ./gcc/testsuite/gcc.c-torture/execute/990524-1.c ! 1608250007b ./gcc/testsuite/gcc.c-torture/execute/990525-1.c ! 1043856586b ./gcc/testsuite/gcc.c-torture/execute/990525-2.c ! 1233686917b ./gcc/testsuite/gcc.c-torture/execute/990527-1.c ! 1220250784b ./gcc/testsuite/gcc.c-torture/execute/990531-1.c ! 3289696997b ./gcc/testsuite/gcc.c-torture/execute/990604-1.c ! 80435005b ./gcc/testsuite/gcc.c-torture/execute/990628-1.c ! 2064588039b ./gcc/testsuite/gcc.c-torture/execute/990804-1.c ! 2063909199b ./gcc/testsuite/gcc.c-torture/execute/990811-1.c ! 1435922216b ./gcc/testsuite/gcc.c-torture/execute/990826-0.c ! 2369075067b ./gcc/testsuite/gcc.c-torture/execute/990826-0.x ! 3894203537b ./gcc/testsuite/gcc.c-torture/execute/990827-1.c ! 1924065387b ./gcc/testsuite/gcc.c-torture/execute/990829-1.c ! 3657724130b ./gcc/testsuite/gcc.c-torture/execute/990923-1.c ! 3037719587b ./gcc/testsuite/gcc.c-torture/execute/991014-1.c ! 340177342b ./gcc/testsuite/gcc.c-torture/execute/991016-1.c ! 2236305082b ./gcc/testsuite/gcc.c-torture/execute/991019-1.c ! 4202756321b ./gcc/testsuite/gcc.c-torture/execute/991023-1.c ! 1824884313b ./gcc/testsuite/gcc.c-torture/execute/991030-1.c ! 4138873239b ./gcc/testsuite/gcc.c-torture/execute/991112-1.c ! 2109536582b ./gcc/testsuite/gcc.c-torture/execute/991118-1.c ! 1316882767b ./gcc/testsuite/gcc.c-torture/execute/991201-1.c ! 2220300988b ./gcc/testsuite/gcc.c-torture/execute/991202-1.c ! 1285333003b ./gcc/testsuite/gcc.c-torture/execute/991202-2.c ! 2329096948b ./gcc/testsuite/gcc.c-torture/execute/991202-3.c ! 3117583172b ./gcc/testsuite/gcc.c-torture/execute/991216-1.c ! 4234986278b ./gcc/testsuite/gcc.c-torture/execute/991216-2.c ! 2527910714b ./gcc/testsuite/gcc.c-torture/execute/991216-3.c ! 4137201305b ./gcc/testsuite/gcc.c-torture/execute/991216-4.c ! 882138391b ./gcc/testsuite/gcc.c-torture/execute/991221-1.c ! 2854457808b ./gcc/testsuite/gcc.c-torture/execute/991227-1.c ! 3688640862b ./gcc/testsuite/gcc.c-torture/execute/991228-1.c ! 3793831392b ./gcc/testsuite/gcc.c-torture/execute/align-1.c ! 4120792597b ./gcc/testsuite/gcc.c-torture/execute/align-2.c ! 1274835551b ./gcc/testsuite/gcc.c-torture/execute/alloca-1.c ! 3292072248b ./gcc/testsuite/gcc.c-torture/execute/anon-1.c ! 1605923399b ./gcc/testsuite/gcc.c-torture/execute/arith-1.c ! 343449147b ./gcc/testsuite/gcc.c-torture/execute/arith-rand.c ! 2001873795b ./gcc/testsuite/gcc.c-torture/execute/arith-rand-ll.c ! 312869222b ./gcc/testsuite/gcc.c-torture/execute/ashldi-1.c ! 1327544364b ./gcc/testsuite/gcc.c-torture/execute/ashrdi-1.c ! 629391558b ./gcc/testsuite/gcc.c-torture/execute/bcp-1.c ! 323354359b ./gcc/testsuite/gcc.c-torture/execute/bf64-1.c ! 3097986350b ./gcc/testsuite/gcc.c-torture/execute/bf64-1.x ! 2311291194b ./gcc/testsuite/gcc.c-torture/execute/bf-layout-1.c ! 2757361338b ./gcc/testsuite/gcc.c-torture/execute/bf-pack-1.c ! 3543906045b ./gcc/testsuite/gcc.c-torture/execute/bf-sign-1.c ! 1320697357b ./gcc/testsuite/gcc.c-torture/execute/bf-sign-2.c ! 1331291117b ./gcc/testsuite/gcc.c-torture/execute/bitfld-1.c ! 3644699221b ./gcc/testsuite/gcc.c-torture/execute/bitfld-1.x ! 1684940093b ./gcc/testsuite/gcc.c-torture/execute/bitfld-2.c ! 1673141587b ./gcc/testsuite/gcc.c-torture/execute/builtin-abs-1.c ! 2056736695b ./gcc/testsuite/gcc.c-torture/execute/builtin-abs-2.c ! 3097553545b ./gcc/testsuite/gcc.c-torture/execute/builtin-complex-1.c ! 1493337540b ./gcc/testsuite/gcc.c-torture/execute/builtin-constant.c ! 2076507160b ./gcc/testsuite/gcc.c-torture/execute/builtin-constant.x ! 185545879b ./gcc/testsuite/gcc.c-torture/execute/builtin-noret-1.c ! 329340471b ./gcc/testsuite/gcc.c-torture/execute/builtin-prefetch-1.c ! 397570715b ./gcc/testsuite/gcc.c-torture/execute/builtin-prefetch-2.c ! 1484227202b ./gcc/testsuite/gcc.c-torture/execute/builtin-prefetch-3.c ! 1934387710b ./gcc/testsuite/gcc.c-torture/execute/builtin-prefetch-4.c ! 2627312111b ./gcc/testsuite/gcc.c-torture/execute/builtin-prefetch-5.c ! 3741124173b ./gcc/testsuite/gcc.c-torture/execute/builtin-prefetch-6.c ! 4012339802b ./gcc/testsuite/gcc.c-torture/execute/built-in-setjmp.c ! 2250919883b ./gcc/testsuite/gcc.c-torture/execute/builtin-types-compatible-p.c ! 2177138525b ./gcc/testsuite/gcc.c-torture/execute/cbrt.c ! 2994579909b ./gcc/testsuite/gcc.c-torture/execute/cmpdi-1.c ! 3257252249b ./gcc/testsuite/gcc.c-torture/execute/cmpsi-1.c ! 601076272b ./gcc/testsuite/gcc.c-torture/execute/compare-1.c ! 1093590348b ./gcc/testsuite/gcc.c-torture/execute/compare-2.c ! 485892504b ./gcc/testsuite/gcc.c-torture/execute/compare-3.c ! 3943123822b ./gcc/testsuite/gcc.c-torture/execute/comp-goto-1.c ! 3449149566b ./gcc/testsuite/gcc.c-torture/execute/comp-goto-2.c ! 760972136b ./gcc/testsuite/gcc.c-torture/execute/complex-1.c ! 3034158014b ./gcc/testsuite/gcc.c-torture/execute/complex-2.c ! 478689052b ./gcc/testsuite/gcc.c-torture/execute/complex-3.c ! 662396237b ./gcc/testsuite/gcc.c-torture/execute/complex-4.c ! 1022468052b ./gcc/testsuite/gcc.c-torture/execute/complex-5.c ! 3814081986b ./gcc/testsuite/gcc.c-torture/execute/complex-6.c ! 1079537985b ./gcc/testsuite/gcc.c-torture/execute/compndlit-1.c ! 3337673351b ./gcc/testsuite/gcc.c-torture/execute/conversion.c ! 1362123497b ./gcc/testsuite/gcc.c-torture/execute/cvt-1.c ! 732726874b ./gcc/testsuite/gcc.c-torture/execute/cvt-1.x ! 1037739064b ./gcc/testsuite/gcc.c-torture/execute/dbra-1.c ! 3567725587b ./gcc/testsuite/gcc.c-torture/execute/divconst-1.c ! 3321693440b ./gcc/testsuite/gcc.c-torture/execute/divconst-2.c ! 506840532b ./gcc/testsuite/gcc.c-torture/execute/divconst-3.c ! 2615797380b ./gcc/testsuite/gcc.c-torture/execute/divconst-3.x ! 2274689094b ./gcc/testsuite/gcc.c-torture/execute/divmod-1.c ! 1808173474b ./gcc/testsuite/gcc.c-torture/execute/eeprof-1.c ! 2216490291b ./gcc/testsuite/gcc.c-torture/execute/eeprof-1.x ! 1886321368b ./gcc/testsuite/gcc.c-torture/execute/enum-1.c ! 3916720934b ./gcc/testsuite/gcc.c-torture/execute/enum-2.c ! 2211348141b ./gcc/testsuite/gcc.c-torture/execute/execute.exp ! 1911697643b ./gcc/testsuite/gcc.c-torture/execute/extzvsi.c ! 1707039639b ./gcc/testsuite/gcc.c-torture/execute/ffs-1.c ! 3989025058b ./gcc/testsuite/gcc.c-torture/execute/ffs-2.c ! 155906334b ./gcc/testsuite/gcc.c-torture/execute/func-ptr-1.c ! 1157816092b ./gcc/testsuite/gcc.c-torture/execute/gofast.c ! 3451592953b ./gcc/testsuite/gcc.c-torture/execute/ieee/20000320-1.c ! 981656236b ./gcc/testsuite/gcc.c-torture/execute/ieee/20001122-1.c ! 2602526611b ./gcc/testsuite/gcc.c-torture/execute/ieee/20010114-2.c ! 1052207154b ./gcc/testsuite/gcc.c-torture/execute/ieee/20010226-1.c ! 372215662b ./gcc/testsuite/gcc.c-torture/execute/ieee/20011123-1.c ! 2046772610b ./gcc/testsuite/gcc.c-torture/execute/ieee/920518-1.c ! 3673851898b ./gcc/testsuite/gcc.c-torture/execute/ieee/920810-1.c ! 1813910189b ./gcc/testsuite/gcc.c-torture/execute/ieee/930529-1.c ! 73602629b ./gcc/testsuite/gcc.c-torture/execute/ieee/980619-1.c ! 1659512392b ./gcc/testsuite/gcc.c-torture/execute/ieee/980619-1.x ! 1948647907b ./gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-1.c ! 1935804586b ./gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-2.c ! 817625481b ./gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-3.c ! 3452570198b ./gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-4.c ! 330892698b ./gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-5.c ! 4125344101b ./gcc/testsuite/gcc.c-torture/execute/ieee/hugeval.c ! 1953413990b ./gcc/testsuite/gcc.c-torture/execute/ieee/hugeval.x ! 2299573411b ./gcc/testsuite/gcc.c-torture/execute/ieee/ieee.exp ! 959223490b ./gcc/testsuite/gcc.c-torture/execute/ieee/inf-1.c ! 4017678214b ./gcc/testsuite/gcc.c-torture/execute/ieee/minuszero.c ! 3545392440b ./gcc/testsuite/gcc.c-torture/execute/ieee/mzero2.c ! 2290856575b ./gcc/testsuite/gcc.c-torture/execute/ieee/mzero2.x ! 3203549249b ./gcc/testsuite/gcc.c-torture/execute/ieee/mzero3.c ! 545426428b ./gcc/testsuite/gcc.c-torture/execute/ieee/rbug.c ! 2631912054b ./gcc/testsuite/gcc.c-torture/execute/ieee/rbug.x ! 287394580b ./gcc/testsuite/gcc.c-torture/execute/index-1.c ! 3728840213b ./gcc/testsuite/gcc.c-torture/execute/inst-check.c ! 2015511278b ./gcc/testsuite/gcc.c-torture/execute/int-compare.c ! 2503239574b ./gcc/testsuite/gcc.c-torture/execute/longlong.c ! 3284814162b ./gcc/testsuite/gcc.c-torture/execute/loop-10.c ! 2766603756b ./gcc/testsuite/gcc.c-torture/execute/loop-11.c ! 3036735737b ./gcc/testsuite/gcc.c-torture/execute/loop-12.c ! 1130729209b ./gcc/testsuite/gcc.c-torture/execute/loop-13.c ! 2537268960b ./gcc/testsuite/gcc.c-torture/execute/loop-14.c ! 995264748b ./gcc/testsuite/gcc.c-torture/execute/loop-15.c ! 2701191371b ./gcc/testsuite/gcc.c-torture/execute/loop-1.c ! 3443893179b ./gcc/testsuite/gcc.c-torture/execute/loop-2b.c ! 869002341b ./gcc/testsuite/gcc.c-torture/execute/loop-2.c ! 153943550b ./gcc/testsuite/gcc.c-torture/execute/loop-2c.c ! 720145550b ./gcc/testsuite/gcc.c-torture/execute/loop-2d.c ! 3479028442b ./gcc/testsuite/gcc.c-torture/execute/loop-2e.c ! 722341433b ./gcc/testsuite/gcc.c-torture/execute/loop-2e.x ! 1291794748b ./gcc/testsuite/gcc.c-torture/execute/loop-2f.c ! 3280299116b ./gcc/testsuite/gcc.c-torture/execute/loop-2f.x ! 661111306b ./gcc/testsuite/gcc.c-torture/execute/loop-2g.c ! 3280299116b ./gcc/testsuite/gcc.c-torture/execute/loop-2g.x ! 4068453712b ./gcc/testsuite/gcc.c-torture/execute/loop-3b.c ! 3620613760b ./gcc/testsuite/gcc.c-torture/execute/loop-3.c ! 2778041526b ./gcc/testsuite/gcc.c-torture/execute/loop-3c.c ! 1791416082b ./gcc/testsuite/gcc.c-torture/execute/loop-4b.c ! 3316778727b ./gcc/testsuite/gcc.c-torture/execute/loop-4.c ! 3541035036b ./gcc/testsuite/gcc.c-torture/execute/loop-5.c ! 4217961697b ./gcc/testsuite/gcc.c-torture/execute/loop-6.c ! 3649171232b ./gcc/testsuite/gcc.c-torture/execute/loop-7.c ! 3999194364b ./gcc/testsuite/gcc.c-torture/execute/loop-8.c ! 239440461b ./gcc/testsuite/gcc.c-torture/execute/loop-9.c ! 3308349321b ./gcc/testsuite/gcc.c-torture/execute/lshrdi-1.c ! 2178361746b ./gcc/testsuite/gcc.c-torture/execute/mayalias-1.c ! 1655048971b ./gcc/testsuite/gcc.c-torture/execute/memcpy-1.c ! 187988711b ./gcc/testsuite/gcc.c-torture/execute/memcpy-2.c ! 1198957866b ./gcc/testsuite/gcc.c-torture/execute/memcpy-bi.c ! 3672115493b ./gcc/testsuite/gcc.c-torture/execute/memset-1.c ! 2729518429b ./gcc/testsuite/gcc.c-torture/execute/memset-2.c ! 2259057543b ./gcc/testsuite/gcc.c-torture/execute/memset-3.c ! 1146723390b ./gcc/testsuite/gcc.c-torture/execute/mod-1.c ! 843122257b ./gcc/testsuite/gcc.c-torture/execute/nestfunc-1.c ! 2875393797b ./gcc/testsuite/gcc.c-torture/execute/nestfunc-2.c ! 3451120516b ./gcc/testsuite/gcc.c-torture/execute/nestfunc-3.c ! 1193207968b ./gcc/testsuite/gcc.c-torture/execute/nestfunc-4.c ! 462740811b ./gcc/testsuite/gcc.c-torture/execute/nest-stdar-1.c ! 1347988605b ./gcc/testsuite/gcc.c-torture/execute/packed-1.c ! 3662025483b ./gcc/testsuite/gcc.c-torture/execute/packed-2.c ! 781350511b ./gcc/testsuite/gcc.c-torture/execute/pending-4.c ! 1246182987b ./gcc/testsuite/gcc.c-torture/execute/ptr-arith-1.c ! 1048909723b ./gcc/testsuite/gcc.c-torture/execute/pure-1.c ! 146053249b ./gcc/testsuite/gcc.c-torture/execute/regstack-1.c ! 1827676873b ./gcc/testsuite/gcc.c-torture/execute/scope-1.c ! 990025742b ./gcc/testsuite/gcc.c-torture/execute/scope-2.c ! 3788353048b ./gcc/testsuite/gcc.c-torture/execute/shiftdi.c ! 968964639b ./gcc/testsuite/gcc.c-torture/execute/simd-1.c ! 2111263962b ./gcc/testsuite/gcc.c-torture/execute/simd-2.c ! 1004975218b ./gcc/testsuite/gcc.c-torture/execute/stdio-opt-1.c ! 2726881848b ./gcc/testsuite/gcc.c-torture/execute/stdio-opt-2.c ! 2215607685b ./gcc/testsuite/gcc.c-torture/execute/stdio-opt-3.c ! 3991648294b ./gcc/testsuite/gcc.c-torture/execute/strcmp-1.c ! 2372605244b ./gcc/testsuite/gcc.c-torture/execute/strcpy-1.c ! 4127514660b ./gcc/testsuite/gcc.c-torture/execute/strct-pack-1.c ! 2567091361b ./gcc/testsuite/gcc.c-torture/execute/strct-pack-2.c ! 3788900866b ./gcc/testsuite/gcc.c-torture/execute/strct-pack-3.c ! 3787465303b ./gcc/testsuite/gcc.c-torture/execute/strct-pack-4.c ! 2204360040b ./gcc/testsuite/gcc.c-torture/execute/strct-stdarg-1.c ! 3993171434b ./gcc/testsuite/gcc.c-torture/execute/strct-varg-1.c ! 13747021b ./gcc/testsuite/gcc.c-torture/execute/strct-varg-1.x ! 2004905304b ./gcc/testsuite/gcc.c-torture/execute/string-opt-10.c ! 1757228388b ./gcc/testsuite/gcc.c-torture/execute/string-opt-11.c ! 3269205009b ./gcc/testsuite/gcc.c-torture/execute/string-opt-12.c ! 1302429529b ./gcc/testsuite/gcc.c-torture/execute/string-opt-13.c ! 1984203373b ./gcc/testsuite/gcc.c-torture/execute/string-opt-14.c ! 206750096b ./gcc/testsuite/gcc.c-torture/execute/string-opt-15.c ! 2089995b ./gcc/testsuite/gcc.c-torture/execute/string-opt-16.c ! 4247898295b ./gcc/testsuite/gcc.c-torture/execute/string-opt-17.c ! 3389618360b ./gcc/testsuite/gcc.c-torture/execute/string-opt-1.c ! 2499130848b ./gcc/testsuite/gcc.c-torture/execute/string-opt-2.c ! 307949358b ./gcc/testsuite/gcc.c-torture/execute/string-opt-3.c ! 1473532603b ./gcc/testsuite/gcc.c-torture/execute/string-opt-4.c ! 2202340101b ./gcc/testsuite/gcc.c-torture/execute/string-opt-5.c ! 196339167b ./gcc/testsuite/gcc.c-torture/execute/string-opt-6.c ! 2437896034b ./gcc/testsuite/gcc.c-torture/execute/string-opt-7.c ! 3642395267b ./gcc/testsuite/gcc.c-torture/execute/string-opt-8.c ! 2299025367b ./gcc/testsuite/gcc.c-torture/execute/string-opt-9.c ! 2255190212b ./gcc/testsuite/gcc.c-torture/execute/strlen-1.c ! 4274645385b ./gcc/testsuite/gcc.c-torture/execute/strncmp-1.c ! 3047570290b ./gcc/testsuite/gcc.c-torture/execute/struct-cpy-1.c ! 2234035225b ./gcc/testsuite/gcc.c-torture/execute/struct-ini-1.c ! 1176467633b ./gcc/testsuite/gcc.c-torture/execute/struct-ini-2.c ! 2162338370b ./gcc/testsuite/gcc.c-torture/execute/struct-ini-3.c ! 3372312182b ./gcc/testsuite/gcc.c-torture/execute/struct-ini-4.c ! 1924491577b ./gcc/testsuite/gcc.c-torture/execute/struct-ret-1.c ! 2222062805b ./gcc/testsuite/gcc.c-torture/execute/struct-ret-2.c ! 2658407134b ./gcc/testsuite/gcc.c-torture/execute/tstdi-1.c ! 1760191623b ./gcc/testsuite/gcc.c-torture/execute/unroll-1.c ! 150011334b ./gcc/testsuite/gcc.c-torture/execute/va-arg-10.c ! 1341755443b ./gcc/testsuite/gcc.c-torture/execute/va-arg-11.c ! 3741851708b ./gcc/testsuite/gcc.c-torture/execute/va-arg-12.c ! 2056576210b ./gcc/testsuite/gcc.c-torture/execute/va-arg-13.c ! 1501818131b ./gcc/testsuite/gcc.c-torture/execute/va-arg-14.c ! 276020100b ./gcc/testsuite/gcc.c-torture/execute/va-arg-15.c ! 4028296238b ./gcc/testsuite/gcc.c-torture/execute/va-arg-16.c ! 2803615477b ./gcc/testsuite/gcc.c-torture/execute/va-arg-17.c ! 2108289558b ./gcc/testsuite/gcc.c-torture/execute/va-arg-18.c ! 4145285080b ./gcc/testsuite/gcc.c-torture/execute/va-arg-19.c ! 4100317579b ./gcc/testsuite/gcc.c-torture/execute/va-arg-1.c ! 366376907b ./gcc/testsuite/gcc.c-torture/execute/va-arg-20.c ! 3416533370b ./gcc/testsuite/gcc.c-torture/execute/va-arg-21.c ! 1403664843b ./gcc/testsuite/gcc.c-torture/execute/va-arg-22.c ! 2661012060b ./gcc/testsuite/gcc.c-torture/execute/va-arg-23.c ! 3898927180b ./gcc/testsuite/gcc.c-torture/execute/va-arg-2.c ! 839866355b ./gcc/testsuite/gcc.c-torture/execute/va-arg-4.c ! 1210036672b ./gcc/testsuite/gcc.c-torture/execute/va-arg-5.c ! 365894168b ./gcc/testsuite/gcc.c-torture/execute/va-arg-6.c ! 2019116109b ./gcc/testsuite/gcc.c-torture/execute/va-arg-7.c ! 3989115940b ./gcc/testsuite/gcc.c-torture/execute/va-arg-8.c ! 2833151734b ./gcc/testsuite/gcc.c-torture/execute/va-arg-9.c ! 1911372417b ./gcc/testsuite/gcc.c-torture/execute/wchar_t-1.c ! 529327846b ./gcc/testsuite/gcc.c-torture/execute/widechar-1.c ! 1902127658b ./gcc/testsuite/gcc.c-torture/execute/widechar-2.c ! 2556092488b ./gcc/testsuite/gcc.c-torture/execute/zerolen-1.c ! 4066787379b ./gcc/testsuite/gcc.c-torture/execute/zerolen-2.c ! 634421910b ./gcc/testsuite/gcc.c-torture/unsorted/386.c ! 2512826658b ./gcc/testsuite/gcc.c-torture/unsorted/86.c ! 2687046562b ./gcc/testsuite/gcc.c-torture/unsorted/a1.c ! 3122819825b ./gcc/testsuite/gcc.c-torture/unsorted/a3.c ! 1905897475b ./gcc/testsuite/gcc.c-torture/unsorted/aaa.c ! 1430858172b ./gcc/testsuite/gcc.c-torture/unsorted/aa.c ! 2128951928b ./gcc/testsuite/gcc.c-torture/unsorted/abs.c ! 51945996b ./gcc/testsuite/gcc.c-torture/unsorted/a.c ! 4087775597b ./gcc/testsuite/gcc.c-torture/unsorted/ac.c ! 4108214922b ./gcc/testsuite/gcc.c-torture/unsorted/acc.c ! 178238083b ./gcc/testsuite/gcc.c-torture/unsorted/add386.c ! 1561010997b ./gcc/testsuite/gcc.c-torture/unsorted/add.c ! 425148131b ./gcc/testsuite/gcc.c-torture/unsorted/addcc.c ! 1010727230b ./gcc/testsuite/gcc.c-torture/unsorted/andm.c ! 1804826393b ./gcc/testsuite/gcc.c-torture/unsorted/andmem.c ! 1939054464b ./gcc/testsuite/gcc.c-torture/unsorted/andn.c ! 958534456b ./gcc/testsuite/gcc.c-torture/unsorted/andok.c ! 4100679649b ./gcc/testsuite/gcc.c-torture/unsorted/andsi.c ! 1812217387b ./gcc/testsuite/gcc.c-torture/unsorted/andsparc.c ! 1261488553b ./gcc/testsuite/gcc.c-torture/unsorted/aos.c ! 3358660284b ./gcc/testsuite/gcc.c-torture/unsorted/arr.c ! 529589500b ./gcc/testsuite/gcc.c-torture/unsorted/as.c ! 2341774096b ./gcc/testsuite/gcc.c-torture/unsorted/ase.c ! 278197700b ./gcc/testsuite/gcc.c-torture/unsorted/b1.c ! 1838022421b ./gcc/testsuite/gcc.c-torture/unsorted/b2.c ! 1297638431b ./gcc/testsuite/gcc.c-torture/unsorted/b3.c ! 98906803b ./gcc/testsuite/gcc.c-torture/unsorted/b88.c ! 4166624962b ./gcc/testsuite/gcc.c-torture/unsorted/bad.c ! 909355576b ./gcc/testsuite/gcc.c-torture/unsorted/band.c ! 782217635b ./gcc/testsuite/gcc.c-torture/unsorted/bb0.c ! 104727600b ./gcc/testsuite/gcc.c-torture/unsorted/bb1.c ! 2113129899b ./gcc/testsuite/gcc.c-torture/unsorted/bbb.c ! 3604241750b ./gcc/testsuite/gcc.c-torture/unsorted/b.c ! 2670310529b ./gcc/testsuite/gcc.c-torture/unsorted/bc.c ! 3090384483b ./gcc/testsuite/gcc.c-torture/unsorted/bcopy.c ! 2685623920b ./gcc/testsuite/gcc.c-torture/unsorted/bf.c ! 1825505370b ./gcc/testsuite/gcc.c-torture/unsorted/bfins.c ! 3222678366b ./gcc/testsuite/gcc.c-torture/unsorted/bfx.c ! 1818008243b ./gcc/testsuite/gcc.c-torture/unsorted/bge.c ! 1169896684b ./gcc/testsuite/gcc.c-torture/unsorted/bit.c ! 4267772046b ./gcc/testsuite/gcc.c-torture/unsorted/bitf.c ! 1244917866b ./gcc/testsuite/gcc.c-torture/unsorted/bitw.c ! 3205164461b ./gcc/testsuite/gcc.c-torture/unsorted/blk.c ! 3930520391b ./gcc/testsuite/gcc.c-torture/unsorted/bt386.c ! 3879987638b ./gcc/testsuite/gcc.c-torture/unsorted/bt.c ! 2930337150b ./gcc/testsuite/gcc.c-torture/unsorted/BUG11.c ! 645328736b ./gcc/testsuite/gcc.c-torture/unsorted/BUG12.c ! 3447791606b ./gcc/testsuite/gcc.c-torture/unsorted/BUG13.c ! 1345083343b ./gcc/testsuite/gcc.c-torture/unsorted/BUG16.c ! 2211699544b ./gcc/testsuite/gcc.c-torture/unsorted/BUG17.c ! 3824994911b ./gcc/testsuite/gcc.c-torture/unsorted/BUG18.c ! 1577087180b ./gcc/testsuite/gcc.c-torture/unsorted/BUG1.c ! 2177082003b ./gcc/testsuite/gcc.c-torture/unsorted/BUG21.c ! 1740665759b ./gcc/testsuite/gcc.c-torture/unsorted/BUG22.c ! 4075155387b ./gcc/testsuite/gcc.c-torture/unsorted/BUG23.c ! 3968893634b ./gcc/testsuite/gcc.c-torture/unsorted/BUG24.c ! 459689731b ./gcc/testsuite/gcc.c-torture/unsorted/BUG25.c ! 3618943848b ./gcc/testsuite/gcc.c-torture/unsorted/BUG2.c ! 474328818b ./gcc/testsuite/gcc.c-torture/unsorted/BUG3.c ! 1462112702b ./gcc/testsuite/gcc.c-torture/unsorted/BUG4.c ! 3140531389b ./gcc/testsuite/gcc.c-torture/unsorted/BUG5.c ! 460917160b ./gcc/testsuite/gcc.c-torture/unsorted/BUG6.c ! 2778832219b ./gcc/testsuite/gcc.c-torture/unsorted/bug.c ! 909529146b ./gcc/testsuite/gcc.c-torture/unsorted/bugc.c ! 3859987766b ./gcc/testsuite/gcc.c-torture/unsorted/buns.c ! 2981977682b ./gcc/testsuite/gcc.c-torture/unsorted/bx.c ! 3824196498b ./gcc/testsuite/gcc.c-torture/unsorted/c1.c ! 3656093116b ./gcc/testsuite/gcc.c-torture/unsorted/c2.c ! 3745915003b ./gcc/testsuite/gcc.c-torture/unsorted/call386.c ! 3818633964b ./gcc/testsuite/gcc.c-torture/unsorted/call.c ! 3496796739b ./gcc/testsuite/gcc.c-torture/unsorted/callind.c ! 3780608001b ./gcc/testsuite/gcc.c-torture/unsorted/c.c ! 162598922b ./gcc/testsuite/gcc.c-torture/unsorted/cc.c ! 2143288465b ./gcc/testsuite/gcc.c-torture/unsorted/charmtst.c ! 1855363258b ./gcc/testsuite/gcc.c-torture/unsorted/cmb.c ! 1285046858b ./gcc/testsuite/gcc.c-torture/unsorted/cmp.c ! 1423312127b ./gcc/testsuite/gcc.c-torture/unsorted/cmphi.c ! 2318993881b ./gcc/testsuite/gcc.c-torture/unsorted/cmpsi386.c ! 4235211728b ./gcc/testsuite/gcc.c-torture/unsorted/cmul.c ! 854170788b ./gcc/testsuite/gcc.c-torture/unsorted/cn1.c ! 935857365b ./gcc/testsuite/gcc.c-torture/unsorted/comb.c ! 1810135123b ./gcc/testsuite/gcc.c-torture/unsorted/consec.c ! 181790131b ./gcc/testsuite/gcc.c-torture/unsorted/const.c ! 2353636753b ./gcc/testsuite/gcc.c-torture/unsorted/conv.c ! 3252387675b ./gcc/testsuite/gcc.c-torture/unsorted/conv_tst.c ! 2280634062b ./gcc/testsuite/gcc.c-torture/unsorted/cp.c ! 1738381851b ./gcc/testsuite/gcc.c-torture/unsorted/csebug.c ! 1464956912b ./gcc/testsuite/gcc.c-torture/unsorted/cvt.c ! 606535868b ./gcc/testsuite/gcc.c-torture/unsorted/dblbug.c ! 3851183583b ./gcc/testsuite/gcc.c-torture/unsorted/dbl_parm.c ! 3440041653b ./gcc/testsuite/gcc.c-torture/unsorted/d.c ! 2925438011b ./gcc/testsuite/gcc.c-torture/unsorted/ddd.c ! 2791348449b ./gcc/testsuite/gcc.c-torture/unsorted/dead.c ! 609366019b ./gcc/testsuite/gcc.c-torture/unsorted/delay.c ! 305442480b ./gcc/testsuite/gcc.c-torture/unsorted/DFcmp.c ! 3029371757b ./gcc/testsuite/gcc.c-torture/unsorted/di.c ! 420255576b ./gcc/testsuite/gcc.c-torture/unsorted/dic.c ! 716977667b ./gcc/testsuite/gcc.c-torture/unsorted/dilayout.c ! 1071957355b ./gcc/testsuite/gcc.c-torture/unsorted/dimove.c ! 163894537b ./gcc/testsuite/gcc.c-torture/unsorted/dimul.c ! 1962021495b ./gcc/testsuite/gcc.c-torture/unsorted/div.c ! 1911882561b ./gcc/testsuite/gcc.c-torture/unsorted/divdf.c ! 3643811739b ./gcc/testsuite/gcc.c-torture/unsorted/dm.c ! 3366321383b ./gcc/testsuite/gcc.c-torture/unsorted/dshift.c ! 691935419b ./gcc/testsuite/gcc.c-torture/unsorted/e.c ! 3422715387b ./gcc/testsuite/gcc.c-torture/unsorted/ex.c ! 3295431583b ./gcc/testsuite/gcc.c-torture/unsorted/ext.c ! 3418757365b ./gcc/testsuite/gcc.c-torture/unsorted/f1.c ! 1799287010b ./gcc/testsuite/gcc.c-torture/unsorted/f2.c ! 742887905b ./gcc/testsuite/gcc.c-torture/unsorted/fdmul.c ! 3396096931b ./gcc/testsuite/gcc.c-torture/unsorted/float.c ! 2705424580b ./gcc/testsuite/gcc.c-torture/unsorted/flo.c ! 1861286853b ./gcc/testsuite/gcc.c-torture/unsorted/flt_const.c ! 1778808555b ./gcc/testsuite/gcc.c-torture/unsorted/fnul.c ! 837581993b ./gcc/testsuite/gcc.c-torture/unsorted/foo.c ! 2603890884b ./gcc/testsuite/gcc.c-torture/unsorted/forgetcc.c ! 1311942689b ./gcc/testsuite/gcc.c-torture/unsorted/fq.c ! 2823794598b ./gcc/testsuite/gcc.c-torture/unsorted/g.c ! 4182806672b ./gcc/testsuite/gcc.c-torture/unsorted/gen_tst.c ! 440386278b ./gcc/testsuite/gcc.c-torture/unsorted/glob.c ! 2712797412b ./gcc/testsuite/gcc.c-torture/unsorted/gronk.c ! 2912660272b ./gcc/testsuite/gcc.c-torture/unsorted/hibug.c ! 2506280517b ./gcc/testsuite/gcc.c-torture/unsorted/hi.c ! 4088813022b ./gcc/testsuite/gcc.c-torture/unsorted/HIcmp.c ! 2060643608b ./gcc/testsuite/gcc.c-torture/unsorted/HIset.c ! 1463391444b ./gcc/testsuite/gcc.c-torture/unsorted/i.c ! 3171392500b ./gcc/testsuite/gcc.c-torture/unsorted/i++.c ! 1222319492b ./gcc/testsuite/gcc.c-torture/unsorted/ic.c ! 2244080969b ./gcc/testsuite/gcc.c-torture/unsorted/icmp.c ! 3544970343b ./gcc/testsuite/gcc.c-torture/unsorted/ifreg.c ! 1391595029b ./gcc/testsuite/gcc.c-torture/unsorted/imm.c ! 125065552b ./gcc/testsuite/gcc.c-torture/unsorted/isinf.c ! 3010843181b ./gcc/testsuite/gcc.c-torture/unsorted/jmp.c ! 2660706970b ./gcc/testsuite/gcc.c-torture/unsorted/jumptab.c ! 2953050089b ./gcc/testsuite/gcc.c-torture/unsorted/layout.c ! 3456840745b ./gcc/testsuite/gcc.c-torture/unsorted/lbug.c ! 1238043529b ./gcc/testsuite/gcc.c-torture/unsorted/l.c ! 2906412336b ./gcc/testsuite/gcc.c-torture/unsorted/ll1.c ! 2085462310b ./gcc/testsuite/gcc.c-torture/unsorted/llbug.c ! 1419215241b ./gcc/testsuite/gcc.c-torture/unsorted/lll.c ! 3825978026b ./gcc/testsuite/gcc.c-torture/unsorted/load8.c ! 791778479b ./gcc/testsuite/gcc.c-torture/unsorted/loadhicc.c ! 439371726b ./gcc/testsuite/gcc.c-torture/unsorted/log2.c ! 418270073b ./gcc/testsuite/gcc.c-torture/unsorted/logic.c ! 388000712b ./gcc/testsuite/gcc.c-torture/unsorted/loop-1.c ! 2317019693b ./gcc/testsuite/gcc.c-torture/unsorted/loop386.c ! 3780249238b ./gcc/testsuite/gcc.c-torture/unsorted/lop.c ! 3011092171b ./gcc/testsuite/gcc.c-torture/unsorted/m1.c ! 1664237855b ./gcc/testsuite/gcc.c-torture/unsorted/m2.c ! 836486950b ./gcc/testsuite/gcc.c-torture/unsorted/m5.c ! 1315431234b ./gcc/testsuite/gcc.c-torture/unsorted/m68.c ! 1140567438b ./gcc/testsuite/gcc.c-torture/unsorted/mbyte.c ! 1343630589b ./gcc/testsuite/gcc.c-torture/unsorted/mchar.c ! 1971867771b ./gcc/testsuite/gcc.c-torture/unsorted/mcmp.c ! 1050674918b ./gcc/testsuite/gcc.c-torture/unsorted/mdouble.c ! 3545288402b ./gcc/testsuite/gcc.c-torture/unsorted/memtst.c ! 1607208885b ./gcc/testsuite/gcc.c-torture/unsorted/miscomp.c ! 517599771b ./gcc/testsuite/gcc.c-torture/unsorted/mm.c ! 3498200377b ./gcc/testsuite/gcc.c-torture/unsorted/mod.c ! 852673854b ./gcc/testsuite/gcc.c-torture/unsorted/modcc.c ! 3290683845b ./gcc/testsuite/gcc.c-torture/unsorted/move.c ! 2934241414b ./gcc/testsuite/gcc.c-torture/unsorted/move_qhi.c ! 2156076426b ./gcc/testsuite/gcc.c-torture/unsorted/mregtst.c ! 2833441830b ./gcc/testsuite/gcc.c-torture/unsorted/msp.c ! 3686945259b ./gcc/testsuite/gcc.c-torture/unsorted/mtst.c ! 650788304b ./gcc/testsuite/gcc.c-torture/unsorted/mu.c ! 3210222105b ./gcc/testsuite/gcc.c-torture/unsorted/mul.c ! 206884481b ./gcc/testsuite/gcc.c-torture/unsorted/mword1.c ! 3114106310b ./gcc/testsuite/gcc.c-torture/unsorted/mword.c ! 1193753806b ./gcc/testsuite/gcc.c-torture/unsorted/n1.c ! 3021632957b ./gcc/testsuite/gcc.c-torture/unsorted/nand.c ! 1942143253b ./gcc/testsuite/gcc.c-torture/unsorted/n.c ! 1255157012b ./gcc/testsuite/gcc.c-torture/unsorted/neg.c ! 2666891841b ./gcc/testsuite/gcc.c-torture/unsorted/o.c ! 1641502386b ./gcc/testsuite/gcc.c-torture/unsorted/omit.c ! 2947983429b ./gcc/testsuite/gcc.c-torture/unsorted/opout.c ! 4144556375b ./gcc/testsuite/gcc.c-torture/unsorted/opt.c ! 2570634505b ./gcc/testsuite/gcc.c-torture/unsorted/or386.c ! 1221510857b ./gcc/testsuite/gcc.c-torture/unsorted/or.c ! 3498239118b ./gcc/testsuite/gcc.c-torture/unsorted/parms.c ! 4291861284b ./gcc/testsuite/gcc.c-torture/unsorted/pass.c ! 3299772143b ./gcc/testsuite/gcc.c-torture/unsorted/p.c ! 1371923458b ./gcc/testsuite/gcc.c-torture/unsorted/pmt.c ! 2511249387b ./gcc/testsuite/gcc.c-torture/unsorted/poor.c ! 745326023b ./gcc/testsuite/gcc.c-torture/unsorted/pp.c ! 1391345399b ./gcc/testsuite/gcc.c-torture/unsorted/pret-arg.c ! 3407302768b ./gcc/testsuite/gcc.c-torture/unsorted/pyr2.c ! 2603570420b ./gcc/testsuite/gcc.c-torture/unsorted/PYRBUG.c ! 697484600b ./gcc/testsuite/gcc.c-torture/unsorted/pyr.c ! 1835488344b ./gcc/testsuite/gcc.c-torture/unsorted/q.c ! 839150718b ./gcc/testsuite/gcc.c-torture/unsorted/QIcmp.c ! 2111121086b ./gcc/testsuite/gcc.c-torture/unsorted/QIset.c ! 4283361995b ./gcc/testsuite/gcc.c-torture/unsorted/r1.c ! 1427595492b ./gcc/testsuite/gcc.c-torture/unsorted/r.c ! 4078624014b ./gcc/testsuite/gcc.c-torture/unsorted/rel.c ! 3414105414b ./gcc/testsuite/gcc.c-torture/unsorted/rmsc.c ! 1012332947b ./gcc/testsuite/gcc.c-torture/unsorted/round.c ! 3178090569b ./gcc/testsuite/gcc.c-torture/unsorted/run.c ! 3862968210b ./gcc/testsuite/gcc.c-torture/unsorted/sar.c ! 1744325584b ./gcc/testsuite/gcc.c-torture/unsorted/s.c ! 2416335748b ./gcc/testsuite/gcc.c-torture/unsorted/scal.c ! 4292026279b ./gcc/testsuite/gcc.c-torture/unsorted/sc.c ! 1669731371b ./gcc/testsuite/gcc.c-torture/unsorted/scc.c ! 3073011184b ./gcc/testsuite/gcc.c-torture/unsorted/scond.c ! 4127283390b ./gcc/testsuite/gcc.c-torture/unsorted/selfrec.c ! 772856379b ./gcc/testsuite/gcc.c-torture/unsorted/seq.c ! 3595435741b ./gcc/testsuite/gcc.c-torture/unsorted/set386.c ! 772098437b ./gcc/testsuite/gcc.c-torture/unsorted/set88.c ! 1791217871b ./gcc/testsuite/gcc.c-torture/unsorted/SFset.c ! 2510322715b ./gcc/testsuite/gcc.c-torture/unsorted/shand.c ! 1917728540b ./gcc/testsuite/gcc.c-torture/unsorted/sh.c ! 369189446b ./gcc/testsuite/gcc.c-torture/unsorted/shft.c ! 786362264b ./gcc/testsuite/gcc.c-torture/unsorted/shift.c ! 1326810661b ./gcc/testsuite/gcc.c-torture/unsorted/shloop.c ! 1731774655b ./gcc/testsuite/gcc.c-torture/unsorted/shm.c ! 3855537843b ./gcc/testsuite/gcc.c-torture/unsorted/SIcmp.c ! 3198420130b ./gcc/testsuite/gcc.c-torture/unsorted/signext2.c ! 3333038544b ./gcc/testsuite/gcc.c-torture/unsorted/signext.c ! 1627754274b ./gcc/testsuite/gcc.c-torture/unsorted/sim.c ! 380795934b ./gcc/testsuite/gcc.c-torture/unsorted/simple.c ! 2010223878b ./gcc/testsuite/gcc.c-torture/unsorted/SIset.c ! 927966180b ./gcc/testsuite/gcc.c-torture/unsorted/sne.c ! 1732276088b ./gcc/testsuite/gcc.c-torture/unsorted/sound.c ! 1462108320b ./gcc/testsuite/gcc.c-torture/unsorted/sparcbug.c ! 680850660b ./gcc/testsuite/gcc.c-torture/unsorted/speed.c ! 1459712797b ./gcc/testsuite/gcc.c-torture/unsorted/stor.c ! 3521937419b ./gcc/testsuite/gcc.c-torture/unsorted/store0.c ! 429514643b ./gcc/testsuite/gcc.c-torture/unsorted/storecc.c ! 2367209182b ./gcc/testsuite/gcc.c-torture/unsorted/str.c ! 1212744014b ./gcc/testsuite/gcc.c-torture/unsorted/stru.c ! 2936891454b ./gcc/testsuite/gcc.c-torture/unsorted/structret.c ! 1723639277b ./gcc/testsuite/gcc.c-torture/unsorted/stuct.c ! 3579655725b ./gcc/testsuite/gcc.c-torture/unsorted/sub32.c ! 2225754564b ./gcc/testsuite/gcc.c-torture/unsorted/subcc.c ! 1610852268b ./gcc/testsuite/gcc.c-torture/unsorted/subcse.c ! 1291307272b ./gcc/testsuite/gcc.c-torture/unsorted/sym.c ! 319785041b ./gcc/testsuite/gcc.c-torture/unsorted/symconst.c ! 1215688317b ./gcc/testsuite/gcc.c-torture/unsorted/t.c ! 3564367767b ./gcc/testsuite/gcc.c-torture/unsorted/test.c ! 585245677b ./gcc/testsuite/gcc.c-torture/unsorted/test-flow.c ! 1417505636b ./gcc/testsuite/gcc.c-torture/unsorted/test-loop.c ! 1907124578b ./gcc/testsuite/gcc.c-torture/unsorted/time.c ! 316618822b ./gcc/testsuite/gcc.c-torture/unsorted/tmp.c ! 551299652b ./gcc/testsuite/gcc.c-torture/unsorted/trivial.c ! 54055479b ./gcc/testsuite/gcc.c-torture/unsorted/trunc.c ! 1458206113b ./gcc/testsuite/gcc.c-torture/unsorted/u.c ! 620556027b ./gcc/testsuite/gcc.c-torture/unsorted/udconvert.c ! 4030884798b ./gcc/testsuite/gcc.c-torture/unsorted/udivmod4.c ! 367886956b ./gcc/testsuite/gcc.c-torture/unsorted/UHIcmp.c ! 2240659922b ./gcc/testsuite/gcc.c-torture/unsorted/uns.c ! 434767322b ./gcc/testsuite/gcc.c-torture/unsorted/unsorted.exp ! 4067751424b ./gcc/testsuite/gcc.c-torture/unsorted/uns_tst.c ! 3380740291b ./gcc/testsuite/gcc.c-torture/unsorted/UQIcmp.c ! 3065994513b ./gcc/testsuite/gcc.c-torture/unsorted/USIcmp.c ! 3061572007b ./gcc/testsuite/gcc.c-torture/unsorted/uuarg.c ! 339227429b ./gcc/testsuite/gcc.c-torture/unsorted/v.c ! 97022866b ./gcc/testsuite/gcc.c-torture/unsorted/w.c ! 502682554b ./gcc/testsuite/gcc.c-torture/unsorted/ww.c ! 1561412324b ./gcc/testsuite/gcc.c-torture/unsorted/xb.c ! 3522679530b ./gcc/testsuite/gcc.c-torture/unsorted/xbg.c ! 2143513908b ./gcc/testsuite/gcc.c-torture/unsorted/x.c ! 2513066849b ./gcc/testsuite/gcc.c-torture/unsorted/xc.c ! 3791802167b ./gcc/testsuite/gcc.c-torture/unsorted/xcsebug.c ! 753765877b ./gcc/testsuite/gcc.c-torture/unsorted/xdi.c ! 2449229476b ./gcc/testsuite/gcc.c-torture/unsorted/xfoo.c ! 1976729056b ./gcc/testsuite/gcc.c-torture/unsorted/xi.c ! 467677832b ./gcc/testsuite/gcc.c-torture/unsorted/xlop.c ! 2772134709b ./gcc/testsuite/gcc.c-torture/unsorted/xmtst.c ! 2887718336b ./gcc/testsuite/gcc.c-torture/unsorted/xneg.c ! 891585403b ./gcc/testsuite/gcc.c-torture/unsorted/xopt.c ! 3158383083b ./gcc/testsuite/gcc.c-torture/unsorted/xor.c ! 2275025612b ./gcc/testsuite/gcc.c-torture/unsorted/xorn.c ! 696616007b ./gcc/testsuite/gcc.c-torture/unsorted/xp.c ! 3369544877b ./gcc/testsuite/gcc.c-torture/unsorted/xpp.c ! 687461532b ./gcc/testsuite/gcc.c-torture/unsorted/xs.c ! 2453856793b ./gcc/testsuite/gcc.c-torture/unsorted/xsh.c ! 749676174b ./gcc/testsuite/gcc.c-torture/unsorted/xz.c ! 3236233174b ./gcc/testsuite/gcc.c-torture/unsorted/xzz.c ! 1020735670b ./gcc/testsuite/gcc.dg/20000108-1.c ! 289377156b ./gcc/testsuite/gcc.dg/20000111-1.c ! 441096099b ./gcc/testsuite/gcc.dg/20000609-1.c ! 843859427b ./gcc/testsuite/gcc.dg/20000614-1.c ! 3590467322b ./gcc/testsuite/gcc.dg/20000614-2.c ! 2687914259b ./gcc/testsuite/gcc.dg/20000623-1.c ! 1697494088b ./gcc/testsuite/gcc.dg/20000629-1.c ! 2411171658b ./gcc/testsuite/gcc.dg/20000707-1.c ! 1242354775b ./gcc/testsuite/gcc.dg/20000715-1.c ! 2414727429b ./gcc/testsuite/gcc.dg/20000720-1.c ! 2628509241b ./gcc/testsuite/gcc.dg/20000724-1.c ! 855317863b ./gcc/testsuite/gcc.dg/20000807-1.c ! 2282190390b ./gcc/testsuite/gcc.dg/20000904-1.c ! 1205584698b ./gcc/testsuite/gcc.dg/20000906-1.c ! 2401733773b ./gcc/testsuite/gcc.dg/20000926-1.c ! 912559247b ./gcc/testsuite/gcc.dg/20001009-1.c ! 4235098888b ./gcc/testsuite/gcc.dg/20001012-1.c ! 3084023965b ./gcc/testsuite/gcc.dg/20001012-2.c ! 2504286200b ./gcc/testsuite/gcc.dg/20001013-1.c ! 989710521b ./gcc/testsuite/gcc.dg/20001023-1.c ! 2648600842b ./gcc/testsuite/gcc.dg/20001101-1.c ! 452608955b ./gcc/testsuite/gcc.dg/20001102-1.c ! 2644591049b ./gcc/testsuite/gcc.dg/20001108-1.c ! 3796315325b ./gcc/testsuite/gcc.dg/20001116-1.c ! 280677441b ./gcc/testsuite/gcc.dg/20001117-1.c ! 752060605b ./gcc/testsuite/gcc.dg/20001127-1.c ! 1243003570b ./gcc/testsuite/gcc.dg/20001201-1.c ! 1646064105b ./gcc/testsuite/gcc.dg/20001228-1.c ! 2498549558b ./gcc/testsuite/gcc.dg/20010202-1.c ! 2616951355b ./gcc/testsuite/gcc.dg/20010405-1.c ! 2545788691b ./gcc/testsuite/gcc.dg/20010423-1.c ! 3041407018b ./gcc/testsuite/gcc.dg/20010520-1.c ! 3520626317b ./gcc/testsuite/gcc.dg/20010622-1.c ! 2877988798b ./gcc/testsuite/gcc.dg/20010822-1.c ! 2149609410b ./gcc/testsuite/gcc.dg/20010912-1.c ! 1230888954b ./gcc/testsuite/gcc.dg/20011008-1.c ! 2932858639b ./gcc/testsuite/gcc.dg/20011008-2.c ! 2130390160b ./gcc/testsuite/gcc.dg/20011009-1.c ! 1094879191b ./gcc/testsuite/gcc.dg/20011015-1.c ! 3257749642b ./gcc/testsuite/gcc.dg/20011018-1.c ! 1920312928b ./gcc/testsuite/gcc.dg/20011021-1.c ! 1850474246b ./gcc/testsuite/gcc.dg/20011029-2.c ! 1124303586b ./gcc/testsuite/gcc.dg/20011107-1.c ! 3977721072b ./gcc/testsuite/gcc.dg/20011113-1.c ! 43629702b ./gcc/testsuite/gcc.dg/20011119-1.c ! 1970395659b ./gcc/testsuite/gcc.dg/20011127-1.c ! 640681704b ./gcc/testsuite/gcc.dg/20011130-1.c ! 715751053b ./gcc/testsuite/gcc.dg/20011214-1.c ! 3615281870b ./gcc/testsuite/gcc.dg/20020103-1.c ! 2180708198b ./gcc/testsuite/gcc.dg/20020104-1.c ! 98244853b ./gcc/testsuite/gcc.dg/20020108-1.c ! 951724852b ./gcc/testsuite/gcc.dg/20020115-1.c ! 785896302b ./gcc/testsuite/gcc.dg/20020116-1.c ! 3842134030b ./gcc/testsuite/gcc.dg/20020116-2.c ! 4113077329b ./gcc/testsuite/gcc.dg/20020118-1.c ! 3751699275b ./gcc/testsuite/gcc.dg/20020122-1.c ! 150189901b ./gcc/testsuite/gcc.dg/20020122-2.c ! 57782331b ./gcc/testsuite/gcc.dg/20020122-3.c ! 2367653115b ./gcc/testsuite/gcc.dg/20020122-4.c ! 4139034769b ./gcc/testsuite/gcc.dg/20020201-1.c ! 205098899b ./gcc/testsuite/gcc.dg/20020201-2.c ! 821274050b ./gcc/testsuite/gcc.dg/20020201-3.c ! 2936802890b ./gcc/testsuite/gcc.dg/20020201-4.c ! 2531686627b ./gcc/testsuite/gcc.dg/20020206-1.c ! 3783933618b ./gcc/testsuite/gcc.dg/20020210-1.c ! 3546737192b ./gcc/testsuite/gcc.dg/20020218-1.c ! 819933725b ./gcc/testsuite/gcc.dg/20020219-1.c ! 794792782b ./gcc/testsuite/gcc.dg/20020220-1.c ! 1662033181b ./gcc/testsuite/gcc.dg/20020220-2.c ! 2954578455b ./gcc/testsuite/gcc.dg/20020222-1.c ! 2546434352b ./gcc/testsuite/gcc.dg/20020224-1.c ! 627755992b ./gcc/testsuite/gcc.dg/20020304-1.c ! 2738421039b ./gcc/testsuite/gcc.dg/20020310-1.c ! 767384458b ./gcc/testsuite/gcc.dg/20020312-1.c ! 2062142429b ./gcc/testsuite/gcc.dg/20020312-2.c ! 353733237b ./gcc/testsuite/gcc.dg/20020313-1.c ! 663674028b ./gcc/testsuite/gcc.dg/20020319-1.c ! 3802202669b ./gcc/testsuite/gcc.dg/20020326-1.c ! 575770214b ./gcc/testsuite/gcc.dg/20020411-1.c ! 2767099233b ./gcc/testsuite/gcc.dg/20020415-1.c ! 2427264054b ./gcc/testsuite/gcc.dg/20020416-1.c ! 1785651312b ./gcc/testsuite/gcc.dg/20020418-1.c ! 1527728757b ./gcc/testsuite/gcc.dg/20020418-2.c ! 19296994b ./gcc/testsuite/gcc.dg/20020425-1.c ! 2088656022b ./gcc/testsuite/gcc.dg/20020426-1.c ! 4234050901b ./gcc/testsuite/gcc.dg/20020426-2.c ! 3359725112b ./gcc/testsuite/gcc.dg/20020430-1.c ! 2963915296b ./gcc/testsuite/gcc.dg/20020503-1.c ! 3667555097b ./gcc/testsuite/gcc.dg/20020517-1.c ! 536325431b ./gcc/testsuite/gcc.dg/20020523-1.c ! 536325431b ./gcc/testsuite/gcc.dg/20020523-2.c ! 886670658b ./gcc/testsuite/gcc.dg/20020527-1.c ! 2086765142b ./gcc/testsuite/gcc.dg/20020530-1.c ! 4218205154b ./gcc/testsuite/gcc.dg/20020531-1.c ! 1411493320b ./gcc/testsuite/gcc.dg/20020607-1.c ! 1354165258b ./gcc/testsuite/gcc.dg/20020607-2.c ! 1518490714b ./gcc/testsuite/gcc.dg/20020616-1.c ! 2940242394b ./gcc/testsuite/gcc.dg/20020620-1.c ! 1126442809b ./gcc/testsuite/gcc.dg/20020919-1.c ! 1344027764b ./gcc/testsuite/gcc.dg/20020926-1.c ! 3573081438b ./gcc/testsuite/gcc.dg/20021006-1.c ! 344810811b ./gcc/testsuite/gcc.dg/20021014-1.c ! 759072094b ./gcc/testsuite/gcc.dg/20021018-1.c ! 2475506444b ./gcc/testsuite/gcc.dg/20021023-1.c ! 233701902b ./gcc/testsuite/gcc.dg/20021029-1.c ! 2468373945b ./gcc/testsuite/gcc.dg/20021029-2.c ! 2578785970b ./gcc/testsuite/gcc.dg/20021116-1.c ! 32314160b ./gcc/testsuite/gcc.dg/20030120-1.c ! 6501003b ./gcc/testsuite/gcc.dg/20030123-1.c ! 2206154706b ./gcc/testsuite/gcc.dg/20030129-1.c ! 4052537013b ./gcc/testsuite/gcc.dg/20030213-1.c ! 1045670620b ./gcc/testsuite/gcc.dg/20030225-1.c ! 11242163b ./gcc/testsuite/gcc.dg/20030309-1.c ! 539628878b ./gcc/testsuite/gcc.dg/20030321-1.c ! 3937697137b ./gcc/testsuite/gcc.dg/20030323-1.c ! 2744313002b ./gcc/testsuite/gcc.dg/20030324-1.c ! 3096769307b ./gcc/testsuite/gcc.dg/20030331-2.c ! 1058638767b ./gcc/testsuite/gcc.dg/20030414-1.c ! 562276436b ./gcc/testsuite/gcc.dg/20030625-1.c ! 234439247b ./gcc/testsuite/gcc.dg/20030627-1.c ! 2034015147b ./gcc/testsuite/gcc.dg/20030702-1.c ! 633614653b ./gcc/testsuite/gcc.dg/20030708-1.c ! 432289486b ./gcc/testsuite/gcc.dg/20030717-1.c ! 2732676543b ./gcc/testsuite/gcc.dg/20030721-1.c ! 2613783087b ./gcc/testsuite/gcc.dg/20030815-1.c ! 3262950551b ./gcc/testsuite/gcc.dg/20031002-1.c ! 3703962415b ./gcc/testsuite/gcc.dg/20031009-1.c ! 1577979025b ./gcc/testsuite/gcc.dg/920413-1.c ! 2176221389b ./gcc/testsuite/gcc.dg/940409-1.c ! 1567764883b ./gcc/testsuite/gcc.dg/940510-1.c ! 1435563142b ./gcc/testsuite/gcc.dg/951130-1.c ! 2196979187b ./gcc/testsuite/gcc.dg/980211-1.c ! 1568764691b ./gcc/testsuite/gcc.dg/980217-1.c ! 474510323b ./gcc/testsuite/gcc.dg/980226-1.c ! 2630738251b ./gcc/testsuite/gcc.dg/980312-1.c ! 2097327868b ./gcc/testsuite/gcc.dg/980313-1.c ! 372605499b ./gcc/testsuite/gcc.dg/980414-1.c ! 1500377530b ./gcc/testsuite/gcc.dg/980502-1.c ! 1541851881b ./gcc/testsuite/gcc.dg/980520-1.c ! 1113123204b ./gcc/testsuite/gcc.dg/980523-1.c ! 2389539979b ./gcc/testsuite/gcc.dg/980526-1.c ! 384442948b ./gcc/testsuite/gcc.dg/980709-1.c ! 1276688993b ./gcc/testsuite/gcc.dg/980816-1.c ! 2659217655b ./gcc/testsuite/gcc.dg/980827-1.c ! 844249748b ./gcc/testsuite/gcc.dg/990117-1.c ! 3592792935b ./gcc/testsuite/gcc.dg/990130-1.c ! 2565768458b ./gcc/testsuite/gcc.dg/990213-1.c ! 2125486048b ./gcc/testsuite/gcc.dg/990213-2.c ! 318703178b ./gcc/testsuite/gcc.dg/990214-1.c ! 1614449588b ./gcc/testsuite/gcc.dg/990424-1.c ! 1324715064b ./gcc/testsuite/gcc.dg/990506-0.c ! 714032148b ./gcc/testsuite/gcc.dg/990524-1.c ! 3071468415b ./gcc/testsuite/gcc.dg/991129-1.c ! 156954019b ./gcc/testsuite/gcc.dg/991209-1.c ! 1980057279b ./gcc/testsuite/gcc.dg/991214-1.c ! 3370443605b ./gcc/testsuite/gcc.dg/991230-1.c ! 382602831b ./gcc/testsuite/gcc.dg/alias-1.c ! 3861827683b ./gcc/testsuite/gcc.dg/alpha-base-1.c ! 3652428612b ./gcc/testsuite/gcc.dg/alpha-base-2.c ! 1456546896b ./gcc/testsuite/gcc.dg/alpha-cix-1.c ! 841368719b ./gcc/testsuite/gcc.dg/alpha-cix-2.c ! 293986620b ./gcc/testsuite/gcc.dg/alpha-max-1.c ! 3844320770b ./gcc/testsuite/gcc.dg/alpha-max-2.c ! 1751513009b ./gcc/testsuite/gcc.dg/altivec-1.c ! 181010449b ./gcc/testsuite/gcc.dg/altivec-2.c ! 967922284b ./gcc/testsuite/gcc.dg/altivec-3.c ! 93905551b ./gcc/testsuite/gcc.dg/altivec-4.c ! 3524513447b ./gcc/testsuite/gcc.dg/altivec-5.c ! 935607032b ./gcc/testsuite/gcc.dg/altivec-7.c ! 1396416814b ./gcc/testsuite/gcc.dg/altivec-8.c ! 1177846285b ./gcc/testsuite/gcc.dg/anon-struct-1.c ! 3330573194b ./gcc/testsuite/gcc.dg/anon-struct-2.c ! 3522520858b ./gcc/testsuite/gcc.dg/anon-struct-3.c ! 2000172397b ./gcc/testsuite/gcc.dg/arm-asm.c ! 1274871710b ./gcc/testsuite/gcc.dg/array-1.c ! 3861156036b ./gcc/testsuite/gcc.dg/array-2.c ! 1410330225b ./gcc/testsuite/gcc.dg/array-3.c ! 2440308460b ./gcc/testsuite/gcc.dg/array-4.c ! 2233987289b ./gcc/testsuite/gcc.dg/array-5.c ! 3636290766b ./gcc/testsuite/gcc.dg/array-6.c ! 2814093959b ./gcc/testsuite/gcc.dg/asm-1.c ! 3024001214b ./gcc/testsuite/gcc.dg/asm-2.c ! 2686162767b ./gcc/testsuite/gcc.dg/asm-3.c ! 339244874b ./gcc/testsuite/gcc.dg/asm-4.c ! 2673255882b ./gcc/testsuite/gcc.dg/asm-5.c ! 3512856485b ./gcc/testsuite/gcc.dg/asm-6.c ! 459130722b ./gcc/testsuite/gcc.dg/asm-7.c ! 2560291160b ./gcc/testsuite/gcc.dg/asm-fs-1.c ! 1287172903b ./gcc/testsuite/gcc.dg/asm-names.c ! 1099611642b ./gcc/testsuite/gcc.dg/asmreg-1.c ! 2801105283b ./gcc/testsuite/gcc.dg/attr-alwaysinline.c ! 3087367494b ./gcc/testsuite/gcc.dg/attr-invalid.c ! 1915283314b ./gcc/testsuite/gcc.dg/attr-nest.c ! 2689909602b ./gcc/testsuite/gcc.dg/attr-noinline.c ! 745375068b ./gcc/testsuite/gcc.dg/attr-used.c ! 3155000092b ./gcc/testsuite/gcc.dg/bconstp-1.c ! 15751103b ./gcc/testsuite/gcc.dg/bf-spl1.c ! 1274634279b ./gcc/testsuite/gcc.dg/bitfld-1.c ! 865608720b ./gcc/testsuite/gcc.dg/bitfld-2.c ! 2003841110b ./gcc/testsuite/gcc.dg/bitfld-3.c ! 719825537b ./gcc/testsuite/gcc.dg/bitfld-4.c ! 331669473b ./gcc/testsuite/gcc.dg/bitfld-5.c ! 2721476408b ./gcc/testsuite/gcc.dg/bitfld-6.c ! 2770733918b ./gcc/testsuite/gcc.dg/builtin-apply1.c ! 1594168367b ./gcc/testsuite/gcc.dg/builtin-choose-expr.c ! 10093864b ./gcc/testsuite/gcc.dg/builtin-inf-1.c ! 2462561678b ./gcc/testsuite/gcc.dg/builtin-prefetch-1.c ! 1407816576b ./gcc/testsuite/gcc.dg/builtins-1.c ! 3552134651b ./gcc/testsuite/gcc.dg/c90-arraydecl-1.c ! 2243816200b ./gcc/testsuite/gcc.dg/c90-array-lval-1.c ! 2768106060b ./gcc/testsuite/gcc.dg/c90-array-lval-2.c ! 4098525451b ./gcc/testsuite/gcc.dg/c90-array-lval-3.c ! 3655088604b ./gcc/testsuite/gcc.dg/c90-array-lval-4.c ! 1572913366b ./gcc/testsuite/gcc.dg/c90-array-lval-5.c ! 25327060b ./gcc/testsuite/gcc.dg/c90-array-lval-6.c ! 4018159207b ./gcc/testsuite/gcc.dg/c90-complex-1.c ! 3681535923b ./gcc/testsuite/gcc.dg/c90-complit-1.c ! 1705314837b ./gcc/testsuite/gcc.dg/c90-const-expr-1.c ! 78994009b ./gcc/testsuite/gcc.dg/c90-const-expr-2.c ! 822031417b ./gcc/testsuite/gcc.dg/c90-const-expr-3.c ! 3338177482b ./gcc/testsuite/gcc.dg/c90-digraph-1.c ! 3599184840b ./gcc/testsuite/gcc.dg/c90-enum-comma-1.c ! 4177353746b ./gcc/testsuite/gcc.dg/c90-flex-array-1.c ! 2306764382b ./gcc/testsuite/gcc.dg/c90-float-1.c ! 566533628b ./gcc/testsuite/gcc.dg/c90-fordecl-1.c ! 3347835572b ./gcc/testsuite/gcc.dg/c90-hexfloat-1.c ! 130898806b ./gcc/testsuite/gcc.dg/c90-hexfloat-2.c ! 2581693818b ./gcc/testsuite/gcc.dg/c90-idem-qual-1.c ! 596279025b ./gcc/testsuite/gcc.dg/c90-idem-qual-2.c ! 1581289258b ./gcc/testsuite/gcc.dg/c90-impl-decl-1.c ! 440307834b ./gcc/testsuite/gcc.dg/c90-impl-int-1.c ! 2344767678b ./gcc/testsuite/gcc.dg/c90-impl-int-2.c ! 970479166b ./gcc/testsuite/gcc.dg/c90-init-1.c ! 2729946148b ./gcc/testsuite/gcc.dg/c90-intconst-1.c ! 3559700294b ./gcc/testsuite/gcc.dg/c90-longlong-1.c ! 3728641939b ./gcc/testsuite/gcc.dg/c90-mixdecl-1.c ! 2576806337b ./gcc/testsuite/gcc.dg/c90-restrict-1.c ! 3688680206b ./gcc/testsuite/gcc.dg/c90-return-1.c ! 1775037086b ./gcc/testsuite/gcc.dg/c90-scope-1.c ! 2066437213b ./gcc/testsuite/gcc.dg/c90-vla-1.c ! 3554456685b ./gcc/testsuite/gcc.dg/c94-digraph-1.c ! 815267755b ./gcc/testsuite/gcc.dg/c99-arraydecl-1.c ! 1553286096b ./gcc/testsuite/gcc.dg/c99-array-lval-1.c ! 695388665b ./gcc/testsuite/gcc.dg/c99-array-lval-2.c ! 533861407b ./gcc/testsuite/gcc.dg/c99-array-lval-3.c ! 2215212813b ./gcc/testsuite/gcc.dg/c99-array-lval-4.c ! 3070583409b ./gcc/testsuite/gcc.dg/c99-array-lval-5.c ! 144287683b ./gcc/testsuite/gcc.dg/c99-array-lval-6.c ! 1817213908b ./gcc/testsuite/gcc.dg/c99-array-nonobj-1.c ! 2980400116b ./gcc/testsuite/gcc.dg/c99-bool-1.c ! 2269932988b ./gcc/testsuite/gcc.dg/c99-complex-1.c ! 820370146b ./gcc/testsuite/gcc.dg/c99-complex-2.c ! 3348642281b ./gcc/testsuite/gcc.dg/c99-complit-1.c ! 2252128544b ./gcc/testsuite/gcc.dg/c99-complit-2.c ! 1355429032b ./gcc/testsuite/gcc.dg/c99-condexpr-1.c ! 1666861367b ./gcc/testsuite/gcc.dg/c99-const-expr-1.c ! 1567288443b ./gcc/testsuite/gcc.dg/c99-const-expr-2.c ! 1530464516b ./gcc/testsuite/gcc.dg/c99-const-expr-3.c ! 2443028402b ./gcc/testsuite/gcc.dg/c99-digraph-1.c ! 436400556b ./gcc/testsuite/gcc.dg/c99-enum-comma-1.c ! 3680360076b ./gcc/testsuite/gcc.dg/c99-flex-array-1.c ! 1133393573b ./gcc/testsuite/gcc.dg/c99-flex-array-2.c ! 847128646b ./gcc/testsuite/gcc.dg/c99-flex-array-3.c ! 3786940747b ./gcc/testsuite/gcc.dg/c99-flex-array-4.c ! 4185875504b ./gcc/testsuite/gcc.dg/c99-float-1.c ! 553627065b ./gcc/testsuite/gcc.dg/c99-fordecl-1.c ! 561068221b ./gcc/testsuite/gcc.dg/c99-fordecl-2.c ! 2859208293b ./gcc/testsuite/gcc.dg/c99-func-1.c ! 1694776826b ./gcc/testsuite/gcc.dg/c99-func-2.c ! 2857481018b ./gcc/testsuite/gcc.dg/c99-func-3.c ! 3824254533b ./gcc/testsuite/gcc.dg/c99-func-4.c ! 403500133b ./gcc/testsuite/gcc.dg/c99-hexfloat-1.c ! 1547017269b ./gcc/testsuite/gcc.dg/c99-hexfloat-2.c ! 1046797268b ./gcc/testsuite/gcc.dg/c99-idem-qual-1.c ! 2591670319b ./gcc/testsuite/gcc.dg/c99-idem-qual-2.c ! 1293044648b ./gcc/testsuite/gcc.dg/c99-impl-decl-1.c ! 818104690b ./gcc/testsuite/gcc.dg/c99-impl-int-1.c ! 2312236475b ./gcc/testsuite/gcc.dg/c99-impl-int-2.c ! 829207642b ./gcc/testsuite/gcc.dg/c99-init-1.c ! 938647013b ./gcc/testsuite/gcc.dg/c99-init-2.c ! 205310301b ./gcc/testsuite/gcc.dg/c99-intconst-1.c ! 336478880b ./gcc/testsuite/gcc.dg/c99-longlong-1.c ! 2179124750b ./gcc/testsuite/gcc.dg/c99-main-1.c ! 1603510892b ./gcc/testsuite/gcc.dg/c99-mixdecl-1.c ! 2789813637b ./gcc/testsuite/gcc.dg/c99-restrict-1.c ! 1090698500b ./gcc/testsuite/gcc.dg/c99-return-1.c ! 1305485104b ./gcc/testsuite/gcc.dg/c99-scope-1.c ! 328628580b ./gcc/testsuite/gcc.dg/c99-scope-2.c ! 1500087630b ./gcc/testsuite/gcc.dg/c99-tag-1.c ! 3664842681b ./gcc/testsuite/gcc.dg/c99-vla-1.c ! 3333661125b ./gcc/testsuite/gcc.dg/cast-qual-1.c ! 1853040812b ./gcc/testsuite/gcc.dg/cast-qual-2.c ! 1372465540b ./gcc/testsuite/gcc.dg/cleanup-1.c ! 2064728493b ./gcc/testsuite/gcc.dg/cleanup-2.c ! 65361233b ./gcc/testsuite/gcc.dg/cleanup-3.c ! 3052196324b ./gcc/testsuite/gcc.dg/cleanup-4.c ! 2857684792b ./gcc/testsuite/gcc.dg/cleanup-5.c ! 1833253837b ./gcc/testsuite/gcc.dg/cleanup-6.c ! 1455023164b ./gcc/testsuite/gcc.dg/cleanup-7.c ! 3509657813b ./gcc/testsuite/gcc.dg/clobbers.c ! 3796475762b ./gcc/testsuite/gcc.dg/compare1.c ! 446234451b ./gcc/testsuite/gcc.dg/compare2.c ! 1929905505b ./gcc/testsuite/gcc.dg/compare3.c ! 4172088563b ./gcc/testsuite/gcc.dg/compare4.c ! 2873193357b ./gcc/testsuite/gcc.dg/compare5.c ! 3985736899b ./gcc/testsuite/gcc.dg/compare6.c ! 3887990335b ./gcc/testsuite/gcc.dg/compare7.c ! 2818358019b ./gcc/testsuite/gcc.dg/complete-port.c ! 720344318b ./gcc/testsuite/gcc.dg/concat2.c ! 2444556566b ./gcc/testsuite/gcc.dg/concat.c ! 872352985b ./gcc/testsuite/gcc.dg/conv-1.c ! 2296607049b ./gcc/testsuite/gcc.dg/cpp/19921210-1.c ! 446012754b ./gcc/testsuite/gcc.dg/cpp/19930510-1.c ! 1310331126b ./gcc/testsuite/gcc.dg/cpp/19940712-1a.h ! 1255987496b ./gcc/testsuite/gcc.dg/cpp/19940712-1b.h ! 3035400854b ./gcc/testsuite/gcc.dg/cpp/19940712-1.c ! 3911462043b ./gcc/testsuite/gcc.dg/cpp/19940712-1.h ! 3107147397b ./gcc/testsuite/gcc.dg/cpp/19951025-1.c ! 1152006619b ./gcc/testsuite/gcc.dg/cpp/19951227-1.c ! 3844252401b ./gcc/testsuite/gcc.dg/cpp/19960224-1.c ! 2681484848b ./gcc/testsuite/gcc.dg/cpp/19990119-1.c ! 152529314b ./gcc/testsuite/gcc.dg/cpp/19990228-1.c ! 2850976318b ./gcc/testsuite/gcc.dg/cpp/19990407-1.c ! 1821165639b ./gcc/testsuite/gcc.dg/cpp/19990409-1.c ! 3140711711b ./gcc/testsuite/gcc.dg/cpp/19990413-1.c ! 3962958732b ./gcc/testsuite/gcc.dg/cpp/20000127-1.c ! 2271984635b ./gcc/testsuite/gcc.dg/cpp/20000129-1.c ! 2675766007b ./gcc/testsuite/gcc.dg/cpp/20000207-1.c ! 4123239500b ./gcc/testsuite/gcc.dg/cpp/20000207-2.c ! 4036437808b ./gcc/testsuite/gcc.dg/cpp/20000209-1.c ! 1472416455b ./gcc/testsuite/gcc.dg/cpp/20000209-2.c ! 2174334870b ./gcc/testsuite/gcc.dg/cpp/20000301-1.c ! 1872528864b ./gcc/testsuite/gcc.dg/cpp/20000419-1.c ! 2720098340b ./gcc/testsuite/gcc.dg/cpp/20000519-1.c ! 96666994b ./gcc/testsuite/gcc.dg/cpp/20000529-1.c ! 1226501171b ./gcc/testsuite/gcc.dg/cpp/20000625-1.c ! 3024473110b ./gcc/testsuite/gcc.dg/cpp/20000627-1.c ! 1252878971b ./gcc/testsuite/gcc.dg/cpp/20000628-1a.h ! 3176910360b ./gcc/testsuite/gcc.dg/cpp/20000628-1.c ! 302522843b ./gcc/testsuite/gcc.dg/cpp/20000628-1.h ! 3939185973b ./gcc/testsuite/gcc.dg/cpp/20000725-1.c ! 3467950758b ./gcc/testsuite/gcc.dg/cpp/20020927-1.c ! 562036807b ./gcc/testsuite/gcc.dg/cpp/arith-1.c ! 330742469b ./gcc/testsuite/gcc.dg/cpp/arith-3.c ! 3918751425b ./gcc/testsuite/gcc.dg/cpp/assembl2.S ! 2327987352b ./gcc/testsuite/gcc.dg/cpp/assembler.S ! 2692554582b ./gcc/testsuite/gcc.dg/cpp/assert1.c ! 3542126362b ./gcc/testsuite/gcc.dg/cpp/assert2.c ! 1282180884b ./gcc/testsuite/gcc.dg/cpp/assert3.c ! 4028897631b ./gcc/testsuite/gcc.dg/cpp/avoidpaste1.c ! 1804955265b ./gcc/testsuite/gcc.dg/cpp/avoidpaste2.c ! 1837306227b ./gcc/testsuite/gcc.dg/cpp/backslash2.c ! 2909138544b ./gcc/testsuite/gcc.dg/cpp/backslash.c ! 1769035451b ./gcc/testsuite/gcc.dg/cpp/c89.c ! 205095111b ./gcc/testsuite/gcc.dg/cpp/c89-pedantic.c ! 925335145b ./gcc/testsuite/gcc.dg/cpp/c94.c ! 1661764059b ./gcc/testsuite/gcc.dg/cpp/c94-pedantic.c ! 3857361837b ./gcc/testsuite/gcc.dg/cpp/c99.c ! 3306050866b ./gcc/testsuite/gcc.dg/cpp/c99-pedantic.c ! 3516322832b ./gcc/testsuite/gcc.dg/cpp/charconst-2.c ! 2303966988b ./gcc/testsuite/gcc.dg/cpp/charconst-3.c ! 31571692b ./gcc/testsuite/gcc.dg/cpp/charconst-4.c ! 3858286956b ./gcc/testsuite/gcc.dg/cpp/charconst.c ! 1491584113b ./gcc/testsuite/gcc.dg/cpp/cmdlne-C2.c ! 3355056256b ./gcc/testsuite/gcc.dg/cpp/cmdlne-C.c ! 2496993356b ./gcc/testsuite/gcc.dg/cpp/cmdlne-dD.c ! 609905807b ./gcc/testsuite/gcc.dg/cpp/cmdlne-dD-dM.c ! 1600174935b ./gcc/testsuite/gcc.dg/cpp/cmdlne-dD-M.c ! 3705836802b ./gcc/testsuite/gcc.dg/cpp/cmdlne-dI-M.c ! 3088209084b ./gcc/testsuite/gcc.dg/cpp/cmdlne-dI-M.h ! 1486055617b ./gcc/testsuite/gcc.dg/cpp/cmdlne-dM.c ! 1101687822b ./gcc/testsuite/gcc.dg/cpp/cmdlne-dM-dD.c ! 932524367b ./gcc/testsuite/gcc.dg/cpp/cmdlne-dM-M.c ! 553926808b ./gcc/testsuite/gcc.dg/cpp/cmdlne-dN-M.c ! 1363982392b ./gcc/testsuite/gcc.dg/cpp/cmdlne-M.c ! 2953736128b ./gcc/testsuite/gcc.dg/cpp/cmdlne-P.c ! 3367113455b ./gcc/testsuite/gcc.dg/cpp/cpp.exp ! 3494213157b ./gcc/testsuite/gcc.dg/cpp/cxxcom1.c ! 3135164554b ./gcc/testsuite/gcc.dg/cpp/cxxcom2.c ! 10664058b ./gcc/testsuite/gcc.dg/cpp/defined.c ! 1438288565b ./gcc/testsuite/gcc.dg/cpp/digraph1.c ! 1288261895b ./gcc/testsuite/gcc.dg/cpp/digraph2.c ! 2068680422b ./gcc/testsuite/gcc.dg/cpp/digraphs.c ! 2630139647b ./gcc/testsuite/gcc.dg/cpp/direct2.c ! 2931467115b ./gcc/testsuite/gcc.dg/cpp/direct2s.c ! 2352238865b ./gcc/testsuite/gcc.dg/cpp/directiv.c ! 3129493545b ./gcc/testsuite/gcc.dg/cpp/endif.c ! 3479505545b ./gcc/testsuite/gcc.dg/cpp/endif.h ! 837832505b ./gcc/testsuite/gcc.dg/cpp/endif-pedantic1.c ! 3212345923b ./gcc/testsuite/gcc.dg/cpp/endif-pedantic2.c ! 2483248350b ./gcc/testsuite/gcc.dg/cpp/escape-1.c ! 1730195871b ./gcc/testsuite/gcc.dg/cpp/escape-2.c ! 3767981014b ./gcc/testsuite/gcc.dg/cpp/escape.c ! 52547616b ./gcc/testsuite/gcc.dg/cpp/expr.c ! 2035166761b ./gcc/testsuite/gcc.dg/cpp/extratokens2.c ! 2697913940b ./gcc/testsuite/gcc.dg/cpp/extratokens.c ! 905736b ./gcc/testsuite/gcc.dg/cpp/fpreprocessed.c ! 3280737784b ./gcc/testsuite/gcc.dg/cpp/gnuc89.c ! 3959604708b ./gcc/testsuite/gcc.dg/cpp/gnuc89-pedantic.c ! 1263189585b ./gcc/testsuite/gcc.dg/cpp/gnuc99.c ! 1601787549b ./gcc/testsuite/gcc.dg/cpp/gnuc99-pedantic.c ! 4214308249b ./gcc/testsuite/gcc.dg/cpp/hash1.c ! 2366342564b ./gcc/testsuite/gcc.dg/cpp/ident.c ! 2665156700b ./gcc/testsuite/gcc.dg/cpp/if-1.c ! 3352628668b ./gcc/testsuite/gcc.dg/cpp/if-2.c ! 489101197b ./gcc/testsuite/gcc.dg/cpp/if-4.c ! 882715641b ./gcc/testsuite/gcc.dg/cpp/if-5.c ! 4254343746b ./gcc/testsuite/gcc.dg/cpp/if-cexp.c ! 3012723046b ./gcc/testsuite/gcc.dg/cpp/if-mop.c ! 1884204635b ./gcc/testsuite/gcc.dg/cpp/if-mpar.c ! 3400278075b ./gcc/testsuite/gcc.dg/cpp/if-oppr.c ! 1490350403b ./gcc/testsuite/gcc.dg/cpp/if-paren.c ! 3952218044b ./gcc/testsuite/gcc.dg/cpp/if-sc.c ! 2598999845b ./gcc/testsuite/gcc.dg/cpp/if-shift.c ! 3593199515b ./gcc/testsuite/gcc.dg/cpp/if-unary.c ! 1252723901b ./gcc/testsuite/gcc.dg/cpp/inc/foo.h ! 2159210260b ./gcc/testsuite/gcc.dg/cpp/include1.c ! 2421188667b ./gcc/testsuite/gcc.dg/cpp/include2.c ! 653081234b ./gcc/testsuite/gcc.dg/cpp/include3.c ! 104604027b ./gcc/testsuite/gcc.dg/cpp/lexident.c ! 2395885746b ./gcc/testsuite/gcc.dg/cpp/lexnum.c ! 3213919551b ./gcc/testsuite/gcc.dg/cpp/lexstrng.c ! 3897829843b ./gcc/testsuite/gcc.dg/cpp/line1.c ! 100687188b ./gcc/testsuite/gcc.dg/cpp/line2.c ! 567370415b ./gcc/testsuite/gcc.dg/cpp/line3.c ! 1626475943b ./gcc/testsuite/gcc.dg/cpp/line4.c ! 3632976596b ./gcc/testsuite/gcc.dg/cpp/line5.c ! 3868918885b ./gcc/testsuite/gcc.dg/cpp/maccom1.c ! 2390179144b ./gcc/testsuite/gcc.dg/cpp/maccom2.c ! 4234015141b ./gcc/testsuite/gcc.dg/cpp/maccom3.c ! 1935439548b ./gcc/testsuite/gcc.dg/cpp/maccom4.c ! 319559313b ./gcc/testsuite/gcc.dg/cpp/maccom5.c ! 2833851089b ./gcc/testsuite/gcc.dg/cpp/maccom6.c ! 2536504561b ./gcc/testsuite/gcc.dg/cpp/mac-dir-1.c ! 2457364874b ./gcc/testsuite/gcc.dg/cpp/mac-dir-2.c ! 1379729851b ./gcc/testsuite/gcc.dg/cpp/macro10.c ! 3340222164b ./gcc/testsuite/gcc.dg/cpp/macro11.c ! 271504116b ./gcc/testsuite/gcc.dg/cpp/macro1.c ! 4270051746b ./gcc/testsuite/gcc.dg/cpp/macro2.c ! 2969168869b ./gcc/testsuite/gcc.dg/cpp/macro3.c ! 1188431715b ./gcc/testsuite/gcc.dg/cpp/macro4.c ! 1628527586b ./gcc/testsuite/gcc.dg/cpp/macro5.c ! 2368380713b ./gcc/testsuite/gcc.dg/cpp/macro6.c ! 2072551274b ./gcc/testsuite/gcc.dg/cpp/macro7.c ! 613805223b ./gcc/testsuite/gcc.dg/cpp/macro8.c ! 2926705982b ./gcc/testsuite/gcc.dg/cpp/macro9.c ! 259331101b ./gcc/testsuite/gcc.dg/cpp/macsyntx.c ! 3610840456b ./gcc/testsuite/gcc.dg/cpp/mi1.c ! 4261701187b ./gcc/testsuite/gcc.dg/cpp/mi1cc.h ! 419074706b ./gcc/testsuite/gcc.dg/cpp/mi1c.h ! 3904566528b ./gcc/testsuite/gcc.dg/cpp/mi1nd.h ! 3410643645b ./gcc/testsuite/gcc.dg/cpp/mi1ndp.h ! 2792742846b ./gcc/testsuite/gcc.dg/cpp/mi1x.h ! 2971656236b ./gcc/testsuite/gcc.dg/cpp/mi2a.h ! 2249557715b ./gcc/testsuite/gcc.dg/cpp/mi2b.h ! 2949078889b ./gcc/testsuite/gcc.dg/cpp/mi2.c ! 975601727b ./gcc/testsuite/gcc.dg/cpp/mi2c.h ! 1340631459b ./gcc/testsuite/gcc.dg/cpp/mi3.c ! 3410155219b ./gcc/testsuite/gcc.dg/cpp/mi3.def ! 1784999780b ./gcc/testsuite/gcc.dg/cpp/mi3.h ! 3722098684b ./gcc/testsuite/gcc.dg/cpp/mi4.c ! 1150462829b ./gcc/testsuite/gcc.dg/cpp/mi5.c ! 1358227252b ./gcc/testsuite/gcc.dg/cpp/mi6a.h ! 641332290b ./gcc/testsuite/gcc.dg/cpp/mi6b.h ! 1142195235b ./gcc/testsuite/gcc.dg/cpp/mi6.c ! 4070915278b ./gcc/testsuite/gcc.dg/cpp/mi6c.h ! 1337479900b ./gcc/testsuite/gcc.dg/cpp/mi6d.h ! 509977090b ./gcc/testsuite/gcc.dg/cpp/mi6e.h ! 3136816756b ./gcc/testsuite/gcc.dg/cpp/mi7a.h ! 3560454972b ./gcc/testsuite/gcc.dg/cpp/mi7b.h ! 734509647b ./gcc/testsuite/gcc.dg/cpp/mi7.c ! 1202755802b ./gcc/testsuite/gcc.dg/cpp/multiline.c ! 2266859121b ./gcc/testsuite/gcc.dg/cpp/paste10.c ! 4285709590b ./gcc/testsuite/gcc.dg/cpp/paste11.c ! 3149837578b ./gcc/testsuite/gcc.dg/cpp/paste12.c ! 903828210b ./gcc/testsuite/gcc.dg/cpp/paste13.c ! 3165908728b ./gcc/testsuite/gcc.dg/cpp/paste1.c ! 2468893035b ./gcc/testsuite/gcc.dg/cpp/paste2.c ! 3026273649b ./gcc/testsuite/gcc.dg/cpp/paste3.c ! 3812446689b ./gcc/testsuite/gcc.dg/cpp/paste4.c ! 4196513421b ./gcc/testsuite/gcc.dg/cpp/paste5.c ! 3141633537b ./gcc/testsuite/gcc.dg/cpp/paste6.c ! 2441365564b ./gcc/testsuite/gcc.dg/cpp/paste7.c ! 1061671229b ./gcc/testsuite/gcc.dg/cpp/paste8.c ! 2408632284b ./gcc/testsuite/gcc.dg/cpp/paste9.c ! 1004643236b ./gcc/testsuite/gcc.dg/cpp/poison.c ! 858950276b ./gcc/testsuite/gcc.dg/cpp/pragma-1.c ! 3534493797b ./gcc/testsuite/gcc.dg/cpp/_Pragma1.c ! 2473416313b ./gcc/testsuite/gcc.dg/cpp/pragma-2.c ! 4186091043b ./gcc/testsuite/gcc.dg/cpp/_Pragma2.c ! 1230813557b ./gcc/testsuite/gcc.dg/cpp/_Pragma3.c ! 3384939096b ./gcc/testsuite/gcc.dg/cpp/_Pragma4.c ! 678120078b ./gcc/testsuite/gcc.dg/cpp/_Pragma5.c ! 1107840471b ./gcc/testsuite/gcc.dg/cpp/redef1.c ! 1601641321b ./gcc/testsuite/gcc.dg/cpp/redef2.c ! 2157179075b ./gcc/testsuite/gcc.dg/cpp/redef3.c ! 2746819393b ./gcc/testsuite/gcc.dg/cpp/separate-1.c ! 2020720031b ./gcc/testsuite/gcc.dg/cpp/skipping2.c ! 3846911977b ./gcc/testsuite/gcc.dg/cpp/skipping.c ! 3826080641b ./gcc/testsuite/gcc.dg/cpp/spacing1.c ! 1299147601b ./gcc/testsuite/gcc.dg/cpp/spacing2.c ! 3081823659b ./gcc/testsuite/gcc.dg/cpp/strify1.c ! 3973832195b ./gcc/testsuite/gcc.dg/cpp/strify2.c ! 2418211010b ./gcc/testsuite/gcc.dg/cpp/strify3.c ! 2496189814b ./gcc/testsuite/gcc.dg/cpp/strp1.c ! 3609546715b ./gcc/testsuite/gcc.dg/cpp/strp2.c ! 3648062425b ./gcc/testsuite/gcc.dg/cpp/syshdr1.h ! 930452060b ./gcc/testsuite/gcc.dg/cpp/syshdr2.h ! 2075703559b ./gcc/testsuite/gcc.dg/cpp/syshdr.c ! 3898065321b ./gcc/testsuite/gcc.dg/cpp/syshdr.h ! 3033820257b ./gcc/testsuite/gcc.dg/cpp/sysmac1.c ! 4068510437b ./gcc/testsuite/gcc.dg/cpp/sysmac2.c ! 1977182375b ./gcc/testsuite/gcc.dg/cpp/trad/argcount.c ! 2662614668b ./gcc/testsuite/gcc.dg/cpp/trad/assembler.S ! 2692554582b ./gcc/testsuite/gcc.dg/cpp/trad/assert1.c ! 2998566071b ./gcc/testsuite/gcc.dg/cpp/trad/assert2.c ! 1282180884b ./gcc/testsuite/gcc.dg/cpp/trad/assert3.c ! 757236630b ./gcc/testsuite/gcc.dg/cpp/trad/builtins.c ! 4232160868b ./gcc/testsuite/gcc.dg/cpp/trad/builtins.h ! 190491925b ./gcc/testsuite/gcc.dg/cpp/trad/cmdlne-C2.c ! 2472826799b ./gcc/testsuite/gcc.dg/cpp/trad/cmdlne-C.c ! 2558565698b ./gcc/testsuite/gcc.dg/cpp/trad/cmdlne-dD.c ! 3710083041b ./gcc/testsuite/gcc.dg/cpp/trad/cmdlne-dM.c ! 2421283003b ./gcc/testsuite/gcc.dg/cpp/trad/comment-2.c ! 4034996363b ./gcc/testsuite/gcc.dg/cpp/trad/comment.c ! 283168914b ./gcc/testsuite/gcc.dg/cpp/trad/define.c ! 1611975625b ./gcc/testsuite/gcc.dg/cpp/trad/defined.c ! 3187301379b ./gcc/testsuite/gcc.dg/cpp/trad/directive.c ! 462047311b ./gcc/testsuite/gcc.dg/cpp/trad/escaped-eof.c ! 2227807358b ./gcc/testsuite/gcc.dg/cpp/trad/escaped-nl.c ! 3384760545b ./gcc/testsuite/gcc.dg/cpp/trad/funlike-2.c ! 3004870383b ./gcc/testsuite/gcc.dg/cpp/trad/funlike-3.c ! 3428926172b ./gcc/testsuite/gcc.dg/cpp/trad/funlike-4.c ! 2538194728b ./gcc/testsuite/gcc.dg/cpp/trad/funlike-5.c ! 2410104667b ./gcc/testsuite/gcc.dg/cpp/trad/funlike.c ! 4181249374b ./gcc/testsuite/gcc.dg/cpp/trad/hash.c ! 3396000556b ./gcc/testsuite/gcc.dg/cpp/trad/include.c ! 1593567097b ./gcc/testsuite/gcc.dg/cpp/trad/literals-1.c ! 349061295b ./gcc/testsuite/gcc.dg/cpp/trad/literals-2.c ! 4147882455b ./gcc/testsuite/gcc.dg/cpp/trad/maccom1.c ! 3160477466b ./gcc/testsuite/gcc.dg/cpp/trad/maccom2.c ! 1329336031b ./gcc/testsuite/gcc.dg/cpp/trad/maccom3.c ! 2109801015b ./gcc/testsuite/gcc.dg/cpp/trad/maccom4.c ! 570232206b ./gcc/testsuite/gcc.dg/cpp/trad/maccom6.c ! 487420591b ./gcc/testsuite/gcc.dg/cpp/trad/macroargs.c ! 2016512953b ./gcc/testsuite/gcc.dg/cpp/trad/mi1.c ! 419074706b ./gcc/testsuite/gcc.dg/cpp/trad/mi1c.h ! 3904566528b ./gcc/testsuite/gcc.dg/cpp/trad/mi1nd.h ! 3410643645b ./gcc/testsuite/gcc.dg/cpp/trad/mi1ndp.h ! 2792742846b ./gcc/testsuite/gcc.dg/cpp/trad/mi1x.h ! 2971656236b ./gcc/testsuite/gcc.dg/cpp/trad/mi2a.h ! 2249557715b ./gcc/testsuite/gcc.dg/cpp/trad/mi2b.h ! 2949078889b ./gcc/testsuite/gcc.dg/cpp/trad/mi2.c ! 975601727b ./gcc/testsuite/gcc.dg/cpp/trad/mi2c.h ! 1340631459b ./gcc/testsuite/gcc.dg/cpp/trad/mi3.c ! 3410155219b ./gcc/testsuite/gcc.dg/cpp/trad/mi3.def ! 1784999780b ./gcc/testsuite/gcc.dg/cpp/trad/mi3.h ! 3722098684b ./gcc/testsuite/gcc.dg/cpp/trad/mi4.c ! 2597798094b ./gcc/testsuite/gcc.dg/cpp/trad/mi5.c ! 1358227252b ./gcc/testsuite/gcc.dg/cpp/trad/mi6a.h ! 641332290b ./gcc/testsuite/gcc.dg/cpp/trad/mi6b.h ! 1142195235b ./gcc/testsuite/gcc.dg/cpp/trad/mi6.c ! 4070915278b ./gcc/testsuite/gcc.dg/cpp/trad/mi6c.h ! 1337479900b ./gcc/testsuite/gcc.dg/cpp/trad/mi6d.h ! 509977090b ./gcc/testsuite/gcc.dg/cpp/trad/mi6e.h ! 3136816756b ./gcc/testsuite/gcc.dg/cpp/trad/mi7a.h ! 3560454972b ./gcc/testsuite/gcc.dg/cpp/trad/mi7b.h ! 3905249952b ./gcc/testsuite/gcc.dg/cpp/trad/mi7.c ! 559595333b ./gcc/testsuite/gcc.dg/cpp/trad/null-drctv.c ! 199207201b ./gcc/testsuite/gcc.dg/cpp/trad/num-sign.c ! 1450713990b ./gcc/testsuite/gcc.dg/cpp/trad/paste.c ! 2091734769b ./gcc/testsuite/gcc.dg/cpp/trad/quote.c ! 3299778145b ./gcc/testsuite/gcc.dg/cpp/trad/recurse-1.c ! 1920549175b ./gcc/testsuite/gcc.dg/cpp/trad/recurse-2.c ! 4138311880b ./gcc/testsuite/gcc.dg/cpp/trad/recurse-3.c ! 2501127986b ./gcc/testsuite/gcc.dg/cpp/trad/redef1.c ! 756307914b ./gcc/testsuite/gcc.dg/cpp/trad/redef2.c ! 1229021684b ./gcc/testsuite/gcc.dg/cpp/trad/__STDC__.c ! 2436946679b ./gcc/testsuite/gcc.dg/cpp/trad/strify.c ! 3580519774b ./gcc/testsuite/gcc.dg/cpp/trad/trad.exp ! 2826500595b ./gcc/testsuite/gcc.dg/cpp/trad/uchar.c ! 3646320904b ./gcc/testsuite/gcc.dg/cpp/trad/Wunused.c ! 2247214341b ./gcc/testsuite/gcc.dg/cpp/trad/Wunused.h ! 580041869b ./gcc/testsuite/gcc.dg/cpp/trigraphs.c ! 3954705973b ./gcc/testsuite/gcc.dg/cpp/tr-paste.c ! 2720640173b ./gcc/testsuite/gcc.dg/cpp/tr-warn1.c ! 256738446b ./gcc/testsuite/gcc.dg/cpp/tr-warn2.c ! 3053015314b ./gcc/testsuite/gcc.dg/cpp/tr-warn3.c ! 2634569795b ./gcc/testsuite/gcc.dg/cpp/tr-warn4.c ! 733328423b ./gcc/testsuite/gcc.dg/cpp/tr-warn5.c ! 880495829b ./gcc/testsuite/gcc.dg/cpp/tr-warn6.c ! 2894747317b ./gcc/testsuite/gcc.dg/cpp/uchar-1.c ! 2806339500b ./gcc/testsuite/gcc.dg/cpp/uchar-3.c ! 3156619494b ./gcc/testsuite/gcc.dg/cpp/ucs.c ! 1271068491b ./gcc/testsuite/gcc.dg/cpp/unc1.c ! 2985690540b ./gcc/testsuite/gcc.dg/cpp/unc2.c ! 479621763b ./gcc/testsuite/gcc.dg/cpp/unc3.c ! 1549705287b ./gcc/testsuite/gcc.dg/cpp/unc4.c ! 1052162081b ./gcc/testsuite/gcc.dg/cpp/undef2.c ! 1278828881b ./gcc/testsuite/gcc.dg/cpp/vararg1.c ! 270851301b ./gcc/testsuite/gcc.dg/cpp/vararg2.c ! 203701001b ./gcc/testsuite/gcc.dg/cpp/vararg3.c ! 2222858341b ./gcc/testsuite/gcc.dg/cpp/vararg4.c ! 3684840524b ./gcc/testsuite/gcc.dg/cpp/wchar-1.c ! 2112571638b ./gcc/testsuite/gcc.dg/cpp/widestr1.c ! 3886684794b ./gcc/testsuite/gcc.dg/cpp/Wsignprom.c ! 1685485063b ./gcc/testsuite/gcc.dg/cpp/Wtrigraphs.c ! 2373291318b ./gcc/testsuite/gcc.dg/cpp/Wunknown-pragmas-1.c ! 3786746146b ./gcc/testsuite/gcc.dg/cpp/Wunused.c ! 2247214341b ./gcc/testsuite/gcc.dg/cpp/Wunused.h ! 966111785b ./gcc/testsuite/gcc.dg/darwin-abi-1.c ! 3955692120b ./gcc/testsuite/gcc.dg/darwin-ld-1.c ! 3377797610b ./gcc/testsuite/gcc.dg/darwin-ld-2.c ! 858483839b ./gcc/testsuite/gcc.dg/darwin-ld-3.c ! 2696702867b ./gcc/testsuite/gcc.dg/darwin-ld-4.c ! 587036301b ./gcc/testsuite/gcc.dg/darwin-ld-5.c ! 2478073469b ./gcc/testsuite/gcc.dg/debug/20000503-1.c ! 1850073884b ./gcc/testsuite/gcc.dg/debug/20010207-1.c ! 2575589968b ./gcc/testsuite/gcc.dg/debug/20011223-1.c ! 3480555031b ./gcc/testsuite/gcc.dg/debug/20020104-2.c ! 465470758b ./gcc/testsuite/gcc.dg/debug/20020220-1.c ! 38521003b ./gcc/testsuite/gcc.dg/debug/20020224-1.c ! 1897254689b ./gcc/testsuite/gcc.dg/debug/20020327-1.c ! 2095797855b ./gcc/testsuite/gcc.dg/debug/debug-1.c ! 936371752b ./gcc/testsuite/gcc.dg/debug/debug-2.c ! 1466203416b ./gcc/testsuite/gcc.dg/debug/debug-3.c ! 591803753b ./gcc/testsuite/gcc.dg/debug/debug-4.c ! 524177325b ./gcc/testsuite/gcc.dg/debug/debug-5.c ! 4017752601b ./gcc/testsuite/gcc.dg/debug/debug-6.c ! 2820451029b ./gcc/testsuite/gcc.dg/debug/debug.exp ! 3154398188b ./gcc/testsuite/gcc.dg/debug/dwarf2-1.c ! 3551380716b ./gcc/testsuite/gcc.dg/debug/dwarf2-2.c ! 1865154101b ./gcc/testsuite/gcc.dg/debug/trivial.c ! 2108424497b ./gcc/testsuite/gcc.dg/decl-1.c ! 3489735771b ./gcc/testsuite/gcc.dg/decl-2.c ! 219343109b ./gcc/testsuite/gcc.dg/decl-3.c ! 2106699188b ./gcc/testsuite/gcc.dg/deprecated.c ! 462220244b ./gcc/testsuite/gcc.dg/dg.exp ! 3005671194b ./gcc/testsuite/gcc.dg/divbyzero.c ! 3732188130b ./gcc/testsuite/gcc.dg/dll-1.c ! 3201339636b ./gcc/testsuite/gcc.dg/dll-2.c ! 4107998098b ./gcc/testsuite/gcc.dg/dll-3.c ! 38849204b ./gcc/testsuite/gcc.dg/dll-4.c ! 2018483943b ./gcc/testsuite/gcc.dg/doloop-1.c ! 65866289b ./gcc/testsuite/gcc.dg/duff-1.c ! 1064594641b ./gcc/testsuite/gcc.dg/duff-2.c ! 607403040b ./gcc/testsuite/gcc.dg/duff-3.c ! 3922657633b ./gcc/testsuite/gcc.dg/empty1.c ! 2135186629b ./gcc/testsuite/gcc.dg/enum1.c ! 1119508710b ./gcc/testsuite/gcc.dg/fastmath-1.c ! 709842397b ./gcc/testsuite/gcc.dg/fnegate-1.c ! 3222632325b ./gcc/testsuite/gcc.dg/format/array-1.c ! 1862455428b ./gcc/testsuite/gcc.dg/format/attr-1.c ! 3131101897b ./gcc/testsuite/gcc.dg/format/attr-2.c ! 3345098920b ./gcc/testsuite/gcc.dg/format/attr-3.c ! 1282524185b ./gcc/testsuite/gcc.dg/format/attr-4.c ! 2109942555b ./gcc/testsuite/gcc.dg/format/attr-5.c ! 1342273591b ./gcc/testsuite/gcc.dg/format/attr-6.c ! 3314290167b ./gcc/testsuite/gcc.dg/format/attr-7.c ! 2805119685b ./gcc/testsuite/gcc.dg/format/branch-1.c ! 753102824b ./gcc/testsuite/gcc.dg/format/builtin-1.c ! 2984579335b ./gcc/testsuite/gcc.dg/format/c90-printf-1.c ! 2152399739b ./gcc/testsuite/gcc.dg/format/c90-printf-2.c ! 576410250b ./gcc/testsuite/gcc.dg/format/c90-printf-3.c ! 1954948606b ./gcc/testsuite/gcc.dg/format/c90-scanf-1.c ! 461393812b ./gcc/testsuite/gcc.dg/format/c90-scanf-2.c ! 3343890566b ./gcc/testsuite/gcc.dg/format/c90-scanf-3.c ! 2060901849b ./gcc/testsuite/gcc.dg/format/c90-scanf-4.c ! 3830240101b ./gcc/testsuite/gcc.dg/format/c90-strftime-1.c ! 908665911b ./gcc/testsuite/gcc.dg/format/c90-strftime-2.c ! 2447449665b ./gcc/testsuite/gcc.dg/format/c94-printf-1.c ! 1772682986b ./gcc/testsuite/gcc.dg/format/c94-scanf-1.c ! 1572424421b ./gcc/testsuite/gcc.dg/format/c99-printf-1.c ! 1982196060b ./gcc/testsuite/gcc.dg/format/c99-printf-2.c ! 3845709577b ./gcc/testsuite/gcc.dg/format/c99-printf-3.c ! 319347872b ./gcc/testsuite/gcc.dg/format/c99-scanf-1.c ! 3735460767b ./gcc/testsuite/gcc.dg/format/c99-scanf-2.c ! 3432916856b ./gcc/testsuite/gcc.dg/format/c99-scanf-3.c ! 3177298628b ./gcc/testsuite/gcc.dg/format/c99-strftime-1.c ! 2090637496b ./gcc/testsuite/gcc.dg/format/c99-strftime-2.c ! 2345337374b ./gcc/testsuite/gcc.dg/format/diag-1.c ! 1250738052b ./gcc/testsuite/gcc.dg/format/errmk-1.c ! 1927556152b ./gcc/testsuite/gcc.dg/format/ext-1.c ! 230043853b ./gcc/testsuite/gcc.dg/format/ext-2.c ! 3735744313b ./gcc/testsuite/gcc.dg/format/ext-3.c ! 2104347788b ./gcc/testsuite/gcc.dg/format/ext-4.c ! 3870005152b ./gcc/testsuite/gcc.dg/format/ext-5.c ! 4154438977b ./gcc/testsuite/gcc.dg/format/ext-6.c ! 174407969b ./gcc/testsuite/gcc.dg/format/format.exp ! 2650327793b ./gcc/testsuite/gcc.dg/format/format.h ! 3030055438b ./gcc/testsuite/gcc.dg/format/miss-1.c ! 58040071b ./gcc/testsuite/gcc.dg/format/miss-2.c ! 1680800961b ./gcc/testsuite/gcc.dg/format/multattr-1.c ! 3511814217b ./gcc/testsuite/gcc.dg/format/multattr-2.c ! 1621224881b ./gcc/testsuite/gcc.dg/format/multattr-3.c ! 2482792163b ./gcc/testsuite/gcc.dg/format/no-exargs-1.c ! 3432514252b ./gcc/testsuite/gcc.dg/format/no-exargs-2.c ! 2335984266b ./gcc/testsuite/gcc.dg/format/nonlit-1.c ! 3055177111b ./gcc/testsuite/gcc.dg/format/nonlit-2.c ! 449451912b ./gcc/testsuite/gcc.dg/format/nonlit-3.c ! 4199776146b ./gcc/testsuite/gcc.dg/format/no-y2k-1.c ! 3054977982b ./gcc/testsuite/gcc.dg/format/null-1.c ! 3652642152b ./gcc/testsuite/gcc.dg/format/plus-1.c ! 2673114039b ./gcc/testsuite/gcc.dg/format/sec-1.c ! 1815893280b ./gcc/testsuite/gcc.dg/format/strfmon-1.c ! 821372176b ./gcc/testsuite/gcc.dg/format/va-1.c ! 358822374b ./gcc/testsuite/gcc.dg/format/warnll-1.c ! 3962912739b ./gcc/testsuite/gcc.dg/format/xopen-1.c ! 1082307299b ./gcc/testsuite/gcc.dg/format/xopen-2.c ! 73044124b ./gcc/testsuite/gcc.dg/format/z-1.c ! 1464990929b ./gcc/testsuite/gcc.dg/format/zero-length-1.c ! 3435417081b ./gcc/testsuite/gcc.dg/fshort-wchar.c ! 745582715b ./gcc/testsuite/gcc.dg/gnu89-init-1.c ! 339065893b ./gcc/testsuite/gcc.dg/gnu89-init-2.c ! 1770671475b ./gcc/testsuite/gcc.dg/gnu99-init-1.c ! 2038429173b ./gcc/testsuite/gcc.dg/h8300-stack-1.c ! 885923224b ./gcc/testsuite/gcc.dg/i386-387-1.c ! 4204057333b ./gcc/testsuite/gcc.dg/i386-387-2.c ! 3371905361b ./gcc/testsuite/gcc.dg/i386-bitfield1.c ! 66516611b ./gcc/testsuite/gcc.dg/i386-call-1.c ! 3703039330b ./gcc/testsuite/gcc.dg/i386-loop-1.c ! 2666972329b ./gcc/testsuite/gcc.dg/i386-loop-2.c ! 311969864b ./gcc/testsuite/gcc.dg/i386-loop-3.c ! 2036634176b ./gcc/testsuite/gcc.dg/i386-memset-1.c ! 2049230625b ./gcc/testsuite/gcc.dg/i386-mmx-1.c ! 3973906625b ./gcc/testsuite/gcc.dg/i386-mmx-2.c ! 1669092452b ./gcc/testsuite/gcc.dg/i386-mmx-3.c ! 811535520b ./gcc/testsuite/gcc.dg/i386-signbit-1.c ! 1624192171b ./gcc/testsuite/gcc.dg/i386-signbit-2.c ! 1578707081b ./gcc/testsuite/gcc.dg/i386-signbit-3.c ! 2923520039b ./gcc/testsuite/gcc.dg/i386-sse-1.c ! 1935024742b ./gcc/testsuite/gcc.dg/i386-sse-2.c ! 3426246610b ./gcc/testsuite/gcc.dg/i386-sse-3.c ! 3146718627b ./gcc/testsuite/gcc.dg/i386-sse-4.c ! 3806311851b ./gcc/testsuite/gcc.dg/i386-ssetype-1.c ! 4034432096b ./gcc/testsuite/gcc.dg/i386-ssetype-2.c ! 1429730686b ./gcc/testsuite/gcc.dg/i386-ssetype-3.c ! 1818014328b ./gcc/testsuite/gcc.dg/i386-ssetype-4.c ! 2625840402b ./gcc/testsuite/gcc.dg/i386-ssetype-5.c ! 1459694165b ./gcc/testsuite/gcc.dg/i386-unroll-1.c ! 2057006030b ./gcc/testsuite/gcc.dg/i386-volatile-1.c ! 646600080b ./gcc/testsuite/gcc.dg/ia64-asm-1.c ! 2995485298b ./gcc/testsuite/gcc.dg/ia64-sync-1.c ! 72205644b ./gcc/testsuite/gcc.dg/ia64-sync-2.c ! 3522006930b ./gcc/testsuite/gcc.dg/ia64-sync-3.c ! 20033210b ./gcc/testsuite/gcc.dg/ia64-visibility-1.c ! 2611338469b ./gcc/testsuite/gcc.dg/ia64-visibility-2.c ! 1374850312b ./gcc/testsuite/gcc.dg/ifelse-1.c ! 4085178572b ./gcc/testsuite/gcc.dg/iftrap-1.c ! 448418366b ./gcc/testsuite/gcc.dg/iftrap-2.c ! 2512902839b ./gcc/testsuite/gcc.dg/inline-1.c ! 1196369631b ./gcc/testsuite/gcc.dg/inline-2.c ! 247919548b ./gcc/testsuite/gcc.dg/loop-1.c ! 775331063b ./gcc/testsuite/gcc.dg/lvalue1.c ! 208843907b ./gcc/testsuite/gcc.dg/mips-args-1.c ! 3921207576b ./gcc/testsuite/gcc.dg/mips-args-2.c ! 1475015375b ./gcc/testsuite/gcc.dg/mips-args-3.c ! 2954420820b ./gcc/testsuite/gcc.dg/mmix-1.c ! 2663557248b ./gcc/testsuite/gcc.dg/m-un-1.c ! 2341407016b ./gcc/testsuite/gcc.dg/m-un-2.c ! 2607910125b ./gcc/testsuite/gcc.dg/nest.c ! 167742958b ./gcc/testsuite/gcc.dg/no-builtin-1.c ! 2208318132b ./gcc/testsuite/gcc.dg/noncompile/20000901-1.c ! 3562764821b ./gcc/testsuite/gcc.dg/noncompile/20001228-1.c ! 677199841b ./gcc/testsuite/gcc.dg/noncompile/20010425-1.c ! 100652056b ./gcc/testsuite/gcc.dg/noncompile/20010524-1.c ! 292530438b ./gcc/testsuite/gcc.dg/noncompile/20011025-1.c ! 3164469142b ./gcc/testsuite/gcc.dg/noncompile/20020130-1.c ! 3055182962b ./gcc/testsuite/gcc.dg/noncompile/20020207-1.c ! 3889627347b ./gcc/testsuite/gcc.dg/noncompile/20020213-1.c ! 1457569280b ./gcc/testsuite/gcc.dg/noncompile/20020220-1.c ! 2121631552b ./gcc/testsuite/gcc.dg/noncompile/20030818-1.c ! 2964160251b ./gcc/testsuite/gcc.dg/noncompile/920507-1.c ! 2161867266b ./gcc/testsuite/gcc.dg/noncompile/920616-2.c ! 1066215762b ./gcc/testsuite/gcc.dg/noncompile/920721-2.c ! 2834384944b ./gcc/testsuite/gcc.dg/noncompile/920824-1.c ! 3955955814b ./gcc/testsuite/gcc.dg/noncompile/920923-1.c ! 3162370830b ./gcc/testsuite/gcc.dg/noncompile/921102-1.c ! 2258888666b ./gcc/testsuite/gcc.dg/noncompile/921116-1.c ! 4097035630b ./gcc/testsuite/gcc.dg/noncompile/930301-1.c ! 840634782b ./gcc/testsuite/gcc.dg/noncompile/930622-1.c ! 3061074939b ./gcc/testsuite/gcc.dg/noncompile/930622-2.c ! 181482966b ./gcc/testsuite/gcc.dg/noncompile/930714-1.c ! 3515814095b ./gcc/testsuite/gcc.dg/noncompile/931203-1.c ! 2994529883b ./gcc/testsuite/gcc.dg/noncompile/940112-1.c ! 3064722803b ./gcc/testsuite/gcc.dg/noncompile/940227-1.c ! 667278578b ./gcc/testsuite/gcc.dg/noncompile/950825-1.c ! 170314268b ./gcc/testsuite/gcc.dg/noncompile/950921-1.c ! 1539048278b ./gcc/testsuite/gcc.dg/noncompile/951123-1.c ! 988927550b ./gcc/testsuite/gcc.dg/noncompile/971104-1.c ! 3218469122b ./gcc/testsuite/gcc.dg/noncompile/990416-1.c ! 3596296296b ./gcc/testsuite/gcc.dg/noncompile/const-ll-1.c ! 2315448619b ./gcc/testsuite/gcc.dg/noncompile/incomplete-1.c ! 1128187562b ./gcc/testsuite/gcc.dg/noncompile/init-1.c ! 2927938029b ./gcc/testsuite/gcc.dg/noncompile/init-2.c ! 4011814030b ./gcc/testsuite/gcc.dg/noncompile/init-3.c ! 835046904b ./gcc/testsuite/gcc.dg/noncompile/invalid_asm.c ! 3441206096b ./gcc/testsuite/gcc.dg/noncompile/label-lineno-1.c ! 348329041b ./gcc/testsuite/gcc.dg/noncompile/noncompile.exp ! 3105423709b ./gcc/testsuite/gcc.dg/noncompile/redecl-1.c ! 1781438824b ./gcc/testsuite/gcc.dg/noncompile/va-arg-1.c ! 3381135030b ./gcc/testsuite/gcc.dg/noncompile/voidparam-1.c ! 2112479311b ./gcc/testsuite/gcc.dg/nonnull-1.c ! 1724789636b ./gcc/testsuite/gcc.dg/nonnull-2.c ! 3531450152b ./gcc/testsuite/gcc.dg/noreturn-1.c ! 2267400179b ./gcc/testsuite/gcc.dg/noreturn-2.c ! 1222476594b ./gcc/testsuite/gcc.dg/noreturn-3.c ! 4260549149b ./gcc/testsuite/gcc.dg/noreturn-4.c ! 4241025034b ./gcc/testsuite/gcc.dg/old-style-asm-1.c ! 1662299957b ./gcc/testsuite/gcc.dg/pack-test-1.c ! 2754082325b ./gcc/testsuite/gcc.dg/pack-test-1.h ! 2875409621b ./gcc/testsuite/gcc.dg/pack-test-2.c ! 3389561780b ./gcc/testsuite/gcc.dg/ppc-fmadd-1.c ! 541289115b ./gcc/testsuite/gcc.dg/ppc-fmadd-2.c ! 2765687813b ./gcc/testsuite/gcc.dg/ppc-fmadd-3.c ! 635404827b ./gcc/testsuite/gcc.dg/ppc-ldstruct.c ! 1383345482b ./gcc/testsuite/gcc.dg/ppc-spe.c ! 3395691298b ./gcc/testsuite/gcc.dg/pragma-align.c ! 2976918557b ./gcc/testsuite/gcc.dg/pragma-darwin.c ! 2313186581b ./gcc/testsuite/gcc.dg/pragma-ep-1.c ! 689657683b ./gcc/testsuite/gcc.dg/pragma-ep-2.c ! 375277958b ./gcc/testsuite/gcc.dg/pragma-ep-3.c ! 18511022b ./gcc/testsuite/gcc.dg/pragma-re-1.c ! 3911201539b ./gcc/testsuite/gcc.dg/pragma-re-2.c ! 3011001240b ./gcc/testsuite/gcc.dg/qual-return-1.c ! 4111880764b ./gcc/testsuite/gcc.dg/qual-return-2.c ! 2426423235b ./gcc/testsuite/gcc.dg/README ! 2655346126b ./gcc/testsuite/gcc.dg/return-type-1.c ! 3519355790b ./gcc/testsuite/gcc.dg/return-type-2.c ! 2879526504b ./gcc/testsuite/gcc.dg/return-type-3.c ! 3862146754b ./gcc/testsuite/gcc.dg/sequence-pt-1.c ! 3997091992b ./gcc/testsuite/gcc.dg/setjmp-1.c ! 4257734656b ./gcc/testsuite/gcc.dg/sibcall-1.c ! 2394881430b ./gcc/testsuite/gcc.dg/sibcall-2.c ! 2328366575b ./gcc/testsuite/gcc.dg/sibcall-3.c ! 348731556b ./gcc/testsuite/gcc.dg/sibcall-4.c ! 3310584874b ./gcc/testsuite/gcc.dg/simd-1.c ! 358299505b ./gcc/testsuite/gcc.dg/sparc-constant-1.c ! 2828537866b ./gcc/testsuite/gcc.dg/sparc-dwarf2.c ! 802040009b ./gcc/testsuite/gcc.dg/sparc-ret.c ! 1993113484b ./gcc/testsuite/gcc.dg/special/20000419-2.c ! 3430419731b ./gcc/testsuite/gcc.dg/special/alias-1.c ! 7306739b ./gcc/testsuite/gcc.dg/special/alias-2.c ! 2059304830b ./gcc/testsuite/gcc.dg/special/ecos.exp ! 4212112354b ./gcc/testsuite/gcc.dg/special/gcsec-1.c ! 3980204525b ./gcc/testsuite/gcc.dg/special/mips-abi.exp ! 4294967295b ./gcc/testsuite/gcc.dg/special/mips-abi.s ! 274062869b ./gcc/testsuite/gcc.dg/special/special.exp ! 3422703148b ./gcc/testsuite/gcc.dg/special/weak-1a.c ! 2943372070b ./gcc/testsuite/gcc.dg/special/weak-1.c ! 389288806b ./gcc/testsuite/gcc.dg/special/weak-2a.c ! 3422703148b ./gcc/testsuite/gcc.dg/special/weak-2b.c ! 3142421222b ./gcc/testsuite/gcc.dg/special/weak-2.c ! 2222470584b ./gcc/testsuite/gcc.dg/special/wkali-1.c ! 206085145b ./gcc/testsuite/gcc.dg/special/wkali-2a.c ! 2277202182b ./gcc/testsuite/gcc.dg/special/wkali-2b.c ! 3142421222b ./gcc/testsuite/gcc.dg/special/wkali-2.c ! 1648410279b ./gcc/testsuite/gcc.dg/splet-1.c ! 276809676b ./gcc/testsuite/gcc.dg/struct-alias-1.c ! 2735438447b ./gcc/testsuite/gcc.dg/struct-by-value-1.c ! 652392948b ./gcc/testsuite/gcc.dg/struct-ret-1.c ! 1932500816b ./gcc/testsuite/gcc.dg/struct-ret-2.c ! 3047762229b ./gcc/testsuite/gcc.dg/struct-ret-libc.c ! 548999932b ./gcc/testsuite/gcc.dg/switch-1.c ! 3837710588b ./gcc/testsuite/gcc.dg/tls/alias-1.c ! 1700260228b ./gcc/testsuite/gcc.dg/tls/diag-1.c ! 3983152143b ./gcc/testsuite/gcc.dg/tls/diag-2.c ! 3440648572b ./gcc/testsuite/gcc.dg/tls/diag-3.c ! 1583541536b ./gcc/testsuite/gcc.dg/tls/init-1.c ! 1079004879b ./gcc/testsuite/gcc.dg/tls/nonpic-1.c ! 2112067562b ./gcc/testsuite/gcc.dg/tls/opt-2.c ! 2888022674b ./gcc/testsuite/gcc.dg/tls/opt-3.c ! 2772172947b ./gcc/testsuite/gcc.dg/tls/opt-4.c ! 1198289493b ./gcc/testsuite/gcc.dg/tls/pic-1.c ! 2036184791b ./gcc/testsuite/gcc.dg/tls/section-1.c ! 2218745466b ./gcc/testsuite/gcc.dg/tls/struct-1.c ! 4065237020b ./gcc/testsuite/gcc.dg/tls/tls.exp ! 472549683b ./gcc/testsuite/gcc.dg/tls/trivial.c ! 1141366394b ./gcc/testsuite/gcc.dg/trunc-1.c ! 1890682509b ./gcc/testsuite/gcc.dg/typedef-init.c ! 1892637986b ./gcc/testsuite/gcc.dg/typeof-1.c ! 2805647153b ./gcc/testsuite/gcc.dg/typespec-1.c ! 2282506048b ./gcc/testsuite/gcc.dg/ultrasp10.c ! 1860858242b ./gcc/testsuite/gcc.dg/ultrasp1.c ! 789972216b ./gcc/testsuite/gcc.dg/ultrasp2.c ! 2708772692b ./gcc/testsuite/gcc.dg/ultrasp3.c ! 1890424464b ./gcc/testsuite/gcc.dg/ultrasp4.c ! 2979039757b ./gcc/testsuite/gcc.dg/ultrasp5.c ! 783369369b ./gcc/testsuite/gcc.dg/ultrasp6.c ! 2907651471b ./gcc/testsuite/gcc.dg/ultrasp7.c ! 906694114b ./gcc/testsuite/gcc.dg/ultrasp8.c ! 3540624174b ./gcc/testsuite/gcc.dg/ultrasp9.c ! 2258658308b ./gcc/testsuite/gcc.dg/uninit-1.c ! 608086310b ./gcc/testsuite/gcc.dg/uninit-2.c ! 2219873069b ./gcc/testsuite/gcc.dg/uninit-3.c ! 3153724678b ./gcc/testsuite/gcc.dg/uninit-4.c ! 2761916267b ./gcc/testsuite/gcc.dg/uninit-5.c ! 4187609695b ./gcc/testsuite/gcc.dg/uninit-6.c ! 3846997492b ./gcc/testsuite/gcc.dg/uninit-8.c ! 390912088b ./gcc/testsuite/gcc.dg/uninit-9.c ! 2047101897b ./gcc/testsuite/gcc.dg/uninit-A.c ! 3967573468b ./gcc/testsuite/gcc.dg/uninit-B.c ! 871237670b ./gcc/testsuite/gcc.dg/uninit-C.c ! 3652858704b ./gcc/testsuite/gcc.dg/unordered-1.c ! 977726966b ./gcc/testsuite/gcc.dg/unused-1.c ! 3484455791b ./gcc/testsuite/gcc.dg/unused-2.c ! 865910481b ./gcc/testsuite/gcc.dg/unused-3.c ! 1143790346b ./gcc/testsuite/gcc.dg/unused-4.c ! 3706472995b ./gcc/testsuite/gcc.dg/va-arg-1.c ! 1598019737b ./gcc/testsuite/gcc.dg/va-arg-2.c ! 2932877249b ./gcc/testsuite/gcc.dg/verbose-asm.c ! 3017845162b ./gcc/testsuite/gcc.dg/vla-2.c ! 2427295047b ./gcc/testsuite/gcc.dg/vla-init-1.c ! 4257653081b ./gcc/testsuite/gcc.dg/warn-1.c ! 2228363679b ./gcc/testsuite/gcc.dg/wchar_t-1.c ! 943771070b ./gcc/testsuite/gcc.dg/Wconversion.c ! 2158608745b ./gcc/testsuite/gcc.dg/weak/typeof-2.c ! 284772550b ./gcc/testsuite/gcc.dg/weak/weak-1.c ! 4188979390b ./gcc/testsuite/gcc.dg/weak/weak-2.c ! 4217992067b ./gcc/testsuite/gcc.dg/weak/weak-3.c ! 335689940b ./gcc/testsuite/gcc.dg/weak/weak-4.c ! 2769940495b ./gcc/testsuite/gcc.dg/weak/weak-5.c ! 3288640728b ./gcc/testsuite/gcc.dg/weak/weak-6.c ! 448806115b ./gcc/testsuite/gcc.dg/weak/weak-7.c ! 4030894436b ./gcc/testsuite/gcc.dg/weak/weak-8.c ! 1489715470b ./gcc/testsuite/gcc.dg/weak/weak-9.c ! 352709517b ./gcc/testsuite/gcc.dg/weak/weak.exp ! 455748560b ./gcc/testsuite/gcc.dg/wint_t-1.c ! 3364645726b ./gcc/testsuite/gcc.dg/Wlarger-than.c ! 3791055151b ./gcc/testsuite/gcc.dg/Wparentheses-1.c ! 3316229121b ./gcc/testsuite/gcc.dg/Wreturn-type2.c ! 2809247827b ./gcc/testsuite/gcc.dg/Wreturn-type.c ! 3907876407b ./gcc/testsuite/gcc.dg/Wshadow-1.c ! 3928913400b ./gcc/testsuite/gcc.dg/Wswitch-2.c ! 49151727b ./gcc/testsuite/gcc.dg/Wswitch.c ! 3095170584b ./gcc/testsuite/gcc.dg/Wswitch-default.c ! 2102653224b ./gcc/testsuite/gcc.dg/Wswitch-enum.c ! 3993663285b ./gcc/testsuite/gcc.dg/wtr-aggr-init-1.c ! 633259392b ./gcc/testsuite/gcc.dg/wtr-conversion-1.c ! 3391999525b ./gcc/testsuite/gcc.dg/wtr-escape-1.c ! 1703287085b ./gcc/testsuite/gcc.dg/wtr-func-def-1.c ! 1477789682b ./gcc/testsuite/gcc.dg/wtr-int-type-1.c ! 2738321439b ./gcc/testsuite/gcc.dg/wtr-label-1.c ! 1412426885b ./gcc/testsuite/gcc.dg/wtr-static-1.c ! 2515335159b ./gcc/testsuite/gcc.dg/wtr-strcat-1.c ! 3352403433b ./gcc/testsuite/gcc.dg/wtr-suffix-1.c ! 3574773812b ./gcc/testsuite/gcc.dg/wtr-switch-1.c ! 38129501b ./gcc/testsuite/gcc.dg/wtr-unary-plus-1.c ! 3581927017b ./gcc/testsuite/gcc.dg/wtr-union-init-1.c ! 3887199666b ./gcc/testsuite/gcc.dg/wtr-union-init-2.c ! 2779433155b ./gcc/testsuite/gcc.dg/wtr-union-init-3.c ! 2078992029b ./gcc/testsuite/gcc.dg/Wunknownprag.c ! 1674197654b ./gcc/testsuite/gcc.dg/Wunreachable-1.c ! 3581949676b ./gcc/testsuite/gcc.dg/Wunreachable-2.c ! 4265013314b ./gcc/testsuite/gcc.dg/Wunreachable-6.c ! 154937648b ./gcc/testsuite/gcc.dg/Wunreachable-7.c ! 1769759078b ./gcc/testsuite/gcc.misc-tests/acker1.c ! 1443030966b ./gcc/testsuite/gcc.misc-tests/acker1.exp ! 278378178b ./gcc/testsuite/gcc.misc-tests/arm-isr.c ! 1193019601b ./gcc/testsuite/gcc.misc-tests/arm-isr.exp ! 2075376861b ./gcc/testsuite/gcc.misc-tests/bprob-1.c ! 3293027214b ./gcc/testsuite/gcc.misc-tests/bprob-2.c ! 2056237520b ./gcc/testsuite/gcc.misc-tests/bprob.exp ! 865542926b ./gcc/testsuite/gcc.misc-tests/dg-10.c ! 2063159250b ./gcc/testsuite/gcc.misc-tests/dg-11.c ! 33043738b ./gcc/testsuite/gcc.misc-tests/dg-12.c ! 730919505b ./gcc/testsuite/gcc.misc-tests/dg-1.c ! 3096773472b ./gcc/testsuite/gcc.misc-tests/dg-2.c ! 3661115972b ./gcc/testsuite/gcc.misc-tests/dg-3.c ! 3160178728b ./gcc/testsuite/gcc.misc-tests/dg-4.c ! 2494962233b ./gcc/testsuite/gcc.misc-tests/dg-5.c ! 2938473505b ./gcc/testsuite/gcc.misc-tests/dg-6.c ! 3402935282b ./gcc/testsuite/gcc.misc-tests/dg-7.c ! 1050718588b ./gcc/testsuite/gcc.misc-tests/dg-8.c ! 1666656352b ./gcc/testsuite/gcc.misc-tests/dg-9.c ! 1706908915b ./gcc/testsuite/gcc.misc-tests/dg-test.exp ! 1483515495b ./gcc/testsuite/gcc.misc-tests/dhry.c ! 1824463967b ./gcc/testsuite/gcc.misc-tests/dhry.exp ! 208907585b ./gcc/testsuite/gcc.misc-tests/dhry.h ! 779830061b ./gcc/testsuite/gcc.misc-tests/gcov-1.c ! 3193043874b ./gcc/testsuite/gcc.misc-tests/gcov-2.c ! 4211514085b ./gcc/testsuite/gcc.misc-tests/gcov-3.c ! 527032712b ./gcc/testsuite/gcc.misc-tests/gcov-4b.c ! 3346981345b ./gcc/testsuite/gcc.misc-tests/gcov-4b.x ! 3919110722b ./gcc/testsuite/gcc.misc-tests/gcov-4.c ! 695277662b ./gcc/testsuite/gcc.misc-tests/gcov-5b.c ! 3346981345b ./gcc/testsuite/gcc.misc-tests/gcov-5b.x ! 790797496b ./gcc/testsuite/gcc.misc-tests/gcov-6.c ! 2262587727b ./gcc/testsuite/gcc.misc-tests/gcov-6.x ! 2647301947b ./gcc/testsuite/gcc.misc-tests/gcov-7.c ! 2262587727b ./gcc/testsuite/gcc.misc-tests/gcov-7.x ! 1143513930b ./gcc/testsuite/gcc.misc-tests/gcov-8.c ! 3346981345b ./gcc/testsuite/gcc.misc-tests/gcov-8.x ! 283921131b ./gcc/testsuite/gcc.misc-tests/gcov.exp ! 1258478426b ./gcc/testsuite/gcc.misc-tests/i386-pf-3dnow-1.c ! 3346801828b ./gcc/testsuite/gcc.misc-tests/i386-pf-athlon-1.c ! 2266643451b ./gcc/testsuite/gcc.misc-tests/i386-pf-none-1.c ! 2697809529b ./gcc/testsuite/gcc.misc-tests/i386-pf-sse-1.c ! 2256410310b ./gcc/testsuite/gcc.misc-tests/i386-prefetch.exp ! 1438262609b ./gcc/testsuite/gcc.misc-tests/linkage.exp ! 2071381157b ./gcc/testsuite/gcc.misc-tests/linkage-x.c ! 3975807378b ./gcc/testsuite/gcc.misc-tests/linkage-y.c ! 2874350784b ./gcc/testsuite/gcc.misc-tests/matrix1.c ! 1686589144b ./gcc/testsuite/gcc.misc-tests/matrix1.exp ! 1813429392b ./gcc/testsuite/gcc.misc-tests/mg.c ! 1868251641b ./gcc/testsuite/gcc.misc-tests/mg.exp ! 1983153897b ./gcc/testsuite/gcc.misc-tests/sieve.c ! 3220093576b ./gcc/testsuite/gcc.misc-tests/sieve.exp ! 4235385594b ./gcc/testsuite/gcc.misc-tests/sort2.c ! 232815709b ./gcc/testsuite/gcc.misc-tests/sort2.exp 3879806733b ./gcc/testsuite/g++.dg/abi/bitfield11.C 633990831b ./gcc/testsuite/g++.dg/abi/bitfield12.C - 885716516b ./gcc/testsuite/g++.dg/abi/bitfield1.C 479436735b ./gcc/testsuite/g++.dg/abi/bitfield2.C 3225280346b ./gcc/testsuite/g++.dg/abi/bitfield3.C 3573884716b ./gcc/testsuite/g++.dg/abi/bitfield4.C --- 4982,5005 ---- 4089915411b ./gcc/testsuite/consistency.vlad/layout/s-wchar_t-short.c 2415574017b ./gcc/testsuite/consistency.vlad/layout/s-wchar_t-size_t.c 2755349152b ./gcc/testsuite/consistency.vlad/layout/s-wchar_t-wchar_t.c ! 1746672839b ./gcc/testsuite/consistency.vlad/layout/size-bool.cpp ! 1662052327b ./gcc/testsuite/consistency.vlad/layout/size-char.c ! 3361924014b ./gcc/testsuite/consistency.vlad/layout/size-double.c ! 3608174439b ./gcc/testsuite/consistency.vlad/layout/size-float.c ! 224133749b ./gcc/testsuite/consistency.vlad/layout/size-int.c ! 2229647371b ./gcc/testsuite/consistency.vlad/layout/size-long.c ! 1496097293b ./gcc/testsuite/consistency.vlad/layout/size-longdouble.c ! 4243493805b ./gcc/testsuite/consistency.vlad/layout/size-longlong.c ! 4234774016b ./gcc/testsuite/consistency.vlad/layout/size-pointer.c ! 2742276437b ./gcc/testsuite/consistency.vlad/layout/size-ptrdiff.c ! 2302838291b ./gcc/testsuite/consistency.vlad/layout/size-short.c ! 1008704183b ./gcc/testsuite/consistency.vlad/layout/size-size.c ! 767395346b ./gcc/testsuite/consistency.vlad/layout/size-wchar.c 2068139423b ./gcc/testsuite/consistency.vlad/vlad.exp ! 2764972821b ./gcc/testsuite/g++.dg/README ! 885716516b ./gcc/testsuite/g++.dg/abi/bitfield1.C 3879806733b ./gcc/testsuite/g++.dg/abi/bitfield11.C 633990831b ./gcc/testsuite/g++.dg/abi/bitfield12.C 479436735b ./gcc/testsuite/g++.dg/abi/bitfield2.C 3225280346b ./gcc/testsuite/g++.dg/abi/bitfield3.C 3573884716b ./gcc/testsuite/g++.dg/abi/bitfield4.C *************** *** 7733,7738 **** --- 5021,5027 ---- 2703592525b ./gcc/testsuite/g++.dg/abi/enum1.C 3235702061b ./gcc/testsuite/g++.dg/abi/layout1.C 4006829604b ./gcc/testsuite/g++.dg/abi/layout2.C + 4166781498b ./gcc/testsuite/g++.dg/abi/mangle1.C 2837496529b ./gcc/testsuite/g++.dg/abi/mangle10.C 2689331463b ./gcc/testsuite/g++.dg/abi/mangle11.C 474126595b ./gcc/testsuite/g++.dg/abi/mangle12.C *************** *** 7741,7747 **** 1951189959b ./gcc/testsuite/g++.dg/abi/mangle15.C 1089567105b ./gcc/testsuite/g++.dg/abi/mangle16.C 238964482b ./gcc/testsuite/g++.dg/abi/mangle17.C - 4166781498b ./gcc/testsuite/g++.dg/abi/mangle1.C 4182318030b ./gcc/testsuite/g++.dg/abi/mangle2.C 1755377648b ./gcc/testsuite/g++.dg/abi/mangle3.C 3334045334b ./gcc/testsuite/g++.dg/abi/mangle4.C --- 5030,5035 ---- *************** *** 7756,7767 **** 1357550525b ./gcc/testsuite/g++.dg/abi/thunk1.C 3595051525b ./gcc/testsuite/g++.dg/abi/thunk2.C 1623099683b ./gcc/testsuite/g++.dg/abi/vague1.C 1053392201b ./gcc/testsuite/g++.dg/abi/vbase10.C 2404487712b ./gcc/testsuite/g++.dg/abi/vbase11.C 2029294780b ./gcc/testsuite/g++.dg/abi/vbase12.C 4079748467b ./gcc/testsuite/g++.dg/abi/vbase13.C 226292728b ./gcc/testsuite/g++.dg/abi/vbase14.C - 20126271b ./gcc/testsuite/g++.dg/abi/vbase1.C 1286609512b ./gcc/testsuite/g++.dg/abi/vbase8-10.C 3227029100b ./gcc/testsuite/g++.dg/abi/vbase8-21.C 1921427599b ./gcc/testsuite/g++.dg/abi/vbase8-22.C --- 5044,5055 ---- 1357550525b ./gcc/testsuite/g++.dg/abi/thunk1.C 3595051525b ./gcc/testsuite/g++.dg/abi/thunk2.C 1623099683b ./gcc/testsuite/g++.dg/abi/vague1.C + 20126271b ./gcc/testsuite/g++.dg/abi/vbase1.C 1053392201b ./gcc/testsuite/g++.dg/abi/vbase10.C 2404487712b ./gcc/testsuite/g++.dg/abi/vbase11.C 2029294780b ./gcc/testsuite/g++.dg/abi/vbase12.C 4079748467b ./gcc/testsuite/g++.dg/abi/vbase13.C 226292728b ./gcc/testsuite/g++.dg/abi/vbase14.C 1286609512b ./gcc/testsuite/g++.dg/abi/vbase8-10.C 3227029100b ./gcc/testsuite/g++.dg/abi/vbase8-21.C 1921427599b ./gcc/testsuite/g++.dg/abi/vbase8-22.C *************** *** 7798,7803 **** --- 5086,5092 ---- 157448015b ./gcc/testsuite/g++.dg/compat/abi/vbase8-4_main.C 2816167507b ./gcc/testsuite/g++.dg/compat/abi/vbase8-4_x.C 2498065892b ./gcc/testsuite/g++.dg/compat/abi/vbase8-4_y.C + 625329130b ./gcc/testsuite/g++.dg/compat/break/README 851022786b ./gcc/testsuite/g++.dg/compat/break/bitfield5.h 3382847079b ./gcc/testsuite/g++.dg/compat/break/bitfield5_main.C 4010281072b ./gcc/testsuite/g++.dg/compat/break/bitfield5_x.C *************** *** 7810,7816 **** 1403945939b ./gcc/testsuite/g++.dg/compat/break/empty6_main.C 2235201715b ./gcc/testsuite/g++.dg/compat/break/empty6_x.C 2853656504b ./gcc/testsuite/g++.dg/compat/break/empty6_y.C - 625329130b ./gcc/testsuite/g++.dg/compat/break/README 1505598993b ./gcc/testsuite/g++.dg/compat/break/vbase10.h 876834152b ./gcc/testsuite/g++.dg/compat/break/vbase10_main.C 543758759b ./gcc/testsuite/g++.dg/compat/break/vbase10_x.C --- 5099,5104 ---- *************** *** 7876,7886 **** 700720258b ./gcc/testsuite/g++.dg/compat/init/init-ref2_x.C 2301277977b ./gcc/testsuite/g++.dg/compat/init/init-ref2_y.C 2365486838b ./gcc/testsuite/g++.dg/conversion/to-virtual-base-1.C - 1689064567b ./gcc/testsuite/g++.dg/cpp/c++98.C 3896968797b ./gcc/testsuite/g++.dg/cpp/c++98-pedantic.C 1514119316b ./gcc/testsuite/g++.dg/cpp/c++_cmd_1.C 1270735553b ./gcc/testsuite/g++.dg/cpp/c++_cmd_1.h 1307638268b ./gcc/testsuite/g++.dg/debug/const1.C 1740237496b ./gcc/testsuite/g++.dg/debug/debug1.C 1473360233b ./gcc/testsuite/g++.dg/debug/debug2.C 4057306503b ./gcc/testsuite/g++.dg/debug/debug3.C --- 5164,5175 ---- 700720258b ./gcc/testsuite/g++.dg/compat/init/init-ref2_x.C 2301277977b ./gcc/testsuite/g++.dg/compat/init/init-ref2_y.C 2365486838b ./gcc/testsuite/g++.dg/conversion/to-virtual-base-1.C 3896968797b ./gcc/testsuite/g++.dg/cpp/c++98-pedantic.C + 1689064567b ./gcc/testsuite/g++.dg/cpp/c++98.C 1514119316b ./gcc/testsuite/g++.dg/cpp/c++_cmd_1.C 1270735553b ./gcc/testsuite/g++.dg/cpp/c++_cmd_1.h 1307638268b ./gcc/testsuite/g++.dg/debug/const1.C + 1949293295b ./gcc/testsuite/g++.dg/debug/debug.exp 1740237496b ./gcc/testsuite/g++.dg/debug/debug1.C 1473360233b ./gcc/testsuite/g++.dg/debug/debug2.C 4057306503b ./gcc/testsuite/g++.dg/debug/debug3.C *************** *** 7889,7895 **** 2910185760b ./gcc/testsuite/g++.dg/debug/debug6.C 2476891002b ./gcc/testsuite/g++.dg/debug/debug7.C 1994744154b ./gcc/testsuite/g++.dg/debug/debug8.C - 1949293295b ./gcc/testsuite/g++.dg/debug/debug.exp 2055774645b ./gcc/testsuite/g++.dg/debug/template1.C 1865154101b ./gcc/testsuite/g++.dg/debug/trivial.C 168898824b ./gcc/testsuite/g++.dg/debug/typedef1.C --- 5178,5183 ---- *************** *** 7902,7911 **** 2869281563b ./gcc/testsuite/g++.dg/eh/dtor1.C 3289569863b ./gcc/testsuite/g++.dg/eh/filter1.C 1460645953b ./gcc/testsuite/g++.dg/eh/filter2.C ! 2708159744b ./gcc/testsuite/g++.dg/eh/forced1.C ! 2542074308b ./gcc/testsuite/g++.dg/eh/forced2.C ! 1420734044b ./gcc/testsuite/g++.dg/eh/forced3.C ! 719445067b ./gcc/testsuite/g++.dg/eh/forced4.C 507841710b ./gcc/testsuite/g++.dg/eh/loop1.C 521012641b ./gcc/testsuite/g++.dg/eh/new1.C 1328551622b ./gcc/testsuite/g++.dg/eh/nrv1.C --- 5190,5200 ---- 2869281563b ./gcc/testsuite/g++.dg/eh/dtor1.C 3289569863b ./gcc/testsuite/g++.dg/eh/filter1.C 1460645953b ./gcc/testsuite/g++.dg/eh/filter2.C ! 3952501300b ./gcc/testsuite/g++.dg/eh/forced1.C ! 3022306350b ./gcc/testsuite/g++.dg/eh/forced2.C ! 747229278b ./gcc/testsuite/g++.dg/eh/forced3.C ! 1678499119b ./gcc/testsuite/g++.dg/eh/forced4.C ! 3628504169b ./gcc/testsuite/g++.dg/eh/ia64-1.C 507841710b ./gcc/testsuite/g++.dg/eh/loop1.C 521012641b ./gcc/testsuite/g++.dg/eh/new1.C 1328551622b ./gcc/testsuite/g++.dg/eh/nrv1.C *************** *** 7942,7947 **** --- 5231,5237 ---- 1838999152b ./gcc/testsuite/g++.dg/ext/anon-struct1.C 1653326846b ./gcc/testsuite/g++.dg/ext/anon-struct2.C 1772814405b ./gcc/testsuite/g++.dg/ext/anon-struct3.C + 1550451528b ./gcc/testsuite/g++.dg/ext/array1.C 592156091b ./gcc/testsuite/g++.dg/ext/asm1.C 1156093599b ./gcc/testsuite/g++.dg/ext/asm2.C 134974628b ./gcc/testsuite/g++.dg/ext/asm3.C *************** *** 7955,7962 **** 2703749043b ./gcc/testsuite/g++.dg/ext/conv1.C 3998238765b ./gcc/testsuite/g++.dg/ext/desig1.C 1844149136b ./gcc/testsuite/g++.dg/ext/dllexport1.C - 974673489b ./gcc/testsuite/g++.dg/ext/dllimport10.C 3025985805b ./gcc/testsuite/g++.dg/ext/dllimport1.C 2047996150b ./gcc/testsuite/g++.dg/ext/dllimport2.C 3516940260b ./gcc/testsuite/g++.dg/ext/dllimport3.C 3656203531b ./gcc/testsuite/g++.dg/ext/dllimport4.C --- 5245,5252 ---- 2703749043b ./gcc/testsuite/g++.dg/ext/conv1.C 3998238765b ./gcc/testsuite/g++.dg/ext/desig1.C 1844149136b ./gcc/testsuite/g++.dg/ext/dllexport1.C 3025985805b ./gcc/testsuite/g++.dg/ext/dllimport1.C + 974673489b ./gcc/testsuite/g++.dg/ext/dllimport10.C 2047996150b ./gcc/testsuite/g++.dg/ext/dllimport2.C 3516940260b ./gcc/testsuite/g++.dg/ext/dllimport3.C 3656203531b ./gcc/testsuite/g++.dg/ext/dllimport4.C *************** *** 8004,8009 **** --- 5294,5300 ---- 2543191854b ./gcc/testsuite/g++.dg/inherit/namespace-as-base.C 4167951109b ./gcc/testsuite/g++.dg/inherit/null1.C 2478211972b ./gcc/testsuite/g++.dg/inherit/operator1.C + 1258096580b ./gcc/testsuite/g++.dg/inherit/operator2.C 413899805b ./gcc/testsuite/g++.dg/inherit/override1.C 285424903b ./gcc/testsuite/g++.dg/inherit/template-as-base.C 3055716699b ./gcc/testsuite/g++.dg/inherit/thunk1.C *************** *** 8014,8021 **** 2391219706b ./gcc/testsuite/g++.dg/inherit/using3.C 1997208530b ./gcc/testsuite/g++.dg/init/addr-const1.C 1409346264b ./gcc/testsuite/g++.dg/init/aggr1.C - 1025630251b ./gcc/testsuite/g++.dg/init/array11.C 4149172890b ./gcc/testsuite/g++.dg/init/array1.C 3157994593b ./gcc/testsuite/g++.dg/init/array2.C 3175368870b ./gcc/testsuite/g++.dg/init/array3.C 2628461993b ./gcc/testsuite/g++.dg/init/array4.C --- 5305,5313 ---- 2391219706b ./gcc/testsuite/g++.dg/inherit/using3.C 1997208530b ./gcc/testsuite/g++.dg/init/addr-const1.C 1409346264b ./gcc/testsuite/g++.dg/init/aggr1.C 4149172890b ./gcc/testsuite/g++.dg/init/array1.C + 1584350907b ./gcc/testsuite/g++.dg/init/array10.C + 1025630251b ./gcc/testsuite/g++.dg/init/array11.C 3157994593b ./gcc/testsuite/g++.dg/init/array2.C 3175368870b ./gcc/testsuite/g++.dg/init/array3.C 2628461993b ./gcc/testsuite/g++.dg/init/array4.C *************** *** 8023,8028 **** --- 5315,5321 ---- 976499184b ./gcc/testsuite/g++.dg/init/array6.C 3220934948b ./gcc/testsuite/g++.dg/init/array7.C 4270004926b ./gcc/testsuite/g++.dg/init/array8.C + 684061796b ./gcc/testsuite/g++.dg/init/assign1.C 3329779212b ./gcc/testsuite/g++.dg/init/attrib1.C 1774664391b ./gcc/testsuite/g++.dg/init/brace1.C 221803890b ./gcc/testsuite/g++.dg/init/brace2.C *************** *** 8040,8045 **** --- 5333,5339 ---- 2797496870b ./gcc/testsuite/g++.dg/init/empty1.C 1019729006b ./gcc/testsuite/g++.dg/init/enum1.C 827423108b ./gcc/testsuite/g++.dg/init/enum2.C + 736777071b ./gcc/testsuite/g++.dg/init/error1.C 2640181867b ./gcc/testsuite/g++.dg/init/init-ref1.C 3275947242b ./gcc/testsuite/g++.dg/init/init-ref2.C 522523166b ./gcc/testsuite/g++.dg/init/init-ref3.C *************** *** 8053,8058 **** --- 5347,5353 ---- 1015198831b ./gcc/testsuite/g++.dg/init/pm1.C 1446834658b ./gcc/testsuite/g++.dg/init/pm2.C 3206400652b ./gcc/testsuite/g++.dg/init/ref1.C + 3052467884b ./gcc/testsuite/g++.dg/init/ref10.C 1135829210b ./gcc/testsuite/g++.dg/init/ref2.C 550201609b ./gcc/testsuite/g++.dg/init/ref3.C 327983634b ./gcc/testsuite/g++.dg/init/ref5.C *************** *** 8071,8091 **** 2431415658b ./gcc/testsuite/g++.dg/lookup/decl2.C 3146359413b ./gcc/testsuite/g++.dg/lookup/delete1.C 3013908110b ./gcc/testsuite/g++.dg/lookup/disamb1.C 1698581993b ./gcc/testsuite/g++.dg/lookup/forscope1.C 3727433793b ./gcc/testsuite/g++.dg/lookup/friend1.C 4002587758b ./gcc/testsuite/g++.dg/lookup/koenig2.C 766167426b ./gcc/testsuite/g++.dg/lookup/pretty1.C 1562081572b ./gcc/testsuite/g++.dg/lookup/ptrmem1.C 2830406633b ./gcc/testsuite/g++.dg/lookup/scoped1.C 2858733655b ./gcc/testsuite/g++.dg/lookup/scoped2.C 586524310b ./gcc/testsuite/g++.dg/lookup/scoped3.C 3934419003b ./gcc/testsuite/g++.dg/lookup/scoped6.C - 684033142b ./gcc/testsuite/g++.dg/lookup/struct1.C 3591679318b ./gcc/testsuite/g++.dg/lookup/struct-hack1.C 4222767496b ./gcc/testsuite/g++.dg/lookup/template1.C 2782357448b ./gcc/testsuite/g++.dg/lookup/using2.C 3844326104b ./gcc/testsuite/g++.dg/lookup/using3.C ! 3384907788b ./gcc/testsuite/g++.dg/lookup/using.C 421486798b ./gcc/testsuite/g++.dg/opt/alias1.C 3198583204b ./gcc/testsuite/g++.dg/opt/alias2.C 1878509122b ./gcc/testsuite/g++.dg/opt/anonunion1.C --- 5366,5389 ---- 2431415658b ./gcc/testsuite/g++.dg/lookup/decl2.C 3146359413b ./gcc/testsuite/g++.dg/lookup/delete1.C 3013908110b ./gcc/testsuite/g++.dg/lookup/disamb1.C + 1685614125b ./gcc/testsuite/g++.dg/lookup/enum1.C 1698581993b ./gcc/testsuite/g++.dg/lookup/forscope1.C 3727433793b ./gcc/testsuite/g++.dg/lookup/friend1.C 4002587758b ./gcc/testsuite/g++.dg/lookup/koenig2.C + 283887818b ./gcc/testsuite/g++.dg/lookup/ns1.C 766167426b ./gcc/testsuite/g++.dg/lookup/pretty1.C 1562081572b ./gcc/testsuite/g++.dg/lookup/ptrmem1.C 2830406633b ./gcc/testsuite/g++.dg/lookup/scoped1.C 2858733655b ./gcc/testsuite/g++.dg/lookup/scoped2.C 586524310b ./gcc/testsuite/g++.dg/lookup/scoped3.C 3934419003b ./gcc/testsuite/g++.dg/lookup/scoped6.C 3591679318b ./gcc/testsuite/g++.dg/lookup/struct-hack1.C + 684033142b ./gcc/testsuite/g++.dg/lookup/struct1.C 4222767496b ./gcc/testsuite/g++.dg/lookup/template1.C + 3384907788b ./gcc/testsuite/g++.dg/lookup/using.C 2782357448b ./gcc/testsuite/g++.dg/lookup/using2.C 3844326104b ./gcc/testsuite/g++.dg/lookup/using3.C ! 4180163240b ./gcc/testsuite/g++.dg/lookup/using9.C 421486798b ./gcc/testsuite/g++.dg/opt/alias1.C 3198583204b ./gcc/testsuite/g++.dg/opt/alias2.C 1878509122b ./gcc/testsuite/g++.dg/opt/anonunion1.C *************** *** 8099,8117 **** --- 5397,5420 ---- 4054451892b ./gcc/testsuite/g++.dg/opt/conj2.C 2033783153b ./gcc/testsuite/g++.dg/opt/const1.C 975231214b ./gcc/testsuite/g++.dg/opt/const2.C + 2723103215b ./gcc/testsuite/g++.dg/opt/const3.C 2113737922b ./gcc/testsuite/g++.dg/opt/cse1.C 1501006084b ./gcc/testsuite/g++.dg/opt/cse2.C 1685294627b ./gcc/testsuite/g++.dg/opt/dtor1.C 3659366294b ./gcc/testsuite/g++.dg/opt/emptyunion.C + 3913769438b ./gcc/testsuite/g++.dg/opt/expect1.C + 3265404406b ./gcc/testsuite/g++.dg/opt/expect2.C 3038238314b ./gcc/testsuite/g++.dg/opt/float1.C 3770486737b ./gcc/testsuite/g++.dg/opt/inline1.C 2869206713b ./gcc/testsuite/g++.dg/opt/inline2.C 3194356521b ./gcc/testsuite/g++.dg/opt/inline3.C 2860828140b ./gcc/testsuite/g++.dg/opt/inline4.C + 269645761b ./gcc/testsuite/g++.dg/opt/inline6.C 373643534b ./gcc/testsuite/g++.dg/opt/local1.C 3146403914b ./gcc/testsuite/g++.dg/opt/longbranch1.C 3172021311b ./gcc/testsuite/g++.dg/opt/longbranch2.C 2026702440b ./gcc/testsuite/g++.dg/opt/mmx1.C + 368993153b ./gcc/testsuite/g++.dg/opt/noreturn-1.C 2857034604b ./gcc/testsuite/g++.dg/opt/nrv1.C 2448700667b ./gcc/testsuite/g++.dg/opt/nrv2.C 1861389259b ./gcc/testsuite/g++.dg/opt/nrv3.C *************** *** 8123,8130 **** 1496969096b ./gcc/testsuite/g++.dg/opt/ptrintsum1.C 1663667381b ./gcc/testsuite/g++.dg/opt/ptrmem1.C 3284968679b ./gcc/testsuite/g++.dg/opt/ptrmem2.C - 3593075142b ./gcc/testsuite/g++.dg/opt/reg-stack2.C 571185401b ./gcc/testsuite/g++.dg/opt/reg-stack.C 1557651694b ./gcc/testsuite/g++.dg/opt/reload1.C 3765450094b ./gcc/testsuite/g++.dg/opt/stack1.C 1124740865b ./gcc/testsuite/g++.dg/opt/static1.C --- 5426,5435 ---- 1496969096b ./gcc/testsuite/g++.dg/opt/ptrintsum1.C 1663667381b ./gcc/testsuite/g++.dg/opt/ptrmem1.C 3284968679b ./gcc/testsuite/g++.dg/opt/ptrmem2.C 571185401b ./gcc/testsuite/g++.dg/opt/reg-stack.C + 3593075142b ./gcc/testsuite/g++.dg/opt/reg-stack2.C + 2303477271b ./gcc/testsuite/g++.dg/opt/reg-stack3.C + 415642312b ./gcc/testsuite/g++.dg/opt/reg-stack4.C 1557651694b ./gcc/testsuite/g++.dg/opt/reload1.C 3765450094b ./gcc/testsuite/g++.dg/opt/stack1.C 1124740865b ./gcc/testsuite/g++.dg/opt/static1.C *************** *** 8134,8142 **** 1853312151b ./gcc/testsuite/g++.dg/opt/unroll1.C 4029726050b ./gcc/testsuite/g++.dg/opt/vt1.C 686527483b ./gcc/testsuite/g++.dg/other/access1.C - 3285252373b ./gcc/testsuite/g++.dg/other/anon2.C 681497421b ./gcc/testsuite/g++.dg/other/anon-struct.C 1585173858b ./gcc/testsuite/g++.dg/other/anon-union.C 1233509973b ./gcc/testsuite/g++.dg/other/array1.C 2359273471b ./gcc/testsuite/g++.dg/other/big-struct.C 1768430122b ./gcc/testsuite/g++.dg/other/bitfield1.C --- 5439,5447 ---- 1853312151b ./gcc/testsuite/g++.dg/opt/unroll1.C 4029726050b ./gcc/testsuite/g++.dg/opt/vt1.C 686527483b ./gcc/testsuite/g++.dg/other/access1.C 681497421b ./gcc/testsuite/g++.dg/other/anon-struct.C 1585173858b ./gcc/testsuite/g++.dg/other/anon-union.C + 3285252373b ./gcc/testsuite/g++.dg/other/anon2.C 1233509973b ./gcc/testsuite/g++.dg/other/array1.C 2359273471b ./gcc/testsuite/g++.dg/other/big-struct.C 1768430122b ./gcc/testsuite/g++.dg/other/bitfield1.C *************** *** 8176,8181 **** --- 5481,5487 ---- 2007689408b ./gcc/testsuite/g++.dg/other/static11.C 3572380294b ./gcc/testsuite/g++.dg/other/stdarg1.C 873911472b ./gcc/testsuite/g++.dg/other/stdbool-if.C + 547272836b ./gcc/testsuite/g++.dg/other/struct-va_list.C 1809278557b ./gcc/testsuite/g++.dg/other/warning1.C 2421396411b ./gcc/testsuite/g++.dg/overload/ambig1.C 492684594b ./gcc/testsuite/g++.dg/overload/builtin1.C *************** *** 8201,8206 **** --- 5507,5513 ---- 2532827057b ./gcc/testsuite/g++.dg/parse/decl-specifier-1.C 1790715562b ./gcc/testsuite/g++.dg/parse/defarg1.C 381770776b ./gcc/testsuite/g++.dg/parse/elab1.C + 2724794863b ./gcc/testsuite/g++.dg/parse/error7.C 3454082090b ./gcc/testsuite/g++.dg/parse/friend1.C 849996881b ./gcc/testsuite/g++.dg/parse/inline1.C 1601717576b ./gcc/testsuite/g++.dg/parse/named_ops.C *************** *** 8219,8241 **** 1537348229b ./gcc/testsuite/g++.dg/parse/template8.C 1641234101b ./gcc/testsuite/g++.dg/parse/typedef1.C 465475026b ./gcc/testsuite/g++.dg/parse/varmod1.C - 2764972821b ./gcc/testsuite/g++.dg/README 438642550b ./gcc/testsuite/g++.dg/rtti/crash1.C 1433046709b ./gcc/testsuite/g++.dg/rtti/cv1.C 1829490760b ./gcc/testsuite/g++.dg/rtti/dyncast1.C 432043063b ./gcc/testsuite/g++.dg/rtti/typeid2.C 1187117877b ./gcc/testsuite/g++.dg/rtti/typeid3.C 370035332b ./gcc/testsuite/g++.dg/special/conpr-1.C - 1217683257b ./gcc/testsuite/g++.dg/special/conpr-2a.C 641456338b ./gcc/testsuite/g++.dg/special/conpr-2.C 3756639268b ./gcc/testsuite/g++.dg/special/conpr-3a.C 3436726377b ./gcc/testsuite/g++.dg/special/conpr-3b.C - 1019201819b ./gcc/testsuite/g++.dg/special/conpr-3.C 908971672b ./gcc/testsuite/g++.dg/special/ecos.exp 2043265187b ./gcc/testsuite/g++.dg/special/initp1.C 3653365060b ./gcc/testsuite/g++.dg/template/access10.C 3423597b ./gcc/testsuite/g++.dg/template/access12.C ! 3059417569b ./gcc/testsuite/g++.dg/template/access1.C 2673931730b ./gcc/testsuite/g++.dg/template/access2.C 2590614802b ./gcc/testsuite/g++.dg/template/access3.C 3878569540b ./gcc/testsuite/g++.dg/template/access4.C --- 5526,5549 ---- 1537348229b ./gcc/testsuite/g++.dg/parse/template8.C 1641234101b ./gcc/testsuite/g++.dg/parse/typedef1.C 465475026b ./gcc/testsuite/g++.dg/parse/varmod1.C 438642550b ./gcc/testsuite/g++.dg/rtti/crash1.C 1433046709b ./gcc/testsuite/g++.dg/rtti/cv1.C 1829490760b ./gcc/testsuite/g++.dg/rtti/dyncast1.C 432043063b ./gcc/testsuite/g++.dg/rtti/typeid2.C 1187117877b ./gcc/testsuite/g++.dg/rtti/typeid3.C + 576657289b ./gcc/testsuite/g++.dg/rtti/typeid4.C 370035332b ./gcc/testsuite/g++.dg/special/conpr-1.C 641456338b ./gcc/testsuite/g++.dg/special/conpr-2.C + 1217683257b ./gcc/testsuite/g++.dg/special/conpr-2a.C + 1019201819b ./gcc/testsuite/g++.dg/special/conpr-3.C 3756639268b ./gcc/testsuite/g++.dg/special/conpr-3a.C 3436726377b ./gcc/testsuite/g++.dg/special/conpr-3b.C 908971672b ./gcc/testsuite/g++.dg/special/ecos.exp 2043265187b ./gcc/testsuite/g++.dg/special/initp1.C + 3059417569b ./gcc/testsuite/g++.dg/template/access1.C 3653365060b ./gcc/testsuite/g++.dg/template/access10.C 3423597b ./gcc/testsuite/g++.dg/template/access12.C ! 2571769651b ./gcc/testsuite/g++.dg/template/access13.C 2673931730b ./gcc/testsuite/g++.dg/template/access2.C 2590614802b ./gcc/testsuite/g++.dg/template/access3.C 3878569540b ./gcc/testsuite/g++.dg/template/access4.C *************** *** 8256,8263 **** 41330039b ./gcc/testsuite/g++.dg/template/conv7.C 4153551346b ./gcc/testsuite/g++.dg/template/conv8.C 2083292273b ./gcc/testsuite/g++.dg/template/copy1.C - 3424550778b ./gcc/testsuite/g++.dg/template/crash11.C 611422239b ./gcc/testsuite/g++.dg/template/crash1.C 3568011765b ./gcc/testsuite/g++.dg/template/crash2.C 3886517071b ./gcc/testsuite/g++.dg/template/crash8.C 3865899580b ./gcc/testsuite/g++.dg/template/crash9.C --- 5564,5571 ---- 41330039b ./gcc/testsuite/g++.dg/template/conv7.C 4153551346b ./gcc/testsuite/g++.dg/template/conv8.C 2083292273b ./gcc/testsuite/g++.dg/template/copy1.C 611422239b ./gcc/testsuite/g++.dg/template/crash1.C + 3424550778b ./gcc/testsuite/g++.dg/template/crash11.C 3568011765b ./gcc/testsuite/g++.dg/template/crash2.C 3886517071b ./gcc/testsuite/g++.dg/template/crash8.C 3865899580b ./gcc/testsuite/g++.dg/template/crash9.C *************** *** 8267,8274 **** 2692451775b ./gcc/testsuite/g++.dg/template/deduce1.C 3818821570b ./gcc/testsuite/g++.dg/template/defarg2.C 184359799b ./gcc/testsuite/g++.dg/template/dtor1.C - 2109880679b ./gcc/testsuite/g++.dg/template/explicit1.C 1161800603b ./gcc/testsuite/g++.dg/template/explicit-instantiation.C 2362246017b ./gcc/testsuite/g++.dg/template/friend10.C 1671034716b ./gcc/testsuite/g++.dg/template/friend12.C 2005778997b ./gcc/testsuite/g++.dg/template/friend13.C --- 5575,5583 ---- 2692451775b ./gcc/testsuite/g++.dg/template/deduce1.C 3818821570b ./gcc/testsuite/g++.dg/template/defarg2.C 184359799b ./gcc/testsuite/g++.dg/template/dtor1.C 1161800603b ./gcc/testsuite/g++.dg/template/explicit-instantiation.C + 2109880679b ./gcc/testsuite/g++.dg/template/explicit1.C + 3595433718b ./gcc/testsuite/g++.dg/template/friend.C 2362246017b ./gcc/testsuite/g++.dg/template/friend10.C 1671034716b ./gcc/testsuite/g++.dg/template/friend12.C 2005778997b ./gcc/testsuite/g++.dg/template/friend13.C *************** *** 8286,8324 **** 3646815886b ./gcc/testsuite/g++.dg/template/friend7.C 3075113496b ./gcc/testsuite/g++.dg/template/friend8.C 2441651640b ./gcc/testsuite/g++.dg/template/friend9.C - 3595433718b ./gcc/testsuite/g++.dg/template/friend.C 366497508b ./gcc/testsuite/g++.dg/template/func1.C 1220946856b ./gcc/testsuite/g++.dg/template/inherit2.C 851936600b ./gcc/testsuite/g++.dg/template/inherit3.C - 438837461b ./gcc/testsuite/g++.dg/template/inherit.C 2872339928b ./gcc/testsuite/g++.dg/template/init-list.C 2887759381b ./gcc/testsuite/g++.dg/template/inline1.C 3521191462b ./gcc/testsuite/g++.dg/template/instantiate1.C 3977187324b ./gcc/testsuite/g++.dg/template/instantiate2.C 953723165b ./gcc/testsuite/g++.dg/template/instantiate3.C 2730793807b ./gcc/testsuite/g++.dg/template/instantiate4.C 416617778b ./gcc/testsuite/g++.dg/template/local1.C 2442972035b ./gcc/testsuite/g++.dg/template/local3.C 1763638408b ./gcc/testsuite/g++.dg/template/lookup1.C - 2309694713b ./gcc/testsuite/g++.dg/template/member3.C 1975040186b ./gcc/testsuite/g++.dg/template/member.C 2815776671b ./gcc/testsuite/g++.dg/template/meminit1.C 1868048408b ./gcc/testsuite/g++.dg/template/nested2.C 1327874294b ./gcc/testsuite/g++.dg/template/non-type1.C 2908234966b ./gcc/testsuite/g++.dg/template/nontype1.C 2240842239b ./gcc/testsuite/g++.dg/template/nontype2.C 2073430043b ./gcc/testsuite/g++.dg/template/ntp1.C 3843222909b ./gcc/testsuite/g++.dg/template/ntp2.C 2552830253b ./gcc/testsuite/g++.dg/template/op1.C 1352422271b ./gcc/testsuite/g++.dg/template/partial1.C 2409455059b ./gcc/testsuite/g++.dg/template/partial2.C - 188396250b ./gcc/testsuite/g++.dg/template/partial-specialization.C 1094048270b ./gcc/testsuite/g++.dg/template/pretty1.C 601175114b ./gcc/testsuite/g++.dg/template/ptrmem1.C 3748090308b ./gcc/testsuite/g++.dg/template/ptrmem2.C 1552975789b ./gcc/testsuite/g++.dg/template/ptrmem3.C 3864682907b ./gcc/testsuite/g++.dg/template/ptrmem4.C 1117759327b ./gcc/testsuite/g++.dg/template/qual1.C 4043559007b ./gcc/testsuite/g++.dg/template/qualttp10.C 265969049b ./gcc/testsuite/g++.dg/template/qualttp11.C 3320116615b ./gcc/testsuite/g++.dg/template/qualttp12.C --- 5595,5638 ---- 3646815886b ./gcc/testsuite/g++.dg/template/friend7.C 3075113496b ./gcc/testsuite/g++.dg/template/friend8.C 2441651640b ./gcc/testsuite/g++.dg/template/friend9.C 366497508b ./gcc/testsuite/g++.dg/template/func1.C + 438837461b ./gcc/testsuite/g++.dg/template/inherit.C 1220946856b ./gcc/testsuite/g++.dg/template/inherit2.C 851936600b ./gcc/testsuite/g++.dg/template/inherit3.C 2872339928b ./gcc/testsuite/g++.dg/template/init-list.C 2887759381b ./gcc/testsuite/g++.dg/template/inline1.C 3521191462b ./gcc/testsuite/g++.dg/template/instantiate1.C 3977187324b ./gcc/testsuite/g++.dg/template/instantiate2.C 953723165b ./gcc/testsuite/g++.dg/template/instantiate3.C 2730793807b ./gcc/testsuite/g++.dg/template/instantiate4.C + 412184719b ./gcc/testsuite/g++.dg/template/instantiate6.C 416617778b ./gcc/testsuite/g++.dg/template/local1.C 2442972035b ./gcc/testsuite/g++.dg/template/local3.C 1763638408b ./gcc/testsuite/g++.dg/template/lookup1.C 1975040186b ./gcc/testsuite/g++.dg/template/member.C + 2309694713b ./gcc/testsuite/g++.dg/template/member3.C + 3902605832b ./gcc/testsuite/g++.dg/template/memclass1.C 2815776671b ./gcc/testsuite/g++.dg/template/meminit1.C 1868048408b ./gcc/testsuite/g++.dg/template/nested2.C 1327874294b ./gcc/testsuite/g++.dg/template/non-type1.C 2908234966b ./gcc/testsuite/g++.dg/template/nontype1.C 2240842239b ./gcc/testsuite/g++.dg/template/nontype2.C + 3442244396b ./gcc/testsuite/g++.dg/template/nontype4.C + 2912602661b ./gcc/testsuite/g++.dg/template/nontype5.C 2073430043b ./gcc/testsuite/g++.dg/template/ntp1.C 3843222909b ./gcc/testsuite/g++.dg/template/ntp2.C 2552830253b ./gcc/testsuite/g++.dg/template/op1.C + 188396250b ./gcc/testsuite/g++.dg/template/partial-specialization.C 1352422271b ./gcc/testsuite/g++.dg/template/partial1.C 2409455059b ./gcc/testsuite/g++.dg/template/partial2.C 1094048270b ./gcc/testsuite/g++.dg/template/pretty1.C 601175114b ./gcc/testsuite/g++.dg/template/ptrmem1.C 3748090308b ./gcc/testsuite/g++.dg/template/ptrmem2.C 1552975789b ./gcc/testsuite/g++.dg/template/ptrmem3.C 3864682907b ./gcc/testsuite/g++.dg/template/ptrmem4.C + 1449121821b ./gcc/testsuite/g++.dg/template/ptrmem6.C 1117759327b ./gcc/testsuite/g++.dg/template/qual1.C + 3125902504b ./gcc/testsuite/g++.dg/template/qualttp1.C 4043559007b ./gcc/testsuite/g++.dg/template/qualttp10.C 265969049b ./gcc/testsuite/g++.dg/template/qualttp11.C 3320116615b ./gcc/testsuite/g++.dg/template/qualttp12.C *************** *** 8329,8338 **** 730215493b ./gcc/testsuite/g++.dg/template/qualttp17.C 2705854603b ./gcc/testsuite/g++.dg/template/qualttp18.C 2340914395b ./gcc/testsuite/g++.dg/template/qualttp19.C ! 3125902504b ./gcc/testsuite/g++.dg/template/qualttp1.C 3291215321b ./gcc/testsuite/g++.dg/template/qualttp20.C 759279296b ./gcc/testsuite/g++.dg/template/qualttp21.C - 662492681b ./gcc/testsuite/g++.dg/template/qualttp2.C 2704736755b ./gcc/testsuite/g++.dg/template/qualttp3.C 2095971540b ./gcc/testsuite/g++.dg/template/qualttp4.C 1142633939b ./gcc/testsuite/g++.dg/template/qualttp5.C --- 5643,5651 ---- 730215493b ./gcc/testsuite/g++.dg/template/qualttp17.C 2705854603b ./gcc/testsuite/g++.dg/template/qualttp18.C 2340914395b ./gcc/testsuite/g++.dg/template/qualttp19.C ! 662492681b ./gcc/testsuite/g++.dg/template/qualttp2.C 3291215321b ./gcc/testsuite/g++.dg/template/qualttp20.C 759279296b ./gcc/testsuite/g++.dg/template/qualttp21.C 2704736755b ./gcc/testsuite/g++.dg/template/qualttp3.C 2095971540b ./gcc/testsuite/g++.dg/template/qualttp4.C 1142633939b ./gcc/testsuite/g++.dg/template/qualttp5.C *************** *** 8343,8352 **** 1981975195b ./gcc/testsuite/g++.dg/template/recurse.C 1960444878b ./gcc/testsuite/g++.dg/template/ref1.C 2809672487b ./gcc/testsuite/g++.dg/template/restrict1.C 1942107252b ./gcc/testsuite/g++.dg/template/sizeof1.C 1028564434b ./gcc/testsuite/g++.dg/template/sizeof2.C ! 2086014865b ./gcc/testsuite/g++.dg/template/spec10.C 2914549620b ./gcc/testsuite/g++.dg/template/spec1.C 2378483146b ./gcc/testsuite/g++.dg/template/spec2.C 4044137217b ./gcc/testsuite/g++.dg/template/spec3.C 64153751b ./gcc/testsuite/g++.dg/template/spec4.C --- 5656,5667 ---- 1981975195b ./gcc/testsuite/g++.dg/template/recurse.C 1960444878b ./gcc/testsuite/g++.dg/template/ref1.C 2809672487b ./gcc/testsuite/g++.dg/template/restrict1.C + 1048420658b ./gcc/testsuite/g++.dg/template/scope2.C 1942107252b ./gcc/testsuite/g++.dg/template/sizeof1.C 1028564434b ./gcc/testsuite/g++.dg/template/sizeof2.C ! 1083352345b ./gcc/testsuite/g++.dg/template/sizeof6.C 2914549620b ./gcc/testsuite/g++.dg/template/spec1.C + 2086014865b ./gcc/testsuite/g++.dg/template/spec10.C 2378483146b ./gcc/testsuite/g++.dg/template/spec2.C 4044137217b ./gcc/testsuite/g++.dg/template/spec3.C 64153751b ./gcc/testsuite/g++.dg/template/spec4.C *************** *** 8384,8433 **** 3742529525b ./gcc/testsuite/g++.dg/tls/init-2.C 1820185551b ./gcc/testsuite/g++.dg/tls/tls.exp 472549683b ./gcc/testsuite/g++.dg/tls/trivial.C 3534874517b ./gcc/testsuite/g++.dg/warn/compare1.C 3909264609b ./gcc/testsuite/g++.dg/warn/conversion-function-1.C 1287592684b ./gcc/testsuite/g++.dg/warn/deprecated.C 2244072137b ./gcc/testsuite/g++.dg/warn/effc1.C 1455133800b ./gcc/testsuite/g++.dg/warn/format1.C 886747822b ./gcc/testsuite/g++.dg/warn/format2.C 2805519034b ./gcc/testsuite/g++.dg/warn/friend.C 334159724b ./gcc/testsuite/g++.dg/warn/implicit-typename1.C 1563309940b ./gcc/testsuite/g++.dg/warn/implicit-typename2.C 2139630752b ./gcc/testsuite/g++.dg/warn/implicit-typename3.C ! 3871123813b ./gcc/testsuite/g++.dg/warn/incomplete1.C 550737263b ./gcc/testsuite/g++.dg/warn/inline1.C 3941517581b ./gcc/testsuite/g++.dg/warn/noreturn-1.C 3402610409b ./gcc/testsuite/g++.dg/warn/oldcast1.C 507562876b ./gcc/testsuite/g++.dg/warn/pedantic1.C 2394314287b ./gcc/testsuite/g++.dg/warn/return-reference.C 2024522680b ./gcc/testsuite/g++.dg/warn/weak1.C - 837914458b ./gcc/testsuite/g++.dg/warn/Winline-1.C - 3687727353b ./gcc/testsuite/g++.dg/warn/Winline-2.C - 730621002b ./gcc/testsuite/g++.dg/warn/Woverloaded-1.C - 155956907b ./gcc/testsuite/g++.dg/warn/Wreorder-1.C - 140007329b ./gcc/testsuite/g++.dg/warn/Wshadow-1.C - 4055228077b ./gcc/testsuite/g++.dg/warn/Wshadow-2.C - 3339416566b ./gcc/testsuite/g++.dg/warn/Wswitch-1.C - 3928913400b ./gcc/testsuite/g++.dg/warn/Wswitch-2.C - 223408438b ./gcc/testsuite/g++.dg/warn/Wunused-1.C - 3331243142b ./gcc/testsuite/g++.dg/warn/Wunused-2.C - 2827119941b ./gcc/testsuite/g++.dg/warn/Wunused-3.C 1014061570b ./gcc/testsuite/g++.old-deja/g++.abi/aggregates.C 3074970655b ./gcc/testsuite/g++.old-deja/g++.abi/align.C 1155806507b ./gcc/testsuite/g++.old-deja/g++.abi/arraynew.C 3647855758b ./gcc/testsuite/g++.old-deja/g++.abi/bitfields.C 2026386788b ./gcc/testsuite/g++.old-deja/g++.abi/crash1.C 2856768338b ./gcc/testsuite/g++.old-deja/g++.abi/cxa_vec.C 4096109742b ./gcc/testsuite/g++.old-deja/g++.abi/empty2.C 1878628007b ./gcc/testsuite/g++.old-deja/g++.abi/empty3.C - 2936636767b ./gcc/testsuite/g++.old-deja/g++.abi/empty.C 239352654b ./gcc/testsuite/g++.old-deja/g++.abi/layout1.C 3009318595b ./gcc/testsuite/g++.old-deja/g++.abi/mangle1.C 2807005291b ./gcc/testsuite/g++.old-deja/g++.abi/primary2.C 3282879605b ./gcc/testsuite/g++.old-deja/g++.abi/primary3.C 1642224875b ./gcc/testsuite/g++.old-deja/g++.abi/primary4.C 758749582b ./gcc/testsuite/g++.old-deja/g++.abi/primary5.C - 694100951b ./gcc/testsuite/g++.old-deja/g++.abi/primary.C 123432225b ./gcc/testsuite/g++.old-deja/g++.abi/ptrflags.C 1585279684b ./gcc/testsuite/g++.old-deja/g++.abi/ptrmem.C 627664718b ./gcc/testsuite/g++.old-deja/g++.abi/vbase1.C --- 5699,5750 ---- 3742529525b ./gcc/testsuite/g++.dg/tls/init-2.C 1820185551b ./gcc/testsuite/g++.dg/tls/tls.exp 472549683b ./gcc/testsuite/g++.dg/tls/trivial.C + 837914458b ./gcc/testsuite/g++.dg/warn/Winline-1.C + 3687727353b ./gcc/testsuite/g++.dg/warn/Winline-2.C + 730621002b ./gcc/testsuite/g++.dg/warn/Woverloaded-1.C + 155956907b ./gcc/testsuite/g++.dg/warn/Wreorder-1.C + 140007329b ./gcc/testsuite/g++.dg/warn/Wshadow-1.C + 4055228077b ./gcc/testsuite/g++.dg/warn/Wshadow-2.C + 3339416566b ./gcc/testsuite/g++.dg/warn/Wswitch-1.C + 3928913400b ./gcc/testsuite/g++.dg/warn/Wswitch-2.C + 223408438b ./gcc/testsuite/g++.dg/warn/Wunused-1.C + 3331243142b ./gcc/testsuite/g++.dg/warn/Wunused-2.C + 2827119941b ./gcc/testsuite/g++.dg/warn/Wunused-3.C 3534874517b ./gcc/testsuite/g++.dg/warn/compare1.C 3909264609b ./gcc/testsuite/g++.dg/warn/conversion-function-1.C + 439467252b ./gcc/testsuite/g++.dg/warn/ctor-init-1.C 1287592684b ./gcc/testsuite/g++.dg/warn/deprecated.C 2244072137b ./gcc/testsuite/g++.dg/warn/effc1.C 1455133800b ./gcc/testsuite/g++.dg/warn/format1.C 886747822b ./gcc/testsuite/g++.dg/warn/format2.C + 1427200445b ./gcc/testsuite/g++.dg/warn/format3.C 2805519034b ./gcc/testsuite/g++.dg/warn/friend.C 334159724b ./gcc/testsuite/g++.dg/warn/implicit-typename1.C 1563309940b ./gcc/testsuite/g++.dg/warn/implicit-typename2.C 2139630752b ./gcc/testsuite/g++.dg/warn/implicit-typename3.C ! 2500594150b ./gcc/testsuite/g++.dg/warn/incomplete1.C 550737263b ./gcc/testsuite/g++.dg/warn/inline1.C 3941517581b ./gcc/testsuite/g++.dg/warn/noreturn-1.C 3402610409b ./gcc/testsuite/g++.dg/warn/oldcast1.C 507562876b ./gcc/testsuite/g++.dg/warn/pedantic1.C 2394314287b ./gcc/testsuite/g++.dg/warn/return-reference.C 2024522680b ./gcc/testsuite/g++.dg/warn/weak1.C 1014061570b ./gcc/testsuite/g++.old-deja/g++.abi/aggregates.C 3074970655b ./gcc/testsuite/g++.old-deja/g++.abi/align.C 1155806507b ./gcc/testsuite/g++.old-deja/g++.abi/arraynew.C 3647855758b ./gcc/testsuite/g++.old-deja/g++.abi/bitfields.C 2026386788b ./gcc/testsuite/g++.old-deja/g++.abi/crash1.C 2856768338b ./gcc/testsuite/g++.old-deja/g++.abi/cxa_vec.C + 2936636767b ./gcc/testsuite/g++.old-deja/g++.abi/empty.C 4096109742b ./gcc/testsuite/g++.old-deja/g++.abi/empty2.C 1878628007b ./gcc/testsuite/g++.old-deja/g++.abi/empty3.C 239352654b ./gcc/testsuite/g++.old-deja/g++.abi/layout1.C 3009318595b ./gcc/testsuite/g++.old-deja/g++.abi/mangle1.C + 694100951b ./gcc/testsuite/g++.old-deja/g++.abi/primary.C 2807005291b ./gcc/testsuite/g++.old-deja/g++.abi/primary2.C 3282879605b ./gcc/testsuite/g++.old-deja/g++.abi/primary3.C 1642224875b ./gcc/testsuite/g++.old-deja/g++.abi/primary4.C 758749582b ./gcc/testsuite/g++.old-deja/g++.abi/primary5.C 123432225b ./gcc/testsuite/g++.old-deja/g++.abi/ptrflags.C 1585279684b ./gcc/testsuite/g++.old-deja/g++.abi/ptrmem.C 627664718b ./gcc/testsuite/g++.old-deja/g++.abi/vbase1.C *************** *** 8440,8446 **** --- 5757,5765 ---- 3914589079b ./gcc/testsuite/g++.old-deja/g++.abi/vbase8-5.C 3332397893b ./gcc/testsuite/g++.old-deja/g++.abi/vbase8-9.C 186405531b ./gcc/testsuite/g++.old-deja/g++.abi/vmihint.C + 2313706108b ./gcc/testsuite/g++.old-deja/g++.abi/vtable.C 1000301122b ./gcc/testsuite/g++.old-deja/g++.abi/vtable2.C + 3689828910b ./gcc/testsuite/g++.old-deja/g++.abi/vtable3.h 3601882386b ./gcc/testsuite/g++.old-deja/g++.abi/vtable3a.C 1066819949b ./gcc/testsuite/g++.old-deja/g++.abi/vtable3b.C 733573133b ./gcc/testsuite/g++.old-deja/g++.abi/vtable3c.C *************** *** 8448,8458 **** 2504154034b ./gcc/testsuite/g++.old-deja/g++.abi/vtable3e.C 841363633b ./gcc/testsuite/g++.old-deja/g++.abi/vtable3f.C 1020377548b ./gcc/testsuite/g++.old-deja/g++.abi/vtable3g.C - 3689828910b ./gcc/testsuite/g++.old-deja/g++.abi/vtable3.h 1675326614b ./gcc/testsuite/g++.old-deja/g++.abi/vtable3h.C 3323598815b ./gcc/testsuite/g++.old-deja/g++.abi/vtable3i.C 4291841254b ./gcc/testsuite/g++.old-deja/g++.abi/vtable3j.C - 2313706108b ./gcc/testsuite/g++.old-deja/g++.abi/vtable.C 3645238009b ./gcc/testsuite/g++.old-deja/g++.benjamin/13478.C 1290057507b ./gcc/testsuite/g++.old-deja/g++.benjamin/13523.C 3226269269b ./gcc/testsuite/g++.old-deja/g++.benjamin/13908.C --- 5767,5775 ---- *************** *** 8518,8523 **** --- 5835,5841 ---- 1370912247b ./gcc/testsuite/g++.old-deja/g++.bob/template2.C 2571452914b ./gcc/testsuite/g++.old-deja/g++.bob/template3.C 2876511802b ./gcc/testsuite/g++.old-deja/g++.bob/template4.C + 3336461445b ./gcc/testsuite/g++.old-deja/g++.brendan/README 934227986b ./gcc/testsuite/g++.old-deja/g++.brendan/abstract1.C 2431794017b ./gcc/testsuite/g++.old-deja/g++.brendan/access1.C 2157723684b ./gcc/testsuite/g++.old-deja/g++.brendan/alignof.C *************** *** 8526,8533 **** 3428758154b ./gcc/testsuite/g++.old-deja/g++.brendan/arm1.C 2574740314b ./gcc/testsuite/g++.old-deja/g++.brendan/arm2.C 2227979686b ./gcc/testsuite/g++.old-deja/g++.brendan/arm3.C - 2917176441b ./gcc/testsuite/g++.old-deja/g++.brendan/array1.C 1965428160b ./gcc/testsuite/g++.old-deja/g++.brendan/array-refs.C 1940036338b ./gcc/testsuite/g++.old-deja/g++.brendan/asm-extn1.C 294912826b ./gcc/testsuite/g++.old-deja/g++.brendan/bit-fields1.C 3253987007b ./gcc/testsuite/g++.old-deja/g++.brendan/bit-fields2.C --- 5844,5851 ---- 3428758154b ./gcc/testsuite/g++.old-deja/g++.brendan/arm1.C 2574740314b ./gcc/testsuite/g++.old-deja/g++.brendan/arm2.C 2227979686b ./gcc/testsuite/g++.old-deja/g++.brendan/arm3.C 1965428160b ./gcc/testsuite/g++.old-deja/g++.brendan/array-refs.C + 2917176441b ./gcc/testsuite/g++.old-deja/g++.brendan/array1.C 1940036338b ./gcc/testsuite/g++.old-deja/g++.brendan/asm-extn1.C 294912826b ./gcc/testsuite/g++.old-deja/g++.brendan/bit-fields1.C 3253987007b ./gcc/testsuite/g++.old-deja/g++.brendan/bit-fields2.C *************** *** 8547,8552 **** --- 5865,5871 ---- 1985077243b ./gcc/testsuite/g++.old-deja/g++.brendan/copy7.C 2478516341b ./gcc/testsuite/g++.old-deja/g++.brendan/copy8.C 4007430298b ./gcc/testsuite/g++.old-deja/g++.brendan/copy9.C + 73005642b ./gcc/testsuite/g++.old-deja/g++.brendan/crash1.C 2509157689b ./gcc/testsuite/g++.old-deja/g++.brendan/crash10.C 1585446941b ./gcc/testsuite/g++.old-deja/g++.brendan/crash11.C 1430846464b ./gcc/testsuite/g++.old-deja/g++.brendan/crash12.C *************** *** 8556,8562 **** 183613091b ./gcc/testsuite/g++.old-deja/g++.brendan/crash16.C 3586612658b ./gcc/testsuite/g++.old-deja/g++.brendan/crash17.C 563583842b ./gcc/testsuite/g++.old-deja/g++.brendan/crash18.C ! 73005642b ./gcc/testsuite/g++.old-deja/g++.brendan/crash1.C 4119104494b ./gcc/testsuite/g++.old-deja/g++.brendan/crash20.C 927230476b ./gcc/testsuite/g++.old-deja/g++.brendan/crash22.C 547223421b ./gcc/testsuite/g++.old-deja/g++.brendan/crash23.C --- 5875,5881 ---- 183613091b ./gcc/testsuite/g++.old-deja/g++.brendan/crash16.C 3586612658b ./gcc/testsuite/g++.old-deja/g++.brendan/crash17.C 563583842b ./gcc/testsuite/g++.old-deja/g++.brendan/crash18.C ! 2936347090b ./gcc/testsuite/g++.old-deja/g++.brendan/crash2.C 4119104494b ./gcc/testsuite/g++.old-deja/g++.brendan/crash20.C 927230476b ./gcc/testsuite/g++.old-deja/g++.brendan/crash22.C 547223421b ./gcc/testsuite/g++.old-deja/g++.brendan/crash23.C *************** *** 8566,8572 **** 1537159422b ./gcc/testsuite/g++.old-deja/g++.brendan/crash27.C 1095243311b ./gcc/testsuite/g++.old-deja/g++.brendan/crash28.C 899543906b ./gcc/testsuite/g++.old-deja/g++.brendan/crash29.C ! 2936347090b ./gcc/testsuite/g++.old-deja/g++.brendan/crash2.C 454853598b ./gcc/testsuite/g++.old-deja/g++.brendan/crash30.C 3144780301b ./gcc/testsuite/g++.old-deja/g++.brendan/crash31.C 255295637b ./gcc/testsuite/g++.old-deja/g++.brendan/crash32.C --- 5885,5891 ---- 1537159422b ./gcc/testsuite/g++.old-deja/g++.brendan/crash27.C 1095243311b ./gcc/testsuite/g++.old-deja/g++.brendan/crash28.C 899543906b ./gcc/testsuite/g++.old-deja/g++.brendan/crash29.C ! 1740428956b ./gcc/testsuite/g++.old-deja/g++.brendan/crash3.C 454853598b ./gcc/testsuite/g++.old-deja/g++.brendan/crash30.C 3144780301b ./gcc/testsuite/g++.old-deja/g++.brendan/crash31.C 255295637b ./gcc/testsuite/g++.old-deja/g++.brendan/crash32.C *************** *** 8577,8583 **** 4095821179b ./gcc/testsuite/g++.old-deja/g++.brendan/crash37.C 3095994190b ./gcc/testsuite/g++.old-deja/g++.brendan/crash38.C 1186001658b ./gcc/testsuite/g++.old-deja/g++.brendan/crash39.C ! 1740428956b ./gcc/testsuite/g++.old-deja/g++.brendan/crash3.C 2475994253b ./gcc/testsuite/g++.old-deja/g++.brendan/crash40.C 4225248580b ./gcc/testsuite/g++.old-deja/g++.brendan/crash41.C 2430128234b ./gcc/testsuite/g++.old-deja/g++.brendan/crash42.C --- 5896,5902 ---- 4095821179b ./gcc/testsuite/g++.old-deja/g++.brendan/crash37.C 3095994190b ./gcc/testsuite/g++.old-deja/g++.brendan/crash38.C 1186001658b ./gcc/testsuite/g++.old-deja/g++.brendan/crash39.C ! 2075374404b ./gcc/testsuite/g++.old-deja/g++.brendan/crash4.C 2475994253b ./gcc/testsuite/g++.old-deja/g++.brendan/crash40.C 4225248580b ./gcc/testsuite/g++.old-deja/g++.brendan/crash41.C 2430128234b ./gcc/testsuite/g++.old-deja/g++.brendan/crash42.C *************** *** 8588,8594 **** 3880129363b ./gcc/testsuite/g++.old-deja/g++.brendan/crash47.C 740147641b ./gcc/testsuite/g++.old-deja/g++.brendan/crash48.C 991257367b ./gcc/testsuite/g++.old-deja/g++.brendan/crash49.C ! 2075374404b ./gcc/testsuite/g++.old-deja/g++.brendan/crash4.C 3106709406b ./gcc/testsuite/g++.old-deja/g++.brendan/crash50.C 2259885687b ./gcc/testsuite/g++.old-deja/g++.brendan/crash51.C 2036848605b ./gcc/testsuite/g++.old-deja/g++.brendan/crash52.C --- 5907,5913 ---- 3880129363b ./gcc/testsuite/g++.old-deja/g++.brendan/crash47.C 740147641b ./gcc/testsuite/g++.old-deja/g++.brendan/crash48.C 991257367b ./gcc/testsuite/g++.old-deja/g++.brendan/crash49.C ! 1308193179b ./gcc/testsuite/g++.old-deja/g++.brendan/crash5.C 3106709406b ./gcc/testsuite/g++.old-deja/g++.brendan/crash50.C 2259885687b ./gcc/testsuite/g++.old-deja/g++.brendan/crash51.C 2036848605b ./gcc/testsuite/g++.old-deja/g++.brendan/crash52.C *************** *** 8598,8604 **** 1729790662b ./gcc/testsuite/g++.old-deja/g++.brendan/crash56.C 2097488269b ./gcc/testsuite/g++.old-deja/g++.brendan/crash57.C 1260831404b ./gcc/testsuite/g++.old-deja/g++.brendan/crash58.C ! 1308193179b ./gcc/testsuite/g++.old-deja/g++.brendan/crash5.C 3431262814b ./gcc/testsuite/g++.old-deja/g++.brendan/crash60.C 3845483878b ./gcc/testsuite/g++.old-deja/g++.brendan/crash61.C 2163074363b ./gcc/testsuite/g++.old-deja/g++.brendan/crash62.C --- 5917,5923 ---- 1729790662b ./gcc/testsuite/g++.old-deja/g++.brendan/crash56.C 2097488269b ./gcc/testsuite/g++.old-deja/g++.brendan/crash57.C 1260831404b ./gcc/testsuite/g++.old-deja/g++.brendan/crash58.C ! 3392471730b ./gcc/testsuite/g++.old-deja/g++.brendan/crash6.C 3431262814b ./gcc/testsuite/g++.old-deja/g++.brendan/crash60.C 3845483878b ./gcc/testsuite/g++.old-deja/g++.brendan/crash61.C 2163074363b ./gcc/testsuite/g++.old-deja/g++.brendan/crash62.C *************** *** 8608,8614 **** 2970533101b ./gcc/testsuite/g++.old-deja/g++.brendan/crash66.C 1982272158b ./gcc/testsuite/g++.old-deja/g++.brendan/crash67.C 3682557717b ./gcc/testsuite/g++.old-deja/g++.brendan/crash68.C - 3392471730b ./gcc/testsuite/g++.old-deja/g++.brendan/crash6.C 345174202b ./gcc/testsuite/g++.old-deja/g++.brendan/crash7.C 4188483267b ./gcc/testsuite/g++.old-deja/g++.brendan/crash8.C 3802934826b ./gcc/testsuite/g++.old-deja/g++.brendan/crash9.C --- 5927,5932 ---- *************** *** 8628,8639 **** 1270991957b ./gcc/testsuite/g++.old-deja/g++.brendan/dtors2.C 1405617163b ./gcc/testsuite/g++.old-deja/g++.brendan/dtors3.C 50594595b ./gcc/testsuite/g++.old-deja/g++.brendan/eh1.C 2154024297b ./gcc/testsuite/g++.old-deja/g++.brendan/enum10.C 1012457759b ./gcc/testsuite/g++.old-deja/g++.brendan/enum11.C 3613259052b ./gcc/testsuite/g++.old-deja/g++.brendan/enum12.C 4062281691b ./gcc/testsuite/g++.old-deja/g++.brendan/enum13.C 1026608225b ./gcc/testsuite/g++.old-deja/g++.brendan/enum14.C - 2752357079b ./gcc/testsuite/g++.old-deja/g++.brendan/enum1.C 2495301458b ./gcc/testsuite/g++.old-deja/g++.brendan/enum2.C 857641714b ./gcc/testsuite/g++.old-deja/g++.brendan/enum3.C 2436566654b ./gcc/testsuite/g++.old-deja/g++.brendan/enum4.C --- 5946,5958 ---- 1270991957b ./gcc/testsuite/g++.old-deja/g++.brendan/dtors2.C 1405617163b ./gcc/testsuite/g++.old-deja/g++.brendan/dtors3.C 50594595b ./gcc/testsuite/g++.old-deja/g++.brendan/eh1.C + 4113228927b ./gcc/testsuite/g++.old-deja/g++.brendan/enum-clash.C + 2752357079b ./gcc/testsuite/g++.old-deja/g++.brendan/enum1.C 2154024297b ./gcc/testsuite/g++.old-deja/g++.brendan/enum10.C 1012457759b ./gcc/testsuite/g++.old-deja/g++.brendan/enum11.C 3613259052b ./gcc/testsuite/g++.old-deja/g++.brendan/enum12.C 4062281691b ./gcc/testsuite/g++.old-deja/g++.brendan/enum13.C 1026608225b ./gcc/testsuite/g++.old-deja/g++.brendan/enum14.C 2495301458b ./gcc/testsuite/g++.old-deja/g++.brendan/enum2.C 857641714b ./gcc/testsuite/g++.old-deja/g++.brendan/enum3.C 2436566654b ./gcc/testsuite/g++.old-deja/g++.brendan/enum4.C *************** *** 8642,8652 **** 1144354186b ./gcc/testsuite/g++.old-deja/g++.brendan/enum7.C 3721081721b ./gcc/testsuite/g++.old-deja/g++.brendan/enum8.C 1284409256b ./gcc/testsuite/g++.old-deja/g++.brendan/enum9.C ! 4113228927b ./gcc/testsuite/g++.old-deja/g++.brendan/enum-clash.C 3510755439b ./gcc/testsuite/g++.old-deja/g++.brendan/err-msg10.C 3189183114b ./gcc/testsuite/g++.old-deja/g++.brendan/err-msg11.C 1104107183b ./gcc/testsuite/g++.old-deja/g++.brendan/err-msg12.C - 1658458603b ./gcc/testsuite/g++.old-deja/g++.brendan/err-msg1.C 1956101213b ./gcc/testsuite/g++.old-deja/g++.brendan/err-msg2.C 139198600b ./gcc/testsuite/g++.old-deja/g++.brendan/err-msg3.C 3762408786b ./gcc/testsuite/g++.old-deja/g++.brendan/err-msg4.C --- 5961,5970 ---- 1144354186b ./gcc/testsuite/g++.old-deja/g++.brendan/enum7.C 3721081721b ./gcc/testsuite/g++.old-deja/g++.brendan/enum8.C 1284409256b ./gcc/testsuite/g++.old-deja/g++.brendan/enum9.C ! 1658458603b ./gcc/testsuite/g++.old-deja/g++.brendan/err-msg1.C 3510755439b ./gcc/testsuite/g++.old-deja/g++.brendan/err-msg10.C 3189183114b ./gcc/testsuite/g++.old-deja/g++.brendan/err-msg11.C 1104107183b ./gcc/testsuite/g++.old-deja/g++.brendan/err-msg12.C 1956101213b ./gcc/testsuite/g++.old-deja/g++.brendan/err-msg2.C 139198600b ./gcc/testsuite/g++.old-deja/g++.brendan/err-msg3.C 3762408786b ./gcc/testsuite/g++.old-deja/g++.brendan/err-msg4.C *************** *** 8661,8671 **** 2483886013b ./gcc/testsuite/g++.old-deja/g++.brendan/friend3.C 3122834560b ./gcc/testsuite/g++.old-deja/g++.brendan/friend4.C 1714830524b ./gcc/testsuite/g++.old-deja/g++.brendan/groff1.C 2246409428b ./gcc/testsuite/g++.old-deja/g++.brendan/init10.C 1901230214b ./gcc/testsuite/g++.old-deja/g++.brendan/init11.C 851254540b ./gcc/testsuite/g++.old-deja/g++.brendan/init12.C 2224246807b ./gcc/testsuite/g++.old-deja/g++.brendan/init13.C - 3909689745b ./gcc/testsuite/g++.old-deja/g++.brendan/init1.C 1726022047b ./gcc/testsuite/g++.old-deja/g++.brendan/init2.C 2066877415b ./gcc/testsuite/g++.old-deja/g++.brendan/init3.C 1439428404b ./gcc/testsuite/g++.old-deja/g++.brendan/init4.C --- 5979,5989 ---- 2483886013b ./gcc/testsuite/g++.old-deja/g++.brendan/friend3.C 3122834560b ./gcc/testsuite/g++.old-deja/g++.brendan/friend4.C 1714830524b ./gcc/testsuite/g++.old-deja/g++.brendan/groff1.C + 3909689745b ./gcc/testsuite/g++.old-deja/g++.brendan/init1.C 2246409428b ./gcc/testsuite/g++.old-deja/g++.brendan/init10.C 1901230214b ./gcc/testsuite/g++.old-deja/g++.brendan/init11.C 851254540b ./gcc/testsuite/g++.old-deja/g++.brendan/init12.C 2224246807b ./gcc/testsuite/g++.old-deja/g++.brendan/init13.C 1726022047b ./gcc/testsuite/g++.old-deja/g++.brendan/init2.C 2066877415b ./gcc/testsuite/g++.old-deja/g++.brendan/init3.C 1439428404b ./gcc/testsuite/g++.old-deja/g++.brendan/init4.C *************** *** 8677,8689 **** 2492742855b ./gcc/testsuite/g++.old-deja/g++.brendan/label1.C 2945125995b ./gcc/testsuite/g++.old-deja/g++.brendan/label2.C 4243229627b ./gcc/testsuite/g++.old-deja/g++.brendan/line1.C 840292246b ./gcc/testsuite/g++.old-deja/g++.brendan/misc10.C 3482838045b ./gcc/testsuite/g++.old-deja/g++.brendan/misc11.C 2371682672b ./gcc/testsuite/g++.old-deja/g++.brendan/misc14.C 4172246159b ./gcc/testsuite/g++.old-deja/g++.brendan/misc15.C 1840031399b ./gcc/testsuite/g++.old-deja/g++.brendan/misc16.C 4145144968b ./gcc/testsuite/g++.old-deja/g++.brendan/misc17.C - 3260792263b ./gcc/testsuite/g++.old-deja/g++.brendan/misc1.C 1747247058b ./gcc/testsuite/g++.old-deja/g++.brendan/misc2.C 1984879017b ./gcc/testsuite/g++.old-deja/g++.brendan/misc3.C 3850320829b ./gcc/testsuite/g++.old-deja/g++.brendan/misc4.C --- 5995,6007 ---- 2492742855b ./gcc/testsuite/g++.old-deja/g++.brendan/label1.C 2945125995b ./gcc/testsuite/g++.old-deja/g++.brendan/label2.C 4243229627b ./gcc/testsuite/g++.old-deja/g++.brendan/line1.C + 3260792263b ./gcc/testsuite/g++.old-deja/g++.brendan/misc1.C 840292246b ./gcc/testsuite/g++.old-deja/g++.brendan/misc10.C 3482838045b ./gcc/testsuite/g++.old-deja/g++.brendan/misc11.C 2371682672b ./gcc/testsuite/g++.old-deja/g++.brendan/misc14.C 4172246159b ./gcc/testsuite/g++.old-deja/g++.brendan/misc15.C 1840031399b ./gcc/testsuite/g++.old-deja/g++.brendan/misc16.C 4145144968b ./gcc/testsuite/g++.old-deja/g++.brendan/misc17.C 1747247058b ./gcc/testsuite/g++.old-deja/g++.brendan/misc2.C 1984879017b ./gcc/testsuite/g++.old-deja/g++.brendan/misc3.C 3850320829b ./gcc/testsuite/g++.old-deja/g++.brendan/misc4.C *************** *** 8693,8698 **** --- 6011,6017 ---- 4192698961b ./gcc/testsuite/g++.old-deja/g++.brendan/misc8.C 464358847b ./gcc/testsuite/g++.old-deja/g++.brendan/misc9.C 4175086610b ./gcc/testsuite/g++.old-deja/g++.brendan/mutable1.C + 2880395837b ./gcc/testsuite/g++.old-deja/g++.brendan/nest1.C 4218289945b ./gcc/testsuite/g++.old-deja/g++.brendan/nest10.C 2376522411b ./gcc/testsuite/g++.old-deja/g++.brendan/nest11.C 1975302793b ./gcc/testsuite/g++.old-deja/g++.brendan/nest12.C *************** *** 8702,8720 **** 1548858648b ./gcc/testsuite/g++.old-deja/g++.brendan/nest17.C 3262257927b ./gcc/testsuite/g++.old-deja/g++.brendan/nest18.C 2348257545b ./gcc/testsuite/g++.old-deja/g++.brendan/nest19.C ! 2880395837b ./gcc/testsuite/g++.old-deja/g++.brendan/nest1.C 3266883735b ./gcc/testsuite/g++.old-deja/g++.brendan/nest20.C 269879871b ./gcc/testsuite/g++.old-deja/g++.brendan/nest21.C 3747210741b ./gcc/testsuite/g++.old-deja/g++.brendan/nest22.C 3359473085b ./gcc/testsuite/g++.old-deja/g++.brendan/nest23.C 741780000b ./gcc/testsuite/g++.old-deja/g++.brendan/nest24.C - 4158798113b ./gcc/testsuite/g++.old-deja/g++.brendan/nest2.C 3460040540b ./gcc/testsuite/g++.old-deja/g++.brendan/nest3.C 3092321784b ./gcc/testsuite/g++.old-deja/g++.brendan/nest4.C 3209968741b ./gcc/testsuite/g++.old-deja/g++.brendan/new1.C 560844122b ./gcc/testsuite/g++.old-deja/g++.brendan/new2.C 952562718b ./gcc/testsuite/g++.old-deja/g++.brendan/new3.C - 611468654b ./gcc/testsuite/g++.old-deja/g++.brendan/new-array.C 864176391b ./gcc/testsuite/g++.old-deja/g++.brendan/ns1.C 2649926624b ./gcc/testsuite/g++.old-deja/g++.brendan/operators1.C 2592721748b ./gcc/testsuite/g++.old-deja/g++.brendan/operators2.C --- 6021,6038 ---- 1548858648b ./gcc/testsuite/g++.old-deja/g++.brendan/nest17.C 3262257927b ./gcc/testsuite/g++.old-deja/g++.brendan/nest18.C 2348257545b ./gcc/testsuite/g++.old-deja/g++.brendan/nest19.C ! 4158798113b ./gcc/testsuite/g++.old-deja/g++.brendan/nest2.C 3266883735b ./gcc/testsuite/g++.old-deja/g++.brendan/nest20.C 269879871b ./gcc/testsuite/g++.old-deja/g++.brendan/nest21.C 3747210741b ./gcc/testsuite/g++.old-deja/g++.brendan/nest22.C 3359473085b ./gcc/testsuite/g++.old-deja/g++.brendan/nest23.C 741780000b ./gcc/testsuite/g++.old-deja/g++.brendan/nest24.C 3460040540b ./gcc/testsuite/g++.old-deja/g++.brendan/nest3.C 3092321784b ./gcc/testsuite/g++.old-deja/g++.brendan/nest4.C + 611468654b ./gcc/testsuite/g++.old-deja/g++.brendan/new-array.C 3209968741b ./gcc/testsuite/g++.old-deja/g++.brendan/new1.C 560844122b ./gcc/testsuite/g++.old-deja/g++.brendan/new2.C 952562718b ./gcc/testsuite/g++.old-deja/g++.brendan/new3.C 864176391b ./gcc/testsuite/g++.old-deja/g++.brendan/ns1.C 2649926624b ./gcc/testsuite/g++.old-deja/g++.brendan/operators1.C 2592721748b ./gcc/testsuite/g++.old-deja/g++.brendan/operators2.C *************** *** 8724,8732 **** 1939786411b ./gcc/testsuite/g++.old-deja/g++.brendan/operators6.C 2774653307b ./gcc/testsuite/g++.old-deja/g++.brendan/operators7.C 1264143080b ./gcc/testsuite/g++.old-deja/g++.brendan/operators8.C 2183452204b ./gcc/testsuite/g++.old-deja/g++.brendan/overload10.C 1188978134b ./gcc/testsuite/g++.old-deja/g++.brendan/overload11.C - 785078285b ./gcc/testsuite/g++.old-deja/g++.brendan/overload1.C 2745841756b ./gcc/testsuite/g++.old-deja/g++.brendan/overload2.C 4234832416b ./gcc/testsuite/g++.old-deja/g++.brendan/overload3.C 1846706050b ./gcc/testsuite/g++.old-deja/g++.brendan/overload4.C --- 6042,6050 ---- 1939786411b ./gcc/testsuite/g++.old-deja/g++.brendan/operators6.C 2774653307b ./gcc/testsuite/g++.old-deja/g++.brendan/operators7.C 1264143080b ./gcc/testsuite/g++.old-deja/g++.brendan/operators8.C + 785078285b ./gcc/testsuite/g++.old-deja/g++.brendan/overload1.C 2183452204b ./gcc/testsuite/g++.old-deja/g++.brendan/overload10.C 1188978134b ./gcc/testsuite/g++.old-deja/g++.brendan/overload11.C 2745841756b ./gcc/testsuite/g++.old-deja/g++.brendan/overload2.C 4234832416b ./gcc/testsuite/g++.old-deja/g++.brendan/overload3.C 1846706050b ./gcc/testsuite/g++.old-deja/g++.brendan/overload4.C *************** *** 8751,8757 **** 4022822146b ./gcc/testsuite/g++.old-deja/g++.brendan/ptrmem2.C 619231948b ./gcc/testsuite/g++.old-deja/g++.brendan/ptrmem3.C 2919120027b ./gcc/testsuite/g++.old-deja/g++.brendan/ptrmem4.C - 3336461445b ./gcc/testsuite/g++.old-deja/g++.brendan/README 2442841220b ./gcc/testsuite/g++.old-deja/g++.brendan/recurse.C 3187500629b ./gcc/testsuite/g++.old-deja/g++.brendan/redecl1.C 3919299369b ./gcc/testsuite/g++.old-deja/g++.brendan/redecl2.C --- 6069,6074 ---- *************** *** 8774,8779 **** --- 6091,6097 ---- 3667553213b ./gcc/testsuite/g++.old-deja/g++.brendan/static2.C 3518242349b ./gcc/testsuite/g++.old-deja/g++.brendan/static3.C 1578126603b ./gcc/testsuite/g++.old-deja/g++.brendan/synth1.C + 2963427658b ./gcc/testsuite/g++.old-deja/g++.brendan/template1.C 486716772b ./gcc/testsuite/g++.old-deja/g++.brendan/template11.C 675307124b ./gcc/testsuite/g++.old-deja/g++.brendan/template12.C 4278394002b ./gcc/testsuite/g++.old-deja/g++.brendan/template13.C *************** *** 8782,8788 **** 3118430115b ./gcc/testsuite/g++.old-deja/g++.brendan/template17.C 378060276b ./gcc/testsuite/g++.old-deja/g++.brendan/template18.C 3959082203b ./gcc/testsuite/g++.old-deja/g++.brendan/template19.C ! 2963427658b ./gcc/testsuite/g++.old-deja/g++.brendan/template1.C 4030461184b ./gcc/testsuite/g++.old-deja/g++.brendan/template20.C 1759284086b ./gcc/testsuite/g++.old-deja/g++.brendan/template21.C 2020058736b ./gcc/testsuite/g++.old-deja/g++.brendan/template22.C --- 6100,6106 ---- 3118430115b ./gcc/testsuite/g++.old-deja/g++.brendan/template17.C 378060276b ./gcc/testsuite/g++.old-deja/g++.brendan/template18.C 3959082203b ./gcc/testsuite/g++.old-deja/g++.brendan/template19.C ! 4292737843b ./gcc/testsuite/g++.old-deja/g++.brendan/template2.C 4030461184b ./gcc/testsuite/g++.old-deja/g++.brendan/template20.C 1759284086b ./gcc/testsuite/g++.old-deja/g++.brendan/template21.C 2020058736b ./gcc/testsuite/g++.old-deja/g++.brendan/template22.C *************** *** 8793,8802 **** 1378450506b ./gcc/testsuite/g++.old-deja/g++.brendan/template27.C 1797214646b ./gcc/testsuite/g++.old-deja/g++.brendan/template28.C 290486161b ./gcc/testsuite/g++.old-deja/g++.brendan/template29.C ! 4292737843b ./gcc/testsuite/g++.old-deja/g++.brendan/template2.C 3262101990b ./gcc/testsuite/g++.old-deja/g++.brendan/template30.C 3508460272b ./gcc/testsuite/g++.old-deja/g++.brendan/template31.C - 1373002312b ./gcc/testsuite/g++.old-deja/g++.brendan/template3.C 2599566194b ./gcc/testsuite/g++.old-deja/g++.brendan/template4.C 575580037b ./gcc/testsuite/g++.old-deja/g++.brendan/template5.C 534471494b ./gcc/testsuite/g++.old-deja/g++.brendan/template6.C --- 6111,6119 ---- 1378450506b ./gcc/testsuite/g++.old-deja/g++.brendan/template27.C 1797214646b ./gcc/testsuite/g++.old-deja/g++.brendan/template28.C 290486161b ./gcc/testsuite/g++.old-deja/g++.brendan/template29.C ! 1373002312b ./gcc/testsuite/g++.old-deja/g++.brendan/template3.C 3262101990b ./gcc/testsuite/g++.old-deja/g++.brendan/template30.C 3508460272b ./gcc/testsuite/g++.old-deja/g++.brendan/template31.C 2599566194b ./gcc/testsuite/g++.old-deja/g++.brendan/template4.C 575580037b ./gcc/testsuite/g++.old-deja/g++.brendan/template5.C 534471494b ./gcc/testsuite/g++.old-deja/g++.brendan/template6.C *************** *** 8807,8814 **** 2846047998b ./gcc/testsuite/g++.old-deja/g++.brendan/union1.C 823018336b ./gcc/testsuite/g++.old-deja/g++.brendan/union2.C 2620564840b ./gcc/testsuite/g++.old-deja/g++.brendan/union3.C - 1914281947b ./gcc/testsuite/g++.old-deja/g++.brendan/visibility10.C 2922551156b ./gcc/testsuite/g++.old-deja/g++.brendan/visibility1.C 3793323471b ./gcc/testsuite/g++.old-deja/g++.brendan/visibility2.C 399740001b ./gcc/testsuite/g++.old-deja/g++.brendan/visibility3.C 2097292018b ./gcc/testsuite/g++.old-deja/g++.brendan/visibility4.C --- 6124,6131 ---- 2846047998b ./gcc/testsuite/g++.old-deja/g++.brendan/union1.C 823018336b ./gcc/testsuite/g++.old-deja/g++.brendan/union2.C 2620564840b ./gcc/testsuite/g++.old-deja/g++.brendan/union3.C 2922551156b ./gcc/testsuite/g++.old-deja/g++.brendan/visibility1.C + 1914281947b ./gcc/testsuite/g++.old-deja/g++.brendan/visibility10.C 3793323471b ./gcc/testsuite/g++.old-deja/g++.brendan/visibility2.C 399740001b ./gcc/testsuite/g++.old-deja/g++.brendan/visibility3.C 2097292018b ./gcc/testsuite/g++.old-deja/g++.brendan/visibility4.C *************** *** 8818,8825 **** 1186381819b ./gcc/testsuite/g++.old-deja/g++.brendan/visibility8.C 350593631b ./gcc/testsuite/g++.old-deja/g++.brendan/visibility9.C 1417363197b ./gcc/testsuite/g++.old-deja/g++.brendan/vtables1.C - 2127742392b ./gcc/testsuite/g++.old-deja/g++.brendan/warnings10.C 4011038443b ./gcc/testsuite/g++.old-deja/g++.brendan/warnings1.C 752421094b ./gcc/testsuite/g++.old-deja/g++.brendan/warnings2.C 2267971773b ./gcc/testsuite/g++.old-deja/g++.brendan/warnings3.C 60611814b ./gcc/testsuite/g++.old-deja/g++.brendan/warnings4.C --- 6135,6142 ---- 1186381819b ./gcc/testsuite/g++.old-deja/g++.brendan/visibility8.C 350593631b ./gcc/testsuite/g++.old-deja/g++.brendan/visibility9.C 1417363197b ./gcc/testsuite/g++.old-deja/g++.brendan/vtables1.C 4011038443b ./gcc/testsuite/g++.old-deja/g++.brendan/warnings1.C + 2127742392b ./gcc/testsuite/g++.old-deja/g++.brendan/warnings10.C 752421094b ./gcc/testsuite/g++.old-deja/g++.brendan/warnings2.C 2267971773b ./gcc/testsuite/g++.old-deja/g++.brendan/warnings3.C 60611814b ./gcc/testsuite/g++.old-deja/g++.brendan/warnings4.C *************** *** 8925,8936 **** 1381261051b ./gcc/testsuite/g++.old-deja/g++.bugs/900520_05.C 1154797658b ./gcc/testsuite/g++.old-deja/g++.bugs/900520_06.C 1025142468b ./gcc/testsuite/g++.old-deja/g++.eh/badalloc1.C 3799957377b ./gcc/testsuite/g++.old-deja/g++.eh/catch10.C 2291520496b ./gcc/testsuite/g++.old-deja/g++.eh/catch11.C 3311967999b ./gcc/testsuite/g++.old-deja/g++.eh/catch12.C 3320439198b ./gcc/testsuite/g++.old-deja/g++.eh/catch13.C 998245899b ./gcc/testsuite/g++.old-deja/g++.eh/catch14.C - 669779261b ./gcc/testsuite/g++.old-deja/g++.eh/catch1.C 2873880433b ./gcc/testsuite/g++.old-deja/g++.eh/catch2.C 2886528606b ./gcc/testsuite/g++.old-deja/g++.eh/catch3.C 237405446b ./gcc/testsuite/g++.old-deja/g++.eh/catch3p.C --- 6242,6253 ---- 1381261051b ./gcc/testsuite/g++.old-deja/g++.bugs/900520_05.C 1154797658b ./gcc/testsuite/g++.old-deja/g++.bugs/900520_06.C 1025142468b ./gcc/testsuite/g++.old-deja/g++.eh/badalloc1.C + 669779261b ./gcc/testsuite/g++.old-deja/g++.eh/catch1.C 3799957377b ./gcc/testsuite/g++.old-deja/g++.eh/catch10.C 2291520496b ./gcc/testsuite/g++.old-deja/g++.eh/catch11.C 3311967999b ./gcc/testsuite/g++.old-deja/g++.eh/catch12.C 3320439198b ./gcc/testsuite/g++.old-deja/g++.eh/catch13.C 998245899b ./gcc/testsuite/g++.old-deja/g++.eh/catch14.C 2873880433b ./gcc/testsuite/g++.old-deja/g++.eh/catch2.C 2886528606b ./gcc/testsuite/g++.old-deja/g++.eh/catch3.C 237405446b ./gcc/testsuite/g++.old-deja/g++.eh/catch3p.C *************** *** 9007,9014 **** 2976027349b ./gcc/testsuite/g++.old-deja/g++.ext/array2.C 3272522793b ./gcc/testsuite/g++.old-deja/g++.ext/array3.C 3707624253b ./gcc/testsuite/g++.old-deja/g++.ext/array4.C - 2445582885b ./gcc/testsuite/g++.old-deja/g++.ext/arrnew2.C 1380113065b ./gcc/testsuite/g++.old-deja/g++.ext/arrnew.C 3682137158b ./gcc/testsuite/g++.old-deja/g++.ext/asmspec1.C 4101102615b ./gcc/testsuite/g++.old-deja/g++.ext/attrib1.C 3350275577b ./gcc/testsuite/g++.old-deja/g++.ext/attrib2.C --- 6324,6331 ---- 2976027349b ./gcc/testsuite/g++.old-deja/g++.ext/array2.C 3272522793b ./gcc/testsuite/g++.old-deja/g++.ext/array3.C 3707624253b ./gcc/testsuite/g++.old-deja/g++.ext/array4.C 1380113065b ./gcc/testsuite/g++.old-deja/g++.ext/arrnew.C + 2445582885b ./gcc/testsuite/g++.old-deja/g++.ext/arrnew2.C 3682137158b ./gcc/testsuite/g++.old-deja/g++.ext/asmspec1.C 4101102615b ./gcc/testsuite/g++.old-deja/g++.ext/attrib1.C 3350275577b ./gcc/testsuite/g++.old-deja/g++.ext/attrib2.C *************** *** 9030,9039 **** 4236509390b ./gcc/testsuite/g++.old-deja/g++.ext/noweak1.C 1485906792b ./gcc/testsuite/g++.old-deja/g++.ext/null1.C 1534627522b ./gcc/testsuite/g++.old-deja/g++.ext/overload1.C 4247776863b ./gcc/testsuite/g++.old-deja/g++.ext/pretty2.C 1721106953b ./gcc/testsuite/g++.old-deja/g++.ext/pretty3.C 2283773682b ./gcc/testsuite/g++.old-deja/g++.ext/pretty4.C - 2953041955b ./gcc/testsuite/g++.old-deja/g++.ext/pretty.C 1326958568b ./gcc/testsuite/g++.old-deja/g++.ext/restrict1.C 1853972109b ./gcc/testsuite/g++.old-deja/g++.ext/return1.C 463327965b ./gcc/testsuite/g++.old-deja/g++.ext/stmtexpr1.C --- 6347,6356 ---- 4236509390b ./gcc/testsuite/g++.old-deja/g++.ext/noweak1.C 1485906792b ./gcc/testsuite/g++.old-deja/g++.ext/null1.C 1534627522b ./gcc/testsuite/g++.old-deja/g++.ext/overload1.C + 2953041955b ./gcc/testsuite/g++.old-deja/g++.ext/pretty.C 4247776863b ./gcc/testsuite/g++.old-deja/g++.ext/pretty2.C 1721106953b ./gcc/testsuite/g++.old-deja/g++.ext/pretty3.C 2283773682b ./gcc/testsuite/g++.old-deja/g++.ext/pretty4.C 1326958568b ./gcc/testsuite/g++.old-deja/g++.ext/restrict1.C 1853972109b ./gcc/testsuite/g++.old-deja/g++.ext/return1.C 463327965b ./gcc/testsuite/g++.old-deja/g++.ext/stmtexpr1.C *************** *** 9057,9062 **** --- 6374,6380 ---- 732967750b ./gcc/testsuite/g++.old-deja/g++.gb/scope13.C 939161176b ./gcc/testsuite/g++.old-deja/g++.jason/2371.C 3968774299b ./gcc/testsuite/g++.old-deja/g++.jason/3523.C + 906409788b ./gcc/testsuite/g++.old-deja/g++.jason/access1.C 1546884424b ./gcc/testsuite/g++.old-deja/g++.jason/access10.C 739404807b ./gcc/testsuite/g++.old-deja/g++.jason/access11.C 512908443b ./gcc/testsuite/g++.old-deja/g++.jason/access12.C *************** *** 9066,9078 **** 667302295b ./gcc/testsuite/g++.old-deja/g++.jason/access16.C 2572582943b ./gcc/testsuite/g++.old-deja/g++.jason/access17.C 2772251892b ./gcc/testsuite/g++.old-deja/g++.jason/access18.C ! 906409788b ./gcc/testsuite/g++.old-deja/g++.jason/access1.C 2659493566b ./gcc/testsuite/g++.old-deja/g++.jason/access20.C 2929579271b ./gcc/testsuite/g++.old-deja/g++.jason/access21.C 3020128764b ./gcc/testsuite/g++.old-deja/g++.jason/access22.C 2730640435b ./gcc/testsuite/g++.old-deja/g++.jason/access23.C 338921992b ./gcc/testsuite/g++.old-deja/g++.jason/access24.C - 3689044609b ./gcc/testsuite/g++.old-deja/g++.jason/access2.C 642011051b ./gcc/testsuite/g++.old-deja/g++.jason/access3.C 3641897763b ./gcc/testsuite/g++.old-deja/g++.jason/access4.C 3768207880b ./gcc/testsuite/g++.old-deja/g++.jason/access5.C --- 6384,6395 ---- 667302295b ./gcc/testsuite/g++.old-deja/g++.jason/access16.C 2572582943b ./gcc/testsuite/g++.old-deja/g++.jason/access17.C 2772251892b ./gcc/testsuite/g++.old-deja/g++.jason/access18.C ! 3689044609b ./gcc/testsuite/g++.old-deja/g++.jason/access2.C 2659493566b ./gcc/testsuite/g++.old-deja/g++.jason/access20.C 2929579271b ./gcc/testsuite/g++.old-deja/g++.jason/access21.C 3020128764b ./gcc/testsuite/g++.old-deja/g++.jason/access22.C 2730640435b ./gcc/testsuite/g++.old-deja/g++.jason/access23.C 338921992b ./gcc/testsuite/g++.old-deja/g++.jason/access24.C 642011051b ./gcc/testsuite/g++.old-deja/g++.jason/access3.C 3641897763b ./gcc/testsuite/g++.old-deja/g++.jason/access4.C 3768207880b ./gcc/testsuite/g++.old-deja/g++.jason/access5.C *************** *** 9084,9123 **** 3728379159b ./gcc/testsuite/g++.old-deja/g++.jason/ambig1.C 2153743197b ./gcc/testsuite/g++.old-deja/g++.jason/ambig2.C 970394079b ./gcc/testsuite/g++.old-deja/g++.jason/ambig3.C 3198278705b ./gcc/testsuite/g++.old-deja/g++.jason/anon2.C 221090634b ./gcc/testsuite/g++.old-deja/g++.jason/anon3.C 1050500875b ./gcc/testsuite/g++.old-deja/g++.jason/anon4.C ! 3828622053b ./gcc/testsuite/g++.old-deja/g++.jason/anon.C 1263298999b ./gcc/testsuite/g++.old-deja/g++.jason/binding2.C 2916172455b ./gcc/testsuite/g++.old-deja/g++.jason/binding3.C ! 3877580602b ./gcc/testsuite/g++.old-deja/g++.jason/binding.C 406790293b ./gcc/testsuite/g++.old-deja/g++.jason/bool2.C 4269822269b ./gcc/testsuite/g++.old-deja/g++.jason/bool3.C 4291089432b ./gcc/testsuite/g++.old-deja/g++.jason/bool4.C 423379068b ./gcc/testsuite/g++.old-deja/g++.jason/bool5.C 3708944851b ./gcc/testsuite/g++.old-deja/g++.jason/bool6.C 2188617432b ./gcc/testsuite/g++.old-deja/g++.jason/bool7.C - 876810594b ./gcc/testsuite/g++.old-deja/g++.jason/bool.C - 910455504b ./gcc/testsuite/g++.old-deja/g++.jason/builtin2.C 1992610065b ./gcc/testsuite/g++.old-deja/g++.jason/builtin.C 3965054847b ./gcc/testsuite/g++.old-deja/g++.jason/byval2.C 3007011667b ./gcc/testsuite/g++.old-deja/g++.jason/byval3.C ! 2992950563b ./gcc/testsuite/g++.old-deja/g++.jason/byval.C 4208843404b ./gcc/testsuite/g++.old-deja/g++.jason/cast1.C 864249402b ./gcc/testsuite/g++.old-deja/g++.jason/cast2.C 3757749527b ./gcc/testsuite/g++.old-deja/g++.jason/cast3.C - 1840939242b ./gcc/testsuite/g++.old-deja/g++.jason/c-inline.C - 3337873852b ./gcc/testsuite/g++.old-deja/g++.jason/cleanup2.C 807930816b ./gcc/testsuite/g++.old-deja/g++.jason/cleanup.C 4038763735b ./gcc/testsuite/g++.old-deja/g++.jason/complete1.C - 2828665920b ./gcc/testsuite/g++.old-deja/g++.jason/cond2.C 2028612347b ./gcc/testsuite/g++.old-deja/g++.jason/cond.C 3479274833b ./gcc/testsuite/g++.old-deja/g++.jason/condexp.C 1286943233b ./gcc/testsuite/g++.old-deja/g++.jason/const2.C 1359832484b ./gcc/testsuite/g++.old-deja/g++.jason/const3.C 217115665b ./gcc/testsuite/g++.old-deja/g++.jason/const4.C - 455783151b ./gcc/testsuite/g++.old-deja/g++.jason/const.C 2571490602b ./gcc/testsuite/g++.old-deja/g++.jason/context.C 3177251757b ./gcc/testsuite/g++.old-deja/g++.jason/conversion10.C 79208780b ./gcc/testsuite/g++.old-deja/g++.jason/conversion11.C 960166000b ./gcc/testsuite/g++.old-deja/g++.jason/conversion2.C --- 6401,6441 ---- 3728379159b ./gcc/testsuite/g++.old-deja/g++.jason/ambig1.C 2153743197b ./gcc/testsuite/g++.old-deja/g++.jason/ambig2.C 970394079b ./gcc/testsuite/g++.old-deja/g++.jason/ambig3.C + 3828622053b ./gcc/testsuite/g++.old-deja/g++.jason/anon.C 3198278705b ./gcc/testsuite/g++.old-deja/g++.jason/anon2.C 221090634b ./gcc/testsuite/g++.old-deja/g++.jason/anon3.C 1050500875b ./gcc/testsuite/g++.old-deja/g++.jason/anon4.C ! 3877580602b ./gcc/testsuite/g++.old-deja/g++.jason/binding.C 1263298999b ./gcc/testsuite/g++.old-deja/g++.jason/binding2.C 2916172455b ./gcc/testsuite/g++.old-deja/g++.jason/binding3.C ! 876810594b ./gcc/testsuite/g++.old-deja/g++.jason/bool.C 406790293b ./gcc/testsuite/g++.old-deja/g++.jason/bool2.C 4269822269b ./gcc/testsuite/g++.old-deja/g++.jason/bool3.C 4291089432b ./gcc/testsuite/g++.old-deja/g++.jason/bool4.C 423379068b ./gcc/testsuite/g++.old-deja/g++.jason/bool5.C 3708944851b ./gcc/testsuite/g++.old-deja/g++.jason/bool6.C 2188617432b ./gcc/testsuite/g++.old-deja/g++.jason/bool7.C 1992610065b ./gcc/testsuite/g++.old-deja/g++.jason/builtin.C + 910455504b ./gcc/testsuite/g++.old-deja/g++.jason/builtin2.C + 2992950563b ./gcc/testsuite/g++.old-deja/g++.jason/byval.C 3965054847b ./gcc/testsuite/g++.old-deja/g++.jason/byval2.C 3007011667b ./gcc/testsuite/g++.old-deja/g++.jason/byval3.C ! 1840939242b ./gcc/testsuite/g++.old-deja/g++.jason/c-inline.C 4208843404b ./gcc/testsuite/g++.old-deja/g++.jason/cast1.C 864249402b ./gcc/testsuite/g++.old-deja/g++.jason/cast2.C 3757749527b ./gcc/testsuite/g++.old-deja/g++.jason/cast3.C 807930816b ./gcc/testsuite/g++.old-deja/g++.jason/cleanup.C + 3337873852b ./gcc/testsuite/g++.old-deja/g++.jason/cleanup2.C 4038763735b ./gcc/testsuite/g++.old-deja/g++.jason/complete1.C 2028612347b ./gcc/testsuite/g++.old-deja/g++.jason/cond.C + 2828665920b ./gcc/testsuite/g++.old-deja/g++.jason/cond2.C 3479274833b ./gcc/testsuite/g++.old-deja/g++.jason/condexp.C + 455783151b ./gcc/testsuite/g++.old-deja/g++.jason/const.C 1286943233b ./gcc/testsuite/g++.old-deja/g++.jason/const2.C 1359832484b ./gcc/testsuite/g++.old-deja/g++.jason/const3.C 217115665b ./gcc/testsuite/g++.old-deja/g++.jason/const4.C 2571490602b ./gcc/testsuite/g++.old-deja/g++.jason/context.C + 390853410b ./gcc/testsuite/g++.old-deja/g++.jason/conversion.C 3177251757b ./gcc/testsuite/g++.old-deja/g++.jason/conversion10.C 79208780b ./gcc/testsuite/g++.old-deja/g++.jason/conversion11.C 960166000b ./gcc/testsuite/g++.old-deja/g++.jason/conversion2.C *************** *** 9128,9138 **** 537258674b ./gcc/testsuite/g++.old-deja/g++.jason/conversion7.C 972941297b ./gcc/testsuite/g++.old-deja/g++.jason/conversion8.C 1301591055b ./gcc/testsuite/g++.old-deja/g++.jason/conversion9.C ! 390853410b ./gcc/testsuite/g++.old-deja/g++.jason/conversion.C 3868623548b ./gcc/testsuite/g++.old-deja/g++.jason/crash10.C 672669842b ./gcc/testsuite/g++.old-deja/g++.jason/crash11.C 2043944323b ./gcc/testsuite/g++.old-deja/g++.jason/crash12.C - 3761548571b ./gcc/testsuite/g++.old-deja/g++.jason/crash1.C 2330655654b ./gcc/testsuite/g++.old-deja/g++.jason/crash3.C 631879164b ./gcc/testsuite/g++.old-deja/g++.jason/crash4.C 1898220452b ./gcc/testsuite/g++.old-deja/g++.jason/crash5.C --- 6446,6455 ---- 537258674b ./gcc/testsuite/g++.old-deja/g++.jason/conversion7.C 972941297b ./gcc/testsuite/g++.old-deja/g++.jason/conversion8.C 1301591055b ./gcc/testsuite/g++.old-deja/g++.jason/conversion9.C ! 3761548571b ./gcc/testsuite/g++.old-deja/g++.jason/crash1.C 3868623548b ./gcc/testsuite/g++.old-deja/g++.jason/crash10.C 672669842b ./gcc/testsuite/g++.old-deja/g++.jason/crash11.C 2043944323b ./gcc/testsuite/g++.old-deja/g++.jason/crash12.C 2330655654b ./gcc/testsuite/g++.old-deja/g++.jason/crash3.C 631879164b ./gcc/testsuite/g++.old-deja/g++.jason/crash4.C 1898220452b ./gcc/testsuite/g++.old-deja/g++.jason/crash5.C *************** *** 9152,9167 **** 3740171614b ./gcc/testsuite/g++.old-deja/g++.jason/delete1.C 3574023328b ./gcc/testsuite/g++.old-deja/g++.jason/delete2.C 2124825264b ./gcc/testsuite/g++.old-deja/g++.jason/delete3.C 2782278746b ./gcc/testsuite/g++.old-deja/g++.jason/destruct2.C 2184115717b ./gcc/testsuite/g++.old-deja/g++.jason/destruct3.C 2354427725b ./gcc/testsuite/g++.old-deja/g++.jason/destruct4.C - 2111475973b ./gcc/testsuite/g++.old-deja/g++.jason/destruct.C 1012609499b ./gcc/testsuite/g++.old-deja/g++.jason/dot.C 2941621886b ./gcc/testsuite/g++.old-deja/g++.jason/dtor2.C 2007513193b ./gcc/testsuite/g++.old-deja/g++.jason/dtor3.C 4216434532b ./gcc/testsuite/g++.old-deja/g++.jason/dtor4.C 2710770854b ./gcc/testsuite/g++.old-deja/g++.jason/dtor5.C ! 2968837117b ./gcc/testsuite/g++.old-deja/g++.jason/dtor.C 3290035079b ./gcc/testsuite/g++.old-deja/g++.jason/enum2.C 2249058705b ./gcc/testsuite/g++.old-deja/g++.jason/enum3.C 2986066562b ./gcc/testsuite/g++.old-deja/g++.jason/enum4.C --- 6469,6485 ---- 3740171614b ./gcc/testsuite/g++.old-deja/g++.jason/delete1.C 3574023328b ./gcc/testsuite/g++.old-deja/g++.jason/delete2.C 2124825264b ./gcc/testsuite/g++.old-deja/g++.jason/delete3.C + 2111475973b ./gcc/testsuite/g++.old-deja/g++.jason/destruct.C 2782278746b ./gcc/testsuite/g++.old-deja/g++.jason/destruct2.C 2184115717b ./gcc/testsuite/g++.old-deja/g++.jason/destruct3.C 2354427725b ./gcc/testsuite/g++.old-deja/g++.jason/destruct4.C 1012609499b ./gcc/testsuite/g++.old-deja/g++.jason/dot.C + 2968837117b ./gcc/testsuite/g++.old-deja/g++.jason/dtor.C 2941621886b ./gcc/testsuite/g++.old-deja/g++.jason/dtor2.C 2007513193b ./gcc/testsuite/g++.old-deja/g++.jason/dtor3.C 4216434532b ./gcc/testsuite/g++.old-deja/g++.jason/dtor4.C 2710770854b ./gcc/testsuite/g++.old-deja/g++.jason/dtor5.C ! 1321613329b ./gcc/testsuite/g++.old-deja/g++.jason/enum.C 3290035079b ./gcc/testsuite/g++.old-deja/g++.jason/enum2.C 2249058705b ./gcc/testsuite/g++.old-deja/g++.jason/enum3.C 2986066562b ./gcc/testsuite/g++.old-deja/g++.jason/enum4.C *************** *** 9169,9208 **** 1384011452b ./gcc/testsuite/g++.old-deja/g++.jason/enum6.C 1992437340b ./gcc/testsuite/g++.old-deja/g++.jason/enum7.C 301848339b ./gcc/testsuite/g++.old-deja/g++.jason/enum8.C - 1321613329b ./gcc/testsuite/g++.old-deja/g++.jason/enum.C 4190940764b ./gcc/testsuite/g++.old-deja/g++.jason/explicit.C 2873291254b ./gcc/testsuite/g++.old-deja/g++.jason/expr1.C - 58017093b ./gcc/testsuite/g++.old-deja/g++.jason/friend2.C 547919805b ./gcc/testsuite/g++.old-deja/g++.jason/friend.C 2216580894b ./gcc/testsuite/g++.old-deja/g++.jason/groff1.C 2374680588b ./gcc/testsuite/g++.old-deja/g++.jason/hmc1.C 4181972071b ./gcc/testsuite/g++.old-deja/g++.jason/incomplete1.C 3516752956b ./gcc/testsuite/g++.old-deja/g++.jason/incomplete2.C 1181670562b ./gcc/testsuite/g++.old-deja/g++.jason/init2.C 1300989165b ./gcc/testsuite/g++.old-deja/g++.jason/init3.C 1056655196b ./gcc/testsuite/g++.old-deja/g++.jason/init4.C ! 3118714958b ./gcc/testsuite/g++.old-deja/g++.jason/init.C 1350717964b ./gcc/testsuite/g++.old-deja/g++.jason/inline2.C 3599001559b ./gcc/testsuite/g++.old-deja/g++.jason/inline3.C - 3360472142b ./gcc/testsuite/g++.old-deja/g++.jason/inline.C 1197315088b ./gcc/testsuite/g++.old-deja/g++.jason/jump.C 4143262839b ./gcc/testsuite/g++.old-deja/g++.jason/lex1.C 3982979093b ./gcc/testsuite/g++.old-deja/g++.jason/lineno2.C 1533566087b ./gcc/testsuite/g++.old-deja/g++.jason/lineno3.C 3991632661b ./gcc/testsuite/g++.old-deja/g++.jason/lineno4.C 2838970132b ./gcc/testsuite/g++.old-deja/g++.jason/lineno5.C - 4180318534b ./gcc/testsuite/g++.old-deja/g++.jason/lineno.C 3655803253b ./gcc/testsuite/g++.old-deja/g++.jason/local.C 1387367938b ./gcc/testsuite/g++.old-deja/g++.jason/lookup2.C 999889620b ./gcc/testsuite/g++.old-deja/g++.jason/lookup3.C ! 1599936145b ./gcc/testsuite/g++.old-deja/g++.jason/lookup.C 568852262b ./gcc/testsuite/g++.old-deja/g++.jason/loverload3.C 3199076242b ./gcc/testsuite/g++.old-deja/g++.jason/loverload4.C ! 2443057294b ./gcc/testsuite/g++.old-deja/g++.jason/loverload.C 1478776091b ./gcc/testsuite/g++.old-deja/g++.jason/lvalue2.C 2486776920b ./gcc/testsuite/g++.old-deja/g++.jason/lvalue3.C 2798615405b ./gcc/testsuite/g++.old-deja/g++.jason/lvalue4.C - 3786923619b ./gcc/testsuite/g++.old-deja/g++.jason/lvalue.C 4250081538b ./gcc/testsuite/g++.old-deja/g++.jason/mangle1.C 2194458585b ./gcc/testsuite/g++.old-deja/g++.jason/mangle2.C 3647115525b ./gcc/testsuite/g++.old-deja/g++.jason/mangle3.C --- 6487,6525 ---- 1384011452b ./gcc/testsuite/g++.old-deja/g++.jason/enum6.C 1992437340b ./gcc/testsuite/g++.old-deja/g++.jason/enum7.C 301848339b ./gcc/testsuite/g++.old-deja/g++.jason/enum8.C 4190940764b ./gcc/testsuite/g++.old-deja/g++.jason/explicit.C 2873291254b ./gcc/testsuite/g++.old-deja/g++.jason/expr1.C 547919805b ./gcc/testsuite/g++.old-deja/g++.jason/friend.C + 58017093b ./gcc/testsuite/g++.old-deja/g++.jason/friend2.C 2216580894b ./gcc/testsuite/g++.old-deja/g++.jason/groff1.C 2374680588b ./gcc/testsuite/g++.old-deja/g++.jason/hmc1.C 4181972071b ./gcc/testsuite/g++.old-deja/g++.jason/incomplete1.C 3516752956b ./gcc/testsuite/g++.old-deja/g++.jason/incomplete2.C + 3118714958b ./gcc/testsuite/g++.old-deja/g++.jason/init.C 1181670562b ./gcc/testsuite/g++.old-deja/g++.jason/init2.C 1300989165b ./gcc/testsuite/g++.old-deja/g++.jason/init3.C 1056655196b ./gcc/testsuite/g++.old-deja/g++.jason/init4.C ! 3360472142b ./gcc/testsuite/g++.old-deja/g++.jason/inline.C 1350717964b ./gcc/testsuite/g++.old-deja/g++.jason/inline2.C 3599001559b ./gcc/testsuite/g++.old-deja/g++.jason/inline3.C 1197315088b ./gcc/testsuite/g++.old-deja/g++.jason/jump.C 4143262839b ./gcc/testsuite/g++.old-deja/g++.jason/lex1.C + 4180318534b ./gcc/testsuite/g++.old-deja/g++.jason/lineno.C 3982979093b ./gcc/testsuite/g++.old-deja/g++.jason/lineno2.C 1533566087b ./gcc/testsuite/g++.old-deja/g++.jason/lineno3.C 3991632661b ./gcc/testsuite/g++.old-deja/g++.jason/lineno4.C 2838970132b ./gcc/testsuite/g++.old-deja/g++.jason/lineno5.C 3655803253b ./gcc/testsuite/g++.old-deja/g++.jason/local.C + 1599936145b ./gcc/testsuite/g++.old-deja/g++.jason/lookup.C 1387367938b ./gcc/testsuite/g++.old-deja/g++.jason/lookup2.C 999889620b ./gcc/testsuite/g++.old-deja/g++.jason/lookup3.C ! 2443057294b ./gcc/testsuite/g++.old-deja/g++.jason/loverload.C 568852262b ./gcc/testsuite/g++.old-deja/g++.jason/loverload3.C 3199076242b ./gcc/testsuite/g++.old-deja/g++.jason/loverload4.C ! 3786923619b ./gcc/testsuite/g++.old-deja/g++.jason/lvalue.C 1478776091b ./gcc/testsuite/g++.old-deja/g++.jason/lvalue2.C 2486776920b ./gcc/testsuite/g++.old-deja/g++.jason/lvalue3.C 2798615405b ./gcc/testsuite/g++.old-deja/g++.jason/lvalue4.C 4250081538b ./gcc/testsuite/g++.old-deja/g++.jason/mangle1.C 2194458585b ./gcc/testsuite/g++.old-deja/g++.jason/mangle2.C 3647115525b ./gcc/testsuite/g++.old-deja/g++.jason/mangle3.C *************** *** 9217,9244 **** 626314633b ./gcc/testsuite/g++.old-deja/g++.jason/nested6.C 1780563080b ./gcc/testsuite/g++.old-deja/g++.jason/nested7.C 496854853b ./gcc/testsuite/g++.old-deja/g++.jason/nested8.C - 814313341b ./gcc/testsuite/g++.old-deja/g++.jason/net2.C 2330092476b ./gcc/testsuite/g++.old-deja/g++.jason/net.C 4108034998b ./gcc/testsuite/g++.old-deja/g++.jason/new2.C 2192651651b ./gcc/testsuite/g++.old-deja/g++.jason/new3.C 2568972186b ./gcc/testsuite/g++.old-deja/g++.jason/new4.C 3405685275b ./gcc/testsuite/g++.old-deja/g++.jason/new5.C - 761357985b ./gcc/testsuite/g++.old-deja/g++.jason/new.C 293878671b ./gcc/testsuite/g++.old-deja/g++.jason/offset1.C 4268803500b ./gcc/testsuite/g++.old-deja/g++.jason/offset2.C 3340471795b ./gcc/testsuite/g++.old-deja/g++.jason/offset3.C 832296383b ./gcc/testsuite/g++.old-deja/g++.jason/offset4.C 1182090566b ./gcc/testsuite/g++.old-deja/g++.jason/opeq2.C 454853917b ./gcc/testsuite/g++.old-deja/g++.jason/opeq3.C 2472414567b ./gcc/testsuite/g++.old-deja/g++.jason/opeq4.C 238172458b ./gcc/testsuite/g++.old-deja/g++.jason/opeq5.C 4059740226b ./gcc/testsuite/g++.old-deja/g++.jason/opeq6.C - 1753231050b ./gcc/testsuite/g++.old-deja/g++.jason/opeq.C - 688207169b ./gcc/testsuite/g++.old-deja/g++.jason/operator2.C 577328766b ./gcc/testsuite/g++.old-deja/g++.jason/operator.C 754653379b ./gcc/testsuite/g++.old-deja/g++.jason/opover.C - 2635243370b ./gcc/testsuite/g++.old-deja/g++.jason/optimize2.C 1303452248b ./gcc/testsuite/g++.old-deja/g++.jason/optimize.C 836020261b ./gcc/testsuite/g++.old-deja/g++.jason/overload11.C 3916743053b ./gcc/testsuite/g++.old-deja/g++.jason/overload12.C 2565712491b ./gcc/testsuite/g++.old-deja/g++.jason/overload13.C --- 6534,6563 ---- 626314633b ./gcc/testsuite/g++.old-deja/g++.jason/nested6.C 1780563080b ./gcc/testsuite/g++.old-deja/g++.jason/nested7.C 496854853b ./gcc/testsuite/g++.old-deja/g++.jason/nested8.C 2330092476b ./gcc/testsuite/g++.old-deja/g++.jason/net.C + 814313341b ./gcc/testsuite/g++.old-deja/g++.jason/net2.C + 761357985b ./gcc/testsuite/g++.old-deja/g++.jason/new.C 4108034998b ./gcc/testsuite/g++.old-deja/g++.jason/new2.C 2192651651b ./gcc/testsuite/g++.old-deja/g++.jason/new3.C 2568972186b ./gcc/testsuite/g++.old-deja/g++.jason/new4.C 3405685275b ./gcc/testsuite/g++.old-deja/g++.jason/new5.C 293878671b ./gcc/testsuite/g++.old-deja/g++.jason/offset1.C 4268803500b ./gcc/testsuite/g++.old-deja/g++.jason/offset2.C 3340471795b ./gcc/testsuite/g++.old-deja/g++.jason/offset3.C 832296383b ./gcc/testsuite/g++.old-deja/g++.jason/offset4.C + 1753231050b ./gcc/testsuite/g++.old-deja/g++.jason/opeq.C 1182090566b ./gcc/testsuite/g++.old-deja/g++.jason/opeq2.C 454853917b ./gcc/testsuite/g++.old-deja/g++.jason/opeq3.C 2472414567b ./gcc/testsuite/g++.old-deja/g++.jason/opeq4.C 238172458b ./gcc/testsuite/g++.old-deja/g++.jason/opeq5.C 4059740226b ./gcc/testsuite/g++.old-deja/g++.jason/opeq6.C 577328766b ./gcc/testsuite/g++.old-deja/g++.jason/operator.C + 688207169b ./gcc/testsuite/g++.old-deja/g++.jason/operator2.C 754653379b ./gcc/testsuite/g++.old-deja/g++.jason/opover.C 1303452248b ./gcc/testsuite/g++.old-deja/g++.jason/optimize.C + 2635243370b ./gcc/testsuite/g++.old-deja/g++.jason/optimize2.C + 2991781301b ./gcc/testsuite/g++.old-deja/g++.jason/overload.C + 3391930718b ./gcc/testsuite/g++.old-deja/g++.jason/overload1.C 836020261b ./gcc/testsuite/g++.old-deja/g++.jason/overload11.C 3916743053b ./gcc/testsuite/g++.old-deja/g++.jason/overload12.C 2565712491b ./gcc/testsuite/g++.old-deja/g++.jason/overload13.C *************** *** 9248,9254 **** 996751401b ./gcc/testsuite/g++.old-deja/g++.jason/overload17.C 3773007718b ./gcc/testsuite/g++.old-deja/g++.jason/overload18.C 2041143457b ./gcc/testsuite/g++.old-deja/g++.jason/overload19.C ! 3391930718b ./gcc/testsuite/g++.old-deja/g++.jason/overload1.C 1992601156b ./gcc/testsuite/g++.old-deja/g++.jason/overload20.C 415714207b ./gcc/testsuite/g++.old-deja/g++.jason/overload21.C 109216083b ./gcc/testsuite/g++.old-deja/g++.jason/overload22.C --- 6567,6573 ---- 996751401b ./gcc/testsuite/g++.old-deja/g++.jason/overload17.C 3773007718b ./gcc/testsuite/g++.old-deja/g++.jason/overload18.C 2041143457b ./gcc/testsuite/g++.old-deja/g++.jason/overload19.C ! 1769317874b ./gcc/testsuite/g++.old-deja/g++.jason/overload2.C 1992601156b ./gcc/testsuite/g++.old-deja/g++.jason/overload20.C 415714207b ./gcc/testsuite/g++.old-deja/g++.jason/overload21.C 109216083b ./gcc/testsuite/g++.old-deja/g++.jason/overload22.C *************** *** 9258,9264 **** 2193486232b ./gcc/testsuite/g++.old-deja/g++.jason/overload27.C 2342247690b ./gcc/testsuite/g++.old-deja/g++.jason/overload28.C 4082490103b ./gcc/testsuite/g++.old-deja/g++.jason/overload29.C ! 1769317874b ./gcc/testsuite/g++.old-deja/g++.jason/overload2.C 1565023156b ./gcc/testsuite/g++.old-deja/g++.jason/overload30.C 1649077682b ./gcc/testsuite/g++.old-deja/g++.jason/overload31.C 3667286916b ./gcc/testsuite/g++.old-deja/g++.jason/overload32.C --- 6577,6583 ---- 2193486232b ./gcc/testsuite/g++.old-deja/g++.jason/overload27.C 2342247690b ./gcc/testsuite/g++.old-deja/g++.jason/overload28.C 4082490103b ./gcc/testsuite/g++.old-deja/g++.jason/overload29.C ! 1344900458b ./gcc/testsuite/g++.old-deja/g++.jason/overload3.C 1565023156b ./gcc/testsuite/g++.old-deja/g++.jason/overload30.C 1649077682b ./gcc/testsuite/g++.old-deja/g++.jason/overload31.C 3667286916b ./gcc/testsuite/g++.old-deja/g++.jason/overload32.C *************** *** 9266,9285 **** 3641493497b ./gcc/testsuite/g++.old-deja/g++.jason/overload34.C 3176325712b ./gcc/testsuite/g++.old-deja/g++.jason/overload35.C 3976015069b ./gcc/testsuite/g++.old-deja/g++.jason/overload36.C - 1344900458b ./gcc/testsuite/g++.old-deja/g++.jason/overload3.C 1743964910b ./gcc/testsuite/g++.old-deja/g++.jason/overload4.C 2748549869b ./gcc/testsuite/g++.old-deja/g++.jason/overload5.C 2771085460b ./gcc/testsuite/g++.old-deja/g++.jason/overload6.C 4124673438b ./gcc/testsuite/g++.old-deja/g++.jason/overload7.C 2918456708b ./gcc/testsuite/g++.old-deja/g++.jason/overload8.C 2194408276b ./gcc/testsuite/g++.old-deja/g++.jason/overload9.C ! 2991781301b ./gcc/testsuite/g++.old-deja/g++.jason/overload.C 947289597b ./gcc/testsuite/g++.old-deja/g++.jason/parse10.C 3841541211b ./gcc/testsuite/g++.old-deja/g++.jason/parse11.C 3217450619b ./gcc/testsuite/g++.old-deja/g++.jason/parse12.C 1215499670b ./gcc/testsuite/g++.old-deja/g++.jason/parse13.C 3456522595b ./gcc/testsuite/g++.old-deja/g++.jason/parse14.C - 4063544381b ./gcc/testsuite/g++.old-deja/g++.jason/parse1.C 3921597478b ./gcc/testsuite/g++.old-deja/g++.jason/parse2.C 2265325245b ./gcc/testsuite/g++.old-deja/g++.jason/parse3.C 1946466186b ./gcc/testsuite/g++.old-deja/g++.jason/parse4.C --- 6585,6602 ---- 3641493497b ./gcc/testsuite/g++.old-deja/g++.jason/overload34.C 3176325712b ./gcc/testsuite/g++.old-deja/g++.jason/overload35.C 3976015069b ./gcc/testsuite/g++.old-deja/g++.jason/overload36.C 1743964910b ./gcc/testsuite/g++.old-deja/g++.jason/overload4.C 2748549869b ./gcc/testsuite/g++.old-deja/g++.jason/overload5.C 2771085460b ./gcc/testsuite/g++.old-deja/g++.jason/overload6.C 4124673438b ./gcc/testsuite/g++.old-deja/g++.jason/overload7.C 2918456708b ./gcc/testsuite/g++.old-deja/g++.jason/overload8.C 2194408276b ./gcc/testsuite/g++.old-deja/g++.jason/overload9.C ! 4063544381b ./gcc/testsuite/g++.old-deja/g++.jason/parse1.C 947289597b ./gcc/testsuite/g++.old-deja/g++.jason/parse10.C 3841541211b ./gcc/testsuite/g++.old-deja/g++.jason/parse11.C 3217450619b ./gcc/testsuite/g++.old-deja/g++.jason/parse12.C 1215499670b ./gcc/testsuite/g++.old-deja/g++.jason/parse13.C 3456522595b ./gcc/testsuite/g++.old-deja/g++.jason/parse14.C 3921597478b ./gcc/testsuite/g++.old-deja/g++.jason/parse2.C 2265325245b ./gcc/testsuite/g++.old-deja/g++.jason/parse3.C 1946466186b ./gcc/testsuite/g++.old-deja/g++.jason/parse4.C *************** *** 9288,9297 **** 1407239852b ./gcc/testsuite/g++.old-deja/g++.jason/parse7.C 2608587867b ./gcc/testsuite/g++.old-deja/g++.jason/parse8.C 2097676131b ./gcc/testsuite/g++.old-deja/g++.jason/parse9.C 2869094375b ./gcc/testsuite/g++.old-deja/g++.jason/pmem2.C 515838035b ./gcc/testsuite/g++.old-deja/g++.jason/pmem3.C 882646803b ./gcc/testsuite/g++.old-deja/g++.jason/pmem4.C ! 3300711445b ./gcc/testsuite/g++.old-deja/g++.jason/pmem.C 2099557976b ./gcc/testsuite/g++.old-deja/g++.jason/pmf2.C 2245415039b ./gcc/testsuite/g++.old-deja/g++.jason/pmf3.C 2911197085b ./gcc/testsuite/g++.old-deja/g++.jason/pmf4.C --- 6605,6615 ---- 1407239852b ./gcc/testsuite/g++.old-deja/g++.jason/parse7.C 2608587867b ./gcc/testsuite/g++.old-deja/g++.jason/parse8.C 2097676131b ./gcc/testsuite/g++.old-deja/g++.jason/parse9.C + 3300711445b ./gcc/testsuite/g++.old-deja/g++.jason/pmem.C 2869094375b ./gcc/testsuite/g++.old-deja/g++.jason/pmem2.C 515838035b ./gcc/testsuite/g++.old-deja/g++.jason/pmem3.C 882646803b ./gcc/testsuite/g++.old-deja/g++.jason/pmem4.C ! 2275329075b ./gcc/testsuite/g++.old-deja/g++.jason/pmf.C 2099557976b ./gcc/testsuite/g++.old-deja/g++.jason/pmf2.C 2245415039b ./gcc/testsuite/g++.old-deja/g++.jason/pmf3.C 2911197085b ./gcc/testsuite/g++.old-deja/g++.jason/pmf4.C *************** *** 9300,9313 **** 2487032279b ./gcc/testsuite/g++.old-deja/g++.jason/pmf7.C 2987146868b ./gcc/testsuite/g++.old-deja/g++.jason/pmf8.C 788166114b ./gcc/testsuite/g++.old-deja/g++.jason/pmf9.C - 2275329075b ./gcc/testsuite/g++.old-deja/g++.jason/pmf.C 1423191415b ./gcc/testsuite/g++.old-deja/g++.jason/pmftemp.C 2592898175b ./gcc/testsuite/g++.old-deja/g++.jason/precedence.C 2132972863b ./gcc/testsuite/g++.old-deja/g++.jason/redecl1.C 2423430425b ./gcc/testsuite/g++.old-deja/g++.jason/ref10.C 252373474b ./gcc/testsuite/g++.old-deja/g++.jason/ref11.C 4220963029b ./gcc/testsuite/g++.old-deja/g++.jason/ref12.C - 829230497b ./gcc/testsuite/g++.old-deja/g++.jason/ref1.C 1138343018b ./gcc/testsuite/g++.old-deja/g++.jason/ref2.C 4198332542b ./gcc/testsuite/g++.old-deja/g++.jason/ref3.C 3108698233b ./gcc/testsuite/g++.old-deja/g++.jason/ref4.C --- 6618,6630 ---- 2487032279b ./gcc/testsuite/g++.old-deja/g++.jason/pmf7.C 2987146868b ./gcc/testsuite/g++.old-deja/g++.jason/pmf8.C 788166114b ./gcc/testsuite/g++.old-deja/g++.jason/pmf9.C 1423191415b ./gcc/testsuite/g++.old-deja/g++.jason/pmftemp.C 2592898175b ./gcc/testsuite/g++.old-deja/g++.jason/precedence.C 2132972863b ./gcc/testsuite/g++.old-deja/g++.jason/redecl1.C + 829230497b ./gcc/testsuite/g++.old-deja/g++.jason/ref1.C 2423430425b ./gcc/testsuite/g++.old-deja/g++.jason/ref10.C 252373474b ./gcc/testsuite/g++.old-deja/g++.jason/ref11.C 4220963029b ./gcc/testsuite/g++.old-deja/g++.jason/ref12.C 1138343018b ./gcc/testsuite/g++.old-deja/g++.jason/ref2.C 4198332542b ./gcc/testsuite/g++.old-deja/g++.jason/ref3.C 3108698233b ./gcc/testsuite/g++.old-deja/g++.jason/ref4.C *************** *** 9317,9325 **** 1357591997b ./gcc/testsuite/g++.old-deja/g++.jason/ref8.C 1262470243b ./gcc/testsuite/g++.old-deja/g++.jason/ref9.C 1378933083b ./gcc/testsuite/g++.old-deja/g++.jason/report.C 1302488236b ./gcc/testsuite/g++.old-deja/g++.jason/return2.C 1422012899b ./gcc/testsuite/g++.old-deja/g++.jason/return3.C ! 2084961742b ./gcc/testsuite/g++.old-deja/g++.jason/return.C 364370005b ./gcc/testsuite/g++.old-deja/g++.jason/rfg10.C 3958400971b ./gcc/testsuite/g++.old-deja/g++.jason/rfg11.C 288348052b ./gcc/testsuite/g++.old-deja/g++.jason/rfg12.C --- 6634,6643 ---- 1357591997b ./gcc/testsuite/g++.old-deja/g++.jason/ref8.C 1262470243b ./gcc/testsuite/g++.old-deja/g++.jason/ref9.C 1378933083b ./gcc/testsuite/g++.old-deja/g++.jason/report.C + 2084961742b ./gcc/testsuite/g++.old-deja/g++.jason/return.C 1302488236b ./gcc/testsuite/g++.old-deja/g++.jason/return2.C 1422012899b ./gcc/testsuite/g++.old-deja/g++.jason/return3.C ! 4282982182b ./gcc/testsuite/g++.old-deja/g++.jason/rfg1.C 364370005b ./gcc/testsuite/g++.old-deja/g++.jason/rfg10.C 3958400971b ./gcc/testsuite/g++.old-deja/g++.jason/rfg11.C 288348052b ./gcc/testsuite/g++.old-deja/g++.jason/rfg12.C *************** *** 9328,9334 **** 2961300206b ./gcc/testsuite/g++.old-deja/g++.jason/rfg16.C 3703739742b ./gcc/testsuite/g++.old-deja/g++.jason/rfg17.C 3495930194b ./gcc/testsuite/g++.old-deja/g++.jason/rfg18.C ! 4282982182b ./gcc/testsuite/g++.old-deja/g++.jason/rfg1.C 3118729702b ./gcc/testsuite/g++.old-deja/g++.jason/rfg20.C 258053642b ./gcc/testsuite/g++.old-deja/g++.jason/rfg21.C 1272258763b ./gcc/testsuite/g++.old-deja/g++.jason/rfg22.C --- 6646,6652 ---- 2961300206b ./gcc/testsuite/g++.old-deja/g++.jason/rfg16.C 3703739742b ./gcc/testsuite/g++.old-deja/g++.jason/rfg17.C 3495930194b ./gcc/testsuite/g++.old-deja/g++.jason/rfg18.C ! 3117732826b ./gcc/testsuite/g++.old-deja/g++.jason/rfg2.C 3118729702b ./gcc/testsuite/g++.old-deja/g++.jason/rfg20.C 258053642b ./gcc/testsuite/g++.old-deja/g++.jason/rfg21.C 1272258763b ./gcc/testsuite/g++.old-deja/g++.jason/rfg22.C *************** *** 9338,9344 **** 4125676781b ./gcc/testsuite/g++.old-deja/g++.jason/rfg26.C 2764234637b ./gcc/testsuite/g++.old-deja/g++.jason/rfg27.C 838463016b ./gcc/testsuite/g++.old-deja/g++.jason/rfg28.C - 3117732826b ./gcc/testsuite/g++.old-deja/g++.jason/rfg2.C 148681664b ./gcc/testsuite/g++.old-deja/g++.jason/rfg3.C 3129549671b ./gcc/testsuite/g++.old-deja/g++.jason/rfg4.C 295301056b ./gcc/testsuite/g++.old-deja/g++.jason/rfg5.C --- 6656,6661 ---- *************** *** 9349,9354 **** --- 6666,6672 ---- 4260838706b ./gcc/testsuite/g++.old-deja/g++.jason/rvalue1.C 2113044148b ./gcc/testsuite/g++.old-deja/g++.jason/rvalue2.C 3051419482b ./gcc/testsuite/g++.old-deja/g++.jason/rvalue3.C + 2200136874b ./gcc/testsuite/g++.old-deja/g++.jason/scoping.C 3805792750b ./gcc/testsuite/g++.old-deja/g++.jason/scoping10.C 3393161477b ./gcc/testsuite/g++.old-deja/g++.jason/scoping11.C 703500731b ./gcc/testsuite/g++.old-deja/g++.jason/scoping12.C *************** *** 9365,9375 **** 3067776040b ./gcc/testsuite/g++.old-deja/g++.jason/scoping7.C 2559597057b ./gcc/testsuite/g++.old-deja/g++.jason/scoping8.C 3161523697b ./gcc/testsuite/g++.old-deja/g++.jason/scoping9.C - 2200136874b ./gcc/testsuite/g++.old-deja/g++.jason/scoping.C 3886458318b ./gcc/testsuite/g++.old-deja/g++.jason/shadow1.C 1823439671b ./gcc/testsuite/g++.old-deja/g++.jason/soverload.C 2071551425b ./gcc/testsuite/g++.old-deja/g++.jason/special.C 1986795528b ./gcc/testsuite/g++.old-deja/g++.jason/static1.C 982891039b ./gcc/testsuite/g++.old-deja/g++.jason/synth10.C 2450156296b ./gcc/testsuite/g++.old-deja/g++.jason/synth2.C 160110469b ./gcc/testsuite/g++.old-deja/g++.jason/synth3.C --- 6683,6693 ---- 3067776040b ./gcc/testsuite/g++.old-deja/g++.jason/scoping7.C 2559597057b ./gcc/testsuite/g++.old-deja/g++.jason/scoping8.C 3161523697b ./gcc/testsuite/g++.old-deja/g++.jason/scoping9.C 3886458318b ./gcc/testsuite/g++.old-deja/g++.jason/shadow1.C 1823439671b ./gcc/testsuite/g++.old-deja/g++.jason/soverload.C 2071551425b ./gcc/testsuite/g++.old-deja/g++.jason/special.C 1986795528b ./gcc/testsuite/g++.old-deja/g++.jason/static1.C + 3703096829b ./gcc/testsuite/g++.old-deja/g++.jason/synth.C 982891039b ./gcc/testsuite/g++.old-deja/g++.jason/synth10.C 2450156296b ./gcc/testsuite/g++.old-deja/g++.jason/synth2.C 160110469b ./gcc/testsuite/g++.old-deja/g++.jason/synth3.C *************** *** 9379,9389 **** 192973807b ./gcc/testsuite/g++.old-deja/g++.jason/synth7.C 1655213980b ./gcc/testsuite/g++.old-deja/g++.jason/synth8.C 1526912645b ./gcc/testsuite/g++.old-deja/g++.jason/synth9.C - 3703096829b ./gcc/testsuite/g++.old-deja/g++.jason/synth.C 1892722905b ./gcc/testsuite/g++.old-deja/g++.jason/tempargs.C 2837214502b ./gcc/testsuite/g++.old-deja/g++.jason/tempcons.C 869843187b ./gcc/testsuite/g++.old-deja/g++.jason/tempdest.C 2805267621b ./gcc/testsuite/g++.old-deja/g++.jason/tempinst1.C 3406530265b ./gcc/testsuite/g++.old-deja/g++.jason/template10.C 2580181076b ./gcc/testsuite/g++.old-deja/g++.jason/template11.C 1678941454b ./gcc/testsuite/g++.old-deja/g++.jason/template12.C --- 6697,6707 ---- 192973807b ./gcc/testsuite/g++.old-deja/g++.jason/synth7.C 1655213980b ./gcc/testsuite/g++.old-deja/g++.jason/synth8.C 1526912645b ./gcc/testsuite/g++.old-deja/g++.jason/synth9.C 1892722905b ./gcc/testsuite/g++.old-deja/g++.jason/tempargs.C 2837214502b ./gcc/testsuite/g++.old-deja/g++.jason/tempcons.C 869843187b ./gcc/testsuite/g++.old-deja/g++.jason/tempdest.C 2805267621b ./gcc/testsuite/g++.old-deja/g++.jason/tempinst1.C + 3635346741b ./gcc/testsuite/g++.old-deja/g++.jason/template1.C 3406530265b ./gcc/testsuite/g++.old-deja/g++.jason/template10.C 2580181076b ./gcc/testsuite/g++.old-deja/g++.jason/template11.C 1678941454b ./gcc/testsuite/g++.old-deja/g++.jason/template12.C *************** *** 9393,9399 **** 1681885743b ./gcc/testsuite/g++.old-deja/g++.jason/template17.C 885790390b ./gcc/testsuite/g++.old-deja/g++.jason/template18.C 3406115895b ./gcc/testsuite/g++.old-deja/g++.jason/template19.C ! 3635346741b ./gcc/testsuite/g++.old-deja/g++.jason/template1.C 3294085147b ./gcc/testsuite/g++.old-deja/g++.jason/template20.C 1417003889b ./gcc/testsuite/g++.old-deja/g++.jason/template21.C 3311958351b ./gcc/testsuite/g++.old-deja/g++.jason/template22.C --- 6711,6717 ---- 1681885743b ./gcc/testsuite/g++.old-deja/g++.jason/template17.C 885790390b ./gcc/testsuite/g++.old-deja/g++.jason/template18.C 3406115895b ./gcc/testsuite/g++.old-deja/g++.jason/template19.C ! 43030923b ./gcc/testsuite/g++.old-deja/g++.jason/template2.C 3294085147b ./gcc/testsuite/g++.old-deja/g++.jason/template20.C 1417003889b ./gcc/testsuite/g++.old-deja/g++.jason/template21.C 3311958351b ./gcc/testsuite/g++.old-deja/g++.jason/template22.C *************** *** 9404,9410 **** 407308284b ./gcc/testsuite/g++.old-deja/g++.jason/template27.C 2630100527b ./gcc/testsuite/g++.old-deja/g++.jason/template28.C 3438625432b ./gcc/testsuite/g++.old-deja/g++.jason/template29.C ! 43030923b ./gcc/testsuite/g++.old-deja/g++.jason/template2.C 2310025160b ./gcc/testsuite/g++.old-deja/g++.jason/template30.C 3335790712b ./gcc/testsuite/g++.old-deja/g++.jason/template31.C 987062964b ./gcc/testsuite/g++.old-deja/g++.jason/template32.C --- 6722,6728 ---- 407308284b ./gcc/testsuite/g++.old-deja/g++.jason/template27.C 2630100527b ./gcc/testsuite/g++.old-deja/g++.jason/template28.C 3438625432b ./gcc/testsuite/g++.old-deja/g++.jason/template29.C ! 2243617030b ./gcc/testsuite/g++.old-deja/g++.jason/template3.C 2310025160b ./gcc/testsuite/g++.old-deja/g++.jason/template30.C 3335790712b ./gcc/testsuite/g++.old-deja/g++.jason/template31.C 987062964b ./gcc/testsuite/g++.old-deja/g++.jason/template32.C *************** *** 9414,9431 **** 805289702b ./gcc/testsuite/g++.old-deja/g++.jason/template36.C 2952351972b ./gcc/testsuite/g++.old-deja/g++.jason/template37.C 1653595335b ./gcc/testsuite/g++.old-deja/g++.jason/template39.C ! 2243617030b ./gcc/testsuite/g++.old-deja/g++.jason/template3.C 856312588b ./gcc/testsuite/g++.old-deja/g++.jason/template40.C 3809808817b ./gcc/testsuite/g++.old-deja/g++.jason/template41.C 1916885555b ./gcc/testsuite/g++.old-deja/g++.jason/template42.C 2401225387b ./gcc/testsuite/g++.old-deja/g++.jason/template43.C 702715140b ./gcc/testsuite/g++.old-deja/g++.jason/template44.C - 2458850401b ./gcc/testsuite/g++.old-deja/g++.jason/template4.C 3543005329b ./gcc/testsuite/g++.old-deja/g++.jason/template5.C 769854245b ./gcc/testsuite/g++.old-deja/g++.jason/template6.C 2079411687b ./gcc/testsuite/g++.old-deja/g++.jason/template7.C 700019405b ./gcc/testsuite/g++.old-deja/g++.jason/template8.C 3077908891b ./gcc/testsuite/g++.old-deja/g++.jason/template9.C 2081867311b ./gcc/testsuite/g++.old-deja/g++.jason/temporary2.C 3434711731b ./gcc/testsuite/g++.old-deja/g++.jason/temporary3.C 2488321595b ./gcc/testsuite/g++.old-deja/g++.jason/temporary4.C --- 6732,6749 ---- 805289702b ./gcc/testsuite/g++.old-deja/g++.jason/template36.C 2952351972b ./gcc/testsuite/g++.old-deja/g++.jason/template37.C 1653595335b ./gcc/testsuite/g++.old-deja/g++.jason/template39.C ! 2458850401b ./gcc/testsuite/g++.old-deja/g++.jason/template4.C 856312588b ./gcc/testsuite/g++.old-deja/g++.jason/template40.C 3809808817b ./gcc/testsuite/g++.old-deja/g++.jason/template41.C 1916885555b ./gcc/testsuite/g++.old-deja/g++.jason/template42.C 2401225387b ./gcc/testsuite/g++.old-deja/g++.jason/template43.C 702715140b ./gcc/testsuite/g++.old-deja/g++.jason/template44.C 3543005329b ./gcc/testsuite/g++.old-deja/g++.jason/template5.C 769854245b ./gcc/testsuite/g++.old-deja/g++.jason/template6.C 2079411687b ./gcc/testsuite/g++.old-deja/g++.jason/template7.C 700019405b ./gcc/testsuite/g++.old-deja/g++.jason/template8.C 3077908891b ./gcc/testsuite/g++.old-deja/g++.jason/template9.C + 2460644105b ./gcc/testsuite/g++.old-deja/g++.jason/temporary.C 2081867311b ./gcc/testsuite/g++.old-deja/g++.jason/temporary2.C 3434711731b ./gcc/testsuite/g++.old-deja/g++.jason/temporary3.C 2488321595b ./gcc/testsuite/g++.old-deja/g++.jason/temporary4.C *************** *** 9433,9439 **** 3514956217b ./gcc/testsuite/g++.old-deja/g++.jason/temporary6.C 2628353068b ./gcc/testsuite/g++.old-deja/g++.jason/temporary7.C 1522627554b ./gcc/testsuite/g++.old-deja/g++.jason/temporary8.C - 2460644105b ./gcc/testsuite/g++.old-deja/g++.jason/temporary.C 3278590279b ./gcc/testsuite/g++.old-deja/g++.jason/tempover.C 2151541644b ./gcc/testsuite/g++.old-deja/g++.jason/tempparse.C 2779254633b ./gcc/testsuite/g++.old-deja/g++.jason/tempsub.C --- 6751,6756 ---- *************** *** 9441,9463 **** 4280002449b ./gcc/testsuite/g++.old-deja/g++.jason/thunk1.C 274835885b ./gcc/testsuite/g++.old-deja/g++.jason/thunk2.C 1347779987b ./gcc/testsuite/g++.old-deja/g++.jason/thunk3.C 2448025143b ./gcc/testsuite/g++.old-deja/g++.jason/tredecl2.C 3072514699b ./gcc/testsuite/g++.old-deja/g++.jason/tredecl3.C 979924921b ./gcc/testsuite/g++.old-deja/g++.jason/tredecl4.C - 3711346877b ./gcc/testsuite/g++.old-deja/g++.jason/tredecl.C 569137935b ./gcc/testsuite/g++.old-deja/g++.jason/trivial.C 2659060194b ./gcc/testsuite/g++.old-deja/g++.jason/typeck.C 2723549891b ./gcc/testsuite/g++.old-deja/g++.jason/typedef2.C 3743711814b ./gcc/testsuite/g++.old-deja/g++.jason/typedef3.C - 299682196b ./gcc/testsuite/g++.old-deja/g++.jason/typedef.C 3951989009b ./gcc/testsuite/g++.old-deja/g++.jason/typeid1.C 999555960b ./gcc/testsuite/g++.old-deja/g++.jason/typeid2.C 281221996b ./gcc/testsuite/g++.old-deja/g++.jason/union.C 4213241018b ./gcc/testsuite/g++.old-deja/g++.jason/vecdel.C - 1193567888b ./gcc/testsuite/g++.old-deja/g++.jason/virtual2.C 3907710929b ./gcc/testsuite/g++.old-deja/g++.jason/virtual.C ! 628732210b ./gcc/testsuite/g++.old-deja/g++.jason/warning10.C 230540000b ./gcc/testsuite/g++.old-deja/g++.jason/warning1.C 4258001283b ./gcc/testsuite/g++.old-deja/g++.jason/warning2.C 1528338319b ./gcc/testsuite/g++.old-deja/g++.jason/warning3.C 4233202460b ./gcc/testsuite/g++.old-deja/g++.jason/warning4.C --- 6758,6780 ---- 4280002449b ./gcc/testsuite/g++.old-deja/g++.jason/thunk1.C 274835885b ./gcc/testsuite/g++.old-deja/g++.jason/thunk2.C 1347779987b ./gcc/testsuite/g++.old-deja/g++.jason/thunk3.C + 3711346877b ./gcc/testsuite/g++.old-deja/g++.jason/tredecl.C 2448025143b ./gcc/testsuite/g++.old-deja/g++.jason/tredecl2.C 3072514699b ./gcc/testsuite/g++.old-deja/g++.jason/tredecl3.C 979924921b ./gcc/testsuite/g++.old-deja/g++.jason/tredecl4.C 569137935b ./gcc/testsuite/g++.old-deja/g++.jason/trivial.C 2659060194b ./gcc/testsuite/g++.old-deja/g++.jason/typeck.C + 299682196b ./gcc/testsuite/g++.old-deja/g++.jason/typedef.C 2723549891b ./gcc/testsuite/g++.old-deja/g++.jason/typedef2.C 3743711814b ./gcc/testsuite/g++.old-deja/g++.jason/typedef3.C 3951989009b ./gcc/testsuite/g++.old-deja/g++.jason/typeid1.C 999555960b ./gcc/testsuite/g++.old-deja/g++.jason/typeid2.C 281221996b ./gcc/testsuite/g++.old-deja/g++.jason/union.C 4213241018b ./gcc/testsuite/g++.old-deja/g++.jason/vecdel.C 3907710929b ./gcc/testsuite/g++.old-deja/g++.jason/virtual.C ! 1193567888b ./gcc/testsuite/g++.old-deja/g++.jason/virtual2.C 230540000b ./gcc/testsuite/g++.old-deja/g++.jason/warning1.C + 628732210b ./gcc/testsuite/g++.old-deja/g++.jason/warning10.C 4258001283b ./gcc/testsuite/g++.old-deja/g++.jason/warning2.C 1528338319b ./gcc/testsuite/g++.old-deja/g++.jason/warning3.C 4233202460b ./gcc/testsuite/g++.old-deja/g++.jason/warning4.C *************** *** 9471,9479 **** 1986081483b ./gcc/testsuite/g++.old-deja/g++.law/access3.C 2335314782b ./gcc/testsuite/g++.old-deja/g++.law/access4.C 2106211778b ./gcc/testsuite/g++.old-deja/g++.law/access5.C 2654444924b ./gcc/testsuite/g++.old-deja/g++.law/arg10.C 3238389534b ./gcc/testsuite/g++.old-deja/g++.law/arg11.C - 4149004511b ./gcc/testsuite/g++.old-deja/g++.law/arg1.C 629763071b ./gcc/testsuite/g++.old-deja/g++.law/arg2.C 3123919430b ./gcc/testsuite/g++.old-deja/g++.law/arg3.C 2520473449b ./gcc/testsuite/g++.old-deja/g++.law/arg4.C --- 6788,6796 ---- 1986081483b ./gcc/testsuite/g++.old-deja/g++.law/access3.C 2335314782b ./gcc/testsuite/g++.old-deja/g++.law/access4.C 2106211778b ./gcc/testsuite/g++.old-deja/g++.law/access5.C + 4149004511b ./gcc/testsuite/g++.old-deja/g++.law/arg1.C 2654444924b ./gcc/testsuite/g++.old-deja/g++.law/arg10.C 3238389534b ./gcc/testsuite/g++.old-deja/g++.law/arg11.C 629763071b ./gcc/testsuite/g++.old-deja/g++.law/arg2.C 3123919430b ./gcc/testsuite/g++.old-deja/g++.law/arg3.C 2520473449b ./gcc/testsuite/g++.old-deja/g++.law/arg4.C *************** *** 9482,9487 **** --- 6799,6805 ---- 4040623157b ./gcc/testsuite/g++.old-deja/g++.law/arg7.C 3232506355b ./gcc/testsuite/g++.old-deja/g++.law/arg8.C 1902710110b ./gcc/testsuite/g++.old-deja/g++.law/arg9.C + 1082355743b ./gcc/testsuite/g++.old-deja/g++.law/arm1.C 2967336193b ./gcc/testsuite/g++.old-deja/g++.law/arm10.C 256975320b ./gcc/testsuite/g++.old-deja/g++.law/arm11.C 2111564718b ./gcc/testsuite/g++.old-deja/g++.law/arm12.C *************** *** 9489,9495 **** 1730130090b ./gcc/testsuite/g++.old-deja/g++.law/arm14.C 730443534b ./gcc/testsuite/g++.old-deja/g++.law/arm15.C 2538202217b ./gcc/testsuite/g++.old-deja/g++.law/arm16.C - 1082355743b ./gcc/testsuite/g++.old-deja/g++.law/arm1.C 396475240b ./gcc/testsuite/g++.old-deja/g++.law/arm2.C 684470600b ./gcc/testsuite/g++.old-deja/g++.law/arm3.C 123832841b ./gcc/testsuite/g++.old-deja/g++.law/arm4.C --- 6807,6812 ---- *************** *** 9518,9523 **** --- 6835,6841 ---- 1581356732b ./gcc/testsuite/g++.old-deja/g++.law/code-gen5.C 3634037248b ./gcc/testsuite/g++.old-deja/g++.law/copy1.C 1559838734b ./gcc/testsuite/g++.old-deja/g++.law/copy2.C + 1092557618b ./gcc/testsuite/g++.old-deja/g++.law/ctors1.C 2824193941b ./gcc/testsuite/g++.old-deja/g++.law/ctors10.C 3669003858b ./gcc/testsuite/g++.old-deja/g++.law/ctors11.C 162342663b ./gcc/testsuite/g++.old-deja/g++.law/ctors12.C *************** *** 9528,9537 **** 4195839953b ./gcc/testsuite/g++.old-deja/g++.law/ctors17.C 795806665b ./gcc/testsuite/g++.old-deja/g++.law/ctors18.C 669077619b ./gcc/testsuite/g++.old-deja/g++.law/ctors19.C ! 1092557618b ./gcc/testsuite/g++.old-deja/g++.law/ctors1.C 1400780598b ./gcc/testsuite/g++.old-deja/g++.law/ctors20.C 217884353b ./gcc/testsuite/g++.old-deja/g++.law/ctors21.C - 487905434b ./gcc/testsuite/g++.old-deja/g++.law/ctors2.C 1618360763b ./gcc/testsuite/g++.old-deja/g++.law/ctors3.C 2740682745b ./gcc/testsuite/g++.old-deja/g++.law/ctors4.C 4199368053b ./gcc/testsuite/g++.old-deja/g++.law/ctors5.C --- 6846,6854 ---- 4195839953b ./gcc/testsuite/g++.old-deja/g++.law/ctors17.C 795806665b ./gcc/testsuite/g++.old-deja/g++.law/ctors18.C 669077619b ./gcc/testsuite/g++.old-deja/g++.law/ctors19.C ! 487905434b ./gcc/testsuite/g++.old-deja/g++.law/ctors2.C 1400780598b ./gcc/testsuite/g++.old-deja/g++.law/ctors20.C 217884353b ./gcc/testsuite/g++.old-deja/g++.law/ctors21.C 1618360763b ./gcc/testsuite/g++.old-deja/g++.law/ctors3.C 2740682745b ./gcc/testsuite/g++.old-deja/g++.law/ctors4.C 4199368053b ./gcc/testsuite/g++.old-deja/g++.law/ctors5.C *************** *** 9539,9544 **** --- 6856,6862 ---- 1869709463b ./gcc/testsuite/g++.old-deja/g++.law/ctors7.C 526334519b ./gcc/testsuite/g++.old-deja/g++.law/ctors8.C 270958262b ./gcc/testsuite/g++.old-deja/g++.law/ctors9.C + 2381956011b ./gcc/testsuite/g++.old-deja/g++.law/cvt1.C 2152841651b ./gcc/testsuite/g++.old-deja/g++.law/cvt10.C 3565079229b ./gcc/testsuite/g++.old-deja/g++.law/cvt11.C 2546176762b ./gcc/testsuite/g++.old-deja/g++.law/cvt12.C *************** *** 9549,9560 **** 394815871b ./gcc/testsuite/g++.old-deja/g++.law/cvt17.C 3549238781b ./gcc/testsuite/g++.old-deja/g++.law/cvt18.C 3392944402b ./gcc/testsuite/g++.old-deja/g++.law/cvt19.C ! 2381956011b ./gcc/testsuite/g++.old-deja/g++.law/cvt1.C 2158455043b ./gcc/testsuite/g++.old-deja/g++.law/cvt20.C 836977921b ./gcc/testsuite/g++.old-deja/g++.law/cvt21.C 2819411287b ./gcc/testsuite/g++.old-deja/g++.law/cvt22.C 3913198799b ./gcc/testsuite/g++.old-deja/g++.law/cvt23.C - 689250222b ./gcc/testsuite/g++.old-deja/g++.law/cvt2.C 2951649907b ./gcc/testsuite/g++.old-deja/g++.law/cvt3.C 1937028645b ./gcc/testsuite/g++.old-deja/g++.law/cvt4.C 2149948272b ./gcc/testsuite/g++.old-deja/g++.law/cvt5.C --- 6867,6877 ---- 394815871b ./gcc/testsuite/g++.old-deja/g++.law/cvt17.C 3549238781b ./gcc/testsuite/g++.old-deja/g++.law/cvt18.C 3392944402b ./gcc/testsuite/g++.old-deja/g++.law/cvt19.C ! 689250222b ./gcc/testsuite/g++.old-deja/g++.law/cvt2.C 2158455043b ./gcc/testsuite/g++.old-deja/g++.law/cvt20.C 836977921b ./gcc/testsuite/g++.old-deja/g++.law/cvt21.C 2819411287b ./gcc/testsuite/g++.old-deja/g++.law/cvt22.C 3913198799b ./gcc/testsuite/g++.old-deja/g++.law/cvt23.C 2951649907b ./gcc/testsuite/g++.old-deja/g++.law/cvt3.C 1937028645b ./gcc/testsuite/g++.old-deja/g++.law/cvt4.C 2149948272b ./gcc/testsuite/g++.old-deja/g++.law/cvt5.C *************** *** 9587,9597 **** 353712724b ./gcc/testsuite/g++.old-deja/g++.law/friend5.C 2982594112b ./gcc/testsuite/g++.old-deja/g++.law/global-init1.C 2935803087b ./gcc/testsuite/g++.old-deja/g++.law/incdec1.C 3566036893b ./gcc/testsuite/g++.old-deja/g++.law/init10.C 3857491837b ./gcc/testsuite/g++.old-deja/g++.law/init11.C 4138152619b ./gcc/testsuite/g++.old-deja/g++.law/init13.C 1266397199b ./gcc/testsuite/g++.old-deja/g++.law/init14.C - 1302059369b ./gcc/testsuite/g++.old-deja/g++.law/init1.C 2233506301b ./gcc/testsuite/g++.old-deja/g++.law/init2.C 2232979686b ./gcc/testsuite/g++.old-deja/g++.law/init3.C 1022202873b ./gcc/testsuite/g++.old-deja/g++.law/init4.C --- 6904,6914 ---- 353712724b ./gcc/testsuite/g++.old-deja/g++.law/friend5.C 2982594112b ./gcc/testsuite/g++.old-deja/g++.law/global-init1.C 2935803087b ./gcc/testsuite/g++.old-deja/g++.law/incdec1.C + 1302059369b ./gcc/testsuite/g++.old-deja/g++.law/init1.C 3566036893b ./gcc/testsuite/g++.old-deja/g++.law/init10.C 3857491837b ./gcc/testsuite/g++.old-deja/g++.law/init11.C 4138152619b ./gcc/testsuite/g++.old-deja/g++.law/init13.C 1266397199b ./gcc/testsuite/g++.old-deja/g++.law/init14.C 2233506301b ./gcc/testsuite/g++.old-deja/g++.law/init2.C 2232979686b ./gcc/testsuite/g++.old-deja/g++.law/init3.C 1022202873b ./gcc/testsuite/g++.old-deja/g++.law/init4.C *************** *** 9624,9629 **** --- 6941,6947 ---- 367329317b ./gcc/testsuite/g++.old-deja/g++.law/operators17.C 1796063085b ./gcc/testsuite/g++.old-deja/g++.law/operators18.C 909424019b ./gcc/testsuite/g++.old-deja/g++.law/operators19.C + 3492185823b ./gcc/testsuite/g++.old-deja/g++.law/operators2.C 799876233b ./gcc/testsuite/g++.old-deja/g++.law/operators21.C 2652758137b ./gcc/testsuite/g++.old-deja/g++.law/operators22.C 1066444429b ./gcc/testsuite/g++.old-deja/g++.law/operators23.C *************** *** 9632,9650 **** 1064475993b ./gcc/testsuite/g++.old-deja/g++.law/operators27.C 1472827461b ./gcc/testsuite/g++.old-deja/g++.law/operators28.C 3543940161b ./gcc/testsuite/g++.old-deja/g++.law/operators29.C ! 3492185823b ./gcc/testsuite/g++.old-deja/g++.law/operators2.C 936276361b ./gcc/testsuite/g++.old-deja/g++.law/operators30.C 1540784012b ./gcc/testsuite/g++.old-deja/g++.law/operators31.C 1046500493b ./gcc/testsuite/g++.old-deja/g++.law/operators32.C 1564136570b ./gcc/testsuite/g++.old-deja/g++.law/operators33.C 2258128088b ./gcc/testsuite/g++.old-deja/g++.law/operators34.C - 578739979b ./gcc/testsuite/g++.old-deja/g++.law/operators3.C 608812129b ./gcc/testsuite/g++.old-deja/g++.law/operators4.C 1329892354b ./gcc/testsuite/g++.old-deja/g++.law/operators6.C 355314823b ./gcc/testsuite/g++.old-deja/g++.law/operators8.C 1673377936b ./gcc/testsuite/g++.old-deja/g++.law/operators9.C - 3113604261b ./gcc/testsuite/g++.old-deja/g++.law/parsing10.C 2567910598b ./gcc/testsuite/g++.old-deja/g++.law/parsing1.C 1152481023b ./gcc/testsuite/g++.old-deja/g++.law/parsing2.C 1999913694b ./gcc/testsuite/g++.old-deja/g++.law/parsing3.C 2775279224b ./gcc/testsuite/g++.old-deja/g++.law/parsing4.C --- 6950,6967 ---- 1064475993b ./gcc/testsuite/g++.old-deja/g++.law/operators27.C 1472827461b ./gcc/testsuite/g++.old-deja/g++.law/operators28.C 3543940161b ./gcc/testsuite/g++.old-deja/g++.law/operators29.C ! 578739979b ./gcc/testsuite/g++.old-deja/g++.law/operators3.C 936276361b ./gcc/testsuite/g++.old-deja/g++.law/operators30.C 1540784012b ./gcc/testsuite/g++.old-deja/g++.law/operators31.C 1046500493b ./gcc/testsuite/g++.old-deja/g++.law/operators32.C 1564136570b ./gcc/testsuite/g++.old-deja/g++.law/operators33.C 2258128088b ./gcc/testsuite/g++.old-deja/g++.law/operators34.C 608812129b ./gcc/testsuite/g++.old-deja/g++.law/operators4.C 1329892354b ./gcc/testsuite/g++.old-deja/g++.law/operators6.C 355314823b ./gcc/testsuite/g++.old-deja/g++.law/operators8.C 1673377936b ./gcc/testsuite/g++.old-deja/g++.law/operators9.C 2567910598b ./gcc/testsuite/g++.old-deja/g++.law/parsing1.C + 3113604261b ./gcc/testsuite/g++.old-deja/g++.law/parsing10.C 1152481023b ./gcc/testsuite/g++.old-deja/g++.law/parsing2.C 1999913694b ./gcc/testsuite/g++.old-deja/g++.law/parsing3.C 2775279224b ./gcc/testsuite/g++.old-deja/g++.law/parsing4.C *************** *** 9695,9700 **** --- 7012,7018 ---- 698640776b ./gcc/testsuite/g++.old-deja/g++.law/virtual2.C 3868729894b ./gcc/testsuite/g++.old-deja/g++.law/virtual3.C 3199255308b ./gcc/testsuite/g++.old-deja/g++.law/virtual4.C + 62330698b ./gcc/testsuite/g++.old-deja/g++.law/visibility1.C 3314718848b ./gcc/testsuite/g++.old-deja/g++.law/visibility10.C 3972415808b ./gcc/testsuite/g++.old-deja/g++.law/visibility11.C 1008837063b ./gcc/testsuite/g++.old-deja/g++.law/visibility12.C *************** *** 9705,9711 **** 1421043627b ./gcc/testsuite/g++.old-deja/g++.law/visibility17.C 2757911294b ./gcc/testsuite/g++.old-deja/g++.law/visibility18.C 1759487204b ./gcc/testsuite/g++.old-deja/g++.law/visibility19.C ! 62330698b ./gcc/testsuite/g++.old-deja/g++.law/visibility1.C 1427247483b ./gcc/testsuite/g++.old-deja/g++.law/visibility20.C 3793046825b ./gcc/testsuite/g++.old-deja/g++.law/visibility21.C 271235804b ./gcc/testsuite/g++.old-deja/g++.law/visibility22.C --- 7023,7029 ---- 1421043627b ./gcc/testsuite/g++.old-deja/g++.law/visibility17.C 2757911294b ./gcc/testsuite/g++.old-deja/g++.law/visibility18.C 1759487204b ./gcc/testsuite/g++.old-deja/g++.law/visibility19.C ! 734410929b ./gcc/testsuite/g++.old-deja/g++.law/visibility2.C 1427247483b ./gcc/testsuite/g++.old-deja/g++.law/visibility20.C 3793046825b ./gcc/testsuite/g++.old-deja/g++.law/visibility21.C 271235804b ./gcc/testsuite/g++.old-deja/g++.law/visibility22.C *************** *** 9714,9720 **** 322999725b ./gcc/testsuite/g++.old-deja/g++.law/visibility26.C 4190347231b ./gcc/testsuite/g++.old-deja/g++.law/visibility27.C 2911402499b ./gcc/testsuite/g++.old-deja/g++.law/visibility28.C - 734410929b ./gcc/testsuite/g++.old-deja/g++.law/visibility2.C 4290227694b ./gcc/testsuite/g++.old-deja/g++.law/visibility3.C 4210487078b ./gcc/testsuite/g++.old-deja/g++.law/visibility4.C 3907786275b ./gcc/testsuite/g++.old-deja/g++.law/visibility5.C --- 7032,7037 ---- *************** *** 9763,9768 **** --- 7080,7086 ---- 549691660b ./gcc/testsuite/g++.old-deja/g++.mike/dyncast7.C 2943523376b ./gcc/testsuite/g++.old-deja/g++.mike/dyncast8.C 715384563b ./gcc/testsuite/g++.old-deja/g++.mike/dyncast9.C + 1479132794b ./gcc/testsuite/g++.old-deja/g++.mike/eh1.C 1898950024b ./gcc/testsuite/g++.old-deja/g++.mike/eh10.C 1222256435b ./gcc/testsuite/g++.old-deja/g++.mike/eh11.C 1447734306b ./gcc/testsuite/g++.old-deja/g++.mike/eh12.C *************** *** 9773,9779 **** 3368269369b ./gcc/testsuite/g++.old-deja/g++.mike/eh17.C 1954288096b ./gcc/testsuite/g++.old-deja/g++.mike/eh18.C 1564767830b ./gcc/testsuite/g++.old-deja/g++.mike/eh19.C ! 1479132794b ./gcc/testsuite/g++.old-deja/g++.mike/eh1.C 2941675313b ./gcc/testsuite/g++.old-deja/g++.mike/eh20.C 1220907911b ./gcc/testsuite/g++.old-deja/g++.mike/eh21.C 517637270b ./gcc/testsuite/g++.old-deja/g++.mike/eh23.C --- 7091,7097 ---- 3368269369b ./gcc/testsuite/g++.old-deja/g++.mike/eh17.C 1954288096b ./gcc/testsuite/g++.old-deja/g++.mike/eh18.C 1564767830b ./gcc/testsuite/g++.old-deja/g++.mike/eh19.C ! 925380975b ./gcc/testsuite/g++.old-deja/g++.mike/eh2.C 2941675313b ./gcc/testsuite/g++.old-deja/g++.mike/eh20.C 1220907911b ./gcc/testsuite/g++.old-deja/g++.mike/eh21.C 517637270b ./gcc/testsuite/g++.old-deja/g++.mike/eh23.C *************** *** 9783,9789 **** 2419761913b ./gcc/testsuite/g++.old-deja/g++.mike/eh27.C 1187597651b ./gcc/testsuite/g++.old-deja/g++.mike/eh28.C 1211663524b ./gcc/testsuite/g++.old-deja/g++.mike/eh29.C ! 925380975b ./gcc/testsuite/g++.old-deja/g++.mike/eh2.C 19764474b ./gcc/testsuite/g++.old-deja/g++.mike/eh30.C 2656014861b ./gcc/testsuite/g++.old-deja/g++.mike/eh31.C 3196832667b ./gcc/testsuite/g++.old-deja/g++.mike/eh32.C --- 7101,7107 ---- 2419761913b ./gcc/testsuite/g++.old-deja/g++.mike/eh27.C 1187597651b ./gcc/testsuite/g++.old-deja/g++.mike/eh28.C 1211663524b ./gcc/testsuite/g++.old-deja/g++.mike/eh29.C ! 3592708402b ./gcc/testsuite/g++.old-deja/g++.mike/eh3.C 19764474b ./gcc/testsuite/g++.old-deja/g++.mike/eh30.C 2656014861b ./gcc/testsuite/g++.old-deja/g++.mike/eh31.C 3196832667b ./gcc/testsuite/g++.old-deja/g++.mike/eh32.C *************** *** 9794,9800 **** 1379433802b ./gcc/testsuite/g++.old-deja/g++.mike/eh37.C 2520417864b ./gcc/testsuite/g++.old-deja/g++.mike/eh38.C 2239202212b ./gcc/testsuite/g++.old-deja/g++.mike/eh39.C ! 3592708402b ./gcc/testsuite/g++.old-deja/g++.mike/eh3.C 812645089b ./gcc/testsuite/g++.old-deja/g++.mike/eh40.C 2008000368b ./gcc/testsuite/g++.old-deja/g++.mike/eh41.C 396786327b ./gcc/testsuite/g++.old-deja/g++.mike/eh42.C --- 7112,7118 ---- 1379433802b ./gcc/testsuite/g++.old-deja/g++.mike/eh37.C 2520417864b ./gcc/testsuite/g++.old-deja/g++.mike/eh38.C 2239202212b ./gcc/testsuite/g++.old-deja/g++.mike/eh39.C ! 833195775b ./gcc/testsuite/g++.old-deja/g++.mike/eh4.C 812645089b ./gcc/testsuite/g++.old-deja/g++.mike/eh40.C 2008000368b ./gcc/testsuite/g++.old-deja/g++.mike/eh41.C 396786327b ./gcc/testsuite/g++.old-deja/g++.mike/eh42.C *************** *** 9804,9810 **** 2543002191b ./gcc/testsuite/g++.old-deja/g++.mike/eh47.C 3489458651b ./gcc/testsuite/g++.old-deja/g++.mike/eh48.C 836588330b ./gcc/testsuite/g++.old-deja/g++.mike/eh49.C ! 833195775b ./gcc/testsuite/g++.old-deja/g++.mike/eh4.C 4154329155b ./gcc/testsuite/g++.old-deja/g++.mike/eh50.C 2472994932b ./gcc/testsuite/g++.old-deja/g++.mike/eh51.C 359223272b ./gcc/testsuite/g++.old-deja/g++.mike/eh52.C --- 7122,7128 ---- 2543002191b ./gcc/testsuite/g++.old-deja/g++.mike/eh47.C 3489458651b ./gcc/testsuite/g++.old-deja/g++.mike/eh48.C 836588330b ./gcc/testsuite/g++.old-deja/g++.mike/eh49.C ! 2616136317b ./gcc/testsuite/g++.old-deja/g++.mike/eh5.C 4154329155b ./gcc/testsuite/g++.old-deja/g++.mike/eh50.C 2472994932b ./gcc/testsuite/g++.old-deja/g++.mike/eh51.C 359223272b ./gcc/testsuite/g++.old-deja/g++.mike/eh52.C *************** *** 9815,9821 **** 4236094512b ./gcc/testsuite/g++.old-deja/g++.mike/eh57.C 1057069707b ./gcc/testsuite/g++.old-deja/g++.mike/eh58.C 3255147266b ./gcc/testsuite/g++.old-deja/g++.mike/eh59.C - 2616136317b ./gcc/testsuite/g++.old-deja/g++.mike/eh5.C 1226767941b ./gcc/testsuite/g++.old-deja/g++.mike/eh6.C 42372650b ./gcc/testsuite/g++.old-deja/g++.mike/eh7.C 851372296b ./gcc/testsuite/g++.old-deja/g++.mike/eh8.C --- 7133,7138 ---- *************** *** 9840,9850 **** 3720053646b ./gcc/testsuite/g++.old-deja/g++.mike/memoize1.C 227243000b ./gcc/testsuite/g++.old-deja/g++.mike/mi1.C 4025070490b ./gcc/testsuite/g++.old-deja/g++.mike/mi2.C 4041946331b ./gcc/testsuite/g++.old-deja/g++.mike/misc11.C 3057947029b ./gcc/testsuite/g++.old-deja/g++.mike/misc12.C 430127070b ./gcc/testsuite/g++.old-deja/g++.mike/misc13.C 2291534767b ./gcc/testsuite/g++.old-deja/g++.mike/misc14.C - 693076493b ./gcc/testsuite/g++.old-deja/g++.mike/misc1.C 2351659378b ./gcc/testsuite/g++.old-deja/g++.mike/misc2.C 48579344b ./gcc/testsuite/g++.old-deja/g++.mike/misc3.C 263841150b ./gcc/testsuite/g++.old-deja/g++.mike/misc5.C --- 7157,7167 ---- 3720053646b ./gcc/testsuite/g++.old-deja/g++.mike/memoize1.C 227243000b ./gcc/testsuite/g++.old-deja/g++.mike/mi1.C 4025070490b ./gcc/testsuite/g++.old-deja/g++.mike/mi2.C + 693076493b ./gcc/testsuite/g++.old-deja/g++.mike/misc1.C 4041946331b ./gcc/testsuite/g++.old-deja/g++.mike/misc11.C 3057947029b ./gcc/testsuite/g++.old-deja/g++.mike/misc12.C 430127070b ./gcc/testsuite/g++.old-deja/g++.mike/misc13.C 2291534767b ./gcc/testsuite/g++.old-deja/g++.mike/misc14.C 2351659378b ./gcc/testsuite/g++.old-deja/g++.mike/misc2.C 48579344b ./gcc/testsuite/g++.old-deja/g++.mike/misc3.C 263841150b ./gcc/testsuite/g++.old-deja/g++.mike/misc5.C *************** *** 9852,9857 **** --- 7169,7175 ---- 3029506356b ./gcc/testsuite/g++.old-deja/g++.mike/misc7.C 3400747232b ./gcc/testsuite/g++.old-deja/g++.mike/misc8.C 2472705454b ./gcc/testsuite/g++.old-deja/g++.mike/misc9.C + 2700723029b ./gcc/testsuite/g++.old-deja/g++.mike/net1.C 2347594484b ./gcc/testsuite/g++.old-deja/g++.mike/net10.C 2264540476b ./gcc/testsuite/g++.old-deja/g++.mike/net11.C 1619954363b ./gcc/testsuite/g++.old-deja/g++.mike/net12.C *************** *** 9862,9868 **** 2790494835b ./gcc/testsuite/g++.old-deja/g++.mike/net17.C 128141995b ./gcc/testsuite/g++.old-deja/g++.mike/net18.C 948890721b ./gcc/testsuite/g++.old-deja/g++.mike/net19.C ! 2700723029b ./gcc/testsuite/g++.old-deja/g++.mike/net1.C 4292061310b ./gcc/testsuite/g++.old-deja/g++.mike/net20.C 226565812b ./gcc/testsuite/g++.old-deja/g++.mike/net21.C 1728885921b ./gcc/testsuite/g++.old-deja/g++.mike/net22.C --- 7180,7186 ---- 2790494835b ./gcc/testsuite/g++.old-deja/g++.mike/net17.C 128141995b ./gcc/testsuite/g++.old-deja/g++.mike/net18.C 948890721b ./gcc/testsuite/g++.old-deja/g++.mike/net19.C ! 2767243364b ./gcc/testsuite/g++.old-deja/g++.mike/net2.C 4292061310b ./gcc/testsuite/g++.old-deja/g++.mike/net20.C 226565812b ./gcc/testsuite/g++.old-deja/g++.mike/net21.C 1728885921b ./gcc/testsuite/g++.old-deja/g++.mike/net22.C *************** *** 9873,9879 **** 94102590b ./gcc/testsuite/g++.old-deja/g++.mike/net27.C 1622305952b ./gcc/testsuite/g++.old-deja/g++.mike/net28.C 2635182781b ./gcc/testsuite/g++.old-deja/g++.mike/net29.C ! 2767243364b ./gcc/testsuite/g++.old-deja/g++.mike/net2.C 623832663b ./gcc/testsuite/g++.old-deja/g++.mike/net30.C 1825313370b ./gcc/testsuite/g++.old-deja/g++.mike/net31.C 1380727967b ./gcc/testsuite/g++.old-deja/g++.mike/net32.C --- 7191,7197 ---- 94102590b ./gcc/testsuite/g++.old-deja/g++.mike/net27.C 1622305952b ./gcc/testsuite/g++.old-deja/g++.mike/net28.C 2635182781b ./gcc/testsuite/g++.old-deja/g++.mike/net29.C ! 2896773743b ./gcc/testsuite/g++.old-deja/g++.mike/net3.C 623832663b ./gcc/testsuite/g++.old-deja/g++.mike/net30.C 1825313370b ./gcc/testsuite/g++.old-deja/g++.mike/net31.C 1380727967b ./gcc/testsuite/g++.old-deja/g++.mike/net32.C *************** *** 9883,9889 **** 404712047b ./gcc/testsuite/g++.old-deja/g++.mike/net37.C 373469883b ./gcc/testsuite/g++.old-deja/g++.mike/net38.C 3771016947b ./gcc/testsuite/g++.old-deja/g++.mike/net39.C ! 2896773743b ./gcc/testsuite/g++.old-deja/g++.mike/net3.C 3117098407b ./gcc/testsuite/g++.old-deja/g++.mike/net40.C 2329906223b ./gcc/testsuite/g++.old-deja/g++.mike/net41.C 257842077b ./gcc/testsuite/g++.old-deja/g++.mike/net42.C --- 7201,7207 ---- 404712047b ./gcc/testsuite/g++.old-deja/g++.mike/net37.C 373469883b ./gcc/testsuite/g++.old-deja/g++.mike/net38.C 3771016947b ./gcc/testsuite/g++.old-deja/g++.mike/net39.C ! 2596381910b ./gcc/testsuite/g++.old-deja/g++.mike/net4.C 3117098407b ./gcc/testsuite/g++.old-deja/g++.mike/net40.C 2329906223b ./gcc/testsuite/g++.old-deja/g++.mike/net41.C 257842077b ./gcc/testsuite/g++.old-deja/g++.mike/net42.C *************** *** 9893,9910 **** 4252296965b ./gcc/testsuite/g++.old-deja/g++.mike/net46.C 3377446225b ./gcc/testsuite/g++.old-deja/g++.mike/net47.C 3175541105b ./gcc/testsuite/g++.old-deja/g++.mike/net48.C - 2596381910b ./gcc/testsuite/g++.old-deja/g++.mike/net4.C 557858870b ./gcc/testsuite/g++.old-deja/g++.mike/net6.C 2207442407b ./gcc/testsuite/g++.old-deja/g++.mike/net7.C 2718402760b ./gcc/testsuite/g++.old-deja/g++.mike/net8.C 2353333727b ./gcc/testsuite/g++.old-deja/g++.mike/net9.C 567253957b ./gcc/testsuite/g++.old-deja/g++.mike/ns10.C 2416554745b ./gcc/testsuite/g++.old-deja/g++.mike/ns11.C 533880824b ./gcc/testsuite/g++.old-deja/g++.mike/ns12.C 1634894638b ./gcc/testsuite/g++.old-deja/g++.mike/ns13.C 133757607b ./gcc/testsuite/g++.old-deja/g++.mike/ns14.C 2272679205b ./gcc/testsuite/g++.old-deja/g++.mike/ns15.C - 452066686b ./gcc/testsuite/g++.old-deja/g++.mike/ns1.C 3588362593b ./gcc/testsuite/g++.old-deja/g++.mike/ns2.C 1013122739b ./gcc/testsuite/g++.old-deja/g++.mike/ns3.C 1600942614b ./gcc/testsuite/g++.old-deja/g++.mike/ns4.C --- 7211,7227 ---- 4252296965b ./gcc/testsuite/g++.old-deja/g++.mike/net46.C 3377446225b ./gcc/testsuite/g++.old-deja/g++.mike/net47.C 3175541105b ./gcc/testsuite/g++.old-deja/g++.mike/net48.C 557858870b ./gcc/testsuite/g++.old-deja/g++.mike/net6.C 2207442407b ./gcc/testsuite/g++.old-deja/g++.mike/net7.C 2718402760b ./gcc/testsuite/g++.old-deja/g++.mike/net8.C 2353333727b ./gcc/testsuite/g++.old-deja/g++.mike/net9.C + 452066686b ./gcc/testsuite/g++.old-deja/g++.mike/ns1.C 567253957b ./gcc/testsuite/g++.old-deja/g++.mike/ns10.C 2416554745b ./gcc/testsuite/g++.old-deja/g++.mike/ns11.C 533880824b ./gcc/testsuite/g++.old-deja/g++.mike/ns12.C 1634894638b ./gcc/testsuite/g++.old-deja/g++.mike/ns13.C 133757607b ./gcc/testsuite/g++.old-deja/g++.mike/ns14.C 2272679205b ./gcc/testsuite/g++.old-deja/g++.mike/ns15.C 3588362593b ./gcc/testsuite/g++.old-deja/g++.mike/ns2.C 1013122739b ./gcc/testsuite/g++.old-deja/g++.mike/ns3.C 1600942614b ./gcc/testsuite/g++.old-deja/g++.mike/ns4.C *************** *** 9930,9937 **** 2584300706b ./gcc/testsuite/g++.old-deja/g++.mike/p11144.C 1612526821b ./gcc/testsuite/g++.old-deja/g++.mike/p11482.C 18099126b ./gcc/testsuite/g++.old-deja/g++.mike/p11667.C - 783911097b ./gcc/testsuite/g++.old-deja/g++.mike/p12306a.C 3634094361b ./gcc/testsuite/g++.old-deja/g++.mike/p12306.C 3834401134b ./gcc/testsuite/g++.old-deja/g++.mike/p1248.C 2006378635b ./gcc/testsuite/g++.old-deja/g++.mike/p1567.C 3231801438b ./gcc/testsuite/g++.old-deja/g++.mike/p16146.C --- 7247,7254 ---- 2584300706b ./gcc/testsuite/g++.old-deja/g++.mike/p11144.C 1612526821b ./gcc/testsuite/g++.old-deja/g++.mike/p11482.C 18099126b ./gcc/testsuite/g++.old-deja/g++.mike/p11667.C 3634094361b ./gcc/testsuite/g++.old-deja/g++.mike/p12306.C + 783911097b ./gcc/testsuite/g++.old-deja/g++.mike/p12306a.C 3834401134b ./gcc/testsuite/g++.old-deja/g++.mike/p1248.C 2006378635b ./gcc/testsuite/g++.old-deja/g++.mike/p1567.C 3231801438b ./gcc/testsuite/g++.old-deja/g++.mike/p16146.C *************** *** 9944,9952 **** 3189296082b ./gcc/testsuite/g++.old-deja/g++.mike/p2746.C 2655922230b ./gcc/testsuite/g++.old-deja/g++.mike/p2793.C 2222530613b ./gcc/testsuite/g++.old-deja/g++.mike/p2806.C 3941688151b ./gcc/testsuite/g++.old-deja/g++.mike/p2846a.C 481437008b ./gcc/testsuite/g++.old-deja/g++.mike/p2846b.C - 1350283959b ./gcc/testsuite/g++.old-deja/g++.mike/p2846.C 231166541b ./gcc/testsuite/g++.old-deja/g++.mike/p2855.C 1228637975b ./gcc/testsuite/g++.old-deja/g++.mike/p2960.C 172879720b ./gcc/testsuite/g++.old-deja/g++.mike/p3041.C --- 7261,7269 ---- 3189296082b ./gcc/testsuite/g++.old-deja/g++.mike/p2746.C 2655922230b ./gcc/testsuite/g++.old-deja/g++.mike/p2793.C 2222530613b ./gcc/testsuite/g++.old-deja/g++.mike/p2806.C + 1350283959b ./gcc/testsuite/g++.old-deja/g++.mike/p2846.C 3941688151b ./gcc/testsuite/g++.old-deja/g++.mike/p2846a.C 481437008b ./gcc/testsuite/g++.old-deja/g++.mike/p2846b.C 231166541b ./gcc/testsuite/g++.old-deja/g++.mike/p2855.C 1228637975b ./gcc/testsuite/g++.old-deja/g++.mike/p2960.C 172879720b ./gcc/testsuite/g++.old-deja/g++.mike/p3041.C *************** *** 9962,9970 **** 2629346869b ./gcc/testsuite/g++.old-deja/g++.mike/p3538b.C 1918171545b ./gcc/testsuite/g++.old-deja/g++.mike/p3570.C 2384869664b ./gcc/testsuite/g++.old-deja/g++.mike/p3579.C 4049970058b ./gcc/testsuite/g++.old-deja/g++.mike/p3708a.C 2170847074b ./gcc/testsuite/g++.old-deja/g++.mike/p3708b.C - 1307191770b ./gcc/testsuite/g++.old-deja/g++.mike/p3708.C 3856504451b ./gcc/testsuite/g++.old-deja/g++.mike/p3764.C 2579187029b ./gcc/testsuite/g++.old-deja/g++.mike/p3836.C 717100314b ./gcc/testsuite/g++.old-deja/g++.mike/p4068.C --- 7279,7287 ---- 2629346869b ./gcc/testsuite/g++.old-deja/g++.mike/p3538b.C 1918171545b ./gcc/testsuite/g++.old-deja/g++.mike/p3570.C 2384869664b ./gcc/testsuite/g++.old-deja/g++.mike/p3579.C + 1307191770b ./gcc/testsuite/g++.old-deja/g++.mike/p3708.C 4049970058b ./gcc/testsuite/g++.old-deja/g++.mike/p3708a.C 2170847074b ./gcc/testsuite/g++.old-deja/g++.mike/p3708b.C 3856504451b ./gcc/testsuite/g++.old-deja/g++.mike/p3764.C 2579187029b ./gcc/testsuite/g++.old-deja/g++.mike/p3836.C 717100314b ./gcc/testsuite/g++.old-deja/g++.mike/p4068.C *************** *** 9987,9994 **** 791627116b ./gcc/testsuite/g++.old-deja/g++.mike/p4736b.C 3037713609b ./gcc/testsuite/g++.old-deja/g++.mike/p4736c.C 3183066012b ./gcc/testsuite/g++.old-deja/g++.mike/p4750.C - 1643480270b ./gcc/testsuite/g++.old-deja/g++.mike/p5469a.C 2783396832b ./gcc/testsuite/g++.old-deja/g++.mike/p5469.C 1694086012b ./gcc/testsuite/g++.old-deja/g++.mike/p5571.C 2030989669b ./gcc/testsuite/g++.old-deja/g++.mike/p5611.C 3220562563b ./gcc/testsuite/g++.old-deja/g++.mike/p5673.C --- 7304,7311 ---- 791627116b ./gcc/testsuite/g++.old-deja/g++.mike/p4736b.C 3037713609b ./gcc/testsuite/g++.old-deja/g++.mike/p4736c.C 3183066012b ./gcc/testsuite/g++.old-deja/g++.mike/p4750.C 2783396832b ./gcc/testsuite/g++.old-deja/g++.mike/p5469.C + 1643480270b ./gcc/testsuite/g++.old-deja/g++.mike/p5469a.C 1694086012b ./gcc/testsuite/g++.old-deja/g++.mike/p5571.C 2030989669b ./gcc/testsuite/g++.old-deja/g++.mike/p5611.C 3220562563b ./gcc/testsuite/g++.old-deja/g++.mike/p5673.C *************** *** 10015,10040 **** 1244723488b ./gcc/testsuite/g++.old-deja/g++.mike/p7180.C 3521513511b ./gcc/testsuite/g++.old-deja/g++.mike/p7325.C 3900843491b ./gcc/testsuite/g++.old-deja/g++.mike/p7476.C - 3394798100b ./gcc/testsuite/g++.old-deja/g++.mike/p755a.C 2349738175b ./gcc/testsuite/g++.old-deja/g++.mike/p755.C 1365378601b ./gcc/testsuite/g++.old-deja/g++.mike/p7626.C 2818833306b ./gcc/testsuite/g++.old-deja/g++.mike/p7635.C 2124571317b ./gcc/testsuite/g++.old-deja/g++.mike/p7651.C 3247827104b ./gcc/testsuite/g++.old-deja/g++.mike/p783a.C 3185815998b ./gcc/testsuite/g++.old-deja/g++.mike/p783b.C - 298093700b ./gcc/testsuite/g++.old-deja/g++.mike/p783.C 1112249731b ./gcc/testsuite/g++.old-deja/g++.mike/p784.C 3281865096b ./gcc/testsuite/g++.old-deja/g++.mike/p7865.C 341429709b ./gcc/testsuite/g++.old-deja/g++.mike/p7868.C - 1887516335b ./gcc/testsuite/g++.old-deja/g++.mike/p786.C - 973504582b ./gcc/testsuite/g++.old-deja/g++.mike/p789a.C 1539916341b ./gcc/testsuite/g++.old-deja/g++.mike/p789.C 2120486239b ./gcc/testsuite/g++.old-deja/g++.mike/p7912.C 1656717793b ./gcc/testsuite/g++.old-deja/g++.mike/p8009.C 134774070b ./gcc/testsuite/g++.old-deja/g++.mike/p8018.C 2662329366b ./gcc/testsuite/g++.old-deja/g++.mike/p8039.C - 3781414938b ./gcc/testsuite/g++.old-deja/g++.mike/p807a.C 1398614996b ./gcc/testsuite/g++.old-deja/g++.mike/p807.C 3344337430b ./gcc/testsuite/g++.old-deja/g++.mike/p811.C 2698571232b ./gcc/testsuite/g++.old-deja/g++.mike/p8154.C 3491611004b ./gcc/testsuite/g++.old-deja/g++.mike/p8155.C --- 7332,7357 ---- 1244723488b ./gcc/testsuite/g++.old-deja/g++.mike/p7180.C 3521513511b ./gcc/testsuite/g++.old-deja/g++.mike/p7325.C 3900843491b ./gcc/testsuite/g++.old-deja/g++.mike/p7476.C 2349738175b ./gcc/testsuite/g++.old-deja/g++.mike/p755.C + 3394798100b ./gcc/testsuite/g++.old-deja/g++.mike/p755a.C 1365378601b ./gcc/testsuite/g++.old-deja/g++.mike/p7626.C 2818833306b ./gcc/testsuite/g++.old-deja/g++.mike/p7635.C 2124571317b ./gcc/testsuite/g++.old-deja/g++.mike/p7651.C + 298093700b ./gcc/testsuite/g++.old-deja/g++.mike/p783.C 3247827104b ./gcc/testsuite/g++.old-deja/g++.mike/p783a.C 3185815998b ./gcc/testsuite/g++.old-deja/g++.mike/p783b.C 1112249731b ./gcc/testsuite/g++.old-deja/g++.mike/p784.C + 1887516335b ./gcc/testsuite/g++.old-deja/g++.mike/p786.C 3281865096b ./gcc/testsuite/g++.old-deja/g++.mike/p7865.C 341429709b ./gcc/testsuite/g++.old-deja/g++.mike/p7868.C 1539916341b ./gcc/testsuite/g++.old-deja/g++.mike/p789.C + 973504582b ./gcc/testsuite/g++.old-deja/g++.mike/p789a.C 2120486239b ./gcc/testsuite/g++.old-deja/g++.mike/p7912.C 1656717793b ./gcc/testsuite/g++.old-deja/g++.mike/p8009.C 134774070b ./gcc/testsuite/g++.old-deja/g++.mike/p8018.C 2662329366b ./gcc/testsuite/g++.old-deja/g++.mike/p8039.C 1398614996b ./gcc/testsuite/g++.old-deja/g++.mike/p807.C + 3781414938b ./gcc/testsuite/g++.old-deja/g++.mike/p807a.C 3344337430b ./gcc/testsuite/g++.old-deja/g++.mike/p811.C 2698571232b ./gcc/testsuite/g++.old-deja/g++.mike/p8154.C 3491611004b ./gcc/testsuite/g++.old-deja/g++.mike/p8155.C *************** *** 10158,10163 **** --- 7475,7481 ---- 99097863b ./gcc/testsuite/g++.old-deja/g++.ns/lookup5.C 2416418172b ./gcc/testsuite/g++.old-deja/g++.ns/main1.C 462860645b ./gcc/testsuite/g++.old-deja/g++.ns/new1.C + 320140404b ./gcc/testsuite/g++.old-deja/g++.ns/ns1.C 2286495086b ./gcc/testsuite/g++.old-deja/g++.ns/ns10.C 2018913859b ./gcc/testsuite/g++.old-deja/g++.ns/ns11.C 1953910502b ./gcc/testsuite/g++.old-deja/g++.ns/ns12.C *************** *** 10168,10174 **** 2083452456b ./gcc/testsuite/g++.old-deja/g++.ns/ns17.C 1679880705b ./gcc/testsuite/g++.old-deja/g++.ns/ns18.C 3180343024b ./gcc/testsuite/g++.old-deja/g++.ns/ns19.C - 320140404b ./gcc/testsuite/g++.old-deja/g++.ns/ns1.C 1879177898b ./gcc/testsuite/g++.old-deja/g++.ns/ns2.C 1465385187b ./gcc/testsuite/g++.old-deja/g++.ns/ns3.C 4084737299b ./gcc/testsuite/g++.old-deja/g++.ns/ns4.C --- 7486,7491 ---- *************** *** 10183,10188 **** --- 7500,7506 ---- 3876905928b ./gcc/testsuite/g++.old-deja/g++.ns/overload4.C 2260598962b ./gcc/testsuite/g++.old-deja/g++.ns/overload5.C 4131178865b ./gcc/testsuite/g++.old-deja/g++.ns/scoped1.C + 1497628723b ./gcc/testsuite/g++.old-deja/g++.ns/template1.C 1593366070b ./gcc/testsuite/g++.old-deja/g++.ns/template10.C 227548188b ./gcc/testsuite/g++.old-deja/g++.ns/template11.C 3712349348b ./gcc/testsuite/g++.old-deja/g++.ns/template12.C *************** *** 10192,10198 **** 703552988b ./gcc/testsuite/g++.old-deja/g++.ns/template16.C 3733063651b ./gcc/testsuite/g++.old-deja/g++.ns/template17.C 1888321924b ./gcc/testsuite/g++.old-deja/g++.ns/template18.C - 1497628723b ./gcc/testsuite/g++.old-deja/g++.ns/template1.C 2875853595b ./gcc/testsuite/g++.old-deja/g++.ns/template2.C 1112300813b ./gcc/testsuite/g++.old-deja/g++.ns/template3.C 2350177435b ./gcc/testsuite/g++.old-deja/g++.ns/template4.C --- 7510,7515 ---- *************** *** 10204,10215 **** 84089911b ./gcc/testsuite/g++.old-deja/g++.ns/type1.C 3277562556b ./gcc/testsuite/g++.old-deja/g++.ns/type2.C 1028524427b ./gcc/testsuite/g++.old-deja/g++.ns/undef1.C 3481627695b ./gcc/testsuite/g++.old-deja/g++.ns/using10.C 3329538563b ./gcc/testsuite/g++.old-deja/g++.ns/using11.C 1085995099b ./gcc/testsuite/g++.old-deja/g++.ns/using12.C 883766752b ./gcc/testsuite/g++.old-deja/g++.ns/using13.C 35819294b ./gcc/testsuite/g++.old-deja/g++.ns/using14.C - 1496925944b ./gcc/testsuite/g++.old-deja/g++.ns/using1.C 549926689b ./gcc/testsuite/g++.old-deja/g++.ns/using2.C 2238481400b ./gcc/testsuite/g++.old-deja/g++.ns/using3.C 3304922930b ./gcc/testsuite/g++.old-deja/g++.ns/using4.C --- 7521,7532 ---- 84089911b ./gcc/testsuite/g++.old-deja/g++.ns/type1.C 3277562556b ./gcc/testsuite/g++.old-deja/g++.ns/type2.C 1028524427b ./gcc/testsuite/g++.old-deja/g++.ns/undef1.C + 1496925944b ./gcc/testsuite/g++.old-deja/g++.ns/using1.C 3481627695b ./gcc/testsuite/g++.old-deja/g++.ns/using10.C 3329538563b ./gcc/testsuite/g++.old-deja/g++.ns/using11.C 1085995099b ./gcc/testsuite/g++.old-deja/g++.ns/using12.C 883766752b ./gcc/testsuite/g++.old-deja/g++.ns/using13.C 35819294b ./gcc/testsuite/g++.old-deja/g++.ns/using14.C 549926689b ./gcc/testsuite/g++.old-deja/g++.ns/using2.C 2238481400b ./gcc/testsuite/g++.old-deja/g++.ns/using3.C 3304922930b ./gcc/testsuite/g++.old-deja/g++.ns/using4.C *************** *** 10218,10224 **** 3099602163b ./gcc/testsuite/g++.old-deja/g++.ns/using7.C 396388537b ./gcc/testsuite/g++.old-deja/g++.ns/using8.C 536814910b ./gcc/testsuite/g++.old-deja/g++.ns/using9.C ! 3363076077b ./gcc/testsuite/g++.old-deja/g++.oliva/ChangeLog 3728265872b ./gcc/testsuite/g++.old-deja/g++.oliva/ctor1.C 3026414575b ./gcc/testsuite/g++.old-deja/g++.oliva/delete1.C 3639944207b ./gcc/testsuite/g++.old-deja/g++.oliva/delete2.C --- 7535,7541 ---- 3099602163b ./gcc/testsuite/g++.old-deja/g++.ns/using7.C 396388537b ./gcc/testsuite/g++.old-deja/g++.ns/using8.C 536814910b ./gcc/testsuite/g++.old-deja/g++.ns/using9.C ! 1838465373b ./gcc/testsuite/g++.old-deja/g++.oliva/ChangeLog 3728265872b ./gcc/testsuite/g++.old-deja/g++.oliva/ctor1.C 3026414575b ./gcc/testsuite/g++.old-deja/g++.oliva/delete1.C 3639944207b ./gcc/testsuite/g++.old-deja/g++.oliva/delete2.C *************** *** 10233,10240 **** 738813804b ./gcc/testsuite/g++.old-deja/g++.oliva/ext1.C 149147424b ./gcc/testsuite/g++.old-deja/g++.oliva/friend1.C 3385010570b ./gcc/testsuite/g++.old-deja/g++.oliva/inline1.C - 4116417275b ./gcc/testsuite/g++.old-deja/g++.oliva/linkage1.C 3935429550b ./gcc/testsuite/g++.old-deja/g++.oliva/linkage1-main.cc 2214033786b ./gcc/testsuite/g++.old-deja/g++.oliva/nameret1.C 2703397514b ./gcc/testsuite/g++.old-deja/g++.oliva/nameret2.C 759830263b ./gcc/testsuite/g++.old-deja/g++.oliva/new1.C --- 7550,7557 ---- 738813804b ./gcc/testsuite/g++.old-deja/g++.oliva/ext1.C 149147424b ./gcc/testsuite/g++.old-deja/g++.oliva/friend1.C 3385010570b ./gcc/testsuite/g++.old-deja/g++.oliva/inline1.C 3935429550b ./gcc/testsuite/g++.old-deja/g++.oliva/linkage1-main.cc + 4116417275b ./gcc/testsuite/g++.old-deja/g++.oliva/linkage1.C 2214033786b ./gcc/testsuite/g++.old-deja/g++.oliva/nameret1.C 2703397514b ./gcc/testsuite/g++.old-deja/g++.oliva/nameret2.C 759830263b ./gcc/testsuite/g++.old-deja/g++.oliva/new1.C *************** *** 10245,10252 **** 1341045521b ./gcc/testsuite/g++.old-deja/g++.oliva/partord1.C 4276767902b ./gcc/testsuite/g++.old-deja/g++.oliva/partspec1.C 2386630112b ./gcc/testsuite/g++.old-deja/g++.oliva/stkalign.C - 4240481284b ./gcc/testsuite/g++.old-deja/g++.oliva/template10.C 1309552996b ./gcc/testsuite/g++.old-deja/g++.oliva/template1.C 894610317b ./gcc/testsuite/g++.old-deja/g++.oliva/template2.C 4111994491b ./gcc/testsuite/g++.old-deja/g++.oliva/template3.C 3380741154b ./gcc/testsuite/g++.old-deja/g++.oliva/template4.C --- 7562,7569 ---- 1341045521b ./gcc/testsuite/g++.old-deja/g++.oliva/partord1.C 4276767902b ./gcc/testsuite/g++.old-deja/g++.oliva/partspec1.C 2386630112b ./gcc/testsuite/g++.old-deja/g++.oliva/stkalign.C 1309552996b ./gcc/testsuite/g++.old-deja/g++.oliva/template1.C + 4240481284b ./gcc/testsuite/g++.old-deja/g++.oliva/template10.C 894610317b ./gcc/testsuite/g++.old-deja/g++.oliva/template2.C 4111994491b ./gcc/testsuite/g++.old-deja/g++.oliva/template3.C 3380741154b ./gcc/testsuite/g++.old-deja/g++.oliva/template4.C *************** *** 10261,10269 **** 3536726592b ./gcc/testsuite/g++.old-deja/g++.oliva/typeof1.C 1057884755b ./gcc/testsuite/g++.old-deja/g++.other/900403_04.C 3988635652b ./gcc/testsuite/g++.old-deja/g++.other/900519_12.C 3191928166b ./gcc/testsuite/g++.old-deja/g++.other/access10.C 2726240569b ./gcc/testsuite/g++.old-deja/g++.other/access11.C - 2645069492b ./gcc/testsuite/g++.old-deja/g++.other/access1.C 627859229b ./gcc/testsuite/g++.old-deja/g++.other/access2.C 2495312369b ./gcc/testsuite/g++.old-deja/g++.other/access3.C 2750828805b ./gcc/testsuite/g++.old-deja/g++.other/access4.C --- 7578,7586 ---- 3536726592b ./gcc/testsuite/g++.old-deja/g++.oliva/typeof1.C 1057884755b ./gcc/testsuite/g++.old-deja/g++.other/900403_04.C 3988635652b ./gcc/testsuite/g++.old-deja/g++.other/900519_12.C + 2645069492b ./gcc/testsuite/g++.old-deja/g++.other/access1.C 3191928166b ./gcc/testsuite/g++.old-deja/g++.other/access10.C 2726240569b ./gcc/testsuite/g++.old-deja/g++.other/access11.C 627859229b ./gcc/testsuite/g++.old-deja/g++.other/access2.C 2495312369b ./gcc/testsuite/g++.old-deja/g++.other/access3.C 2750828805b ./gcc/testsuite/g++.old-deja/g++.other/access4.C *************** *** 10304,10311 **** 2880959878b ./gcc/testsuite/g++.old-deja/g++.other/bitfld3.C 574179745b ./gcc/testsuite/g++.old-deja/g++.other/bitfld4.C 2818363580b ./gcc/testsuite/g++.old-deja/g++.other/bitfld5.C - 790805105b ./gcc/testsuite/g++.old-deja/g++.other/builtins10.C 849916728b ./gcc/testsuite/g++.old-deja/g++.other/builtins1.C 1119192045b ./gcc/testsuite/g++.old-deja/g++.other/builtins2.C 1541855856b ./gcc/testsuite/g++.old-deja/g++.other/builtins3.C 3612794982b ./gcc/testsuite/g++.old-deja/g++.other/builtins4.C --- 7621,7628 ---- 2880959878b ./gcc/testsuite/g++.old-deja/g++.other/bitfld3.C 574179745b ./gcc/testsuite/g++.old-deja/g++.other/bitfld4.C 2818363580b ./gcc/testsuite/g++.old-deja/g++.other/bitfld5.C 849916728b ./gcc/testsuite/g++.old-deja/g++.other/builtins1.C + 790805105b ./gcc/testsuite/g++.old-deja/g++.other/builtins10.C 1119192045b ./gcc/testsuite/g++.old-deja/g++.other/builtins2.C 1541855856b ./gcc/testsuite/g++.old-deja/g++.other/builtins3.C 3612794982b ./gcc/testsuite/g++.old-deja/g++.other/builtins4.C *************** *** 10354,10359 **** --- 7671,7677 ---- 3735054018b ./gcc/testsuite/g++.old-deja/g++.other/copy2.C 4116304803b ./gcc/testsuite/g++.old-deja/g++.other/copy3.C 809878899b ./gcc/testsuite/g++.old-deja/g++.other/covar1.C + 1458918645b ./gcc/testsuite/g++.old-deja/g++.other/crash1.C 2622243234b ./gcc/testsuite/g++.old-deja/g++.other/crash10.C 1409785718b ./gcc/testsuite/g++.old-deja/g++.other/crash11.C 155389209b ./gcc/testsuite/g++.old-deja/g++.other/crash12.C *************** *** 10364,10370 **** 2768038718b ./gcc/testsuite/g++.old-deja/g++.other/crash17.C 1844482260b ./gcc/testsuite/g++.old-deja/g++.other/crash18.C 4239879636b ./gcc/testsuite/g++.old-deja/g++.other/crash19.C ! 1458918645b ./gcc/testsuite/g++.old-deja/g++.other/crash1.C 2114923665b ./gcc/testsuite/g++.old-deja/g++.other/crash20.C 2408483670b ./gcc/testsuite/g++.old-deja/g++.other/crash21.C 389951009b ./gcc/testsuite/g++.old-deja/g++.other/crash22.C --- 7682,7688 ---- 2768038718b ./gcc/testsuite/g++.old-deja/g++.other/crash17.C 1844482260b ./gcc/testsuite/g++.old-deja/g++.other/crash18.C 4239879636b ./gcc/testsuite/g++.old-deja/g++.other/crash19.C ! 2556139745b ./gcc/testsuite/g++.old-deja/g++.other/crash2.C 2114923665b ./gcc/testsuite/g++.old-deja/g++.other/crash20.C 2408483670b ./gcc/testsuite/g++.old-deja/g++.other/crash21.C 389951009b ./gcc/testsuite/g++.old-deja/g++.other/crash22.C *************** *** 10375,10381 **** 621631894b ./gcc/testsuite/g++.old-deja/g++.other/crash27.C 1274918070b ./gcc/testsuite/g++.old-deja/g++.other/crash28.C 3218325168b ./gcc/testsuite/g++.old-deja/g++.other/crash29.C ! 2556139745b ./gcc/testsuite/g++.old-deja/g++.other/crash2.C 3863621974b ./gcc/testsuite/g++.old-deja/g++.other/crash30.C 1567414961b ./gcc/testsuite/g++.old-deja/g++.other/crash31.C 654989067b ./gcc/testsuite/g++.old-deja/g++.other/crash32.C --- 7693,7699 ---- 621631894b ./gcc/testsuite/g++.old-deja/g++.other/crash27.C 1274918070b ./gcc/testsuite/g++.old-deja/g++.other/crash28.C 3218325168b ./gcc/testsuite/g++.old-deja/g++.other/crash29.C ! 1986207284b ./gcc/testsuite/g++.old-deja/g++.other/crash3.C 3863621974b ./gcc/testsuite/g++.old-deja/g++.other/crash30.C 1567414961b ./gcc/testsuite/g++.old-deja/g++.other/crash31.C 654989067b ./gcc/testsuite/g++.old-deja/g++.other/crash32.C *************** *** 10386,10399 **** 3888381363b ./gcc/testsuite/g++.old-deja/g++.other/crash37.C 3660059490b ./gcc/testsuite/g++.old-deja/g++.other/crash38.C 465327177b ./gcc/testsuite/g++.old-deja/g++.other/crash39.C ! 1986207284b ./gcc/testsuite/g++.old-deja/g++.other/crash3.C 2473163715b ./gcc/testsuite/g++.old-deja/g++.other/crash40.C 2559623170b ./gcc/testsuite/g++.old-deja/g++.other/crash41.C 2300001961b ./gcc/testsuite/g++.old-deja/g++.other/crash42.C - 226105322b ./gcc/testsuite/g++.old-deja/g++.other/crash4.C 1657789856b ./gcc/testsuite/g++.old-deja/g++.other/crash5.C - 2889210351b ./gcc/testsuite/g++.old-deja/g++.other/crash60.C 3212679954b ./gcc/testsuite/g++.old-deja/g++.other/crash6.C 3092570108b ./gcc/testsuite/g++.old-deja/g++.other/crash7.C 1968632283b ./gcc/testsuite/g++.old-deja/g++.other/crash8.C 739803606b ./gcc/testsuite/g++.old-deja/g++.other/crash9.C --- 7704,7716 ---- 3888381363b ./gcc/testsuite/g++.old-deja/g++.other/crash37.C 3660059490b ./gcc/testsuite/g++.old-deja/g++.other/crash38.C 465327177b ./gcc/testsuite/g++.old-deja/g++.other/crash39.C ! 226105322b ./gcc/testsuite/g++.old-deja/g++.other/crash4.C 2473163715b ./gcc/testsuite/g++.old-deja/g++.other/crash40.C 2559623170b ./gcc/testsuite/g++.old-deja/g++.other/crash41.C 2300001961b ./gcc/testsuite/g++.old-deja/g++.other/crash42.C 1657789856b ./gcc/testsuite/g++.old-deja/g++.other/crash5.C 3212679954b ./gcc/testsuite/g++.old-deja/g++.other/crash6.C + 2889210351b ./gcc/testsuite/g++.old-deja/g++.other/crash60.C 3092570108b ./gcc/testsuite/g++.old-deja/g++.other/crash7.C 1968632283b ./gcc/testsuite/g++.old-deja/g++.other/crash8.C 739803606b ./gcc/testsuite/g++.old-deja/g++.other/crash9.C *************** *** 10445,10455 **** 4096635328b ./gcc/testsuite/g++.old-deja/g++.other/dll-4.C 4188389053b ./gcc/testsuite/g++.old-deja/g++.other/dll-5.C 2919979689b ./gcc/testsuite/g++.old-deja/g++.other/dll-6.C 18134551b ./gcc/testsuite/g++.old-deja/g++.other/dtor10.C 1164270328b ./gcc/testsuite/g++.old-deja/g++.other/dtor11.C 3251874725b ./gcc/testsuite/g++.old-deja/g++.other/dtor12.C 2995412590b ./gcc/testsuite/g++.old-deja/g++.other/dtor13.C - 1284663345b ./gcc/testsuite/g++.old-deja/g++.other/dtor1.C 19912911b ./gcc/testsuite/g++.old-deja/g++.other/dtor2.C 1972124996b ./gcc/testsuite/g++.old-deja/g++.other/dtor3.C 3858298340b ./gcc/testsuite/g++.old-deja/g++.other/dtor4.C --- 7762,7772 ---- 4096635328b ./gcc/testsuite/g++.old-deja/g++.other/dll-4.C 4188389053b ./gcc/testsuite/g++.old-deja/g++.other/dll-5.C 2919979689b ./gcc/testsuite/g++.old-deja/g++.other/dll-6.C + 1284663345b ./gcc/testsuite/g++.old-deja/g++.other/dtor1.C 18134551b ./gcc/testsuite/g++.old-deja/g++.other/dtor10.C 1164270328b ./gcc/testsuite/g++.old-deja/g++.other/dtor11.C 3251874725b ./gcc/testsuite/g++.old-deja/g++.other/dtor12.C 2995412590b ./gcc/testsuite/g++.old-deja/g++.other/dtor13.C 19912911b ./gcc/testsuite/g++.old-deja/g++.other/dtor2.C 1972124996b ./gcc/testsuite/g++.old-deja/g++.other/dtor3.C 3858298340b ./gcc/testsuite/g++.old-deja/g++.other/dtor4.C *************** *** 10464,10475 **** 771042933b ./gcc/testsuite/g++.old-deja/g++.other/dyncast4.C 3056485598b ./gcc/testsuite/g++.old-deja/g++.other/dyncast5.C 1196348440b ./gcc/testsuite/g++.old-deja/g++.other/dyncast6.C 3203327173b ./gcc/testsuite/g++.old-deja/g++.other/eh1.C 4127184370b ./gcc/testsuite/g++.old-deja/g++.other/eh2.C 3559396844b ./gcc/testsuite/g++.old-deja/g++.other/eh3.C 3143843455b ./gcc/testsuite/g++.old-deja/g++.other/eh4.C 1752543333b ./gcc/testsuite/g++.old-deja/g++.other/eh5.C - 326457279b ./gcc/testsuite/g++.old-deja/g++.other/eh.C 3053308594b ./gcc/testsuite/g++.old-deja/g++.other/elab1.C 3888745390b ./gcc/testsuite/g++.old-deja/g++.other/empty1.C 3170636835b ./gcc/testsuite/g++.old-deja/g++.other/empty2.C --- 7781,7792 ---- 771042933b ./gcc/testsuite/g++.old-deja/g++.other/dyncast4.C 3056485598b ./gcc/testsuite/g++.old-deja/g++.other/dyncast5.C 1196348440b ./gcc/testsuite/g++.old-deja/g++.other/dyncast6.C + 326457279b ./gcc/testsuite/g++.old-deja/g++.other/eh.C 3203327173b ./gcc/testsuite/g++.old-deja/g++.other/eh1.C 4127184370b ./gcc/testsuite/g++.old-deja/g++.other/eh2.C 3559396844b ./gcc/testsuite/g++.old-deja/g++.other/eh3.C 3143843455b ./gcc/testsuite/g++.old-deja/g++.other/eh4.C 1752543333b ./gcc/testsuite/g++.old-deja/g++.other/eh5.C 3053308594b ./gcc/testsuite/g++.old-deja/g++.other/elab1.C 3888745390b ./gcc/testsuite/g++.old-deja/g++.other/empty1.C 3170636835b ./gcc/testsuite/g++.old-deja/g++.other/empty2.C *************** *** 10491,10499 **** 1648602614b ./gcc/testsuite/g++.old-deja/g++.other/fnname1.C 2595576321b ./gcc/testsuite/g++.old-deja/g++.other/for1.C 3948754017b ./gcc/testsuite/g++.old-deja/g++.other/for2.C 1195751396b ./gcc/testsuite/g++.old-deja/g++.other/friend10.C 3233024721b ./gcc/testsuite/g++.old-deja/g++.other/friend11.C - 3153977462b ./gcc/testsuite/g++.old-deja/g++.other/friend1.C 1833376578b ./gcc/testsuite/g++.old-deja/g++.other/friend2.C 1953203540b ./gcc/testsuite/g++.old-deja/g++.other/friend3.C 438287814b ./gcc/testsuite/g++.old-deja/g++.other/friend4.C --- 7808,7816 ---- 1648602614b ./gcc/testsuite/g++.old-deja/g++.other/fnname1.C 2595576321b ./gcc/testsuite/g++.old-deja/g++.other/for1.C 3948754017b ./gcc/testsuite/g++.old-deja/g++.other/for2.C + 3153977462b ./gcc/testsuite/g++.old-deja/g++.other/friend1.C 1195751396b ./gcc/testsuite/g++.old-deja/g++.other/friend10.C 3233024721b ./gcc/testsuite/g++.old-deja/g++.other/friend11.C 1833376578b ./gcc/testsuite/g++.old-deja/g++.other/friend2.C 1953203540b ./gcc/testsuite/g++.old-deja/g++.other/friend3.C 438287814b ./gcc/testsuite/g++.old-deja/g++.other/friend4.C *************** *** 10508,10513 **** --- 7825,7831 ---- 2785798940b ./gcc/testsuite/g++.old-deja/g++.other/goto4.C 2615587703b ./gcc/testsuite/g++.old-deja/g++.other/headers1.C 1685869594b ./gcc/testsuite/g++.old-deja/g++.other/incomplete.C + 927757255b ./gcc/testsuite/g++.old-deja/g++.other/init1.C 1598723950b ./gcc/testsuite/g++.old-deja/g++.other/init10.C 1393596821b ./gcc/testsuite/g++.old-deja/g++.other/init11.C 3918302157b ./gcc/testsuite/g++.old-deja/g++.other/init12.C *************** *** 10516,10522 **** 2091624673b ./gcc/testsuite/g++.old-deja/g++.other/init15.C 1512725790b ./gcc/testsuite/g++.old-deja/g++.other/init16.C 1093306404b ./gcc/testsuite/g++.old-deja/g++.other/init17.C - 927757255b ./gcc/testsuite/g++.old-deja/g++.other/init1.C 2603599454b ./gcc/testsuite/g++.old-deja/g++.other/init2.C 60242679b ./gcc/testsuite/g++.old-deja/g++.other/init3.C 1928831477b ./gcc/testsuite/g++.old-deja/g++.other/init4.C --- 7834,7839 ---- *************** *** 10526,10531 **** --- 7843,7849 ---- 1098289890b ./gcc/testsuite/g++.old-deja/g++.other/init8.C 557927133b ./gcc/testsuite/g++.old-deja/g++.other/init9.C 1778823150b ./gcc/testsuite/g++.old-deja/g++.other/initstring.C + 2434780038b ./gcc/testsuite/g++.old-deja/g++.other/inline1.C 1695544611b ./gcc/testsuite/g++.old-deja/g++.other/inline10.C 3270512395b ./gcc/testsuite/g++.old-deja/g++.other/inline11.C 1325890431b ./gcc/testsuite/g++.old-deja/g++.other/inline12.C *************** *** 10536,10546 **** 1438985095b ./gcc/testsuite/g++.old-deja/g++.other/inline17.C 938935758b ./gcc/testsuite/g++.old-deja/g++.other/inline18.C 3672842965b ./gcc/testsuite/g++.old-deja/g++.other/inline19.C ! 2434780038b ./gcc/testsuite/g++.old-deja/g++.other/inline1.C 1204135970b ./gcc/testsuite/g++.old-deja/g++.other/inline20.C 1800807796b ./gcc/testsuite/g++.old-deja/g++.other/inline21.C 3956374226b ./gcc/testsuite/g++.old-deja/g++.other/inline23.C - 2138039153b ./gcc/testsuite/g++.old-deja/g++.other/inline2.C 1052546588b ./gcc/testsuite/g++.old-deja/g++.other/inline3.C 56787941b ./gcc/testsuite/g++.old-deja/g++.other/inline4.C 3486429137b ./gcc/testsuite/g++.old-deja/g++.other/inline5.C --- 7854,7863 ---- 1438985095b ./gcc/testsuite/g++.old-deja/g++.other/inline17.C 938935758b ./gcc/testsuite/g++.old-deja/g++.other/inline18.C 3672842965b ./gcc/testsuite/g++.old-deja/g++.other/inline19.C ! 2138039153b ./gcc/testsuite/g++.old-deja/g++.other/inline2.C 1204135970b ./gcc/testsuite/g++.old-deja/g++.other/inline20.C 1800807796b ./gcc/testsuite/g++.old-deja/g++.other/inline21.C 3956374226b ./gcc/testsuite/g++.old-deja/g++.other/inline23.C 1052546588b ./gcc/testsuite/g++.old-deja/g++.other/inline3.C 56787941b ./gcc/testsuite/g++.old-deja/g++.other/inline4.C 3486429137b ./gcc/testsuite/g++.old-deja/g++.other/inline5.C *************** *** 10562,10572 **** 617990355b ./gcc/testsuite/g++.old-deja/g++.other/linkage5.C 3257516835b ./gcc/testsuite/g++.old-deja/g++.other/linkage6.C 1235107285b ./gcc/testsuite/g++.old-deja/g++.other/linkage7.C 577632193b ./gcc/testsuite/g++.old-deja/g++.other/local1.C 88188461b ./gcc/testsuite/g++.old-deja/g++.other/local2.C 2840919735b ./gcc/testsuite/g++.old-deja/g++.other/local3.C 1540707900b ./gcc/testsuite/g++.old-deja/g++.other/local4.C ! 3682661614b ./gcc/testsuite/g++.old-deja/g++.other/local-alloc1.C 1737066412b ./gcc/testsuite/g++.old-deja/g++.other/lookup10.C 1037102268b ./gcc/testsuite/g++.old-deja/g++.other/lookup11.C 245062181b ./gcc/testsuite/g++.old-deja/g++.other/lookup12.C --- 7879,7890 ---- 617990355b ./gcc/testsuite/g++.old-deja/g++.other/linkage5.C 3257516835b ./gcc/testsuite/g++.old-deja/g++.other/linkage6.C 1235107285b ./gcc/testsuite/g++.old-deja/g++.other/linkage7.C + 3682661614b ./gcc/testsuite/g++.old-deja/g++.other/local-alloc1.C 577632193b ./gcc/testsuite/g++.old-deja/g++.other/local1.C 88188461b ./gcc/testsuite/g++.old-deja/g++.other/local2.C 2840919735b ./gcc/testsuite/g++.old-deja/g++.other/local3.C 1540707900b ./gcc/testsuite/g++.old-deja/g++.other/local4.C ! 2269210126b ./gcc/testsuite/g++.old-deja/g++.other/lookup1.C 1737066412b ./gcc/testsuite/g++.old-deja/g++.other/lookup10.C 1037102268b ./gcc/testsuite/g++.old-deja/g++.other/lookup11.C 245062181b ./gcc/testsuite/g++.old-deja/g++.other/lookup12.C *************** *** 10577,10589 **** 697721056b ./gcc/testsuite/g++.old-deja/g++.other/lookup17.C 815912902b ./gcc/testsuite/g++.old-deja/g++.other/lookup18.C 280785492b ./gcc/testsuite/g++.old-deja/g++.other/lookup19.C ! 2269210126b ./gcc/testsuite/g++.old-deja/g++.other/lookup1.C 436406477b ./gcc/testsuite/g++.old-deja/g++.other/lookup20.C 1209560984b ./gcc/testsuite/g++.old-deja/g++.other/lookup21.C 614093465b ./gcc/testsuite/g++.old-deja/g++.other/lookup22.C 2433482316b ./gcc/testsuite/g++.old-deja/g++.other/lookup23.C 1637417916b ./gcc/testsuite/g++.old-deja/g++.other/lookup24.C - 3765524406b ./gcc/testsuite/g++.old-deja/g++.other/lookup2.C 2344878047b ./gcc/testsuite/g++.old-deja/g++.other/lookup3.C 1023689233b ./gcc/testsuite/g++.old-deja/g++.other/lookup4.C 2548363938b ./gcc/testsuite/g++.old-deja/g++.other/lookup5.C --- 7895,7906 ---- 697721056b ./gcc/testsuite/g++.old-deja/g++.other/lookup17.C 815912902b ./gcc/testsuite/g++.old-deja/g++.other/lookup18.C 280785492b ./gcc/testsuite/g++.old-deja/g++.other/lookup19.C ! 3765524406b ./gcc/testsuite/g++.old-deja/g++.other/lookup2.C 436406477b ./gcc/testsuite/g++.old-deja/g++.other/lookup20.C 1209560984b ./gcc/testsuite/g++.old-deja/g++.other/lookup21.C 614093465b ./gcc/testsuite/g++.old-deja/g++.other/lookup22.C 2433482316b ./gcc/testsuite/g++.old-deja/g++.other/lookup23.C 1637417916b ./gcc/testsuite/g++.old-deja/g++.other/lookup24.C 2344878047b ./gcc/testsuite/g++.old-deja/g++.other/lookup3.C 1023689233b ./gcc/testsuite/g++.old-deja/g++.other/lookup4.C 2548363938b ./gcc/testsuite/g++.old-deja/g++.other/lookup5.C *************** *** 10603,10615 **** 4217851482b ./gcc/testsuite/g++.old-deja/g++.other/nested2.C 2800890661b ./gcc/testsuite/g++.old-deja/g++.other/nested3.C 3749047676b ./gcc/testsuite/g++.old-deja/g++.other/nested4.C 2899415960b ./gcc/testsuite/g++.old-deja/g++.other/new2.C 1176720819b ./gcc/testsuite/g++.old-deja/g++.other/new3.C 2825689270b ./gcc/testsuite/g++.old-deja/g++.other/new4.C 850194097b ./gcc/testsuite/g++.old-deja/g++.other/new5.C 2266969204b ./gcc/testsuite/g++.old-deja/g++.other/new6.C 2661895613b ./gcc/testsuite/g++.old-deja/g++.other/new7.C - 2658114065b ./gcc/testsuite/g++.old-deja/g++.other/new.C 4142273200b ./gcc/testsuite/g++.old-deja/g++.other/null1.C 2086727759b ./gcc/testsuite/g++.old-deja/g++.other/null2.C 2676296478b ./gcc/testsuite/g++.old-deja/g++.other/null3.C --- 7920,7932 ---- 4217851482b ./gcc/testsuite/g++.old-deja/g++.other/nested2.C 2800890661b ./gcc/testsuite/g++.old-deja/g++.other/nested3.C 3749047676b ./gcc/testsuite/g++.old-deja/g++.other/nested4.C + 2658114065b ./gcc/testsuite/g++.old-deja/g++.other/new.C 2899415960b ./gcc/testsuite/g++.old-deja/g++.other/new2.C 1176720819b ./gcc/testsuite/g++.old-deja/g++.other/new3.C 2825689270b ./gcc/testsuite/g++.old-deja/g++.other/new4.C 850194097b ./gcc/testsuite/g++.old-deja/g++.other/new5.C 2266969204b ./gcc/testsuite/g++.old-deja/g++.other/new6.C 2661895613b ./gcc/testsuite/g++.old-deja/g++.other/new7.C 4142273200b ./gcc/testsuite/g++.old-deja/g++.other/null1.C 2086727759b ./gcc/testsuite/g++.old-deja/g++.other/null2.C 2676296478b ./gcc/testsuite/g++.old-deja/g++.other/null3.C *************** *** 10622,10633 **** 3940439065b ./gcc/testsuite/g++.old-deja/g++.other/optimize4.C 3254521143b ./gcc/testsuite/g++.old-deja/g++.other/overcnv1.C 19283185b ./gcc/testsuite/g++.old-deja/g++.other/overcnv2.C 2127838940b ./gcc/testsuite/g++.old-deja/g++.other/overload10.C 3726065244b ./gcc/testsuite/g++.old-deja/g++.other/overload11.C 759039694b ./gcc/testsuite/g++.old-deja/g++.other/overload12.C 3493214783b ./gcc/testsuite/g++.old-deja/g++.other/overload13.C 212629594b ./gcc/testsuite/g++.old-deja/g++.other/overload14.C - 2161968240b ./gcc/testsuite/g++.old-deja/g++.other/overload1.C 1905644607b ./gcc/testsuite/g++.old-deja/g++.other/overload2.C 3260262987b ./gcc/testsuite/g++.old-deja/g++.other/overload3.C 2754535673b ./gcc/testsuite/g++.old-deja/g++.other/overload4.C --- 7939,7950 ---- 3940439065b ./gcc/testsuite/g++.old-deja/g++.other/optimize4.C 3254521143b ./gcc/testsuite/g++.old-deja/g++.other/overcnv1.C 19283185b ./gcc/testsuite/g++.old-deja/g++.other/overcnv2.C + 2161968240b ./gcc/testsuite/g++.old-deja/g++.other/overload1.C 2127838940b ./gcc/testsuite/g++.old-deja/g++.other/overload10.C 3726065244b ./gcc/testsuite/g++.old-deja/g++.other/overload11.C 759039694b ./gcc/testsuite/g++.old-deja/g++.other/overload12.C 3493214783b ./gcc/testsuite/g++.old-deja/g++.other/overload13.C 212629594b ./gcc/testsuite/g++.old-deja/g++.other/overload14.C 1905644607b ./gcc/testsuite/g++.old-deja/g++.other/overload2.C 3260262987b ./gcc/testsuite/g++.old-deja/g++.other/overload3.C 2754535673b ./gcc/testsuite/g++.old-deja/g++.other/overload4.C *************** *** 10650,10657 **** 2326771429b ./gcc/testsuite/g++.old-deja/g++.other/pmf7.C 1021148727b ./gcc/testsuite/g++.old-deja/g++.other/pod1.C 3266716729b ./gcc/testsuite/g++.old-deja/g++.other/printf1.C - 1700199637b ./gcc/testsuite/g++.old-deja/g++.other/ptrmem10.C 2987181013b ./gcc/testsuite/g++.old-deja/g++.other/ptrmem1.C 1412545442b ./gcc/testsuite/g++.old-deja/g++.other/ptrmem2.C 104810161b ./gcc/testsuite/g++.old-deja/g++.other/ptrmem3.C 516033591b ./gcc/testsuite/g++.old-deja/g++.other/ptrmem4.C --- 7967,7974 ---- 2326771429b ./gcc/testsuite/g++.old-deja/g++.other/pmf7.C 1021148727b ./gcc/testsuite/g++.old-deja/g++.other/pod1.C 3266716729b ./gcc/testsuite/g++.old-deja/g++.other/printf1.C 2987181013b ./gcc/testsuite/g++.old-deja/g++.other/ptrmem1.C + 1700199637b ./gcc/testsuite/g++.old-deja/g++.other/ptrmem10.C 1412545442b ./gcc/testsuite/g++.old-deja/g++.other/ptrmem2.C 104810161b ./gcc/testsuite/g++.old-deja/g++.other/ptrmem3.C 516033591b ./gcc/testsuite/g++.old-deja/g++.other/ptrmem4.C *************** *** 10695,10700 **** --- 8012,8018 ---- 791384214b ./gcc/testsuite/g++.old-deja/g++.other/sizeof3.C 3011566538b ./gcc/testsuite/g++.old-deja/g++.other/sizeof4.C 2613402158b ./gcc/testsuite/g++.old-deja/g++.other/sizeof5.C + 730081105b ./gcc/testsuite/g++.old-deja/g++.other/static1.C 3522079581b ./gcc/testsuite/g++.old-deja/g++.other/static10.C 2480249422b ./gcc/testsuite/g++.old-deja/g++.other/static11.C 1625548421b ./gcc/testsuite/g++.old-deja/g++.other/static12.C *************** *** 10702,10710 **** 938771596b ./gcc/testsuite/g++.old-deja/g++.other/static14.C 2968457282b ./gcc/testsuite/g++.old-deja/g++.other/static15.C 254220227b ./gcc/testsuite/g++.old-deja/g++.other/static16.C - 730081105b ./gcc/testsuite/g++.old-deja/g++.other/static1.C - 400806999b ./gcc/testsuite/g++.old-deja/g++.other/static20.C 1208581965b ./gcc/testsuite/g++.old-deja/g++.other/static2.C 1822341199b ./gcc/testsuite/g++.old-deja/g++.other/static3.C 3669301779b ./gcc/testsuite/g++.old-deja/g++.other/static4.C 4026472462b ./gcc/testsuite/g++.old-deja/g++.other/static5.C --- 8020,8027 ---- 938771596b ./gcc/testsuite/g++.old-deja/g++.other/static14.C 2968457282b ./gcc/testsuite/g++.old-deja/g++.other/static15.C 254220227b ./gcc/testsuite/g++.old-deja/g++.other/static16.C 1208581965b ./gcc/testsuite/g++.old-deja/g++.other/static2.C + 400806999b ./gcc/testsuite/g++.old-deja/g++.other/static20.C 1822341199b ./gcc/testsuite/g++.old-deja/g++.other/static3.C 3669301779b ./gcc/testsuite/g++.old-deja/g++.other/static4.C 4026472462b ./gcc/testsuite/g++.old-deja/g++.other/static5.C *************** *** 10763,10771 **** 1361331299b ./gcc/testsuite/g++.old-deja/g++.other/vbase3.C 2014677415b ./gcc/testsuite/g++.old-deja/g++.other/vbase4.C 891656248b ./gcc/testsuite/g++.old-deja/g++.other/vbase5.C 1779651648b ./gcc/testsuite/g++.old-deja/g++.other/virtual10.C 3755735707b ./gcc/testsuite/g++.old-deja/g++.other/virtual11.C - 1164439917b ./gcc/testsuite/g++.old-deja/g++.other/virtual1.C 1816448166b ./gcc/testsuite/g++.old-deja/g++.other/virtual2.C 3809279113b ./gcc/testsuite/g++.old-deja/g++.other/virtual3.C 2374162758b ./gcc/testsuite/g++.old-deja/g++.other/virtual4.C --- 8080,8088 ---- 1361331299b ./gcc/testsuite/g++.old-deja/g++.other/vbase3.C 2014677415b ./gcc/testsuite/g++.old-deja/g++.other/vbase4.C 891656248b ./gcc/testsuite/g++.old-deja/g++.other/vbase5.C + 1164439917b ./gcc/testsuite/g++.old-deja/g++.other/virtual1.C 1779651648b ./gcc/testsuite/g++.old-deja/g++.other/virtual10.C 3755735707b ./gcc/testsuite/g++.old-deja/g++.other/virtual11.C 1816448166b ./gcc/testsuite/g++.old-deja/g++.other/virtual2.C 3809279113b ./gcc/testsuite/g++.old-deja/g++.other/virtual3.C 2374162758b ./gcc/testsuite/g++.old-deja/g++.other/virtual4.C *************** *** 10810,10815 **** --- 8127,8133 ---- 177622420b ./gcc/testsuite/g++.old-deja/g++.pt/conv2.C 2497086818b ./gcc/testsuite/g++.old-deja/g++.pt/conv3.C 971692590b ./gcc/testsuite/g++.old-deja/g++.pt/copy1.C + 552860807b ./gcc/testsuite/g++.old-deja/g++.pt/crash1.C 3035040424b ./gcc/testsuite/g++.old-deja/g++.pt/crash10.C 4238033897b ./gcc/testsuite/g++.old-deja/g++.pt/crash11.C 1342559330b ./gcc/testsuite/g++.old-deja/g++.pt/crash12.C *************** *** 10820,10826 **** 3806215227b ./gcc/testsuite/g++.old-deja/g++.pt/crash17.C 2468320011b ./gcc/testsuite/g++.old-deja/g++.pt/crash18.C 2448971391b ./gcc/testsuite/g++.old-deja/g++.pt/crash19.C ! 552860807b ./gcc/testsuite/g++.old-deja/g++.pt/crash1.C 2920226417b ./gcc/testsuite/g++.old-deja/g++.pt/crash20.C 2626609357b ./gcc/testsuite/g++.old-deja/g++.pt/crash21.C 2675166712b ./gcc/testsuite/g++.old-deja/g++.pt/crash22.C --- 8138,8144 ---- 3806215227b ./gcc/testsuite/g++.old-deja/g++.pt/crash17.C 2468320011b ./gcc/testsuite/g++.old-deja/g++.pt/crash18.C 2448971391b ./gcc/testsuite/g++.old-deja/g++.pt/crash19.C ! 2796245436b ./gcc/testsuite/g++.old-deja/g++.pt/crash2.C 2920226417b ./gcc/testsuite/g++.old-deja/g++.pt/crash20.C 2626609357b ./gcc/testsuite/g++.old-deja/g++.pt/crash21.C 2675166712b ./gcc/testsuite/g++.old-deja/g++.pt/crash22.C *************** *** 10831,10837 **** 3949680625b ./gcc/testsuite/g++.old-deja/g++.pt/crash27.C 1024790123b ./gcc/testsuite/g++.old-deja/g++.pt/crash28.C 467456086b ./gcc/testsuite/g++.old-deja/g++.pt/crash29.C ! 2796245436b ./gcc/testsuite/g++.old-deja/g++.pt/crash2.C 2824092513b ./gcc/testsuite/g++.old-deja/g++.pt/crash30.C 802398069b ./gcc/testsuite/g++.old-deja/g++.pt/crash31.C 3246968168b ./gcc/testsuite/g++.old-deja/g++.pt/crash32.C --- 8149,8155 ---- 3949680625b ./gcc/testsuite/g++.old-deja/g++.pt/crash27.C 1024790123b ./gcc/testsuite/g++.old-deja/g++.pt/crash28.C 467456086b ./gcc/testsuite/g++.old-deja/g++.pt/crash29.C ! 2974624163b ./gcc/testsuite/g++.old-deja/g++.pt/crash3.C 2824092513b ./gcc/testsuite/g++.old-deja/g++.pt/crash30.C 802398069b ./gcc/testsuite/g++.old-deja/g++.pt/crash31.C 3246968168b ./gcc/testsuite/g++.old-deja/g++.pt/crash32.C *************** *** 10842,10848 **** 3084210338b ./gcc/testsuite/g++.old-deja/g++.pt/crash37.C 54189209b ./gcc/testsuite/g++.old-deja/g++.pt/crash38.C 322608397b ./gcc/testsuite/g++.old-deja/g++.pt/crash39.C ! 2974624163b ./gcc/testsuite/g++.old-deja/g++.pt/crash3.C 3347789237b ./gcc/testsuite/g++.old-deja/g++.pt/crash40.C 447454995b ./gcc/testsuite/g++.old-deja/g++.pt/crash41.C 4041430549b ./gcc/testsuite/g++.old-deja/g++.pt/crash42.C --- 8160,8166 ---- 3084210338b ./gcc/testsuite/g++.old-deja/g++.pt/crash37.C 54189209b ./gcc/testsuite/g++.old-deja/g++.pt/crash38.C 322608397b ./gcc/testsuite/g++.old-deja/g++.pt/crash39.C ! 2620241700b ./gcc/testsuite/g++.old-deja/g++.pt/crash4.C 3347789237b ./gcc/testsuite/g++.old-deja/g++.pt/crash40.C 447454995b ./gcc/testsuite/g++.old-deja/g++.pt/crash41.C 4041430549b ./gcc/testsuite/g++.old-deja/g++.pt/crash42.C *************** *** 10853,10859 **** 3755777163b ./gcc/testsuite/g++.old-deja/g++.pt/crash47.C 3545711527b ./gcc/testsuite/g++.old-deja/g++.pt/crash48.C 248168869b ./gcc/testsuite/g++.old-deja/g++.pt/crash49.C ! 2620241700b ./gcc/testsuite/g++.old-deja/g++.pt/crash4.C 803889593b ./gcc/testsuite/g++.old-deja/g++.pt/crash50.C 3389049910b ./gcc/testsuite/g++.old-deja/g++.pt/crash51.C 4194603956b ./gcc/testsuite/g++.old-deja/g++.pt/crash52.C --- 8171,8177 ---- 3755777163b ./gcc/testsuite/g++.old-deja/g++.pt/crash47.C 3545711527b ./gcc/testsuite/g++.old-deja/g++.pt/crash48.C 248168869b ./gcc/testsuite/g++.old-deja/g++.pt/crash49.C ! 2444045960b ./gcc/testsuite/g++.old-deja/g++.pt/crash5.C 803889593b ./gcc/testsuite/g++.old-deja/g++.pt/crash50.C 3389049910b ./gcc/testsuite/g++.old-deja/g++.pt/crash51.C 4194603956b ./gcc/testsuite/g++.old-deja/g++.pt/crash52.C *************** *** 10864,10870 **** 2303343499b ./gcc/testsuite/g++.old-deja/g++.pt/crash57.C 4236801680b ./gcc/testsuite/g++.old-deja/g++.pt/crash58.C 2789225927b ./gcc/testsuite/g++.old-deja/g++.pt/crash59.C ! 2444045960b ./gcc/testsuite/g++.old-deja/g++.pt/crash5.C 1374908702b ./gcc/testsuite/g++.old-deja/g++.pt/crash60.C 3795952345b ./gcc/testsuite/g++.old-deja/g++.pt/crash61.C 1665773703b ./gcc/testsuite/g++.old-deja/g++.pt/crash62.C --- 8182,8188 ---- 2303343499b ./gcc/testsuite/g++.old-deja/g++.pt/crash57.C 4236801680b ./gcc/testsuite/g++.old-deja/g++.pt/crash58.C 2789225927b ./gcc/testsuite/g++.old-deja/g++.pt/crash59.C ! 1541566419b ./gcc/testsuite/g++.old-deja/g++.pt/crash6.C 1374908702b ./gcc/testsuite/g++.old-deja/g++.pt/crash60.C 3795952345b ./gcc/testsuite/g++.old-deja/g++.pt/crash61.C 1665773703b ./gcc/testsuite/g++.old-deja/g++.pt/crash62.C *************** *** 10874,10880 **** 2950875437b ./gcc/testsuite/g++.old-deja/g++.pt/crash66.C 1445781996b ./gcc/testsuite/g++.old-deja/g++.pt/crash67.C 2591611103b ./gcc/testsuite/g++.old-deja/g++.pt/crash68.C - 1541566419b ./gcc/testsuite/g++.old-deja/g++.pt/crash6.C 3887562144b ./gcc/testsuite/g++.old-deja/g++.pt/crash7.C 423406852b ./gcc/testsuite/g++.old-deja/g++.pt/crash8.C 2256920146b ./gcc/testsuite/g++.old-deja/g++.pt/crash9.C --- 8192,8197 ---- *************** *** 10892,10897 **** --- 8209,8215 ---- 3984395519b ./gcc/testsuite/g++.old-deja/g++.pt/deduct5.C 606334760b ./gcc/testsuite/g++.old-deja/g++.pt/deduct6.C 340374206b ./gcc/testsuite/g++.old-deja/g++.pt/deduct7.C + 2858847781b ./gcc/testsuite/g++.old-deja/g++.pt/defarg.C 940625563b ./gcc/testsuite/g++.old-deja/g++.pt/defarg10.C 3439579652b ./gcc/testsuite/g++.old-deja/g++.pt/defarg11.C 3231347060b ./gcc/testsuite/g++.old-deja/g++.pt/defarg12.C *************** *** 10905,10919 **** 3989235169b ./gcc/testsuite/g++.old-deja/g++.pt/defarg7.C 1989729882b ./gcc/testsuite/g++.old-deja/g++.pt/defarg8.C 3350438012b ./gcc/testsuite/g++.old-deja/g++.pt/defarg9.C - 2858847781b ./gcc/testsuite/g++.old-deja/g++.pt/defarg.C 1222848640b ./gcc/testsuite/g++.old-deja/g++.pt/derived1.C 4047438471b ./gcc/testsuite/g++.old-deja/g++.pt/derived2.C 1251762810b ./gcc/testsuite/g++.old-deja/g++.pt/derived3.C 3987198593b ./gcc/testsuite/g++.old-deja/g++.pt/dynarray.C 2287973117b ./gcc/testsuite/g++.old-deja/g++.pt/ehspec1.C 2070134968b ./gcc/testsuite/g++.old-deja/g++.pt/eichin01a.C 3522936035b ./gcc/testsuite/g++.old-deja/g++.pt/eichin01b.C ! 104775079b ./gcc/testsuite/g++.old-deja/g++.pt/eichin01.C 3830592816b ./gcc/testsuite/g++.old-deja/g++.pt/enum10.C 3760628339b ./gcc/testsuite/g++.old-deja/g++.pt/enum11.C 822927832b ./gcc/testsuite/g++.old-deja/g++.pt/enum12.C --- 8223,8237 ---- 3989235169b ./gcc/testsuite/g++.old-deja/g++.pt/defarg7.C 1989729882b ./gcc/testsuite/g++.old-deja/g++.pt/defarg8.C 3350438012b ./gcc/testsuite/g++.old-deja/g++.pt/defarg9.C 1222848640b ./gcc/testsuite/g++.old-deja/g++.pt/derived1.C 4047438471b ./gcc/testsuite/g++.old-deja/g++.pt/derived2.C 1251762810b ./gcc/testsuite/g++.old-deja/g++.pt/derived3.C 3987198593b ./gcc/testsuite/g++.old-deja/g++.pt/dynarray.C 2287973117b ./gcc/testsuite/g++.old-deja/g++.pt/ehspec1.C + 104775079b ./gcc/testsuite/g++.old-deja/g++.pt/eichin01.C 2070134968b ./gcc/testsuite/g++.old-deja/g++.pt/eichin01a.C 3522936035b ./gcc/testsuite/g++.old-deja/g++.pt/eichin01b.C ! 1760960609b ./gcc/testsuite/g++.old-deja/g++.pt/enum.C 3830592816b ./gcc/testsuite/g++.old-deja/g++.pt/enum10.C 3760628339b ./gcc/testsuite/g++.old-deja/g++.pt/enum11.C 822927832b ./gcc/testsuite/g++.old-deja/g++.pt/enum12.C *************** *** 10927,10937 **** 1918437107b ./gcc/testsuite/g++.old-deja/g++.pt/enum7.C 1945876041b ./gcc/testsuite/g++.old-deja/g++.pt/enum8.C 3328823063b ./gcc/testsuite/g++.old-deja/g++.pt/enum9.C - 1760960609b ./gcc/testsuite/g++.old-deja/g++.pt/enum.C 1804107123b ./gcc/testsuite/g++.old-deja/g++.pt/error1.C 2760448470b ./gcc/testsuite/g++.old-deja/g++.pt/error2.C 1691206603b ./gcc/testsuite/g++.old-deja/g++.pt/error3.C 273875566b ./gcc/testsuite/g++.old-deja/g++.pt/explarg1.C 3406944984b ./gcc/testsuite/g++.old-deja/g++.pt/explicit10.C 1528071887b ./gcc/testsuite/g++.old-deja/g++.pt/explicit11.C 3195577006b ./gcc/testsuite/g++.old-deja/g++.pt/explicit12.C --- 8245,8255 ---- 1918437107b ./gcc/testsuite/g++.old-deja/g++.pt/enum7.C 1945876041b ./gcc/testsuite/g++.old-deja/g++.pt/enum8.C 3328823063b ./gcc/testsuite/g++.old-deja/g++.pt/enum9.C 1804107123b ./gcc/testsuite/g++.old-deja/g++.pt/error1.C 2760448470b ./gcc/testsuite/g++.old-deja/g++.pt/error2.C 1691206603b ./gcc/testsuite/g++.old-deja/g++.pt/error3.C 273875566b ./gcc/testsuite/g++.old-deja/g++.pt/explarg1.C + 2454708693b ./gcc/testsuite/g++.old-deja/g++.pt/explicit1.C 3406944984b ./gcc/testsuite/g++.old-deja/g++.pt/explicit10.C 1528071887b ./gcc/testsuite/g++.old-deja/g++.pt/explicit11.C 3195577006b ./gcc/testsuite/g++.old-deja/g++.pt/explicit12.C *************** *** 10942,10948 **** 3929356898b ./gcc/testsuite/g++.old-deja/g++.pt/explicit17.C 2998496732b ./gcc/testsuite/g++.old-deja/g++.pt/explicit18.C 114780192b ./gcc/testsuite/g++.old-deja/g++.pt/explicit19.C ! 2454708693b ./gcc/testsuite/g++.old-deja/g++.pt/explicit1.C 238030727b ./gcc/testsuite/g++.old-deja/g++.pt/explicit20.C 2757073081b ./gcc/testsuite/g++.old-deja/g++.pt/explicit21.C 1964200215b ./gcc/testsuite/g++.old-deja/g++.pt/explicit22.C --- 8260,8266 ---- 3929356898b ./gcc/testsuite/g++.old-deja/g++.pt/explicit17.C 2998496732b ./gcc/testsuite/g++.old-deja/g++.pt/explicit18.C 114780192b ./gcc/testsuite/g++.old-deja/g++.pt/explicit19.C ! 3142420592b ./gcc/testsuite/g++.old-deja/g++.pt/explicit2.C 238030727b ./gcc/testsuite/g++.old-deja/g++.pt/explicit20.C 2757073081b ./gcc/testsuite/g++.old-deja/g++.pt/explicit21.C 1964200215b ./gcc/testsuite/g++.old-deja/g++.pt/explicit22.C *************** *** 10953,10959 **** 460921353b ./gcc/testsuite/g++.old-deja/g++.pt/explicit27.C 854667679b ./gcc/testsuite/g++.old-deja/g++.pt/explicit28.C 4066092212b ./gcc/testsuite/g++.old-deja/g++.pt/explicit29.C ! 3142420592b ./gcc/testsuite/g++.old-deja/g++.pt/explicit2.C 470577039b ./gcc/testsuite/g++.old-deja/g++.pt/explicit30.C 1628118551b ./gcc/testsuite/g++.old-deja/g++.pt/explicit31.C 2552821833b ./gcc/testsuite/g++.old-deja/g++.pt/explicit32.C --- 8271,8277 ---- 460921353b ./gcc/testsuite/g++.old-deja/g++.pt/explicit27.C 854667679b ./gcc/testsuite/g++.old-deja/g++.pt/explicit28.C 4066092212b ./gcc/testsuite/g++.old-deja/g++.pt/explicit29.C ! 4211740392b ./gcc/testsuite/g++.old-deja/g++.pt/explicit3.C 470577039b ./gcc/testsuite/g++.old-deja/g++.pt/explicit30.C 1628118551b ./gcc/testsuite/g++.old-deja/g++.pt/explicit31.C 2552821833b ./gcc/testsuite/g++.old-deja/g++.pt/explicit32.C *************** *** 10964,10975 **** 4009959133b ./gcc/testsuite/g++.old-deja/g++.pt/explicit37.C 3750063865b ./gcc/testsuite/g++.old-deja/g++.pt/explicit38.C 921580635b ./gcc/testsuite/g++.old-deja/g++.pt/explicit39.C ! 4211740392b ./gcc/testsuite/g++.old-deja/g++.pt/explicit3.C 492617767b ./gcc/testsuite/g++.old-deja/g++.pt/explicit40.C 3845938453b ./gcc/testsuite/g++.old-deja/g++.pt/explicit41.C 1186034051b ./gcc/testsuite/g++.old-deja/g++.pt/explicit42.C 3636286206b ./gcc/testsuite/g++.old-deja/g++.pt/explicit43.C ! 4095060524b ./gcc/testsuite/g++.old-deja/g++.pt/explicit4.C 598873974b ./gcc/testsuite/g++.old-deja/g++.pt/explicit50.C 442258121b ./gcc/testsuite/g++.old-deja/g++.pt/explicit51.C 2381854829b ./gcc/testsuite/g++.old-deja/g++.pt/explicit52.C --- 8282,8293 ---- 4009959133b ./gcc/testsuite/g++.old-deja/g++.pt/explicit37.C 3750063865b ./gcc/testsuite/g++.old-deja/g++.pt/explicit38.C 921580635b ./gcc/testsuite/g++.old-deja/g++.pt/explicit39.C ! 4095060524b ./gcc/testsuite/g++.old-deja/g++.pt/explicit4.C 492617767b ./gcc/testsuite/g++.old-deja/g++.pt/explicit40.C 3845938453b ./gcc/testsuite/g++.old-deja/g++.pt/explicit41.C 1186034051b ./gcc/testsuite/g++.old-deja/g++.pt/explicit42.C 3636286206b ./gcc/testsuite/g++.old-deja/g++.pt/explicit43.C ! 2944430939b ./gcc/testsuite/g++.old-deja/g++.pt/explicit5.C 598873974b ./gcc/testsuite/g++.old-deja/g++.pt/explicit50.C 442258121b ./gcc/testsuite/g++.old-deja/g++.pt/explicit51.C 2381854829b ./gcc/testsuite/g++.old-deja/g++.pt/explicit52.C *************** *** 10980,10986 **** 2105743169b ./gcc/testsuite/g++.old-deja/g++.pt/explicit57.C 138392149b ./gcc/testsuite/g++.old-deja/g++.pt/explicit58.C 3072912940b ./gcc/testsuite/g++.old-deja/g++.pt/explicit59.C ! 2944430939b ./gcc/testsuite/g++.old-deja/g++.pt/explicit5.C 1115714633b ./gcc/testsuite/g++.old-deja/g++.pt/explicit60.C 3490613258b ./gcc/testsuite/g++.old-deja/g++.pt/explicit61.C 2630908446b ./gcc/testsuite/g++.old-deja/g++.pt/explicit62.C --- 8298,8304 ---- 2105743169b ./gcc/testsuite/g++.old-deja/g++.pt/explicit57.C 138392149b ./gcc/testsuite/g++.old-deja/g++.pt/explicit58.C 3072912940b ./gcc/testsuite/g++.old-deja/g++.pt/explicit59.C ! 1140210865b ./gcc/testsuite/g++.old-deja/g++.pt/explicit6.C 1115714633b ./gcc/testsuite/g++.old-deja/g++.pt/explicit60.C 3490613258b ./gcc/testsuite/g++.old-deja/g++.pt/explicit61.C 2630908446b ./gcc/testsuite/g++.old-deja/g++.pt/explicit62.C *************** *** 10991,10997 **** 2017968194b ./gcc/testsuite/g++.old-deja/g++.pt/explicit67.C 2468743553b ./gcc/testsuite/g++.old-deja/g++.pt/explicit68.C 232590105b ./gcc/testsuite/g++.old-deja/g++.pt/explicit69.C - 1140210865b ./gcc/testsuite/g++.old-deja/g++.pt/explicit6.C 598155740b ./gcc/testsuite/g++.old-deja/g++.pt/explicit70.C 734055097b ./gcc/testsuite/g++.old-deja/g++.pt/explicit71.C 3681260211b ./gcc/testsuite/g++.old-deja/g++.pt/explicit72.C --- 8309,8314 ---- *************** *** 11002,11012 **** 2721209b ./gcc/testsuite/g++.old-deja/g++.pt/explicit77.C 2546202913b ./gcc/testsuite/g++.old-deja/g++.pt/explicit78.C 2960594790b ./gcc/testsuite/g++.old-deja/g++.pt/explicit79.C 3985776178b ./gcc/testsuite/g++.old-deja/g++.pt/explicit80.C 1821121835b ./gcc/testsuite/g++.old-deja/g++.pt/explicit81.C 3301548077b ./gcc/testsuite/g++.old-deja/g++.pt/explicit82.C 1885670533b ./gcc/testsuite/g++.old-deja/g++.pt/explicit83.C - 1495453328b ./gcc/testsuite/g++.old-deja/g++.pt/explicit8.C 3419948260b ./gcc/testsuite/g++.old-deja/g++.pt/explicit9.C 662598850b ./gcc/testsuite/g++.old-deja/g++.pt/export1.C 1515995682b ./gcc/testsuite/g++.old-deja/g++.pt/expr1.C --- 8319,8329 ---- 2721209b ./gcc/testsuite/g++.old-deja/g++.pt/explicit77.C 2546202913b ./gcc/testsuite/g++.old-deja/g++.pt/explicit78.C 2960594790b ./gcc/testsuite/g++.old-deja/g++.pt/explicit79.C + 1495453328b ./gcc/testsuite/g++.old-deja/g++.pt/explicit8.C 3985776178b ./gcc/testsuite/g++.old-deja/g++.pt/explicit80.C 1821121835b ./gcc/testsuite/g++.old-deja/g++.pt/explicit81.C 3301548077b ./gcc/testsuite/g++.old-deja/g++.pt/explicit82.C 1885670533b ./gcc/testsuite/g++.old-deja/g++.pt/explicit83.C 3419948260b ./gcc/testsuite/g++.old-deja/g++.pt/explicit9.C 662598850b ./gcc/testsuite/g++.old-deja/g++.pt/export1.C 1515995682b ./gcc/testsuite/g++.old-deja/g++.pt/expr1.C *************** *** 11018,11023 **** --- 8335,8341 ---- 161410515b ./gcc/testsuite/g++.old-deja/g++.pt/expr8.C 1422905843b ./gcc/testsuite/g++.old-deja/g++.pt/extern1.C 1069100821b ./gcc/testsuite/g++.old-deja/g++.pt/fntry1.C + 4017972632b ./gcc/testsuite/g++.old-deja/g++.pt/friend1.C 1287620498b ./gcc/testsuite/g++.old-deja/g++.pt/friend10.C 1165640191b ./gcc/testsuite/g++.old-deja/g++.pt/friend11.C 3100262252b ./gcc/testsuite/g++.old-deja/g++.pt/friend12.C *************** *** 11027,11033 **** 869822534b ./gcc/testsuite/g++.old-deja/g++.pt/friend16.C 4066339061b ./gcc/testsuite/g++.old-deja/g++.pt/friend17.C 3286295955b ./gcc/testsuite/g++.old-deja/g++.pt/friend18.C - 4017972632b ./gcc/testsuite/g++.old-deja/g++.pt/friend1.C 2120784153b ./gcc/testsuite/g++.old-deja/g++.pt/friend20.C 2467760231b ./gcc/testsuite/g++.old-deja/g++.pt/friend21.C 416829101b ./gcc/testsuite/g++.old-deja/g++.pt/friend22.C --- 8345,8350 ---- *************** *** 11038,11043 **** --- 8355,8361 ---- 3274309194b ./gcc/testsuite/g++.old-deja/g++.pt/friend27.C 1284470831b ./gcc/testsuite/g++.old-deja/g++.pt/friend28.C 3161078590b ./gcc/testsuite/g++.old-deja/g++.pt/friend29.C + 2144037049b ./gcc/testsuite/g++.old-deja/g++.pt/friend3.C 3765298518b ./gcc/testsuite/g++.old-deja/g++.pt/friend30.C 2264286486b ./gcc/testsuite/g++.old-deja/g++.pt/friend31.C 2346260162b ./gcc/testsuite/g++.old-deja/g++.pt/friend32.C *************** *** 11048,11054 **** 3754374175b ./gcc/testsuite/g++.old-deja/g++.pt/friend37.C 3281471741b ./gcc/testsuite/g++.old-deja/g++.pt/friend38.C 317013285b ./gcc/testsuite/g++.old-deja/g++.pt/friend39.C ! 2144037049b ./gcc/testsuite/g++.old-deja/g++.pt/friend3.C 182204021b ./gcc/testsuite/g++.old-deja/g++.pt/friend40.C 345702925b ./gcc/testsuite/g++.old-deja/g++.pt/friend41.C 2157387021b ./gcc/testsuite/g++.old-deja/g++.pt/friend42.C --- 8366,8372 ---- 3754374175b ./gcc/testsuite/g++.old-deja/g++.pt/friend37.C 3281471741b ./gcc/testsuite/g++.old-deja/g++.pt/friend38.C 317013285b ./gcc/testsuite/g++.old-deja/g++.pt/friend39.C ! 1839433882b ./gcc/testsuite/g++.old-deja/g++.pt/friend4.C 182204021b ./gcc/testsuite/g++.old-deja/g++.pt/friend40.C 345702925b ./gcc/testsuite/g++.old-deja/g++.pt/friend41.C 2157387021b ./gcc/testsuite/g++.old-deja/g++.pt/friend42.C *************** *** 11059,11072 **** 4284536748b ./gcc/testsuite/g++.old-deja/g++.pt/friend47.C 1943593208b ./gcc/testsuite/g++.old-deja/g++.pt/friend48.C 2460768791b ./gcc/testsuite/g++.old-deja/g++.pt/friend49.C - 1839433882b ./gcc/testsuite/g++.old-deja/g++.pt/friend4.C 704986118b ./gcc/testsuite/g++.old-deja/g++.pt/friend5.C 1522663160b ./gcc/testsuite/g++.old-deja/g++.pt/friend6.C 1156856345b ./gcc/testsuite/g++.old-deja/g++.pt/friend7.C 20638590b ./gcc/testsuite/g++.old-deja/g++.pt/friend8.C 3274600020b ./gcc/testsuite/g++.old-deja/g++.pt/friend9.C - 2373771284b ./gcc/testsuite/g++.old-deja/g++.pt/goto2.C 3949127698b ./gcc/testsuite/g++.old-deja/g++.pt/goto.C 1470520127b ./gcc/testsuite/g++.old-deja/g++.pt/incomplete1.C 1047213389b ./gcc/testsuite/g++.old-deja/g++.pt/infinite1.C 2141463905b ./gcc/testsuite/g++.old-deja/g++.pt/inherit1.C --- 8377,8389 ---- 4284536748b ./gcc/testsuite/g++.old-deja/g++.pt/friend47.C 1943593208b ./gcc/testsuite/g++.old-deja/g++.pt/friend48.C 2460768791b ./gcc/testsuite/g++.old-deja/g++.pt/friend49.C 704986118b ./gcc/testsuite/g++.old-deja/g++.pt/friend5.C 1522663160b ./gcc/testsuite/g++.old-deja/g++.pt/friend6.C 1156856345b ./gcc/testsuite/g++.old-deja/g++.pt/friend7.C 20638590b ./gcc/testsuite/g++.old-deja/g++.pt/friend8.C 3274600020b ./gcc/testsuite/g++.old-deja/g++.pt/friend9.C 3949127698b ./gcc/testsuite/g++.old-deja/g++.pt/goto.C + 2373771284b ./gcc/testsuite/g++.old-deja/g++.pt/goto2.C 1470520127b ./gcc/testsuite/g++.old-deja/g++.pt/incomplete1.C 1047213389b ./gcc/testsuite/g++.old-deja/g++.pt/infinite1.C 2141463905b ./gcc/testsuite/g++.old-deja/g++.pt/inherit1.C *************** *** 11075,11091 **** 1666451974b ./gcc/testsuite/g++.old-deja/g++.pt/inject2.C 775587620b ./gcc/testsuite/g++.old-deja/g++.pt/inline1.C 4143100873b ./gcc/testsuite/g++.old-deja/g++.pt/inline2.C 567219073b ./gcc/testsuite/g++.old-deja/g++.pt/instantiate10.C 658392970b ./gcc/testsuite/g++.old-deja/g++.pt/instantiate11.C 2528080326b ./gcc/testsuite/g++.old-deja/g++.pt/instantiate12.C 3666215677b ./gcc/testsuite/g++.old-deja/g++.pt/instantiate13.C - 2167918209b ./gcc/testsuite/g++.old-deja/g++.pt/instantiate1.C 2568581654b ./gcc/testsuite/g++.old-deja/g++.pt/instantiate2.C 3989382998b ./gcc/testsuite/g++.old-deja/g++.pt/instantiate3.C 3598960158b ./gcc/testsuite/g++.old-deja/g++.pt/instantiate4.C 1010945845b ./gcc/testsuite/g++.old-deja/g++.pt/instantiate5.C 2967623396b ./gcc/testsuite/g++.old-deja/g++.pt/instantiate5.cc - 1230172281b ./gcc/testsuite/g++.old-deja/g++.pt/instantiate5-main.cc 4042450939b ./gcc/testsuite/g++.old-deja/g++.pt/instantiate6.C 2137469555b ./gcc/testsuite/g++.old-deja/g++.pt/instantiate7.C 2823240025b ./gcc/testsuite/g++.old-deja/g++.pt/instantiate8.C --- 8392,8408 ---- 1666451974b ./gcc/testsuite/g++.old-deja/g++.pt/inject2.C 775587620b ./gcc/testsuite/g++.old-deja/g++.pt/inline1.C 4143100873b ./gcc/testsuite/g++.old-deja/g++.pt/inline2.C + 2167918209b ./gcc/testsuite/g++.old-deja/g++.pt/instantiate1.C 567219073b ./gcc/testsuite/g++.old-deja/g++.pt/instantiate10.C 658392970b ./gcc/testsuite/g++.old-deja/g++.pt/instantiate11.C 2528080326b ./gcc/testsuite/g++.old-deja/g++.pt/instantiate12.C 3666215677b ./gcc/testsuite/g++.old-deja/g++.pt/instantiate13.C 2568581654b ./gcc/testsuite/g++.old-deja/g++.pt/instantiate2.C 3989382998b ./gcc/testsuite/g++.old-deja/g++.pt/instantiate3.C 3598960158b ./gcc/testsuite/g++.old-deja/g++.pt/instantiate4.C + 1230172281b ./gcc/testsuite/g++.old-deja/g++.pt/instantiate5-main.cc 1010945845b ./gcc/testsuite/g++.old-deja/g++.pt/instantiate5.C 2967623396b ./gcc/testsuite/g++.old-deja/g++.pt/instantiate5.cc 4042450939b ./gcc/testsuite/g++.old-deja/g++.pt/instantiate6.C 2137469555b ./gcc/testsuite/g++.old-deja/g++.pt/instantiate7.C 2823240025b ./gcc/testsuite/g++.old-deja/g++.pt/instantiate8.C *************** *** 11100,11107 **** 2354833145b ./gcc/testsuite/g++.old-deja/g++.pt/local5.C 3330482290b ./gcc/testsuite/g++.old-deja/g++.pt/local6.C 3591262298b ./gcc/testsuite/g++.old-deja/g++.pt/local7.C - 1618400382b ./gcc/testsuite/g++.old-deja/g++.pt/lookup10.C 2198910890b ./gcc/testsuite/g++.old-deja/g++.pt/lookup1.C 2928431480b ./gcc/testsuite/g++.old-deja/g++.pt/lookup2.C 2326742548b ./gcc/testsuite/g++.old-deja/g++.pt/lookup3.C 58581562b ./gcc/testsuite/g++.old-deja/g++.pt/lookup4.C --- 8417,8424 ---- 2354833145b ./gcc/testsuite/g++.old-deja/g++.pt/local5.C 3330482290b ./gcc/testsuite/g++.old-deja/g++.pt/local6.C 3591262298b ./gcc/testsuite/g++.old-deja/g++.pt/local7.C 2198910890b ./gcc/testsuite/g++.old-deja/g++.pt/lookup1.C + 1618400382b ./gcc/testsuite/g++.old-deja/g++.pt/lookup10.C 2928431480b ./gcc/testsuite/g++.old-deja/g++.pt/lookup2.C 2326742548b ./gcc/testsuite/g++.old-deja/g++.pt/lookup3.C 58581562b ./gcc/testsuite/g++.old-deja/g++.pt/lookup4.C *************** *** 11118,11127 **** 2792466666b ./gcc/testsuite/g++.old-deja/g++.pt/m6.C 2010181237b ./gcc/testsuite/g++.old-deja/g++.pt/m7.C 181270594b ./gcc/testsuite/g++.old-deja/g++.pt/m8.C - 454140677b ./gcc/testsuite/g++.old-deja/g++.pt/m9a.C 860513545b ./gcc/testsuite/g++.old-deja/g++.pt/m9.C 4199939364b ./gcc/testsuite/g++.old-deja/g++.pt/mangle1.C 735244068b ./gcc/testsuite/g++.old-deja/g++.pt/mangle2.C 3280522955b ./gcc/testsuite/g++.old-deja/g++.pt/memclass10.C 3429032104b ./gcc/testsuite/g++.old-deja/g++.pt/memclass11.C 2793864882b ./gcc/testsuite/g++.old-deja/g++.pt/memclass12.C --- 8435,8445 ---- 2792466666b ./gcc/testsuite/g++.old-deja/g++.pt/m6.C 2010181237b ./gcc/testsuite/g++.old-deja/g++.pt/m7.C 181270594b ./gcc/testsuite/g++.old-deja/g++.pt/m8.C 860513545b ./gcc/testsuite/g++.old-deja/g++.pt/m9.C + 454140677b ./gcc/testsuite/g++.old-deja/g++.pt/m9a.C 4199939364b ./gcc/testsuite/g++.old-deja/g++.pt/mangle1.C 735244068b ./gcc/testsuite/g++.old-deja/g++.pt/mangle2.C + 2993433239b ./gcc/testsuite/g++.old-deja/g++.pt/memclass1.C 3280522955b ./gcc/testsuite/g++.old-deja/g++.pt/memclass10.C 3429032104b ./gcc/testsuite/g++.old-deja/g++.pt/memclass11.C 2793864882b ./gcc/testsuite/g++.old-deja/g++.pt/memclass12.C *************** *** 11132,11141 **** 1861858814b ./gcc/testsuite/g++.old-deja/g++.pt/memclass17.C 2612688561b ./gcc/testsuite/g++.old-deja/g++.pt/memclass18.C 2502022996b ./gcc/testsuite/g++.old-deja/g++.pt/memclass19.C ! 2993433239b ./gcc/testsuite/g++.old-deja/g++.pt/memclass1.C 93385345b ./gcc/testsuite/g++.old-deja/g++.pt/memclass20.C 3252022289b ./gcc/testsuite/g++.old-deja/g++.pt/memclass21.C - 2537802637b ./gcc/testsuite/g++.old-deja/g++.pt/memclass2.C 1014036937b ./gcc/testsuite/g++.old-deja/g++.pt/memclass3.C 1431379137b ./gcc/testsuite/g++.old-deja/g++.pt/memclass4.C 1075497415b ./gcc/testsuite/g++.old-deja/g++.pt/memclass5.C --- 8450,8458 ---- 1861858814b ./gcc/testsuite/g++.old-deja/g++.pt/memclass17.C 2612688561b ./gcc/testsuite/g++.old-deja/g++.pt/memclass18.C 2502022996b ./gcc/testsuite/g++.old-deja/g++.pt/memclass19.C ! 2537802637b ./gcc/testsuite/g++.old-deja/g++.pt/memclass2.C 93385345b ./gcc/testsuite/g++.old-deja/g++.pt/memclass20.C 3252022289b ./gcc/testsuite/g++.old-deja/g++.pt/memclass21.C 1014036937b ./gcc/testsuite/g++.old-deja/g++.pt/memclass3.C 1431379137b ./gcc/testsuite/g++.old-deja/g++.pt/memclass4.C 1075497415b ./gcc/testsuite/g++.old-deja/g++.pt/memclass5.C *************** *** 11143,11150 **** 2127284390b ./gcc/testsuite/g++.old-deja/g++.pt/memclass7.C 1195266757b ./gcc/testsuite/g++.old-deja/g++.pt/memclass8.C 1810826153b ./gcc/testsuite/g++.old-deja/g++.pt/memclass9.C ! 4058618179b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp100.C 2904180820b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp10.C 2282254491b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp11.C 1976328805b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp12.C 1239088058b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp13.C --- 8460,8468 ---- 2127284390b ./gcc/testsuite/g++.old-deja/g++.pt/memclass7.C 1195266757b ./gcc/testsuite/g++.old-deja/g++.pt/memclass8.C 1810826153b ./gcc/testsuite/g++.old-deja/g++.pt/memclass9.C ! 1224975036b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp1.C 2904180820b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp10.C + 4058618179b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp100.C 2282254491b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp11.C 1976328805b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp12.C 1239088058b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp13.C *************** *** 11154,11160 **** 1544280209b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp17.C 2050660023b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp18.C 2678511608b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp19.C ! 1224975036b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp1.C 1334964388b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp20.C 459239676b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp23.C 2533288060b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp24.C --- 8472,8478 ---- 1544280209b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp17.C 2050660023b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp18.C 2678511608b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp19.C ! 1871764459b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp2.C 1334964388b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp20.C 459239676b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp23.C 2533288060b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp24.C *************** *** 11163,11169 **** 2533288060b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp27.C 1005751857b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp28.C 199305334b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp29.C ! 1871764459b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp2.C 1670170059b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp30.C 2289485955b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp31.C 27098458b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp32.C --- 8481,8487 ---- 2533288060b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp27.C 1005751857b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp28.C 199305334b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp29.C ! 1631129726b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp3.C 1670170059b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp30.C 2289485955b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp31.C 27098458b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp32.C *************** *** 11173,11179 **** 2010910590b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp36.C 458681200b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp37.C 20442451b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp39.C ! 1631129726b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp3.C 3100522038b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp40.C 938647569b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp41.C 1217004521b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp42.C --- 8491,8497 ---- 2010910590b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp36.C 458681200b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp37.C 20442451b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp39.C ! 1762838619b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp4.C 3100522038b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp40.C 938647569b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp41.C 1217004521b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp42.C *************** *** 11184,11197 **** 87150136b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp47.C 2797911396b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp48.C 3001846639b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp49.C ! 1762838619b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp4.C 899239607b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp52.C 1512186785b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp53.C 734020637b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp55.C 1075898943b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp56.C 1044391503b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp58.C 2900869252b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp59.C ! 1033026004b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp5.C 1257470032b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp60.C 761783865b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp61.C 1690671324b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp62.C --- 8502,8515 ---- 87150136b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp47.C 2797911396b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp48.C 3001846639b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp49.C ! 1033026004b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp5.C 899239607b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp52.C 1512186785b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp53.C 734020637b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp55.C 1075898943b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp56.C 1044391503b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp58.C 2900869252b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp59.C ! 3026038856b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp6.C 1257470032b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp60.C 761783865b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp61.C 1690671324b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp62.C *************** *** 11202,11208 **** 1942260890b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp67.C 3915762673b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp68.C 3344118567b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp69.C ! 3026038856b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp6.C 2509660495b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp70.C 104374337b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp71.C 1613408023b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp72.C --- 8520,8526 ---- 1942260890b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp67.C 3915762673b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp68.C 3344118567b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp69.C ! 1316217894b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp7.C 2509660495b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp70.C 104374337b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp71.C 1613408023b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp72.C *************** *** 11213,11219 **** 1218672257b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp77.C 3371462880b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp78.C 4186537912b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp79.C ! 1316217894b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp7.C 4184361784b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp80.C 2741487455b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp81.C 669240911b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp82.C --- 8531,8537 ---- 1218672257b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp77.C 3371462880b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp78.C 4186537912b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp79.C ! 2098916421b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp8.C 4184361784b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp80.C 2741487455b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp81.C 669240911b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp82.C *************** *** 11224,11230 **** 782720859b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp87.C 3073633390b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp88.C 4187592159b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp89.C ! 2098916421b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp8.C 329208420b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp90.C 357390701b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp91.C 440251046b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp92.C --- 8542,8548 ---- 782720859b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp87.C 3073633390b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp88.C 4187592159b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp89.C ! 1544636937b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp9.C 329208420b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp90.C 357390701b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp91.C 440251046b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp92.C *************** *** 11235,11247 **** 876225447b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp97.C 3251366836b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp98.C 588126708b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp99.C - 1544636937b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp9.C 4151922476b ./gcc/testsuite/g++.old-deja/g++.pt/mi1.C 3159596706b ./gcc/testsuite/g++.old-deja/g++.pt/nested1.C 752451121b ./gcc/testsuite/g++.old-deja/g++.pt/nested2.C 3261242986b ./gcc/testsuite/g++.old-deja/g++.pt/niklas01a.C 3338878252b ./gcc/testsuite/g++.old-deja/g++.pt/niklas01b.C - 206427704b ./gcc/testsuite/g++.old-deja/g++.pt/niklas01.C 3121397720b ./gcc/testsuite/g++.old-deja/g++.pt/niklas02.C 18744569b ./gcc/testsuite/g++.old-deja/g++.pt/niklas03.C 4224711202b ./gcc/testsuite/g++.old-deja/g++.pt/nontype1.C --- 8553,8564 ---- 876225447b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp97.C 3251366836b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp98.C 588126708b ./gcc/testsuite/g++.old-deja/g++.pt/memtemp99.C 4151922476b ./gcc/testsuite/g++.old-deja/g++.pt/mi1.C 3159596706b ./gcc/testsuite/g++.old-deja/g++.pt/nested1.C 752451121b ./gcc/testsuite/g++.old-deja/g++.pt/nested2.C + 206427704b ./gcc/testsuite/g++.old-deja/g++.pt/niklas01.C 3261242986b ./gcc/testsuite/g++.old-deja/g++.pt/niklas01a.C 3338878252b ./gcc/testsuite/g++.old-deja/g++.pt/niklas01b.C 3121397720b ./gcc/testsuite/g++.old-deja/g++.pt/niklas02.C 18744569b ./gcc/testsuite/g++.old-deja/g++.pt/niklas03.C 4224711202b ./gcc/testsuite/g++.old-deja/g++.pt/nontype1.C *************** *** 11252,11264 **** 2791152240b ./gcc/testsuite/g++.old-deja/g++.pt/nttp1.C 247002708b ./gcc/testsuite/g++.old-deja/g++.pt/nttp2.C 1278541513b ./gcc/testsuite/g++.old-deja/g++.pt/operator1.C 700666863b ./gcc/testsuite/g++.old-deja/g++.pt/overload10.C 106266692b ./gcc/testsuite/g++.old-deja/g++.pt/overload11.C 2233076058b ./gcc/testsuite/g++.old-deja/g++.pt/overload12.C 567369625b ./gcc/testsuite/g++.old-deja/g++.pt/overload13.C 43242814b ./gcc/testsuite/g++.old-deja/g++.pt/overload14.C 775259676b ./gcc/testsuite/g++.old-deja/g++.pt/overload15.C - 2435336654b ./gcc/testsuite/g++.old-deja/g++.pt/overload1.C 1331381682b ./gcc/testsuite/g++.old-deja/g++.pt/overload2.C 2609432689b ./gcc/testsuite/g++.old-deja/g++.pt/overload3.C 685890975b ./gcc/testsuite/g++.old-deja/g++.pt/overload4.C --- 8569,8581 ---- 2791152240b ./gcc/testsuite/g++.old-deja/g++.pt/nttp1.C 247002708b ./gcc/testsuite/g++.old-deja/g++.pt/nttp2.C 1278541513b ./gcc/testsuite/g++.old-deja/g++.pt/operator1.C + 2435336654b ./gcc/testsuite/g++.old-deja/g++.pt/overload1.C 700666863b ./gcc/testsuite/g++.old-deja/g++.pt/overload10.C 106266692b ./gcc/testsuite/g++.old-deja/g++.pt/overload11.C 2233076058b ./gcc/testsuite/g++.old-deja/g++.pt/overload12.C 567369625b ./gcc/testsuite/g++.old-deja/g++.pt/overload13.C 43242814b ./gcc/testsuite/g++.old-deja/g++.pt/overload14.C 775259676b ./gcc/testsuite/g++.old-deja/g++.pt/overload15.C 1331381682b ./gcc/testsuite/g++.old-deja/g++.pt/overload2.C 2609432689b ./gcc/testsuite/g++.old-deja/g++.pt/overload3.C 685890975b ./gcc/testsuite/g++.old-deja/g++.pt/overload4.C *************** *** 11278,11285 **** 4209924429b ./gcc/testsuite/g++.old-deja/g++.pt/partial5.C 4183203582b ./gcc/testsuite/g++.old-deja/g++.pt/poi1.C 1609222984b ./gcc/testsuite/g++.old-deja/g++.pt/pointer1.C - 2621744921b ./gcc/testsuite/g++.old-deja/g++.pt/ptrmem10.C 667276243b ./gcc/testsuite/g++.old-deja/g++.pt/ptrmem1.C 1628163413b ./gcc/testsuite/g++.old-deja/g++.pt/ptrmem2.C 3615617559b ./gcc/testsuite/g++.old-deja/g++.pt/ptrmem3.C 886281225b ./gcc/testsuite/g++.old-deja/g++.pt/ptrmem4.C --- 8595,8602 ---- 4209924429b ./gcc/testsuite/g++.old-deja/g++.pt/partial5.C 4183203582b ./gcc/testsuite/g++.old-deja/g++.pt/poi1.C 1609222984b ./gcc/testsuite/g++.old-deja/g++.pt/pointer1.C 667276243b ./gcc/testsuite/g++.old-deja/g++.pt/ptrmem1.C + 2621744921b ./gcc/testsuite/g++.old-deja/g++.pt/ptrmem10.C 1628163413b ./gcc/testsuite/g++.old-deja/g++.pt/ptrmem2.C 3615617559b ./gcc/testsuite/g++.old-deja/g++.pt/ptrmem3.C 886281225b ./gcc/testsuite/g++.old-deja/g++.pt/ptrmem4.C *************** *** 11288,11295 **** 3758586102b ./gcc/testsuite/g++.old-deja/g++.pt/ptrmem7.C 2054039204b ./gcc/testsuite/g++.old-deja/g++.pt/ptrmem8.C 3543585318b ./gcc/testsuite/g++.old-deja/g++.pt/ptrmem9.C - 2282560315b ./gcc/testsuite/g++.old-deja/g++.pt/recursion2.C 1176769163b ./gcc/testsuite/g++.old-deja/g++.pt/recursion.C 2783268127b ./gcc/testsuite/g++.old-deja/g++.pt/redecl1.C 273604436b ./gcc/testsuite/g++.old-deja/g++.pt/redecl2.C 594557972b ./gcc/testsuite/g++.old-deja/g++.pt/ref1.C --- 8605,8612 ---- 3758586102b ./gcc/testsuite/g++.old-deja/g++.pt/ptrmem7.C 2054039204b ./gcc/testsuite/g++.old-deja/g++.pt/ptrmem8.C 3543585318b ./gcc/testsuite/g++.old-deja/g++.pt/ptrmem9.C 1176769163b ./gcc/testsuite/g++.old-deja/g++.pt/recursion.C + 2282560315b ./gcc/testsuite/g++.old-deja/g++.pt/recursion2.C 2783268127b ./gcc/testsuite/g++.old-deja/g++.pt/redecl1.C 273604436b ./gcc/testsuite/g++.old-deja/g++.pt/redecl2.C 594557972b ./gcc/testsuite/g++.old-deja/g++.pt/ref1.C *************** *** 11303,11311 **** 842128020b ./gcc/testsuite/g++.old-deja/g++.pt/scope1.C 696905520b ./gcc/testsuite/g++.old-deja/g++.pt/shadow1.C 3988722815b ./gcc/testsuite/g++.old-deja/g++.pt/shadow2.C 3116942821b ./gcc/testsuite/g++.old-deja/g++.pt/sizeof2.C 2876524265b ./gcc/testsuite/g++.old-deja/g++.pt/sizeof3.C ! 4082900584b ./gcc/testsuite/g++.old-deja/g++.pt/sizeof.C 93654703b ./gcc/testsuite/g++.old-deja/g++.pt/spec10.C 3527506444b ./gcc/testsuite/g++.old-deja/g++.pt/spec11.C 3538641668b ./gcc/testsuite/g++.old-deja/g++.pt/spec12.C --- 8620,8629 ---- 842128020b ./gcc/testsuite/g++.old-deja/g++.pt/scope1.C 696905520b ./gcc/testsuite/g++.old-deja/g++.pt/shadow1.C 3988722815b ./gcc/testsuite/g++.old-deja/g++.pt/shadow2.C + 4082900584b ./gcc/testsuite/g++.old-deja/g++.pt/sizeof.C 3116942821b ./gcc/testsuite/g++.old-deja/g++.pt/sizeof2.C 2876524265b ./gcc/testsuite/g++.old-deja/g++.pt/sizeof3.C ! 991382684b ./gcc/testsuite/g++.old-deja/g++.pt/spec1.C 93654703b ./gcc/testsuite/g++.old-deja/g++.pt/spec10.C 3527506444b ./gcc/testsuite/g++.old-deja/g++.pt/spec11.C 3538641668b ./gcc/testsuite/g++.old-deja/g++.pt/spec12.C *************** *** 11316,11322 **** 411261988b ./gcc/testsuite/g++.old-deja/g++.pt/spec17.C 4048825100b ./gcc/testsuite/g++.old-deja/g++.pt/spec18.C 3497658316b ./gcc/testsuite/g++.old-deja/g++.pt/spec19.C ! 991382684b ./gcc/testsuite/g++.old-deja/g++.pt/spec1.C 2791297069b ./gcc/testsuite/g++.old-deja/g++.pt/spec20.C 3113620134b ./gcc/testsuite/g++.old-deja/g++.pt/spec21.C 2983405950b ./gcc/testsuite/g++.old-deja/g++.pt/spec22.C --- 8634,8640 ---- 411261988b ./gcc/testsuite/g++.old-deja/g++.pt/spec17.C 4048825100b ./gcc/testsuite/g++.old-deja/g++.pt/spec18.C 3497658316b ./gcc/testsuite/g++.old-deja/g++.pt/spec19.C ! 3880560938b ./gcc/testsuite/g++.old-deja/g++.pt/spec2.C 2791297069b ./gcc/testsuite/g++.old-deja/g++.pt/spec20.C 3113620134b ./gcc/testsuite/g++.old-deja/g++.pt/spec21.C 2983405950b ./gcc/testsuite/g++.old-deja/g++.pt/spec22.C *************** *** 11327,11333 **** 163389509b ./gcc/testsuite/g++.old-deja/g++.pt/spec27.C 723418800b ./gcc/testsuite/g++.old-deja/g++.pt/spec28.C 288771490b ./gcc/testsuite/g++.old-deja/g++.pt/spec29.C ! 3880560938b ./gcc/testsuite/g++.old-deja/g++.pt/spec2.C 3450541938b ./gcc/testsuite/g++.old-deja/g++.pt/spec30.C 3771549807b ./gcc/testsuite/g++.old-deja/g++.pt/spec31.C 811045881b ./gcc/testsuite/g++.old-deja/g++.pt/spec32.C --- 8645,8651 ---- 163389509b ./gcc/testsuite/g++.old-deja/g++.pt/spec27.C 723418800b ./gcc/testsuite/g++.old-deja/g++.pt/spec28.C 288771490b ./gcc/testsuite/g++.old-deja/g++.pt/spec29.C ! 2986435997b ./gcc/testsuite/g++.old-deja/g++.pt/spec3.C 3450541938b ./gcc/testsuite/g++.old-deja/g++.pt/spec30.C 3771549807b ./gcc/testsuite/g++.old-deja/g++.pt/spec31.C 811045881b ./gcc/testsuite/g++.old-deja/g++.pt/spec32.C *************** *** 11338,11355 **** 2893602715b ./gcc/testsuite/g++.old-deja/g++.pt/spec37.C 1089795364b ./gcc/testsuite/g++.old-deja/g++.pt/spec38.C 3573286877b ./gcc/testsuite/g++.old-deja/g++.pt/spec39.C ! 2986435997b ./gcc/testsuite/g++.old-deja/g++.pt/spec3.C 263033306b ./gcc/testsuite/g++.old-deja/g++.pt/spec40.C 4257539281b ./gcc/testsuite/g++.old-deja/g++.pt/spec41.C - 1203682774b ./gcc/testsuite/g++.old-deja/g++.pt/spec4.C 472020156b ./gcc/testsuite/g++.old-deja/g++.pt/spec5.C 2997305150b ./gcc/testsuite/g++.old-deja/g++.pt/spec6.C 4161522669b ./gcc/testsuite/g++.old-deja/g++.pt/spec7.C 2956825769b ./gcc/testsuite/g++.old-deja/g++.pt/spec8.C 689217773b ./gcc/testsuite/g++.old-deja/g++.pt/spec9.C 3499532117b ./gcc/testsuite/g++.old-deja/g++.pt/static10.C 3953283065b ./gcc/testsuite/g++.old-deja/g++.pt/static11.C - 2178379561b ./gcc/testsuite/g++.old-deja/g++.pt/static1.C 3095826275b ./gcc/testsuite/g++.old-deja/g++.pt/static2.C 3043759182b ./gcc/testsuite/g++.old-deja/g++.pt/static3.C 4121342217b ./gcc/testsuite/g++.old-deja/g++.pt/static4.C --- 8656,8672 ---- 2893602715b ./gcc/testsuite/g++.old-deja/g++.pt/spec37.C 1089795364b ./gcc/testsuite/g++.old-deja/g++.pt/spec38.C 3573286877b ./gcc/testsuite/g++.old-deja/g++.pt/spec39.C ! 1203682774b ./gcc/testsuite/g++.old-deja/g++.pt/spec4.C 263033306b ./gcc/testsuite/g++.old-deja/g++.pt/spec40.C 4257539281b ./gcc/testsuite/g++.old-deja/g++.pt/spec41.C 472020156b ./gcc/testsuite/g++.old-deja/g++.pt/spec5.C 2997305150b ./gcc/testsuite/g++.old-deja/g++.pt/spec6.C 4161522669b ./gcc/testsuite/g++.old-deja/g++.pt/spec7.C 2956825769b ./gcc/testsuite/g++.old-deja/g++.pt/spec8.C 689217773b ./gcc/testsuite/g++.old-deja/g++.pt/spec9.C + 2178379561b ./gcc/testsuite/g++.old-deja/g++.pt/static1.C 3499532117b ./gcc/testsuite/g++.old-deja/g++.pt/static10.C 3953283065b ./gcc/testsuite/g++.old-deja/g++.pt/static11.C 3095826275b ./gcc/testsuite/g++.old-deja/g++.pt/static2.C 3043759182b ./gcc/testsuite/g++.old-deja/g++.pt/static3.C 4121342217b ./gcc/testsuite/g++.old-deja/g++.pt/static4.C *************** *** 11359,11366 **** 3987560353b ./gcc/testsuite/g++.old-deja/g++.pt/static8.C 1860907942b ./gcc/testsuite/g++.old-deja/g++.pt/static9.C 1680154606b ./gcc/testsuite/g++.old-deja/g++.pt/static_cast.C - 3432829463b ./gcc/testsuite/g++.old-deja/g++.pt/stmtexpr2.C 2053761696b ./gcc/testsuite/g++.old-deja/g++.pt/stmtexpr.C 2038345660b ./gcc/testsuite/g++.old-deja/g++.pt/switch1.C 1321551276b ./gcc/testsuite/g++.old-deja/g++.pt/syntax1.C 769950811b ./gcc/testsuite/g++.old-deja/g++.pt/syntax2.C --- 8676,8683 ---- 3987560353b ./gcc/testsuite/g++.old-deja/g++.pt/static8.C 1860907942b ./gcc/testsuite/g++.old-deja/g++.pt/static9.C 1680154606b ./gcc/testsuite/g++.old-deja/g++.pt/static_cast.C 2053761696b ./gcc/testsuite/g++.old-deja/g++.pt/stmtexpr.C + 3432829463b ./gcc/testsuite/g++.old-deja/g++.pt/stmtexpr2.C 2038345660b ./gcc/testsuite/g++.old-deja/g++.pt/switch1.C 1321551276b ./gcc/testsuite/g++.old-deja/g++.pt/syntax1.C 769950811b ./gcc/testsuite/g++.old-deja/g++.pt/syntax2.C *************** *** 11374,11386 **** 1220980648b ./gcc/testsuite/g++.old-deja/g++.pt/t08.C 54752251b ./gcc/testsuite/g++.old-deja/g++.pt/t09.C 3939433080b ./gcc/testsuite/g++.old-deja/g++.pt/t10.C - 1989751964b ./gcc/testsuite/g++.old-deja/g++.pt/t11a.C 3632072790b ./gcc/testsuite/g++.old-deja/g++.pt/t11.C ! 2049763895b ./gcc/testsuite/g++.old-deja/g++.pt/t12a.C 2249141950b ./gcc/testsuite/g++.old-deja/g++.pt/t12.C 1228232084b ./gcc/testsuite/g++.old-deja/g++.pt/t13.C - 2705379238b ./gcc/testsuite/g++.old-deja/g++.pt/t14a.C 2100897741b ./gcc/testsuite/g++.old-deja/g++.pt/t14.C 1989199194b ./gcc/testsuite/g++.old-deja/g++.pt/t16.C 3606509706b ./gcc/testsuite/g++.old-deja/g++.pt/t18.C 141625773b ./gcc/testsuite/g++.old-deja/g++.pt/t20.C --- 8691,8703 ---- 1220980648b ./gcc/testsuite/g++.old-deja/g++.pt/t08.C 54752251b ./gcc/testsuite/g++.old-deja/g++.pt/t09.C 3939433080b ./gcc/testsuite/g++.old-deja/g++.pt/t10.C 3632072790b ./gcc/testsuite/g++.old-deja/g++.pt/t11.C ! 1989751964b ./gcc/testsuite/g++.old-deja/g++.pt/t11a.C 2249141950b ./gcc/testsuite/g++.old-deja/g++.pt/t12.C + 2049763895b ./gcc/testsuite/g++.old-deja/g++.pt/t12a.C 1228232084b ./gcc/testsuite/g++.old-deja/g++.pt/t13.C 2100897741b ./gcc/testsuite/g++.old-deja/g++.pt/t14.C + 2705379238b ./gcc/testsuite/g++.old-deja/g++.pt/t14a.C 1989199194b ./gcc/testsuite/g++.old-deja/g++.pt/t16.C 3606509706b ./gcc/testsuite/g++.old-deja/g++.pt/t18.C 141625773b ./gcc/testsuite/g++.old-deja/g++.pt/t20.C *************** *** 11395,11409 **** 1147556452b ./gcc/testsuite/g++.old-deja/g++.pt/t29.C 3402602239b ./gcc/testsuite/g++.old-deja/g++.pt/t30.C 1087482084b ./gcc/testsuite/g++.old-deja/g++.pt/t31.C - 1551618603b ./gcc/testsuite/g++.old-deja/g++.pt/t32a.C 2623408289b ./gcc/testsuite/g++.old-deja/g++.pt/t32.C ! 163082280b ./gcc/testsuite/g++.old-deja/g++.pt/t34a.C 4017416236b ./gcc/testsuite/g++.old-deja/g++.pt/t34.C ! 3947322975b ./gcc/testsuite/g++.old-deja/g++.pt/t35a.C 2585097382b ./gcc/testsuite/g++.old-deja/g++.pt/t35.C 1516584548b ./gcc/testsuite/g++.old-deja/g++.pt/t36.C - 420324441b ./gcc/testsuite/g++.old-deja/g++.pt/t37a.C 1426987064b ./gcc/testsuite/g++.old-deja/g++.pt/t37.C 2340198171b ./gcc/testsuite/g++.old-deja/g++.pt/t38.C 3309470860b ./gcc/testsuite/g++.old-deja/g++.pt/t39.C 1718444525b ./gcc/testsuite/g++.old-deja/g++.pt/t40.C --- 8712,8726 ---- 1147556452b ./gcc/testsuite/g++.old-deja/g++.pt/t29.C 3402602239b ./gcc/testsuite/g++.old-deja/g++.pt/t30.C 1087482084b ./gcc/testsuite/g++.old-deja/g++.pt/t31.C 2623408289b ./gcc/testsuite/g++.old-deja/g++.pt/t32.C ! 1551618603b ./gcc/testsuite/g++.old-deja/g++.pt/t32a.C 4017416236b ./gcc/testsuite/g++.old-deja/g++.pt/t34.C ! 163082280b ./gcc/testsuite/g++.old-deja/g++.pt/t34a.C 2585097382b ./gcc/testsuite/g++.old-deja/g++.pt/t35.C + 3947322975b ./gcc/testsuite/g++.old-deja/g++.pt/t35a.C 1516584548b ./gcc/testsuite/g++.old-deja/g++.pt/t36.C 1426987064b ./gcc/testsuite/g++.old-deja/g++.pt/t37.C + 420324441b ./gcc/testsuite/g++.old-deja/g++.pt/t37a.C 2340198171b ./gcc/testsuite/g++.old-deja/g++.pt/t38.C 3309470860b ./gcc/testsuite/g++.old-deja/g++.pt/t39.C 1718444525b ./gcc/testsuite/g++.old-deja/g++.pt/t40.C *************** *** 11414,11421 **** 1121503772b ./gcc/testsuite/g++.old-deja/g++.pt/tiemann1r.C 129425925b ./gcc/testsuite/g++.old-deja/g++.pt/tiemann2.C 1767149933b ./gcc/testsuite/g++.old-deja/g++.pt/to2.C - 611975575b ./gcc/testsuite/g++.old-deja/g++.pt/tt2.C 1910189955b ./gcc/testsuite/g++.old-deja/g++.pt/tt.C 2900382617b ./gcc/testsuite/g++.old-deja/g++.pt/ttp10.C 526371793b ./gcc/testsuite/g++.old-deja/g++.pt/ttp11.C 862146403b ./gcc/testsuite/g++.old-deja/g++.pt/ttp12.C --- 8731,8739 ---- 1121503772b ./gcc/testsuite/g++.old-deja/g++.pt/tiemann1r.C 129425925b ./gcc/testsuite/g++.old-deja/g++.pt/tiemann2.C 1767149933b ./gcc/testsuite/g++.old-deja/g++.pt/to2.C 1910189955b ./gcc/testsuite/g++.old-deja/g++.pt/tt.C + 611975575b ./gcc/testsuite/g++.old-deja/g++.pt/tt2.C + 2278374754b ./gcc/testsuite/g++.old-deja/g++.pt/ttp1.C 2900382617b ./gcc/testsuite/g++.old-deja/g++.pt/ttp10.C 526371793b ./gcc/testsuite/g++.old-deja/g++.pt/ttp11.C 862146403b ./gcc/testsuite/g++.old-deja/g++.pt/ttp12.C *************** *** 11426,11432 **** 2374108737b ./gcc/testsuite/g++.old-deja/g++.pt/ttp17.C 2213336936b ./gcc/testsuite/g++.old-deja/g++.pt/ttp18.C 1575203598b ./gcc/testsuite/g++.old-deja/g++.pt/ttp19.C ! 2278374754b ./gcc/testsuite/g++.old-deja/g++.pt/ttp1.C 1859285874b ./gcc/testsuite/g++.old-deja/g++.pt/ttp20.C 1147993431b ./gcc/testsuite/g++.old-deja/g++.pt/ttp21.C 1298886248b ./gcc/testsuite/g++.old-deja/g++.pt/ttp22.C --- 8744,8750 ---- 2374108737b ./gcc/testsuite/g++.old-deja/g++.pt/ttp17.C 2213336936b ./gcc/testsuite/g++.old-deja/g++.pt/ttp18.C 1575203598b ./gcc/testsuite/g++.old-deja/g++.pt/ttp19.C ! 3553743b ./gcc/testsuite/g++.old-deja/g++.pt/ttp2.C 1859285874b ./gcc/testsuite/g++.old-deja/g++.pt/ttp20.C 1147993431b ./gcc/testsuite/g++.old-deja/g++.pt/ttp21.C 1298886248b ./gcc/testsuite/g++.old-deja/g++.pt/ttp22.C *************** *** 11437,11443 **** 4244916136b ./gcc/testsuite/g++.old-deja/g++.pt/ttp27.C 3429685547b ./gcc/testsuite/g++.old-deja/g++.pt/ttp28.C 3829242227b ./gcc/testsuite/g++.old-deja/g++.pt/ttp29.C ! 3553743b ./gcc/testsuite/g++.old-deja/g++.pt/ttp2.C 2855054105b ./gcc/testsuite/g++.old-deja/g++.pt/ttp30.C 4010195516b ./gcc/testsuite/g++.old-deja/g++.pt/ttp31.C 3654116178b ./gcc/testsuite/g++.old-deja/g++.pt/ttp32.C --- 8755,8761 ---- 4244916136b ./gcc/testsuite/g++.old-deja/g++.pt/ttp27.C 3429685547b ./gcc/testsuite/g++.old-deja/g++.pt/ttp28.C 3829242227b ./gcc/testsuite/g++.old-deja/g++.pt/ttp29.C ! 2339659475b ./gcc/testsuite/g++.old-deja/g++.pt/ttp3.C 2855054105b ./gcc/testsuite/g++.old-deja/g++.pt/ttp30.C 4010195516b ./gcc/testsuite/g++.old-deja/g++.pt/ttp31.C 3654116178b ./gcc/testsuite/g++.old-deja/g++.pt/ttp32.C *************** *** 11448,11454 **** 361840570b ./gcc/testsuite/g++.old-deja/g++.pt/ttp37.C 570115104b ./gcc/testsuite/g++.old-deja/g++.pt/ttp38.C 2884076986b ./gcc/testsuite/g++.old-deja/g++.pt/ttp39.C ! 2339659475b ./gcc/testsuite/g++.old-deja/g++.pt/ttp3.C 3777404240b ./gcc/testsuite/g++.old-deja/g++.pt/ttp40.C 1654832327b ./gcc/testsuite/g++.old-deja/g++.pt/ttp41.C 1252557260b ./gcc/testsuite/g++.old-deja/g++.pt/ttp42.C --- 8766,8772 ---- 361840570b ./gcc/testsuite/g++.old-deja/g++.pt/ttp37.C 570115104b ./gcc/testsuite/g++.old-deja/g++.pt/ttp38.C 2884076986b ./gcc/testsuite/g++.old-deja/g++.pt/ttp39.C ! 883851040b ./gcc/testsuite/g++.old-deja/g++.pt/ttp4.C 3777404240b ./gcc/testsuite/g++.old-deja/g++.pt/ttp40.C 1654832327b ./gcc/testsuite/g++.old-deja/g++.pt/ttp41.C 1252557260b ./gcc/testsuite/g++.old-deja/g++.pt/ttp42.C *************** *** 11459,11465 **** 1411925217b ./gcc/testsuite/g++.old-deja/g++.pt/ttp47.C 3294346857b ./gcc/testsuite/g++.old-deja/g++.pt/ttp48.C 246280481b ./gcc/testsuite/g++.old-deja/g++.pt/ttp49.C ! 883851040b ./gcc/testsuite/g++.old-deja/g++.pt/ttp4.C 148311367b ./gcc/testsuite/g++.old-deja/g++.pt/ttp50.C 1355737114b ./gcc/testsuite/g++.old-deja/g++.pt/ttp51.C 742860133b ./gcc/testsuite/g++.old-deja/g++.pt/ttp52.C --- 8777,8783 ---- 1411925217b ./gcc/testsuite/g++.old-deja/g++.pt/ttp47.C 3294346857b ./gcc/testsuite/g++.old-deja/g++.pt/ttp48.C 246280481b ./gcc/testsuite/g++.old-deja/g++.pt/ttp49.C ! 744920614b ./gcc/testsuite/g++.old-deja/g++.pt/ttp5.C 148311367b ./gcc/testsuite/g++.old-deja/g++.pt/ttp50.C 1355737114b ./gcc/testsuite/g++.old-deja/g++.pt/ttp51.C 742860133b ./gcc/testsuite/g++.old-deja/g++.pt/ttp52.C *************** *** 11470,11483 **** 781548580b ./gcc/testsuite/g++.old-deja/g++.pt/ttp57.C 471877508b ./gcc/testsuite/g++.old-deja/g++.pt/ttp58.C 1970694533b ./gcc/testsuite/g++.old-deja/g++.pt/ttp59.C ! 744920614b ./gcc/testsuite/g++.old-deja/g++.pt/ttp5.C 1001403023b ./gcc/testsuite/g++.old-deja/g++.pt/ttp60.C 3275558727b ./gcc/testsuite/g++.old-deja/g++.pt/ttp61.C 1915032158b ./gcc/testsuite/g++.old-deja/g++.pt/ttp62.C 3261657532b ./gcc/testsuite/g++.old-deja/g++.pt/ttp63.C 1109524802b ./gcc/testsuite/g++.old-deja/g++.pt/ttp64.C 334468093b ./gcc/testsuite/g++.old-deja/g++.pt/ttp65.C - 1041079584b ./gcc/testsuite/g++.old-deja/g++.pt/ttp6.C 2962993334b ./gcc/testsuite/g++.old-deja/g++.pt/ttp7.C 1961268006b ./gcc/testsuite/g++.old-deja/g++.pt/ttp8.C 3708749815b ./gcc/testsuite/g++.old-deja/g++.pt/ttp9.C --- 8788,8800 ---- 781548580b ./gcc/testsuite/g++.old-deja/g++.pt/ttp57.C 471877508b ./gcc/testsuite/g++.old-deja/g++.pt/ttp58.C 1970694533b ./gcc/testsuite/g++.old-deja/g++.pt/ttp59.C ! 1041079584b ./gcc/testsuite/g++.old-deja/g++.pt/ttp6.C 1001403023b ./gcc/testsuite/g++.old-deja/g++.pt/ttp60.C 3275558727b ./gcc/testsuite/g++.old-deja/g++.pt/ttp61.C 1915032158b ./gcc/testsuite/g++.old-deja/g++.pt/ttp62.C 3261657532b ./gcc/testsuite/g++.old-deja/g++.pt/ttp63.C 1109524802b ./gcc/testsuite/g++.old-deja/g++.pt/ttp64.C 334468093b ./gcc/testsuite/g++.old-deja/g++.pt/ttp65.C 2962993334b ./gcc/testsuite/g++.old-deja/g++.pt/ttp7.C 1961268006b ./gcc/testsuite/g++.old-deja/g++.pt/ttp8.C 3708749815b ./gcc/testsuite/g++.old-deja/g++.pt/ttp9.C *************** *** 11485,11490 **** --- 8802,8808 ---- 2645715863b ./gcc/testsuite/g++.old-deja/g++.pt/typedef2.C 1128115184b ./gcc/testsuite/g++.old-deja/g++.pt/typedef3.C 687887055b ./gcc/testsuite/g++.old-deja/g++.pt/typedef4.C + 155924010b ./gcc/testsuite/g++.old-deja/g++.pt/typename1.C 3197185389b ./gcc/testsuite/g++.old-deja/g++.pt/typename10.C 11764674b ./gcc/testsuite/g++.old-deja/g++.pt/typename11.C 275086081b ./gcc/testsuite/g++.old-deja/g++.pt/typename12.C *************** *** 11495,11501 **** 4165656026b ./gcc/testsuite/g++.old-deja/g++.pt/typename17.C 2199791863b ./gcc/testsuite/g++.old-deja/g++.pt/typename18.C 1657062514b ./gcc/testsuite/g++.old-deja/g++.pt/typename19.C ! 155924010b ./gcc/testsuite/g++.old-deja/g++.pt/typename1.C 3251695233b ./gcc/testsuite/g++.old-deja/g++.pt/typename20.C 4031896858b ./gcc/testsuite/g++.old-deja/g++.pt/typename21.C 3346623174b ./gcc/testsuite/g++.old-deja/g++.pt/typename22.C --- 8813,8819 ---- 4165656026b ./gcc/testsuite/g++.old-deja/g++.pt/typename17.C 2199791863b ./gcc/testsuite/g++.old-deja/g++.pt/typename18.C 1657062514b ./gcc/testsuite/g++.old-deja/g++.pt/typename19.C ! 1202424634b ./gcc/testsuite/g++.old-deja/g++.pt/typename2.C 3251695233b ./gcc/testsuite/g++.old-deja/g++.pt/typename20.C 4031896858b ./gcc/testsuite/g++.old-deja/g++.pt/typename21.C 3346623174b ./gcc/testsuite/g++.old-deja/g++.pt/typename22.C *************** *** 11505,11511 **** 2707583962b ./gcc/testsuite/g++.old-deja/g++.pt/typename26.C 1423713632b ./gcc/testsuite/g++.old-deja/g++.pt/typename27.C 1479397024b ./gcc/testsuite/g++.old-deja/g++.pt/typename28.C - 1202424634b ./gcc/testsuite/g++.old-deja/g++.pt/typename2.C 671867998b ./gcc/testsuite/g++.old-deja/g++.pt/typename3.C 516047961b ./gcc/testsuite/g++.old-deja/g++.pt/typename4.C 3990219214b ./gcc/testsuite/g++.old-deja/g++.pt/typename5.C --- 8823,8828 ---- *************** *** 11524,11532 **** 3325944931b ./gcc/testsuite/g++.old-deja/g++.pt/union2.C 3304362700b ./gcc/testsuite/g++.old-deja/g++.pt/using1.C 3289243465b ./gcc/testsuite/g++.old-deja/g++.pt/using2.C 3460641357b ./gcc/testsuite/g++.old-deja/g++.pt/vaarg2.C 358497795b ./gcc/testsuite/g++.old-deja/g++.pt/vaarg3.C - 886046502b ./gcc/testsuite/g++.old-deja/g++.pt/vaarg.C 663619266b ./gcc/testsuite/g++.old-deja/g++.pt/var1.C 1421755768b ./gcc/testsuite/g++.old-deja/g++.pt/vbase1.C 3353980626b ./gcc/testsuite/g++.old-deja/g++.pt/virtual1.C --- 8841,8849 ---- 3325944931b ./gcc/testsuite/g++.old-deja/g++.pt/union2.C 3304362700b ./gcc/testsuite/g++.old-deja/g++.pt/using1.C 3289243465b ./gcc/testsuite/g++.old-deja/g++.pt/using2.C + 886046502b ./gcc/testsuite/g++.old-deja/g++.pt/vaarg.C 3460641357b ./gcc/testsuite/g++.old-deja/g++.pt/vaarg2.C 358497795b ./gcc/testsuite/g++.old-deja/g++.pt/vaarg3.C 663619266b ./gcc/testsuite/g++.old-deja/g++.pt/var1.C 1421755768b ./gcc/testsuite/g++.old-deja/g++.pt/vbase1.C 3353980626b ./gcc/testsuite/g++.old-deja/g++.pt/virtual1.C *************** *** 11538,11543 **** --- 8855,8862 ---- 1415873556b ./gcc/testsuite/g++.old-deja/g++.rfg/00321_01-.C 1112275657b ./gcc/testsuite/g++.old-deja/g++.rfg/00324_02-.C 4001281008b ./gcc/testsuite/g++.old-deja/g++.robertl/980310-1.C + 3593716546b ./gcc/testsuite/g++.old-deja/g++.robertl/README + 3648377352b ./gcc/testsuite/g++.old-deja/g++.robertl/eb10.C 3472844044b ./gcc/testsuite/g++.old-deja/g++.robertl/eb102.C 2443648446b ./gcc/testsuite/g++.old-deja/g++.robertl/eb103.C 2507881262b ./gcc/testsuite/g++.old-deja/g++.robertl/eb104.C *************** *** 11546,11552 **** 816702909b ./gcc/testsuite/g++.old-deja/g++.robertl/eb107.C 1370397701b ./gcc/testsuite/g++.old-deja/g++.robertl/eb108.C 2829681364b ./gcc/testsuite/g++.old-deja/g++.robertl/eb109.C ! 3648377352b ./gcc/testsuite/g++.old-deja/g++.robertl/eb10.C 1181050923b ./gcc/testsuite/g++.old-deja/g++.robertl/eb110.C 3893933499b ./gcc/testsuite/g++.old-deja/g++.robertl/eb111.C 1958243707b ./gcc/testsuite/g++.old-deja/g++.robertl/eb112.C --- 8865,8871 ---- 816702909b ./gcc/testsuite/g++.old-deja/g++.robertl/eb107.C 1370397701b ./gcc/testsuite/g++.old-deja/g++.robertl/eb108.C 2829681364b ./gcc/testsuite/g++.old-deja/g++.robertl/eb109.C ! 1227838581b ./gcc/testsuite/g++.old-deja/g++.robertl/eb11.C 1181050923b ./gcc/testsuite/g++.old-deja/g++.robertl/eb110.C 3893933499b ./gcc/testsuite/g++.old-deja/g++.robertl/eb111.C 1958243707b ./gcc/testsuite/g++.old-deja/g++.robertl/eb112.C *************** *** 11556,11562 **** 882322806b ./gcc/testsuite/g++.old-deja/g++.robertl/eb116.C 3652784132b ./gcc/testsuite/g++.old-deja/g++.robertl/eb118.C 1321940613b ./gcc/testsuite/g++.old-deja/g++.robertl/eb119.C ! 1227838581b ./gcc/testsuite/g++.old-deja/g++.robertl/eb11.C 784221952b ./gcc/testsuite/g++.old-deja/g++.robertl/eb120.C 1281713077b ./gcc/testsuite/g++.old-deja/g++.robertl/eb121.C 2148357158b ./gcc/testsuite/g++.old-deja/g++.robertl/eb122.C --- 8875,8881 ---- 882322806b ./gcc/testsuite/g++.old-deja/g++.robertl/eb116.C 3652784132b ./gcc/testsuite/g++.old-deja/g++.robertl/eb118.C 1321940613b ./gcc/testsuite/g++.old-deja/g++.robertl/eb119.C ! 158711949b ./gcc/testsuite/g++.old-deja/g++.robertl/eb12.C 784221952b ./gcc/testsuite/g++.old-deja/g++.robertl/eb120.C 1281713077b ./gcc/testsuite/g++.old-deja/g++.robertl/eb121.C 2148357158b ./gcc/testsuite/g++.old-deja/g++.robertl/eb122.C *************** *** 11566,11587 **** 1327581862b ./gcc/testsuite/g++.old-deja/g++.robertl/eb126.C 3379073614b ./gcc/testsuite/g++.old-deja/g++.robertl/eb127.C 3752300231b ./gcc/testsuite/g++.old-deja/g++.robertl/eb128.C - 2811911547b ./gcc/testsuite/g++.old-deja/g++.robertl/eb129a.C 551639476b ./gcc/testsuite/g++.old-deja/g++.robertl/eb129.C ! 158711949b ./gcc/testsuite/g++.old-deja/g++.robertl/eb12.C 3610132478b ./gcc/testsuite/g++.old-deja/g++.robertl/eb130.C 2576744469b ./gcc/testsuite/g++.old-deja/g++.robertl/eb131.C 191646019b ./gcc/testsuite/g++.old-deja/g++.robertl/eb132.C 2212505012b ./gcc/testsuite/g++.old-deja/g++.robertl/eb133a.C 960695829b ./gcc/testsuite/g++.old-deja/g++.robertl/eb133b.C - 960695829b ./gcc/testsuite/g++.old-deja/g++.robertl/eb133.C - 630981722b ./gcc/testsuite/g++.old-deja/g++.robertl/eb13.C 3851013524b ./gcc/testsuite/g++.old-deja/g++.robertl/eb14.C 8426984b ./gcc/testsuite/g++.old-deja/g++.robertl/eb15.C 2805277324b ./gcc/testsuite/g++.old-deja/g++.robertl/eb16.C 1023058352b ./gcc/testsuite/g++.old-deja/g++.robertl/eb17.C 2664767884b ./gcc/testsuite/g++.old-deja/g++.robertl/eb18.C 526517709b ./gcc/testsuite/g++.old-deja/g++.robertl/eb19.C 461969397b ./gcc/testsuite/g++.old-deja/g++.robertl/eb20.C 2675256374b ./gcc/testsuite/g++.old-deja/g++.robertl/eb21.C 917318256b ./gcc/testsuite/g++.old-deja/g++.robertl/eb22.C --- 8885,8906 ---- 1327581862b ./gcc/testsuite/g++.old-deja/g++.robertl/eb126.C 3379073614b ./gcc/testsuite/g++.old-deja/g++.robertl/eb127.C 3752300231b ./gcc/testsuite/g++.old-deja/g++.robertl/eb128.C 551639476b ./gcc/testsuite/g++.old-deja/g++.robertl/eb129.C ! 2811911547b ./gcc/testsuite/g++.old-deja/g++.robertl/eb129a.C ! 630981722b ./gcc/testsuite/g++.old-deja/g++.robertl/eb13.C 3610132478b ./gcc/testsuite/g++.old-deja/g++.robertl/eb130.C 2576744469b ./gcc/testsuite/g++.old-deja/g++.robertl/eb131.C 191646019b ./gcc/testsuite/g++.old-deja/g++.robertl/eb132.C + 960695829b ./gcc/testsuite/g++.old-deja/g++.robertl/eb133.C 2212505012b ./gcc/testsuite/g++.old-deja/g++.robertl/eb133a.C 960695829b ./gcc/testsuite/g++.old-deja/g++.robertl/eb133b.C 3851013524b ./gcc/testsuite/g++.old-deja/g++.robertl/eb14.C 8426984b ./gcc/testsuite/g++.old-deja/g++.robertl/eb15.C 2805277324b ./gcc/testsuite/g++.old-deja/g++.robertl/eb16.C 1023058352b ./gcc/testsuite/g++.old-deja/g++.robertl/eb17.C 2664767884b ./gcc/testsuite/g++.old-deja/g++.robertl/eb18.C 526517709b ./gcc/testsuite/g++.old-deja/g++.robertl/eb19.C + 3780933159b ./gcc/testsuite/g++.old-deja/g++.robertl/eb2.C 461969397b ./gcc/testsuite/g++.old-deja/g++.robertl/eb20.C 2675256374b ./gcc/testsuite/g++.old-deja/g++.robertl/eb21.C 917318256b ./gcc/testsuite/g++.old-deja/g++.robertl/eb22.C *************** *** 11591,11597 **** 292107192b ./gcc/testsuite/g++.old-deja/g++.robertl/eb27.C 1890436003b ./gcc/testsuite/g++.old-deja/g++.robertl/eb28.C 3453020821b ./gcc/testsuite/g++.old-deja/g++.robertl/eb29.C ! 3780933159b ./gcc/testsuite/g++.old-deja/g++.robertl/eb2.C 563892057b ./gcc/testsuite/g++.old-deja/g++.robertl/eb30.C 3084203745b ./gcc/testsuite/g++.old-deja/g++.robertl/eb31.C 4187617186b ./gcc/testsuite/g++.old-deja/g++.robertl/eb32.C --- 8910,8916 ---- 292107192b ./gcc/testsuite/g++.old-deja/g++.robertl/eb27.C 1890436003b ./gcc/testsuite/g++.old-deja/g++.robertl/eb28.C 3453020821b ./gcc/testsuite/g++.old-deja/g++.robertl/eb29.C ! 2212669672b ./gcc/testsuite/g++.old-deja/g++.robertl/eb3.C 563892057b ./gcc/testsuite/g++.old-deja/g++.robertl/eb30.C 3084203745b ./gcc/testsuite/g++.old-deja/g++.robertl/eb31.C 4187617186b ./gcc/testsuite/g++.old-deja/g++.robertl/eb32.C *************** *** 11602,11608 **** 2564432607b ./gcc/testsuite/g++.old-deja/g++.robertl/eb37.C 2426566316b ./gcc/testsuite/g++.old-deja/g++.robertl/eb38.C 528193552b ./gcc/testsuite/g++.old-deja/g++.robertl/eb39.C ! 2212669672b ./gcc/testsuite/g++.old-deja/g++.robertl/eb3.C 507123073b ./gcc/testsuite/g++.old-deja/g++.robertl/eb41.C 3295582703b ./gcc/testsuite/g++.old-deja/g++.robertl/eb43.C 3397322273b ./gcc/testsuite/g++.old-deja/g++.robertl/eb44.C --- 8921,8927 ---- 2564432607b ./gcc/testsuite/g++.old-deja/g++.robertl/eb37.C 2426566316b ./gcc/testsuite/g++.old-deja/g++.robertl/eb38.C 528193552b ./gcc/testsuite/g++.old-deja/g++.robertl/eb39.C ! 291255111b ./gcc/testsuite/g++.old-deja/g++.robertl/eb4.C 507123073b ./gcc/testsuite/g++.old-deja/g++.robertl/eb41.C 3295582703b ./gcc/testsuite/g++.old-deja/g++.robertl/eb43.C 3397322273b ./gcc/testsuite/g++.old-deja/g++.robertl/eb44.C *************** *** 11610,11616 **** 804543247b ./gcc/testsuite/g++.old-deja/g++.robertl/eb46.C 753241876b ./gcc/testsuite/g++.old-deja/g++.robertl/eb48.C 3504050873b ./gcc/testsuite/g++.old-deja/g++.robertl/eb49.C ! 291255111b ./gcc/testsuite/g++.old-deja/g++.robertl/eb4.C 4113309347b ./gcc/testsuite/g++.old-deja/g++.robertl/eb50.C 1918037503b ./gcc/testsuite/g++.old-deja/g++.robertl/eb51.C 3209054875b ./gcc/testsuite/g++.old-deja/g++.robertl/eb52.C --- 8929,8935 ---- 804543247b ./gcc/testsuite/g++.old-deja/g++.robertl/eb46.C 753241876b ./gcc/testsuite/g++.old-deja/g++.robertl/eb48.C 3504050873b ./gcc/testsuite/g++.old-deja/g++.robertl/eb49.C ! 3128226785b ./gcc/testsuite/g++.old-deja/g++.robertl/eb5.C 4113309347b ./gcc/testsuite/g++.old-deja/g++.robertl/eb50.C 1918037503b ./gcc/testsuite/g++.old-deja/g++.robertl/eb51.C 3209054875b ./gcc/testsuite/g++.old-deja/g++.robertl/eb52.C *************** *** 11620,11626 **** 1356497150b ./gcc/testsuite/g++.old-deja/g++.robertl/eb57.C 3407397105b ./gcc/testsuite/g++.old-deja/g++.robertl/eb58.C 794738043b ./gcc/testsuite/g++.old-deja/g++.robertl/eb59.C ! 3128226785b ./gcc/testsuite/g++.old-deja/g++.robertl/eb5.C 2498272255b ./gcc/testsuite/g++.old-deja/g++.robertl/eb60.C 1266761033b ./gcc/testsuite/g++.old-deja/g++.robertl/eb61.C 2004022719b ./gcc/testsuite/g++.old-deja/g++.robertl/eb62.C --- 8939,8945 ---- 1356497150b ./gcc/testsuite/g++.old-deja/g++.robertl/eb57.C 3407397105b ./gcc/testsuite/g++.old-deja/g++.robertl/eb58.C 794738043b ./gcc/testsuite/g++.old-deja/g++.robertl/eb59.C ! 1997456294b ./gcc/testsuite/g++.old-deja/g++.robertl/eb6.C 2498272255b ./gcc/testsuite/g++.old-deja/g++.robertl/eb60.C 1266761033b ./gcc/testsuite/g++.old-deja/g++.robertl/eb61.C 2004022719b ./gcc/testsuite/g++.old-deja/g++.robertl/eb62.C *************** *** 11630,11636 **** 980372542b ./gcc/testsuite/g++.old-deja/g++.robertl/eb66.C 3389307963b ./gcc/testsuite/g++.old-deja/g++.robertl/eb67.C 4223737421b ./gcc/testsuite/g++.old-deja/g++.robertl/eb69.C ! 1997456294b ./gcc/testsuite/g++.old-deja/g++.robertl/eb6.C 2182473885b ./gcc/testsuite/g++.old-deja/g++.robertl/eb70.C 3826058150b ./gcc/testsuite/g++.old-deja/g++.robertl/eb71.C 3782517804b ./gcc/testsuite/g++.old-deja/g++.robertl/eb73.C --- 8949,8955 ---- 980372542b ./gcc/testsuite/g++.old-deja/g++.robertl/eb66.C 3389307963b ./gcc/testsuite/g++.old-deja/g++.robertl/eb67.C 4223737421b ./gcc/testsuite/g++.old-deja/g++.robertl/eb69.C ! 718049317b ./gcc/testsuite/g++.old-deja/g++.robertl/eb7.C 2182473885b ./gcc/testsuite/g++.old-deja/g++.robertl/eb70.C 3826058150b ./gcc/testsuite/g++.old-deja/g++.robertl/eb71.C 3782517804b ./gcc/testsuite/g++.old-deja/g++.robertl/eb73.C *************** *** 11639,11645 **** 2546436998b ./gcc/testsuite/g++.old-deja/g++.robertl/eb76.C 2308966043b ./gcc/testsuite/g++.old-deja/g++.robertl/eb77.C 3644883412b ./gcc/testsuite/g++.old-deja/g++.robertl/eb79.C ! 718049317b ./gcc/testsuite/g++.old-deja/g++.robertl/eb7.C 1974141968b ./gcc/testsuite/g++.old-deja/g++.robertl/eb80.C 3623034003b ./gcc/testsuite/g++.old-deja/g++.robertl/eb81.C 303859604b ./gcc/testsuite/g++.old-deja/g++.robertl/eb82.C --- 8958,8964 ---- 2546436998b ./gcc/testsuite/g++.old-deja/g++.robertl/eb76.C 2308966043b ./gcc/testsuite/g++.old-deja/g++.robertl/eb77.C 3644883412b ./gcc/testsuite/g++.old-deja/g++.robertl/eb79.C ! 3708449542b ./gcc/testsuite/g++.old-deja/g++.robertl/eb8.C 1974141968b ./gcc/testsuite/g++.old-deja/g++.robertl/eb80.C 3623034003b ./gcc/testsuite/g++.old-deja/g++.robertl/eb81.C 303859604b ./gcc/testsuite/g++.old-deja/g++.robertl/eb82.C *************** *** 11648,11654 **** 83084630b ./gcc/testsuite/g++.old-deja/g++.robertl/eb86.C 637629215b ./gcc/testsuite/g++.old-deja/g++.robertl/eb87.C 15844958b ./gcc/testsuite/g++.old-deja/g++.robertl/eb88.C ! 3708449542b ./gcc/testsuite/g++.old-deja/g++.robertl/eb8.C 1724324673b ./gcc/testsuite/g++.old-deja/g++.robertl/eb90.C 2024296388b ./gcc/testsuite/g++.old-deja/g++.robertl/eb91.C 2107259564b ./gcc/testsuite/g++.old-deja/g++.robertl/eb92.C --- 8967,8973 ---- 83084630b ./gcc/testsuite/g++.old-deja/g++.robertl/eb86.C 637629215b ./gcc/testsuite/g++.old-deja/g++.robertl/eb87.C 15844958b ./gcc/testsuite/g++.old-deja/g++.robertl/eb88.C ! 3273280926b ./gcc/testsuite/g++.old-deja/g++.robertl/eb9.C 1724324673b ./gcc/testsuite/g++.old-deja/g++.robertl/eb90.C 2024296388b ./gcc/testsuite/g++.old-deja/g++.robertl/eb91.C 2107259564b ./gcc/testsuite/g++.old-deja/g++.robertl/eb92.C *************** *** 11658,11667 **** 2908163544b ./gcc/testsuite/g++.old-deja/g++.robertl/eb97.C 131102227b ./gcc/testsuite/g++.old-deja/g++.robertl/eb98.C 2054173722b ./gcc/testsuite/g++.old-deja/g++.robertl/eb99.C - 3273280926b ./gcc/testsuite/g++.old-deja/g++.robertl/eb9.C - 3496760893b ./gcc/testsuite/g++.old-deja/g++.robertl/ebnull.C 1294688249b ./gcc/testsuite/g++.old-deja/g++.robertl/ebnull-cast.C 2390910991b ./gcc/testsuite/g++.old-deja/g++.robertl/ebnull-oldcast.C 3321525464b ./gcc/testsuite/g++.old-deja/g++.robertl/eh990323-1.C 349170821b ./gcc/testsuite/g++.old-deja/g++.robertl/eh990323-2.C 2742680950b ./gcc/testsuite/g++.old-deja/g++.robertl/eh990323-3.C --- 8977,8985 ---- 2908163544b ./gcc/testsuite/g++.old-deja/g++.robertl/eb97.C 131102227b ./gcc/testsuite/g++.old-deja/g++.robertl/eb98.C 2054173722b ./gcc/testsuite/g++.old-deja/g++.robertl/eb99.C 1294688249b ./gcc/testsuite/g++.old-deja/g++.robertl/ebnull-cast.C 2390910991b ./gcc/testsuite/g++.old-deja/g++.robertl/ebnull-oldcast.C + 3496760893b ./gcc/testsuite/g++.old-deja/g++.robertl/ebnull.C 3321525464b ./gcc/testsuite/g++.old-deja/g++.robertl/eh990323-1.C 349170821b ./gcc/testsuite/g++.old-deja/g++.robertl/eh990323-2.C 2742680950b ./gcc/testsuite/g++.old-deja/g++.robertl/eh990323-3.C *************** *** 11672,11713 **** 424851899b ./gcc/testsuite/g++.old-deja/g++.robertl/ice990323-3.C 1966976843b ./gcc/testsuite/g++.old-deja/g++.robertl/ice990323-4.C 2792305431b ./gcc/testsuite/g++.old-deja/g++.robertl/ice990323-5.C - 3593716546b ./gcc/testsuite/g++.old-deja/g++.robertl/README 2167858031b ./gcc/testsuite/g++.old-deja/g++.warn/cast-align1.C 2257841595b ./gcc/testsuite/g++.old-deja/g++.warn/compare1.C 478428580b ./gcc/testsuite/g++.old-deja/g++.warn/flow1.C - 1434994100b ./gcc/testsuite/g++.old-deja/g++.warn/impint2.C 228848226b ./gcc/testsuite/g++.old-deja/g++.warn/impint.C 308484502b ./gcc/testsuite/g++.old-deja/g++.warn/inline.C 3053994732b ./gcc/testsuite/g++.old-deja/g++.warn/iomanip.C 3603456747b ./gcc/testsuite/g++.old-deja/g++.warn/virt1.C 1241992731b ./gcc/testsuite/g++.old-deja/old-deja.exp ! 3239465090b ./gcc/testsuite/lib/compat.exp 1271260439b ./gcc/testsuite/lib/c-torture.exp ! 827216288b ./gcc/testsuite/lib/file-format.exp 246962046b ./gcc/testsuite/lib/f-torture.exp 2197210451b ./gcc/testsuite/lib/g77-dg.exp ! 2606618639b ./gcc/testsuite/lib/g77.exp 3365202398b ./gcc/testsuite/lib/gcc-defs.exp 3402161270b ./gcc/testsuite/lib/gcc-dg.exp ! 1886578930b ./gcc/testsuite/lib/gcc.exp 310116090b ./gcc/testsuite/lib/gcov.exp ! 1025717576b ./gcc/testsuite/lib/g++-dg.exp ! 698932340b ./gcc/testsuite/lib/g++.exp 1785660070b ./gcc/testsuite/lib/mike-g77.exp 3188273403b ./gcc/testsuite/lib/mike-gcc.exp - 2511438650b ./gcc/testsuite/lib/mike-g++.exp 576875699b ./gcc/testsuite/lib/objc-dg.exp - 2912756680b ./gcc/testsuite/lib/objc.exp 86722252b ./gcc/testsuite/lib/objc-torture.exp 807926328b ./gcc/testsuite/lib/old-dejagnu.exp 1067355345b ./gcc/testsuite/lib/profopt.exp 1819066650b ./gcc/testsuite/lib/prune.exp 3687014284b ./gcc/testsuite/lib/scanasm.exp 3463101165b ./gcc/testsuite/lib/target-supports.exp 397114874b ./gcc/testsuite/lib/treelang.exp - 3665869615b ./gcc/testsuite/objc/compile/20011211-1.m - 1806367206b ./gcc/testsuite/objc/compile/compile.exp 1369080733b ./gcc/testsuite/objc.dg/alias.m 3457756194b ./gcc/testsuite/objc.dg/bitfield-1.m 1257506925b ./gcc/testsuite/objc.dg/bitfield-2.m --- 8990,11786 ---- 424851899b ./gcc/testsuite/g++.old-deja/g++.robertl/ice990323-3.C 1966976843b ./gcc/testsuite/g++.old-deja/g++.robertl/ice990323-4.C 2792305431b ./gcc/testsuite/g++.old-deja/g++.robertl/ice990323-5.C 2167858031b ./gcc/testsuite/g++.old-deja/g++.warn/cast-align1.C 2257841595b ./gcc/testsuite/g++.old-deja/g++.warn/compare1.C 478428580b ./gcc/testsuite/g++.old-deja/g++.warn/flow1.C 228848226b ./gcc/testsuite/g++.old-deja/g++.warn/impint.C + 1434994100b ./gcc/testsuite/g++.old-deja/g++.warn/impint2.C 308484502b ./gcc/testsuite/g++.old-deja/g++.warn/inline.C 3053994732b ./gcc/testsuite/g++.old-deja/g++.warn/iomanip.C 3603456747b ./gcc/testsuite/g++.old-deja/g++.warn/virt1.C 1241992731b ./gcc/testsuite/g++.old-deja/old-deja.exp ! 2981452976b ./gcc/testsuite/g77.dg/12632.f ! 2710099993b ./gcc/testsuite/g77.dg/20010216-1.f ! 88255324b ./gcc/testsuite/g77.dg/7388.f ! 2513750825b ./gcc/testsuite/g77.dg/bprob/bprob.exp ! 211215127b ./gcc/testsuite/g77.dg/bprob/g77-bprob-1.f ! 1815830648b ./gcc/testsuite/g77.dg/dg.exp ! 4034508570b ./gcc/testsuite/g77.dg/f77-edit-apostrophe-out.f ! 245196963b ./gcc/testsuite/g77.dg/f77-edit-colon-out.f ! 549518023b ./gcc/testsuite/g77.dg/f77-edit-h-out.f ! 3116993853b ./gcc/testsuite/g77.dg/f77-edit-i-in.f ! 462852590b ./gcc/testsuite/g77.dg/f77-edit-i-out.f ! 1014931200b ./gcc/testsuite/g77.dg/f77-edit-s-out.f ! 188941937b ./gcc/testsuite/g77.dg/f77-edit-slash-out.f ! 583752102b ./gcc/testsuite/g77.dg/f77-edit-t-in.f ! 819764799b ./gcc/testsuite/g77.dg/f77-edit-t-out.f ! 3976930856b ./gcc/testsuite/g77.dg/f77-edit-x-out.f ! 3692598063b ./gcc/testsuite/g77.dg/fbackslash.f ! 3349950140b ./gcc/testsuite/g77.dg/fcase-preserve.f ! 3493107241b ./gcc/testsuite/g77.dg/ff90-1.f ! 846110140b ./gcc/testsuite/g77.dg/ffixed-line-length-0.f ! 306302525b ./gcc/testsuite/g77.dg/ffixed-line-length-132.f ! 1293833923b ./gcc/testsuite/g77.dg/ffixed-line-length-7.f ! 256008601b ./gcc/testsuite/g77.dg/ffixed-line-length-72.f ! 2426259256b ./gcc/testsuite/g77.dg/ffixed-line-length-none.f ! 382313186b ./gcc/testsuite/g77.dg/ffree-form-1.f ! 1427613779b ./gcc/testsuite/g77.dg/fno-backslash.f ! 1787673713b ./gcc/testsuite/g77.dg/fno-f90-1.f ! 1073584992b ./gcc/testsuite/g77.dg/fno-fixed-form-1.f ! 2730066868b ./gcc/testsuite/g77.dg/fno-onetrip.f ! 109115498b ./gcc/testsuite/g77.dg/fno-typeless-boz.f ! 2720105997b ./gcc/testsuite/g77.dg/fno-underscoring.f ! 614291430b ./gcc/testsuite/g77.dg/fno-vxt-1.f ! 646478354b ./gcc/testsuite/g77.dg/fonetrip.f ! 298378793b ./gcc/testsuite/g77.dg/ftypeless-boz.f ! 1970388396b ./gcc/testsuite/g77.dg/fugly-assumed.f ! 813122842b ./gcc/testsuite/g77.dg/funderscoring.f ! 2755287889b ./gcc/testsuite/g77.dg/fvxt-1.f ! 4218369628b ./gcc/testsuite/g77.dg/gcov/gcov-1.f ! 2262587727b ./gcc/testsuite/g77.dg/gcov/gcov-1.x ! 3439770285b ./gcc/testsuite/g77.dg/gcov/gcov.exp ! 2336318971b ./gcc/testsuite/g77.dg/pr3743-1.f ! 3986109564b ./gcc/testsuite/g77.dg/pr3743-2.f ! 202729794b ./gcc/testsuite/g77.dg/pr3743-3.f ! 2533314951b ./gcc/testsuite/g77.dg/pr3743-4.f ! 3959051916b ./gcc/testsuite/g77.dg/pr5473.f ! 3348380351b ./gcc/testsuite/g77.dg/pr9258.f ! 724796683b ./gcc/testsuite/g77.dg/strlen0.f ! 301037011b ./gcc/testsuite/g77.f-torture/compile/13060.f ! 2382988813b ./gcc/testsuite/g77.f-torture/compile/19990218-0.f ! 687255164b ./gcc/testsuite/g77.f-torture/compile/19990305-0.f ! 4067537756b ./gcc/testsuite/g77.f-torture/compile/19990419-0.f ! 3411435248b ./gcc/testsuite/g77.f-torture/compile/19990502-0.f ! 1869005611b ./gcc/testsuite/g77.f-torture/compile/19990502-1.f ! 4129788740b ./gcc/testsuite/g77.f-torture/compile/19990525-0.f ! 2117801028b ./gcc/testsuite/g77.f-torture/compile/19990826-1.f ! 1740583941b ./gcc/testsuite/g77.f-torture/compile/19990826-3.f ! 2822256200b ./gcc/testsuite/g77.f-torture/compile/19990905-0.f ! 1729432512b ./gcc/testsuite/g77.f-torture/compile/19990905-2.f ! 3873649497b ./gcc/testsuite/g77.f-torture/compile/20000412-1.f ! 2840421610b ./gcc/testsuite/g77.f-torture/compile/20000511-1.f ! 2723712181b ./gcc/testsuite/g77.f-torture/compile/20000511-2.f ! 82013928b ./gcc/testsuite/g77.f-torture/compile/20000518.f ! 412413004b ./gcc/testsuite/g77.f-torture/compile/20000601-1.f ! 3180214474b ./gcc/testsuite/g77.f-torture/compile/20000601-2.f ! 4055621021b ./gcc/testsuite/g77.f-torture/compile/20000629-1.f ! 2336002500b ./gcc/testsuite/g77.f-torture/compile/20000630-2.f ! 3970776632b ./gcc/testsuite/g77.f-torture/compile/20010115.f ! 3772314415b ./gcc/testsuite/g77.f-torture/compile/20010321-1.f ! 2213180372b ./gcc/testsuite/g77.f-torture/compile/20010426.f ! 756384820b ./gcc/testsuite/g77.f-torture/compile/20010519-1.f ! 139739226b ./gcc/testsuite/g77.f-torture/compile/20020307-1.f ! 3911540126b ./gcc/testsuite/g77.f-torture/compile/20030326-1.f ! 1776224360b ./gcc/testsuite/g77.f-torture/compile/960317-1.f ! 2528706840b ./gcc/testsuite/g77.f-torture/compile/970125-0.f ! 3100920780b ./gcc/testsuite/g77.f-torture/compile/970915-0.f ! 3454578083b ./gcc/testsuite/g77.f-torture/compile/980310-1.f ! 1063918752b ./gcc/testsuite/g77.f-torture/compile/980310-2.f ! 3699662809b ./gcc/testsuite/g77.f-torture/compile/980310-3.f ! 1046454488b ./gcc/testsuite/g77.f-torture/compile/980310-4.f ! 581995045b ./gcc/testsuite/g77.f-torture/compile/980310-6.f ! 758602941b ./gcc/testsuite/g77.f-torture/compile/980310-7.f ! 3264996889b ./gcc/testsuite/g77.f-torture/compile/980310-8.f ! 55455134b ./gcc/testsuite/g77.f-torture/compile/980419-2.f ! 2284181108b ./gcc/testsuite/g77.f-torture/compile/980424-0.f ! 585713859b ./gcc/testsuite/g77.f-torture/compile/980427-0.f ! 2853235618b ./gcc/testsuite/g77.f-torture/compile/980519-2.f ! 2138526345b ./gcc/testsuite/g77.f-torture/compile/980729-0.f ! 1069123470b ./gcc/testsuite/g77.f-torture/compile/981117-1.f ! 2053478041b ./gcc/testsuite/g77.f-torture/compile/990115-1.f ! 3973737388b ./gcc/testsuite/g77.f-torture/compile/alpha1.f ! 2107279947b ./gcc/testsuite/g77.f-torture/compile/alpha1.x ! 4148688482b ./gcc/testsuite/g77.f-torture/compile/compile.exp ! 883444817b ./gcc/testsuite/g77.f-torture/compile/cpp.F ! 1347946300b ./gcc/testsuite/g77.f-torture/compile/cpp2.F ! 407305629b ./gcc/testsuite/g77.f-torture/compile/toon_1.f ! 3599334924b ./gcc/testsuite/g77.f-torture/execute/10197.f ! 109014377b ./gcc/testsuite/g77.f-torture/execute/13037.f ! 842468456b ./gcc/testsuite/g77.f-torture/execute/1832.f ! 1875205813b ./gcc/testsuite/g77.f-torture/execute/19981119-0.f ! 207133658b ./gcc/testsuite/g77.f-torture/execute/19990313-0.f ! 1311165077b ./gcc/testsuite/g77.f-torture/execute/19990313-1.f ! 2827041779b ./gcc/testsuite/g77.f-torture/execute/19990313-2.f ! 3627217083b ./gcc/testsuite/g77.f-torture/execute/19990313-3.f ! 334442269b ./gcc/testsuite/g77.f-torture/execute/19990325-0.f ! 2498790248b ./gcc/testsuite/g77.f-torture/execute/19990325-1.f ! 1566943825b ./gcc/testsuite/g77.f-torture/execute/19990419-1.f ! 1702408878b ./gcc/testsuite/g77.f-torture/execute/19990826-0.f ! 548549288b ./gcc/testsuite/g77.f-torture/execute/19990826-2.f ! 2245832686b ./gcc/testsuite/g77.f-torture/execute/20000503-1.f ! 119817854b ./gcc/testsuite/g77.f-torture/execute/20001111.f ! 3778266196b ./gcc/testsuite/g77.f-torture/execute/20001201.f ! 1721706271b ./gcc/testsuite/g77.f-torture/execute/20001201.x ! 3482653018b ./gcc/testsuite/g77.f-torture/execute/20010116.f ! 104441706b ./gcc/testsuite/g77.f-torture/execute/20010426.f ! 2134591728b ./gcc/testsuite/g77.f-torture/execute/20010430.f ! 2127502131b ./gcc/testsuite/g77.f-torture/execute/20010610.f ! 1835626441b ./gcc/testsuite/g77.f-torture/execute/5122.f ! 93616433b ./gcc/testsuite/g77.f-torture/execute/6177.f ! 4276687406b ./gcc/testsuite/g77.f-torture/execute/6367.f ! 1721706271b ./gcc/testsuite/g77.f-torture/execute/6367.x ! 166046708b ./gcc/testsuite/g77.f-torture/execute/947.f ! 2872624206b ./gcc/testsuite/g77.f-torture/execute/970625-2.f ! 2944713164b ./gcc/testsuite/g77.f-torture/execute/970816-3.f ! 3043987240b ./gcc/testsuite/g77.f-torture/execute/971102-1.f ! 1356010785b ./gcc/testsuite/g77.f-torture/execute/980520-1.f ! 2822825054b ./gcc/testsuite/g77.f-torture/execute/980628-0.f ! 731282896b ./gcc/testsuite/g77.f-torture/execute/980628-1.f ! 1154425496b ./gcc/testsuite/g77.f-torture/execute/980628-10.f ! 652392894b ./gcc/testsuite/g77.f-torture/execute/980628-2.f ! 3891656681b ./gcc/testsuite/g77.f-torture/execute/980628-3.f ! 4188896500b ./gcc/testsuite/g77.f-torture/execute/980628-4.f ! 2107279947b ./gcc/testsuite/g77.f-torture/execute/980628-4.x ! 3480269714b ./gcc/testsuite/g77.f-torture/execute/980628-5.f ! 2107279947b ./gcc/testsuite/g77.f-torture/execute/980628-5.x ! 1467613590b ./gcc/testsuite/g77.f-torture/execute/980628-6.f ! 2107279947b ./gcc/testsuite/g77.f-torture/execute/980628-6.x ! 1104933088b ./gcc/testsuite/g77.f-torture/execute/980628-7.f ! 1264093278b ./gcc/testsuite/g77.f-torture/execute/980628-8.f ! 2969694593b ./gcc/testsuite/g77.f-torture/execute/980628-9.f ! 1979661682b ./gcc/testsuite/g77.f-torture/execute/980701-0.f ! 2199388550b ./gcc/testsuite/g77.f-torture/execute/980701-1.f ! 2519492399b ./gcc/testsuite/g77.f-torture/execute/alpha2.f ! 2107279947b ./gcc/testsuite/g77.f-torture/execute/alpha2.x ! 2259027475b ./gcc/testsuite/g77.f-torture/execute/auto0.f ! 2107279947b ./gcc/testsuite/g77.f-torture/execute/auto0.x ! 4202240464b ./gcc/testsuite/g77.f-torture/execute/auto1.f ! 2107279947b ./gcc/testsuite/g77.f-torture/execute/auto1.x ! 232981110b ./gcc/testsuite/g77.f-torture/execute/cabs.f ! 877306443b ./gcc/testsuite/g77.f-torture/execute/claus.f ! 2682388459b ./gcc/testsuite/g77.f-torture/execute/complex_1.f ! 274053025b ./gcc/testsuite/g77.f-torture/execute/cpp.F ! 268027241b ./gcc/testsuite/g77.f-torture/execute/cpp2.F ! 3689042274b ./gcc/testsuite/g77.f-torture/execute/dcomplex.f ! 2431087293b ./gcc/testsuite/g77.f-torture/execute/dnrm2.f ! 1012852742b ./gcc/testsuite/g77.f-torture/execute/erfc.f ! 574860802b ./gcc/testsuite/g77.f-torture/execute/execute.exp ! 2348837361b ./gcc/testsuite/g77.f-torture/execute/exp.f ! 1166305221b ./gcc/testsuite/g77.f-torture/execute/f90-intrinsic-bit.f ! 1401151480b ./gcc/testsuite/g77.f-torture/execute/f90-intrinsic-mathematical.f ! 296501581b ./gcc/testsuite/g77.f-torture/execute/f90-intrinsic-numeric.f ! 1619227376b ./gcc/testsuite/g77.f-torture/execute/intrinsic-f2c-z.f ! 2512429495b ./gcc/testsuite/g77.f-torture/execute/intrinsic-unix-bessel.f ! 846341057b ./gcc/testsuite/g77.f-torture/execute/intrinsic-unix-erf.f ! 3837275230b ./gcc/testsuite/g77.f-torture/execute/intrinsic-vax-cd.f ! 1448802159b ./gcc/testsuite/g77.f-torture/execute/intrinsic77.f ! 3527337523b ./gcc/testsuite/g77.f-torture/execute/io0.f ! 1721706271b ./gcc/testsuite/g77.f-torture/execute/io0.x ! 1499748556b ./gcc/testsuite/g77.f-torture/execute/io1.f ! 1721706271b ./gcc/testsuite/g77.f-torture/execute/io1.x ! 3838992103b ./gcc/testsuite/g77.f-torture/execute/labug1.f ! 273345472b ./gcc/testsuite/g77.f-torture/execute/large_vec.f ! 775036014b ./gcc/testsuite/g77.f-torture/execute/le.f ! 873992663b ./gcc/testsuite/g77.f-torture/execute/select.f ! 3780459526b ./gcc/testsuite/g77.f-torture/execute/short.f ! 85764886b ./gcc/testsuite/g77.f-torture/execute/u77-test.f ! 991484451b ./gcc/testsuite/g77.f-torture/execute/u77-test.x ! 2234422141b ./gcc/testsuite/g77.f-torture/noncompile/19981216-0.f ! 2509327097b ./gcc/testsuite/g77.f-torture/noncompile/19990218-1.f ! 684708897b ./gcc/testsuite/g77.f-torture/noncompile/19990826-4.f ! 3593377062b ./gcc/testsuite/g77.f-torture/noncompile/19990905-1.f ! 118086646b ./gcc/testsuite/g77.f-torture/noncompile/9263.f ! 3649968898b ./gcc/testsuite/g77.f-torture/noncompile/970626-2.f ! 3382416911b ./gcc/testsuite/g77.f-torture/noncompile/980615-0.f ! 4269744935b ./gcc/testsuite/g77.f-torture/noncompile/980616-0.f ! 2374591598b ./gcc/testsuite/g77.f-torture/noncompile/check0.f ! 351555731b ./gcc/testsuite/g77.f-torture/noncompile/noncompile.exp ! 276625067b ./gcc/testsuite/g77.f-torture/noncompile/select_no_compile.f ! 2075770423b ./gcc/testsuite/gcc.c-torture/ChangeLog.0 ! 1091110310b ./gcc/testsuite/gcc.c-torture/compat/strct-layout.c ! 684784126b ./gcc/testsuite/gcc.c-torture/compat/struct-align.c ! 92980596b ./gcc/testsuite/gcc.c-torture/compat/struct-big.c ! 2993970556b ./gcc/testsuite/gcc.c-torture/compat/struct-i.c ! 1373131310b ./gcc/testsuite/gcc.c-torture/compat/struct-ic.c ! 367335173b ./gcc/testsuite/gcc.c-torture/compat/struct-ii.c ! 954170066b ./gcc/testsuite/gcc.c-torture/compat/struct-ret-1.c ! 452836178b ./gcc/testsuite/gcc.c-torture/compile/20000105-1.c ! 1901634825b ./gcc/testsuite/gcc.c-torture/compile/20000105-2.c ! 3139355726b ./gcc/testsuite/gcc.c-torture/compile/20000120-1.c ! 193146344b ./gcc/testsuite/gcc.c-torture/compile/20000120-2.c ! 3770371830b ./gcc/testsuite/gcc.c-torture/compile/20000127-1.c ! 1457334923b ./gcc/testsuite/gcc.c-torture/compile/20000211-1.c ! 3072124491b ./gcc/testsuite/gcc.c-torture/compile/20000211-3.c ! 2487027780b ./gcc/testsuite/gcc.c-torture/compile/20000224-1.c ! 976060843b ./gcc/testsuite/gcc.c-torture/compile/20000314-1.c ! 2716819908b ./gcc/testsuite/gcc.c-torture/compile/20000314-2.c ! 3323098889b ./gcc/testsuite/gcc.c-torture/compile/20000319-1.c ! 621983670b ./gcc/testsuite/gcc.c-torture/compile/20000326-1.c ! 362965832b ./gcc/testsuite/gcc.c-torture/compile/20000326-2.c ! 1360671142b ./gcc/testsuite/gcc.c-torture/compile/20000329-1.c ! 1376990121b ./gcc/testsuite/gcc.c-torture/compile/20000403-1.c ! 1295018105b ./gcc/testsuite/gcc.c-torture/compile/20000403-2.c ! 2994009121b ./gcc/testsuite/gcc.c-torture/compile/20000405-1.c ! 1202553741b ./gcc/testsuite/gcc.c-torture/compile/20000405-2.c ! 1972736685b ./gcc/testsuite/gcc.c-torture/compile/20000405-3.c ! 4185438508b ./gcc/testsuite/gcc.c-torture/compile/20000412-1.c ! 1020690516b ./gcc/testsuite/gcc.c-torture/compile/20000412-2.c ! 606471227b ./gcc/testsuite/gcc.c-torture/compile/20000420-1.c ! 3618930753b ./gcc/testsuite/gcc.c-torture/compile/20000420-2.c ! 1513651895b ./gcc/testsuite/gcc.c-torture/compile/20000427-1.c ! 1253394561b ./gcc/testsuite/gcc.c-torture/compile/20000502-1.c ! 2301846307b ./gcc/testsuite/gcc.c-torture/compile/20000504-1.c ! 4216707490b ./gcc/testsuite/gcc.c-torture/compile/20000511-1.c ! 160078686b ./gcc/testsuite/gcc.c-torture/compile/20000517-1.c ! 138460064b ./gcc/testsuite/gcc.c-torture/compile/20000518-1.c ! 4277321614b ./gcc/testsuite/gcc.c-torture/compile/20000523-1.c ! 894948419b ./gcc/testsuite/gcc.c-torture/compile/20000605-1.c ! 1801476756b ./gcc/testsuite/gcc.c-torture/compile/20000606-1.c ! 3807623957b ./gcc/testsuite/gcc.c-torture/compile/20000609-1.c ! 3889196710b ./gcc/testsuite/gcc.c-torture/compile/20000629-1.c ! 2019168881b ./gcc/testsuite/gcc.c-torture/compile/20000701-1.c ! 23561090b ./gcc/testsuite/gcc.c-torture/compile/20000717-1.c ! 1282603692b ./gcc/testsuite/gcc.c-torture/compile/20000718.c ! 1628213540b ./gcc/testsuite/gcc.c-torture/compile/20000728-1.c ! 1312817714b ./gcc/testsuite/gcc.c-torture/compile/20000802-1.c ! 726930164b ./gcc/testsuite/gcc.c-torture/compile/20000803-1.c ! 221685889b ./gcc/testsuite/gcc.c-torture/compile/20000804-1.c ! 3819705114b ./gcc/testsuite/gcc.c-torture/compile/20000804-1.x ! 14592370b ./gcc/testsuite/gcc.c-torture/compile/20000818-1.c ! 3951998464b ./gcc/testsuite/gcc.c-torture/compile/20000825-1.c ! 568900271b ./gcc/testsuite/gcc.c-torture/compile/20000827-1.c ! 1702972966b ./gcc/testsuite/gcc.c-torture/compile/20000922-1.c ! 1072305501b ./gcc/testsuite/gcc.c-torture/compile/20000923-1.c ! 3797844565b ./gcc/testsuite/gcc.c-torture/compile/20001018-1.c ! 1683967360b ./gcc/testsuite/gcc.c-torture/compile/20001024-1.c ! 2747210984b ./gcc/testsuite/gcc.c-torture/compile/20001109-1.c ! 1480527842b ./gcc/testsuite/gcc.c-torture/compile/20001109-2.c ! 1361242877b ./gcc/testsuite/gcc.c-torture/compile/20001116-1.c ! 3966980994b ./gcc/testsuite/gcc.c-torture/compile/20001121-1.c ! 599106867b ./gcc/testsuite/gcc.c-torture/compile/20001123-1.c ! 533599449b ./gcc/testsuite/gcc.c-torture/compile/20001123-2.c ! 3673931755b ./gcc/testsuite/gcc.c-torture/compile/20001205-1.c ! 2693813894b ./gcc/testsuite/gcc.c-torture/compile/20001205-1.x ! 1735535039b ./gcc/testsuite/gcc.c-torture/compile/20001212-1.c ! 2993397009b ./gcc/testsuite/gcc.c-torture/compile/20001221-1.c ! 2331416953b ./gcc/testsuite/gcc.c-torture/compile/20001222-1.c ! 1872827667b ./gcc/testsuite/gcc.c-torture/compile/20001226-1.c ! 3985327824b ./gcc/testsuite/gcc.c-torture/compile/20001226-1.x ! 4099141482b ./gcc/testsuite/gcc.c-torture/compile/20010102-1.c ! 2413955943b ./gcc/testsuite/gcc.c-torture/compile/20010107-1.c ! 1898226085b ./gcc/testsuite/gcc.c-torture/compile/20010112-1.c ! 2489493145b ./gcc/testsuite/gcc.c-torture/compile/20010113-1.c ! 297170965b ./gcc/testsuite/gcc.c-torture/compile/20010114-1.c ! 419921862b ./gcc/testsuite/gcc.c-torture/compile/20010114-2.c ! 1452007589b ./gcc/testsuite/gcc.c-torture/compile/20010117-1.c ! 704576096b ./gcc/testsuite/gcc.c-torture/compile/20010117-2.c ! 3392519430b ./gcc/testsuite/gcc.c-torture/compile/20010118-1.c ! 3355150280b ./gcc/testsuite/gcc.c-torture/compile/20010124-1.c ! 1731094577b ./gcc/testsuite/gcc.c-torture/compile/20010202-1.c ! 459778149b ./gcc/testsuite/gcc.c-torture/compile/20010209-1.c ! 620156961b ./gcc/testsuite/gcc.c-torture/compile/20010226-1.c ! 501795051b ./gcc/testsuite/gcc.c-torture/compile/20010227-1.c ! 1832317029b ./gcc/testsuite/gcc.c-torture/compile/20010313-1.c ! 2854417844b ./gcc/testsuite/gcc.c-torture/compile/20010320-1.c ! 3271306723b ./gcc/testsuite/gcc.c-torture/compile/20010326-1.c ! 2222955049b ./gcc/testsuite/gcc.c-torture/compile/20010327-1.c ! 3399421780b ./gcc/testsuite/gcc.c-torture/compile/20010328-1.c ! 3356008690b ./gcc/testsuite/gcc.c-torture/compile/20010329-1.c ! 4152637354b ./gcc/testsuite/gcc.c-torture/compile/20010404-1.c ! 1548469760b ./gcc/testsuite/gcc.c-torture/compile/20010408-1.c ! 3063630520b ./gcc/testsuite/gcc.c-torture/compile/20010421-1.c ! 3134579946b ./gcc/testsuite/gcc.c-torture/compile/20010423-1.c ! 2289909284b ./gcc/testsuite/gcc.c-torture/compile/20010426-1.c ! 2357536931b ./gcc/testsuite/gcc.c-torture/compile/20010503-1.c ! 1212631565b ./gcc/testsuite/gcc.c-torture/compile/20010510-1.c ! 1882079811b ./gcc/testsuite/gcc.c-torture/compile/20010516-1.c ! 3166989448b ./gcc/testsuite/gcc.c-torture/compile/20010518-1.c ! 3017611134b ./gcc/testsuite/gcc.c-torture/compile/20010518-2.c ! 2404992642b ./gcc/testsuite/gcc.c-torture/compile/20010518-2.x ! 3272357537b ./gcc/testsuite/gcc.c-torture/compile/20010525-1.c ! 475581102b ./gcc/testsuite/gcc.c-torture/compile/20010605-1.c ! 2936945185b ./gcc/testsuite/gcc.c-torture/compile/20010605-2.c ! 1294346331b ./gcc/testsuite/gcc.c-torture/compile/20010605-3.c ! 1636067950b ./gcc/testsuite/gcc.c-torture/compile/20010610-1.c ! 3077114319b ./gcc/testsuite/gcc.c-torture/compile/20010611-1.c ! 2584744929b ./gcc/testsuite/gcc.c-torture/compile/20010701-1.c ! 3815198051b ./gcc/testsuite/gcc.c-torture/compile/20010706-1.c ! 2713093522b ./gcc/testsuite/gcc.c-torture/compile/20010711-1.c ! 2299173088b ./gcc/testsuite/gcc.c-torture/compile/20010711-2.c ! 2571658330b ./gcc/testsuite/gcc.c-torture/compile/20010714-1.c ! 3287379546b ./gcc/testsuite/gcc.c-torture/compile/20010824-1.c ! 246682254b ./gcc/testsuite/gcc.c-torture/compile/20010903-1.c ! 2923439609b ./gcc/testsuite/gcc.c-torture/compile/20010903-2.c ! 4222197564b ./gcc/testsuite/gcc.c-torture/compile/20010911-1.c ! 1179192833b ./gcc/testsuite/gcc.c-torture/compile/20011010-1.c ! 3994663975b ./gcc/testsuite/gcc.c-torture/compile/20011023-1.c ! 1413783183b ./gcc/testsuite/gcc.c-torture/compile/20011029-1.c ! 2871784009b ./gcc/testsuite/gcc.c-torture/compile/20011106-1.c ! 3630952349b ./gcc/testsuite/gcc.c-torture/compile/20011106-2.c ! 259957404b ./gcc/testsuite/gcc.c-torture/compile/20011109-1.c ! 2924929463b ./gcc/testsuite/gcc.c-torture/compile/20011114-1.c ! 3434496008b ./gcc/testsuite/gcc.c-torture/compile/20011114-2.c ! 2760161415b ./gcc/testsuite/gcc.c-torture/compile/20011114-3.c ! 3547339064b ./gcc/testsuite/gcc.c-torture/compile/20011114-4.c ! 3653343012b ./gcc/testsuite/gcc.c-torture/compile/20011119-1.c ! 2885054257b ./gcc/testsuite/gcc.c-torture/compile/20011119-2.c ! 174415171b ./gcc/testsuite/gcc.c-torture/compile/20011130-1.c ! 1745547919b ./gcc/testsuite/gcc.c-torture/compile/20011130-2.c ! 3987052556b ./gcc/testsuite/gcc.c-torture/compile/20011205-1.c ! 1179199950b ./gcc/testsuite/gcc.c-torture/compile/20011217-1.c ! 315452475b ./gcc/testsuite/gcc.c-torture/compile/20011217-2.c ! 3416537061b ./gcc/testsuite/gcc.c-torture/compile/20011218-1.c ! 2149414673b ./gcc/testsuite/gcc.c-torture/compile/20011219-1.c ! 1484609615b ./gcc/testsuite/gcc.c-torture/compile/20011219-2.c ! 3590162726b ./gcc/testsuite/gcc.c-torture/compile/20011229-1.c ! 1849951092b ./gcc/testsuite/gcc.c-torture/compile/20011229-2.c ! 3637150343b ./gcc/testsuite/gcc.c-torture/compile/20020103-1.c ! 3505269843b ./gcc/testsuite/gcc.c-torture/compile/20020106-1.c ! 3398919425b ./gcc/testsuite/gcc.c-torture/compile/20020109-1.c ! 2348431150b ./gcc/testsuite/gcc.c-torture/compile/20020109-2.c ! 4197667212b ./gcc/testsuite/gcc.c-torture/compile/20020110.c ! 208428249b ./gcc/testsuite/gcc.c-torture/compile/20020116-1.c ! 966527433b ./gcc/testsuite/gcc.c-torture/compile/20020120-1.c ! 3002186865b ./gcc/testsuite/gcc.c-torture/compile/20020121-1.c ! 2862264485b ./gcc/testsuite/gcc.c-torture/compile/20020206-1.c ! 1009994283b ./gcc/testsuite/gcc.c-torture/compile/20020210-1.c ! 1193130025b ./gcc/testsuite/gcc.c-torture/compile/20020303-1.c ! 1683706700b ./gcc/testsuite/gcc.c-torture/compile/20020304-1.c ! 3186842248b ./gcc/testsuite/gcc.c-torture/compile/20020304-2.c ! 1366050512b ./gcc/testsuite/gcc.c-torture/compile/20020309-1.c ! 1174986914b ./gcc/testsuite/gcc.c-torture/compile/20020309-2.c ! 1727441689b ./gcc/testsuite/gcc.c-torture/compile/20020312-1.c ! 2872650660b ./gcc/testsuite/gcc.c-torture/compile/20020312-1.x ! 16580553b ./gcc/testsuite/gcc.c-torture/compile/20020314-1.c ! 2378124589b ./gcc/testsuite/gcc.c-torture/compile/20020315-1.c ! 4029159547b ./gcc/testsuite/gcc.c-torture/compile/20020318-1.c ! 4089657504b ./gcc/testsuite/gcc.c-torture/compile/20020319-1.c ! 2837722984b ./gcc/testsuite/gcc.c-torture/compile/20020320-1.c ! 1380106070b ./gcc/testsuite/gcc.c-torture/compile/20020323-1.c ! 392286369b ./gcc/testsuite/gcc.c-torture/compile/20020330-1.c ! 4289507025b ./gcc/testsuite/gcc.c-torture/compile/20020409-1.c ! 631285907b ./gcc/testsuite/gcc.c-torture/compile/20020415-1.c ! 3246888365b ./gcc/testsuite/gcc.c-torture/compile/20020418-1.c ! 1318297601b ./gcc/testsuite/gcc.c-torture/compile/20020530-1.c ! 1207151280b ./gcc/testsuite/gcc.c-torture/compile/20020604-1.c ! 1992100052b ./gcc/testsuite/gcc.c-torture/compile/20020604-1.x ! 909926902b ./gcc/testsuite/gcc.c-torture/compile/20020605-1.c ! 168620187b ./gcc/testsuite/gcc.c-torture/compile/20020701-1.c ! 1534237110b ./gcc/testsuite/gcc.c-torture/compile/20020706-1.c ! 2582470567b ./gcc/testsuite/gcc.c-torture/compile/20020706-2.c ! 1098925370b ./gcc/testsuite/gcc.c-torture/compile/20020709-1.c ! 1564612166b ./gcc/testsuite/gcc.c-torture/compile/20020710-1.c ! 737897185b ./gcc/testsuite/gcc.c-torture/compile/20020715-1.c ! 1067410022b ./gcc/testsuite/gcc.c-torture/compile/20020910-1.c ! 4042098602b ./gcc/testsuite/gcc.c-torture/compile/20020926-1.c ! 337401938b ./gcc/testsuite/gcc.c-torture/compile/20020927-1.c ! 597765545b ./gcc/testsuite/gcc.c-torture/compile/20020930-1.c ! 170766928b ./gcc/testsuite/gcc.c-torture/compile/20021001-1.c ! 1009786556b ./gcc/testsuite/gcc.c-torture/compile/20021007-1.c ! 778329230b ./gcc/testsuite/gcc.c-torture/compile/20021015-1.c ! 25981859b ./gcc/testsuite/gcc.c-torture/compile/20021015-2.c ! 2807893986b ./gcc/testsuite/gcc.c-torture/compile/20021103-1.c ! 3505925860b ./gcc/testsuite/gcc.c-torture/compile/20021108-1.c ! 2007214546b ./gcc/testsuite/gcc.c-torture/compile/20021110.c ! 3537627700b ./gcc/testsuite/gcc.c-torture/compile/20021119-1.c ! 3188218514b ./gcc/testsuite/gcc.c-torture/compile/20021120-1.c ! 3735410464b ./gcc/testsuite/gcc.c-torture/compile/20021120-2.c ! 2007214546b ./gcc/testsuite/gcc.c-torture/compile/20021123-1.c ! 3188218514b ./gcc/testsuite/gcc.c-torture/compile/20021123-2.c ! 3735410464b ./gcc/testsuite/gcc.c-torture/compile/20021123-3.c ! 3537627700b ./gcc/testsuite/gcc.c-torture/compile/20021123-4.c ! 2814356441b ./gcc/testsuite/gcc.c-torture/compile/20021124-1.c ! 3155365897b ./gcc/testsuite/gcc.c-torture/compile/20021204-1.c ! 953842788b ./gcc/testsuite/gcc.c-torture/compile/20021205-1.c ! 3765901682b ./gcc/testsuite/gcc.c-torture/compile/20021212-1.c ! 1694594576b ./gcc/testsuite/gcc.c-torture/compile/20030110-1.c ! 3005267439b ./gcc/testsuite/gcc.c-torture/compile/20030125-1.c ! 3514558242b ./gcc/testsuite/gcc.c-torture/compile/20030206-1.c ! 4268170432b ./gcc/testsuite/gcc.c-torture/compile/20030219-1.c ! 3214532330b ./gcc/testsuite/gcc.c-torture/compile/20030305-1.c ! 3074411947b ./gcc/testsuite/gcc.c-torture/compile/20030314-1.c ! 1095885293b ./gcc/testsuite/gcc.c-torture/compile/20030330-1.c ! 3865220381b ./gcc/testsuite/gcc.c-torture/compile/20030405-1.c ! 3497948189b ./gcc/testsuite/gcc.c-torture/compile/20030418-1.c ! 139115612b ./gcc/testsuite/gcc.c-torture/compile/20030604-1.c ! 3168385659b ./gcc/testsuite/gcc.c-torture/compile/20030625-1.c ! 1844731542b ./gcc/testsuite/gcc.c-torture/compile/20030703-1.c ! 421671839b ./gcc/testsuite/gcc.c-torture/compile/20030821-1.c ! 144576078b ./gcc/testsuite/gcc.c-torture/compile/20030907-1.c ! 3163338462b ./gcc/testsuite/gcc.c-torture/compile/20031002-1.c ! 1569879978b ./gcc/testsuite/gcc.c-torture/compile/20031011-1.c ! 772803228b ./gcc/testsuite/gcc.c-torture/compile/20031031-1.c ! 940459071b ./gcc/testsuite/gcc.c-torture/compile/20031031-2.c ! 431248112b ./gcc/testsuite/gcc.c-torture/compile/20031220-1.c ! 1198495265b ./gcc/testsuite/gcc.c-torture/compile/20031231-1.c ! 375311401b ./gcc/testsuite/gcc.c-torture/compile/900116-1.c ! 4181931788b ./gcc/testsuite/gcc.c-torture/compile/900216-1.c ! 426860692b ./gcc/testsuite/gcc.c-torture/compile/900313-1.c ! 221307575b ./gcc/testsuite/gcc.c-torture/compile/900407-1.c ! 197356982b ./gcc/testsuite/gcc.c-torture/compile/900516-1.c ! 1548983744b ./gcc/testsuite/gcc.c-torture/compile/920301-1.c ! 4282140702b ./gcc/testsuite/gcc.c-torture/compile/920409-1.c ! 1778084656b ./gcc/testsuite/gcc.c-torture/compile/920409-2.c ! 213155575b ./gcc/testsuite/gcc.c-torture/compile/920410-1.c ! 645991439b ./gcc/testsuite/gcc.c-torture/compile/920410-2.c ! 3957037518b ./gcc/testsuite/gcc.c-torture/compile/920411-2.c ! 2334498932b ./gcc/testsuite/gcc.c-torture/compile/920413-1.c ! 962899604b ./gcc/testsuite/gcc.c-torture/compile/920415-1.c ! 2539976202b ./gcc/testsuite/gcc.c-torture/compile/920428-1.c ! 1013934609b ./gcc/testsuite/gcc.c-torture/compile/920428-2.c ! 788296187b ./gcc/testsuite/gcc.c-torture/compile/920428-3.c ! 972355256b ./gcc/testsuite/gcc.c-torture/compile/920428-4.c ! 2850012644b ./gcc/testsuite/gcc.c-torture/compile/920428-5.c ! 3327240012b ./gcc/testsuite/gcc.c-torture/compile/920428-6.c ! 1997719687b ./gcc/testsuite/gcc.c-torture/compile/920428-7.c ! 3673935883b ./gcc/testsuite/gcc.c-torture/compile/920501-1.c ! 2992320179b ./gcc/testsuite/gcc.c-torture/compile/920501-10.c ! 2609541759b ./gcc/testsuite/gcc.c-torture/compile/920501-11.c ! 46877596b ./gcc/testsuite/gcc.c-torture/compile/920501-12.c ! 2383031034b ./gcc/testsuite/gcc.c-torture/compile/920501-12.x ! 432031083b ./gcc/testsuite/gcc.c-torture/compile/920501-13.c ! 3986866565b ./gcc/testsuite/gcc.c-torture/compile/920501-15.c ! 2140301132b ./gcc/testsuite/gcc.c-torture/compile/920501-16.c ! 2776840158b ./gcc/testsuite/gcc.c-torture/compile/920501-17.c ! 2935229477b ./gcc/testsuite/gcc.c-torture/compile/920501-18.c ! 2462018157b ./gcc/testsuite/gcc.c-torture/compile/920501-19.c ! 825734676b ./gcc/testsuite/gcc.c-torture/compile/920501-2.c ! 3480599006b ./gcc/testsuite/gcc.c-torture/compile/920501-20.c ! 1689258794b ./gcc/testsuite/gcc.c-torture/compile/920501-21.c ! 693947540b ./gcc/testsuite/gcc.c-torture/compile/920501-22.c ! 195826579b ./gcc/testsuite/gcc.c-torture/compile/920501-23.c ! 2815077449b ./gcc/testsuite/gcc.c-torture/compile/920501-3.c ! 3150704176b ./gcc/testsuite/gcc.c-torture/compile/920501-4.c ! 3513772660b ./gcc/testsuite/gcc.c-torture/compile/920501-4.x ! 3936438856b ./gcc/testsuite/gcc.c-torture/compile/920501-6.c ! 2978363162b ./gcc/testsuite/gcc.c-torture/compile/920501-7.c ! 3178366367b ./gcc/testsuite/gcc.c-torture/compile/920501-8.c ! 3988773566b ./gcc/testsuite/gcc.c-torture/compile/920501-9.c ! 4273234272b ./gcc/testsuite/gcc.c-torture/compile/920502-1.c ! 451473472b ./gcc/testsuite/gcc.c-torture/compile/920502-2.c ! 1332166500b ./gcc/testsuite/gcc.c-torture/compile/920520-1.c ! 2245440507b ./gcc/testsuite/gcc.c-torture/compile/920520-1.x ! 901366109b ./gcc/testsuite/gcc.c-torture/compile/920521-1.c ! 85616231b ./gcc/testsuite/gcc.c-torture/compile/920521-1.x ! 1216353647b ./gcc/testsuite/gcc.c-torture/compile/920529-1.c ! 619512296b ./gcc/testsuite/gcc.c-torture/compile/920608-1.c ! 2459147095b ./gcc/testsuite/gcc.c-torture/compile/920611-2.c ! 2108915266b ./gcc/testsuite/gcc.c-torture/compile/920615-1.c ! 1738386639b ./gcc/testsuite/gcc.c-torture/compile/920617-1.c ! 1497386838b ./gcc/testsuite/gcc.c-torture/compile/920617-2.c ! 15254500b ./gcc/testsuite/gcc.c-torture/compile/920623-1.c ! 1775235688b ./gcc/testsuite/gcc.c-torture/compile/920624-1.c ! 3157795265b ./gcc/testsuite/gcc.c-torture/compile/920625-1.c ! 3813813093b ./gcc/testsuite/gcc.c-torture/compile/920625-1.x ! 832571494b ./gcc/testsuite/gcc.c-torture/compile/920625-2.c ! 1209301541b ./gcc/testsuite/gcc.c-torture/compile/920626-1.c ! 1071302436b ./gcc/testsuite/gcc.c-torture/compile/920701-1.c ! 2769689708b ./gcc/testsuite/gcc.c-torture/compile/920702-1.c ! 2699685766b ./gcc/testsuite/gcc.c-torture/compile/920706-1.c ! 2611774952b ./gcc/testsuite/gcc.c-torture/compile/920710-2.c ! 3175710753b ./gcc/testsuite/gcc.c-torture/compile/920711-1.c ! 1838641399b ./gcc/testsuite/gcc.c-torture/compile/920721-1.c ! 1730574618b ./gcc/testsuite/gcc.c-torture/compile/920723-1.c ! 2728140867b ./gcc/testsuite/gcc.c-torture/compile/920729-1.c ! 3543134222b ./gcc/testsuite/gcc.c-torture/compile/920806-1.c ! 301898459b ./gcc/testsuite/gcc.c-torture/compile/920808-1.c ! 4286663396b ./gcc/testsuite/gcc.c-torture/compile/920809-1.c ! 1519893227b ./gcc/testsuite/gcc.c-torture/compile/920817-1.c ! 1506959740b ./gcc/testsuite/gcc.c-torture/compile/920820-1.c ! 2009298978b ./gcc/testsuite/gcc.c-torture/compile/920821-1.c ! 153303695b ./gcc/testsuite/gcc.c-torture/compile/920821-2.c ! 1035421587b ./gcc/testsuite/gcc.c-torture/compile/920825-1.c ! 1883204896b ./gcc/testsuite/gcc.c-torture/compile/920825-2.c ! 378919939b ./gcc/testsuite/gcc.c-torture/compile/920826-1.c ! 324445241b ./gcc/testsuite/gcc.c-torture/compile/920828-1.c ! 2512376601b ./gcc/testsuite/gcc.c-torture/compile/920829-1.c ! 1175894768b ./gcc/testsuite/gcc.c-torture/compile/920831-1.c ! 3615669663b ./gcc/testsuite/gcc.c-torture/compile/920902-1.c ! 3213642392b ./gcc/testsuite/gcc.c-torture/compile/920909-1.c ! 923773306b ./gcc/testsuite/gcc.c-torture/compile/920917-1.c ! 313805874b ./gcc/testsuite/gcc.c-torture/compile/920928-1.c ! 3576009210b ./gcc/testsuite/gcc.c-torture/compile/920928-2.c ! 2038558878b ./gcc/testsuite/gcc.c-torture/compile/920928-3.c ! 2544344324b ./gcc/testsuite/gcc.c-torture/compile/920928-4.c ! 934086546b ./gcc/testsuite/gcc.c-torture/compile/920928-5.c ! 6106016b ./gcc/testsuite/gcc.c-torture/compile/920928-6.c ! 735506239b ./gcc/testsuite/gcc.c-torture/compile/921004-1.c ! 3888639831b ./gcc/testsuite/gcc.c-torture/compile/921011-1.c ! 3956087084b ./gcc/testsuite/gcc.c-torture/compile/921011-2.c ! 1370935236b ./gcc/testsuite/gcc.c-torture/compile/921012-1.c ! 2304808730b ./gcc/testsuite/gcc.c-torture/compile/921012-2.c ! 3157047871b ./gcc/testsuite/gcc.c-torture/compile/921013-1.c ! 3740334758b ./gcc/testsuite/gcc.c-torture/compile/921019-1.c ! 2811091388b ./gcc/testsuite/gcc.c-torture/compile/921021-1.c ! 3551171868b ./gcc/testsuite/gcc.c-torture/compile/921024-1.c ! 3924542394b ./gcc/testsuite/gcc.c-torture/compile/921026-1.c ! 1165569278b ./gcc/testsuite/gcc.c-torture/compile/921103-1.c ! 1243246144b ./gcc/testsuite/gcc.c-torture/compile/921109-1.c ! 2203220429b ./gcc/testsuite/gcc.c-torture/compile/921111-1.c ! 1990624597b ./gcc/testsuite/gcc.c-torture/compile/921116-2.c ! 517704894b ./gcc/testsuite/gcc.c-torture/compile/921118-1.c ! 3811420781b ./gcc/testsuite/gcc.c-torture/compile/921126-1.c ! 3727547715b ./gcc/testsuite/gcc.c-torture/compile/921202-1.c ! 568945264b ./gcc/testsuite/gcc.c-torture/compile/921202-2.c ! 2130176572b ./gcc/testsuite/gcc.c-torture/compile/921203-1.c ! 492266852b ./gcc/testsuite/gcc.c-torture/compile/921203-2.c ! 855574805b ./gcc/testsuite/gcc.c-torture/compile/921206-1.c ! 2014683974b ./gcc/testsuite/gcc.c-torture/compile/921227-1.c ! 96957459b ./gcc/testsuite/gcc.c-torture/compile/930109-1.c ! 1189423329b ./gcc/testsuite/gcc.c-torture/compile/930109-2.c ! 1543922161b ./gcc/testsuite/gcc.c-torture/compile/930111-1.c ! 1357888911b ./gcc/testsuite/gcc.c-torture/compile/930117-1.c ! 2068061905b ./gcc/testsuite/gcc.c-torture/compile/930118-1.c ! 2900924058b ./gcc/testsuite/gcc.c-torture/compile/930120-1.c ! 4121817111b ./gcc/testsuite/gcc.c-torture/compile/930126-1.c ! 1532460815b ./gcc/testsuite/gcc.c-torture/compile/930210-1.c ! 3625302497b ./gcc/testsuite/gcc.c-torture/compile/930217-1.c ! 3938239975b ./gcc/testsuite/gcc.c-torture/compile/930222-1.c ! 1557388855b ./gcc/testsuite/gcc.c-torture/compile/930325-1.c ! 3378061921b ./gcc/testsuite/gcc.c-torture/compile/930326-1.c ! 2931382100b ./gcc/testsuite/gcc.c-torture/compile/930411-1.c ! 3578370973b ./gcc/testsuite/gcc.c-torture/compile/930421-1.c ! 3734830625b ./gcc/testsuite/gcc.c-torture/compile/930427-2.c ! 3885379756b ./gcc/testsuite/gcc.c-torture/compile/930503-1.c ! 959725141b ./gcc/testsuite/gcc.c-torture/compile/930503-2.c ! 140786434b ./gcc/testsuite/gcc.c-torture/compile/930506-1.c ! 3305652641b ./gcc/testsuite/gcc.c-torture/compile/930506-2.c ! 1442644232b ./gcc/testsuite/gcc.c-torture/compile/930510-1.c ! 3993332569b ./gcc/testsuite/gcc.c-torture/compile/930513-1.c ! 2006581046b ./gcc/testsuite/gcc.c-torture/compile/930513-2.c ! 2698332239b ./gcc/testsuite/gcc.c-torture/compile/930513-3.c ! 90110464b ./gcc/testsuite/gcc.c-torture/compile/930523-1.c ! 2548234910b ./gcc/testsuite/gcc.c-torture/compile/930525-1.c ! 422873186b ./gcc/testsuite/gcc.c-torture/compile/930527-1.c ! 784172570b ./gcc/testsuite/gcc.c-torture/compile/930529-1.c ! 3569132715b ./gcc/testsuite/gcc.c-torture/compile/930530-1.c ! 3200160962b ./gcc/testsuite/gcc.c-torture/compile/930602-1.c ! 3142735794b ./gcc/testsuite/gcc.c-torture/compile/930603-1.c ! 1973176638b ./gcc/testsuite/gcc.c-torture/compile/930607-1.c ! 208901999b ./gcc/testsuite/gcc.c-torture/compile/930611-1.c ! 3976001091b ./gcc/testsuite/gcc.c-torture/compile/930618-1.c ! 583248042b ./gcc/testsuite/gcc.c-torture/compile/930621-1.c ! 3751666180b ./gcc/testsuite/gcc.c-torture/compile/930623-1.c ! 3714994986b ./gcc/testsuite/gcc.c-torture/compile/930702-1.c ! 3138367793b ./gcc/testsuite/gcc.c-torture/compile/930926-1.c ! 126934282b ./gcc/testsuite/gcc.c-torture/compile/930927-1.c ! 2046421038b ./gcc/testsuite/gcc.c-torture/compile/931003-1.c ! 2795307593b ./gcc/testsuite/gcc.c-torture/compile/931004-1.c ! 2248992767b ./gcc/testsuite/gcc.c-torture/compile/931013-1.c ! 554284027b ./gcc/testsuite/gcc.c-torture/compile/931013-2.c ! 1170847752b ./gcc/testsuite/gcc.c-torture/compile/931013-3.c ! 752631056b ./gcc/testsuite/gcc.c-torture/compile/931018-1.c ! 4120231716b ./gcc/testsuite/gcc.c-torture/compile/931031-1.c ! 2466554678b ./gcc/testsuite/gcc.c-torture/compile/931102-1.c ! 4193170992b ./gcc/testsuite/gcc.c-torture/compile/931102-2.c ! 3312404691b ./gcc/testsuite/gcc.c-torture/compile/931203-1.c ! 2144495581b ./gcc/testsuite/gcc.c-torture/compile/940611-1.c ! 2217967256b ./gcc/testsuite/gcc.c-torture/compile/940712-1.c ! 43398345b ./gcc/testsuite/gcc.c-torture/compile/940718-1.c ! 2813422857b ./gcc/testsuite/gcc.c-torture/compile/941014-1.c ! 714535983b ./gcc/testsuite/gcc.c-torture/compile/941014-2.c ! 236968493b ./gcc/testsuite/gcc.c-torture/compile/941014-3.c ! 772624016b ./gcc/testsuite/gcc.c-torture/compile/941014-4.c ! 2255123649b ./gcc/testsuite/gcc.c-torture/compile/941019-1.c ! 3482340577b ./gcc/testsuite/gcc.c-torture/compile/941111-1.c ! 4138121525b ./gcc/testsuite/gcc.c-torture/compile/941113-1.c ! 938329066b ./gcc/testsuite/gcc.c-torture/compile/950122-1.c ! 4155644724b ./gcc/testsuite/gcc.c-torture/compile/950124-1.c ! 3810294661b ./gcc/testsuite/gcc.c-torture/compile/950221-1.c ! 3460610209b ./gcc/testsuite/gcc.c-torture/compile/950329-1.c ! 3474584992b ./gcc/testsuite/gcc.c-torture/compile/950512-1.c ! 3344132126b ./gcc/testsuite/gcc.c-torture/compile/950530-1.c ! 1876592424b ./gcc/testsuite/gcc.c-torture/compile/950607-1.c ! 1023117358b ./gcc/testsuite/gcc.c-torture/compile/950610-1.c ! 2634556580b ./gcc/testsuite/gcc.c-torture/compile/950612-1.c ! 1196693335b ./gcc/testsuite/gcc.c-torture/compile/950613-1.c ! 447206228b ./gcc/testsuite/gcc.c-torture/compile/950618-1.c ! 267255638b ./gcc/testsuite/gcc.c-torture/compile/950719-1.c ! 3590503950b ./gcc/testsuite/gcc.c-torture/compile/950729-1.c ! 3836055170b ./gcc/testsuite/gcc.c-torture/compile/950816-1.c ! 2188937099b ./gcc/testsuite/gcc.c-torture/compile/950816-2.c ! 2634731147b ./gcc/testsuite/gcc.c-torture/compile/950816-3.c ! 2650686602b ./gcc/testsuite/gcc.c-torture/compile/950910-1.c ! 2979160187b ./gcc/testsuite/gcc.c-torture/compile/950919-1.c ! 3635621359b ./gcc/testsuite/gcc.c-torture/compile/950921-1.c ! 3500911374b ./gcc/testsuite/gcc.c-torture/compile/950922-1.c ! 2220749535b ./gcc/testsuite/gcc.c-torture/compile/951004-1.c ! 1578339532b ./gcc/testsuite/gcc.c-torture/compile/951106-1.c ! 459531698b ./gcc/testsuite/gcc.c-torture/compile/951116-1.c ! 2236702069b ./gcc/testsuite/gcc.c-torture/compile/951128-1.c ! 559124320b ./gcc/testsuite/gcc.c-torture/compile/951220-1.c ! 2931610069b ./gcc/testsuite/gcc.c-torture/compile/951222-1.c ! 834462352b ./gcc/testsuite/gcc.c-torture/compile/960106-1.c ! 2810957446b ./gcc/testsuite/gcc.c-torture/compile/960130-1.c ! 3942840130b ./gcc/testsuite/gcc.c-torture/compile/960201-1.c ! 1531419420b ./gcc/testsuite/gcc.c-torture/compile/960218-1.c ! 1748987127b ./gcc/testsuite/gcc.c-torture/compile/960220-1.c ! 4272797008b ./gcc/testsuite/gcc.c-torture/compile/960221-1.c ! 2932166589b ./gcc/testsuite/gcc.c-torture/compile/960319-1.c ! 1856173622b ./gcc/testsuite/gcc.c-torture/compile/960514-1.c ! 3435740171b ./gcc/testsuite/gcc.c-torture/compile/960704-1.c ! 2939040127b ./gcc/testsuite/gcc.c-torture/compile/960829-1.c ! 497475088b ./gcc/testsuite/gcc.c-torture/compile/961004-1.c ! 1946932829b ./gcc/testsuite/gcc.c-torture/compile/961010-1.c ! 304816181b ./gcc/testsuite/gcc.c-torture/compile/961019-1.c ! 2048507537b ./gcc/testsuite/gcc.c-torture/compile/961031-1.c ! 3079865887b ./gcc/testsuite/gcc.c-torture/compile/961126-1.c ! 1672232168b ./gcc/testsuite/gcc.c-torture/compile/961203-1.c ! 601500610b ./gcc/testsuite/gcc.c-torture/compile/961203-1.x ! 3759439975b ./gcc/testsuite/gcc.c-torture/compile/970206-1.c ! 1182708149b ./gcc/testsuite/gcc.c-torture/compile/970214-1.c ! 3593522245b ./gcc/testsuite/gcc.c-torture/compile/980329-1.c ! 3672497829b ./gcc/testsuite/gcc.c-torture/compile/980408-1.c ! 2062728359b ./gcc/testsuite/gcc.c-torture/compile/980504-1.c ! 4232017618b ./gcc/testsuite/gcc.c-torture/compile/980506-1.c ! 2725121828b ./gcc/testsuite/gcc.c-torture/compile/980506-1.x ! 32528983b ./gcc/testsuite/gcc.c-torture/compile/980506-2.c ! 4270541716b ./gcc/testsuite/gcc.c-torture/compile/980511-1.c ! 3713274322b ./gcc/testsuite/gcc.c-torture/compile/980701-1.c ! 777674549b ./gcc/testsuite/gcc.c-torture/compile/980706-1.c ! 610537079b ./gcc/testsuite/gcc.c-torture/compile/980726-1.c ! 3564634914b ./gcc/testsuite/gcc.c-torture/compile/980729-1.c ! 1437208592b ./gcc/testsuite/gcc.c-torture/compile/980816-1.c ! 4262061714b ./gcc/testsuite/gcc.c-torture/compile/980821-1.c ! 411994094b ./gcc/testsuite/gcc.c-torture/compile/980825-1.c ! 84987168b ./gcc/testsuite/gcc.c-torture/compile/981001-1.c ! 3572428069b ./gcc/testsuite/gcc.c-torture/compile/981001-2.c ! 668832071b ./gcc/testsuite/gcc.c-torture/compile/981001-3.c ! 2581029790b ./gcc/testsuite/gcc.c-torture/compile/981001-4.c ! 2455813842b ./gcc/testsuite/gcc.c-torture/compile/981006-1.c ! 4074276501b ./gcc/testsuite/gcc.c-torture/compile/981006-1.x ! 436023456b ./gcc/testsuite/gcc.c-torture/compile/981007-1.c ! 3644509388b ./gcc/testsuite/gcc.c-torture/compile/981022-1.c ! 2402428546b ./gcc/testsuite/gcc.c-torture/compile/981022-1.x ! 2312981402b ./gcc/testsuite/gcc.c-torture/compile/981107-1.c ! 1534948383b ./gcc/testsuite/gcc.c-torture/compile/981223-1.c ! 1487175081b ./gcc/testsuite/gcc.c-torture/compile/981223-1.x ! 4068323857b ./gcc/testsuite/gcc.c-torture/compile/990107-1.c ! 2146948130b ./gcc/testsuite/gcc.c-torture/compile/990117-1.c ! 569996007b ./gcc/testsuite/gcc.c-torture/compile/990203-1.c ! 415305492b ./gcc/testsuite/gcc.c-torture/compile/990517-1.c ! 3394640266b ./gcc/testsuite/gcc.c-torture/compile/990519-1.c ! 2791783349b ./gcc/testsuite/gcc.c-torture/compile/990523-1.c ! 3000844764b ./gcc/testsuite/gcc.c-torture/compile/990527-1.c ! 582106274b ./gcc/testsuite/gcc.c-torture/compile/990617-1.c ! 2322013805b ./gcc/testsuite/gcc.c-torture/compile/990617-1.x ! 492504629b ./gcc/testsuite/gcc.c-torture/compile/990625-1.c ! 884965957b ./gcc/testsuite/gcc.c-torture/compile/990625-2.c ! 4084131388b ./gcc/testsuite/gcc.c-torture/compile/990801-1.c ! 2266581816b ./gcc/testsuite/gcc.c-torture/compile/990801-2.c ! 3317513113b ./gcc/testsuite/gcc.c-torture/compile/990829-1.c ! 3956045070b ./gcc/testsuite/gcc.c-torture/compile/990913-1.c ! 3319682501b ./gcc/testsuite/gcc.c-torture/compile/990928-1.c ! 3933777529b ./gcc/testsuite/gcc.c-torture/compile/991008-1.c ! 2673675627b ./gcc/testsuite/gcc.c-torture/compile/991026-1.c ! 1674528994b ./gcc/testsuite/gcc.c-torture/compile/991026-2.c ! 4044514395b ./gcc/testsuite/gcc.c-torture/compile/991127-1.c ! 4090550720b ./gcc/testsuite/gcc.c-torture/compile/991202-1.c ! 2790904959b ./gcc/testsuite/gcc.c-torture/compile/991208-1.c ! 3320607847b ./gcc/testsuite/gcc.c-torture/compile/991213-1.c ! 337781771b ./gcc/testsuite/gcc.c-torture/compile/991213-2.c ! 2183919411b ./gcc/testsuite/gcc.c-torture/compile/991213-3.c ! 2401949194b ./gcc/testsuite/gcc.c-torture/compile/991214-1.c ! 490622457b ./gcc/testsuite/gcc.c-torture/compile/991214-2.c ! 4103871327b ./gcc/testsuite/gcc.c-torture/compile/991229-1.c ! 3992734927b ./gcc/testsuite/gcc.c-torture/compile/991229-2.c ! 4256185088b ./gcc/testsuite/gcc.c-torture/compile/991229-3.c ! 1572386559b ./gcc/testsuite/gcc.c-torture/compile/calls.c ! 2432910359b ./gcc/testsuite/gcc.c-torture/compile/cmpdi-1.c ! 614750703b ./gcc/testsuite/gcc.c-torture/compile/combine-hang.c ! 1983287936b ./gcc/testsuite/gcc.c-torture/compile/compile.exp ! 1794942657b ./gcc/testsuite/gcc.c-torture/compile/cpp-1.c ! 970559481b ./gcc/testsuite/gcc.c-torture/compile/cpp-2.c ! 1931627759b ./gcc/testsuite/gcc.c-torture/compile/dll.c ! 3830564423b ./gcc/testsuite/gcc.c-torture/compile/dll.x ! 3452765233b ./gcc/testsuite/gcc.c-torture/compile/funcptr-1.c ! 1935315878b ./gcc/testsuite/gcc.c-torture/compile/goto-1.c ! 1601988128b ./gcc/testsuite/gcc.c-torture/compile/iftrap-1.c ! 335811326b ./gcc/testsuite/gcc.c-torture/compile/iftrap-2.c ! 4225667120b ./gcc/testsuite/gcc.c-torture/compile/init-1.c ! 2861967846b ./gcc/testsuite/gcc.c-torture/compile/init-2.c ! 2669634792b ./gcc/testsuite/gcc.c-torture/compile/init-3.c ! 4126878501b ./gcc/testsuite/gcc.c-torture/compile/labels-1.c ! 2067585207b ./gcc/testsuite/gcc.c-torture/compile/labels-2.c ! 3607951474b ./gcc/testsuite/gcc.c-torture/compile/labels-3.c ! 709334018b ./gcc/testsuite/gcc.c-torture/compile/labels-3.x ! 1059776974b ./gcc/testsuite/gcc.c-torture/compile/mipscop-1.c ! 935994442b ./gcc/testsuite/gcc.c-torture/compile/mipscop-1.x ! 679674485b ./gcc/testsuite/gcc.c-torture/compile/mipscop-2.c ! 935994442b ./gcc/testsuite/gcc.c-torture/compile/mipscop-2.x ! 1448278998b ./gcc/testsuite/gcc.c-torture/compile/mipscop-3.c ! 935994442b ./gcc/testsuite/gcc.c-torture/compile/mipscop-3.x ! 1045891263b ./gcc/testsuite/gcc.c-torture/compile/mipscop-4.c ! 935994442b ./gcc/testsuite/gcc.c-torture/compile/mipscop-4.x ! 1060389673b ./gcc/testsuite/gcc.c-torture/compile/packed-1.c ! 3351120683b ./gcc/testsuite/gcc.c-torture/compile/simd-1.c ! 3894704862b ./gcc/testsuite/gcc.c-torture/compile/simd-2.c ! 1096508861b ./gcc/testsuite/gcc.c-torture/compile/simd-3.c ! 3477152513b ./gcc/testsuite/gcc.c-torture/compile/simd-4.c ! 2652812557b ./gcc/testsuite/gcc.c-torture/compile/simd-5.c ! 4093453999b ./gcc/testsuite/gcc.c-torture/compile/simd-5.x ! 69389766b ./gcc/testsuite/gcc.c-torture/compile/structs.c ! 2677779184b ./gcc/testsuite/gcc.c-torture/compile/trunctfdf.c ! 3723113555b ./gcc/testsuite/gcc.c-torture/compile/widechar-1.c ! 2985433108b ./gcc/testsuite/gcc.c-torture/compile/zero-strct-1.c ! 1339023163b ./gcc/testsuite/gcc.c-torture/compile/zero-strct-2.c ! 1530761060b ./gcc/testsuite/gcc.c-torture/execute/20000112-1.c ! 2481066019b ./gcc/testsuite/gcc.c-torture/execute/20000113-1.c ! 1162771092b ./gcc/testsuite/gcc.c-torture/execute/20000121-1.c ! 2528273823b ./gcc/testsuite/gcc.c-torture/execute/20000205-1.c ! 763627167b ./gcc/testsuite/gcc.c-torture/execute/20000217-1.c ! 778222354b ./gcc/testsuite/gcc.c-torture/execute/20000223-1.c ! 2810936145b ./gcc/testsuite/gcc.c-torture/execute/20000224-1.c ! 2859303587b ./gcc/testsuite/gcc.c-torture/execute/20000225-1.c ! 2200813341b ./gcc/testsuite/gcc.c-torture/execute/20000227-1.c ! 1085530082b ./gcc/testsuite/gcc.c-torture/execute/20000313-1.c ! 1558819196b ./gcc/testsuite/gcc.c-torture/execute/20000314-1.c ! 1363719296b ./gcc/testsuite/gcc.c-torture/execute/20000314-2.c ! 1833012317b ./gcc/testsuite/gcc.c-torture/execute/20000314-3.c ! 3834437988b ./gcc/testsuite/gcc.c-torture/execute/20000402-1.c ! 4060238122b ./gcc/testsuite/gcc.c-torture/execute/20000403-1.c ! 3672378029b ./gcc/testsuite/gcc.c-torture/execute/20000412-1.c ! 2857396630b ./gcc/testsuite/gcc.c-torture/execute/20000412-2.c ! 3640032771b ./gcc/testsuite/gcc.c-torture/execute/20000412-3.c ! 4233239850b ./gcc/testsuite/gcc.c-torture/execute/20000412-4.c ! 3642307617b ./gcc/testsuite/gcc.c-torture/execute/20000412-5.c ! 122352684b ./gcc/testsuite/gcc.c-torture/execute/20000412-6.c ! 939777600b ./gcc/testsuite/gcc.c-torture/execute/20000419-1.c ! 1445008654b ./gcc/testsuite/gcc.c-torture/execute/20000422-1.c ! 677800698b ./gcc/testsuite/gcc.c-torture/execute/20000503-1.c ! 531516808b ./gcc/testsuite/gcc.c-torture/execute/20000511-1.c ! 301599840b ./gcc/testsuite/gcc.c-torture/execute/20000519-1.c ! 2363078014b ./gcc/testsuite/gcc.c-torture/execute/20000519-2.c ! 2387696776b ./gcc/testsuite/gcc.c-torture/execute/20000523-1.c ! 185622639b ./gcc/testsuite/gcc.c-torture/execute/20000528-1.c ! 3522437520b ./gcc/testsuite/gcc.c-torture/execute/20000603-1.c ! 1679879990b ./gcc/testsuite/gcc.c-torture/execute/20000605-1.c ! 2664922764b ./gcc/testsuite/gcc.c-torture/execute/20000605-2.c ! 3650927220b ./gcc/testsuite/gcc.c-torture/execute/20000605-3.c ! 3450155788b ./gcc/testsuite/gcc.c-torture/execute/20000622-1.c ! 1183204743b ./gcc/testsuite/gcc.c-torture/execute/20000703-1.c ! 2031552411b ./gcc/testsuite/gcc.c-torture/execute/20000706-1.c ! 425477806b ./gcc/testsuite/gcc.c-torture/execute/20000706-2.c ! 690409016b ./gcc/testsuite/gcc.c-torture/execute/20000706-3.c ! 388840900b ./gcc/testsuite/gcc.c-torture/execute/20000706-4.c ! 3881852138b ./gcc/testsuite/gcc.c-torture/execute/20000706-5.c ! 4202259059b ./gcc/testsuite/gcc.c-torture/execute/20000707-1.c ! 444353142b ./gcc/testsuite/gcc.c-torture/execute/20000715-1.c ! 1455669777b ./gcc/testsuite/gcc.c-torture/execute/20000715-2.c ! 1355649270b ./gcc/testsuite/gcc.c-torture/execute/20000717-1.c ! 2506273608b ./gcc/testsuite/gcc.c-torture/execute/20000717-2.c ! 3729674446b ./gcc/testsuite/gcc.c-torture/execute/20000717-3.c ! 843831990b ./gcc/testsuite/gcc.c-torture/execute/20000717-4.c ! 3868604235b ./gcc/testsuite/gcc.c-torture/execute/20000717-5.c ! 3718377161b ./gcc/testsuite/gcc.c-torture/execute/20000722-1.c ! 1809610528b ./gcc/testsuite/gcc.c-torture/execute/20000726-1.c ! 3447416803b ./gcc/testsuite/gcc.c-torture/execute/20000731-1.c ! 1979644625b ./gcc/testsuite/gcc.c-torture/execute/20000731-2.c ! 622038460b ./gcc/testsuite/gcc.c-torture/execute/20000801-1.c ! 379050989b ./gcc/testsuite/gcc.c-torture/execute/20000801-2.c ! 1541984007b ./gcc/testsuite/gcc.c-torture/execute/20000801-3.c ! 73769468b ./gcc/testsuite/gcc.c-torture/execute/20000801-4.c ! 3273221977b ./gcc/testsuite/gcc.c-torture/execute/20000808-1.c ! 3715226001b ./gcc/testsuite/gcc.c-torture/execute/20000815-1.c ! 2910084298b ./gcc/testsuite/gcc.c-torture/execute/20000818-1.c ! 3982907773b ./gcc/testsuite/gcc.c-torture/execute/20000819-1.c ! 806186932b ./gcc/testsuite/gcc.c-torture/execute/20000822-1.c ! 1842039169b ./gcc/testsuite/gcc.c-torture/execute/20000910-1.c ! 187331803b ./gcc/testsuite/gcc.c-torture/execute/20000910-2.c ! 2672323622b ./gcc/testsuite/gcc.c-torture/execute/20000914-1.c ! 3900394210b ./gcc/testsuite/gcc.c-torture/execute/20000917-1.c ! 3471632940b ./gcc/testsuite/gcc.c-torture/execute/20001009-1.c ! 1469841059b ./gcc/testsuite/gcc.c-torture/execute/20001009-2.c ! 1399364540b ./gcc/testsuite/gcc.c-torture/execute/20001011-1.c ! 1742992606b ./gcc/testsuite/gcc.c-torture/execute/20001013-1.c ! 4079653839b ./gcc/testsuite/gcc.c-torture/execute/20001017-1.c ! 915214225b ./gcc/testsuite/gcc.c-torture/execute/20001017-2.c ! 411820211b ./gcc/testsuite/gcc.c-torture/execute/20001024-1.c ! 4210982727b ./gcc/testsuite/gcc.c-torture/execute/20001026-1.c ! 2907247602b ./gcc/testsuite/gcc.c-torture/execute/20001027-1.c ! 731083799b ./gcc/testsuite/gcc.c-torture/execute/20001031-1.c ! 123108566b ./gcc/testsuite/gcc.c-torture/execute/20001101.c ! 3554851734b ./gcc/testsuite/gcc.c-torture/execute/20001108-1.c ! 696351685b ./gcc/testsuite/gcc.c-torture/execute/20001111-1.c ! 1813795050b ./gcc/testsuite/gcc.c-torture/execute/20001112-1.c ! 3234051961b ./gcc/testsuite/gcc.c-torture/execute/20001121-1.c ! 2035849840b ./gcc/testsuite/gcc.c-torture/execute/20001124-1.c ! 378727792b ./gcc/testsuite/gcc.c-torture/execute/20001130-1.c ! 1876645280b ./gcc/testsuite/gcc.c-torture/execute/20001130-2.c ! 3253069371b ./gcc/testsuite/gcc.c-torture/execute/20001203-1.c ! 2873524021b ./gcc/testsuite/gcc.c-torture/execute/20001203-2.c ! 315046176b ./gcc/testsuite/gcc.c-torture/execute/20001221-1.c ! 3430334061b ./gcc/testsuite/gcc.c-torture/execute/20001228-1.c ! 4145547631b ./gcc/testsuite/gcc.c-torture/execute/20001229-1.c ! 2867964338b ./gcc/testsuite/gcc.c-torture/execute/20010106-1.c ! 4104575350b ./gcc/testsuite/gcc.c-torture/execute/20010114-1.c ! 4274826155b ./gcc/testsuite/gcc.c-torture/execute/20010116-1.c ! 1853154998b ./gcc/testsuite/gcc.c-torture/execute/20010118-1.c ! 1273676691b ./gcc/testsuite/gcc.c-torture/execute/20010119-1.c ! 367104834b ./gcc/testsuite/gcc.c-torture/execute/20010122-1.c ! 598227125b ./gcc/testsuite/gcc.c-torture/execute/20010122-1.x ! 2126355226b ./gcc/testsuite/gcc.c-torture/execute/20010123-1.c ! 2748204733b ./gcc/testsuite/gcc.c-torture/execute/20010124-1.c ! 962969845b ./gcc/testsuite/gcc.c-torture/execute/20010129-1.c ! 3261363423b ./gcc/testsuite/gcc.c-torture/execute/20010129-1.x ! 3208398809b ./gcc/testsuite/gcc.c-torture/execute/20010206-1.c ! 1778342214b ./gcc/testsuite/gcc.c-torture/execute/20010209-1.c ! 3579334795b ./gcc/testsuite/gcc.c-torture/execute/20010221-1.c ! 2457134781b ./gcc/testsuite/gcc.c-torture/execute/20010222-1.c ! 3606901851b ./gcc/testsuite/gcc.c-torture/execute/20010224-1.c ! 1780176502b ./gcc/testsuite/gcc.c-torture/execute/20010325-1.c ! 111828245b ./gcc/testsuite/gcc.c-torture/execute/20010329-1.c ! 4181677122b ./gcc/testsuite/gcc.c-torture/execute/20010403-1.c ! 1255405665b ./gcc/testsuite/gcc.c-torture/execute/20010409-1.c ! 2948781834b ./gcc/testsuite/gcc.c-torture/execute/20010422-1.c ! 3990119664b ./gcc/testsuite/gcc.c-torture/execute/20010518-1.c ! 3221966760b ./gcc/testsuite/gcc.c-torture/execute/20010518-2.c ! 4150058335b ./gcc/testsuite/gcc.c-torture/execute/20010520-1.c ! 3398306936b ./gcc/testsuite/gcc.c-torture/execute/20010604-1.c ! 1597970944b ./gcc/testsuite/gcc.c-torture/execute/20010605-1.c ! 2151082111b ./gcc/testsuite/gcc.c-torture/execute/20010605-2.c ! 2682131177b ./gcc/testsuite/gcc.c-torture/execute/20010711-1.c ! 873772836b ./gcc/testsuite/gcc.c-torture/execute/20010717-1.c ! 2673367189b ./gcc/testsuite/gcc.c-torture/execute/20010723-1.c ! 3978892519b ./gcc/testsuite/gcc.c-torture/execute/20010724-1.c ! 1723617799b ./gcc/testsuite/gcc.c-torture/execute/20010724-1.x ! 731866148b ./gcc/testsuite/gcc.c-torture/execute/20010904-1.c ! 731377342b ./gcc/testsuite/gcc.c-torture/execute/20010904-2.c ! 2522784842b ./gcc/testsuite/gcc.c-torture/execute/20010910-1.c ! 2397573972b ./gcc/testsuite/gcc.c-torture/execute/20010915-1.c ! 3737091006b ./gcc/testsuite/gcc.c-torture/execute/20010924-1.c ! 260325577b ./gcc/testsuite/gcc.c-torture/execute/20010925-1.c ! 4188355089b ./gcc/testsuite/gcc.c-torture/execute/20011008-3.c ! 2281713299b ./gcc/testsuite/gcc.c-torture/execute/20011019-1.c ! 2655569315b ./gcc/testsuite/gcc.c-torture/execute/20011024-1.c ! 1814584846b ./gcc/testsuite/gcc.c-torture/execute/20011109-1.c ! 1662612200b ./gcc/testsuite/gcc.c-torture/execute/20011109-2.c ! 2550685908b ./gcc/testsuite/gcc.c-torture/execute/20011113-1.c ! 172432599b ./gcc/testsuite/gcc.c-torture/execute/20011114-1.c ! 809814896b ./gcc/testsuite/gcc.c-torture/execute/20011115-1.c ! 4092518b ./gcc/testsuite/gcc.c-torture/execute/20011121-1.c ! 31392419b ./gcc/testsuite/gcc.c-torture/execute/20011126-1.c ! 2732339842b ./gcc/testsuite/gcc.c-torture/execute/20011126-2.c ! 815133002b ./gcc/testsuite/gcc.c-torture/execute/20011128-1.c ! 241656074b ./gcc/testsuite/gcc.c-torture/execute/20011217-1.c ! 2277704872b ./gcc/testsuite/gcc.c-torture/execute/20011219-1.c ! 2006770303b ./gcc/testsuite/gcc.c-torture/execute/20011223-1.c ! 4135985164b ./gcc/testsuite/gcc.c-torture/execute/20020103-1.c ! 2284569670b ./gcc/testsuite/gcc.c-torture/execute/20020107-1.c ! 2382854982b ./gcc/testsuite/gcc.c-torture/execute/20020108-1.c ! 2848042033b ./gcc/testsuite/gcc.c-torture/execute/20020118-1.c ! 2653510244b ./gcc/testsuite/gcc.c-torture/execute/20020127-1.c ! 1739097481b ./gcc/testsuite/gcc.c-torture/execute/20020129-1.c ! 1264770028b ./gcc/testsuite/gcc.c-torture/execute/20020201-1.c ! 502375258b ./gcc/testsuite/gcc.c-torture/execute/20020206-1.c ! 3691690701b ./gcc/testsuite/gcc.c-torture/execute/20020206-2.c ! 4078405558b ./gcc/testsuite/gcc.c-torture/execute/20020213-1.c ! 125431111b ./gcc/testsuite/gcc.c-torture/execute/20020215-1.c ! 1599210871b ./gcc/testsuite/gcc.c-torture/execute/20020216-1.c ! 1360698555b ./gcc/testsuite/gcc.c-torture/execute/20020219-1.c ! 756862614b ./gcc/testsuite/gcc.c-torture/execute/20020225-1.c ! 2250800547b ./gcc/testsuite/gcc.c-torture/execute/20020225-2.c ! 53329258b ./gcc/testsuite/gcc.c-torture/execute/20020226-1.c ! 127051635b ./gcc/testsuite/gcc.c-torture/execute/20020227-1.c ! 222551441b ./gcc/testsuite/gcc.c-torture/execute/20020227-1.x ! 1982547595b ./gcc/testsuite/gcc.c-torture/execute/20020307-1.c ! 2236973257b ./gcc/testsuite/gcc.c-torture/execute/20020314-1.c ! 3091941732b ./gcc/testsuite/gcc.c-torture/execute/20020320-1.c ! 3564527352b ./gcc/testsuite/gcc.c-torture/execute/20020321-1.c ! 353921064b ./gcc/testsuite/gcc.c-torture/execute/20020328-1.c ! 577542360b ./gcc/testsuite/gcc.c-torture/execute/20020402-1.c ! 3290123747b ./gcc/testsuite/gcc.c-torture/execute/20020402-2.c ! 2122778375b ./gcc/testsuite/gcc.c-torture/execute/20020402-3.c ! 2806949247b ./gcc/testsuite/gcc.c-torture/execute/20020404-1.c ! 658725271b ./gcc/testsuite/gcc.c-torture/execute/20020406-1.c ! 1900879256b ./gcc/testsuite/gcc.c-torture/execute/20020411-1.c ! 1497258578b ./gcc/testsuite/gcc.c-torture/execute/20020412-1.c ! 2788774617b ./gcc/testsuite/gcc.c-torture/execute/20020413-1.c ! 2439380096b ./gcc/testsuite/gcc.c-torture/execute/20020418-1.c ! 49470659b ./gcc/testsuite/gcc.c-torture/execute/20020423-1.c ! 484359727b ./gcc/testsuite/gcc.c-torture/execute/20020503-1.c ! 659437566b ./gcc/testsuite/gcc.c-torture/execute/20020506-1.c ! 3085688005b ./gcc/testsuite/gcc.c-torture/execute/20020508-1.c ! 2813884435b ./gcc/testsuite/gcc.c-torture/execute/20020508-2.c ! 846728332b ./gcc/testsuite/gcc.c-torture/execute/20020508-3.c ! 3411191897b ./gcc/testsuite/gcc.c-torture/execute/20020510-1.c ! 1286592631b ./gcc/testsuite/gcc.c-torture/execute/20020529-1.c ! 2563139669b ./gcc/testsuite/gcc.c-torture/execute/20020611-1.c ! 2588225457b ./gcc/testsuite/gcc.c-torture/execute/20020614-1.c ! 2304661446b ./gcc/testsuite/gcc.c-torture/execute/20020615-1.c ! 1625459055b ./gcc/testsuite/gcc.c-torture/execute/20020619-1.c ! 2876236122b ./gcc/testsuite/gcc.c-torture/execute/20020716-1.c ! 2090219848b ./gcc/testsuite/gcc.c-torture/execute/20020720-1.c ! 1392513436b ./gcc/testsuite/gcc.c-torture/execute/20020720-1.x ! 1859138834b ./gcc/testsuite/gcc.c-torture/execute/20020805-1.c ! 492121497b ./gcc/testsuite/gcc.c-torture/execute/20020904-1.c ! 572636623b ./gcc/testsuite/gcc.c-torture/execute/20020911-1.c ! 1548331694b ./gcc/testsuite/gcc.c-torture/execute/20020916-1.c ! 1916205927b ./gcc/testsuite/gcc.c-torture/execute/20021010-1.c ! 20734874b ./gcc/testsuite/gcc.c-torture/execute/20021010-2.c ! 3494808673b ./gcc/testsuite/gcc.c-torture/execute/20021011-1.c ! 1275043517b ./gcc/testsuite/gcc.c-torture/execute/20021015-1.c ! 2849369814b ./gcc/testsuite/gcc.c-torture/execute/20021024-1.c ! 3361882342b ./gcc/testsuite/gcc.c-torture/execute/20021111-1.c ! 2966353244b ./gcc/testsuite/gcc.c-torture/execute/20021118-1.c ! 582186764b ./gcc/testsuite/gcc.c-torture/execute/20021118-2.c ! 3834877290b ./gcc/testsuite/gcc.c-torture/execute/20021118-3.c ! 2087431710b ./gcc/testsuite/gcc.c-torture/execute/20021119-1.c ! 2543457728b ./gcc/testsuite/gcc.c-torture/execute/20021120-1.c ! 2916213179b ./gcc/testsuite/gcc.c-torture/execute/20021120-2.c ! 1499334675b ./gcc/testsuite/gcc.c-torture/execute/20021120-3.c ! 3171635785b ./gcc/testsuite/gcc.c-torture/execute/20021127-1.c ! 1067752545b ./gcc/testsuite/gcc.c-torture/execute/20021127-1.x ! 989736458b ./gcc/testsuite/gcc.c-torture/execute/20021204-1.c ! 624734562b ./gcc/testsuite/gcc.c-torture/execute/20021219-1.c ! 2820909676b ./gcc/testsuite/gcc.c-torture/execute/20030109-1.c ! 302087111b ./gcc/testsuite/gcc.c-torture/execute/20030120-1.c ! 3272014655b ./gcc/testsuite/gcc.c-torture/execute/20030120-2.c ! 689965669b ./gcc/testsuite/gcc.c-torture/execute/20030218-1.c ! 855486154b ./gcc/testsuite/gcc.c-torture/execute/20030221-1.c ! 821090783b ./gcc/testsuite/gcc.c-torture/execute/20030224-2.c ! 4076291177b ./gcc/testsuite/gcc.c-torture/execute/20030307-1.c ! 2371585447b ./gcc/testsuite/gcc.c-torture/execute/20030313-1.c ! 2637074483b ./gcc/testsuite/gcc.c-torture/execute/20030316-1.c ! 4701210b ./gcc/testsuite/gcc.c-torture/execute/20030613-1.c ! 1633117452b ./gcc/testsuite/gcc.c-torture/execute/20030714-1.c ! 966093144b ./gcc/testsuite/gcc.c-torture/execute/20030715-1.c ! 479976333b ./gcc/testsuite/gcc.c-torture/execute/20030907-1.c ! 1518530247b ./gcc/testsuite/gcc.c-torture/execute/20031020-1.c ! 2736693548b ./gcc/testsuite/gcc.c-torture/execute/20031201-1.c ! 1999424349b ./gcc/testsuite/gcc.c-torture/execute/20031215-1.c ! 37158978b ./gcc/testsuite/gcc.c-torture/execute/900409-1.c ! 1241514475b ./gcc/testsuite/gcc.c-torture/execute/920202-1.c ! 651529975b ./gcc/testsuite/gcc.c-torture/execute/920302-1.c ! 2196801137b ./gcc/testsuite/gcc.c-torture/execute/920409-1.c ! 1816933206b ./gcc/testsuite/gcc.c-torture/execute/920410-1.c ! 1957456510b ./gcc/testsuite/gcc.c-torture/execute/920411-1.c ! 1749111501b ./gcc/testsuite/gcc.c-torture/execute/920415-1.c ! 508706990b ./gcc/testsuite/gcc.c-torture/execute/920428-1.c ! 3878413130b ./gcc/testsuite/gcc.c-torture/execute/920428-2.c ! 4127832878b ./gcc/testsuite/gcc.c-torture/execute/920428-2.x ! 158200597b ./gcc/testsuite/gcc.c-torture/execute/920429-1.c ! 1826863267b ./gcc/testsuite/gcc.c-torture/execute/920501-1.c ! 4177429300b ./gcc/testsuite/gcc.c-torture/execute/920501-2.c ! 1351528020b ./gcc/testsuite/gcc.c-torture/execute/920501-3.c ! 700639089b ./gcc/testsuite/gcc.c-torture/execute/920501-4.c ! 798860387b ./gcc/testsuite/gcc.c-torture/execute/920501-5.c ! 4199344202b ./gcc/testsuite/gcc.c-torture/execute/920501-6.c ! 2006299034b ./gcc/testsuite/gcc.c-torture/execute/920501-7.c ! 4127832878b ./gcc/testsuite/gcc.c-torture/execute/920501-7.x ! 1420615555b ./gcc/testsuite/gcc.c-torture/execute/920501-8.c ! 1273235575b ./gcc/testsuite/gcc.c-torture/execute/920501-8.x ! 2227123057b ./gcc/testsuite/gcc.c-torture/execute/920501-9.c ! 3928484317b ./gcc/testsuite/gcc.c-torture/execute/920506-1.c ! 3897601778b ./gcc/testsuite/gcc.c-torture/execute/920520-1.c ! 4049662034b ./gcc/testsuite/gcc.c-torture/execute/920603-1.c ! 2593769598b ./gcc/testsuite/gcc.c-torture/execute/920604-1.c ! 2294544032b ./gcc/testsuite/gcc.c-torture/execute/920612-1.c ! 102881897b ./gcc/testsuite/gcc.c-torture/execute/920612-2.c ! 484477154b ./gcc/testsuite/gcc.c-torture/execute/920618-1.c ! 937300795b ./gcc/testsuite/gcc.c-torture/execute/920625-1.c ! 3030586241b ./gcc/testsuite/gcc.c-torture/execute/920710-1.c ! 1902096790b ./gcc/testsuite/gcc.c-torture/execute/920710-1.x ! 3876529175b ./gcc/testsuite/gcc.c-torture/execute/920711-1.c ! 818049019b ./gcc/testsuite/gcc.c-torture/execute/920721-1.c ! 3191124720b ./gcc/testsuite/gcc.c-torture/execute/920721-2.c ! 3879255001b ./gcc/testsuite/gcc.c-torture/execute/920721-3.c ! 2852120360b ./gcc/testsuite/gcc.c-torture/execute/920721-4.c ! 792790044b ./gcc/testsuite/gcc.c-torture/execute/920726-1.c ! 2154603996b ./gcc/testsuite/gcc.c-torture/execute/920728-1.c ! 917858221b ./gcc/testsuite/gcc.c-torture/execute/920730-1.c ! 3574659813b ./gcc/testsuite/gcc.c-torture/execute/920731-1.c ! 1308229799b ./gcc/testsuite/gcc.c-torture/execute/920810-1.c ! 950989321b ./gcc/testsuite/gcc.c-torture/execute/920812-1.c ! 4187598456b ./gcc/testsuite/gcc.c-torture/execute/920829-1.c ! 559637020b ./gcc/testsuite/gcc.c-torture/execute/920908-1.c ! 2513627586b ./gcc/testsuite/gcc.c-torture/execute/920908-2.c ! 2499750871b ./gcc/testsuite/gcc.c-torture/execute/920909-1.c ! 714100171b ./gcc/testsuite/gcc.c-torture/execute/920922-1.c ! 2279537940b ./gcc/testsuite/gcc.c-torture/execute/920929-1.c ! 70714742b ./gcc/testsuite/gcc.c-torture/execute/921006-1.c ! 137444921b ./gcc/testsuite/gcc.c-torture/execute/921007-1.c ! 2897219149b ./gcc/testsuite/gcc.c-torture/execute/921013-1.c ! 1296914634b ./gcc/testsuite/gcc.c-torture/execute/921016-1.c ! 1596244093b ./gcc/testsuite/gcc.c-torture/execute/921017-1.c ! 4199584647b ./gcc/testsuite/gcc.c-torture/execute/921019-1.c ! 2431715965b ./gcc/testsuite/gcc.c-torture/execute/921019-2.c ! 3170380362b ./gcc/testsuite/gcc.c-torture/execute/921029-1.c ! 487195362b ./gcc/testsuite/gcc.c-torture/execute/921104-1.c ! 2352124020b ./gcc/testsuite/gcc.c-torture/execute/921110-1.c ! 207021478b ./gcc/testsuite/gcc.c-torture/execute/921112-1.c ! 283175496b ./gcc/testsuite/gcc.c-torture/execute/921113-1.c ! 2879836698b ./gcc/testsuite/gcc.c-torture/execute/921117-1.c ! 201436377b ./gcc/testsuite/gcc.c-torture/execute/921123-1.c ! 4236695419b ./gcc/testsuite/gcc.c-torture/execute/921123-2.c ! 316909011b ./gcc/testsuite/gcc.c-torture/execute/921124-1.c ! 3328444406b ./gcc/testsuite/gcc.c-torture/execute/921202-1.c ! 2280032251b ./gcc/testsuite/gcc.c-torture/execute/921202-2.c ! 1311000952b ./gcc/testsuite/gcc.c-torture/execute/921204-1.c ! 2949408934b ./gcc/testsuite/gcc.c-torture/execute/921207-1.c ! 870865911b ./gcc/testsuite/gcc.c-torture/execute/921208-1.c ! 2032495193b ./gcc/testsuite/gcc.c-torture/execute/921208-2.c ! 283353483b ./gcc/testsuite/gcc.c-torture/execute/921215-1.c ! 130096086b ./gcc/testsuite/gcc.c-torture/execute/921218-1.c ! 2115073235b ./gcc/testsuite/gcc.c-torture/execute/921218-2.c ! 3561999462b ./gcc/testsuite/gcc.c-torture/execute/930106-1.c ! 3160736499b ./gcc/testsuite/gcc.c-torture/execute/930111-1.c ! 4162371994b ./gcc/testsuite/gcc.c-torture/execute/930123-1.c ! 3265874780b ./gcc/testsuite/gcc.c-torture/execute/930126-1.c ! 2299871172b ./gcc/testsuite/gcc.c-torture/execute/930208-1.c ! 3144873997b ./gcc/testsuite/gcc.c-torture/execute/930406-1.c ! 3189774734b ./gcc/testsuite/gcc.c-torture/execute/930408-1.c ! 3400489427b ./gcc/testsuite/gcc.c-torture/execute/930429-1.c ! 2948158283b ./gcc/testsuite/gcc.c-torture/execute/930429-2.c ! 3905354169b ./gcc/testsuite/gcc.c-torture/execute/930513-1.c ! 1273235575b ./gcc/testsuite/gcc.c-torture/execute/930513-1.x ! 2524183853b ./gcc/testsuite/gcc.c-torture/execute/930513-2.c ! 2391753101b ./gcc/testsuite/gcc.c-torture/execute/930518-1.c ! 576031745b ./gcc/testsuite/gcc.c-torture/execute/930526-1.c ! 956415563b ./gcc/testsuite/gcc.c-torture/execute/930527-1.c ! 4026322841b ./gcc/testsuite/gcc.c-torture/execute/930529-1.c ! 2050475769b ./gcc/testsuite/gcc.c-torture/execute/930529-1.x ! 310850888b ./gcc/testsuite/gcc.c-torture/execute/930603-1.c ! 572652809b ./gcc/testsuite/gcc.c-torture/execute/930603-2.c ! 3452170691b ./gcc/testsuite/gcc.c-torture/execute/930603-3.c ! 352498879b ./gcc/testsuite/gcc.c-torture/execute/930608-1.c ! 2318312710b ./gcc/testsuite/gcc.c-torture/execute/930614-1.c ! 307026414b ./gcc/testsuite/gcc.c-torture/execute/930614-2.c ! 380017129b ./gcc/testsuite/gcc.c-torture/execute/930621-1.c ! 852093434b ./gcc/testsuite/gcc.c-torture/execute/930622-1.c ! 1010026580b ./gcc/testsuite/gcc.c-torture/execute/930622-2.c ! 2381515578b ./gcc/testsuite/gcc.c-torture/execute/930628-1.c ! 3968663339b ./gcc/testsuite/gcc.c-torture/execute/930630-1.c ! 1360276333b ./gcc/testsuite/gcc.c-torture/execute/930702-1.c ! 2690450552b ./gcc/testsuite/gcc.c-torture/execute/930713-1.c ! 3621302381b ./gcc/testsuite/gcc.c-torture/execute/930718-1.c ! 1853260970b ./gcc/testsuite/gcc.c-torture/execute/930719-1.c ! 2257054643b ./gcc/testsuite/gcc.c-torture/execute/930725-1.c ! 1877434408b ./gcc/testsuite/gcc.c-torture/execute/930818-1.c ! 1262159860b ./gcc/testsuite/gcc.c-torture/execute/930916-1.c ! 2667793229b ./gcc/testsuite/gcc.c-torture/execute/930921-1.c ! 2351038398b ./gcc/testsuite/gcc.c-torture/execute/930929-1.c ! 2863421839b ./gcc/testsuite/gcc.c-torture/execute/930930-1.c ! 557816592b ./gcc/testsuite/gcc.c-torture/execute/930930-2.c ! 2101614510b ./gcc/testsuite/gcc.c-torture/execute/931002-1.c ! 2742393702b ./gcc/testsuite/gcc.c-torture/execute/931004-1.c ! 1700898376b ./gcc/testsuite/gcc.c-torture/execute/931004-10.c ! 962417771b ./gcc/testsuite/gcc.c-torture/execute/931004-11.c ! 2700865821b ./gcc/testsuite/gcc.c-torture/execute/931004-12.c ! 3436458492b ./gcc/testsuite/gcc.c-torture/execute/931004-13.c ! 4127270352b ./gcc/testsuite/gcc.c-torture/execute/931004-14.c ! 346996272b ./gcc/testsuite/gcc.c-torture/execute/931004-2.c ! 1206221721b ./gcc/testsuite/gcc.c-torture/execute/931004-3.c ! 3166093368b ./gcc/testsuite/gcc.c-torture/execute/931004-4.c ! 1452916171b ./gcc/testsuite/gcc.c-torture/execute/931004-5.c ! 2022610295b ./gcc/testsuite/gcc.c-torture/execute/931004-6.c ! 2036744892b ./gcc/testsuite/gcc.c-torture/execute/931004-7.c ! 1586770276b ./gcc/testsuite/gcc.c-torture/execute/931004-8.c ! 3369996669b ./gcc/testsuite/gcc.c-torture/execute/931004-9.c ! 3731237663b ./gcc/testsuite/gcc.c-torture/execute/931005-1.c ! 3432311031b ./gcc/testsuite/gcc.c-torture/execute/931009-1.c ! 1834388885b ./gcc/testsuite/gcc.c-torture/execute/931012-1.c ! 2534034619b ./gcc/testsuite/gcc.c-torture/execute/931017-1.c ! 1949677962b ./gcc/testsuite/gcc.c-torture/execute/931018-1.c ! 3825241545b ./gcc/testsuite/gcc.c-torture/execute/931031-1.c ! 1877484625b ./gcc/testsuite/gcc.c-torture/execute/931102-1.c ! 3927915289b ./gcc/testsuite/gcc.c-torture/execute/931102-2.c ! 480430370b ./gcc/testsuite/gcc.c-torture/execute/931110-1.c ! 3822785940b ./gcc/testsuite/gcc.c-torture/execute/931110-2.c ! 967340546b ./gcc/testsuite/gcc.c-torture/execute/931208-1.c ! 2682740818b ./gcc/testsuite/gcc.c-torture/execute/931228-1.c ! 2017170797b ./gcc/testsuite/gcc.c-torture/execute/940115-1.c ! 82400069b ./gcc/testsuite/gcc.c-torture/execute/940122-1.c ! 4235476365b ./gcc/testsuite/gcc.c-torture/execute/941014-1.c ! 2525145377b ./gcc/testsuite/gcc.c-torture/execute/941014-1.x ! 1977507646b ./gcc/testsuite/gcc.c-torture/execute/941014-2.c ! 310736147b ./gcc/testsuite/gcc.c-torture/execute/941015-1.c ! 1318043175b ./gcc/testsuite/gcc.c-torture/execute/941021-1.c ! 3185365004b ./gcc/testsuite/gcc.c-torture/execute/941025-1.c ! 678677907b ./gcc/testsuite/gcc.c-torture/execute/941031-1.c ! 3905782643b ./gcc/testsuite/gcc.c-torture/execute/941101-1.c ! 1810551831b ./gcc/testsuite/gcc.c-torture/execute/941110-1.c ! 3428057334b ./gcc/testsuite/gcc.c-torture/execute/941202-1.c ! 3908063718b ./gcc/testsuite/gcc.c-torture/execute/950221-1.c ! 1873160895b ./gcc/testsuite/gcc.c-torture/execute/950322-1.c ! 1672610716b ./gcc/testsuite/gcc.c-torture/execute/950426-1.c ! 3465653006b ./gcc/testsuite/gcc.c-torture/execute/950426-2.c ! 3696703975b ./gcc/testsuite/gcc.c-torture/execute/950503-1.c ! 1556250294b ./gcc/testsuite/gcc.c-torture/execute/950511-1.c ! 2857896870b ./gcc/testsuite/gcc.c-torture/execute/950512-1.c ! 114570668b ./gcc/testsuite/gcc.c-torture/execute/950605-1.c ! 2991280268b ./gcc/testsuite/gcc.c-torture/execute/950607-1.c ! 437837801b ./gcc/testsuite/gcc.c-torture/execute/950607-2.c ! 3950265298b ./gcc/testsuite/gcc.c-torture/execute/950612-1.c ! 1778400537b ./gcc/testsuite/gcc.c-torture/execute/950621-1.c ! 2070936302b ./gcc/testsuite/gcc.c-torture/execute/950628-1.c ! 3165536281b ./gcc/testsuite/gcc.c-torture/execute/950704-1.c ! 2486390814b ./gcc/testsuite/gcc.c-torture/execute/950706-1.c ! 1322454782b ./gcc/testsuite/gcc.c-torture/execute/950710-1.c ! 4241980915b ./gcc/testsuite/gcc.c-torture/execute/950714-1.c ! 3308590304b ./gcc/testsuite/gcc.c-torture/execute/950809-1.c ! 4154904713b ./gcc/testsuite/gcc.c-torture/execute/950906-1.c ! 1101166652b ./gcc/testsuite/gcc.c-torture/execute/950915-1.c ! 24392721b ./gcc/testsuite/gcc.c-torture/execute/950929-1.c ! 1234781098b ./gcc/testsuite/gcc.c-torture/execute/951003-1.c ! 3737612481b ./gcc/testsuite/gcc.c-torture/execute/951115-1.c ! 2658922424b ./gcc/testsuite/gcc.c-torture/execute/951204-1.c ! 3956410619b ./gcc/testsuite/gcc.c-torture/execute/960116-1.c ! 2093624467b ./gcc/testsuite/gcc.c-torture/execute/960117-1.c ! 1694357534b ./gcc/testsuite/gcc.c-torture/execute/960209-1.c ! 1952007331b ./gcc/testsuite/gcc.c-torture/execute/960215-1.c ! 60263952b ./gcc/testsuite/gcc.c-torture/execute/960218-1.c ! 1161569283b ./gcc/testsuite/gcc.c-torture/execute/960219-1.c ! 3429934900b ./gcc/testsuite/gcc.c-torture/execute/960301-1.c ! 160802950b ./gcc/testsuite/gcc.c-torture/execute/960302-1.c ! 2772979130b ./gcc/testsuite/gcc.c-torture/execute/960311-1.c ! 1259407124b ./gcc/testsuite/gcc.c-torture/execute/960311-2.c ! 3608527152b ./gcc/testsuite/gcc.c-torture/execute/960311-3.c ! 2087520542b ./gcc/testsuite/gcc.c-torture/execute/960312-1.c ! 1534960321b ./gcc/testsuite/gcc.c-torture/execute/960312-1.x ! 1208600766b ./gcc/testsuite/gcc.c-torture/execute/960317-1.c ! 1889026562b ./gcc/testsuite/gcc.c-torture/execute/960321-1.c ! 271449701b ./gcc/testsuite/gcc.c-torture/execute/960326-1.c ! 2449729039b ./gcc/testsuite/gcc.c-torture/execute/960327-1.c ! 2463095434b ./gcc/testsuite/gcc.c-torture/execute/960402-1.c ! 3079720318b ./gcc/testsuite/gcc.c-torture/execute/960405-1.c ! 4251399269b ./gcc/testsuite/gcc.c-torture/execute/960416-1.c ! 2615797380b ./gcc/testsuite/gcc.c-torture/execute/960416-1.x ! 2014388579b ./gcc/testsuite/gcc.c-torture/execute/960419-1.c ! 235840907b ./gcc/testsuite/gcc.c-torture/execute/960419-2.c ! 4266479970b ./gcc/testsuite/gcc.c-torture/execute/960512-1.c ! 3785913788b ./gcc/testsuite/gcc.c-torture/execute/960513-1.c ! 488880971b ./gcc/testsuite/gcc.c-torture/execute/960521-1.c ! 2321951599b ./gcc/testsuite/gcc.c-torture/execute/960608-1.c ! 4052360482b ./gcc/testsuite/gcc.c-torture/execute/960801-1.c ! 2655742085b ./gcc/testsuite/gcc.c-torture/execute/960802-1.c ! 135771086b ./gcc/testsuite/gcc.c-torture/execute/960830-1.c ! 2582740546b ./gcc/testsuite/gcc.c-torture/execute/960909-1.c ! 1944495033b ./gcc/testsuite/gcc.c-torture/execute/961004-1.c ! 658313774b ./gcc/testsuite/gcc.c-torture/execute/961017-1.c ! 785421501b ./gcc/testsuite/gcc.c-torture/execute/961017-2.c ! 2852845535b ./gcc/testsuite/gcc.c-torture/execute/961026-1.c ! 2375210094b ./gcc/testsuite/gcc.c-torture/execute/961112-1.c ! 2553026408b ./gcc/testsuite/gcc.c-torture/execute/961122-1.c ! 2422282222b ./gcc/testsuite/gcc.c-torture/execute/961122-2.c ! 3575956796b ./gcc/testsuite/gcc.c-torture/execute/961125-1.c ! 577488172b ./gcc/testsuite/gcc.c-torture/execute/961206-1.c ! 1182447544b ./gcc/testsuite/gcc.c-torture/execute/961213-1.c ! 2704046666b ./gcc/testsuite/gcc.c-torture/execute/961223-1.c ! 1973936950b ./gcc/testsuite/gcc.c-torture/execute/970214-1.c ! 1571629264b ./gcc/testsuite/gcc.c-torture/execute/970214-2.c ! 167780433b ./gcc/testsuite/gcc.c-torture/execute/970217-1.c ! 2343108590b ./gcc/testsuite/gcc.c-torture/execute/970923-1.c ! 2894602056b ./gcc/testsuite/gcc.c-torture/execute/980205.c ! 4265139835b ./gcc/testsuite/gcc.c-torture/execute/980223.c ! 1143734080b ./gcc/testsuite/gcc.c-torture/execute/980424-1.c ! 3704443102b ./gcc/testsuite/gcc.c-torture/execute/980505-1.c ! 2419800133b ./gcc/testsuite/gcc.c-torture/execute/980505-2.c ! 1955794056b ./gcc/testsuite/gcc.c-torture/execute/980506-1.c ! 2173791379b ./gcc/testsuite/gcc.c-torture/execute/980506-2.c ! 492472793b ./gcc/testsuite/gcc.c-torture/execute/980506-3.c ! 3939060245b ./gcc/testsuite/gcc.c-torture/execute/980526-1.c ! 1183240780b ./gcc/testsuite/gcc.c-torture/execute/980526-2.c ! 798626284b ./gcc/testsuite/gcc.c-torture/execute/980526-3.c ! 686935511b ./gcc/testsuite/gcc.c-torture/execute/980602-1.c ! 148166585b ./gcc/testsuite/gcc.c-torture/execute/980602-2.c ! 2555041864b ./gcc/testsuite/gcc.c-torture/execute/980604-1.c ! 2921367481b ./gcc/testsuite/gcc.c-torture/execute/980605-1.c ! 327024946b ./gcc/testsuite/gcc.c-torture/execute/980608-1.c ! 636602589b ./gcc/testsuite/gcc.c-torture/execute/980612-1.c ! 1796014237b ./gcc/testsuite/gcc.c-torture/execute/980617-1.c ! 1416887007b ./gcc/testsuite/gcc.c-torture/execute/980618-1.c ! 3252251770b ./gcc/testsuite/gcc.c-torture/execute/980701-1.c ! 3843080992b ./gcc/testsuite/gcc.c-torture/execute/980707-1.c ! 3327976229b ./gcc/testsuite/gcc.c-torture/execute/980709-1.c ! 2346484511b ./gcc/testsuite/gcc.c-torture/execute/980709-1.x ! 1464453071b ./gcc/testsuite/gcc.c-torture/execute/980716-1.c ! 1144140014b ./gcc/testsuite/gcc.c-torture/execute/980929-1.c ! 2567595595b ./gcc/testsuite/gcc.c-torture/execute/981001-1.c ! 1496092063b ./gcc/testsuite/gcc.c-torture/execute/981019-1.c ! 1493534646b ./gcc/testsuite/gcc.c-torture/execute/981130-1.c ! 296945303b ./gcc/testsuite/gcc.c-torture/execute/981130-1.x ! 2098827021b ./gcc/testsuite/gcc.c-torture/execute/981206-1.c ! 785276758b ./gcc/testsuite/gcc.c-torture/execute/990106-1.c ! 1458926953b ./gcc/testsuite/gcc.c-torture/execute/990106-2.c ! 1443443587b ./gcc/testsuite/gcc.c-torture/execute/990117-1.c ! 98144727b ./gcc/testsuite/gcc.c-torture/execute/990127-1.c ! 4206968879b ./gcc/testsuite/gcc.c-torture/execute/990127-2.c ! 1805424399b ./gcc/testsuite/gcc.c-torture/execute/990128-1.c ! 1406479809b ./gcc/testsuite/gcc.c-torture/execute/990130-1.c ! 1075245403b ./gcc/testsuite/gcc.c-torture/execute/990208-1.c ! 2607456693b ./gcc/testsuite/gcc.c-torture/execute/990208-1.x ! 1910322968b ./gcc/testsuite/gcc.c-torture/execute/990211-1.c ! 2520747136b ./gcc/testsuite/gcc.c-torture/execute/990222-1.c ! 4167898413b ./gcc/testsuite/gcc.c-torture/execute/990324-1.c ! 1316369295b ./gcc/testsuite/gcc.c-torture/execute/990326-1.c ! 2237806705b ./gcc/testsuite/gcc.c-torture/execute/990404-1.c ! 3506652867b ./gcc/testsuite/gcc.c-torture/execute/990413-2.c ! 1028733236b ./gcc/testsuite/gcc.c-torture/execute/990413-2.x ! 533594278b ./gcc/testsuite/gcc.c-torture/execute/990513-1.c ! 2242042026b ./gcc/testsuite/gcc.c-torture/execute/990524-1.c ! 1608250007b ./gcc/testsuite/gcc.c-torture/execute/990525-1.c ! 1043856586b ./gcc/testsuite/gcc.c-torture/execute/990525-2.c ! 1233686917b ./gcc/testsuite/gcc.c-torture/execute/990527-1.c ! 1220250784b ./gcc/testsuite/gcc.c-torture/execute/990531-1.c ! 3289696997b ./gcc/testsuite/gcc.c-torture/execute/990604-1.c ! 80435005b ./gcc/testsuite/gcc.c-torture/execute/990628-1.c ! 2064588039b ./gcc/testsuite/gcc.c-torture/execute/990804-1.c ! 2063909199b ./gcc/testsuite/gcc.c-torture/execute/990811-1.c ! 1435922216b ./gcc/testsuite/gcc.c-torture/execute/990826-0.c ! 2369075067b ./gcc/testsuite/gcc.c-torture/execute/990826-0.x ! 3894203537b ./gcc/testsuite/gcc.c-torture/execute/990827-1.c ! 1924065387b ./gcc/testsuite/gcc.c-torture/execute/990829-1.c ! 3657724130b ./gcc/testsuite/gcc.c-torture/execute/990923-1.c ! 3037719587b ./gcc/testsuite/gcc.c-torture/execute/991014-1.c ! 340177342b ./gcc/testsuite/gcc.c-torture/execute/991016-1.c ! 2236305082b ./gcc/testsuite/gcc.c-torture/execute/991019-1.c ! 4202756321b ./gcc/testsuite/gcc.c-torture/execute/991023-1.c ! 1824884313b ./gcc/testsuite/gcc.c-torture/execute/991030-1.c ! 4138873239b ./gcc/testsuite/gcc.c-torture/execute/991112-1.c ! 2109536582b ./gcc/testsuite/gcc.c-torture/execute/991118-1.c ! 1316882767b ./gcc/testsuite/gcc.c-torture/execute/991201-1.c ! 2220300988b ./gcc/testsuite/gcc.c-torture/execute/991202-1.c ! 1285333003b ./gcc/testsuite/gcc.c-torture/execute/991202-2.c ! 2329096948b ./gcc/testsuite/gcc.c-torture/execute/991202-3.c ! 3117583172b ./gcc/testsuite/gcc.c-torture/execute/991216-1.c ! 4234986278b ./gcc/testsuite/gcc.c-torture/execute/991216-2.c ! 2527910714b ./gcc/testsuite/gcc.c-torture/execute/991216-3.c ! 4137201305b ./gcc/testsuite/gcc.c-torture/execute/991216-4.c ! 882138391b ./gcc/testsuite/gcc.c-torture/execute/991221-1.c ! 2854457808b ./gcc/testsuite/gcc.c-torture/execute/991227-1.c ! 3688640862b ./gcc/testsuite/gcc.c-torture/execute/991228-1.c ! 3793831392b ./gcc/testsuite/gcc.c-torture/execute/align-1.c ! 4120792597b ./gcc/testsuite/gcc.c-torture/execute/align-2.c ! 1274835551b ./gcc/testsuite/gcc.c-torture/execute/alloca-1.c ! 3292072248b ./gcc/testsuite/gcc.c-torture/execute/anon-1.c ! 1605923399b ./gcc/testsuite/gcc.c-torture/execute/arith-1.c ! 2001873795b ./gcc/testsuite/gcc.c-torture/execute/arith-rand-ll.c ! 343449147b ./gcc/testsuite/gcc.c-torture/execute/arith-rand.c ! 312869222b ./gcc/testsuite/gcc.c-torture/execute/ashldi-1.c ! 1327544364b ./gcc/testsuite/gcc.c-torture/execute/ashrdi-1.c ! 629391558b ./gcc/testsuite/gcc.c-torture/execute/bcp-1.c ! 2311291194b ./gcc/testsuite/gcc.c-torture/execute/bf-layout-1.c ! 2757361338b ./gcc/testsuite/gcc.c-torture/execute/bf-pack-1.c ! 3543906045b ./gcc/testsuite/gcc.c-torture/execute/bf-sign-1.c ! 1320697357b ./gcc/testsuite/gcc.c-torture/execute/bf-sign-2.c ! 323354359b ./gcc/testsuite/gcc.c-torture/execute/bf64-1.c ! 3097986350b ./gcc/testsuite/gcc.c-torture/execute/bf64-1.x ! 1331291117b ./gcc/testsuite/gcc.c-torture/execute/bitfld-1.c ! 3644699221b ./gcc/testsuite/gcc.c-torture/execute/bitfld-1.x ! 1684940093b ./gcc/testsuite/gcc.c-torture/execute/bitfld-2.c ! 4012339802b ./gcc/testsuite/gcc.c-torture/execute/built-in-setjmp.c ! 1673141587b ./gcc/testsuite/gcc.c-torture/execute/builtin-abs-1.c ! 2056736695b ./gcc/testsuite/gcc.c-torture/execute/builtin-abs-2.c ! 3097553545b ./gcc/testsuite/gcc.c-torture/execute/builtin-complex-1.c ! 1493337540b ./gcc/testsuite/gcc.c-torture/execute/builtin-constant.c ! 2076507160b ./gcc/testsuite/gcc.c-torture/execute/builtin-constant.x ! 185545879b ./gcc/testsuite/gcc.c-torture/execute/builtin-noret-1.c ! 329340471b ./gcc/testsuite/gcc.c-torture/execute/builtin-prefetch-1.c ! 397570715b ./gcc/testsuite/gcc.c-torture/execute/builtin-prefetch-2.c ! 1484227202b ./gcc/testsuite/gcc.c-torture/execute/builtin-prefetch-3.c ! 1934387710b ./gcc/testsuite/gcc.c-torture/execute/builtin-prefetch-4.c ! 2627312111b ./gcc/testsuite/gcc.c-torture/execute/builtin-prefetch-5.c ! 3741124173b ./gcc/testsuite/gcc.c-torture/execute/builtin-prefetch-6.c ! 2250919883b ./gcc/testsuite/gcc.c-torture/execute/builtin-types-compatible-p.c ! 2177138525b ./gcc/testsuite/gcc.c-torture/execute/cbrt.c ! 2994579909b ./gcc/testsuite/gcc.c-torture/execute/cmpdi-1.c ! 3257252249b ./gcc/testsuite/gcc.c-torture/execute/cmpsi-1.c ! 3943123822b ./gcc/testsuite/gcc.c-torture/execute/comp-goto-1.c ! 3449149566b ./gcc/testsuite/gcc.c-torture/execute/comp-goto-2.c ! 601076272b ./gcc/testsuite/gcc.c-torture/execute/compare-1.c ! 1093590348b ./gcc/testsuite/gcc.c-torture/execute/compare-2.c ! 485892504b ./gcc/testsuite/gcc.c-torture/execute/compare-3.c ! 760972136b ./gcc/testsuite/gcc.c-torture/execute/complex-1.c ! 3034158014b ./gcc/testsuite/gcc.c-torture/execute/complex-2.c ! 478689052b ./gcc/testsuite/gcc.c-torture/execute/complex-3.c ! 662396237b ./gcc/testsuite/gcc.c-torture/execute/complex-4.c ! 1022468052b ./gcc/testsuite/gcc.c-torture/execute/complex-5.c ! 3814081986b ./gcc/testsuite/gcc.c-torture/execute/complex-6.c ! 1079537985b ./gcc/testsuite/gcc.c-torture/execute/compndlit-1.c ! 3337673351b ./gcc/testsuite/gcc.c-torture/execute/conversion.c ! 1362123497b ./gcc/testsuite/gcc.c-torture/execute/cvt-1.c ! 732726874b ./gcc/testsuite/gcc.c-torture/execute/cvt-1.x ! 1037739064b ./gcc/testsuite/gcc.c-torture/execute/dbra-1.c ! 3567725587b ./gcc/testsuite/gcc.c-torture/execute/divconst-1.c ! 3321693440b ./gcc/testsuite/gcc.c-torture/execute/divconst-2.c ! 506840532b ./gcc/testsuite/gcc.c-torture/execute/divconst-3.c ! 2615797380b ./gcc/testsuite/gcc.c-torture/execute/divconst-3.x ! 2274689094b ./gcc/testsuite/gcc.c-torture/execute/divmod-1.c ! 1808173474b ./gcc/testsuite/gcc.c-torture/execute/eeprof-1.c ! 2216490291b ./gcc/testsuite/gcc.c-torture/execute/eeprof-1.x ! 1886321368b ./gcc/testsuite/gcc.c-torture/execute/enum-1.c ! 3916720934b ./gcc/testsuite/gcc.c-torture/execute/enum-2.c ! 2211348141b ./gcc/testsuite/gcc.c-torture/execute/execute.exp ! 1911697643b ./gcc/testsuite/gcc.c-torture/execute/extzvsi.c ! 1707039639b ./gcc/testsuite/gcc.c-torture/execute/ffs-1.c ! 3989025058b ./gcc/testsuite/gcc.c-torture/execute/ffs-2.c ! 155906334b ./gcc/testsuite/gcc.c-torture/execute/func-ptr-1.c ! 1157816092b ./gcc/testsuite/gcc.c-torture/execute/gofast.c ! 3451592953b ./gcc/testsuite/gcc.c-torture/execute/ieee/20000320-1.c ! 981656236b ./gcc/testsuite/gcc.c-torture/execute/ieee/20001122-1.c ! 2602526611b ./gcc/testsuite/gcc.c-torture/execute/ieee/20010114-2.c ! 1052207154b ./gcc/testsuite/gcc.c-torture/execute/ieee/20010226-1.c ! 372215662b ./gcc/testsuite/gcc.c-torture/execute/ieee/20011123-1.c ! 2046772610b ./gcc/testsuite/gcc.c-torture/execute/ieee/920518-1.c ! 3673851898b ./gcc/testsuite/gcc.c-torture/execute/ieee/920810-1.c ! 1813910189b ./gcc/testsuite/gcc.c-torture/execute/ieee/930529-1.c ! 73602629b ./gcc/testsuite/gcc.c-torture/execute/ieee/980619-1.c ! 1659512392b ./gcc/testsuite/gcc.c-torture/execute/ieee/980619-1.x ! 1948647907b ./gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-1.c ! 1935804586b ./gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-2.c ! 817625481b ./gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-3.c ! 3452570198b ./gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-4.c ! 330892698b ./gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-5.c ! 4125344101b ./gcc/testsuite/gcc.c-torture/execute/ieee/hugeval.c ! 1953413990b ./gcc/testsuite/gcc.c-torture/execute/ieee/hugeval.x ! 2299573411b ./gcc/testsuite/gcc.c-torture/execute/ieee/ieee.exp ! 959223490b ./gcc/testsuite/gcc.c-torture/execute/ieee/inf-1.c ! 4017678214b ./gcc/testsuite/gcc.c-torture/execute/ieee/minuszero.c ! 3545392440b ./gcc/testsuite/gcc.c-torture/execute/ieee/mzero2.c ! 2290856575b ./gcc/testsuite/gcc.c-torture/execute/ieee/mzero2.x ! 3203549249b ./gcc/testsuite/gcc.c-torture/execute/ieee/mzero3.c ! 545426428b ./gcc/testsuite/gcc.c-torture/execute/ieee/rbug.c ! 2631912054b ./gcc/testsuite/gcc.c-torture/execute/ieee/rbug.x ! 287394580b ./gcc/testsuite/gcc.c-torture/execute/index-1.c ! 3728840213b ./gcc/testsuite/gcc.c-torture/execute/inst-check.c ! 2015511278b ./gcc/testsuite/gcc.c-torture/execute/int-compare.c ! 2503239574b ./gcc/testsuite/gcc.c-torture/execute/longlong.c ! 2701191371b ./gcc/testsuite/gcc.c-torture/execute/loop-1.c ! 3284814162b ./gcc/testsuite/gcc.c-torture/execute/loop-10.c ! 2766603756b ./gcc/testsuite/gcc.c-torture/execute/loop-11.c ! 3036735737b ./gcc/testsuite/gcc.c-torture/execute/loop-12.c ! 1130729209b ./gcc/testsuite/gcc.c-torture/execute/loop-13.c ! 2537268960b ./gcc/testsuite/gcc.c-torture/execute/loop-14.c ! 995264748b ./gcc/testsuite/gcc.c-torture/execute/loop-15.c ! 869002341b ./gcc/testsuite/gcc.c-torture/execute/loop-2.c ! 3443893179b ./gcc/testsuite/gcc.c-torture/execute/loop-2b.c ! 153943550b ./gcc/testsuite/gcc.c-torture/execute/loop-2c.c ! 720145550b ./gcc/testsuite/gcc.c-torture/execute/loop-2d.c ! 3479028442b ./gcc/testsuite/gcc.c-torture/execute/loop-2e.c ! 722341433b ./gcc/testsuite/gcc.c-torture/execute/loop-2e.x ! 1291794748b ./gcc/testsuite/gcc.c-torture/execute/loop-2f.c ! 3280299116b ./gcc/testsuite/gcc.c-torture/execute/loop-2f.x ! 661111306b ./gcc/testsuite/gcc.c-torture/execute/loop-2g.c ! 3280299116b ./gcc/testsuite/gcc.c-torture/execute/loop-2g.x ! 3620613760b ./gcc/testsuite/gcc.c-torture/execute/loop-3.c ! 4068453712b ./gcc/testsuite/gcc.c-torture/execute/loop-3b.c ! 2778041526b ./gcc/testsuite/gcc.c-torture/execute/loop-3c.c ! 3316778727b ./gcc/testsuite/gcc.c-torture/execute/loop-4.c ! 1791416082b ./gcc/testsuite/gcc.c-torture/execute/loop-4b.c ! 3541035036b ./gcc/testsuite/gcc.c-torture/execute/loop-5.c ! 4217961697b ./gcc/testsuite/gcc.c-torture/execute/loop-6.c ! 3649171232b ./gcc/testsuite/gcc.c-torture/execute/loop-7.c ! 3999194364b ./gcc/testsuite/gcc.c-torture/execute/loop-8.c ! 239440461b ./gcc/testsuite/gcc.c-torture/execute/loop-9.c ! 3308349321b ./gcc/testsuite/gcc.c-torture/execute/lshrdi-1.c ! 2178361746b ./gcc/testsuite/gcc.c-torture/execute/mayalias-1.c ! 1655048971b ./gcc/testsuite/gcc.c-torture/execute/memcpy-1.c ! 187988711b ./gcc/testsuite/gcc.c-torture/execute/memcpy-2.c ! 1198957866b ./gcc/testsuite/gcc.c-torture/execute/memcpy-bi.c ! 3672115493b ./gcc/testsuite/gcc.c-torture/execute/memset-1.c ! 2729518429b ./gcc/testsuite/gcc.c-torture/execute/memset-2.c ! 2259057543b ./gcc/testsuite/gcc.c-torture/execute/memset-3.c ! 1146723390b ./gcc/testsuite/gcc.c-torture/execute/mod-1.c ! 462740811b ./gcc/testsuite/gcc.c-torture/execute/nest-stdar-1.c ! 843122257b ./gcc/testsuite/gcc.c-torture/execute/nestfunc-1.c ! 2875393797b ./gcc/testsuite/gcc.c-torture/execute/nestfunc-2.c ! 3451120516b ./gcc/testsuite/gcc.c-torture/execute/nestfunc-3.c ! 1193207968b ./gcc/testsuite/gcc.c-torture/execute/nestfunc-4.c ! 1347988605b ./gcc/testsuite/gcc.c-torture/execute/packed-1.c ! 3662025483b ./gcc/testsuite/gcc.c-torture/execute/packed-2.c ! 781350511b ./gcc/testsuite/gcc.c-torture/execute/pending-4.c ! 1246182987b ./gcc/testsuite/gcc.c-torture/execute/ptr-arith-1.c ! 1048909723b ./gcc/testsuite/gcc.c-torture/execute/pure-1.c ! 146053249b ./gcc/testsuite/gcc.c-torture/execute/regstack-1.c ! 1827676873b ./gcc/testsuite/gcc.c-torture/execute/scope-1.c ! 990025742b ./gcc/testsuite/gcc.c-torture/execute/scope-2.c ! 3788353048b ./gcc/testsuite/gcc.c-torture/execute/shiftdi.c ! 968964639b ./gcc/testsuite/gcc.c-torture/execute/simd-1.c ! 2111263962b ./gcc/testsuite/gcc.c-torture/execute/simd-2.c ! 1004975218b ./gcc/testsuite/gcc.c-torture/execute/stdio-opt-1.c ! 2726881848b ./gcc/testsuite/gcc.c-torture/execute/stdio-opt-2.c ! 2215607685b ./gcc/testsuite/gcc.c-torture/execute/stdio-opt-3.c ! 3991648294b ./gcc/testsuite/gcc.c-torture/execute/strcmp-1.c ! 2372605244b ./gcc/testsuite/gcc.c-torture/execute/strcpy-1.c ! 4127514660b ./gcc/testsuite/gcc.c-torture/execute/strct-pack-1.c ! 2567091361b ./gcc/testsuite/gcc.c-torture/execute/strct-pack-2.c ! 3788900866b ./gcc/testsuite/gcc.c-torture/execute/strct-pack-3.c ! 3787465303b ./gcc/testsuite/gcc.c-torture/execute/strct-pack-4.c ! 2204360040b ./gcc/testsuite/gcc.c-torture/execute/strct-stdarg-1.c ! 3993171434b ./gcc/testsuite/gcc.c-torture/execute/strct-varg-1.c ! 13747021b ./gcc/testsuite/gcc.c-torture/execute/strct-varg-1.x ! 3389618360b ./gcc/testsuite/gcc.c-torture/execute/string-opt-1.c ! 2004905304b ./gcc/testsuite/gcc.c-torture/execute/string-opt-10.c ! 1757228388b ./gcc/testsuite/gcc.c-torture/execute/string-opt-11.c ! 3269205009b ./gcc/testsuite/gcc.c-torture/execute/string-opt-12.c ! 1302429529b ./gcc/testsuite/gcc.c-torture/execute/string-opt-13.c ! 1984203373b ./gcc/testsuite/gcc.c-torture/execute/string-opt-14.c ! 206750096b ./gcc/testsuite/gcc.c-torture/execute/string-opt-15.c ! 2089995b ./gcc/testsuite/gcc.c-torture/execute/string-opt-16.c ! 4247898295b ./gcc/testsuite/gcc.c-torture/execute/string-opt-17.c ! 2499130848b ./gcc/testsuite/gcc.c-torture/execute/string-opt-2.c ! 307949358b ./gcc/testsuite/gcc.c-torture/execute/string-opt-3.c ! 1473532603b ./gcc/testsuite/gcc.c-torture/execute/string-opt-4.c ! 2202340101b ./gcc/testsuite/gcc.c-torture/execute/string-opt-5.c ! 196339167b ./gcc/testsuite/gcc.c-torture/execute/string-opt-6.c ! 2437896034b ./gcc/testsuite/gcc.c-torture/execute/string-opt-7.c ! 3642395267b ./gcc/testsuite/gcc.c-torture/execute/string-opt-8.c ! 2299025367b ./gcc/testsuite/gcc.c-torture/execute/string-opt-9.c ! 2255190212b ./gcc/testsuite/gcc.c-torture/execute/strlen-1.c ! 4274645385b ./gcc/testsuite/gcc.c-torture/execute/strncmp-1.c ! 3047570290b ./gcc/testsuite/gcc.c-torture/execute/struct-cpy-1.c ! 2234035225b ./gcc/testsuite/gcc.c-torture/execute/struct-ini-1.c ! 1176467633b ./gcc/testsuite/gcc.c-torture/execute/struct-ini-2.c ! 2162338370b ./gcc/testsuite/gcc.c-torture/execute/struct-ini-3.c ! 3372312182b ./gcc/testsuite/gcc.c-torture/execute/struct-ini-4.c ! 1924491577b ./gcc/testsuite/gcc.c-torture/execute/struct-ret-1.c ! 2222062805b ./gcc/testsuite/gcc.c-torture/execute/struct-ret-2.c ! 2658407134b ./gcc/testsuite/gcc.c-torture/execute/tstdi-1.c ! 1760191623b ./gcc/testsuite/gcc.c-torture/execute/unroll-1.c ! 4100317579b ./gcc/testsuite/gcc.c-torture/execute/va-arg-1.c ! 150011334b ./gcc/testsuite/gcc.c-torture/execute/va-arg-10.c ! 1341755443b ./gcc/testsuite/gcc.c-torture/execute/va-arg-11.c ! 3741851708b ./gcc/testsuite/gcc.c-torture/execute/va-arg-12.c ! 2056576210b ./gcc/testsuite/gcc.c-torture/execute/va-arg-13.c ! 1501818131b ./gcc/testsuite/gcc.c-torture/execute/va-arg-14.c ! 276020100b ./gcc/testsuite/gcc.c-torture/execute/va-arg-15.c ! 4028296238b ./gcc/testsuite/gcc.c-torture/execute/va-arg-16.c ! 2803615477b ./gcc/testsuite/gcc.c-torture/execute/va-arg-17.c ! 2108289558b ./gcc/testsuite/gcc.c-torture/execute/va-arg-18.c ! 4145285080b ./gcc/testsuite/gcc.c-torture/execute/va-arg-19.c ! 3898927180b ./gcc/testsuite/gcc.c-torture/execute/va-arg-2.c ! 366376907b ./gcc/testsuite/gcc.c-torture/execute/va-arg-20.c ! 3416533370b ./gcc/testsuite/gcc.c-torture/execute/va-arg-21.c ! 1403664843b ./gcc/testsuite/gcc.c-torture/execute/va-arg-22.c ! 2661012060b ./gcc/testsuite/gcc.c-torture/execute/va-arg-23.c ! 839866355b ./gcc/testsuite/gcc.c-torture/execute/va-arg-4.c ! 1210036672b ./gcc/testsuite/gcc.c-torture/execute/va-arg-5.c ! 365894168b ./gcc/testsuite/gcc.c-torture/execute/va-arg-6.c ! 2019116109b ./gcc/testsuite/gcc.c-torture/execute/va-arg-7.c ! 3989115940b ./gcc/testsuite/gcc.c-torture/execute/va-arg-8.c ! 2833151734b ./gcc/testsuite/gcc.c-torture/execute/va-arg-9.c ! 1911372417b ./gcc/testsuite/gcc.c-torture/execute/wchar_t-1.c ! 529327846b ./gcc/testsuite/gcc.c-torture/execute/widechar-1.c ! 1902127658b ./gcc/testsuite/gcc.c-torture/execute/widechar-2.c ! 2556092488b ./gcc/testsuite/gcc.c-torture/execute/zerolen-1.c ! 4066787379b ./gcc/testsuite/gcc.c-torture/execute/zerolen-2.c ! 634421910b ./gcc/testsuite/gcc.c-torture/unsorted/386.c ! 2512826658b ./gcc/testsuite/gcc.c-torture/unsorted/86.c ! 1577087180b ./gcc/testsuite/gcc.c-torture/unsorted/BUG1.c ! 2930337150b ./gcc/testsuite/gcc.c-torture/unsorted/BUG11.c ! 645328736b ./gcc/testsuite/gcc.c-torture/unsorted/BUG12.c ! 3447791606b ./gcc/testsuite/gcc.c-torture/unsorted/BUG13.c ! 1345083343b ./gcc/testsuite/gcc.c-torture/unsorted/BUG16.c ! 2211699544b ./gcc/testsuite/gcc.c-torture/unsorted/BUG17.c ! 3824994911b ./gcc/testsuite/gcc.c-torture/unsorted/BUG18.c ! 3618943848b ./gcc/testsuite/gcc.c-torture/unsorted/BUG2.c ! 2177082003b ./gcc/testsuite/gcc.c-torture/unsorted/BUG21.c ! 1740665759b ./gcc/testsuite/gcc.c-torture/unsorted/BUG22.c ! 4075155387b ./gcc/testsuite/gcc.c-torture/unsorted/BUG23.c ! 3968893634b ./gcc/testsuite/gcc.c-torture/unsorted/BUG24.c ! 459689731b ./gcc/testsuite/gcc.c-torture/unsorted/BUG25.c ! 474328818b ./gcc/testsuite/gcc.c-torture/unsorted/BUG3.c ! 1462112702b ./gcc/testsuite/gcc.c-torture/unsorted/BUG4.c ! 3140531389b ./gcc/testsuite/gcc.c-torture/unsorted/BUG5.c ! 460917160b ./gcc/testsuite/gcc.c-torture/unsorted/BUG6.c ! 305442480b ./gcc/testsuite/gcc.c-torture/unsorted/DFcmp.c ! 4088813022b ./gcc/testsuite/gcc.c-torture/unsorted/HIcmp.c ! 2060643608b ./gcc/testsuite/gcc.c-torture/unsorted/HIset.c ! 2603570420b ./gcc/testsuite/gcc.c-torture/unsorted/PYRBUG.c ! 839150718b ./gcc/testsuite/gcc.c-torture/unsorted/QIcmp.c ! 2111121086b ./gcc/testsuite/gcc.c-torture/unsorted/QIset.c ! 1791217871b ./gcc/testsuite/gcc.c-torture/unsorted/SFset.c ! 3855537843b ./gcc/testsuite/gcc.c-torture/unsorted/SIcmp.c ! 2010223878b ./gcc/testsuite/gcc.c-torture/unsorted/SIset.c ! 367886956b ./gcc/testsuite/gcc.c-torture/unsorted/UHIcmp.c ! 3380740291b ./gcc/testsuite/gcc.c-torture/unsorted/UQIcmp.c ! 3065994513b ./gcc/testsuite/gcc.c-torture/unsorted/USIcmp.c ! 51945996b ./gcc/testsuite/gcc.c-torture/unsorted/a.c ! 2687046562b ./gcc/testsuite/gcc.c-torture/unsorted/a1.c ! 3122819825b ./gcc/testsuite/gcc.c-torture/unsorted/a3.c ! 1430858172b ./gcc/testsuite/gcc.c-torture/unsorted/aa.c ! 1905897475b ./gcc/testsuite/gcc.c-torture/unsorted/aaa.c ! 2128951928b ./gcc/testsuite/gcc.c-torture/unsorted/abs.c ! 4087775597b ./gcc/testsuite/gcc.c-torture/unsorted/ac.c ! 4108214922b ./gcc/testsuite/gcc.c-torture/unsorted/acc.c ! 1561010997b ./gcc/testsuite/gcc.c-torture/unsorted/add.c ! 178238083b ./gcc/testsuite/gcc.c-torture/unsorted/add386.c ! 425148131b ./gcc/testsuite/gcc.c-torture/unsorted/addcc.c ! 1010727230b ./gcc/testsuite/gcc.c-torture/unsorted/andm.c ! 1804826393b ./gcc/testsuite/gcc.c-torture/unsorted/andmem.c ! 1939054464b ./gcc/testsuite/gcc.c-torture/unsorted/andn.c ! 958534456b ./gcc/testsuite/gcc.c-torture/unsorted/andok.c ! 4100679649b ./gcc/testsuite/gcc.c-torture/unsorted/andsi.c ! 1812217387b ./gcc/testsuite/gcc.c-torture/unsorted/andsparc.c ! 1261488553b ./gcc/testsuite/gcc.c-torture/unsorted/aos.c ! 3358660284b ./gcc/testsuite/gcc.c-torture/unsorted/arr.c ! 529589500b ./gcc/testsuite/gcc.c-torture/unsorted/as.c ! 2341774096b ./gcc/testsuite/gcc.c-torture/unsorted/ase.c ! 3604241750b ./gcc/testsuite/gcc.c-torture/unsorted/b.c ! 278197700b ./gcc/testsuite/gcc.c-torture/unsorted/b1.c ! 1838022421b ./gcc/testsuite/gcc.c-torture/unsorted/b2.c ! 1297638431b ./gcc/testsuite/gcc.c-torture/unsorted/b3.c ! 98906803b ./gcc/testsuite/gcc.c-torture/unsorted/b88.c ! 4166624962b ./gcc/testsuite/gcc.c-torture/unsorted/bad.c ! 909355576b ./gcc/testsuite/gcc.c-torture/unsorted/band.c ! 782217635b ./gcc/testsuite/gcc.c-torture/unsorted/bb0.c ! 104727600b ./gcc/testsuite/gcc.c-torture/unsorted/bb1.c ! 2113129899b ./gcc/testsuite/gcc.c-torture/unsorted/bbb.c ! 2670310529b ./gcc/testsuite/gcc.c-torture/unsorted/bc.c ! 3090384483b ./gcc/testsuite/gcc.c-torture/unsorted/bcopy.c ! 2685623920b ./gcc/testsuite/gcc.c-torture/unsorted/bf.c ! 1825505370b ./gcc/testsuite/gcc.c-torture/unsorted/bfins.c ! 3222678366b ./gcc/testsuite/gcc.c-torture/unsorted/bfx.c ! 1818008243b ./gcc/testsuite/gcc.c-torture/unsorted/bge.c ! 1169896684b ./gcc/testsuite/gcc.c-torture/unsorted/bit.c ! 4267772046b ./gcc/testsuite/gcc.c-torture/unsorted/bitf.c ! 1244917866b ./gcc/testsuite/gcc.c-torture/unsorted/bitw.c ! 3205164461b ./gcc/testsuite/gcc.c-torture/unsorted/blk.c ! 3879987638b ./gcc/testsuite/gcc.c-torture/unsorted/bt.c ! 3930520391b ./gcc/testsuite/gcc.c-torture/unsorted/bt386.c ! 2778832219b ./gcc/testsuite/gcc.c-torture/unsorted/bug.c ! 909529146b ./gcc/testsuite/gcc.c-torture/unsorted/bugc.c ! 3859987766b ./gcc/testsuite/gcc.c-torture/unsorted/buns.c ! 2981977682b ./gcc/testsuite/gcc.c-torture/unsorted/bx.c ! 3780608001b ./gcc/testsuite/gcc.c-torture/unsorted/c.c ! 3824196498b ./gcc/testsuite/gcc.c-torture/unsorted/c1.c ! 3656093116b ./gcc/testsuite/gcc.c-torture/unsorted/c2.c ! 3818633964b ./gcc/testsuite/gcc.c-torture/unsorted/call.c ! 3745915003b ./gcc/testsuite/gcc.c-torture/unsorted/call386.c ! 3496796739b ./gcc/testsuite/gcc.c-torture/unsorted/callind.c ! 162598922b ./gcc/testsuite/gcc.c-torture/unsorted/cc.c ! 2143288465b ./gcc/testsuite/gcc.c-torture/unsorted/charmtst.c ! 1855363258b ./gcc/testsuite/gcc.c-torture/unsorted/cmb.c ! 1285046858b ./gcc/testsuite/gcc.c-torture/unsorted/cmp.c ! 1423312127b ./gcc/testsuite/gcc.c-torture/unsorted/cmphi.c ! 2318993881b ./gcc/testsuite/gcc.c-torture/unsorted/cmpsi386.c ! 4235211728b ./gcc/testsuite/gcc.c-torture/unsorted/cmul.c ! 854170788b ./gcc/testsuite/gcc.c-torture/unsorted/cn1.c ! 935857365b ./gcc/testsuite/gcc.c-torture/unsorted/comb.c ! 1810135123b ./gcc/testsuite/gcc.c-torture/unsorted/consec.c ! 181790131b ./gcc/testsuite/gcc.c-torture/unsorted/const.c ! 2353636753b ./gcc/testsuite/gcc.c-torture/unsorted/conv.c ! 3252387675b ./gcc/testsuite/gcc.c-torture/unsorted/conv_tst.c ! 2280634062b ./gcc/testsuite/gcc.c-torture/unsorted/cp.c ! 1738381851b ./gcc/testsuite/gcc.c-torture/unsorted/csebug.c ! 1464956912b ./gcc/testsuite/gcc.c-torture/unsorted/cvt.c ! 3440041653b ./gcc/testsuite/gcc.c-torture/unsorted/d.c ! 3851183583b ./gcc/testsuite/gcc.c-torture/unsorted/dbl_parm.c ! 606535868b ./gcc/testsuite/gcc.c-torture/unsorted/dblbug.c ! 2925438011b ./gcc/testsuite/gcc.c-torture/unsorted/ddd.c ! 2791348449b ./gcc/testsuite/gcc.c-torture/unsorted/dead.c ! 609366019b ./gcc/testsuite/gcc.c-torture/unsorted/delay.c ! 3029371757b ./gcc/testsuite/gcc.c-torture/unsorted/di.c ! 420255576b ./gcc/testsuite/gcc.c-torture/unsorted/dic.c ! 716977667b ./gcc/testsuite/gcc.c-torture/unsorted/dilayout.c ! 1071957355b ./gcc/testsuite/gcc.c-torture/unsorted/dimove.c ! 163894537b ./gcc/testsuite/gcc.c-torture/unsorted/dimul.c ! 1962021495b ./gcc/testsuite/gcc.c-torture/unsorted/div.c ! 1911882561b ./gcc/testsuite/gcc.c-torture/unsorted/divdf.c ! 3643811739b ./gcc/testsuite/gcc.c-torture/unsorted/dm.c ! 3366321383b ./gcc/testsuite/gcc.c-torture/unsorted/dshift.c ! 691935419b ./gcc/testsuite/gcc.c-torture/unsorted/e.c ! 3422715387b ./gcc/testsuite/gcc.c-torture/unsorted/ex.c ! 3295431583b ./gcc/testsuite/gcc.c-torture/unsorted/ext.c ! 3418757365b ./gcc/testsuite/gcc.c-torture/unsorted/f1.c ! 1799287010b ./gcc/testsuite/gcc.c-torture/unsorted/f2.c ! 742887905b ./gcc/testsuite/gcc.c-torture/unsorted/fdmul.c ! 2705424580b ./gcc/testsuite/gcc.c-torture/unsorted/flo.c ! 3396096931b ./gcc/testsuite/gcc.c-torture/unsorted/float.c ! 1861286853b ./gcc/testsuite/gcc.c-torture/unsorted/flt_const.c ! 1778808555b ./gcc/testsuite/gcc.c-torture/unsorted/fnul.c ! 837581993b ./gcc/testsuite/gcc.c-torture/unsorted/foo.c ! 2603890884b ./gcc/testsuite/gcc.c-torture/unsorted/forgetcc.c ! 1311942689b ./gcc/testsuite/gcc.c-torture/unsorted/fq.c ! 2823794598b ./gcc/testsuite/gcc.c-torture/unsorted/g.c ! 4182806672b ./gcc/testsuite/gcc.c-torture/unsorted/gen_tst.c ! 440386278b ./gcc/testsuite/gcc.c-torture/unsorted/glob.c ! 2712797412b ./gcc/testsuite/gcc.c-torture/unsorted/gronk.c ! 2506280517b ./gcc/testsuite/gcc.c-torture/unsorted/hi.c ! 2912660272b ./gcc/testsuite/gcc.c-torture/unsorted/hibug.c ! 3171392500b ./gcc/testsuite/gcc.c-torture/unsorted/i++.c ! 1463391444b ./gcc/testsuite/gcc.c-torture/unsorted/i.c ! 1222319492b ./gcc/testsuite/gcc.c-torture/unsorted/ic.c ! 2244080969b ./gcc/testsuite/gcc.c-torture/unsorted/icmp.c ! 3544970343b ./gcc/testsuite/gcc.c-torture/unsorted/ifreg.c ! 1391595029b ./gcc/testsuite/gcc.c-torture/unsorted/imm.c ! 125065552b ./gcc/testsuite/gcc.c-torture/unsorted/isinf.c ! 3010843181b ./gcc/testsuite/gcc.c-torture/unsorted/jmp.c ! 2660706970b ./gcc/testsuite/gcc.c-torture/unsorted/jumptab.c ! 1238043529b ./gcc/testsuite/gcc.c-torture/unsorted/l.c ! 2953050089b ./gcc/testsuite/gcc.c-torture/unsorted/layout.c ! 3456840745b ./gcc/testsuite/gcc.c-torture/unsorted/lbug.c ! 2906412336b ./gcc/testsuite/gcc.c-torture/unsorted/ll1.c ! 2085462310b ./gcc/testsuite/gcc.c-torture/unsorted/llbug.c ! 1419215241b ./gcc/testsuite/gcc.c-torture/unsorted/lll.c ! 3825978026b ./gcc/testsuite/gcc.c-torture/unsorted/load8.c ! 791778479b ./gcc/testsuite/gcc.c-torture/unsorted/loadhicc.c ! 439371726b ./gcc/testsuite/gcc.c-torture/unsorted/log2.c ! 418270073b ./gcc/testsuite/gcc.c-torture/unsorted/logic.c ! 388000712b ./gcc/testsuite/gcc.c-torture/unsorted/loop-1.c ! 2317019693b ./gcc/testsuite/gcc.c-torture/unsorted/loop386.c ! 3780249238b ./gcc/testsuite/gcc.c-torture/unsorted/lop.c ! 3011092171b ./gcc/testsuite/gcc.c-torture/unsorted/m1.c ! 1664237855b ./gcc/testsuite/gcc.c-torture/unsorted/m2.c ! 836486950b ./gcc/testsuite/gcc.c-torture/unsorted/m5.c ! 1315431234b ./gcc/testsuite/gcc.c-torture/unsorted/m68.c ! 1140567438b ./gcc/testsuite/gcc.c-torture/unsorted/mbyte.c ! 1343630589b ./gcc/testsuite/gcc.c-torture/unsorted/mchar.c ! 1971867771b ./gcc/testsuite/gcc.c-torture/unsorted/mcmp.c ! 1050674918b ./gcc/testsuite/gcc.c-torture/unsorted/mdouble.c ! 3545288402b ./gcc/testsuite/gcc.c-torture/unsorted/memtst.c ! 1607208885b ./gcc/testsuite/gcc.c-torture/unsorted/miscomp.c ! 517599771b ./gcc/testsuite/gcc.c-torture/unsorted/mm.c ! 3498200377b ./gcc/testsuite/gcc.c-torture/unsorted/mod.c ! 852673854b ./gcc/testsuite/gcc.c-torture/unsorted/modcc.c ! 3290683845b ./gcc/testsuite/gcc.c-torture/unsorted/move.c ! 2934241414b ./gcc/testsuite/gcc.c-torture/unsorted/move_qhi.c ! 2156076426b ./gcc/testsuite/gcc.c-torture/unsorted/mregtst.c ! 2833441830b ./gcc/testsuite/gcc.c-torture/unsorted/msp.c ! 3686945259b ./gcc/testsuite/gcc.c-torture/unsorted/mtst.c ! 650788304b ./gcc/testsuite/gcc.c-torture/unsorted/mu.c ! 3210222105b ./gcc/testsuite/gcc.c-torture/unsorted/mul.c ! 3114106310b ./gcc/testsuite/gcc.c-torture/unsorted/mword.c ! 206884481b ./gcc/testsuite/gcc.c-torture/unsorted/mword1.c ! 1942143253b ./gcc/testsuite/gcc.c-torture/unsorted/n.c ! 1193753806b ./gcc/testsuite/gcc.c-torture/unsorted/n1.c ! 3021632957b ./gcc/testsuite/gcc.c-torture/unsorted/nand.c ! 1255157012b ./gcc/testsuite/gcc.c-torture/unsorted/neg.c ! 2666891841b ./gcc/testsuite/gcc.c-torture/unsorted/o.c ! 1641502386b ./gcc/testsuite/gcc.c-torture/unsorted/omit.c ! 2947983429b ./gcc/testsuite/gcc.c-torture/unsorted/opout.c ! 4144556375b ./gcc/testsuite/gcc.c-torture/unsorted/opt.c ! 1221510857b ./gcc/testsuite/gcc.c-torture/unsorted/or.c ! 2570634505b ./gcc/testsuite/gcc.c-torture/unsorted/or386.c ! 3299772143b ./gcc/testsuite/gcc.c-torture/unsorted/p.c ! 3498239118b ./gcc/testsuite/gcc.c-torture/unsorted/parms.c ! 4291861284b ./gcc/testsuite/gcc.c-torture/unsorted/pass.c ! 1371923458b ./gcc/testsuite/gcc.c-torture/unsorted/pmt.c ! 2511249387b ./gcc/testsuite/gcc.c-torture/unsorted/poor.c ! 745326023b ./gcc/testsuite/gcc.c-torture/unsorted/pp.c ! 1391345399b ./gcc/testsuite/gcc.c-torture/unsorted/pret-arg.c ! 697484600b ./gcc/testsuite/gcc.c-torture/unsorted/pyr.c ! 3407302768b ./gcc/testsuite/gcc.c-torture/unsorted/pyr2.c ! 1835488344b ./gcc/testsuite/gcc.c-torture/unsorted/q.c ! 1427595492b ./gcc/testsuite/gcc.c-torture/unsorted/r.c ! 4283361995b ./gcc/testsuite/gcc.c-torture/unsorted/r1.c ! 4078624014b ./gcc/testsuite/gcc.c-torture/unsorted/rel.c ! 3414105414b ./gcc/testsuite/gcc.c-torture/unsorted/rmsc.c ! 1012332947b ./gcc/testsuite/gcc.c-torture/unsorted/round.c ! 3178090569b ./gcc/testsuite/gcc.c-torture/unsorted/run.c ! 1744325584b ./gcc/testsuite/gcc.c-torture/unsorted/s.c ! 3862968210b ./gcc/testsuite/gcc.c-torture/unsorted/sar.c ! 4292026279b ./gcc/testsuite/gcc.c-torture/unsorted/sc.c ! 2416335748b ./gcc/testsuite/gcc.c-torture/unsorted/scal.c ! 1669731371b ./gcc/testsuite/gcc.c-torture/unsorted/scc.c ! 3073011184b ./gcc/testsuite/gcc.c-torture/unsorted/scond.c ! 4127283390b ./gcc/testsuite/gcc.c-torture/unsorted/selfrec.c ! 772856379b ./gcc/testsuite/gcc.c-torture/unsorted/seq.c ! 3595435741b ./gcc/testsuite/gcc.c-torture/unsorted/set386.c ! 772098437b ./gcc/testsuite/gcc.c-torture/unsorted/set88.c ! 1917728540b ./gcc/testsuite/gcc.c-torture/unsorted/sh.c ! 2510322715b ./gcc/testsuite/gcc.c-torture/unsorted/shand.c ! 369189446b ./gcc/testsuite/gcc.c-torture/unsorted/shft.c ! 786362264b ./gcc/testsuite/gcc.c-torture/unsorted/shift.c ! 1326810661b ./gcc/testsuite/gcc.c-torture/unsorted/shloop.c ! 1731774655b ./gcc/testsuite/gcc.c-torture/unsorted/shm.c ! 3333038544b ./gcc/testsuite/gcc.c-torture/unsorted/signext.c ! 3198420130b ./gcc/testsuite/gcc.c-torture/unsorted/signext2.c ! 1627754274b ./gcc/testsuite/gcc.c-torture/unsorted/sim.c ! 380795934b ./gcc/testsuite/gcc.c-torture/unsorted/simple.c ! 927966180b ./gcc/testsuite/gcc.c-torture/unsorted/sne.c ! 1732276088b ./gcc/testsuite/gcc.c-torture/unsorted/sound.c ! 1462108320b ./gcc/testsuite/gcc.c-torture/unsorted/sparcbug.c ! 680850660b ./gcc/testsuite/gcc.c-torture/unsorted/speed.c ! 1459712797b ./gcc/testsuite/gcc.c-torture/unsorted/stor.c ! 3521937419b ./gcc/testsuite/gcc.c-torture/unsorted/store0.c ! 429514643b ./gcc/testsuite/gcc.c-torture/unsorted/storecc.c ! 2367209182b ./gcc/testsuite/gcc.c-torture/unsorted/str.c ! 1212744014b ./gcc/testsuite/gcc.c-torture/unsorted/stru.c ! 2936891454b ./gcc/testsuite/gcc.c-torture/unsorted/structret.c ! 1723639277b ./gcc/testsuite/gcc.c-torture/unsorted/stuct.c ! 3579655725b ./gcc/testsuite/gcc.c-torture/unsorted/sub32.c ! 2225754564b ./gcc/testsuite/gcc.c-torture/unsorted/subcc.c ! 1610852268b ./gcc/testsuite/gcc.c-torture/unsorted/subcse.c ! 1291307272b ./gcc/testsuite/gcc.c-torture/unsorted/sym.c ! 319785041b ./gcc/testsuite/gcc.c-torture/unsorted/symconst.c ! 1215688317b ./gcc/testsuite/gcc.c-torture/unsorted/t.c ! 585245677b ./gcc/testsuite/gcc.c-torture/unsorted/test-flow.c ! 1417505636b ./gcc/testsuite/gcc.c-torture/unsorted/test-loop.c ! 3564367767b ./gcc/testsuite/gcc.c-torture/unsorted/test.c ! 1907124578b ./gcc/testsuite/gcc.c-torture/unsorted/time.c ! 316618822b ./gcc/testsuite/gcc.c-torture/unsorted/tmp.c ! 551299652b ./gcc/testsuite/gcc.c-torture/unsorted/trivial.c ! 54055479b ./gcc/testsuite/gcc.c-torture/unsorted/trunc.c ! 1458206113b ./gcc/testsuite/gcc.c-torture/unsorted/u.c ! 620556027b ./gcc/testsuite/gcc.c-torture/unsorted/udconvert.c ! 4030884798b ./gcc/testsuite/gcc.c-torture/unsorted/udivmod4.c ! 2240659922b ./gcc/testsuite/gcc.c-torture/unsorted/uns.c ! 4067751424b ./gcc/testsuite/gcc.c-torture/unsorted/uns_tst.c ! 434767322b ./gcc/testsuite/gcc.c-torture/unsorted/unsorted.exp ! 3061572007b ./gcc/testsuite/gcc.c-torture/unsorted/uuarg.c ! 339227429b ./gcc/testsuite/gcc.c-torture/unsorted/v.c ! 97022866b ./gcc/testsuite/gcc.c-torture/unsorted/w.c ! 502682554b ./gcc/testsuite/gcc.c-torture/unsorted/ww.c ! 2143513908b ./gcc/testsuite/gcc.c-torture/unsorted/x.c ! 1561412324b ./gcc/testsuite/gcc.c-torture/unsorted/xb.c ! 3522679530b ./gcc/testsuite/gcc.c-torture/unsorted/xbg.c ! 2513066849b ./gcc/testsuite/gcc.c-torture/unsorted/xc.c ! 3791802167b ./gcc/testsuite/gcc.c-torture/unsorted/xcsebug.c ! 753765877b ./gcc/testsuite/gcc.c-torture/unsorted/xdi.c ! 2449229476b ./gcc/testsuite/gcc.c-torture/unsorted/xfoo.c ! 1976729056b ./gcc/testsuite/gcc.c-torture/unsorted/xi.c ! 467677832b ./gcc/testsuite/gcc.c-torture/unsorted/xlop.c ! 2772134709b ./gcc/testsuite/gcc.c-torture/unsorted/xmtst.c ! 2887718336b ./gcc/testsuite/gcc.c-torture/unsorted/xneg.c ! 891585403b ./gcc/testsuite/gcc.c-torture/unsorted/xopt.c ! 3158383083b ./gcc/testsuite/gcc.c-torture/unsorted/xor.c ! 2275025612b ./gcc/testsuite/gcc.c-torture/unsorted/xorn.c ! 696616007b ./gcc/testsuite/gcc.c-torture/unsorted/xp.c ! 3369544877b ./gcc/testsuite/gcc.c-torture/unsorted/xpp.c ! 687461532b ./gcc/testsuite/gcc.c-torture/unsorted/xs.c ! 2453856793b ./gcc/testsuite/gcc.c-torture/unsorted/xsh.c ! 749676174b ./gcc/testsuite/gcc.c-torture/unsorted/xz.c ! 3236233174b ./gcc/testsuite/gcc.c-torture/unsorted/xzz.c ! 1020735670b ./gcc/testsuite/gcc.dg/20000108-1.c ! 289377156b ./gcc/testsuite/gcc.dg/20000111-1.c ! 441096099b ./gcc/testsuite/gcc.dg/20000609-1.c ! 843859427b ./gcc/testsuite/gcc.dg/20000614-1.c ! 3590467322b ./gcc/testsuite/gcc.dg/20000614-2.c ! 2687914259b ./gcc/testsuite/gcc.dg/20000623-1.c ! 1697494088b ./gcc/testsuite/gcc.dg/20000629-1.c ! 2411171658b ./gcc/testsuite/gcc.dg/20000707-1.c ! 1242354775b ./gcc/testsuite/gcc.dg/20000715-1.c ! 2414727429b ./gcc/testsuite/gcc.dg/20000720-1.c ! 2628509241b ./gcc/testsuite/gcc.dg/20000724-1.c ! 855317863b ./gcc/testsuite/gcc.dg/20000807-1.c ! 2282190390b ./gcc/testsuite/gcc.dg/20000904-1.c ! 1205584698b ./gcc/testsuite/gcc.dg/20000906-1.c ! 2401733773b ./gcc/testsuite/gcc.dg/20000926-1.c ! 912559247b ./gcc/testsuite/gcc.dg/20001009-1.c ! 4235098888b ./gcc/testsuite/gcc.dg/20001012-1.c ! 3084023965b ./gcc/testsuite/gcc.dg/20001012-2.c ! 2504286200b ./gcc/testsuite/gcc.dg/20001013-1.c ! 989710521b ./gcc/testsuite/gcc.dg/20001023-1.c ! 2648600842b ./gcc/testsuite/gcc.dg/20001101-1.c ! 452608955b ./gcc/testsuite/gcc.dg/20001102-1.c ! 2644591049b ./gcc/testsuite/gcc.dg/20001108-1.c ! 3796315325b ./gcc/testsuite/gcc.dg/20001116-1.c ! 280677441b ./gcc/testsuite/gcc.dg/20001117-1.c ! 752060605b ./gcc/testsuite/gcc.dg/20001127-1.c ! 1243003570b ./gcc/testsuite/gcc.dg/20001201-1.c ! 1646064105b ./gcc/testsuite/gcc.dg/20001228-1.c ! 2498549558b ./gcc/testsuite/gcc.dg/20010202-1.c ! 2616951355b ./gcc/testsuite/gcc.dg/20010405-1.c ! 2545788691b ./gcc/testsuite/gcc.dg/20010423-1.c ! 3041407018b ./gcc/testsuite/gcc.dg/20010520-1.c ! 3520626317b ./gcc/testsuite/gcc.dg/20010622-1.c ! 2877988798b ./gcc/testsuite/gcc.dg/20010822-1.c ! 2149609410b ./gcc/testsuite/gcc.dg/20010912-1.c ! 1230888954b ./gcc/testsuite/gcc.dg/20011008-1.c ! 2932858639b ./gcc/testsuite/gcc.dg/20011008-2.c ! 2130390160b ./gcc/testsuite/gcc.dg/20011009-1.c ! 1094879191b ./gcc/testsuite/gcc.dg/20011015-1.c ! 3257749642b ./gcc/testsuite/gcc.dg/20011018-1.c ! 1920312928b ./gcc/testsuite/gcc.dg/20011021-1.c ! 1850474246b ./gcc/testsuite/gcc.dg/20011029-2.c ! 1124303586b ./gcc/testsuite/gcc.dg/20011107-1.c ! 3977721072b ./gcc/testsuite/gcc.dg/20011113-1.c ! 43629702b ./gcc/testsuite/gcc.dg/20011119-1.c ! 1970395659b ./gcc/testsuite/gcc.dg/20011127-1.c ! 640681704b ./gcc/testsuite/gcc.dg/20011130-1.c ! 715751053b ./gcc/testsuite/gcc.dg/20011214-1.c ! 3615281870b ./gcc/testsuite/gcc.dg/20020103-1.c ! 2180708198b ./gcc/testsuite/gcc.dg/20020104-1.c ! 98244853b ./gcc/testsuite/gcc.dg/20020108-1.c ! 951724852b ./gcc/testsuite/gcc.dg/20020115-1.c ! 785896302b ./gcc/testsuite/gcc.dg/20020116-1.c ! 3842134030b ./gcc/testsuite/gcc.dg/20020116-2.c ! 4113077329b ./gcc/testsuite/gcc.dg/20020118-1.c ! 3751699275b ./gcc/testsuite/gcc.dg/20020122-1.c ! 150189901b ./gcc/testsuite/gcc.dg/20020122-2.c ! 57782331b ./gcc/testsuite/gcc.dg/20020122-3.c ! 2367653115b ./gcc/testsuite/gcc.dg/20020122-4.c ! 4139034769b ./gcc/testsuite/gcc.dg/20020201-1.c ! 205098899b ./gcc/testsuite/gcc.dg/20020201-2.c ! 821274050b ./gcc/testsuite/gcc.dg/20020201-3.c ! 2936802890b ./gcc/testsuite/gcc.dg/20020201-4.c ! 2531686627b ./gcc/testsuite/gcc.dg/20020206-1.c ! 3783933618b ./gcc/testsuite/gcc.dg/20020210-1.c ! 3546737192b ./gcc/testsuite/gcc.dg/20020218-1.c ! 819933725b ./gcc/testsuite/gcc.dg/20020219-1.c ! 794792782b ./gcc/testsuite/gcc.dg/20020220-1.c ! 1662033181b ./gcc/testsuite/gcc.dg/20020220-2.c ! 2954578455b ./gcc/testsuite/gcc.dg/20020222-1.c ! 2546434352b ./gcc/testsuite/gcc.dg/20020224-1.c ! 627755992b ./gcc/testsuite/gcc.dg/20020304-1.c ! 2738421039b ./gcc/testsuite/gcc.dg/20020310-1.c ! 767384458b ./gcc/testsuite/gcc.dg/20020312-1.c ! 2062142429b ./gcc/testsuite/gcc.dg/20020312-2.c ! 353733237b ./gcc/testsuite/gcc.dg/20020313-1.c ! 663674028b ./gcc/testsuite/gcc.dg/20020319-1.c ! 3802202669b ./gcc/testsuite/gcc.dg/20020326-1.c ! 575770214b ./gcc/testsuite/gcc.dg/20020411-1.c ! 2767099233b ./gcc/testsuite/gcc.dg/20020415-1.c ! 2427264054b ./gcc/testsuite/gcc.dg/20020416-1.c ! 1785651312b ./gcc/testsuite/gcc.dg/20020418-1.c ! 1527728757b ./gcc/testsuite/gcc.dg/20020418-2.c ! 19296994b ./gcc/testsuite/gcc.dg/20020425-1.c ! 2088656022b ./gcc/testsuite/gcc.dg/20020426-1.c ! 4234050901b ./gcc/testsuite/gcc.dg/20020426-2.c ! 3359725112b ./gcc/testsuite/gcc.dg/20020430-1.c ! 2963915296b ./gcc/testsuite/gcc.dg/20020503-1.c ! 3667555097b ./gcc/testsuite/gcc.dg/20020517-1.c ! 536325431b ./gcc/testsuite/gcc.dg/20020523-1.c ! 536325431b ./gcc/testsuite/gcc.dg/20020523-2.c ! 886670658b ./gcc/testsuite/gcc.dg/20020527-1.c ! 2086765142b ./gcc/testsuite/gcc.dg/20020530-1.c ! 4218205154b ./gcc/testsuite/gcc.dg/20020531-1.c ! 1411493320b ./gcc/testsuite/gcc.dg/20020607-1.c ! 1354165258b ./gcc/testsuite/gcc.dg/20020607-2.c ! 1518490714b ./gcc/testsuite/gcc.dg/20020616-1.c ! 2940242394b ./gcc/testsuite/gcc.dg/20020620-1.c ! 1126442809b ./gcc/testsuite/gcc.dg/20020919-1.c ! 1344027764b ./gcc/testsuite/gcc.dg/20020926-1.c ! 3573081438b ./gcc/testsuite/gcc.dg/20021006-1.c ! 344810811b ./gcc/testsuite/gcc.dg/20021014-1.c ! 759072094b ./gcc/testsuite/gcc.dg/20021018-1.c ! 2475506444b ./gcc/testsuite/gcc.dg/20021023-1.c ! 233701902b ./gcc/testsuite/gcc.dg/20021029-1.c ! 2468373945b ./gcc/testsuite/gcc.dg/20021029-2.c ! 2578785970b ./gcc/testsuite/gcc.dg/20021116-1.c ! 32314160b ./gcc/testsuite/gcc.dg/20030120-1.c ! 6501003b ./gcc/testsuite/gcc.dg/20030123-1.c ! 2206154706b ./gcc/testsuite/gcc.dg/20030129-1.c ! 4052537013b ./gcc/testsuite/gcc.dg/20030213-1.c ! 1045670620b ./gcc/testsuite/gcc.dg/20030225-1.c ! 11242163b ./gcc/testsuite/gcc.dg/20030309-1.c ! 539628878b ./gcc/testsuite/gcc.dg/20030321-1.c ! 3937697137b ./gcc/testsuite/gcc.dg/20030323-1.c ! 2744313002b ./gcc/testsuite/gcc.dg/20030324-1.c ! 3096769307b ./gcc/testsuite/gcc.dg/20030331-2.c ! 1058638767b ./gcc/testsuite/gcc.dg/20030414-1.c ! 562276436b ./gcc/testsuite/gcc.dg/20030625-1.c ! 234439247b ./gcc/testsuite/gcc.dg/20030627-1.c ! 2034015147b ./gcc/testsuite/gcc.dg/20030702-1.c ! 633614653b ./gcc/testsuite/gcc.dg/20030708-1.c ! 432289486b ./gcc/testsuite/gcc.dg/20030717-1.c ! 2732676543b ./gcc/testsuite/gcc.dg/20030721-1.c ! 2613783087b ./gcc/testsuite/gcc.dg/20030815-1.c ! 590305377b ./gcc/testsuite/gcc.dg/20030926-1.c ! 3262950551b ./gcc/testsuite/gcc.dg/20031002-1.c ! 3703962415b ./gcc/testsuite/gcc.dg/20031009-1.c ! 3553525690b ./gcc/testsuite/gcc.dg/20031108-1.c ! 3938469902b ./gcc/testsuite/gcc.dg/20031201-2.c ! 1753956620b ./gcc/testsuite/gcc.dg/20031202-1.c ! 2896586238b ./gcc/testsuite/gcc.dg/20040112-1.c ! 1577979025b ./gcc/testsuite/gcc.dg/920413-1.c ! 2176221389b ./gcc/testsuite/gcc.dg/940409-1.c ! 1567764883b ./gcc/testsuite/gcc.dg/940510-1.c ! 1435563142b ./gcc/testsuite/gcc.dg/951130-1.c ! 2196979187b ./gcc/testsuite/gcc.dg/980211-1.c ! 1568764691b ./gcc/testsuite/gcc.dg/980217-1.c ! 474510323b ./gcc/testsuite/gcc.dg/980226-1.c ! 2630738251b ./gcc/testsuite/gcc.dg/980312-1.c ! 2097327868b ./gcc/testsuite/gcc.dg/980313-1.c ! 372605499b ./gcc/testsuite/gcc.dg/980414-1.c ! 1500377530b ./gcc/testsuite/gcc.dg/980502-1.c ! 1541851881b ./gcc/testsuite/gcc.dg/980520-1.c ! 1113123204b ./gcc/testsuite/gcc.dg/980523-1.c ! 2389539979b ./gcc/testsuite/gcc.dg/980526-1.c ! 384442948b ./gcc/testsuite/gcc.dg/980709-1.c ! 1276688993b ./gcc/testsuite/gcc.dg/980816-1.c ! 2659217655b ./gcc/testsuite/gcc.dg/980827-1.c ! 844249748b ./gcc/testsuite/gcc.dg/990117-1.c ! 3592792935b ./gcc/testsuite/gcc.dg/990130-1.c ! 2565768458b ./gcc/testsuite/gcc.dg/990213-1.c ! 2125486048b ./gcc/testsuite/gcc.dg/990213-2.c ! 318703178b ./gcc/testsuite/gcc.dg/990214-1.c ! 1614449588b ./gcc/testsuite/gcc.dg/990424-1.c ! 1324715064b ./gcc/testsuite/gcc.dg/990506-0.c ! 714032148b ./gcc/testsuite/gcc.dg/990524-1.c ! 3071468415b ./gcc/testsuite/gcc.dg/991129-1.c ! 156954019b ./gcc/testsuite/gcc.dg/991209-1.c ! 1980057279b ./gcc/testsuite/gcc.dg/991214-1.c ! 3370443605b ./gcc/testsuite/gcc.dg/991230-1.c ! 2426423235b ./gcc/testsuite/gcc.dg/README ! 943771070b ./gcc/testsuite/gcc.dg/Wconversion.c ! 3364645726b ./gcc/testsuite/gcc.dg/Wlarger-than.c ! 3791055151b ./gcc/testsuite/gcc.dg/Wparentheses-1.c ! 2809247827b ./gcc/testsuite/gcc.dg/Wreturn-type.c ! 3316229121b ./gcc/testsuite/gcc.dg/Wreturn-type2.c ! 3907876407b ./gcc/testsuite/gcc.dg/Wshadow-1.c ! 3928913400b ./gcc/testsuite/gcc.dg/Wswitch-2.c ! 3095170584b ./gcc/testsuite/gcc.dg/Wswitch-default.c ! 2102653224b ./gcc/testsuite/gcc.dg/Wswitch-enum.c ! 49151727b ./gcc/testsuite/gcc.dg/Wswitch.c ! 2078992029b ./gcc/testsuite/gcc.dg/Wunknownprag.c ! 1674197654b ./gcc/testsuite/gcc.dg/Wunreachable-1.c ! 3581949676b ./gcc/testsuite/gcc.dg/Wunreachable-2.c ! 4265013314b ./gcc/testsuite/gcc.dg/Wunreachable-6.c ! 154937648b ./gcc/testsuite/gcc.dg/Wunreachable-7.c ! 382602831b ./gcc/testsuite/gcc.dg/alias-1.c ! 3861827683b ./gcc/testsuite/gcc.dg/alpha-base-1.c ! 3652428612b ./gcc/testsuite/gcc.dg/alpha-base-2.c ! 1456546896b ./gcc/testsuite/gcc.dg/alpha-cix-1.c ! 841368719b ./gcc/testsuite/gcc.dg/alpha-cix-2.c ! 293986620b ./gcc/testsuite/gcc.dg/alpha-max-1.c ! 3844320770b ./gcc/testsuite/gcc.dg/alpha-max-2.c ! 1751513009b ./gcc/testsuite/gcc.dg/altivec-1.c ! 1692268358b ./gcc/testsuite/gcc.dg/altivec-10.c ! 181010449b ./gcc/testsuite/gcc.dg/altivec-2.c ! 967922284b ./gcc/testsuite/gcc.dg/altivec-3.c ! 93905551b ./gcc/testsuite/gcc.dg/altivec-4.c ! 3524513447b ./gcc/testsuite/gcc.dg/altivec-5.c ! 935607032b ./gcc/testsuite/gcc.dg/altivec-7.c ! 1396416814b ./gcc/testsuite/gcc.dg/altivec-8.c ! 1177846285b ./gcc/testsuite/gcc.dg/anon-struct-1.c ! 3330573194b ./gcc/testsuite/gcc.dg/anon-struct-2.c ! 3522520858b ./gcc/testsuite/gcc.dg/anon-struct-3.c ! 2000172397b ./gcc/testsuite/gcc.dg/arm-asm.c ! 1274871710b ./gcc/testsuite/gcc.dg/array-1.c ! 3861156036b ./gcc/testsuite/gcc.dg/array-2.c ! 1410330225b ./gcc/testsuite/gcc.dg/array-3.c ! 2440308460b ./gcc/testsuite/gcc.dg/array-4.c ! 2233987289b ./gcc/testsuite/gcc.dg/array-5.c ! 3636290766b ./gcc/testsuite/gcc.dg/array-6.c ! 2814093959b ./gcc/testsuite/gcc.dg/asm-1.c ! 3024001214b ./gcc/testsuite/gcc.dg/asm-2.c ! 2686162767b ./gcc/testsuite/gcc.dg/asm-3.c ! 339244874b ./gcc/testsuite/gcc.dg/asm-4.c ! 2673255882b ./gcc/testsuite/gcc.dg/asm-5.c ! 3512856485b ./gcc/testsuite/gcc.dg/asm-6.c ! 459130722b ./gcc/testsuite/gcc.dg/asm-7.c ! 2560291160b ./gcc/testsuite/gcc.dg/asm-fs-1.c ! 1287172903b ./gcc/testsuite/gcc.dg/asm-names.c ! 1099611642b ./gcc/testsuite/gcc.dg/asmreg-1.c ! 2801105283b ./gcc/testsuite/gcc.dg/attr-alwaysinline.c ! 3087367494b ./gcc/testsuite/gcc.dg/attr-invalid.c ! 1915283314b ./gcc/testsuite/gcc.dg/attr-nest.c ! 2689909602b ./gcc/testsuite/gcc.dg/attr-noinline.c ! 745375068b ./gcc/testsuite/gcc.dg/attr-used.c ! 3155000092b ./gcc/testsuite/gcc.dg/bconstp-1.c ! 15751103b ./gcc/testsuite/gcc.dg/bf-spl1.c ! 1274634279b ./gcc/testsuite/gcc.dg/bitfld-1.c ! 865608720b ./gcc/testsuite/gcc.dg/bitfld-2.c ! 2003841110b ./gcc/testsuite/gcc.dg/bitfld-3.c ! 719825537b ./gcc/testsuite/gcc.dg/bitfld-4.c ! 331669473b ./gcc/testsuite/gcc.dg/bitfld-5.c ! 2721476408b ./gcc/testsuite/gcc.dg/bitfld-6.c ! 2770733918b ./gcc/testsuite/gcc.dg/builtin-apply1.c ! 1594168367b ./gcc/testsuite/gcc.dg/builtin-choose-expr.c ! 10093864b ./gcc/testsuite/gcc.dg/builtin-inf-1.c ! 2462561678b ./gcc/testsuite/gcc.dg/builtin-prefetch-1.c ! 1407816576b ./gcc/testsuite/gcc.dg/builtins-1.c ! 2243816200b ./gcc/testsuite/gcc.dg/c90-array-lval-1.c ! 2768106060b ./gcc/testsuite/gcc.dg/c90-array-lval-2.c ! 4098525451b ./gcc/testsuite/gcc.dg/c90-array-lval-3.c ! 3655088604b ./gcc/testsuite/gcc.dg/c90-array-lval-4.c ! 1572913366b ./gcc/testsuite/gcc.dg/c90-array-lval-5.c ! 25327060b ./gcc/testsuite/gcc.dg/c90-array-lval-6.c ! 3552134651b ./gcc/testsuite/gcc.dg/c90-arraydecl-1.c ! 4018159207b ./gcc/testsuite/gcc.dg/c90-complex-1.c ! 3681535923b ./gcc/testsuite/gcc.dg/c90-complit-1.c ! 1705314837b ./gcc/testsuite/gcc.dg/c90-const-expr-1.c ! 78994009b ./gcc/testsuite/gcc.dg/c90-const-expr-2.c ! 822031417b ./gcc/testsuite/gcc.dg/c90-const-expr-3.c ! 3338177482b ./gcc/testsuite/gcc.dg/c90-digraph-1.c ! 3599184840b ./gcc/testsuite/gcc.dg/c90-enum-comma-1.c ! 4177353746b ./gcc/testsuite/gcc.dg/c90-flex-array-1.c ! 2306764382b ./gcc/testsuite/gcc.dg/c90-float-1.c ! 566533628b ./gcc/testsuite/gcc.dg/c90-fordecl-1.c ! 3347835572b ./gcc/testsuite/gcc.dg/c90-hexfloat-1.c ! 130898806b ./gcc/testsuite/gcc.dg/c90-hexfloat-2.c ! 2581693818b ./gcc/testsuite/gcc.dg/c90-idem-qual-1.c ! 596279025b ./gcc/testsuite/gcc.dg/c90-idem-qual-2.c ! 1581289258b ./gcc/testsuite/gcc.dg/c90-impl-decl-1.c ! 440307834b ./gcc/testsuite/gcc.dg/c90-impl-int-1.c ! 2344767678b ./gcc/testsuite/gcc.dg/c90-impl-int-2.c ! 970479166b ./gcc/testsuite/gcc.dg/c90-init-1.c ! 2729946148b ./gcc/testsuite/gcc.dg/c90-intconst-1.c ! 3559700294b ./gcc/testsuite/gcc.dg/c90-longlong-1.c ! 3728641939b ./gcc/testsuite/gcc.dg/c90-mixdecl-1.c ! 2576806337b ./gcc/testsuite/gcc.dg/c90-restrict-1.c ! 3688680206b ./gcc/testsuite/gcc.dg/c90-return-1.c ! 1775037086b ./gcc/testsuite/gcc.dg/c90-scope-1.c ! 2066437213b ./gcc/testsuite/gcc.dg/c90-vla-1.c ! 3554456685b ./gcc/testsuite/gcc.dg/c94-digraph-1.c ! 1553286096b ./gcc/testsuite/gcc.dg/c99-array-lval-1.c ! 695388665b ./gcc/testsuite/gcc.dg/c99-array-lval-2.c ! 533861407b ./gcc/testsuite/gcc.dg/c99-array-lval-3.c ! 2215212813b ./gcc/testsuite/gcc.dg/c99-array-lval-4.c ! 3070583409b ./gcc/testsuite/gcc.dg/c99-array-lval-5.c ! 144287683b ./gcc/testsuite/gcc.dg/c99-array-lval-6.c ! 1817213908b ./gcc/testsuite/gcc.dg/c99-array-nonobj-1.c ! 815267755b ./gcc/testsuite/gcc.dg/c99-arraydecl-1.c ! 2980400116b ./gcc/testsuite/gcc.dg/c99-bool-1.c ! 2269932988b ./gcc/testsuite/gcc.dg/c99-complex-1.c ! 820370146b ./gcc/testsuite/gcc.dg/c99-complex-2.c ! 3348642281b ./gcc/testsuite/gcc.dg/c99-complit-1.c ! 2252128544b ./gcc/testsuite/gcc.dg/c99-complit-2.c ! 1355429032b ./gcc/testsuite/gcc.dg/c99-condexpr-1.c ! 1666861367b ./gcc/testsuite/gcc.dg/c99-const-expr-1.c ! 1567288443b ./gcc/testsuite/gcc.dg/c99-const-expr-2.c ! 1530464516b ./gcc/testsuite/gcc.dg/c99-const-expr-3.c ! 2443028402b ./gcc/testsuite/gcc.dg/c99-digraph-1.c ! 436400556b ./gcc/testsuite/gcc.dg/c99-enum-comma-1.c ! 3680360076b ./gcc/testsuite/gcc.dg/c99-flex-array-1.c ! 1133393573b ./gcc/testsuite/gcc.dg/c99-flex-array-2.c ! 847128646b ./gcc/testsuite/gcc.dg/c99-flex-array-3.c ! 3786940747b ./gcc/testsuite/gcc.dg/c99-flex-array-4.c ! 4185875504b ./gcc/testsuite/gcc.dg/c99-float-1.c ! 553627065b ./gcc/testsuite/gcc.dg/c99-fordecl-1.c ! 561068221b ./gcc/testsuite/gcc.dg/c99-fordecl-2.c ! 2859208293b ./gcc/testsuite/gcc.dg/c99-func-1.c ! 1694776826b ./gcc/testsuite/gcc.dg/c99-func-2.c ! 2857481018b ./gcc/testsuite/gcc.dg/c99-func-3.c ! 3824254533b ./gcc/testsuite/gcc.dg/c99-func-4.c ! 403500133b ./gcc/testsuite/gcc.dg/c99-hexfloat-1.c ! 1547017269b ./gcc/testsuite/gcc.dg/c99-hexfloat-2.c ! 1046797268b ./gcc/testsuite/gcc.dg/c99-idem-qual-1.c ! 2591670319b ./gcc/testsuite/gcc.dg/c99-idem-qual-2.c ! 1293044648b ./gcc/testsuite/gcc.dg/c99-impl-decl-1.c ! 818104690b ./gcc/testsuite/gcc.dg/c99-impl-int-1.c ! 2312236475b ./gcc/testsuite/gcc.dg/c99-impl-int-2.c ! 829207642b ./gcc/testsuite/gcc.dg/c99-init-1.c ! 938647013b ./gcc/testsuite/gcc.dg/c99-init-2.c ! 205310301b ./gcc/testsuite/gcc.dg/c99-intconst-1.c ! 336478880b ./gcc/testsuite/gcc.dg/c99-longlong-1.c ! 2179124750b ./gcc/testsuite/gcc.dg/c99-main-1.c ! 1603510892b ./gcc/testsuite/gcc.dg/c99-mixdecl-1.c ! 2789813637b ./gcc/testsuite/gcc.dg/c99-restrict-1.c ! 1090698500b ./gcc/testsuite/gcc.dg/c99-return-1.c ! 1305485104b ./gcc/testsuite/gcc.dg/c99-scope-1.c ! 328628580b ./gcc/testsuite/gcc.dg/c99-scope-2.c ! 1500087630b ./gcc/testsuite/gcc.dg/c99-tag-1.c ! 3664842681b ./gcc/testsuite/gcc.dg/c99-vla-1.c ! 3333661125b ./gcc/testsuite/gcc.dg/cast-qual-1.c ! 1853040812b ./gcc/testsuite/gcc.dg/cast-qual-2.c ! 1372465540b ./gcc/testsuite/gcc.dg/cleanup-1.c ! 2064728493b ./gcc/testsuite/gcc.dg/cleanup-2.c ! 65361233b ./gcc/testsuite/gcc.dg/cleanup-3.c ! 3052196324b ./gcc/testsuite/gcc.dg/cleanup-4.c ! 2715396710b ./gcc/testsuite/gcc.dg/cleanup-5.c ! 1833253837b ./gcc/testsuite/gcc.dg/cleanup-6.c ! 1455023164b ./gcc/testsuite/gcc.dg/cleanup-7.c ! 3509657813b ./gcc/testsuite/gcc.dg/clobbers.c ! 3796475762b ./gcc/testsuite/gcc.dg/compare1.c ! 446234451b ./gcc/testsuite/gcc.dg/compare2.c ! 1929905505b ./gcc/testsuite/gcc.dg/compare3.c ! 4172088563b ./gcc/testsuite/gcc.dg/compare4.c ! 2873193357b ./gcc/testsuite/gcc.dg/compare5.c ! 3985736899b ./gcc/testsuite/gcc.dg/compare6.c ! 3887990335b ./gcc/testsuite/gcc.dg/compare7.c ! 2818358019b ./gcc/testsuite/gcc.dg/complete-port.c ! 2444556566b ./gcc/testsuite/gcc.dg/concat.c ! 720344318b ./gcc/testsuite/gcc.dg/concat2.c ! 872352985b ./gcc/testsuite/gcc.dg/conv-1.c ! 2296607049b ./gcc/testsuite/gcc.dg/cpp/19921210-1.c ! 446012754b ./gcc/testsuite/gcc.dg/cpp/19930510-1.c ! 3035400854b ./gcc/testsuite/gcc.dg/cpp/19940712-1.c ! 3911462043b ./gcc/testsuite/gcc.dg/cpp/19940712-1.h ! 1310331126b ./gcc/testsuite/gcc.dg/cpp/19940712-1a.h ! 1255987496b ./gcc/testsuite/gcc.dg/cpp/19940712-1b.h ! 3107147397b ./gcc/testsuite/gcc.dg/cpp/19951025-1.c ! 1152006619b ./gcc/testsuite/gcc.dg/cpp/19951227-1.c ! 3844252401b ./gcc/testsuite/gcc.dg/cpp/19960224-1.c ! 2681484848b ./gcc/testsuite/gcc.dg/cpp/19990119-1.c ! 152529314b ./gcc/testsuite/gcc.dg/cpp/19990228-1.c ! 2850976318b ./gcc/testsuite/gcc.dg/cpp/19990407-1.c ! 1821165639b ./gcc/testsuite/gcc.dg/cpp/19990409-1.c ! 3140711711b ./gcc/testsuite/gcc.dg/cpp/19990413-1.c ! 3962958732b ./gcc/testsuite/gcc.dg/cpp/20000127-1.c ! 2271984635b ./gcc/testsuite/gcc.dg/cpp/20000129-1.c ! 2675766007b ./gcc/testsuite/gcc.dg/cpp/20000207-1.c ! 4123239500b ./gcc/testsuite/gcc.dg/cpp/20000207-2.c ! 4036437808b ./gcc/testsuite/gcc.dg/cpp/20000209-1.c ! 1472416455b ./gcc/testsuite/gcc.dg/cpp/20000209-2.c ! 2174334870b ./gcc/testsuite/gcc.dg/cpp/20000301-1.c ! 1872528864b ./gcc/testsuite/gcc.dg/cpp/20000419-1.c ! 2720098340b ./gcc/testsuite/gcc.dg/cpp/20000519-1.c ! 96666994b ./gcc/testsuite/gcc.dg/cpp/20000529-1.c ! 1226501171b ./gcc/testsuite/gcc.dg/cpp/20000625-1.c ! 3024473110b ./gcc/testsuite/gcc.dg/cpp/20000627-1.c ! 3176910360b ./gcc/testsuite/gcc.dg/cpp/20000628-1.c ! 302522843b ./gcc/testsuite/gcc.dg/cpp/20000628-1.h ! 1252878971b ./gcc/testsuite/gcc.dg/cpp/20000628-1a.h ! 3939185973b ./gcc/testsuite/gcc.dg/cpp/20000725-1.c ! 3467950758b ./gcc/testsuite/gcc.dg/cpp/20020927-1.c ! 3886684794b ./gcc/testsuite/gcc.dg/cpp/Wsignprom.c ! 1685485063b ./gcc/testsuite/gcc.dg/cpp/Wtrigraphs.c ! 2373291318b ./gcc/testsuite/gcc.dg/cpp/Wunknown-pragmas-1.c ! 3786746146b ./gcc/testsuite/gcc.dg/cpp/Wunused.c ! 2247214341b ./gcc/testsuite/gcc.dg/cpp/Wunused.h ! 3534493797b ./gcc/testsuite/gcc.dg/cpp/_Pragma1.c ! 4186091043b ./gcc/testsuite/gcc.dg/cpp/_Pragma2.c ! 1230813557b ./gcc/testsuite/gcc.dg/cpp/_Pragma3.c ! 3384939096b ./gcc/testsuite/gcc.dg/cpp/_Pragma4.c ! 678120078b ./gcc/testsuite/gcc.dg/cpp/_Pragma5.c ! 562036807b ./gcc/testsuite/gcc.dg/cpp/arith-1.c ! 330742469b ./gcc/testsuite/gcc.dg/cpp/arith-3.c ! 3918751425b ./gcc/testsuite/gcc.dg/cpp/assembl2.S ! 2327987352b ./gcc/testsuite/gcc.dg/cpp/assembler.S ! 2692554582b ./gcc/testsuite/gcc.dg/cpp/assert1.c ! 3542126362b ./gcc/testsuite/gcc.dg/cpp/assert2.c ! 1282180884b ./gcc/testsuite/gcc.dg/cpp/assert3.c ! 4028897631b ./gcc/testsuite/gcc.dg/cpp/avoidpaste1.c ! 1804955265b ./gcc/testsuite/gcc.dg/cpp/avoidpaste2.c ! 2909138544b ./gcc/testsuite/gcc.dg/cpp/backslash.c ! 1837306227b ./gcc/testsuite/gcc.dg/cpp/backslash2.c ! 205095111b ./gcc/testsuite/gcc.dg/cpp/c89-pedantic.c ! 1769035451b ./gcc/testsuite/gcc.dg/cpp/c89.c ! 1661764059b ./gcc/testsuite/gcc.dg/cpp/c94-pedantic.c ! 925335145b ./gcc/testsuite/gcc.dg/cpp/c94.c ! 3306050866b ./gcc/testsuite/gcc.dg/cpp/c99-pedantic.c ! 3857361837b ./gcc/testsuite/gcc.dg/cpp/c99.c ! 3516322832b ./gcc/testsuite/gcc.dg/cpp/charconst-2.c ! 2303966988b ./gcc/testsuite/gcc.dg/cpp/charconst-3.c ! 31571692b ./gcc/testsuite/gcc.dg/cpp/charconst-4.c ! 3858286956b ./gcc/testsuite/gcc.dg/cpp/charconst.c ! 3355056256b ./gcc/testsuite/gcc.dg/cpp/cmdlne-C.c ! 1491584113b ./gcc/testsuite/gcc.dg/cpp/cmdlne-C2.c ! 1363982392b ./gcc/testsuite/gcc.dg/cpp/cmdlne-M.c ! 2953736128b ./gcc/testsuite/gcc.dg/cpp/cmdlne-P.c ! 1600174935b ./gcc/testsuite/gcc.dg/cpp/cmdlne-dD-M.c ! 609905807b ./gcc/testsuite/gcc.dg/cpp/cmdlne-dD-dM.c ! 2496993356b ./gcc/testsuite/gcc.dg/cpp/cmdlne-dD.c ! 3705836802b ./gcc/testsuite/gcc.dg/cpp/cmdlne-dI-M.c ! 3088209084b ./gcc/testsuite/gcc.dg/cpp/cmdlne-dI-M.h ! 932524367b ./gcc/testsuite/gcc.dg/cpp/cmdlne-dM-M.c ! 1101687822b ./gcc/testsuite/gcc.dg/cpp/cmdlne-dM-dD.c ! 1486055617b ./gcc/testsuite/gcc.dg/cpp/cmdlne-dM.c ! 553926808b ./gcc/testsuite/gcc.dg/cpp/cmdlne-dN-M.c ! 3367113455b ./gcc/testsuite/gcc.dg/cpp/cpp.exp ! 3494213157b ./gcc/testsuite/gcc.dg/cpp/cxxcom1.c ! 3135164554b ./gcc/testsuite/gcc.dg/cpp/cxxcom2.c ! 10664058b ./gcc/testsuite/gcc.dg/cpp/defined.c ! 1438288565b ./gcc/testsuite/gcc.dg/cpp/digraph1.c ! 1288261895b ./gcc/testsuite/gcc.dg/cpp/digraph2.c ! 2068680422b ./gcc/testsuite/gcc.dg/cpp/digraphs.c ! 2630139647b ./gcc/testsuite/gcc.dg/cpp/direct2.c ! 2931467115b ./gcc/testsuite/gcc.dg/cpp/direct2s.c ! 2352238865b ./gcc/testsuite/gcc.dg/cpp/directiv.c ! 837832505b ./gcc/testsuite/gcc.dg/cpp/endif-pedantic1.c ! 3212345923b ./gcc/testsuite/gcc.dg/cpp/endif-pedantic2.c ! 3129493545b ./gcc/testsuite/gcc.dg/cpp/endif.c ! 3479505545b ./gcc/testsuite/gcc.dg/cpp/endif.h ! 2483248350b ./gcc/testsuite/gcc.dg/cpp/escape-1.c ! 1730195871b ./gcc/testsuite/gcc.dg/cpp/escape-2.c ! 3767981014b ./gcc/testsuite/gcc.dg/cpp/escape.c ! 52547616b ./gcc/testsuite/gcc.dg/cpp/expr.c ! 2697913940b ./gcc/testsuite/gcc.dg/cpp/extratokens.c ! 2035166761b ./gcc/testsuite/gcc.dg/cpp/extratokens2.c ! 905736b ./gcc/testsuite/gcc.dg/cpp/fpreprocessed.c ! 3959604708b ./gcc/testsuite/gcc.dg/cpp/gnuc89-pedantic.c ! 3280737784b ./gcc/testsuite/gcc.dg/cpp/gnuc89.c ! 1601787549b ./gcc/testsuite/gcc.dg/cpp/gnuc99-pedantic.c ! 1263189585b ./gcc/testsuite/gcc.dg/cpp/gnuc99.c ! 4214308249b ./gcc/testsuite/gcc.dg/cpp/hash1.c ! 2366342564b ./gcc/testsuite/gcc.dg/cpp/ident.c ! 2665156700b ./gcc/testsuite/gcc.dg/cpp/if-1.c ! 3352628668b ./gcc/testsuite/gcc.dg/cpp/if-2.c ! 489101197b ./gcc/testsuite/gcc.dg/cpp/if-4.c ! 882715641b ./gcc/testsuite/gcc.dg/cpp/if-5.c ! 4254343746b ./gcc/testsuite/gcc.dg/cpp/if-cexp.c ! 3012723046b ./gcc/testsuite/gcc.dg/cpp/if-mop.c ! 1884204635b ./gcc/testsuite/gcc.dg/cpp/if-mpar.c ! 3400278075b ./gcc/testsuite/gcc.dg/cpp/if-oppr.c ! 1490350403b ./gcc/testsuite/gcc.dg/cpp/if-paren.c ! 3952218044b ./gcc/testsuite/gcc.dg/cpp/if-sc.c ! 2598999845b ./gcc/testsuite/gcc.dg/cpp/if-shift.c ! 3593199515b ./gcc/testsuite/gcc.dg/cpp/if-unary.c ! 1252723901b ./gcc/testsuite/gcc.dg/cpp/inc/foo.h ! 2159210260b ./gcc/testsuite/gcc.dg/cpp/include1.c ! 2421188667b ./gcc/testsuite/gcc.dg/cpp/include2.c ! 653081234b ./gcc/testsuite/gcc.dg/cpp/include3.c ! 104604027b ./gcc/testsuite/gcc.dg/cpp/lexident.c ! 2395885746b ./gcc/testsuite/gcc.dg/cpp/lexnum.c ! 3213919551b ./gcc/testsuite/gcc.dg/cpp/lexstrng.c ! 3897829843b ./gcc/testsuite/gcc.dg/cpp/line1.c ! 100687188b ./gcc/testsuite/gcc.dg/cpp/line2.c ! 567370415b ./gcc/testsuite/gcc.dg/cpp/line3.c ! 1626475943b ./gcc/testsuite/gcc.dg/cpp/line4.c ! 3632976596b ./gcc/testsuite/gcc.dg/cpp/line5.c ! 2536504561b ./gcc/testsuite/gcc.dg/cpp/mac-dir-1.c ! 2457364874b ./gcc/testsuite/gcc.dg/cpp/mac-dir-2.c ! 3868918885b ./gcc/testsuite/gcc.dg/cpp/maccom1.c ! 2390179144b ./gcc/testsuite/gcc.dg/cpp/maccom2.c ! 4234015141b ./gcc/testsuite/gcc.dg/cpp/maccom3.c ! 1935439548b ./gcc/testsuite/gcc.dg/cpp/maccom4.c ! 319559313b ./gcc/testsuite/gcc.dg/cpp/maccom5.c ! 2833851089b ./gcc/testsuite/gcc.dg/cpp/maccom6.c ! 271504116b ./gcc/testsuite/gcc.dg/cpp/macro1.c ! 1379729851b ./gcc/testsuite/gcc.dg/cpp/macro10.c ! 3340222164b ./gcc/testsuite/gcc.dg/cpp/macro11.c ! 4270051746b ./gcc/testsuite/gcc.dg/cpp/macro2.c ! 2969168869b ./gcc/testsuite/gcc.dg/cpp/macro3.c ! 1188431715b ./gcc/testsuite/gcc.dg/cpp/macro4.c ! 1628527586b ./gcc/testsuite/gcc.dg/cpp/macro5.c ! 2368380713b ./gcc/testsuite/gcc.dg/cpp/macro6.c ! 2072551274b ./gcc/testsuite/gcc.dg/cpp/macro7.c ! 613805223b ./gcc/testsuite/gcc.dg/cpp/macro8.c ! 2926705982b ./gcc/testsuite/gcc.dg/cpp/macro9.c ! 259331101b ./gcc/testsuite/gcc.dg/cpp/macsyntx.c ! 3610840456b ./gcc/testsuite/gcc.dg/cpp/mi1.c ! 419074706b ./gcc/testsuite/gcc.dg/cpp/mi1c.h ! 4261701187b ./gcc/testsuite/gcc.dg/cpp/mi1cc.h ! 3904566528b ./gcc/testsuite/gcc.dg/cpp/mi1nd.h ! 3410643645b ./gcc/testsuite/gcc.dg/cpp/mi1ndp.h ! 2792742846b ./gcc/testsuite/gcc.dg/cpp/mi1x.h ! 2949078889b ./gcc/testsuite/gcc.dg/cpp/mi2.c ! 2971656236b ./gcc/testsuite/gcc.dg/cpp/mi2a.h ! 2249557715b ./gcc/testsuite/gcc.dg/cpp/mi2b.h ! 975601727b ./gcc/testsuite/gcc.dg/cpp/mi2c.h ! 1340631459b ./gcc/testsuite/gcc.dg/cpp/mi3.c ! 3410155219b ./gcc/testsuite/gcc.dg/cpp/mi3.def ! 1784999780b ./gcc/testsuite/gcc.dg/cpp/mi3.h ! 3722098684b ./gcc/testsuite/gcc.dg/cpp/mi4.c ! 1150462829b ./gcc/testsuite/gcc.dg/cpp/mi5.c ! 1142195235b ./gcc/testsuite/gcc.dg/cpp/mi6.c ! 1358227252b ./gcc/testsuite/gcc.dg/cpp/mi6a.h ! 641332290b ./gcc/testsuite/gcc.dg/cpp/mi6b.h ! 4070915278b ./gcc/testsuite/gcc.dg/cpp/mi6c.h ! 1337479900b ./gcc/testsuite/gcc.dg/cpp/mi6d.h ! 509977090b ./gcc/testsuite/gcc.dg/cpp/mi6e.h ! 734509647b ./gcc/testsuite/gcc.dg/cpp/mi7.c ! 3136816756b ./gcc/testsuite/gcc.dg/cpp/mi7a.h ! 3560454972b ./gcc/testsuite/gcc.dg/cpp/mi7b.h ! 1202755802b ./gcc/testsuite/gcc.dg/cpp/multiline.c ! 3165908728b ./gcc/testsuite/gcc.dg/cpp/paste1.c ! 2266859121b ./gcc/testsuite/gcc.dg/cpp/paste10.c ! 4285709590b ./gcc/testsuite/gcc.dg/cpp/paste11.c ! 3149837578b ./gcc/testsuite/gcc.dg/cpp/paste12.c ! 903828210b ./gcc/testsuite/gcc.dg/cpp/paste13.c ! 2468893035b ./gcc/testsuite/gcc.dg/cpp/paste2.c ! 3026273649b ./gcc/testsuite/gcc.dg/cpp/paste3.c ! 3812446689b ./gcc/testsuite/gcc.dg/cpp/paste4.c ! 4196513421b ./gcc/testsuite/gcc.dg/cpp/paste5.c ! 3141633537b ./gcc/testsuite/gcc.dg/cpp/paste6.c ! 2441365564b ./gcc/testsuite/gcc.dg/cpp/paste7.c ! 1061671229b ./gcc/testsuite/gcc.dg/cpp/paste8.c ! 2408632284b ./gcc/testsuite/gcc.dg/cpp/paste9.c ! 1004643236b ./gcc/testsuite/gcc.dg/cpp/poison.c ! 858950276b ./gcc/testsuite/gcc.dg/cpp/pragma-1.c ! 2473416313b ./gcc/testsuite/gcc.dg/cpp/pragma-2.c ! 1107840471b ./gcc/testsuite/gcc.dg/cpp/redef1.c ! 1601641321b ./gcc/testsuite/gcc.dg/cpp/redef2.c ! 2157179075b ./gcc/testsuite/gcc.dg/cpp/redef3.c ! 2746819393b ./gcc/testsuite/gcc.dg/cpp/separate-1.c ! 3846911977b ./gcc/testsuite/gcc.dg/cpp/skipping.c ! 2020720031b ./gcc/testsuite/gcc.dg/cpp/skipping2.c ! 3826080641b ./gcc/testsuite/gcc.dg/cpp/spacing1.c ! 1299147601b ./gcc/testsuite/gcc.dg/cpp/spacing2.c ! 3081823659b ./gcc/testsuite/gcc.dg/cpp/strify1.c ! 3973832195b ./gcc/testsuite/gcc.dg/cpp/strify2.c ! 2418211010b ./gcc/testsuite/gcc.dg/cpp/strify3.c ! 2496189814b ./gcc/testsuite/gcc.dg/cpp/strp1.c ! 3609546715b ./gcc/testsuite/gcc.dg/cpp/strp2.c ! 2075703559b ./gcc/testsuite/gcc.dg/cpp/syshdr.c ! 3898065321b ./gcc/testsuite/gcc.dg/cpp/syshdr.h ! 3648062425b ./gcc/testsuite/gcc.dg/cpp/syshdr1.h ! 930452060b ./gcc/testsuite/gcc.dg/cpp/syshdr2.h ! 3033820257b ./gcc/testsuite/gcc.dg/cpp/sysmac1.c ! 4068510437b ./gcc/testsuite/gcc.dg/cpp/sysmac2.c ! 3954705973b ./gcc/testsuite/gcc.dg/cpp/tr-paste.c ! 2720640173b ./gcc/testsuite/gcc.dg/cpp/tr-warn1.c ! 256738446b ./gcc/testsuite/gcc.dg/cpp/tr-warn2.c ! 3053015314b ./gcc/testsuite/gcc.dg/cpp/tr-warn3.c ! 2634569795b ./gcc/testsuite/gcc.dg/cpp/tr-warn4.c ! 733328423b ./gcc/testsuite/gcc.dg/cpp/tr-warn5.c ! 880495829b ./gcc/testsuite/gcc.dg/cpp/tr-warn6.c ! 3646320904b ./gcc/testsuite/gcc.dg/cpp/trad/Wunused.c ! 2247214341b ./gcc/testsuite/gcc.dg/cpp/trad/Wunused.h ! 1229021684b ./gcc/testsuite/gcc.dg/cpp/trad/__STDC__.c ! 1977182375b ./gcc/testsuite/gcc.dg/cpp/trad/argcount.c ! 2662614668b ./gcc/testsuite/gcc.dg/cpp/trad/assembler.S ! 2692554582b ./gcc/testsuite/gcc.dg/cpp/trad/assert1.c ! 2998566071b ./gcc/testsuite/gcc.dg/cpp/trad/assert2.c ! 1282180884b ./gcc/testsuite/gcc.dg/cpp/trad/assert3.c ! 757236630b ./gcc/testsuite/gcc.dg/cpp/trad/builtins.c ! 4232160868b ./gcc/testsuite/gcc.dg/cpp/trad/builtins.h ! 2472826799b ./gcc/testsuite/gcc.dg/cpp/trad/cmdlne-C.c ! 190491925b ./gcc/testsuite/gcc.dg/cpp/trad/cmdlne-C2.c ! 2558565698b ./gcc/testsuite/gcc.dg/cpp/trad/cmdlne-dD.c ! 3710083041b ./gcc/testsuite/gcc.dg/cpp/trad/cmdlne-dM.c ! 2421283003b ./gcc/testsuite/gcc.dg/cpp/trad/comment-2.c ! 4034996363b ./gcc/testsuite/gcc.dg/cpp/trad/comment.c ! 283168914b ./gcc/testsuite/gcc.dg/cpp/trad/define.c ! 1611975625b ./gcc/testsuite/gcc.dg/cpp/trad/defined.c ! 3187301379b ./gcc/testsuite/gcc.dg/cpp/trad/directive.c ! 462047311b ./gcc/testsuite/gcc.dg/cpp/trad/escaped-eof.c ! 2227807358b ./gcc/testsuite/gcc.dg/cpp/trad/escaped-nl.c ! 3384760545b ./gcc/testsuite/gcc.dg/cpp/trad/funlike-2.c ! 3004870383b ./gcc/testsuite/gcc.dg/cpp/trad/funlike-3.c ! 3428926172b ./gcc/testsuite/gcc.dg/cpp/trad/funlike-4.c ! 2538194728b ./gcc/testsuite/gcc.dg/cpp/trad/funlike-5.c ! 2410104667b ./gcc/testsuite/gcc.dg/cpp/trad/funlike.c ! 4181249374b ./gcc/testsuite/gcc.dg/cpp/trad/hash.c ! 3396000556b ./gcc/testsuite/gcc.dg/cpp/trad/include.c ! 1593567097b ./gcc/testsuite/gcc.dg/cpp/trad/literals-1.c ! 349061295b ./gcc/testsuite/gcc.dg/cpp/trad/literals-2.c ! 4147882455b ./gcc/testsuite/gcc.dg/cpp/trad/maccom1.c ! 3160477466b ./gcc/testsuite/gcc.dg/cpp/trad/maccom2.c ! 1329336031b ./gcc/testsuite/gcc.dg/cpp/trad/maccom3.c ! 2109801015b ./gcc/testsuite/gcc.dg/cpp/trad/maccom4.c ! 570232206b ./gcc/testsuite/gcc.dg/cpp/trad/maccom6.c ! 487420591b ./gcc/testsuite/gcc.dg/cpp/trad/macroargs.c ! 2016512953b ./gcc/testsuite/gcc.dg/cpp/trad/mi1.c ! 419074706b ./gcc/testsuite/gcc.dg/cpp/trad/mi1c.h ! 3904566528b ./gcc/testsuite/gcc.dg/cpp/trad/mi1nd.h ! 3410643645b ./gcc/testsuite/gcc.dg/cpp/trad/mi1ndp.h ! 2792742846b ./gcc/testsuite/gcc.dg/cpp/trad/mi1x.h ! 2949078889b ./gcc/testsuite/gcc.dg/cpp/trad/mi2.c ! 2971656236b ./gcc/testsuite/gcc.dg/cpp/trad/mi2a.h ! 2249557715b ./gcc/testsuite/gcc.dg/cpp/trad/mi2b.h ! 975601727b ./gcc/testsuite/gcc.dg/cpp/trad/mi2c.h ! 1340631459b ./gcc/testsuite/gcc.dg/cpp/trad/mi3.c ! 3410155219b ./gcc/testsuite/gcc.dg/cpp/trad/mi3.def ! 1784999780b ./gcc/testsuite/gcc.dg/cpp/trad/mi3.h ! 3722098684b ./gcc/testsuite/gcc.dg/cpp/trad/mi4.c ! 2597798094b ./gcc/testsuite/gcc.dg/cpp/trad/mi5.c ! 1142195235b ./gcc/testsuite/gcc.dg/cpp/trad/mi6.c ! 1358227252b ./gcc/testsuite/gcc.dg/cpp/trad/mi6a.h ! 641332290b ./gcc/testsuite/gcc.dg/cpp/trad/mi6b.h ! 4070915278b ./gcc/testsuite/gcc.dg/cpp/trad/mi6c.h ! 1337479900b ./gcc/testsuite/gcc.dg/cpp/trad/mi6d.h ! 509977090b ./gcc/testsuite/gcc.dg/cpp/trad/mi6e.h ! 3905249952b ./gcc/testsuite/gcc.dg/cpp/trad/mi7.c ! 3136816756b ./gcc/testsuite/gcc.dg/cpp/trad/mi7a.h ! 3560454972b ./gcc/testsuite/gcc.dg/cpp/trad/mi7b.h ! 559595333b ./gcc/testsuite/gcc.dg/cpp/trad/null-drctv.c ! 199207201b ./gcc/testsuite/gcc.dg/cpp/trad/num-sign.c ! 1450713990b ./gcc/testsuite/gcc.dg/cpp/trad/paste.c ! 2091734769b ./gcc/testsuite/gcc.dg/cpp/trad/quote.c ! 3299778145b ./gcc/testsuite/gcc.dg/cpp/trad/recurse-1.c ! 1920549175b ./gcc/testsuite/gcc.dg/cpp/trad/recurse-2.c ! 4138311880b ./gcc/testsuite/gcc.dg/cpp/trad/recurse-3.c ! 2501127986b ./gcc/testsuite/gcc.dg/cpp/trad/redef1.c ! 756307914b ./gcc/testsuite/gcc.dg/cpp/trad/redef2.c ! 2436946679b ./gcc/testsuite/gcc.dg/cpp/trad/strify.c ! 3580519774b ./gcc/testsuite/gcc.dg/cpp/trad/trad.exp ! 2826500595b ./gcc/testsuite/gcc.dg/cpp/trad/uchar.c ! 580041869b ./gcc/testsuite/gcc.dg/cpp/trigraphs.c ! 2894747317b ./gcc/testsuite/gcc.dg/cpp/uchar-1.c ! 2806339500b ./gcc/testsuite/gcc.dg/cpp/uchar-3.c ! 3156619494b ./gcc/testsuite/gcc.dg/cpp/ucs.c ! 1271068491b ./gcc/testsuite/gcc.dg/cpp/unc1.c ! 2985690540b ./gcc/testsuite/gcc.dg/cpp/unc2.c ! 479621763b ./gcc/testsuite/gcc.dg/cpp/unc3.c ! 1549705287b ./gcc/testsuite/gcc.dg/cpp/unc4.c ! 1052162081b ./gcc/testsuite/gcc.dg/cpp/undef2.c ! 1278828881b ./gcc/testsuite/gcc.dg/cpp/vararg1.c ! 270851301b ./gcc/testsuite/gcc.dg/cpp/vararg2.c ! 203701001b ./gcc/testsuite/gcc.dg/cpp/vararg3.c ! 2222858341b ./gcc/testsuite/gcc.dg/cpp/vararg4.c ! 3684840524b ./gcc/testsuite/gcc.dg/cpp/wchar-1.c ! 2112571638b ./gcc/testsuite/gcc.dg/cpp/widestr1.c ! 966111785b ./gcc/testsuite/gcc.dg/darwin-abi-1.c ! 3955692120b ./gcc/testsuite/gcc.dg/darwin-ld-1.c ! 3377797610b ./gcc/testsuite/gcc.dg/darwin-ld-2.c ! 858483839b ./gcc/testsuite/gcc.dg/darwin-ld-3.c ! 2696702867b ./gcc/testsuite/gcc.dg/darwin-ld-4.c ! 587036301b ./gcc/testsuite/gcc.dg/darwin-ld-5.c ! 2478073469b ./gcc/testsuite/gcc.dg/debug/20000503-1.c ! 1850073884b ./gcc/testsuite/gcc.dg/debug/20010207-1.c ! 2575589968b ./gcc/testsuite/gcc.dg/debug/20011223-1.c ! 3480555031b ./gcc/testsuite/gcc.dg/debug/20020104-2.c ! 465470758b ./gcc/testsuite/gcc.dg/debug/20020220-1.c ! 38521003b ./gcc/testsuite/gcc.dg/debug/20020224-1.c ! 1897254689b ./gcc/testsuite/gcc.dg/debug/20020327-1.c ! 2095797855b ./gcc/testsuite/gcc.dg/debug/debug-1.c ! 936371752b ./gcc/testsuite/gcc.dg/debug/debug-2.c ! 1466203416b ./gcc/testsuite/gcc.dg/debug/debug-3.c ! 591803753b ./gcc/testsuite/gcc.dg/debug/debug-4.c ! 524177325b ./gcc/testsuite/gcc.dg/debug/debug-5.c ! 4017752601b ./gcc/testsuite/gcc.dg/debug/debug-6.c ! 2820451029b ./gcc/testsuite/gcc.dg/debug/debug.exp ! 3154398188b ./gcc/testsuite/gcc.dg/debug/dwarf2-1.c ! 3551380716b ./gcc/testsuite/gcc.dg/debug/dwarf2-2.c ! 1865154101b ./gcc/testsuite/gcc.dg/debug/trivial.c ! 2108424497b ./gcc/testsuite/gcc.dg/decl-1.c ! 3489735771b ./gcc/testsuite/gcc.dg/decl-2.c ! 219343109b ./gcc/testsuite/gcc.dg/decl-3.c ! 2106699188b ./gcc/testsuite/gcc.dg/deprecated.c ! 462220244b ./gcc/testsuite/gcc.dg/dg.exp ! 3005671194b ./gcc/testsuite/gcc.dg/divbyzero.c ! 3732188130b ./gcc/testsuite/gcc.dg/dll-1.c ! 3201339636b ./gcc/testsuite/gcc.dg/dll-2.c ! 4107998098b ./gcc/testsuite/gcc.dg/dll-3.c ! 38849204b ./gcc/testsuite/gcc.dg/dll-4.c ! 2018483943b ./gcc/testsuite/gcc.dg/doloop-1.c ! 65866289b ./gcc/testsuite/gcc.dg/duff-1.c ! 1064594641b ./gcc/testsuite/gcc.dg/duff-2.c ! 607403040b ./gcc/testsuite/gcc.dg/duff-3.c ! 3922657633b ./gcc/testsuite/gcc.dg/empty1.c ! 2135186629b ./gcc/testsuite/gcc.dg/enum1.c ! 1119508710b ./gcc/testsuite/gcc.dg/fastmath-1.c ! 709842397b ./gcc/testsuite/gcc.dg/fnegate-1.c ! 3222632325b ./gcc/testsuite/gcc.dg/format/array-1.c ! 1862455428b ./gcc/testsuite/gcc.dg/format/attr-1.c ! 3131101897b ./gcc/testsuite/gcc.dg/format/attr-2.c ! 3345098920b ./gcc/testsuite/gcc.dg/format/attr-3.c ! 1282524185b ./gcc/testsuite/gcc.dg/format/attr-4.c ! 2109942555b ./gcc/testsuite/gcc.dg/format/attr-5.c ! 1342273591b ./gcc/testsuite/gcc.dg/format/attr-6.c ! 3314290167b ./gcc/testsuite/gcc.dg/format/attr-7.c ! 2805119685b ./gcc/testsuite/gcc.dg/format/branch-1.c ! 753102824b ./gcc/testsuite/gcc.dg/format/builtin-1.c ! 2984579335b ./gcc/testsuite/gcc.dg/format/c90-printf-1.c ! 2152399739b ./gcc/testsuite/gcc.dg/format/c90-printf-2.c ! 576410250b ./gcc/testsuite/gcc.dg/format/c90-printf-3.c ! 1954948606b ./gcc/testsuite/gcc.dg/format/c90-scanf-1.c ! 461393812b ./gcc/testsuite/gcc.dg/format/c90-scanf-2.c ! 3343890566b ./gcc/testsuite/gcc.dg/format/c90-scanf-3.c ! 2060901849b ./gcc/testsuite/gcc.dg/format/c90-scanf-4.c ! 3830240101b ./gcc/testsuite/gcc.dg/format/c90-strftime-1.c ! 908665911b ./gcc/testsuite/gcc.dg/format/c90-strftime-2.c ! 2447449665b ./gcc/testsuite/gcc.dg/format/c94-printf-1.c ! 1772682986b ./gcc/testsuite/gcc.dg/format/c94-scanf-1.c ! 1572424421b ./gcc/testsuite/gcc.dg/format/c99-printf-1.c ! 1982196060b ./gcc/testsuite/gcc.dg/format/c99-printf-2.c ! 3845709577b ./gcc/testsuite/gcc.dg/format/c99-printf-3.c ! 319347872b ./gcc/testsuite/gcc.dg/format/c99-scanf-1.c ! 3735460767b ./gcc/testsuite/gcc.dg/format/c99-scanf-2.c ! 3432916856b ./gcc/testsuite/gcc.dg/format/c99-scanf-3.c ! 3177298628b ./gcc/testsuite/gcc.dg/format/c99-strftime-1.c ! 2090637496b ./gcc/testsuite/gcc.dg/format/c99-strftime-2.c ! 2345337374b ./gcc/testsuite/gcc.dg/format/diag-1.c ! 1250738052b ./gcc/testsuite/gcc.dg/format/errmk-1.c ! 1927556152b ./gcc/testsuite/gcc.dg/format/ext-1.c ! 230043853b ./gcc/testsuite/gcc.dg/format/ext-2.c ! 3735744313b ./gcc/testsuite/gcc.dg/format/ext-3.c ! 2104347788b ./gcc/testsuite/gcc.dg/format/ext-4.c ! 3870005152b ./gcc/testsuite/gcc.dg/format/ext-5.c ! 4154438977b ./gcc/testsuite/gcc.dg/format/ext-6.c ! 174407969b ./gcc/testsuite/gcc.dg/format/format.exp ! 2650327793b ./gcc/testsuite/gcc.dg/format/format.h ! 3030055438b ./gcc/testsuite/gcc.dg/format/miss-1.c ! 58040071b ./gcc/testsuite/gcc.dg/format/miss-2.c ! 1680800961b ./gcc/testsuite/gcc.dg/format/multattr-1.c ! 3511814217b ./gcc/testsuite/gcc.dg/format/multattr-2.c ! 1621224881b ./gcc/testsuite/gcc.dg/format/multattr-3.c ! 2482792163b ./gcc/testsuite/gcc.dg/format/no-exargs-1.c ! 3432514252b ./gcc/testsuite/gcc.dg/format/no-exargs-2.c ! 4199776146b ./gcc/testsuite/gcc.dg/format/no-y2k-1.c ! 2335984266b ./gcc/testsuite/gcc.dg/format/nonlit-1.c ! 3055177111b ./gcc/testsuite/gcc.dg/format/nonlit-2.c ! 449451912b ./gcc/testsuite/gcc.dg/format/nonlit-3.c ! 3054977982b ./gcc/testsuite/gcc.dg/format/null-1.c ! 3652642152b ./gcc/testsuite/gcc.dg/format/plus-1.c ! 2673114039b ./gcc/testsuite/gcc.dg/format/sec-1.c ! 1815893280b ./gcc/testsuite/gcc.dg/format/strfmon-1.c ! 821372176b ./gcc/testsuite/gcc.dg/format/va-1.c ! 358822374b ./gcc/testsuite/gcc.dg/format/warnll-1.c ! 3962912739b ./gcc/testsuite/gcc.dg/format/xopen-1.c ! 1082307299b ./gcc/testsuite/gcc.dg/format/xopen-2.c ! 73044124b ./gcc/testsuite/gcc.dg/format/z-1.c ! 1464990929b ./gcc/testsuite/gcc.dg/format/zero-length-1.c ! 3435417081b ./gcc/testsuite/gcc.dg/fshort-wchar.c ! 745582715b ./gcc/testsuite/gcc.dg/gnu89-init-1.c ! 339065893b ./gcc/testsuite/gcc.dg/gnu89-init-2.c ! 1770671475b ./gcc/testsuite/gcc.dg/gnu99-init-1.c ! 2038429173b ./gcc/testsuite/gcc.dg/h8300-stack-1.c ! 885923224b ./gcc/testsuite/gcc.dg/i386-387-1.c ! 4204057333b ./gcc/testsuite/gcc.dg/i386-387-2.c ! 3371905361b ./gcc/testsuite/gcc.dg/i386-bitfield1.c ! 66516611b ./gcc/testsuite/gcc.dg/i386-call-1.c ! 3703039330b ./gcc/testsuite/gcc.dg/i386-loop-1.c ! 2666972329b ./gcc/testsuite/gcc.dg/i386-loop-2.c ! 311969864b ./gcc/testsuite/gcc.dg/i386-loop-3.c ! 2036634176b ./gcc/testsuite/gcc.dg/i386-memset-1.c ! 2049230625b ./gcc/testsuite/gcc.dg/i386-mmx-1.c ! 3973906625b ./gcc/testsuite/gcc.dg/i386-mmx-2.c ! 1669092452b ./gcc/testsuite/gcc.dg/i386-mmx-3.c ! 811535520b ./gcc/testsuite/gcc.dg/i386-signbit-1.c ! 1624192171b ./gcc/testsuite/gcc.dg/i386-signbit-2.c ! 1578707081b ./gcc/testsuite/gcc.dg/i386-signbit-3.c ! 2923520039b ./gcc/testsuite/gcc.dg/i386-sse-1.c ! 1935024742b ./gcc/testsuite/gcc.dg/i386-sse-2.c ! 3426246610b ./gcc/testsuite/gcc.dg/i386-sse-3.c ! 3146718627b ./gcc/testsuite/gcc.dg/i386-sse-4.c ! 3806311851b ./gcc/testsuite/gcc.dg/i386-ssetype-1.c ! 4034432096b ./gcc/testsuite/gcc.dg/i386-ssetype-2.c ! 1429730686b ./gcc/testsuite/gcc.dg/i386-ssetype-3.c ! 1818014328b ./gcc/testsuite/gcc.dg/i386-ssetype-4.c ! 2625840402b ./gcc/testsuite/gcc.dg/i386-ssetype-5.c ! 1459694165b ./gcc/testsuite/gcc.dg/i386-unroll-1.c ! 2057006030b ./gcc/testsuite/gcc.dg/i386-volatile-1.c ! 646600080b ./gcc/testsuite/gcc.dg/ia64-asm-1.c ! 2995485298b ./gcc/testsuite/gcc.dg/ia64-sync-1.c ! 72205644b ./gcc/testsuite/gcc.dg/ia64-sync-2.c ! 3522006930b ./gcc/testsuite/gcc.dg/ia64-sync-3.c ! 2622118039b ./gcc/testsuite/gcc.dg/ia64-sync-4.c ! 20033210b ./gcc/testsuite/gcc.dg/ia64-visibility-1.c ! 2611338469b ./gcc/testsuite/gcc.dg/ia64-visibility-2.c ! 1374850312b ./gcc/testsuite/gcc.dg/ifelse-1.c ! 4085178572b ./gcc/testsuite/gcc.dg/iftrap-1.c ! 448418366b ./gcc/testsuite/gcc.dg/iftrap-2.c ! 2512902839b ./gcc/testsuite/gcc.dg/inline-1.c ! 1196369631b ./gcc/testsuite/gcc.dg/inline-2.c ! 247919548b ./gcc/testsuite/gcc.dg/loop-1.c ! 775331063b ./gcc/testsuite/gcc.dg/lvalue1.c ! 2663557248b ./gcc/testsuite/gcc.dg/m-un-1.c ! 2341407016b ./gcc/testsuite/gcc.dg/m-un-2.c ! 208843907b ./gcc/testsuite/gcc.dg/mips-args-1.c ! 3921207576b ./gcc/testsuite/gcc.dg/mips-args-2.c ! 1475015375b ./gcc/testsuite/gcc.dg/mips-args-3.c ! 2954420820b ./gcc/testsuite/gcc.dg/mmix-1.c ! 2607910125b ./gcc/testsuite/gcc.dg/nest.c ! 167742958b ./gcc/testsuite/gcc.dg/no-builtin-1.c ! 2208318132b ./gcc/testsuite/gcc.dg/noncompile/20000901-1.c ! 3562764821b ./gcc/testsuite/gcc.dg/noncompile/20001228-1.c ! 677199841b ./gcc/testsuite/gcc.dg/noncompile/20010425-1.c ! 100652056b ./gcc/testsuite/gcc.dg/noncompile/20010524-1.c ! 292530438b ./gcc/testsuite/gcc.dg/noncompile/20011025-1.c ! 3164469142b ./gcc/testsuite/gcc.dg/noncompile/20020130-1.c ! 3055182962b ./gcc/testsuite/gcc.dg/noncompile/20020207-1.c ! 3889627347b ./gcc/testsuite/gcc.dg/noncompile/20020213-1.c ! 1457569280b ./gcc/testsuite/gcc.dg/noncompile/20020220-1.c ! 2121631552b ./gcc/testsuite/gcc.dg/noncompile/20030818-1.c ! 2964160251b ./gcc/testsuite/gcc.dg/noncompile/920507-1.c ! 2161867266b ./gcc/testsuite/gcc.dg/noncompile/920616-2.c ! 1066215762b ./gcc/testsuite/gcc.dg/noncompile/920721-2.c ! 2834384944b ./gcc/testsuite/gcc.dg/noncompile/920824-1.c ! 3955955814b ./gcc/testsuite/gcc.dg/noncompile/920923-1.c ! 3162370830b ./gcc/testsuite/gcc.dg/noncompile/921102-1.c ! 2258888666b ./gcc/testsuite/gcc.dg/noncompile/921116-1.c ! 4097035630b ./gcc/testsuite/gcc.dg/noncompile/930301-1.c ! 840634782b ./gcc/testsuite/gcc.dg/noncompile/930622-1.c ! 3061074939b ./gcc/testsuite/gcc.dg/noncompile/930622-2.c ! 181482966b ./gcc/testsuite/gcc.dg/noncompile/930714-1.c ! 3515814095b ./gcc/testsuite/gcc.dg/noncompile/931203-1.c ! 2994529883b ./gcc/testsuite/gcc.dg/noncompile/940112-1.c ! 3064722803b ./gcc/testsuite/gcc.dg/noncompile/940227-1.c ! 667278578b ./gcc/testsuite/gcc.dg/noncompile/950825-1.c ! 170314268b ./gcc/testsuite/gcc.dg/noncompile/950921-1.c ! 1539048278b ./gcc/testsuite/gcc.dg/noncompile/951123-1.c ! 988927550b ./gcc/testsuite/gcc.dg/noncompile/971104-1.c ! 3218469122b ./gcc/testsuite/gcc.dg/noncompile/990416-1.c ! 3596296296b ./gcc/testsuite/gcc.dg/noncompile/const-ll-1.c ! 2315448619b ./gcc/testsuite/gcc.dg/noncompile/incomplete-1.c ! 1128187562b ./gcc/testsuite/gcc.dg/noncompile/init-1.c ! 2927938029b ./gcc/testsuite/gcc.dg/noncompile/init-2.c ! 4011814030b ./gcc/testsuite/gcc.dg/noncompile/init-3.c ! 835046904b ./gcc/testsuite/gcc.dg/noncompile/invalid_asm.c ! 3441206096b ./gcc/testsuite/gcc.dg/noncompile/label-lineno-1.c ! 348329041b ./gcc/testsuite/gcc.dg/noncompile/noncompile.exp ! 3105423709b ./gcc/testsuite/gcc.dg/noncompile/redecl-1.c ! 1781438824b ./gcc/testsuite/gcc.dg/noncompile/va-arg-1.c ! 3381135030b ./gcc/testsuite/gcc.dg/noncompile/voidparam-1.c ! 2112479311b ./gcc/testsuite/gcc.dg/nonnull-1.c ! 1724789636b ./gcc/testsuite/gcc.dg/nonnull-2.c ! 3531450152b ./gcc/testsuite/gcc.dg/noreturn-1.c ! 2267400179b ./gcc/testsuite/gcc.dg/noreturn-2.c ! 1222476594b ./gcc/testsuite/gcc.dg/noreturn-3.c ! 4260549149b ./gcc/testsuite/gcc.dg/noreturn-4.c ! 3941288797b ./gcc/testsuite/gcc.dg/noreturn-7.c ! 761456622b ./gcc/testsuite/gcc.dg/null-pointer-1.c ! 4241025034b ./gcc/testsuite/gcc.dg/old-style-asm-1.c ! 2482822232b ./gcc/testsuite/gcc.dg/overflow-1.c ! 1662299957b ./gcc/testsuite/gcc.dg/pack-test-1.c ! 2754082325b ./gcc/testsuite/gcc.dg/pack-test-1.h ! 2875409621b ./gcc/testsuite/gcc.dg/pack-test-2.c ! 3389561780b ./gcc/testsuite/gcc.dg/ppc-fmadd-1.c ! 541289115b ./gcc/testsuite/gcc.dg/ppc-fmadd-2.c ! 2765687813b ./gcc/testsuite/gcc.dg/ppc-fmadd-3.c ! 635404827b ./gcc/testsuite/gcc.dg/ppc-ldstruct.c ! 1383345482b ./gcc/testsuite/gcc.dg/ppc-spe.c ! 2768371812b ./gcc/testsuite/gcc.dg/ppc-stackalign-1.c ! 3395691298b ./gcc/testsuite/gcc.dg/pragma-align.c ! 2976918557b ./gcc/testsuite/gcc.dg/pragma-darwin.c ! 2313186581b ./gcc/testsuite/gcc.dg/pragma-ep-1.c ! 689657683b ./gcc/testsuite/gcc.dg/pragma-ep-2.c ! 375277958b ./gcc/testsuite/gcc.dg/pragma-ep-3.c ! 18511022b ./gcc/testsuite/gcc.dg/pragma-re-1.c ! 3911201539b ./gcc/testsuite/gcc.dg/pragma-re-2.c ! 3011001240b ./gcc/testsuite/gcc.dg/qual-return-1.c ! 4111880764b ./gcc/testsuite/gcc.dg/qual-return-2.c ! 2655346126b ./gcc/testsuite/gcc.dg/return-type-1.c ! 3519355790b ./gcc/testsuite/gcc.dg/return-type-2.c ! 2879526504b ./gcc/testsuite/gcc.dg/return-type-3.c ! 3862146754b ./gcc/testsuite/gcc.dg/sequence-pt-1.c ! 3997091992b ./gcc/testsuite/gcc.dg/setjmp-1.c ! 4257734656b ./gcc/testsuite/gcc.dg/sibcall-1.c ! 2394881430b ./gcc/testsuite/gcc.dg/sibcall-2.c ! 2328366575b ./gcc/testsuite/gcc.dg/sibcall-3.c ! 348731556b ./gcc/testsuite/gcc.dg/sibcall-4.c ! 3310584874b ./gcc/testsuite/gcc.dg/simd-1.c ! 358299505b ./gcc/testsuite/gcc.dg/sparc-constant-1.c ! 2828537866b ./gcc/testsuite/gcc.dg/sparc-dwarf2.c ! 802040009b ./gcc/testsuite/gcc.dg/sparc-ret.c ! 1993113484b ./gcc/testsuite/gcc.dg/special/20000419-2.c ! 3430419731b ./gcc/testsuite/gcc.dg/special/alias-1.c ! 7306739b ./gcc/testsuite/gcc.dg/special/alias-2.c ! 2059304830b ./gcc/testsuite/gcc.dg/special/ecos.exp ! 4212112354b ./gcc/testsuite/gcc.dg/special/gcsec-1.c ! 3980204525b ./gcc/testsuite/gcc.dg/special/mips-abi.exp ! 4294967295b ./gcc/testsuite/gcc.dg/special/mips-abi.s ! 274062869b ./gcc/testsuite/gcc.dg/special/special.exp ! 2943372070b ./gcc/testsuite/gcc.dg/special/weak-1.c ! 3422703148b ./gcc/testsuite/gcc.dg/special/weak-1a.c ! 3142421222b ./gcc/testsuite/gcc.dg/special/weak-2.c ! 389288806b ./gcc/testsuite/gcc.dg/special/weak-2a.c ! 3422703148b ./gcc/testsuite/gcc.dg/special/weak-2b.c ! 2222470584b ./gcc/testsuite/gcc.dg/special/wkali-1.c ! 3142421222b ./gcc/testsuite/gcc.dg/special/wkali-2.c ! 206085145b ./gcc/testsuite/gcc.dg/special/wkali-2a.c ! 2277202182b ./gcc/testsuite/gcc.dg/special/wkali-2b.c ! 1648410279b ./gcc/testsuite/gcc.dg/splet-1.c ! 276809676b ./gcc/testsuite/gcc.dg/struct-alias-1.c ! 2735438447b ./gcc/testsuite/gcc.dg/struct-by-value-1.c ! 652392948b ./gcc/testsuite/gcc.dg/struct-ret-1.c ! 1932500816b ./gcc/testsuite/gcc.dg/struct-ret-2.c ! 3047762229b ./gcc/testsuite/gcc.dg/struct-ret-libc.c ! 548999932b ./gcc/testsuite/gcc.dg/switch-1.c ! 3837710588b ./gcc/testsuite/gcc.dg/tls/alias-1.c ! 1700260228b ./gcc/testsuite/gcc.dg/tls/diag-1.c ! 3983152143b ./gcc/testsuite/gcc.dg/tls/diag-2.c ! 3440648572b ./gcc/testsuite/gcc.dg/tls/diag-3.c ! 1583541536b ./gcc/testsuite/gcc.dg/tls/init-1.c ! 1079004879b ./gcc/testsuite/gcc.dg/tls/nonpic-1.c ! 2112067562b ./gcc/testsuite/gcc.dg/tls/opt-2.c ! 2888022674b ./gcc/testsuite/gcc.dg/tls/opt-3.c ! 2772172947b ./gcc/testsuite/gcc.dg/tls/opt-4.c ! 1198289493b ./gcc/testsuite/gcc.dg/tls/pic-1.c ! 2036184791b ./gcc/testsuite/gcc.dg/tls/section-1.c ! 2218745466b ./gcc/testsuite/gcc.dg/tls/struct-1.c ! 4065237020b ./gcc/testsuite/gcc.dg/tls/tls.exp ! 472549683b ./gcc/testsuite/gcc.dg/tls/trivial.c ! 1081388830b ./gcc/testsuite/gcc.dg/torture/cris-volatile-1.c ! 203987244b ./gcc/testsuite/gcc.dg/torture/dg-torture.exp ! 2957542792b ./gcc/testsuite/gcc.dg/trampoline-1.c ! 1141366394b ./gcc/testsuite/gcc.dg/trunc-1.c ! 1890682509b ./gcc/testsuite/gcc.dg/typedef-init.c ! 1892637986b ./gcc/testsuite/gcc.dg/typeof-1.c ! 2805647153b ./gcc/testsuite/gcc.dg/typespec-1.c ! 1860858242b ./gcc/testsuite/gcc.dg/ultrasp1.c ! 2282506048b ./gcc/testsuite/gcc.dg/ultrasp10.c ! 789972216b ./gcc/testsuite/gcc.dg/ultrasp2.c ! 2708772692b ./gcc/testsuite/gcc.dg/ultrasp3.c ! 1890424464b ./gcc/testsuite/gcc.dg/ultrasp4.c ! 2979039757b ./gcc/testsuite/gcc.dg/ultrasp5.c ! 783369369b ./gcc/testsuite/gcc.dg/ultrasp6.c ! 2907651471b ./gcc/testsuite/gcc.dg/ultrasp7.c ! 906694114b ./gcc/testsuite/gcc.dg/ultrasp8.c ! 3540624174b ./gcc/testsuite/gcc.dg/ultrasp9.c ! 2258658308b ./gcc/testsuite/gcc.dg/uninit-1.c ! 608086310b ./gcc/testsuite/gcc.dg/uninit-2.c ! 2219873069b ./gcc/testsuite/gcc.dg/uninit-3.c ! 3153724678b ./gcc/testsuite/gcc.dg/uninit-4.c ! 2761916267b ./gcc/testsuite/gcc.dg/uninit-5.c ! 4187609695b ./gcc/testsuite/gcc.dg/uninit-6.c ! 3846997492b ./gcc/testsuite/gcc.dg/uninit-8.c ! 390912088b ./gcc/testsuite/gcc.dg/uninit-9.c ! 2047101897b ./gcc/testsuite/gcc.dg/uninit-A.c ! 3967573468b ./gcc/testsuite/gcc.dg/uninit-B.c ! 533482132b ./gcc/testsuite/gcc.dg/uninit-C.c ! 3652858704b ./gcc/testsuite/gcc.dg/unordered-1.c ! 977726966b ./gcc/testsuite/gcc.dg/unused-1.c ! 3484455791b ./gcc/testsuite/gcc.dg/unused-2.c ! 865910481b ./gcc/testsuite/gcc.dg/unused-3.c ! 1143790346b ./gcc/testsuite/gcc.dg/unused-4.c ! 3706472995b ./gcc/testsuite/gcc.dg/va-arg-1.c ! 1598019737b ./gcc/testsuite/gcc.dg/va-arg-2.c ! 2932877249b ./gcc/testsuite/gcc.dg/verbose-asm.c ! 3017845162b ./gcc/testsuite/gcc.dg/vla-2.c ! 2427295047b ./gcc/testsuite/gcc.dg/vla-init-1.c ! 4257653081b ./gcc/testsuite/gcc.dg/warn-1.c ! 2228363679b ./gcc/testsuite/gcc.dg/wchar_t-1.c ! 2158608745b ./gcc/testsuite/gcc.dg/weak/typeof-2.c ! 284772550b ./gcc/testsuite/gcc.dg/weak/weak-1.c ! 4188979390b ./gcc/testsuite/gcc.dg/weak/weak-2.c ! 4217992067b ./gcc/testsuite/gcc.dg/weak/weak-3.c ! 335689940b ./gcc/testsuite/gcc.dg/weak/weak-4.c ! 2769940495b ./gcc/testsuite/gcc.dg/weak/weak-5.c ! 3288640728b ./gcc/testsuite/gcc.dg/weak/weak-6.c ! 448806115b ./gcc/testsuite/gcc.dg/weak/weak-7.c ! 4030894436b ./gcc/testsuite/gcc.dg/weak/weak-8.c ! 1489715470b ./gcc/testsuite/gcc.dg/weak/weak-9.c ! 352709517b ./gcc/testsuite/gcc.dg/weak/weak.exp ! 455748560b ./gcc/testsuite/gcc.dg/wint_t-1.c ! 3993663285b ./gcc/testsuite/gcc.dg/wtr-aggr-init-1.c ! 633259392b ./gcc/testsuite/gcc.dg/wtr-conversion-1.c ! 3391999525b ./gcc/testsuite/gcc.dg/wtr-escape-1.c ! 1703287085b ./gcc/testsuite/gcc.dg/wtr-func-def-1.c ! 1477789682b ./gcc/testsuite/gcc.dg/wtr-int-type-1.c ! 2738321439b ./gcc/testsuite/gcc.dg/wtr-label-1.c ! 1412426885b ./gcc/testsuite/gcc.dg/wtr-static-1.c ! 2515335159b ./gcc/testsuite/gcc.dg/wtr-strcat-1.c ! 3352403433b ./gcc/testsuite/gcc.dg/wtr-suffix-1.c ! 3574773812b ./gcc/testsuite/gcc.dg/wtr-switch-1.c ! 38129501b ./gcc/testsuite/gcc.dg/wtr-unary-plus-1.c ! 3581927017b ./gcc/testsuite/gcc.dg/wtr-union-init-1.c ! 3887199666b ./gcc/testsuite/gcc.dg/wtr-union-init-2.c ! 2779433155b ./gcc/testsuite/gcc.dg/wtr-union-init-3.c ! 1769759078b ./gcc/testsuite/gcc.misc-tests/acker1.c ! 1443030966b ./gcc/testsuite/gcc.misc-tests/acker1.exp ! 278378178b ./gcc/testsuite/gcc.misc-tests/arm-isr.c ! 1193019601b ./gcc/testsuite/gcc.misc-tests/arm-isr.exp ! 2075376861b ./gcc/testsuite/gcc.misc-tests/bprob-1.c ! 3293027214b ./gcc/testsuite/gcc.misc-tests/bprob-2.c ! 2056237520b ./gcc/testsuite/gcc.misc-tests/bprob.exp ! 730919505b ./gcc/testsuite/gcc.misc-tests/dg-1.c ! 865542926b ./gcc/testsuite/gcc.misc-tests/dg-10.c ! 2063159250b ./gcc/testsuite/gcc.misc-tests/dg-11.c ! 33043738b ./gcc/testsuite/gcc.misc-tests/dg-12.c ! 3096773472b ./gcc/testsuite/gcc.misc-tests/dg-2.c ! 3661115972b ./gcc/testsuite/gcc.misc-tests/dg-3.c ! 3160178728b ./gcc/testsuite/gcc.misc-tests/dg-4.c ! 2494962233b ./gcc/testsuite/gcc.misc-tests/dg-5.c ! 2938473505b ./gcc/testsuite/gcc.misc-tests/dg-6.c ! 3402935282b ./gcc/testsuite/gcc.misc-tests/dg-7.c ! 1050718588b ./gcc/testsuite/gcc.misc-tests/dg-8.c ! 1666656352b ./gcc/testsuite/gcc.misc-tests/dg-9.c ! 1706908915b ./gcc/testsuite/gcc.misc-tests/dg-test.exp ! 1483515495b ./gcc/testsuite/gcc.misc-tests/dhry.c ! 1824463967b ./gcc/testsuite/gcc.misc-tests/dhry.exp ! 208907585b ./gcc/testsuite/gcc.misc-tests/dhry.h ! 779830061b ./gcc/testsuite/gcc.misc-tests/gcov-1.c ! 3193043874b ./gcc/testsuite/gcc.misc-tests/gcov-2.c ! 4211514085b ./gcc/testsuite/gcc.misc-tests/gcov-3.c ! 3919110722b ./gcc/testsuite/gcc.misc-tests/gcov-4.c ! 527032712b ./gcc/testsuite/gcc.misc-tests/gcov-4b.c ! 3346981345b ./gcc/testsuite/gcc.misc-tests/gcov-4b.x ! 695277662b ./gcc/testsuite/gcc.misc-tests/gcov-5b.c ! 3346981345b ./gcc/testsuite/gcc.misc-tests/gcov-5b.x ! 790797496b ./gcc/testsuite/gcc.misc-tests/gcov-6.c ! 2262587727b ./gcc/testsuite/gcc.misc-tests/gcov-6.x ! 2647301947b ./gcc/testsuite/gcc.misc-tests/gcov-7.c ! 2262587727b ./gcc/testsuite/gcc.misc-tests/gcov-7.x ! 1143513930b ./gcc/testsuite/gcc.misc-tests/gcov-8.c ! 3346981345b ./gcc/testsuite/gcc.misc-tests/gcov-8.x ! 283921131b ./gcc/testsuite/gcc.misc-tests/gcov.exp ! 1258478426b ./gcc/testsuite/gcc.misc-tests/i386-pf-3dnow-1.c ! 3346801828b ./gcc/testsuite/gcc.misc-tests/i386-pf-athlon-1.c ! 2266643451b ./gcc/testsuite/gcc.misc-tests/i386-pf-none-1.c ! 2697809529b ./gcc/testsuite/gcc.misc-tests/i386-pf-sse-1.c ! 2256410310b ./gcc/testsuite/gcc.misc-tests/i386-prefetch.exp ! 2071381157b ./gcc/testsuite/gcc.misc-tests/linkage-x.c ! 3975807378b ./gcc/testsuite/gcc.misc-tests/linkage-y.c ! 1438262609b ./gcc/testsuite/gcc.misc-tests/linkage.exp ! 2874350784b ./gcc/testsuite/gcc.misc-tests/matrix1.c ! 1686589144b ./gcc/testsuite/gcc.misc-tests/matrix1.exp ! 1813429392b ./gcc/testsuite/gcc.misc-tests/mg.c ! 1868251641b ./gcc/testsuite/gcc.misc-tests/mg.exp ! 1983153897b ./gcc/testsuite/gcc.misc-tests/sieve.c ! 3220093576b ./gcc/testsuite/gcc.misc-tests/sieve.exp ! 4235385594b ./gcc/testsuite/gcc.misc-tests/sort2.c ! 232815709b ./gcc/testsuite/gcc.misc-tests/sort2.exp 1271260439b ./gcc/testsuite/lib/c-torture.exp ! 3239465090b ./gcc/testsuite/lib/compat.exp 246962046b ./gcc/testsuite/lib/f-torture.exp + 827216288b ./gcc/testsuite/lib/file-format.exp + 1025717576b ./gcc/testsuite/lib/g++-dg.exp + 1391492964b ./gcc/testsuite/lib/g++.exp 2197210451b ./gcc/testsuite/lib/g77-dg.exp ! 4216548139b ./gcc/testsuite/lib/g77.exp 3365202398b ./gcc/testsuite/lib/gcc-defs.exp 3402161270b ./gcc/testsuite/lib/gcc-dg.exp ! 2142928528b ./gcc/testsuite/lib/gcc.exp 310116090b ./gcc/testsuite/lib/gcov.exp ! 2511438650b ./gcc/testsuite/lib/mike-g++.exp 1785660070b ./gcc/testsuite/lib/mike-g77.exp 3188273403b ./gcc/testsuite/lib/mike-gcc.exp 576875699b ./gcc/testsuite/lib/objc-dg.exp 86722252b ./gcc/testsuite/lib/objc-torture.exp + 4024611676b ./gcc/testsuite/lib/objc.exp 807926328b ./gcc/testsuite/lib/old-dejagnu.exp 1067355345b ./gcc/testsuite/lib/profopt.exp 1819066650b ./gcc/testsuite/lib/prune.exp 3687014284b ./gcc/testsuite/lib/scanasm.exp 3463101165b ./gcc/testsuite/lib/target-supports.exp 397114874b ./gcc/testsuite/lib/treelang.exp 1369080733b ./gcc/testsuite/objc.dg/alias.m 3457756194b ./gcc/testsuite/objc.dg/bitfield-1.m 1257506925b ./gcc/testsuite/objc.dg/bitfield-2.m *************** *** 11732,11749 **** 4046194509b ./gcc/testsuite/objc.dg/naming-1.m 3719205740b ./gcc/testsuite/objc.dg/naming-2.m 3497150704b ./gcc/testsuite/objc.dg/param-1.m 2785734223b ./gcc/testsuite/objc.dg/proto-hier-1.m 1637082747b ./gcc/testsuite/objc.dg/proto-hier-2.m 3533197243b ./gcc/testsuite/objc.dg/proto-lossage-1.m 26181874b ./gcc/testsuite/objc.dg/selector-1.m 888349193b ./gcc/testsuite/objc.dg/special/special.exp - 3208621557b ./gcc/testsuite/objc.dg/special/unclaimed-category-1a.m 3078900770b ./gcc/testsuite/objc.dg/special/unclaimed-category-1.h 1931469026b ./gcc/testsuite/objc.dg/special/unclaimed-category-1.m 967308749b ./gcc/testsuite/objc.dg/super-class-1.m 3933978206b ./gcc/testsuite/objc.dg/super-class-2.m 2504543796b ./gcc/testsuite/objc.dg/undeclared-selector.m 3837394038b ./gcc/testsuite/objc/execute/accessing_ivars.m 2710215022b ./gcc/testsuite/objc/execute/bf-10.m 2657298938b ./gcc/testsuite/objc/execute/bf-11.m 2456637155b ./gcc/testsuite/objc/execute/bf-12.m --- 11805,11830 ---- 4046194509b ./gcc/testsuite/objc.dg/naming-1.m 3719205740b ./gcc/testsuite/objc.dg/naming-2.m 3497150704b ./gcc/testsuite/objc.dg/param-1.m + 2471850782b ./gcc/testsuite/objc.dg/private-1.m + 2624858456b ./gcc/testsuite/objc.dg/private-2.m 2785734223b ./gcc/testsuite/objc.dg/proto-hier-1.m 1637082747b ./gcc/testsuite/objc.dg/proto-hier-2.m 3533197243b ./gcc/testsuite/objc.dg/proto-lossage-1.m + 2216475571b ./gcc/testsuite/objc.dg/proto-lossage-3.m 26181874b ./gcc/testsuite/objc.dg/selector-1.m 888349193b ./gcc/testsuite/objc.dg/special/special.exp 3078900770b ./gcc/testsuite/objc.dg/special/unclaimed-category-1.h 1931469026b ./gcc/testsuite/objc.dg/special/unclaimed-category-1.m + 3208621557b ./gcc/testsuite/objc.dg/special/unclaimed-category-1a.m 967308749b ./gcc/testsuite/objc.dg/super-class-1.m 3933978206b ./gcc/testsuite/objc.dg/super-class-2.m 2504543796b ./gcc/testsuite/objc.dg/undeclared-selector.m + 3665869615b ./gcc/testsuite/objc/compile/20011211-1.m + 1806367206b ./gcc/testsuite/objc/compile/compile.exp + 2696823090b ./gcc/testsuite/objc/execute/IMP.m + 1707819077b ./gcc/testsuite/objc/execute/_cmd.m 3837394038b ./gcc/testsuite/objc/execute/accessing_ivars.m + 1927175126b ./gcc/testsuite/objc/execute/bf-1.m 2710215022b ./gcc/testsuite/objc/execute/bf-10.m 2657298938b ./gcc/testsuite/objc/execute/bf-11.m 2456637155b ./gcc/testsuite/objc/execute/bf-12.m *************** *** 11754,11763 **** 4134365460b ./gcc/testsuite/objc/execute/bf-17.m 355990402b ./gcc/testsuite/objc/execute/bf-18.m 3674443693b ./gcc/testsuite/objc/execute/bf-19.m ! 1927175126b ./gcc/testsuite/objc/execute/bf-1.m 2184610020b ./gcc/testsuite/objc/execute/bf-20.m 2019969445b ./gcc/testsuite/objc/execute/bf-21.m - 3212450864b ./gcc/testsuite/objc/execute/bf-2.m 80833366b ./gcc/testsuite/objc/execute/bf-3.m 1154895973b ./gcc/testsuite/objc/execute/bf-4.m 2150643868b ./gcc/testsuite/objc/execute/bf-5.m --- 11835,11843 ---- 4134365460b ./gcc/testsuite/objc/execute/bf-17.m 355990402b ./gcc/testsuite/objc/execute/bf-18.m 3674443693b ./gcc/testsuite/objc/execute/bf-19.m ! 3212450864b ./gcc/testsuite/objc/execute/bf-2.m 2184610020b ./gcc/testsuite/objc/execute/bf-20.m 2019969445b ./gcc/testsuite/objc/execute/bf-21.m 80833366b ./gcc/testsuite/objc/execute/bf-3.m 1154895973b ./gcc/testsuite/objc/execute/bf-4.m 2150643868b ./gcc/testsuite/objc/execute/bf-5.m *************** *** 11769,11780 **** 490840694b ./gcc/testsuite/objc/execute/bycopy-1.m 494931174b ./gcc/testsuite/objc/execute/bycopy-2.m 1730034329b ./gcc/testsuite/objc/execute/bycopy-3.m 3022811812b ./gcc/testsuite/objc/execute/class-10.m 1808680681b ./gcc/testsuite/objc/execute/class-11.m 3170467444b ./gcc/testsuite/objc/execute/class-12.m 1450032037b ./gcc/testsuite/objc/execute/class-13.m 962298201b ./gcc/testsuite/objc/execute/class-14.m - 15537293b ./gcc/testsuite/objc/execute/class-1.m 184341932b ./gcc/testsuite/objc/execute/class-2.m 1192708745b ./gcc/testsuite/objc/execute/class-3.m 1197020462b ./gcc/testsuite/objc/execute/class-4.m --- 11849,11860 ---- 490840694b ./gcc/testsuite/objc/execute/bycopy-1.m 494931174b ./gcc/testsuite/objc/execute/bycopy-2.m 1730034329b ./gcc/testsuite/objc/execute/bycopy-3.m + 15537293b ./gcc/testsuite/objc/execute/class-1.m 3022811812b ./gcc/testsuite/objc/execute/class-10.m 1808680681b ./gcc/testsuite/objc/execute/class-11.m 3170467444b ./gcc/testsuite/objc/execute/class-12.m 1450032037b ./gcc/testsuite/objc/execute/class-13.m 962298201b ./gcc/testsuite/objc/execute/class-14.m 184341932b ./gcc/testsuite/objc/execute/class-2.m 1192708745b ./gcc/testsuite/objc/execute/class-3.m 1197020462b ./gcc/testsuite/objc/execute/class-4.m *************** *** 11783,11793 **** 3834458842b ./gcc/testsuite/objc/execute/class-7.m 3671287888b ./gcc/testsuite/objc/execute/class-8.m 3384901465b ./gcc/testsuite/objc/execute/class-9.m - 4110777484b ./gcc/testsuite/objc/execute/class_self-1.m - 1951268392b ./gcc/testsuite/objc/execute/class_self-2.m 1679931936b ./gcc/testsuite/objc/execute/class-tests-1.h 1742460237b ./gcc/testsuite/objc/execute/class-tests-2.h ! 1707819077b ./gcc/testsuite/objc/execute/_cmd.m 2668180928b ./gcc/testsuite/objc/execute/compatibility_alias.m 2525550462b ./gcc/testsuite/objc/execute/encode-1.m 2615444748b ./gcc/testsuite/objc/execute/enumeration-1.m --- 11863,11872 ---- 3834458842b ./gcc/testsuite/objc/execute/class-7.m 3671287888b ./gcc/testsuite/objc/execute/class-8.m 3384901465b ./gcc/testsuite/objc/execute/class-9.m 1679931936b ./gcc/testsuite/objc/execute/class-tests-1.h 1742460237b ./gcc/testsuite/objc/execute/class-tests-2.h ! 4110777484b ./gcc/testsuite/objc/execute/class_self-1.m ! 1951268392b ./gcc/testsuite/objc/execute/class_self-2.m 2668180928b ./gcc/testsuite/objc/execute/compatibility_alias.m 2525550462b ./gcc/testsuite/objc/execute/encode-1.m 2615444748b ./gcc/testsuite/objc/execute/enumeration-1.m *************** *** 11801,11807 **** 3973735702b ./gcc/testsuite/objc/execute/formal_protocol-5.m 2144981305b ./gcc/testsuite/objc/execute/formal_protocol-6.m 99644718b ./gcc/testsuite/objc/execute/formal_protocol-7.m - 2696823090b ./gcc/testsuite/objc/execute/IMP.m 1013228926b ./gcc/testsuite/objc/execute/informal_protocol.m 2858039597b ./gcc/testsuite/objc/execute/initialize.m 4264400256b ./gcc/testsuite/objc/execute/load-2.m --- 11880,11885 ---- *************** *** 11829,11868 **** 2934965640b ./gcc/testsuite/objc/execute/string3.m 416130789b ./gcc/testsuite/objc/execute/string4.m 34483048b ./gcc/testsuite/objc/execute/va_method.m ! 986418331b ./gcc/testsuite/README ! 922475304b ./gcc/testsuite/README.compat ! 4258789052b ./gcc/testsuite/README.g++ ! 174183124b ./gcc/testsuite/README.gcc ! 3846056859b ./gcc/testsuite/README.QMTEST 459055346b ./gcc/testsuite/treelang/a01gcci01.c 2293023639b ./gcc/testsuite/treelang/a01gcci01.tree 1160413650b ./gcc/testsuite/treelang/a01gcco01runpgm - 937678774b ./gcc/testsuite/treelang/ChangeLog - 2484589993b ./gcc/testsuite/treelang/Makefile.in 1917546689b ./gcc/testsuite/treelang/treetests.exp 1194399710b ./gcc/timevar.c 2017483246b ./gcc/timevar.def 70728940b ./gcc/timevar.h 2501087508b ./gcc/tlink.c ! 59174352b ./gcc/toplev.c 2285258868b ./gcc/toplev.h 3423640720b ./gcc/tracer.c - 3323639773b ./gcc/tree.c - 266537813b ./gcc/tree.def 3233962690b ./gcc/tree-dump.c 3355334157b ./gcc/tree-dump.h - 3372102658b ./gcc/tree.h 2369766666b ./gcc/tree-inline.c 3754771676b ./gcc/tree-inline.h ! 871226491b ./gcc/treelang/ChangeLog ! 1636615662b ./gcc/treelang/config-lang.in 1245022634b ./gcc/treelang/.cvsignore 3755575041b ./gcc/treelang/lang-options.h 169461342b ./gcc/treelang/lang-specs.h 2793678110b ./gcc/treelang/lex.l - 4164319034b ./gcc/treelang/Make-lang.in 3271936071b ./gcc/treelang/parse.y - 1455824996b ./gcc/treelang/README 1247992967b ./gcc/treelang/tree1.c 2740323862b ./gcc/treelang/treelang.h 967872958b ./gcc/treelang/treelang.texi --- 11907,11941 ---- 2934965640b ./gcc/testsuite/objc/execute/string3.m 416130789b ./gcc/testsuite/objc/execute/string4.m 34483048b ./gcc/testsuite/objc/execute/va_method.m ! 2021644960b ./gcc/testsuite/treelang/ChangeLog ! 2484589993b ./gcc/testsuite/treelang/Makefile.in 459055346b ./gcc/testsuite/treelang/a01gcci01.c 2293023639b ./gcc/testsuite/treelang/a01gcci01.tree 1160413650b ./gcc/testsuite/treelang/a01gcco01runpgm 1917546689b ./gcc/testsuite/treelang/treetests.exp 1194399710b ./gcc/timevar.c 2017483246b ./gcc/timevar.def 70728940b ./gcc/timevar.h 2501087508b ./gcc/tlink.c ! 2483790730b ./gcc/toplev.c 2285258868b ./gcc/toplev.h 3423640720b ./gcc/tracer.c 3233962690b ./gcc/tree-dump.c 3355334157b ./gcc/tree-dump.h 2369766666b ./gcc/tree-inline.c 3754771676b ./gcc/tree-inline.h ! 2405545318b ./gcc/tree.c ! 266537813b ./gcc/tree.def ! 2808711120b ./gcc/tree.h 1245022634b ./gcc/treelang/.cvsignore + 4228296385b ./gcc/treelang/ChangeLog + 4164319034b ./gcc/treelang/Make-lang.in + 1455824996b ./gcc/treelang/README + 1636615662b ./gcc/treelang/config-lang.in 3755575041b ./gcc/treelang/lang-options.h 169461342b ./gcc/treelang/lang-specs.h 2793678110b ./gcc/treelang/lex.l 3271936071b ./gcc/treelang/parse.y 1247992967b ./gcc/treelang/tree1.c 2740323862b ./gcc/treelang/treelang.h 967872958b ./gcc/treelang/treelang.texi *************** *** 11870,11899 **** 4292976636b ./gcc/treelang/treetree.h 2170053915b ./gcc/tsystem.h 4139263293b ./gcc/typeclass.h ! 1580612335b ./gcc/unroll.c 821072330b ./gcc/unwind-c.c - 586184029b ./gcc/unwind-dw2.c - 4197489626b ./gcc/unwind-dw2-fde.c 2891582256b ./gcc/unwind-dw2-fde-darwin.c 4043744940b ./gcc/unwind-dw2-fde-glibc.c 1040599635b ./gcc/unwind-dw2-fde.h ! 2380024293b ./gcc/unwind.h ! 1020619093b ./gcc/unwind.inc ! 2030699993b ./gcc/unwind-libunwind.c 703686593b ./gcc/unwind-pe.h 2302719627b ./gcc/unwind-sjlj.c ! 3315793682b ./gcc/varasm.c 2835975751b ./gcc/varray.c 1175263363b ./gcc/varray.h ! 1537458113b ./gcc/version.c 3311075015b ./gcc/version.h 1174103923b ./gcc/vmsdbg.h 3947609636b ./gcc/vmsdbgout.c 1306126748b ./gcc/xcoffout.c 1199287060b ./gcc/xcoffout.h - 815071723b ./include/ansidecl.h - 3047773923b ./include/ChangeLog 2171125041b ./include/COPYING 3196744694b ./include/demangle.h 524172850b ./include/dyn-string.h 299694374b ./include/fibheap.h --- 11943,11972 ---- 4292976636b ./gcc/treelang/treetree.h 2170053915b ./gcc/tsystem.h 4139263293b ./gcc/typeclass.h ! 2938578497b ./gcc/unroll.c 821072330b ./gcc/unwind-c.c 2891582256b ./gcc/unwind-dw2-fde-darwin.c 4043744940b ./gcc/unwind-dw2-fde-glibc.c + 4197489626b ./gcc/unwind-dw2-fde.c 1040599635b ./gcc/unwind-dw2-fde.h ! 586184029b ./gcc/unwind-dw2.c ! 3859517403b ./gcc/unwind-libunwind.c 703686593b ./gcc/unwind-pe.h 2302719627b ./gcc/unwind-sjlj.c ! 2380024293b ./gcc/unwind.h ! 1020619093b ./gcc/unwind.inc ! 3386360022b ./gcc/varasm.c 2835975751b ./gcc/varray.c 1175263363b ./gcc/varray.h ! 2511869126b ./gcc/version.c 3311075015b ./gcc/version.h 1174103923b ./gcc/vmsdbg.h 3947609636b ./gcc/vmsdbgout.c 1306126748b ./gcc/xcoffout.c 1199287060b ./gcc/xcoffout.h 2171125041b ./include/COPYING + 3759863705b ./include/ChangeLog + 815071723b ./include/ansidecl.h 3196744694b ./include/demangle.h 524172850b ./include/dyn-string.h 299694374b ./include/fibheap.h *************** *** 11901,11907 **** 1934715875b ./include/fnmatch.h 894338799b ./include/getopt.h 3905730254b ./include/hashtab.h ! 1843204786b ./include/libiberty.h 2315750201b ./include/md5.h 1017179691b ./include/objalloc.h 2663239037b ./include/obstack.h --- 11974,11980 ---- 1934715875b ./include/fnmatch.h 894338799b ./include/getopt.h 3905730254b ./include/hashtab.h ! 465152930b ./include/libiberty.h 2315750201b ./include/md5.h 1017179691b ./include/objalloc.h 2663239037b ./include/obstack.h *************** *** 11911,11950 **** 1910476895b ./include/splay-tree.h 1653599470b ./include/symcat.h 1386762946b ./include/ternary.h - 1261882580b ./include/xregex2.h 1151436348b ./include/xregex.h ! 33022011b ./INSTALL/binaries.html ! 4033266920b ./INSTALL/build.html ! 352120157b ./INSTALL/configure.html ! 4044841084b ./INSTALL/download.html ! 1291706358b ./INSTALL/finalinstall.html ! 333087212b ./INSTALL/gfdl.html ! 4067214366b ./INSTALL/index.html ! 2397948b ./INSTALL/old.html ! 2229468985b ./INSTALL/README 656627656b ./install-sh ! 778202268b ./INSTALL/specific.html ! 1404181894b ./INSTALL/test.html 2266217259b ./libf2c/aclocal.m4 - 2585465394b ./libf2c/ChangeLog 1973941211b ./libf2c/changes.netlib 2076327479b ./libf2c/configure 2026513347b ./libf2c/configure.in 2487502900b ./libf2c/disclaimer.netlib - 4252437873b ./libf2c/f2cext.c 259100451b ./libf2c/f2c.h 1667086857b ./libf2c/g2c.hin 3870392859b ./libf2c/libF77/abort_.c 308572448b ./libf2c/libF77/c_abs.c - 2082137729b ./libf2c/libF77/cabs.c 1883497441b ./libf2c/libF77/c_cos.c 1858422356b ./libf2c/libF77/c_div.c 790029673b ./libf2c/libF77/c_exp.c 994577213b ./libf2c/libF77/c_log.c - 1273103030b ./libf2c/libF77/configure - 4180656621b ./libf2c/libF77/configure.in 2669446875b ./libf2c/libF77/c_sin.c 3903296098b ./libf2c/libF77/c_sqrt.c 3104858124b ./libf2c/libF77/d_abs.c 439429488b ./libf2c/libF77/d_acos.c 3154060526b ./libf2c/libF77/d_asin.c --- 11984,12020 ---- 1910476895b ./include/splay-tree.h 1653599470b ./include/symcat.h 1386762946b ./include/ternary.h 1151436348b ./include/xregex.h ! 1261882580b ./include/xregex2.h 656627656b ./install-sh ! 3068789997b ./libf2c/ChangeLog ! 1037519030b ./libf2c/Makefile.in ! 3111321221b ./libf2c/README ! 308226469b ./libf2c/TODO 2266217259b ./libf2c/aclocal.m4 1973941211b ./libf2c/changes.netlib 2076327479b ./libf2c/configure 2026513347b ./libf2c/configure.in 2487502900b ./libf2c/disclaimer.netlib 259100451b ./libf2c/f2c.h + 4252437873b ./libf2c/f2cext.c 1667086857b ./libf2c/g2c.hin + 1526525282b ./libf2c/libF77/F77_aloc.c + 1669682409b ./libf2c/libF77/Makefile.in + 1384146782b ./libf2c/libF77/Notice + 3594711912b ./libf2c/libF77/README.netlib + 1442622178b ./libf2c/libF77/Version.c 3870392859b ./libf2c/libF77/abort_.c 308572448b ./libf2c/libF77/c_abs.c 1883497441b ./libf2c/libF77/c_cos.c 1858422356b ./libf2c/libF77/c_div.c 790029673b ./libf2c/libF77/c_exp.c 994577213b ./libf2c/libF77/c_log.c 2669446875b ./libf2c/libF77/c_sin.c 3903296098b ./libf2c/libF77/c_sqrt.c + 2082137729b ./libf2c/libF77/cabs.c + 1273103030b ./libf2c/libF77/configure + 4180656621b ./libf2c/libF77/configure.in 3104858124b ./libf2c/libF77/d_abs.c 439429488b ./libf2c/libF77/d_acos.c 3154060526b ./libf2c/libF77/d_asin.c *************** *** 11954,11961 **** 3427599074b ./libf2c/libF77/d_cos.c 4206462540b ./libf2c/libF77/d_cosh.c 2776283018b ./libf2c/libF77/d_dim.c - 4081149047b ./libf2c/libF77/derf_.c - 1955443966b ./libf2c/libF77/derfc_.c 3451576040b ./libf2c/libF77/d_exp.c 2381745545b ./libf2c/libF77/d_imag.c 1146832515b ./libf2c/libF77/d_int.c --- 12024,12029 ---- *************** *** 11970,11975 **** --- 12038,12045 ---- 1226820162b ./libf2c/libF77/d_sqrt.c 417505515b ./libf2c/libF77/d_tan.c 2673761809b ./libf2c/libF77/d_tanh.c + 4081149047b ./libf2c/libF77/derf_.c + 1955443966b ./libf2c/libF77/derfc_.c 3131947640b ./libf2c/libF77/dtime_.c 458872884b ./libf2c/libF77/ef1asc_.c 1860532555b ./libf2c/libF77/ef1cmc_.c *************** *** 11978,11984 **** 2613183923b ./libf2c/libF77/etime_.c 1297045716b ./libf2c/libF77/exit_.c 3698594684b ./libf2c/libF77/f2ch.add - 1526525282b ./libf2c/libF77/F77_aloc.c 3828795678b ./libf2c/libF77/getarg_.c 1741489762b ./libf2c/libF77/getenv_.c 1705811646b ./libf2c/libF77/h_abs.c --- 12048,12053 ---- *************** *** 11986,12000 **** 2105686072b ./libf2c/libF77/h_dnnt.c 3429041813b ./libf2c/libF77/h_indx.c 1359030284b ./libf2c/libF77/h_len.c 2723905741b ./libf2c/libF77/hl_ge.c 3742765482b ./libf2c/libF77/hl_gt.c 4136074850b ./libf2c/libF77/hl_le.c 3720320860b ./libf2c/libF77/hl_lt.c - 3044296674b ./libf2c/libF77/h_mod.c - 417520566b ./libf2c/libF77/h_nint.c - 2232494709b ./libf2c/libF77/h_sign.c 3798144592b ./libf2c/libF77/i_abs.c - 2492709119b ./libf2c/libF77/iargc_.c 1810643827b ./libf2c/libF77/i_dim.c 3695350001b ./libf2c/libF77/i_dnnt.c 1369278917b ./libf2c/libF77/i_indx.c --- 12055,12068 ---- 2105686072b ./libf2c/libF77/h_dnnt.c 3429041813b ./libf2c/libF77/h_indx.c 1359030284b ./libf2c/libF77/h_len.c + 3044296674b ./libf2c/libF77/h_mod.c + 417520566b ./libf2c/libF77/h_nint.c + 2232494709b ./libf2c/libF77/h_sign.c 2723905741b ./libf2c/libF77/hl_ge.c 3742765482b ./libf2c/libF77/hl_gt.c 4136074850b ./libf2c/libF77/hl_le.c 3720320860b ./libf2c/libF77/hl_lt.c 3798144592b ./libf2c/libF77/i_abs.c 1810643827b ./libf2c/libF77/i_dim.c 3695350001b ./libf2c/libF77/i_dnnt.c 1369278917b ./libf2c/libF77/i_indx.c *************** *** 12002,12017 **** 81602132b ./libf2c/libF77/i_mod.c 3937278533b ./libf2c/libF77/i_nint.c 3575399967b ./libf2c/libF77/i_sign.c ! 2410485343b ./libf2c/libF77/lbitbits.c ! 2730286639b ./libf2c/libF77/lbitshft.c 606263729b ./libf2c/libF77/l_ge.c 1973270906b ./libf2c/libF77/l_gt.c 1895704350b ./libf2c/libF77/l_le.c 1999912844b ./libf2c/libF77/l_lt.c 4187310039b ./libf2c/libF77/main.c - 1669682409b ./libf2c/libF77/Makefile.in 1177519321b ./libf2c/libF77/makefile.netlib - 1384146782b ./libf2c/libF77/Notice 2796565280b ./libf2c/libF77/pow_ci.c 2439413233b ./libf2c/libF77/pow_dd.c 526163208b ./libf2c/libF77/pow_di.c --- 12070,12084 ---- 81602132b ./libf2c/libF77/i_mod.c 3937278533b ./libf2c/libF77/i_nint.c 3575399967b ./libf2c/libF77/i_sign.c ! 2492709119b ./libf2c/libF77/iargc_.c 606263729b ./libf2c/libF77/l_ge.c 1973270906b ./libf2c/libF77/l_gt.c 1895704350b ./libf2c/libF77/l_le.c 1999912844b ./libf2c/libF77/l_lt.c + 2410485343b ./libf2c/libF77/lbitbits.c + 2730286639b ./libf2c/libF77/lbitshft.c 4187310039b ./libf2c/libF77/main.c 1177519321b ./libf2c/libF77/makefile.netlib 2796565280b ./libf2c/libF77/pow_ci.c 2439413233b ./libf2c/libF77/pow_dd.c 526163208b ./libf2c/libF77/pow_di.c *************** *** 12032,12038 **** 4287786824b ./libf2c/libF77/r_cos.c 2790215018b ./libf2c/libF77/r_cosh.c 1076735700b ./libf2c/libF77/r_dim.c - 3594711912b ./libf2c/libF77/README.netlib 2818320536b ./libf2c/libF77/r_exp.c 3427760224b ./libf2c/libF77/r_imag.c 2923052734b ./libf2c/libF77/r_int.c --- 12099,12104 ---- *************** *** 12049,12065 **** 640128405b ./libf2c/libF77/s_cat.c 779675553b ./libf2c/libF77/s_cmp.c 1675956197b ./libf2c/libF77/s_copy.c 1364170531b ./libf2c/libF77/setarg.c 2295434596b ./libf2c/libF77/setsig.c 3891027752b ./libf2c/libF77/sig_die.c 1302607324b ./libf2c/libF77/signal1.h 4224588406b ./libf2c/libF77/signal1.h0 4053384399b ./libf2c/libF77/signal_.c - 2066061240b ./libf2c/libF77/s_paus.c - 2010036224b ./libf2c/libF77/s_rnge.c - 1481975032b ./libf2c/libF77/s_stop.c 2098642508b ./libf2c/libF77/system_.c - 1442622178b ./libf2c/libF77/Version.c 2063164754b ./libf2c/libF77/z_abs.c 835487827b ./libf2c/libF77/z_cos.c 3418342039b ./libf2c/libF77/z_div.c --- 12115,12130 ---- 640128405b ./libf2c/libF77/s_cat.c 779675553b ./libf2c/libF77/s_cmp.c 1675956197b ./libf2c/libF77/s_copy.c + 2066061240b ./libf2c/libF77/s_paus.c + 2010036224b ./libf2c/libF77/s_rnge.c + 1481975032b ./libf2c/libF77/s_stop.c 1364170531b ./libf2c/libF77/setarg.c 2295434596b ./libf2c/libF77/setsig.c 3891027752b ./libf2c/libF77/sig_die.c 1302607324b ./libf2c/libF77/signal1.h 4224588406b ./libf2c/libF77/signal1.h0 4053384399b ./libf2c/libF77/signal_.c 2098642508b ./libf2c/libF77/system_.c 2063164754b ./libf2c/libF77/z_abs.c 835487827b ./libf2c/libF77/z_cos.c 3418342039b ./libf2c/libF77/z_div.c *************** *** 12067,12072 **** --- 12132,12141 ---- 4262685973b ./libf2c/libF77/z_log.c 3558981315b ./libf2c/libF77/z_sin.c 1777351958b ./libf2c/libF77/z_sqrt.c + 413813536b ./libf2c/libI77/Makefile.in + 1384146782b ./libf2c/libI77/Notice + 3744878144b ./libf2c/libI77/README.netlib + 267355977b ./libf2c/libI77/Version.c 1429551872b ./libf2c/libI77/backspace.c 1478172370b ./libf2c/libI77/close.c 3442307107b ./libf2c/libI77/config.h.in *************** *** 12090,12101 **** 2845426094b ./libf2c/libI77/lio.h 2339662760b ./libf2c/libI77/lread.c 2457359454b ./libf2c/libI77/lwrite.c - 413813536b ./libf2c/libI77/Makefile.in 2636902289b ./libf2c/libI77/makefile.netlib - 1384146782b ./libf2c/libI77/Notice 715736260b ./libf2c/libI77/open.c 110392506b ./libf2c/libI77/rdfmt.c - 3744878144b ./libf2c/libI77/README.netlib 1384836661b ./libf2c/libI77/rewind.c 469225673b ./libf2c/libI77/rsfe.c 789788430b ./libf2c/libI77/rsli.c --- 12159,12167 ---- *************** *** 12106,12118 **** 1467065886b ./libf2c/libI77/typesize.c 133188881b ./libf2c/libI77/uio.c 2599288354b ./libf2c/libI77/util.c - 267355977b ./libf2c/libI77/Version.c 1343669172b ./libf2c/libI77/wref.c 2378602654b ./libf2c/libI77/wrtfmt.c 3995928311b ./libf2c/libI77/wsfe.c 2574376751b ./libf2c/libI77/wsle.c 2709711524b ./libf2c/libI77/wsne.c 3815521984b ./libf2c/libI77/xwsne.c 2464439682b ./libf2c/libU77/access_.c 4214861580b ./libf2c/libU77/acconfig.h 2301261828b ./libf2c/libU77/aclocal.m4 --- 12172,12188 ---- 1467065886b ./libf2c/libI77/typesize.c 133188881b ./libf2c/libI77/uio.c 2599288354b ./libf2c/libI77/util.c 1343669172b ./libf2c/libI77/wref.c 2378602654b ./libf2c/libI77/wrtfmt.c 3995928311b ./libf2c/libI77/wsfe.c 2574376751b ./libf2c/libI77/wsle.c 2709711524b ./libf2c/libI77/wsne.c 3815521984b ./libf2c/libI77/xwsne.c + 508743035b ./libf2c/libU77/COPYING.LIB + 3265980298b ./libf2c/libU77/Makefile.in + 572996563b ./libf2c/libU77/PROJECTS + 2980229902b ./libf2c/libU77/README + 2309533730b ./libf2c/libU77/Version.c 2464439682b ./libf2c/libU77/access_.c 4214861580b ./libf2c/libU77/acconfig.h 2301261828b ./libf2c/libU77/aclocal.m4 *************** *** 12123,12129 **** 3159418401b ./libf2c/libU77/config.hin 1372640931b ./libf2c/libU77/configure 111860866b ./libf2c/libU77/configure.in - 508743035b ./libf2c/libU77/COPYING.LIB 2480064804b ./libf2c/libU77/ctime_.c 1870363175b ./libf2c/libU77/date_.c 3360553792b ./libf2c/libU77/datetime_.c --- 12193,12198 ---- *************** *** 12154,12165 **** 1296799026b ./libf2c/libU77/lnblnk_.c 398926786b ./libf2c/libU77/lstat_.c 2099416211b ./libf2c/libU77/ltime_.c - 3265980298b ./libf2c/libU77/Makefile.in 1591902849b ./libf2c/libU77/mclock_.c 2823834342b ./libf2c/libU77/perror_.c - 572996563b ./libf2c/libU77/PROJECTS 763363676b ./libf2c/libU77/rand_.c - 2980229902b ./libf2c/libU77/README 1327457751b ./libf2c/libU77/rename_.c 3477232826b ./libf2c/libU77/secnds_.c 3521234196b ./libf2c/libU77/second_.c --- 12223,12231 ---- *************** *** 12174,12205 **** 791266987b ./libf2c/libU77/u77-test.f 3528727832b ./libf2c/libU77/umask_.c 2495094887b ./libf2c/libU77/unlink_.c - 2309533730b ./libf2c/libU77/Version.c 1291654081b ./libf2c/libU77/vxtidate_.c 4171477524b ./libf2c/libU77/vxttime_.c - 1037519030b ./libf2c/Makefile.in 1384146782b ./libf2c/permission.netlib - 3111321221b ./libf2c/README 3513813969b ./libf2c/readme.netlib ! 308226469b ./libf2c/TODO 1812706554b ./libffi/acconfig.h 2067133813b ./libffi/acinclude.m4 724319761b ./libffi/aclocal.m4 - 1636369445b ./libffi/ChangeLog - 2702617959b ./libffi/ChangeLog.libgcj - 1481682558b ./libffi/ChangeLog.v1 1642766366b ./libffi/configure 3275746772b ./libffi/configure.in 3275597189b ./libffi/fficonfig.h.in - 3309556484b ./libffi/include/ffi_common.h - 1733019211b ./libffi/include/ffi.h.in - 2321044801b ./libffi/include/ffi_mips.h 1175058075b ./libffi/include/Makefile.am 244394589b ./libffi/include/Makefile.in ! 2593181117b ./libffi/LICENSE ! 2695167608b ./libffi/Makefile.am ! 3694438602b ./libffi/Makefile.in ! 600411630b ./libffi/README 3852747706b ./libffi/src/alpha/ffi.c 2032396460b ./libffi/src/alpha/osf.S 1065761440b ./libffi/src/arm/ffi.c --- 12240,12267 ---- 791266987b ./libf2c/libU77/u77-test.f 3528727832b ./libf2c/libU77/umask_.c 2495094887b ./libf2c/libU77/unlink_.c 1291654081b ./libf2c/libU77/vxtidate_.c 4171477524b ./libf2c/libU77/vxttime_.c 1384146782b ./libf2c/permission.netlib 3513813969b ./libf2c/readme.netlib ! 637025596b ./libffi/ChangeLog ! 2702617959b ./libffi/ChangeLog.libgcj ! 1481682558b ./libffi/ChangeLog.v1 ! 2593181117b ./libffi/LICENSE ! 2695167608b ./libffi/Makefile.am ! 3694438602b ./libffi/Makefile.in ! 600411630b ./libffi/README 1812706554b ./libffi/acconfig.h 2067133813b ./libffi/acinclude.m4 724319761b ./libffi/aclocal.m4 1642766366b ./libffi/configure 3275746772b ./libffi/configure.in 3275597189b ./libffi/fficonfig.h.in 1175058075b ./libffi/include/Makefile.am 244394589b ./libffi/include/Makefile.in ! 1733019211b ./libffi/include/ffi.h.in ! 3309556484b ./libffi/include/ffi_common.h ! 2321044801b ./libffi/include/ffi_mips.h 3852747706b ./libffi/src/alpha/ffi.c 2032396460b ./libffi/src/alpha/osf.S 1065761440b ./libffi/src/arm/ffi.c *************** *** 12215,12225 **** 3974415875b ./libffi/src/mips/ffi.c 176940890b ./libffi/src/mips/n32.S 3634355650b ./libffi/src/mips/o32.S - 1122125803b ./libffi/src/powerpc/aix_closure.S 1342850260b ./libffi/src/powerpc/aix.S 257105690b ./libffi/src/powerpc/asm.h - 4115538808b ./libffi/src/powerpc/darwin_closure.S 3703527275b ./libffi/src/powerpc/darwin.S 1692071312b ./libffi/src/powerpc/ffi.c 2961975388b ./libffi/src/powerpc/ffi_darwin.c 978519837b ./libffi/src/powerpc/ppc_closure.S --- 12277,12287 ---- 3974415875b ./libffi/src/mips/ffi.c 176940890b ./libffi/src/mips/n32.S 3634355650b ./libffi/src/mips/o32.S 1342850260b ./libffi/src/powerpc/aix.S + 1122125803b ./libffi/src/powerpc/aix_closure.S 257105690b ./libffi/src/powerpc/asm.h 3703527275b ./libffi/src/powerpc/darwin.S + 4115538808b ./libffi/src/powerpc/darwin_closure.S 1692071312b ./libffi/src/powerpc/ffi.c 2961975388b ./libffi/src/powerpc/ffi_darwin.c 978519837b ./libffi/src/powerpc/ppc_closure.S *************** *** 12234,12247 **** 3362405709b ./libffi/src/sparc/v8.S 3260083111b ./libffi/src/sparc/v9.S 524688417b ./libffi/src/types.c - 3320856843b ./libffi/src/x86/ffi64.c 2484336261b ./libffi/src/x86/ffi.c 1341124901b ./libffi/src/x86/sysv.S 3837950194b ./libffi/src/x86/unix64.S 3296190987b ./libffi/src/x86/win32.S 216805921b ./libffi/stamp-h.in 3848560079b ./libiberty/acconfig.h ! 640604299b ./libiberty/aclocal.m4 4169173798b ./libiberty/alloca.c 122203256b ./libiberty/argv.c 751194285b ./libiberty/asprintf.c --- 12296,12314 ---- 3362405709b ./libffi/src/sparc/v8.S 3260083111b ./libffi/src/sparc/v9.S 524688417b ./libffi/src/types.c 2484336261b ./libffi/src/x86/ffi.c + 3320856843b ./libffi/src/x86/ffi64.c 1341124901b ./libffi/src/x86/sysv.S 3837950194b ./libffi/src/x86/unix64.S 3296190987b ./libffi/src/x86/win32.S 216805921b ./libffi/stamp-h.in + 508743035b ./libiberty/COPYING.LIB + 413373498b ./libiberty/ChangeLog + 2009246522b ./libiberty/Makefile.in + 2709928858b ./libiberty/README + 602306638b ./libiberty/_doprnt.c 3848560079b ./libiberty/acconfig.h ! 2778610072b ./libiberty/aclocal.m4 4169173798b ./libiberty/alloca.c 122203256b ./libiberty/argv.c 751194285b ./libiberty/asprintf.c *************** *** 12252,12277 **** 1033916047b ./libiberty/bsearch.c 2389959529b ./libiberty/bzero.c 1591293922b ./libiberty/calloc.c - 233187465b ./libiberty/ChangeLog 2264262326b ./libiberty/choose-temp.c 2557767520b ./libiberty/clock.c 3170582338b ./libiberty/concat.c 1987387424b ./libiberty/config.h-vms ! 1207178186b ./libiberty/config.in 3500529335b ./libiberty/config/mh-aix 3476234501b ./libiberty/config/mh-cxux7 1235651640b ./libiberty/config/mh-fbsd21 2904567379b ./libiberty/config/mh-openedition 2131807358b ./libiberty/config/mh-windows ! 2543977175b ./libiberty/config.table ! 4091151919b ./libiberty/configure ! 2655391173b ./libiberty/configure.in ! 508743035b ./libiberty/COPYING.LIB 2478885430b ./libiberty/copying-lib.texi 3329761531b ./libiberty/copysign.c 2848388650b ./libiberty/cp-demangle.c 2540319089b ./libiberty/cplus-dem.c - 602306638b ./libiberty/_doprnt.c 3785501494b ./libiberty/dyn-string.c 1492855576b ./libiberty/fdmatch.c 3977780801b ./libiberty/ffs.c --- 12319,12341 ---- 1033916047b ./libiberty/bsearch.c 2389959529b ./libiberty/bzero.c 1591293922b ./libiberty/calloc.c 2264262326b ./libiberty/choose-temp.c 2557767520b ./libiberty/clock.c 3170582338b ./libiberty/concat.c 1987387424b ./libiberty/config.h-vms ! 1577627668b ./libiberty/config.in ! 2543977175b ./libiberty/config.table 3500529335b ./libiberty/config/mh-aix 3476234501b ./libiberty/config/mh-cxux7 1235651640b ./libiberty/config/mh-fbsd21 2904567379b ./libiberty/config/mh-openedition 2131807358b ./libiberty/config/mh-windows ! 3746984747b ./libiberty/configure ! 346749622b ./libiberty/configure.in 2478885430b ./libiberty/copying-lib.texi 3329761531b ./libiberty/copysign.c 2848388650b ./libiberty/cp-demangle.c 2540319089b ./libiberty/cplus-dem.c 3785501494b ./libiberty/dyn-string.c 1492855576b ./libiberty/fdmatch.c 3977780801b ./libiberty/ffs.c *************** *** 12279,12289 **** 211982368b ./libiberty/floatformat.c 1510070689b ./libiberty/fnmatch.c 1078076716b ./libiberty/fnmatch.txh ! 1804042475b ./libiberty/functions.texi 3789905598b ./libiberty/gather-docs 2046253791b ./libiberty/getcwd.c - 2320609345b ./libiberty/getopt1.c 8121880b ./libiberty/getopt.c 3996466380b ./libiberty/getpagesize.c 2690816019b ./libiberty/getpwd.c 3452871343b ./libiberty/getruntime.c --- 12343,12353 ---- 211982368b ./libiberty/floatformat.c 1510070689b ./libiberty/fnmatch.c 1078076716b ./libiberty/fnmatch.txh ! 1365869446b ./libiberty/functions.texi 3789905598b ./libiberty/gather-docs 2046253791b ./libiberty/getcwd.c 8121880b ./libiberty/getopt.c + 2320609345b ./libiberty/getopt1.c 3996466380b ./libiberty/getpagesize.c 2690816019b ./libiberty/getpwd.c 3452871343b ./libiberty/getruntime.c *************** *** 12293,12303 **** 3255705408b ./libiberty/insque.c 1913216598b ./libiberty/lbasename.c 327045341b ./libiberty/libiberty.texi 3183084918b ./libiberty/maint-tool ! 2821047856b ./libiberty/Makefile.in ! 3226217883b ./libiberty/makefile.vms ! 2785210701b ./libiberty/make-relative-prefix.c 2495473509b ./libiberty/make-temp-file.c 2576148307b ./libiberty/md5.c 1640952211b ./libiberty/memchr.c 2120544197b ./libiberty/memcmp.c --- 12357,12367 ---- 3255705408b ./libiberty/insque.c 1913216598b ./libiberty/lbasename.c 327045341b ./libiberty/libiberty.texi + 1575624542b ./libiberty/lrealpath.c 3183084918b ./libiberty/maint-tool ! 1338266559b ./libiberty/make-relative-prefix.c 2495473509b ./libiberty/make-temp-file.c + 3226217883b ./libiberty/makefile.vms 2576148307b ./libiberty/md5.c 1640952211b ./libiberty/memchr.c 2120544197b ./libiberty/memcmp.c *************** *** 12305,12313 **** 1685999989b ./libiberty/memmove.c 781584880b ./libiberty/memset.c 1326635668b ./libiberty/mkstemps.c - 3930704547b ./libiberty/mpw.c 2010995764b ./libiberty/mpw-config.in 1580171809b ./libiberty/mpw-make.sed 2503648631b ./libiberty/msdos.c 196373918b ./libiberty/objalloc.c 317557207b ./libiberty/obstack.c --- 12369,12377 ---- 1685999989b ./libiberty/memmove.c 781584880b ./libiberty/memset.c 1326635668b ./libiberty/mkstemps.c 2010995764b ./libiberty/mpw-config.in 1580171809b ./libiberty/mpw-make.sed + 3930704547b ./libiberty/mpw.c 2503648631b ./libiberty/msdos.c 196373918b ./libiberty/objalloc.c 317557207b ./libiberty/obstack.c *************** *** 12317,12323 **** 2061110630b ./libiberty/physmem.c 3819346820b ./libiberty/putenv.c 4197438328b ./libiberty/random.c - 2709928858b ./libiberty/README 1551948166b ./libiberty/regex.c 1175910896b ./libiberty/rename.c 2903758838b ./libiberty/rindex.c --- 12381,12386 ---- *************** *** 12340,12347 **** 2287814393b ./libiberty/strtol.c 1828706574b ./libiberty/strtoul.c 3268886825b ./libiberty/ternary.c - 103243516b ./libiberty/testsuite/demangle-expected 4279220892b ./libiberty/testsuite/Makefile.in 1491869702b ./libiberty/testsuite/test-demangle.c 3862028978b ./libiberty/tmpnam.c 2419507931b ./libiberty/vasprintf.c --- 12403,12410 ---- 2287814393b ./libiberty/strtol.c 1828706574b ./libiberty/strtoul.c 3268886825b ./libiberty/ternary.c 4279220892b ./libiberty/testsuite/Makefile.in + 103243516b ./libiberty/testsuite/demangle-expected 1491869702b ./libiberty/testsuite/test-demangle.c 3862028978b ./libiberty/tmpnam.c 2419507931b ./libiberty/vasprintf.c *************** *** 12357,12390 **** 1302531664b ./libiberty/xmemdup.c 991611298b ./libiberty/xstrdup.c 387398324b ./libiberty/xstrerror.c 3884330632b ./libjava/acconfig.h 3589880985b ./libjava/acinclude.m4 3744134120b ./libjava/aclocal.m4 3784840223b ./libjava/addr2name.awk 1162779077b ./libjava/boehm.cc - 3199467562b ./libjava/ChangeLog - 3473562392b ./libjava/ChangeLog-1999 - 2385951174b ./libjava/ChangeLog-2001 4057856725b ./libjava/configure 1341552609b ./libjava/configure.host 3029277452b ./libjava/configure.in - 2171125041b ./libjava/COPYING 177999057b ./libjava/defineclass.cc 535801509b ./libjava/doc/cni.sgml 1183730379b ./libjava/exception.cc 3591403769b ./libjava/gcj/array.h 3965696277b ./libjava/gcj/cni.h - 724593360b ./libjava/gcj/.cvsignore 227606957b ./libjava/gcj/field.h 1482145418b ./libjava/gcj/javaprims.h 1775313853b ./libjava/gcj/libgcj-config.h.in - 1011701793b ./libjava/gcj/Makefile.am - 2471533732b ./libjava/gcj/Makefile.in 1073488355b ./libjava/gcj/method.h 2464224985b ./libjava/gij.cc 1596689297b ./libjava/gnu/awt/gtk/GtkButtonPeer.java - 922026864b ./libjava/gnu/awt/gtk/gtkcommon.cc - 3699017559b ./libjava/gnu/awt/gtk/gtkcommon.h 3410609778b ./libjava/gnu/awt/gtk/GtkComponentPeer.java 2912275709b ./libjava/gnu/awt/gtk/GtkContainerPeer.java 1877686985b ./libjava/gnu/awt/gtk/GtkFramePeer.java --- 12420,12459 ---- 1302531664b ./libiberty/xmemdup.c 991611298b ./libiberty/xstrdup.c 387398324b ./libiberty/xstrerror.c + 2171125041b ./libjava/COPYING + 3818304799b ./libjava/ChangeLog + 3473562392b ./libjava/ChangeLog-1999 + 2385951174b ./libjava/ChangeLog-2001 + 1487334009b ./libjava/HACKING + 1362543266b ./libjava/LIBGCJ_LICENSE + 2113750124b ./libjava/Makefile.am + 3087644291b ./libjava/Makefile.in + 4049677327b ./libjava/NEWS + 3199155412b ./libjava/README + 3410290178b ./libjava/THANKS 3884330632b ./libjava/acconfig.h 3589880985b ./libjava/acinclude.m4 3744134120b ./libjava/aclocal.m4 3784840223b ./libjava/addr2name.awk 1162779077b ./libjava/boehm.cc 4057856725b ./libjava/configure 1341552609b ./libjava/configure.host 3029277452b ./libjava/configure.in 177999057b ./libjava/defineclass.cc 535801509b ./libjava/doc/cni.sgml 1183730379b ./libjava/exception.cc + 724593360b ./libjava/gcj/.cvsignore + 1011701793b ./libjava/gcj/Makefile.am + 2471533732b ./libjava/gcj/Makefile.in 3591403769b ./libjava/gcj/array.h 3965696277b ./libjava/gcj/cni.h 227606957b ./libjava/gcj/field.h 1482145418b ./libjava/gcj/javaprims.h 1775313853b ./libjava/gcj/libgcj-config.h.in 1073488355b ./libjava/gcj/method.h 2464224985b ./libjava/gij.cc + 2535888045b ./libjava/gnu/awt/LightweightRedirector.java 1596689297b ./libjava/gnu/awt/gtk/GtkButtonPeer.java 3410609778b ./libjava/gnu/awt/gtk/GtkComponentPeer.java 2912275709b ./libjava/gnu/awt/gtk/GtkContainerPeer.java 1877686985b ./libjava/gnu/awt/gtk/GtkFramePeer.java *************** *** 12392,12397 **** --- 12461,12468 ---- 3368349978b ./libjava/gnu/awt/gtk/GtkMainThread.java 2212086115b ./libjava/gnu/awt/gtk/GtkToolkit.java 466557738b ./libjava/gnu/awt/gtk/GtkWindowPeer.java + 922026864b ./libjava/gnu/awt/gtk/gtkcommon.cc + 3699017559b ./libjava/gnu/awt/gtk/gtkcommon.h 3416961245b ./libjava/gnu/awt/gtk/natGtkButtonPeer.cc 2501282912b ./libjava/gnu/awt/gtk/natGtkComponentPeer.cc 861082488b ./libjava/gnu/awt/gtk/natGtkContainerPeer.cc *************** *** 12405,12462 **** 2239051370b ./libjava/gnu/awt/j2d/Graphics2DImpl.java 2433840214b ./libjava/gnu/awt/j2d/IntegerGraphicsState.java 823126662b ./libjava/gnu/awt/j2d/MappedRaster.java - 2535888045b ./libjava/gnu/awt/LightweightRedirector.java 4203439929b ./libjava/gnu/awt/xlib/XCanvasPeer.java 3055110597b ./libjava/gnu/awt/xlib/XEventLoop.java 2886723915b ./libjava/gnu/awt/xlib/XEventQueue.java 1386185884b ./libjava/gnu/awt/xlib/XFontMetrics.java 1240842045b ./libjava/gnu/awt/xlib/XFramePeer.java - 2099207950b ./libjava/gnu/awt/xlib/XGraphicsConfiguration.java 3343357972b ./libjava/gnu/awt/xlib/XGraphics.java 4211424512b ./libjava/gnu/awt/xlib/XPanelPeer.java 1597864113b ./libjava/gnu/awt/xlib/XToolkit.java 3229059960b ./libjava/gnu/classpath/Configuration.java.in 2926627917b ./libjava/gnu/gcj/convert/Blocks-3.txt 958965717b ./libjava/gnu/gcj/convert/BytesToUnicode.java 3687721297b ./libjava/gnu/gcj/convert/Convert.java ! 2990675168b ./libjava/gnu/gcj/convert/gen-from-JIS.c 624954174b ./libjava/gnu/gcj/convert/Input_8859_1.java 1230020474b ./libjava/gnu/gcj/convert/Input_ASCII.java 271098151b ./libjava/gnu/gcj/convert/Input_EUCJIS.java - 1595200171b ./libjava/gnu/gcj/convert/Input_iconv.java 2185755288b ./libjava/gnu/gcj/convert/Input_JavaSrc.java 2110225778b ./libjava/gnu/gcj/convert/Input_SJIS.java 1513325785b ./libjava/gnu/gcj/convert/Input_UTF8.java ! 1955248518b ./libjava/gnu/gcj/convert/IOConverter.java 3459137842b ./libjava/gnu/gcj/convert/JIS0201.h 2049723314b ./libjava/gnu/gcj/convert/JIS0208.h 4153637973b ./libjava/gnu/gcj/convert/JIS0208_to_Unicode.cc 1075531862b ./libjava/gnu/gcj/convert/JIS0212.h 2320550799b ./libjava/gnu/gcj/convert/JIS0212_to_Unicode.cc - 3112494990b ./libjava/gnu/gcj/convert/make-trie.c - 600212754b ./libjava/gnu/gcj/convert/natIconv.cc - 3409212961b ./libjava/gnu/gcj/convert/natInput_EUCJIS.cc - 2514359574b ./libjava/gnu/gcj/convert/natInput_SJIS.cc - 784829283b ./libjava/gnu/gcj/convert/natOutput_EUCJIS.cc - 4119160238b ./libjava/gnu/gcj/convert/natOutput_SJIS.cc 2034070368b ./libjava/gnu/gcj/convert/Output_8859_1.java 4217873292b ./libjava/gnu/gcj/convert/Output_ASCII.java 647648438b ./libjava/gnu/gcj/convert/Output_EUCJIS.java - 58644124b ./libjava/gnu/gcj/convert/Output_iconv.java 3127943909b ./libjava/gnu/gcj/convert/Output_JavaSrc.java 687228823b ./libjava/gnu/gcj/convert/Output_SJIS.java 3747138515b ./libjava/gnu/gcj/convert/Output_UTF8.java 2459634193b ./libjava/gnu/gcj/convert/UnicodeCharacterDatabase-3.0.0.html 2507096442b ./libjava/gnu/gcj/convert/UnicodeData-3.0.0.txt 2802909586b ./libjava/gnu/gcj/convert/UnicodeToBytes.java 2676798711b ./libjava/gnu/gcj/convert/Unicode_to_JIS.cc ! 2882288660b ./libjava/gnu/gcj/Core.java 3580885543b ./libjava/gnu/gcj/io/DefaultMimeTypes.java 1393439370b ./libjava/gnu/gcj/io/MimeTypes.java 1645841998b ./libjava/gnu/gcj/io/natSimpleSHSStream.cc 88411881b ./libjava/gnu/gcj/io/shs.cc 3951902308b ./libjava/gnu/gcj/io/shs.h - 595453629b ./libjava/gnu/gcj/io/SimpleSHSStream.java 19196032b ./libjava/gnu/gcj/natCore.cc 3355622759b ./libjava/gnu/gcj/protocol/core/Connection.java 1924151198b ./libjava/gnu/gcj/protocol/core/CoreInputStream.java --- 12476,12533 ---- 2239051370b ./libjava/gnu/awt/j2d/Graphics2DImpl.java 2433840214b ./libjava/gnu/awt/j2d/IntegerGraphicsState.java 823126662b ./libjava/gnu/awt/j2d/MappedRaster.java 4203439929b ./libjava/gnu/awt/xlib/XCanvasPeer.java 3055110597b ./libjava/gnu/awt/xlib/XEventLoop.java 2886723915b ./libjava/gnu/awt/xlib/XEventQueue.java 1386185884b ./libjava/gnu/awt/xlib/XFontMetrics.java 1240842045b ./libjava/gnu/awt/xlib/XFramePeer.java 3343357972b ./libjava/gnu/awt/xlib/XGraphics.java + 2099207950b ./libjava/gnu/awt/xlib/XGraphicsConfiguration.java 4211424512b ./libjava/gnu/awt/xlib/XPanelPeer.java 1597864113b ./libjava/gnu/awt/xlib/XToolkit.java 3229059960b ./libjava/gnu/classpath/Configuration.java.in + 2882288660b ./libjava/gnu/gcj/Core.java + 2282503099b ./libjava/gnu/gcj/RawData.java 2926627917b ./libjava/gnu/gcj/convert/Blocks-3.txt 958965717b ./libjava/gnu/gcj/convert/BytesToUnicode.java 3687721297b ./libjava/gnu/gcj/convert/Convert.java ! 1955248518b ./libjava/gnu/gcj/convert/IOConverter.java 624954174b ./libjava/gnu/gcj/convert/Input_8859_1.java 1230020474b ./libjava/gnu/gcj/convert/Input_ASCII.java 271098151b ./libjava/gnu/gcj/convert/Input_EUCJIS.java 2185755288b ./libjava/gnu/gcj/convert/Input_JavaSrc.java 2110225778b ./libjava/gnu/gcj/convert/Input_SJIS.java 1513325785b ./libjava/gnu/gcj/convert/Input_UTF8.java ! 1595200171b ./libjava/gnu/gcj/convert/Input_iconv.java 3459137842b ./libjava/gnu/gcj/convert/JIS0201.h 2049723314b ./libjava/gnu/gcj/convert/JIS0208.h 4153637973b ./libjava/gnu/gcj/convert/JIS0208_to_Unicode.cc 1075531862b ./libjava/gnu/gcj/convert/JIS0212.h 2320550799b ./libjava/gnu/gcj/convert/JIS0212_to_Unicode.cc 2034070368b ./libjava/gnu/gcj/convert/Output_8859_1.java 4217873292b ./libjava/gnu/gcj/convert/Output_ASCII.java 647648438b ./libjava/gnu/gcj/convert/Output_EUCJIS.java 3127943909b ./libjava/gnu/gcj/convert/Output_JavaSrc.java 687228823b ./libjava/gnu/gcj/convert/Output_SJIS.java 3747138515b ./libjava/gnu/gcj/convert/Output_UTF8.java + 58644124b ./libjava/gnu/gcj/convert/Output_iconv.java 2459634193b ./libjava/gnu/gcj/convert/UnicodeCharacterDatabase-3.0.0.html 2507096442b ./libjava/gnu/gcj/convert/UnicodeData-3.0.0.txt 2802909586b ./libjava/gnu/gcj/convert/UnicodeToBytes.java 2676798711b ./libjava/gnu/gcj/convert/Unicode_to_JIS.cc ! 2990675168b ./libjava/gnu/gcj/convert/gen-from-JIS.c ! 3112494990b ./libjava/gnu/gcj/convert/make-trie.c ! 600212754b ./libjava/gnu/gcj/convert/natIconv.cc ! 3409212961b ./libjava/gnu/gcj/convert/natInput_EUCJIS.cc ! 2514359574b ./libjava/gnu/gcj/convert/natInput_SJIS.cc ! 784829283b ./libjava/gnu/gcj/convert/natOutput_EUCJIS.cc ! 4119160238b ./libjava/gnu/gcj/convert/natOutput_SJIS.cc 3580885543b ./libjava/gnu/gcj/io/DefaultMimeTypes.java 1393439370b ./libjava/gnu/gcj/io/MimeTypes.java + 595453629b ./libjava/gnu/gcj/io/SimpleSHSStream.java 1645841998b ./libjava/gnu/gcj/io/natSimpleSHSStream.cc 88411881b ./libjava/gnu/gcj/io/shs.cc 3951902308b ./libjava/gnu/gcj/io/shs.h 19196032b ./libjava/gnu/gcj/natCore.cc 3355622759b ./libjava/gnu/gcj/protocol/core/Connection.java 1924151198b ./libjava/gnu/gcj/protocol/core/CoreInputStream.java *************** *** 12468,12480 **** 132815256b ./libjava/gnu/gcj/protocol/http/Handler.java 2968724550b ./libjava/gnu/gcj/protocol/jar/Connection.java 1743208466b ./libjava/gnu/gcj/protocol/jar/Handler.java - 2282503099b ./libjava/gnu/gcj/RawData.java 501773112b ./libjava/gnu/gcj/runtime/FileDeleter.java 1535802220b ./libjava/gnu/gcj/runtime/FinalizerThread.java 1186865625b ./libjava/gnu/gcj/runtime/FirstThread.java 4204305482b ./libjava/gnu/gcj/runtime/JNIWeakRef.java 404324331b ./libjava/gnu/gcj/runtime/MethodRef.java 1025270005b ./libjava/gnu/gcj/runtime/NameFinder.java 1025799273b ./libjava/gnu/gcj/runtime/natFinalizerThread.cc 1558736281b ./libjava/gnu/gcj/runtime/natFirstThread.cc 1348605213b ./libjava/gnu/gcj/runtime/natNameFinder.cc --- 12539,12554 ---- 132815256b ./libjava/gnu/gcj/protocol/http/Handler.java 2968724550b ./libjava/gnu/gcj/protocol/jar/Connection.java 1743208466b ./libjava/gnu/gcj/protocol/jar/Handler.java 501773112b ./libjava/gnu/gcj/runtime/FileDeleter.java 1535802220b ./libjava/gnu/gcj/runtime/FinalizerThread.java 1186865625b ./libjava/gnu/gcj/runtime/FirstThread.java 4204305482b ./libjava/gnu/gcj/runtime/JNIWeakRef.java 404324331b ./libjava/gnu/gcj/runtime/MethodRef.java 1025270005b ./libjava/gnu/gcj/runtime/NameFinder.java + 2982773058b ./libjava/gnu/gcj/runtime/SharedLibLoader.java + 800781577b ./libjava/gnu/gcj/runtime/StackTrace.java + 3369847265b ./libjava/gnu/gcj/runtime/StringBuffer.java + 1651542781b ./libjava/gnu/gcj/runtime/VMClassLoader.java 1025799273b ./libjava/gnu/gcj/runtime/natFinalizerThread.cc 1558736281b ./libjava/gnu/gcj/runtime/natFirstThread.cc 1348605213b ./libjava/gnu/gcj/runtime/natNameFinder.cc *************** *** 12482,12497 **** 4052355658b ./libjava/gnu/gcj/runtime/natStackTrace.cc 2150610459b ./libjava/gnu/gcj/runtime/natStringBuffer.cc 924636906b ./libjava/gnu/gcj/runtime/natVMClassLoader.cc - 2982773058b ./libjava/gnu/gcj/runtime/SharedLibLoader.java - 800781577b ./libjava/gnu/gcj/runtime/StackTrace.java - 3369847265b ./libjava/gnu/gcj/runtime/StringBuffer.java - 1651542781b ./libjava/gnu/gcj/runtime/VMClassLoader.java 66527498b ./libjava/gnu/gcj/xlib/Clip.java 2501208995b ./libjava/gnu/gcj/xlib/Colormap.java 4007691160b ./libjava/gnu/gcj/xlib/Display.java 334010163b ./libjava/gnu/gcj/xlib/Drawable.java 3794271918b ./libjava/gnu/gcj/xlib/Font.java 2076853606b ./libjava/gnu/gcj/xlib/GC.java 2721622585b ./libjava/gnu/gcj/xlib/natClip.cc 313845725b ./libjava/gnu/gcj/xlib/natColormap.cc 4037646551b ./libjava/gnu/gcj/xlib/natDisplay.cc --- 12556,12584 ---- 4052355658b ./libjava/gnu/gcj/runtime/natStackTrace.cc 2150610459b ./libjava/gnu/gcj/runtime/natStringBuffer.cc 924636906b ./libjava/gnu/gcj/runtime/natVMClassLoader.cc 66527498b ./libjava/gnu/gcj/xlib/Clip.java 2501208995b ./libjava/gnu/gcj/xlib/Colormap.java 4007691160b ./libjava/gnu/gcj/xlib/Display.java 334010163b ./libjava/gnu/gcj/xlib/Drawable.java 3794271918b ./libjava/gnu/gcj/xlib/Font.java 2076853606b ./libjava/gnu/gcj/xlib/GC.java + 3285825579b ./libjava/gnu/gcj/xlib/Pixmap.java + 3350074944b ./libjava/gnu/gcj/xlib/Screen.java + 442092378b ./libjava/gnu/gcj/xlib/Visual.java + 540355668b ./libjava/gnu/gcj/xlib/WMSizeHints.java + 2300472805b ./libjava/gnu/gcj/xlib/Window.java + 2703412405b ./libjava/gnu/gcj/xlib/WindowAttributes.java + 735616079b ./libjava/gnu/gcj/xlib/XAnyEvent.java + 2053093871b ./libjava/gnu/gcj/xlib/XButtonEvent.java + 1193490335b ./libjava/gnu/gcj/xlib/XColor.java + 3412915905b ./libjava/gnu/gcj/xlib/XConfigureEvent.java + 3680444774b ./libjava/gnu/gcj/xlib/XConnectException.java + 3758585380b ./libjava/gnu/gcj/xlib/XEvent.java + 2109559056b ./libjava/gnu/gcj/xlib/XException.java + 3813405109b ./libjava/gnu/gcj/xlib/XExposeEvent.java + 1394364288b ./libjava/gnu/gcj/xlib/XID.java + 2651203935b ./libjava/gnu/gcj/xlib/XImage.java + 623452528b ./libjava/gnu/gcj/xlib/XUnmapEvent.java 2721622585b ./libjava/gnu/gcj/xlib/natClip.cc 313845725b ./libjava/gnu/gcj/xlib/natColormap.cc 4037646551b ./libjava/gnu/gcj/xlib/natDisplay.cc *************** *** 12501,12509 **** 2441230090b ./libjava/gnu/gcj/xlib/natPixmap.cc 1112468906b ./libjava/gnu/gcj/xlib/natScreen.cc 3505240565b ./libjava/gnu/gcj/xlib/natVisual.cc - 49610297b ./libjava/gnu/gcj/xlib/natWindowAttributes.cc - 3715533436b ./libjava/gnu/gcj/xlib/natWindow.cc 2728656554b ./libjava/gnu/gcj/xlib/natWMSizeHints.cc 2928451851b ./libjava/gnu/gcj/xlib/natXAnyEvent.cc 1448210768b ./libjava/gnu/gcj/xlib/natXButtonEvent.cc 1690231537b ./libjava/gnu/gcj/xlib/natXColor.cc --- 12588,12596 ---- 2441230090b ./libjava/gnu/gcj/xlib/natPixmap.cc 1112468906b ./libjava/gnu/gcj/xlib/natScreen.cc 3505240565b ./libjava/gnu/gcj/xlib/natVisual.cc 2728656554b ./libjava/gnu/gcj/xlib/natWMSizeHints.cc + 3715533436b ./libjava/gnu/gcj/xlib/natWindow.cc + 49610297b ./libjava/gnu/gcj/xlib/natWindowAttributes.cc 2928451851b ./libjava/gnu/gcj/xlib/natXAnyEvent.cc 1448210768b ./libjava/gnu/gcj/xlib/natXButtonEvent.cc 1690231537b ./libjava/gnu/gcj/xlib/natXColor.cc *************** *** 12512,12534 **** 1109730421b ./libjava/gnu/gcj/xlib/natXExposeEvent.cc 2724939209b ./libjava/gnu/gcj/xlib/natXImage.cc 2947736072b ./libjava/gnu/gcj/xlib/natXUnmapEvent.cc - 3285825579b ./libjava/gnu/gcj/xlib/Pixmap.java - 3350074944b ./libjava/gnu/gcj/xlib/Screen.java - 442092378b ./libjava/gnu/gcj/xlib/Visual.java - 2703412405b ./libjava/gnu/gcj/xlib/WindowAttributes.java - 2300472805b ./libjava/gnu/gcj/xlib/Window.java - 540355668b ./libjava/gnu/gcj/xlib/WMSizeHints.java - 735616079b ./libjava/gnu/gcj/xlib/XAnyEvent.java - 2053093871b ./libjava/gnu/gcj/xlib/XButtonEvent.java - 1193490335b ./libjava/gnu/gcj/xlib/XColor.java - 3412915905b ./libjava/gnu/gcj/xlib/XConfigureEvent.java - 3680444774b ./libjava/gnu/gcj/xlib/XConnectException.java - 3758585380b ./libjava/gnu/gcj/xlib/XEvent.java - 2109559056b ./libjava/gnu/gcj/xlib/XException.java - 3813405109b ./libjava/gnu/gcj/xlib/XExposeEvent.java - 1394364288b ./libjava/gnu/gcj/xlib/XID.java - 2651203935b ./libjava/gnu/gcj/xlib/XImage.java - 623452528b ./libjava/gnu/gcj/xlib/XUnmapEvent.java 251988486b ./libjava/gnu/java/awt/BitMaskExtent.java 2959084409b ./libjava/gnu/java/awt/Buffers.java 3864124155b ./libjava/gnu/java/awt/ComponentDataBlitOp.java --- 12599,12604 ---- *************** *** 12537,12542 **** --- 12607,12615 ---- 1265528252b ./libjava/gnu/java/awt/image/ImageDecoder.java 793939877b ./libjava/gnu/java/awt/image/XBMDecoder.java 4175984299b ./libjava/gnu/java/beans/BeanInfoEmbryo.java + 1050980841b ./libjava/gnu/java/beans/EmptyBeanInfo.java + 4274204668b ./libjava/gnu/java/beans/ExplicitBeanInfo.java + 2859546207b ./libjava/gnu/java/beans/IntrospectionIncubator.java 1186439895b ./libjava/gnu/java/beans/editors/ColorEditor.java 1824068032b ./libjava/gnu/java/beans/editors/FontEditor.java 1141912550b ./libjava/gnu/java/beans/editors/NativeBooleanEditor.java *************** *** 12547,12556 **** 3649786395b ./libjava/gnu/java/beans/editors/NativeLongEditor.java 2388248931b ./libjava/gnu/java/beans/editors/NativeShortEditor.java 84373625b ./libjava/gnu/java/beans/editors/StringEditor.java - 1050980841b ./libjava/gnu/java/beans/EmptyBeanInfo.java - 4274204668b ./libjava/gnu/java/beans/ExplicitBeanInfo.java 3309737548b ./libjava/gnu/java/beans/info/ComponentBeanInfo.java - 2859546207b ./libjava/gnu/java/beans/IntrospectionIncubator.java 1517826185b ./libjava/gnu/java/io/ClassLoaderObjectInputStream.java 185400995b ./libjava/gnu/java/io/NullOutputStream.java 337775204b ./libjava/gnu/java/io/ObjectIdentityWrapper.java --- 12620,12626 ---- *************** *** 12558,12567 **** 1957385229b ./libjava/gnu/java/lang/CharData.java 1294839044b ./libjava/gnu/java/lang/ClassHelper.java 3244075397b ./libjava/gnu/java/lang/reflect/TypeSignature.java 3366025795b ./libjava/gnu/java/locale/Calendar_de.java 3838960820b ./libjava/gnu/java/locale/Calendar_en.java - 3367817123b ./libjava/gnu/java/locale/Calendar.java 2827383186b ./libjava/gnu/java/locale/Calendar_nl.java 853990452b ./libjava/gnu/java/locale/LocaleInformation_af_ZA.java 3574665519b ./libjava/gnu/java/locale/LocaleInformation_ar_AE.java 1313953526b ./libjava/gnu/java/locale/LocaleInformation_ar_BH.java --- 12628,12638 ---- 1957385229b ./libjava/gnu/java/lang/CharData.java 1294839044b ./libjava/gnu/java/lang/ClassHelper.java 3244075397b ./libjava/gnu/java/lang/reflect/TypeSignature.java + 3367817123b ./libjava/gnu/java/locale/Calendar.java 3366025795b ./libjava/gnu/java/locale/Calendar_de.java 3838960820b ./libjava/gnu/java/locale/Calendar_en.java 2827383186b ./libjava/gnu/java/locale/Calendar_nl.java + 88782889b ./libjava/gnu/java/locale/LocaleInformation.java 853990452b ./libjava/gnu/java/locale/LocaleInformation_af_ZA.java 3574665519b ./libjava/gnu/java/locale/LocaleInformation_ar_AE.java 1313953526b ./libjava/gnu/java/locale/LocaleInformation_ar_BH.java *************** *** 12588,12600 **** 3606272911b ./libjava/gnu/java/locale/LocaleInformation_cs_CZ.java 3029808974b ./libjava/gnu/java/locale/LocaleInformation_cy_GB.java 3138806717b ./libjava/gnu/java/locale/LocaleInformation_da_DK.java 660397810b ./libjava/gnu/java/locale/LocaleInformation_de_AT.java 2697869622b ./libjava/gnu/java/locale/LocaleInformation_de_BE.java 1184133602b ./libjava/gnu/java/locale/LocaleInformation_de_CH.java 2039543804b ./libjava/gnu/java/locale/LocaleInformation_de_DE.java - 1896252461b ./libjava/gnu/java/locale/LocaleInformation_de.java 1754963126b ./libjava/gnu/java/locale/LocaleInformation_de_LU.java 1950789713b ./libjava/gnu/java/locale/LocaleInformation_el_GR.java 3105733407b ./libjava/gnu/java/locale/LocaleInformation_en_AU.java 1645688637b ./libjava/gnu/java/locale/LocaleInformation_en_BW.java 1552823020b ./libjava/gnu/java/locale/LocaleInformation_en_CA.java --- 12659,12672 ---- 3606272911b ./libjava/gnu/java/locale/LocaleInformation_cs_CZ.java 3029808974b ./libjava/gnu/java/locale/LocaleInformation_cy_GB.java 3138806717b ./libjava/gnu/java/locale/LocaleInformation_da_DK.java + 1896252461b ./libjava/gnu/java/locale/LocaleInformation_de.java 660397810b ./libjava/gnu/java/locale/LocaleInformation_de_AT.java 2697869622b ./libjava/gnu/java/locale/LocaleInformation_de_BE.java 1184133602b ./libjava/gnu/java/locale/LocaleInformation_de_CH.java 2039543804b ./libjava/gnu/java/locale/LocaleInformation_de_DE.java 1754963126b ./libjava/gnu/java/locale/LocaleInformation_de_LU.java 1950789713b ./libjava/gnu/java/locale/LocaleInformation_el_GR.java + 1639156831b ./libjava/gnu/java/locale/LocaleInformation_en.java 3105733407b ./libjava/gnu/java/locale/LocaleInformation_en_AU.java 1645688637b ./libjava/gnu/java/locale/LocaleInformation_en_BW.java 1552823020b ./libjava/gnu/java/locale/LocaleInformation_en_CA.java *************** *** 12603,12609 **** 3654129156b ./libjava/gnu/java/locale/LocaleInformation_en_HK.java 1423793734b ./libjava/gnu/java/locale/LocaleInformation_en_IE.java 3034389835b ./libjava/gnu/java/locale/LocaleInformation_en_IN.java - 1639156831b ./libjava/gnu/java/locale/LocaleInformation_en.java 4146466217b ./libjava/gnu/java/locale/LocaleInformation_en_NZ.java 2700111700b ./libjava/gnu/java/locale/LocaleInformation_en_PH.java 1734741103b ./libjava/gnu/java/locale/LocaleInformation_en_SG.java --- 12675,12680 ---- *************** *** 12653,12659 **** 2288758679b ./libjava/gnu/java/locale/LocaleInformation_it_IT.java 1670529133b ./libjava/gnu/java/locale/LocaleInformation_iw_IL.java 4285275820b ./libjava/gnu/java/locale/LocaleInformation_ja_JP.java - 88782889b ./libjava/gnu/java/locale/LocaleInformation.java 305209674b ./libjava/gnu/java/locale/LocaleInformation_ka_GE.java 289636212b ./libjava/gnu/java/locale/LocaleInformation_kl_GL.java 3381743821b ./libjava/gnu/java/locale/LocaleInformation_ko_KR.java --- 12724,12729 ---- *************** *** 12664,12671 **** 1118828067b ./libjava/gnu/java/locale/LocaleInformation_mk_MK.java 3470919889b ./libjava/gnu/java/locale/LocaleInformation_mr_IN.java 3011395902b ./libjava/gnu/java/locale/LocaleInformation_mt_MT.java - 3941557872b ./libjava/gnu/java/locale/LocaleInformation_nl_BE.java 803932216b ./libjava/gnu/java/locale/LocaleInformation_nl.java 2192944115b ./libjava/gnu/java/locale/LocaleInformation_nl_NL.java 171051379b ./libjava/gnu/java/locale/LocaleInformation_nn_NO.java 1581832797b ./libjava/gnu/java/locale/LocaleInformation_no_NO.java --- 12734,12741 ---- 1118828067b ./libjava/gnu/java/locale/LocaleInformation_mk_MK.java 3470919889b ./libjava/gnu/java/locale/LocaleInformation_mr_IN.java 3011395902b ./libjava/gnu/java/locale/LocaleInformation_mt_MT.java 803932216b ./libjava/gnu/java/locale/LocaleInformation_nl.java + 3941557872b ./libjava/gnu/java/locale/LocaleInformation_nl_BE.java 2192944115b ./libjava/gnu/java/locale/LocaleInformation_nl_NL.java 171051379b ./libjava/gnu/java/locale/LocaleInformation_nn_NO.java 1581832797b ./libjava/gnu/java/locale/LocaleInformation_no_NO.java *************** *** 12700,12721 **** 3391912438b ./libjava/gnu/java/math/MPN.java 3250783603b ./libjava/gnu/java/nio/ByteBufferImpl.java 2568267781b ./libjava/gnu/java/nio/CharBufferImpl.java 3078772899b ./libjava/gnu/java/nio/charset/ISO_8859_1.java 2654453523b ./libjava/gnu/java/nio/charset/Provider.java 929666892b ./libjava/gnu/java/nio/charset/US_ASCII.java 504852002b ./libjava/gnu/java/nio/charset/UTF_16BE.java 3756135414b ./libjava/gnu/java/nio/charset/UTF_16Decoder.java 3988722461b ./libjava/gnu/java/nio/charset/UTF_16Encoder.java - 430102613b ./libjava/gnu/java/nio/charset/UTF_16.java 2147056701b ./libjava/gnu/java/nio/charset/UTF_16LE.java 1651590565b ./libjava/gnu/java/nio/charset/UTF_8.java - 312179626b ./libjava/gnu/java/nio/DatagramChannelImpl.java - 2627116050b ./libjava/gnu/java/nio/DoubleBufferImpl.java - 1158988190b ./libjava/gnu/java/nio/FileChannelImpl.java - 2141995272b ./libjava/gnu/java/nio/FileLockImpl.java - 4120013253b ./libjava/gnu/java/nio/FloatBufferImpl.java - 911937971b ./libjava/gnu/java/nio/IntBufferImpl.java - 3331021714b ./libjava/gnu/java/nio/LongBufferImpl.java 295164197b ./libjava/gnu/java/nio/natByteBufferImpl.cc 1293579223b ./libjava/gnu/java/nio/natCharBufferImpl.cc 429998168b ./libjava/gnu/java/nio/natDoubleBufferImpl.cc --- 12770,12798 ---- 3391912438b ./libjava/gnu/java/math/MPN.java 3250783603b ./libjava/gnu/java/nio/ByteBufferImpl.java 2568267781b ./libjava/gnu/java/nio/CharBufferImpl.java + 312179626b ./libjava/gnu/java/nio/DatagramChannelImpl.java + 2627116050b ./libjava/gnu/java/nio/DoubleBufferImpl.java + 1158988190b ./libjava/gnu/java/nio/FileChannelImpl.java + 2141995272b ./libjava/gnu/java/nio/FileLockImpl.java + 4120013253b ./libjava/gnu/java/nio/FloatBufferImpl.java + 911937971b ./libjava/gnu/java/nio/IntBufferImpl.java + 3331021714b ./libjava/gnu/java/nio/LongBufferImpl.java + 2966338573b ./libjava/gnu/java/nio/PipeImpl.java + 240090473b ./libjava/gnu/java/nio/SelectionKeyImpl.java + 3665820149b ./libjava/gnu/java/nio/SelectorImpl.java + 208835466b ./libjava/gnu/java/nio/SelectorProviderImpl.java + 423624715b ./libjava/gnu/java/nio/ServerSocketChannelImpl.java + 1613556027b ./libjava/gnu/java/nio/ShortBufferImpl.java + 1592622703b ./libjava/gnu/java/nio/SocketChannelImpl.java 3078772899b ./libjava/gnu/java/nio/charset/ISO_8859_1.java 2654453523b ./libjava/gnu/java/nio/charset/Provider.java 929666892b ./libjava/gnu/java/nio/charset/US_ASCII.java + 430102613b ./libjava/gnu/java/nio/charset/UTF_16.java 504852002b ./libjava/gnu/java/nio/charset/UTF_16BE.java 3756135414b ./libjava/gnu/java/nio/charset/UTF_16Decoder.java 3988722461b ./libjava/gnu/java/nio/charset/UTF_16Encoder.java 2147056701b ./libjava/gnu/java/nio/charset/UTF_16LE.java 1651590565b ./libjava/gnu/java/nio/charset/UTF_8.java 295164197b ./libjava/gnu/java/nio/natByteBufferImpl.cc 1293579223b ./libjava/gnu/java/nio/natCharBufferImpl.cc 429998168b ./libjava/gnu/java/nio/natDoubleBufferImpl.cc *************** *** 12726,12738 **** 1475746268b ./libjava/gnu/java/nio/natSelectorImpl.cc 3260148530b ./libjava/gnu/java/nio/natShortBufferImpl.cc 2806870622b ./libjava/gnu/java/nio/natSocketChannelImpl.cc ! 2966338573b ./libjava/gnu/java/nio/PipeImpl.java ! 240090473b ./libjava/gnu/java/nio/SelectionKeyImpl.java ! 3665820149b ./libjava/gnu/java/nio/SelectorImpl.java ! 208835466b ./libjava/gnu/java/nio/SelectorProviderImpl.java ! 423624715b ./libjava/gnu/java/nio/ServerSocketChannelImpl.java ! 1613556027b ./libjava/gnu/java/nio/ShortBufferImpl.java ! 1592622703b ./libjava/gnu/java/nio/SocketChannelImpl.java 2623356584b ./libjava/gnu/java/rmi/dgc/DGCImpl.java 4219884184b ./libjava/gnu/java/rmi/dgc/DGCImpl_Skel.java 2240902530b ./libjava/gnu/java/rmi/dgc/DGCImpl_Stub.java --- 12803,12810 ---- 1475746268b ./libjava/gnu/java/nio/natSelectorImpl.cc 3260148530b ./libjava/gnu/java/nio/natShortBufferImpl.cc 2806870622b ./libjava/gnu/java/nio/natSocketChannelImpl.cc ! 3592805147b ./libjava/gnu/java/rmi/RMIMarshalledObjectInputStream.java ! 2643930283b ./libjava/gnu/java/rmi/RMIMarshalledObjectOutputStream.java 2623356584b ./libjava/gnu/java/rmi/dgc/DGCImpl.java 4219884184b ./libjava/gnu/java/rmi/dgc/DGCImpl_Skel.java 2240902530b ./libjava/gnu/java/rmi/dgc/DGCImpl_Stub.java *************** *** 12744,12751 **** 2850269889b ./libjava/gnu/java/rmi/rmic/CompilerProcess.java 4019537723b ./libjava/gnu/java/rmi/rmic/RMIC.java 634294081b ./libjava/gnu/java/rmi/rmic/TabbedWriter.java - 3592805147b ./libjava/gnu/java/rmi/RMIMarshalledObjectInputStream.java - 2643930283b ./libjava/gnu/java/rmi/RMIMarshalledObjectOutputStream.java 552490553b ./libjava/gnu/java/rmi/server/ConnectionRunnerPool.java 2494884681b ./libjava/gnu/java/rmi/server/ProtocolConstants.java 1676680003b ./libjava/gnu/java/rmi/server/RMIDefaultSocketFactory.java --- 12816,12821 ---- *************** *** 12760,12778 **** 3883234073b ./libjava/gnu/java/rmi/server/UnicastServer.java 1118567737b ./libjava/gnu/java/rmi/server/UnicastServerRef.java 3239632654b ./libjava/gnu/java/security/der/DEREncodingException.java - 2256345182b ./libjava/gnu/java/security/provider/DefaultPolicy.java 1820482079b ./libjava/gnu/java/security/provider/DERReader.java 2704871023b ./libjava/gnu/java/security/provider/DERWriter.java 3261508967b ./libjava/gnu/java/security/provider/DSAKeyPairGenerator.java 1519893159b ./libjava/gnu/java/security/provider/DSAParameterGenerator.java 1477530236b ./libjava/gnu/java/security/provider/DSAParameters.java 3260407392b ./libjava/gnu/java/security/provider/DSASignature.java 2068913615b ./libjava/gnu/java/security/provider/GnuDSAPrivateKey.java 1235159706b ./libjava/gnu/java/security/provider/GnuDSAPublicKey.java - 3623080517b ./libjava/gnu/java/security/provider/Gnu.java 2149484977b ./libjava/gnu/java/security/provider/MD5.java - 3696070442b ./libjava/gnu/java/security/provider/SHA1PRNG.java 1099987683b ./libjava/gnu/java/security/provider/SHA.java 1539127399b ./libjava/gnu/java/security/util/Prime.java 1289725769b ./libjava/gnu/java/text/BaseBreakIterator.java 3390709828b ./libjava/gnu/java/text/CharacterBreakIterator.java --- 12830,12848 ---- 3883234073b ./libjava/gnu/java/rmi/server/UnicastServer.java 1118567737b ./libjava/gnu/java/rmi/server/UnicastServerRef.java 3239632654b ./libjava/gnu/java/security/der/DEREncodingException.java 1820482079b ./libjava/gnu/java/security/provider/DERReader.java 2704871023b ./libjava/gnu/java/security/provider/DERWriter.java 3261508967b ./libjava/gnu/java/security/provider/DSAKeyPairGenerator.java 1519893159b ./libjava/gnu/java/security/provider/DSAParameterGenerator.java 1477530236b ./libjava/gnu/java/security/provider/DSAParameters.java 3260407392b ./libjava/gnu/java/security/provider/DSASignature.java + 2256345182b ./libjava/gnu/java/security/provider/DefaultPolicy.java + 3623080517b ./libjava/gnu/java/security/provider/Gnu.java 2068913615b ./libjava/gnu/java/security/provider/GnuDSAPrivateKey.java 1235159706b ./libjava/gnu/java/security/provider/GnuDSAPublicKey.java 2149484977b ./libjava/gnu/java/security/provider/MD5.java 1099987683b ./libjava/gnu/java/security/provider/SHA.java + 3696070442b ./libjava/gnu/java/security/provider/SHA1PRNG.java 1539127399b ./libjava/gnu/java/security/util/Prime.java 1289725769b ./libjava/gnu/java/text/BaseBreakIterator.java 3390709828b ./libjava/gnu/java/text/CharacterBreakIterator.java *************** *** 12781,12790 **** 1103805396b ./libjava/gnu/java/text/WordBreakIterator.java 3820369931b ./libjava/gnu/java/util/DoubleEnumeration.java 840138884b ./libjava/gnu/java/util/EmptyEnumeration.java ! 1487334009b ./libjava/HACKING 264180982b ./libjava/include/boehm-gc.h 2817074558b ./libjava/include/config.h.in - 1821380608b ./libjava/include/.cvsignore 1108817619b ./libjava/include/default-signal.h 833024369b ./libjava/include/dwarf2-signal.h 1608416031b ./libjava/include/i386-signal.h --- 12851,12861 ---- 1103805396b ./libjava/gnu/java/text/WordBreakIterator.java 3820369931b ./libjava/gnu/java/util/DoubleEnumeration.java 840138884b ./libjava/gnu/java/util/EmptyEnumeration.java ! 1821380608b ./libjava/include/.cvsignore ! 2049405362b ./libjava/include/Makefile.am ! 2932752241b ./libjava/include/Makefile.in 264180982b ./libjava/include/boehm-gc.h 2817074558b ./libjava/include/config.h.in 1108817619b ./libjava/include/default-signal.h 833024369b ./libjava/include/dwarf2-signal.h 1608416031b ./libjava/include/i386-signal.h *************** *** 12798,12858 **** 2032951804b ./libjava/include/jni.h 1476617536b ./libjava/include/jvm.h 1398877611b ./libjava/include/jvmpi.h - 2049405362b ./libjava/include/Makefile.am - 2932752241b ./libjava/include/Makefile.in 528567171b ./libjava/include/no-gc.h 2243083888b ./libjava/include/no-threads.h - 475052500b ./libjava/include/posix.h 310794441b ./libjava/include/posix-threads.h 2170050975b ./libjava/include/powerpc-signal.h 1401115806b ./libjava/include/s390-signal.h 1012702888b ./libjava/include/sparc-signal.h 216805921b ./libjava/include/stamp-h.in - 976722849b ./libjava/include/win32.h 2649356437b ./libjava/include/win32-signal.h 1995256761b ./libjava/include/win32-threads.h 3335842009b ./libjava/include/x86_64-signal.h 3764720684b ./libjava/interpret.cc - 3506533125b ./libjava/java/applet/AppletContext.java 3229086933b ./libjava/java/applet/Applet.java 1680765461b ./libjava/java/applet/AppletStub.java 2170436367b ./libjava/java/applet/AudioClip.java - 613872008b ./libjava/java/awt/ActiveEvent.java - 4143391530b ./libjava/java/awt/Adjustable.java - 94453016b ./libjava/java/awt/AlphaComposite.java - 3526011036b ./libjava/java/awt/AttributeValue.java 3578239573b ./libjava/java/awt/AWTError.java 2387560357b ./libjava/java/awt/AWTEvent.java 469159342b ./libjava/java/awt/AWTEventMulticaster.java 705651278b ./libjava/java/awt/AWTException.java 3976492360b ./libjava/java/awt/AWTKeyStroke.java 4037429003b ./libjava/java/awt/AWTPermission.java 3781709551b ./libjava/java/awt/BasicStroke.java 4000225361b ./libjava/java/awt/BorderLayout.java 3580056686b ./libjava/java/awt/BufferCapabilities.java 155576881b ./libjava/java/awt/Button.java 3153758342b ./libjava/java/awt/Canvas.java 4223116111b ./libjava/java/awt/CardLayout.java - 2084690368b ./libjava/java/awt/CheckboxGroup.java 238715688b ./libjava/java/awt/Checkbox.java 3055035423b ./libjava/java/awt/CheckboxMenuItem.java 1052527485b ./libjava/java/awt/Choice.java - 498416266b ./libjava/java/awt/color/CMMException.java - 960806366b ./libjava/java/awt/color/ColorSpace.java - 1800874819b ./libjava/java/awt/color/ICC_ColorSpace.java - 3509399304b ./libjava/java/awt/color/ICC_ProfileGray.java - 2233522723b ./libjava/java/awt/color/ICC_Profile.java - 2874732289b ./libjava/java/awt/color/ICC_ProfileRGB.java 2782110294b ./libjava/java/awt/Color.java 3567698033b ./libjava/java/awt/ColorPaintContext.java - 4033383559b ./libjava/java/awt/color/ProfileDataException.java 2912911681b ./libjava/java/awt/Component.java 1717065250b ./libjava/java/awt/ComponentOrientation.java - 320873769b ./libjava/java/awt/CompositeContext.java 2831300442b ./libjava/java/awt/Composite.java 724065501b ./libjava/java/awt/Container.java 1338315312b ./libjava/java/awt/ContainerOrderFocusTraversalPolicy.java 2451822490b ./libjava/java/awt/Cursor.java 3033779709b ./libjava/java/awt/datatransfer/Clipboard.java 4070519256b ./libjava/java/awt/datatransfer/ClipboardOwner.java 2891944126b ./libjava/java/awt/datatransfer/DataFlavor.java --- 12869,12998 ---- 2032951804b ./libjava/include/jni.h 1476617536b ./libjava/include/jvm.h 1398877611b ./libjava/include/jvmpi.h 528567171b ./libjava/include/no-gc.h 2243083888b ./libjava/include/no-threads.h 310794441b ./libjava/include/posix-threads.h + 475052500b ./libjava/include/posix.h 2170050975b ./libjava/include/powerpc-signal.h 1401115806b ./libjava/include/s390-signal.h 1012702888b ./libjava/include/sparc-signal.h 216805921b ./libjava/include/stamp-h.in 2649356437b ./libjava/include/win32-signal.h 1995256761b ./libjava/include/win32-threads.h + 976722849b ./libjava/include/win32.h 3335842009b ./libjava/include/x86_64-signal.h 3764720684b ./libjava/interpret.cc 3229086933b ./libjava/java/applet/Applet.java + 3506533125b ./libjava/java/applet/AppletContext.java 1680765461b ./libjava/java/applet/AppletStub.java 2170436367b ./libjava/java/applet/AudioClip.java 3578239573b ./libjava/java/awt/AWTError.java 2387560357b ./libjava/java/awt/AWTEvent.java 469159342b ./libjava/java/awt/AWTEventMulticaster.java 705651278b ./libjava/java/awt/AWTException.java 3976492360b ./libjava/java/awt/AWTKeyStroke.java 4037429003b ./libjava/java/awt/AWTPermission.java + 613872008b ./libjava/java/awt/ActiveEvent.java + 4143391530b ./libjava/java/awt/Adjustable.java + 94453016b ./libjava/java/awt/AlphaComposite.java + 3526011036b ./libjava/java/awt/AttributeValue.java 3781709551b ./libjava/java/awt/BasicStroke.java 4000225361b ./libjava/java/awt/BorderLayout.java 3580056686b ./libjava/java/awt/BufferCapabilities.java 155576881b ./libjava/java/awt/Button.java 3153758342b ./libjava/java/awt/Canvas.java 4223116111b ./libjava/java/awt/CardLayout.java 238715688b ./libjava/java/awt/Checkbox.java + 2084690368b ./libjava/java/awt/CheckboxGroup.java 3055035423b ./libjava/java/awt/CheckboxMenuItem.java 1052527485b ./libjava/java/awt/Choice.java 2782110294b ./libjava/java/awt/Color.java 3567698033b ./libjava/java/awt/ColorPaintContext.java 2912911681b ./libjava/java/awt/Component.java 1717065250b ./libjava/java/awt/ComponentOrientation.java 2831300442b ./libjava/java/awt/Composite.java + 320873769b ./libjava/java/awt/CompositeContext.java 724065501b ./libjava/java/awt/Container.java 1338315312b ./libjava/java/awt/ContainerOrderFocusTraversalPolicy.java 2451822490b ./libjava/java/awt/Cursor.java + 1469774519b ./libjava/java/awt/DefaultFocusTraversalPolicy.java + 2509273387b ./libjava/java/awt/DefaultKeyboardFocusManager.java + 3031261269b ./libjava/java/awt/Dialog.java + 3428005045b ./libjava/java/awt/Dimension.java + 2168140043b ./libjava/java/awt/DisplayMode.java + 3029266233b ./libjava/java/awt/Event.java + 483492170b ./libjava/java/awt/EventDispatchThread.java + 258490417b ./libjava/java/awt/EventQueue.java + 803293815b ./libjava/java/awt/FileDialog.java + 3460513004b ./libjava/java/awt/FlowLayout.java + 2093793136b ./libjava/java/awt/FocusTraversalPolicy.java + 218799448b ./libjava/java/awt/Font.java + 2988174516b ./libjava/java/awt/FontFormatException.java + 484873117b ./libjava/java/awt/FontMetrics.java + 557579533b ./libjava/java/awt/Frame.java + 593542459b ./libjava/java/awt/GradientPaint.java + 2012998318b ./libjava/java/awt/Graphics.java + 1169548611b ./libjava/java/awt/Graphics2D.java + 580882191b ./libjava/java/awt/GraphicsConfigTemplate.java + 3351412922b ./libjava/java/awt/GraphicsConfiguration.java + 3538996993b ./libjava/java/awt/GraphicsDevice.java + 3023278509b ./libjava/java/awt/GraphicsEnvironment.java + 3926197676b ./libjava/java/awt/GridBagConstraints.java + 1018877862b ./libjava/java/awt/GridBagLayout.java + 43546062b ./libjava/java/awt/GridLayout.java + 344540931b ./libjava/java/awt/HeadlessException.java + 3789228907b ./libjava/java/awt/IllegalComponentStateException.java + 2718926858b ./libjava/java/awt/Image.java + 2493337469b ./libjava/java/awt/ImageCapabilities.java + 2855255637b ./libjava/java/awt/Insets.java + 2919804909b ./libjava/java/awt/ItemSelectable.java + 3548735145b ./libjava/java/awt/JobAttributes.java + 498257517b ./libjava/java/awt/KeyEventDispatcher.java + 2266678890b ./libjava/java/awt/KeyEventPostProcessor.java + 2148109134b ./libjava/java/awt/KeyboardFocusManager.java + 3064848655b ./libjava/java/awt/Label.java + 939373230b ./libjava/java/awt/LayoutManager.java + 2267522997b ./libjava/java/awt/LayoutManager2.java + 685065105b ./libjava/java/awt/List.java + 4032096533b ./libjava/java/awt/MediaTracker.java + 2782059501b ./libjava/java/awt/Menu.java + 1493315237b ./libjava/java/awt/MenuBar.java + 2897941301b ./libjava/java/awt/MenuComponent.java + 2778668375b ./libjava/java/awt/MenuContainer.java + 864519593b ./libjava/java/awt/MenuItem.java + 2408918380b ./libjava/java/awt/MenuShortcut.java + 1435803511b ./libjava/java/awt/PageAttributes.java + 1356355652b ./libjava/java/awt/Paint.java + 3456029234b ./libjava/java/awt/PaintContext.java + 667414534b ./libjava/java/awt/Panel.java + 1667509381b ./libjava/java/awt/Point.java + 1337742529b ./libjava/java/awt/Polygon.java + 1012523291b ./libjava/java/awt/PopupMenu.java + 2575252233b ./libjava/java/awt/PrintGraphics.java + 1045531247b ./libjava/java/awt/PrintJob.java + 3867925269b ./libjava/java/awt/Rectangle.java + 3068597129b ./libjava/java/awt/RenderingHints.java + 2145818565b ./libjava/java/awt/Robot.java + 1265557509b ./libjava/java/awt/ScrollPane.java + 2144642110b ./libjava/java/awt/ScrollPaneAdjustable.java + 1655268610b ./libjava/java/awt/Scrollbar.java + 1622161060b ./libjava/java/awt/Shape.java + 2113160201b ./libjava/java/awt/Stroke.java + 2393232210b ./libjava/java/awt/SystemColor.java + 1409075397b ./libjava/java/awt/TextArea.java + 1189512898b ./libjava/java/awt/TextComponent.java + 2808733748b ./libjava/java/awt/TextField.java + 2679622818b ./libjava/java/awt/TexturePaint.java + 2797418683b ./libjava/java/awt/Toolkit.java + 3811432567b ./libjava/java/awt/Transparency.java + 3101170851b ./libjava/java/awt/Window.java + 498416266b ./libjava/java/awt/color/CMMException.java + 960806366b ./libjava/java/awt/color/ColorSpace.java + 1800874819b ./libjava/java/awt/color/ICC_ColorSpace.java + 2233522723b ./libjava/java/awt/color/ICC_Profile.java + 3509399304b ./libjava/java/awt/color/ICC_ProfileGray.java + 2874732289b ./libjava/java/awt/color/ICC_ProfileRGB.java + 4033383559b ./libjava/java/awt/color/ProfileDataException.java 3033779709b ./libjava/java/awt/datatransfer/Clipboard.java 4070519256b ./libjava/java/awt/datatransfer/ClipboardOwner.java 2891944126b ./libjava/java/awt/datatransfer/DataFlavor.java *************** *** 12863,12910 **** 1445228003b ./libjava/java/awt/datatransfer/SystemFlavorMap.java 1010717000b ./libjava/java/awt/datatransfer/Transferable.java 726417761b ./libjava/java/awt/datatransfer/UnsupportedFlavorException.java - 1469774519b ./libjava/java/awt/DefaultFocusTraversalPolicy.java - 2509273387b ./libjava/java/awt/DefaultKeyboardFocusManager.java - 3031261269b ./libjava/java/awt/Dialog.java - 3428005045b ./libjava/java/awt/Dimension.java - 2168140043b ./libjava/java/awt/DisplayMode.java 1025187418b ./libjava/java/awt/dnd/Autoscroll.java 2447971049b ./libjava/java/awt/dnd/DnDConstants.java 1102087244b ./libjava/java/awt/dnd/DragGestureEvent.java 2802041397b ./libjava/java/awt/dnd/DragGestureListener.java 3114129124b ./libjava/java/awt/dnd/DragGestureRecognizer.java 1356984825b ./libjava/java/awt/dnd/DragSourceAdapter.java 2128505939b ./libjava/java/awt/dnd/DragSourceContext.java 1488746875b ./libjava/java/awt/dnd/DragSourceDragEvent.java 4043246495b ./libjava/java/awt/dnd/DragSourceDropEvent.java 238443577b ./libjava/java/awt/dnd/DragSourceEvent.java - 1629612264b ./libjava/java/awt/dnd/DragSource.java 3292001816b ./libjava/java/awt/dnd/DragSourceListener.java 2429919247b ./libjava/java/awt/dnd/DragSourceMotionListener.java 2038089415b ./libjava/java/awt/dnd/DropTargetAdapter.java 3247445554b ./libjava/java/awt/dnd/DropTargetContext.java 3629879512b ./libjava/java/awt/dnd/DropTargetDragEvent.java 2203760588b ./libjava/java/awt/dnd/DropTargetDropEvent.java 3671737304b ./libjava/java/awt/dnd/DropTargetEvent.java - 4147823551b ./libjava/java/awt/dnd/DropTarget.java 2764609457b ./libjava/java/awt/dnd/DropTargetListener.java 2705594945b ./libjava/java/awt/dnd/InvalidDnDOperationException.java 2612483306b ./libjava/java/awt/dnd/MouseDragGestureRecognizer.java 2157009526b ./libjava/java/awt/dnd/peer/DragSourceContextPeer.java 4093241194b ./libjava/java/awt/dnd/peer/DropTargetContextPeer.java 591080406b ./libjava/java/awt/event/ActionEvent.java 3032932106b ./libjava/java/awt/event/ActionListener.java 1658245186b ./libjava/java/awt/event/AdjustmentEvent.java 1126909547b ./libjava/java/awt/event/AdjustmentListener.java - 4256422651b ./libjava/java/awt/event/AWTEventListener.java - 1218974938b ./libjava/java/awt/event/AWTEventListenerProxy.java 742593982b ./libjava/java/awt/event/ComponentAdapter.java 3070654304b ./libjava/java/awt/event/ComponentEvent.java 1350036484b ./libjava/java/awt/event/ComponentListener.java 3046890041b ./libjava/java/awt/event/ContainerAdapter.java 1368633287b ./libjava/java/awt/event/ContainerEvent.java 3847122394b ./libjava/java/awt/event/ContainerListener.java - 483492170b ./libjava/java/awt/EventDispatchThread.java 2001594214b ./libjava/java/awt/event/FocusAdapter.java 1740308265b ./libjava/java/awt/event/FocusEvent.java 71612696b ./libjava/java/awt/event/FocusListener.java --- 13003,13044 ---- 1445228003b ./libjava/java/awt/datatransfer/SystemFlavorMap.java 1010717000b ./libjava/java/awt/datatransfer/Transferable.java 726417761b ./libjava/java/awt/datatransfer/UnsupportedFlavorException.java 1025187418b ./libjava/java/awt/dnd/Autoscroll.java 2447971049b ./libjava/java/awt/dnd/DnDConstants.java 1102087244b ./libjava/java/awt/dnd/DragGestureEvent.java 2802041397b ./libjava/java/awt/dnd/DragGestureListener.java 3114129124b ./libjava/java/awt/dnd/DragGestureRecognizer.java + 1629612264b ./libjava/java/awt/dnd/DragSource.java 1356984825b ./libjava/java/awt/dnd/DragSourceAdapter.java 2128505939b ./libjava/java/awt/dnd/DragSourceContext.java 1488746875b ./libjava/java/awt/dnd/DragSourceDragEvent.java 4043246495b ./libjava/java/awt/dnd/DragSourceDropEvent.java 238443577b ./libjava/java/awt/dnd/DragSourceEvent.java 3292001816b ./libjava/java/awt/dnd/DragSourceListener.java 2429919247b ./libjava/java/awt/dnd/DragSourceMotionListener.java + 4147823551b ./libjava/java/awt/dnd/DropTarget.java 2038089415b ./libjava/java/awt/dnd/DropTargetAdapter.java 3247445554b ./libjava/java/awt/dnd/DropTargetContext.java 3629879512b ./libjava/java/awt/dnd/DropTargetDragEvent.java 2203760588b ./libjava/java/awt/dnd/DropTargetDropEvent.java 3671737304b ./libjava/java/awt/dnd/DropTargetEvent.java 2764609457b ./libjava/java/awt/dnd/DropTargetListener.java 2705594945b ./libjava/java/awt/dnd/InvalidDnDOperationException.java 2612483306b ./libjava/java/awt/dnd/MouseDragGestureRecognizer.java 2157009526b ./libjava/java/awt/dnd/peer/DragSourceContextPeer.java 4093241194b ./libjava/java/awt/dnd/peer/DropTargetContextPeer.java + 4256422651b ./libjava/java/awt/event/AWTEventListener.java + 1218974938b ./libjava/java/awt/event/AWTEventListenerProxy.java 591080406b ./libjava/java/awt/event/ActionEvent.java 3032932106b ./libjava/java/awt/event/ActionListener.java 1658245186b ./libjava/java/awt/event/AdjustmentEvent.java 1126909547b ./libjava/java/awt/event/AdjustmentListener.java 742593982b ./libjava/java/awt/event/ComponentAdapter.java 3070654304b ./libjava/java/awt/event/ComponentEvent.java 1350036484b ./libjava/java/awt/event/ComponentListener.java 3046890041b ./libjava/java/awt/event/ContainerAdapter.java 1368633287b ./libjava/java/awt/event/ContainerEvent.java 3847122394b ./libjava/java/awt/event/ContainerListener.java 2001594214b ./libjava/java/awt/event/FocusAdapter.java 1740308265b ./libjava/java/awt/event/FocusEvent.java 71612696b ./libjava/java/awt/event/FocusListener.java *************** *** 12918,12924 **** 1285585304b ./libjava/java/awt/event/InvocationEvent.java 3488278756b ./libjava/java/awt/event/ItemEvent.java 1488812576b ./libjava/java/awt/event/ItemListener.java - 3029266233b ./libjava/java/awt/Event.java 1065108034b ./libjava/java/awt/event/KeyAdapter.java 1381841346b ./libjava/java/awt/event/KeyEvent.java 2529341460b ./libjava/java/awt/event/KeyListener.java --- 13052,13057 ---- *************** *** 12930,12936 **** 3800295855b ./libjava/java/awt/event/MouseWheelEvent.java 2429115855b ./libjava/java/awt/event/MouseWheelListener.java 2777618879b ./libjava/java/awt/event/PaintEvent.java - 258490417b ./libjava/java/awt/EventQueue.java 1736791458b ./libjava/java/awt/event/TextEvent.java 1113873283b ./libjava/java/awt/event/TextListener.java 3149748542b ./libjava/java/awt/event/WindowAdapter.java --- 13063,13068 ---- *************** *** 12938,12951 **** 499567421b ./libjava/java/awt/event/WindowFocusListener.java 178882217b ./libjava/java/awt/event/WindowListener.java 2054241804b ./libjava/java/awt/event/WindowStateListener.java - 803293815b ./libjava/java/awt/FileDialog.java - 3460513004b ./libjava/java/awt/FlowLayout.java - 2093793136b ./libjava/java/awt/FocusTraversalPolicy.java - 2988174516b ./libjava/java/awt/FontFormatException.java - 218799448b ./libjava/java/awt/Font.java - 484873117b ./libjava/java/awt/FontMetrics.java 797362298b ./libjava/java/awt/font/TextHitInfo.java - 557579533b ./libjava/java/awt/Frame.java 3687585830b ./libjava/java/awt/geom/AffineTransform.java 29333179b ./libjava/java/awt/geom/Arc2D.java 117138830b ./libjava/java/awt/geom/Area.java --- 13070,13076 ---- *************** *** 12963,12992 **** 3423320809b ./libjava/java/awt/geom/Rectangle2D.java 3367968605b ./libjava/java/awt/geom/RectangularShape.java 3819292914b ./libjava/java/awt/geom/RoundRectangle2D.java ! 593542459b ./libjava/java/awt/GradientPaint.java ! 1169548611b ./libjava/java/awt/Graphics2D.java ! 580882191b ./libjava/java/awt/GraphicsConfigTemplate.java ! 3351412922b ./libjava/java/awt/GraphicsConfiguration.java ! 3538996993b ./libjava/java/awt/GraphicsDevice.java ! 3023278509b ./libjava/java/awt/GraphicsEnvironment.java ! 2012998318b ./libjava/java/awt/Graphics.java ! 3926197676b ./libjava/java/awt/GridBagConstraints.java ! 1018877862b ./libjava/java/awt/GridBagLayout.java ! 43546062b ./libjava/java/awt/GridLayout.java ! 344540931b ./libjava/java/awt/HeadlessException.java ! 3789228907b ./libjava/java/awt/IllegalComponentStateException.java 2039150620b ./libjava/java/awt/image/AreaAveragingScaleFilter.java 47278745b ./libjava/java/awt/image/BufferedImage.java 2036451294b ./libjava/java/awt/image/BufferedImageOp.java - 27995175b ./libjava/java/awt/image/BufferStrategy.java - 2493337469b ./libjava/java/awt/ImageCapabilities.java 1269423221b ./libjava/java/awt/image/ColorModel.java 109440071b ./libjava/java/awt/image/ComponentColorModel.java 1906201349b ./libjava/java/awt/image/ComponentSampleModel.java 3384911687b ./libjava/java/awt/image/CropImageFilter.java 3465530846b ./libjava/java/awt/image/DataBufferByte.java 4075525464b ./libjava/java/awt/image/DataBufferInt.java - 634855604b ./libjava/java/awt/image/DataBuffer.java 3095543468b ./libjava/java/awt/image/DataBufferUShort.java 1806419668b ./libjava/java/awt/image/DirectColorModel.java 3631042426b ./libjava/java/awt/image/FilteredImageSource.java --- 13088,13111 ---- 3423320809b ./libjava/java/awt/geom/Rectangle2D.java 3367968605b ./libjava/java/awt/geom/RectangularShape.java 3819292914b ./libjava/java/awt/geom/RoundRectangle2D.java ! 3017975380b ./libjava/java/awt/im/InputContext.java ! 3459586354b ./libjava/java/awt/im/InputMethodHighlight.java ! 3751290640b ./libjava/java/awt/im/InputMethodRequests.java ! 588530106b ./libjava/java/awt/im/InputSubset.java ! 3747011663b ./libjava/java/awt/im/spi/InputMethod.java ! 771850894b ./libjava/java/awt/im/spi/InputMethodContext.java ! 2738209418b ./libjava/java/awt/im/spi/InputMethodDescriptor.java 2039150620b ./libjava/java/awt/image/AreaAveragingScaleFilter.java + 27995175b ./libjava/java/awt/image/BufferStrategy.java 47278745b ./libjava/java/awt/image/BufferedImage.java 2036451294b ./libjava/java/awt/image/BufferedImageOp.java 1269423221b ./libjava/java/awt/image/ColorModel.java 109440071b ./libjava/java/awt/image/ComponentColorModel.java 1906201349b ./libjava/java/awt/image/ComponentSampleModel.java 3384911687b ./libjava/java/awt/image/CropImageFilter.java + 634855604b ./libjava/java/awt/image/DataBuffer.java 3465530846b ./libjava/java/awt/image/DataBufferByte.java 4075525464b ./libjava/java/awt/image/DataBufferInt.java 3095543468b ./libjava/java/awt/image/DataBufferUShort.java 1806419668b ./libjava/java/awt/image/DirectColorModel.java 3631042426b ./libjava/java/awt/image/FilteredImageSource.java *************** *** 12996,13052 **** 3411264349b ./libjava/java/awt/image/ImageProducer.java 2311312957b ./libjava/java/awt/image/ImagingOpException.java 1293101551b ./libjava/java/awt/image/IndexColorModel.java - 2718926858b ./libjava/java/awt/Image.java 2126711191b ./libjava/java/awt/image/MemoryImageSource.java 1585332925b ./libjava/java/awt/image/PackedColorModel.java 3420827243b ./libjava/java/awt/image/PixelGrabber.java ! 3515952183b ./libjava/java/awt/image/RasterFormatException.java 1883441019b ./libjava/java/awt/image/Raster.java 869369986b ./libjava/java/awt/image/RasterOp.java - 2050559967b ./libjava/java/awt/image/renderable/ContextualRenderedImageFactory.java - 1792765242b ./libjava/java/awt/image/renderable/ParameterBlock.java - 943978836b ./libjava/java/awt/image/renderable/RenderableImage.java - 30237810b ./libjava/java/awt/image/renderable/RenderableImageOp.java - 134114010b ./libjava/java/awt/image/renderable/RenderableImageProducer.java - 3991882613b ./libjava/java/awt/image/renderable/RenderContext.java - 2864582905b ./libjava/java/awt/image/renderable/RenderedImageFactory.java 2829036068b ./libjava/java/awt/image/RenderedImage.java 3510533440b ./libjava/java/awt/image/ReplicateScaleFilter.java - 4052348878b ./libjava/java/awt/image/RGBImageFilter.java 1652657911b ./libjava/java/awt/image/SampleModel.java 2512892899b ./libjava/java/awt/image/SinglePixelPackedSampleModel.java 3763437230b ./libjava/java/awt/image/TileObserver.java 201953267b ./libjava/java/awt/image/VolatileImage.java 4567438b ./libjava/java/awt/image/WritableRaster.java 4267361925b ./libjava/java/awt/image/WritableRenderedImage.java ! 3017975380b ./libjava/java/awt/im/InputContext.java ! 3459586354b ./libjava/java/awt/im/InputMethodHighlight.java ! 3751290640b ./libjava/java/awt/im/InputMethodRequests.java ! 588530106b ./libjava/java/awt/im/InputSubset.java ! 771850894b ./libjava/java/awt/im/spi/InputMethodContext.java ! 2738209418b ./libjava/java/awt/im/spi/InputMethodDescriptor.java ! 3747011663b ./libjava/java/awt/im/spi/InputMethod.java ! 2855255637b ./libjava/java/awt/Insets.java ! 2919804909b ./libjava/java/awt/ItemSelectable.java ! 3548735145b ./libjava/java/awt/JobAttributes.java ! 2148109134b ./libjava/java/awt/KeyboardFocusManager.java ! 498257517b ./libjava/java/awt/KeyEventDispatcher.java ! 2266678890b ./libjava/java/awt/KeyEventPostProcessor.java ! 3064848655b ./libjava/java/awt/Label.java ! 2267522997b ./libjava/java/awt/LayoutManager2.java ! 939373230b ./libjava/java/awt/LayoutManager.java ! 685065105b ./libjava/java/awt/List.java ! 4032096533b ./libjava/java/awt/MediaTracker.java ! 1493315237b ./libjava/java/awt/MenuBar.java ! 2897941301b ./libjava/java/awt/MenuComponent.java ! 2778668375b ./libjava/java/awt/MenuContainer.java ! 864519593b ./libjava/java/awt/MenuItem.java ! 2782059501b ./libjava/java/awt/Menu.java ! 2408918380b ./libjava/java/awt/MenuShortcut.java ! 1435803511b ./libjava/java/awt/PageAttributes.java ! 3456029234b ./libjava/java/awt/PaintContext.java ! 1356355652b ./libjava/java/awt/Paint.java ! 667414534b ./libjava/java/awt/Panel.java 1611158274b ./libjava/java/awt/peer/ButtonPeer.java 1171238008b ./libjava/java/awt/peer/CanvasPeer.java 483129233b ./libjava/java/awt/peer/CheckboxMenuItemPeer.java --- 13115,13142 ---- 3411264349b ./libjava/java/awt/image/ImageProducer.java 2311312957b ./libjava/java/awt/image/ImagingOpException.java 1293101551b ./libjava/java/awt/image/IndexColorModel.java 2126711191b ./libjava/java/awt/image/MemoryImageSource.java 1585332925b ./libjava/java/awt/image/PackedColorModel.java 3420827243b ./libjava/java/awt/image/PixelGrabber.java ! 4052348878b ./libjava/java/awt/image/RGBImageFilter.java 1883441019b ./libjava/java/awt/image/Raster.java + 3515952183b ./libjava/java/awt/image/RasterFormatException.java 869369986b ./libjava/java/awt/image/RasterOp.java 2829036068b ./libjava/java/awt/image/RenderedImage.java 3510533440b ./libjava/java/awt/image/ReplicateScaleFilter.java 1652657911b ./libjava/java/awt/image/SampleModel.java 2512892899b ./libjava/java/awt/image/SinglePixelPackedSampleModel.java 3763437230b ./libjava/java/awt/image/TileObserver.java 201953267b ./libjava/java/awt/image/VolatileImage.java 4567438b ./libjava/java/awt/image/WritableRaster.java 4267361925b ./libjava/java/awt/image/WritableRenderedImage.java ! 2050559967b ./libjava/java/awt/image/renderable/ContextualRenderedImageFactory.java ! 1792765242b ./libjava/java/awt/image/renderable/ParameterBlock.java ! 3991882613b ./libjava/java/awt/image/renderable/RenderContext.java ! 943978836b ./libjava/java/awt/image/renderable/RenderableImage.java ! 30237810b ./libjava/java/awt/image/renderable/RenderableImageOp.java ! 134114010b ./libjava/java/awt/image/renderable/RenderableImageProducer.java ! 2864582905b ./libjava/java/awt/image/renderable/RenderedImageFactory.java 1611158274b ./libjava/java/awt/peer/ButtonPeer.java 1171238008b ./libjava/java/awt/peer/CanvasPeer.java 483129233b ./libjava/java/awt/peer/CheckboxMenuItemPeer.java *************** *** 13067,13086 **** 2144114987b ./libjava/java/awt/peer/MenuPeer.java 3010921620b ./libjava/java/awt/peer/PanelPeer.java 3378714445b ./libjava/java/awt/peer/PopupMenuPeer.java - 2932476036b ./libjava/java/awt/peer/ScrollbarPeer.java 921008058b ./libjava/java/awt/peer/ScrollPanePeer.java 4184845888b ./libjava/java/awt/peer/TextAreaPeer.java 1984969162b ./libjava/java/awt/peer/TextComponentPeer.java 3129312744b ./libjava/java/awt/peer/TextFieldPeer.java 2230435871b ./libjava/java/awt/peer/WindowPeer.java - 1667509381b ./libjava/java/awt/Point.java - 1337742529b ./libjava/java/awt/Polygon.java - 1012523291b ./libjava/java/awt/PopupMenu.java 895727923b ./libjava/java/awt/print/Book.java - 2575252233b ./libjava/java/awt/PrintGraphics.java - 1045531247b ./libjava/java/awt/PrintJob.java - 665581200b ./libjava/java/awt/print/Pageable.java 2833569988b ./libjava/java/awt/print/PageFormat.java 2950073433b ./libjava/java/awt/print/Paper.java 2988584336b ./libjava/java/awt/print/Printable.java 803392179b ./libjava/java/awt/print/PrinterAbortException.java --- 13157,13171 ---- 2144114987b ./libjava/java/awt/peer/MenuPeer.java 3010921620b ./libjava/java/awt/peer/PanelPeer.java 3378714445b ./libjava/java/awt/peer/PopupMenuPeer.java 921008058b ./libjava/java/awt/peer/ScrollPanePeer.java + 2932476036b ./libjava/java/awt/peer/ScrollbarPeer.java 4184845888b ./libjava/java/awt/peer/TextAreaPeer.java 1984969162b ./libjava/java/awt/peer/TextComponentPeer.java 3129312744b ./libjava/java/awt/peer/TextFieldPeer.java 2230435871b ./libjava/java/awt/peer/WindowPeer.java 895727923b ./libjava/java/awt/print/Book.java 2833569988b ./libjava/java/awt/print/PageFormat.java + 665581200b ./libjava/java/awt/print/Pageable.java 2950073433b ./libjava/java/awt/print/Paper.java 2988584336b ./libjava/java/awt/print/Printable.java 803392179b ./libjava/java/awt/print/PrinterAbortException.java *************** *** 13088,13126 **** 767673772b ./libjava/java/awt/print/PrinterGraphics.java 3099051394b ./libjava/java/awt/print/PrinterIOException.java 2450229836b ./libjava/java/awt/print/PrinterJob.java - 3867925269b ./libjava/java/awt/Rectangle.java - 3068597129b ./libjava/java/awt/RenderingHints.java - 2145818565b ./libjava/java/awt/Robot.java - 1655268610b ./libjava/java/awt/Scrollbar.java - 2144642110b ./libjava/java/awt/ScrollPaneAdjustable.java - 1265557509b ./libjava/java/awt/ScrollPane.java - 1622161060b ./libjava/java/awt/Shape.java - 2113160201b ./libjava/java/awt/Stroke.java - 2393232210b ./libjava/java/awt/SystemColor.java - 1409075397b ./libjava/java/awt/TextArea.java - 1189512898b ./libjava/java/awt/TextComponent.java - 2808733748b ./libjava/java/awt/TextField.java - 2679622818b ./libjava/java/awt/TexturePaint.java - 2797418683b ./libjava/java/awt/Toolkit.java - 3811432567b ./libjava/java/awt/Transparency.java - 3101170851b ./libjava/java/awt/Window.java 1515366999b ./libjava/java/beans/AppletInitializer.java - 2669908550b ./libjava/java/beans/beancontext/BeanContextChildComponentProxy.java - 1680972619b ./libjava/java/beans/beancontext/BeanContextChild.java - 488232453b ./libjava/java/beans/beancontext/BeanContextChildSupport.java - 1094587434b ./libjava/java/beans/beancontext/BeanContextContainerProxy.java - 1135449293b ./libjava/java/beans/beancontext/BeanContextEvent.java - 2767542609b ./libjava/java/beans/beancontext/BeanContext.java - 242862210b ./libjava/java/beans/beancontext/BeanContextMembershipEvent.java - 2481552408b ./libjava/java/beans/beancontext/BeanContextMembershipListener.java - 2023778890b ./libjava/java/beans/beancontext/BeanContextProxy.java - 3567375214b ./libjava/java/beans/beancontext/BeanContextServiceAvailableEvent.java - 1524483334b ./libjava/java/beans/beancontext/BeanContextServiceProviderBeanInfo.java - 2290646255b ./libjava/java/beans/beancontext/BeanContextServiceProvider.java - 3486010592b ./libjava/java/beans/beancontext/BeanContextServiceRevokedEvent.java - 1792611913b ./libjava/java/beans/beancontext/BeanContextServiceRevokedListener.java - 172300183b ./libjava/java/beans/beancontext/BeanContextServices.java - 649450665b ./libjava/java/beans/beancontext/BeanContextServicesListener.java 1833441000b ./libjava/java/beans/BeanDescriptor.java 1524972636b ./libjava/java/beans/BeanInfo.java 744629114b ./libjava/java/beans/Beans.java --- 13173,13179 ---- *************** *** 13148,13153 **** --- 13201,13222 ---- 1333667518b ./libjava/java/beans/VetoableChangeListenerProxy.java 3099026450b ./libjava/java/beans/VetoableChangeSupport.java 1473289197b ./libjava/java/beans/Visibility.java + 2767542609b ./libjava/java/beans/beancontext/BeanContext.java + 1680972619b ./libjava/java/beans/beancontext/BeanContextChild.java + 2669908550b ./libjava/java/beans/beancontext/BeanContextChildComponentProxy.java + 488232453b ./libjava/java/beans/beancontext/BeanContextChildSupport.java + 1094587434b ./libjava/java/beans/beancontext/BeanContextContainerProxy.java + 1135449293b ./libjava/java/beans/beancontext/BeanContextEvent.java + 242862210b ./libjava/java/beans/beancontext/BeanContextMembershipEvent.java + 2481552408b ./libjava/java/beans/beancontext/BeanContextMembershipListener.java + 2023778890b ./libjava/java/beans/beancontext/BeanContextProxy.java + 3567375214b ./libjava/java/beans/beancontext/BeanContextServiceAvailableEvent.java + 2290646255b ./libjava/java/beans/beancontext/BeanContextServiceProvider.java + 1524483334b ./libjava/java/beans/beancontext/BeanContextServiceProviderBeanInfo.java + 3486010592b ./libjava/java/beans/beancontext/BeanContextServiceRevokedEvent.java + 1792611913b ./libjava/java/beans/beancontext/BeanContextServiceRevokedListener.java + 172300183b ./libjava/java/beans/beancontext/BeanContextServices.java + 649450665b ./libjava/java/beans/beancontext/BeanContextServicesListener.java 200470800b ./libjava/java/io/BufferedInputStream.java 1289264783b ./libjava/java/io/BufferedOutputStream.java 2712911459b ./libjava/java/io/BufferedReader.java *************** *** 13163,13197 **** 2879044799b ./libjava/java/io/DataOutputStream.java 431456788b ./libjava/java/io/EOFException.java 2008649999b ./libjava/java/io/Externalizable.java 2244502590b ./libjava/java/io/FileDescriptor.java 3092690903b ./libjava/java/io/FileFilter.java 1289873619b ./libjava/java/io/FileInputStream.java - 445146170b ./libjava/java/io/File.java - 57206385b ./libjava/java/io/FilenameFilter.java 3349996992b ./libjava/java/io/FileNotFoundException.java 845573317b ./libjava/java/io/FileOutputStream.java 3458190272b ./libjava/java/io/FilePermission.java 480136026b ./libjava/java/io/FileReader.java 3272147344b ./libjava/java/io/FileWriter.java 491642459b ./libjava/java/io/FilterInputStream.java 3572067476b ./libjava/java/io/FilterOutputStream.java 834480594b ./libjava/java/io/FilterReader.java 805331833b ./libjava/java/io/FilterWriter.java 1021426083b ./libjava/java/io/InputStream.java 3092965501b ./libjava/java/io/InputStreamReader.java 811084925b ./libjava/java/io/InterruptedIOException.java 1806625621b ./libjava/java/io/InvalidClassException.java 4213264284b ./libjava/java/io/InvalidObjectException.java - 3499037157b ./libjava/java/io/IOException.java 2046387247b ./libjava/java/io/LineNumberInputStream.java 1977393201b ./libjava/java/io/LineNumberReader.java - 873510583b ./libjava/java/io/natFileDescriptorEcos.cc - 474317936b ./libjava/java/io/natFileDescriptorPosix.cc - 1364932101b ./libjava/java/io/natFileDescriptorWin32.cc - 3966839745b ./libjava/java/io/natFilePosix.cc - 3758140118b ./libjava/java/io/natFileWin32.cc - 459733413b ./libjava/java/io/natObjectInputStream.cc - 439868232b ./libjava/java/io/natVMObjectStreamClass.cc 2817046586b ./libjava/java/io/NotActiveException.java 241424297b ./libjava/java/io/NotSerializableException.java 3695857432b ./libjava/java/io/ObjectInput.java --- 13232,13259 ---- 2879044799b ./libjava/java/io/DataOutputStream.java 431456788b ./libjava/java/io/EOFException.java 2008649999b ./libjava/java/io/Externalizable.java + 445146170b ./libjava/java/io/File.java 2244502590b ./libjava/java/io/FileDescriptor.java 3092690903b ./libjava/java/io/FileFilter.java 1289873619b ./libjava/java/io/FileInputStream.java 3349996992b ./libjava/java/io/FileNotFoundException.java 845573317b ./libjava/java/io/FileOutputStream.java 3458190272b ./libjava/java/io/FilePermission.java 480136026b ./libjava/java/io/FileReader.java 3272147344b ./libjava/java/io/FileWriter.java + 57206385b ./libjava/java/io/FilenameFilter.java 491642459b ./libjava/java/io/FilterInputStream.java 3572067476b ./libjava/java/io/FilterOutputStream.java 834480594b ./libjava/java/io/FilterReader.java 805331833b ./libjava/java/io/FilterWriter.java + 3499037157b ./libjava/java/io/IOException.java 1021426083b ./libjava/java/io/InputStream.java 3092965501b ./libjava/java/io/InputStreamReader.java 811084925b ./libjava/java/io/InterruptedIOException.java 1806625621b ./libjava/java/io/InvalidClassException.java 4213264284b ./libjava/java/io/InvalidObjectException.java 2046387247b ./libjava/java/io/LineNumberInputStream.java 1977393201b ./libjava/java/io/LineNumberReader.java 2817046586b ./libjava/java/io/NotActiveException.java 241424297b ./libjava/java/io/NotSerializableException.java 3695857432b ./libjava/java/io/ObjectInput.java *************** *** 13225,13235 **** 3179611106b ./libjava/java/io/StringReader.java 2231068296b ./libjava/java/io/StringWriter.java 2020363932b ./libjava/java/io/SyncFailedException.java - 1184652293b ./libjava/java/io/UnsupportedEncodingException.java 753296513b ./libjava/java/io/UTFDataFormatException.java 3949190653b ./libjava/java/io/VMObjectStreamClass.java 1793710473b ./libjava/java/io/WriteAbortedException.java 3470521880b ./libjava/java/io/Writer.java 1705015121b ./libjava/java/lang/AbstractMethodError.java 3608826441b ./libjava/java/lang/ArithmeticException.java 1408252974b ./libjava/java/lang/ArrayIndexOutOfBoundsException.java --- 13287,13304 ---- 3179611106b ./libjava/java/io/StringReader.java 2231068296b ./libjava/java/io/StringWriter.java 2020363932b ./libjava/java/io/SyncFailedException.java 753296513b ./libjava/java/io/UTFDataFormatException.java + 1184652293b ./libjava/java/io/UnsupportedEncodingException.java 3949190653b ./libjava/java/io/VMObjectStreamClass.java 1793710473b ./libjava/java/io/WriteAbortedException.java 3470521880b ./libjava/java/io/Writer.java + 873510583b ./libjava/java/io/natFileDescriptorEcos.cc + 474317936b ./libjava/java/io/natFileDescriptorPosix.cc + 1364932101b ./libjava/java/io/natFileDescriptorWin32.cc + 3966839745b ./libjava/java/io/natFilePosix.cc + 3758140118b ./libjava/java/io/natFileWin32.cc + 459733413b ./libjava/java/io/natObjectInputStream.cc + 439868232b ./libjava/java/io/natVMObjectStreamClass.cc 1705015121b ./libjava/java/lang/AbstractMethodError.java 3608826441b ./libjava/java/lang/ArithmeticException.java 1408252974b ./libjava/java/lang/ArrayIndexOutOfBoundsException.java *************** *** 13237,13275 **** 306993996b ./libjava/java/lang/AssertionError.java 390582101b ./libjava/java/lang/Boolean.java 1656999773b ./libjava/java/lang/Byte.java - 2227892273b ./libjava/java/lang/Character.java 1320727522b ./libjava/java/lang/CharSequence.java 2151473066b ./libjava/java/lang/ClassCastException.java 2126293361b ./libjava/java/lang/ClassCircularityError.java 1199144380b ./libjava/java/lang/ClassFormatError.java - 1230118788b ./libjava/java/lang/Class.h - 3137319053b ./libjava/java/lang/Class.java 1934884531b ./libjava/java/lang/ClassLoader.java 3832354279b ./libjava/java/lang/ClassNotFoundException.java - 1486373898b ./libjava/java/lang/Cloneable.java 673068051b ./libjava/java/lang/CloneNotSupportedException.java 3893631920b ./libjava/java/lang/Comparable.java 4032774784b ./libjava/java/lang/Compiler.java 1200936367b ./libjava/java/lang/Double.java - 1435754341b ./libjava/java/lang/dtoa.c - 994774164b ./libjava/java/lang/e_acos.c - 4273053537b ./libjava/java/lang/e_asin.c - 1280734317b ./libjava/java/lang/e_atan2.c 1379141136b ./libjava/java/lang/EcosProcess.java - 2698793341b ./libjava/java/lang/e_exp.c - 3934619985b ./libjava/java/lang/e_fmod.c - 3710448655b ./libjava/java/lang/e_log.c - 876585599b ./libjava/java/lang/e_pow.c - 3495227073b ./libjava/java/lang/e_remainder.c - 3827866584b ./libjava/java/lang/e_rem_pio2.c 9105713b ./libjava/java/lang/Error.java - 351649389b ./libjava/java/lang/e_scalb.c - 4172761909b ./libjava/java/lang/e_sqrt.c - 1952296714b ./libjava/java/lang/ExceptionInInitializerError.java 2472475140b ./libjava/java/lang/Exception.java ! 773177573b ./libjava/java/lang/fdlibm.h 3220530637b ./libjava/java/lang/Float.java - 1797756641b ./libjava/java/lang/ieeefp.h 1418569968b ./libjava/java/lang/IllegalAccessError.java 1197904351b ./libjava/java/lang/IllegalAccessException.java 394073694b ./libjava/java/lang/IllegalArgumentException.java --- 13306,13330 ---- 306993996b ./libjava/java/lang/AssertionError.java 390582101b ./libjava/java/lang/Boolean.java 1656999773b ./libjava/java/lang/Byte.java 1320727522b ./libjava/java/lang/CharSequence.java + 2227892273b ./libjava/java/lang/Character.java + 1230118788b ./libjava/java/lang/Class.h + 3137319053b ./libjava/java/lang/Class.java 2151473066b ./libjava/java/lang/ClassCastException.java 2126293361b ./libjava/java/lang/ClassCircularityError.java 1199144380b ./libjava/java/lang/ClassFormatError.java 1934884531b ./libjava/java/lang/ClassLoader.java 3832354279b ./libjava/java/lang/ClassNotFoundException.java 673068051b ./libjava/java/lang/CloneNotSupportedException.java + 1486373898b ./libjava/java/lang/Cloneable.java 3893631920b ./libjava/java/lang/Comparable.java 4032774784b ./libjava/java/lang/Compiler.java 1200936367b ./libjava/java/lang/Double.java 1379141136b ./libjava/java/lang/EcosProcess.java 9105713b ./libjava/java/lang/Error.java 2472475140b ./libjava/java/lang/Exception.java ! 1952296714b ./libjava/java/lang/ExceptionInInitializerError.java 3220530637b ./libjava/java/lang/Float.java 1418569968b ./libjava/java/lang/IllegalAccessError.java 1197904351b ./libjava/java/lang/IllegalAccessException.java 394073694b ./libjava/java/lang/IllegalArgumentException.java *************** *** 13284,13296 **** 654167576b ./libjava/java/lang/Integer.java 2038401493b ./libjava/java/lang/InternalError.java 1061890963b ./libjava/java/lang/InterruptedException.java 2140439599b ./libjava/java/lang/k_cos.c 2521991737b ./libjava/java/lang/k_rem_pio2.c 1794170989b ./libjava/java/lang/k_sin.c 2812209061b ./libjava/java/lang/k_tan.c - 524389970b ./libjava/java/lang/LinkageError.java - 960037250b ./libjava/java/lang/Long.java - 3228990355b ./libjava/java/lang/Math.java 3525801158b ./libjava/java/lang/mprec.c 338852744b ./libjava/java/lang/mprec.h 2041042935b ./libjava/java/lang/natCharacter.cc --- 13339,13410 ---- 654167576b ./libjava/java/lang/Integer.java 2038401493b ./libjava/java/lang/InternalError.java 1061890963b ./libjava/java/lang/InterruptedException.java + 524389970b ./libjava/java/lang/LinkageError.java + 960037250b ./libjava/java/lang/Long.java + 3228990355b ./libjava/java/lang/Math.java + 263797800b ./libjava/java/lang/NegativeArraySizeException.java + 3319507675b ./libjava/java/lang/NoClassDefFoundError.java + 4085492067b ./libjava/java/lang/NoSuchFieldError.java + 2323645147b ./libjava/java/lang/NoSuchFieldException.java + 344512868b ./libjava/java/lang/NoSuchMethodError.java + 1564778027b ./libjava/java/lang/NoSuchMethodException.java + 1207657808b ./libjava/java/lang/NullPointerException.java + 4257473768b ./libjava/java/lang/Number.java + 1235646575b ./libjava/java/lang/NumberFormatException.java + 3421547735b ./libjava/java/lang/Object.h + 3641470251b ./libjava/java/lang/Object.java + 1753573435b ./libjava/java/lang/OutOfMemoryError.java + 2281685049b ./libjava/java/lang/Package.java + 2135848456b ./libjava/java/lang/PosixProcess.java + 281793156b ./libjava/java/lang/Process.java + 314741759b ./libjava/java/lang/Runnable.java + 520756140b ./libjava/java/lang/Runtime.java + 3456940884b ./libjava/java/lang/RuntimeException.java + 2126854009b ./libjava/java/lang/RuntimePermission.java + 3060742237b ./libjava/java/lang/SecurityException.java + 2913842258b ./libjava/java/lang/SecurityManager.java + 2863678286b ./libjava/java/lang/Short.java + 4244757918b ./libjava/java/lang/StackOverflowError.java + 2186241527b ./libjava/java/lang/StackTraceElement.java + 2934755101b ./libjava/java/lang/StrictMath.java + 1255014411b ./libjava/java/lang/String.java + 2253734108b ./libjava/java/lang/StringBuffer.java + 976268260b ./libjava/java/lang/StringIndexOutOfBoundsException.java + 4124028661b ./libjava/java/lang/System.java + 2224008050b ./libjava/java/lang/Thread.java + 708268231b ./libjava/java/lang/ThreadDeath.java + 1472651677b ./libjava/java/lang/ThreadGroup.java + 2461717169b ./libjava/java/lang/ThreadLocal.java + 865003071b ./libjava/java/lang/Throwable.java + 1410681639b ./libjava/java/lang/UnknownError.java + 3661785266b ./libjava/java/lang/UnsatisfiedLinkError.java + 1590920791b ./libjava/java/lang/UnsupportedClassVersionError.java + 1755663743b ./libjava/java/lang/UnsupportedOperationException.java + 805198848b ./libjava/java/lang/VMClassLoader.java + 1683849443b ./libjava/java/lang/VMSecurityManager.java + 108756976b ./libjava/java/lang/VMThrowable.java + 1033563786b ./libjava/java/lang/VerifyError.java + 119886432b ./libjava/java/lang/VirtualMachineError.java + 4151098611b ./libjava/java/lang/Void.java + 3963510586b ./libjava/java/lang/Win32Process.java + 1435754341b ./libjava/java/lang/dtoa.c + 994774164b ./libjava/java/lang/e_acos.c + 4273053537b ./libjava/java/lang/e_asin.c + 1280734317b ./libjava/java/lang/e_atan2.c + 2698793341b ./libjava/java/lang/e_exp.c + 3934619985b ./libjava/java/lang/e_fmod.c + 3710448655b ./libjava/java/lang/e_log.c + 876585599b ./libjava/java/lang/e_pow.c + 3827866584b ./libjava/java/lang/e_rem_pio2.c + 3495227073b ./libjava/java/lang/e_remainder.c + 351649389b ./libjava/java/lang/e_scalb.c + 4172761909b ./libjava/java/lang/e_sqrt.c + 773177573b ./libjava/java/lang/fdlibm.h + 1797756641b ./libjava/java/lang/ieeefp.h 2140439599b ./libjava/java/lang/k_cos.c 2521991737b ./libjava/java/lang/k_rem_pio2.c 1794170989b ./libjava/java/lang/k_sin.c 2812209061b ./libjava/java/lang/k_tan.c 3525801158b ./libjava/java/lang/mprec.c 338852744b ./libjava/java/lang/mprec.h 2041042935b ./libjava/java/lang/natCharacter.cc *************** *** 13303,13329 **** 3690041071b ./libjava/java/lang/natObject.cc 152803494b ./libjava/java/lang/natPosixProcess.cc 789884803b ./libjava/java/lang/natRuntime.cc - 209062817b ./libjava/java/lang/natStringBuffer.cc 3573330723b ./libjava/java/lang/natString.cc 1777124194b ./libjava/java/lang/natSystem.cc 636949972b ./libjava/java/lang/natThread.cc 585510303b ./libjava/java/lang/natVMSecurityManager.cc 2120194864b ./libjava/java/lang/natWin32Process.cc ! 263797800b ./libjava/java/lang/NegativeArraySizeException.java ! 3319507675b ./libjava/java/lang/NoClassDefFoundError.java ! 4085492067b ./libjava/java/lang/NoSuchFieldError.java ! 2323645147b ./libjava/java/lang/NoSuchFieldException.java ! 344512868b ./libjava/java/lang/NoSuchMethodError.java ! 1564778027b ./libjava/java/lang/NoSuchMethodException.java ! 1207657808b ./libjava/java/lang/NullPointerException.java ! 1235646575b ./libjava/java/lang/NumberFormatException.java ! 4257473768b ./libjava/java/lang/Number.java ! 3421547735b ./libjava/java/lang/Object.h ! 3641470251b ./libjava/java/lang/Object.java ! 1753573435b ./libjava/java/lang/OutOfMemoryError.java ! 2281685049b ./libjava/java/lang/Package.java ! 2135848456b ./libjava/java/lang/PosixProcess.java ! 281793156b ./libjava/java/lang/Process.java 1863148120b ./libjava/java/lang/reflect/AccessibleObject.java 1772289084b ./libjava/java/lang/reflect/Array.java 1042641503b ./libjava/java/lang/reflect/Constructor.java --- 13417,13434 ---- 3690041071b ./libjava/java/lang/natObject.cc 152803494b ./libjava/java/lang/natPosixProcess.cc 789884803b ./libjava/java/lang/natRuntime.cc 3573330723b ./libjava/java/lang/natString.cc + 209062817b ./libjava/java/lang/natStringBuffer.cc 1777124194b ./libjava/java/lang/natSystem.cc 636949972b ./libjava/java/lang/natThread.cc 585510303b ./libjava/java/lang/natVMSecurityManager.cc 2120194864b ./libjava/java/lang/natWin32Process.cc ! 1460247144b ./libjava/java/lang/ref/PhantomReference.java ! 1257792028b ./libjava/java/lang/ref/Reference.java ! 65399149b ./libjava/java/lang/ref/ReferenceQueue.java ! 3675082054b ./libjava/java/lang/ref/SoftReference.java ! 4137952990b ./libjava/java/lang/ref/WeakReference.java ! 3450092246b ./libjava/java/lang/ref/natReference.cc 1863148120b ./libjava/java/lang/reflect/AccessibleObject.java 1772289084b ./libjava/java/lang/reflect/Array.java 1042641503b ./libjava/java/lang/reflect/Constructor.java *************** *** 13333,13400 **** 2195316717b ./libjava/java/lang/reflect/Member.java 3154056039b ./libjava/java/lang/reflect/Method.java 2395391486b ./libjava/java/lang/reflect/Modifier.java 467850593b ./libjava/java/lang/reflect/natArray.cc 3363342234b ./libjava/java/lang/reflect/natConstructor.cc 1629711356b ./libjava/java/lang/reflect/natField.cc 1126649798b ./libjava/java/lang/reflect/natMethod.cc 2206651938b ./libjava/java/lang/reflect/natProxy.cc - 4197235819b ./libjava/java/lang/reflect/Proxy.java - 3286982797b ./libjava/java/lang/reflect/ReflectPermission.java - 2625799733b ./libjava/java/lang/reflect/UndeclaredThrowableException.java - 3450092246b ./libjava/java/lang/ref/natReference.cc - 1460247144b ./libjava/java/lang/ref/PhantomReference.java - 1257792028b ./libjava/java/lang/ref/Reference.java - 65399149b ./libjava/java/lang/ref/ReferenceQueue.java - 3675082054b ./libjava/java/lang/ref/SoftReference.java - 4137952990b ./libjava/java/lang/ref/WeakReference.java - 314741759b ./libjava/java/lang/Runnable.java - 3456940884b ./libjava/java/lang/RuntimeException.java - 520756140b ./libjava/java/lang/Runtime.java - 2126854009b ./libjava/java/lang/RuntimePermission.java 4211007333b ./libjava/java/lang/s_atan.c 1992861509b ./libjava/java/lang/s_ceil.c 2560516823b ./libjava/java/lang/s_copysign.c 138245783b ./libjava/java/lang/s_cos.c - 3060742237b ./libjava/java/lang/SecurityException.java - 2913842258b ./libjava/java/lang/SecurityManager.java 2696927637b ./libjava/java/lang/s_fabs.c - 2861859787b ./libjava/java/lang/sf_fabs.c 1587392745b ./libjava/java/lang/s_floor.c - 3733918551b ./libjava/java/lang/sf_rint.c - 2863678286b ./libjava/java/lang/Short.java 781279555b ./libjava/java/lang/s_rint.c 1543063550b ./libjava/java/lang/s_scalbn.c 683141039b ./libjava/java/lang/s_sin.c - 4244757918b ./libjava/java/lang/StackOverflowError.java - 2186241527b ./libjava/java/lang/StackTraceElement.java 2604631654b ./libjava/java/lang/s_tan.c ! 2934755101b ./libjava/java/lang/StrictMath.java ! 2253734108b ./libjava/java/lang/StringBuffer.java ! 976268260b ./libjava/java/lang/StringIndexOutOfBoundsException.java ! 1255014411b ./libjava/java/lang/String.java 2159586687b ./libjava/java/lang/strtod.c - 4124028661b ./libjava/java/lang/System.java - 708268231b ./libjava/java/lang/ThreadDeath.java - 1472651677b ./libjava/java/lang/ThreadGroup.java - 2224008050b ./libjava/java/lang/Thread.java - 2461717169b ./libjava/java/lang/ThreadLocal.java - 865003071b ./libjava/java/lang/Throwable.java - 1410681639b ./libjava/java/lang/UnknownError.java - 3661785266b ./libjava/java/lang/UnsatisfiedLinkError.java - 1590920791b ./libjava/java/lang/UnsupportedClassVersionError.java - 1755663743b ./libjava/java/lang/UnsupportedOperationException.java - 1033563786b ./libjava/java/lang/VerifyError.java - 119886432b ./libjava/java/lang/VirtualMachineError.java - 805198848b ./libjava/java/lang/VMClassLoader.java - 1683849443b ./libjava/java/lang/VMSecurityManager.java - 108756976b ./libjava/java/lang/VMThrowable.java - 4151098611b ./libjava/java/lang/Void.java 2208706716b ./libjava/java/lang/w_acos.c 2509257289b ./libjava/java/lang/w_asin.c 129756780b ./libjava/java/lang/w_atan2.c 3101537020b ./libjava/java/lang/w_exp.c 4251570485b ./libjava/java/lang/w_fmod.c - 3963510586b ./libjava/java/lang/Win32Process.java 2517288589b ./libjava/java/lang/w_log.c 2200179114b ./libjava/java/lang/w_pow.c 3127225850b ./libjava/java/lang/w_remainder.c --- 13438,13469 ---- 2195316717b ./libjava/java/lang/reflect/Member.java 3154056039b ./libjava/java/lang/reflect/Method.java 2395391486b ./libjava/java/lang/reflect/Modifier.java + 4197235819b ./libjava/java/lang/reflect/Proxy.java + 3286982797b ./libjava/java/lang/reflect/ReflectPermission.java + 2625799733b ./libjava/java/lang/reflect/UndeclaredThrowableException.java 467850593b ./libjava/java/lang/reflect/natArray.cc 3363342234b ./libjava/java/lang/reflect/natConstructor.cc 1629711356b ./libjava/java/lang/reflect/natField.cc 1126649798b ./libjava/java/lang/reflect/natMethod.cc 2206651938b ./libjava/java/lang/reflect/natProxy.cc 4211007333b ./libjava/java/lang/s_atan.c 1992861509b ./libjava/java/lang/s_ceil.c 2560516823b ./libjava/java/lang/s_copysign.c 138245783b ./libjava/java/lang/s_cos.c 2696927637b ./libjava/java/lang/s_fabs.c 1587392745b ./libjava/java/lang/s_floor.c 781279555b ./libjava/java/lang/s_rint.c 1543063550b ./libjava/java/lang/s_scalbn.c 683141039b ./libjava/java/lang/s_sin.c 2604631654b ./libjava/java/lang/s_tan.c ! 2861859787b ./libjava/java/lang/sf_fabs.c ! 3733918551b ./libjava/java/lang/sf_rint.c 2159586687b ./libjava/java/lang/strtod.c 2208706716b ./libjava/java/lang/w_acos.c 2509257289b ./libjava/java/lang/w_asin.c 129756780b ./libjava/java/lang/w_atan2.c 3101537020b ./libjava/java/lang/w_exp.c 4251570485b ./libjava/java/lang/w_fmod.c 2517288589b ./libjava/java/lang/w_log.c 2200179114b ./libjava/java/lang/w_pow.c 3127225850b ./libjava/java/lang/w_remainder.c *************** *** 13404,13415 **** 3180929962b ./libjava/java/net/Authenticator.java 1743512707b ./libjava/java/net/BindException.java 2426087274b ./libjava/java/net/ConnectException.java - 2451709496b ./libjava/java/net/ContentHandlerFactory.java 3990596783b ./libjava/java/net/ContentHandler.java 848318870b ./libjava/java/net/DatagramPacket.java - 2274051154b ./libjava/java/net/DatagramSocketImplFactory.java - 2506966924b ./libjava/java/net/DatagramSocketImpl.java 3906909869b ./libjava/java/net/DatagramSocket.java 1502291104b ./libjava/java/net/FileNameMap.java 2216245141b ./libjava/java/net/HttpURLConnection.java 2818832983b ./libjava/java/net/Inet4Address.java --- 13473,13484 ---- 3180929962b ./libjava/java/net/Authenticator.java 1743512707b ./libjava/java/net/BindException.java 2426087274b ./libjava/java/net/ConnectException.java 3990596783b ./libjava/java/net/ContentHandler.java + 2451709496b ./libjava/java/net/ContentHandlerFactory.java 848318870b ./libjava/java/net/DatagramPacket.java 3906909869b ./libjava/java/net/DatagramSocket.java + 2506966924b ./libjava/java/net/DatagramSocketImpl.java + 2274051154b ./libjava/java/net/DatagramSocketImplFactory.java 1502291104b ./libjava/java/net/FileNameMap.java 2216245141b ./libjava/java/net/HttpURLConnection.java 2818832983b ./libjava/java/net/Inet4Address.java *************** *** 13419,13428 **** 1448108501b ./libjava/java/net/JarURLConnection.java 2375086431b ./libjava/java/net/MalformedURLException.java 3239854152b ./libjava/java/net/MulticastSocket.java - 1717571079b ./libjava/java/net/natInetAddress.cc - 1172732398b ./libjava/java/net/natNetworkInterface.cc - 1843848253b ./libjava/java/net/natPlainDatagramSocketImpl.cc - 3546340705b ./libjava/java/net/natPlainSocketImpl.cc 1976437067b ./libjava/java/net/NetPermission.java 2182773416b ./libjava/java/net/NetworkInterface.java 1314162899b ./libjava/java/net/NoRouteToHostException.java --- 13488,13493 ---- *************** *** 13432,13461 **** 9108857b ./libjava/java/net/PortUnreachableException.java 4269059656b ./libjava/java/net/ProtocolException.java 1143041390b ./libjava/java/net/ServerSocket.java 1288381648b ./libjava/java/net/SocketAddress.java 2640191189b ./libjava/java/net/SocketException.java - 2277031455b ./libjava/java/net/SocketImplFactory.java 1936643428b ./libjava/java/net/SocketImpl.java ! 1962161860b ./libjava/java/net/Socket.java 2287397673b ./libjava/java/net/SocketOptions.java 2557609826b ./libjava/java/net/SocketPermission.java 2121024205b ./libjava/java/net/SocketTimeoutException.java - 621547579b ./libjava/java/net/UnknownHostException.java - 1524613334b ./libjava/java/net/UnknownServiceException.java 1778798028b ./libjava/java/net/URI.java 1110355129b ./libjava/java/net/URISyntaxException.java 92332022b ./libjava/java/net/URLClassLoader.java 1087332218b ./libjava/java/net/URLConnection.java 3344161737b ./libjava/java/net/URLDecoder.java 1435682115b ./libjava/java/net/URLEncoder.java - 3836199530b ./libjava/java/net/URL.java - 2216267556b ./libjava/java/net/URLStreamHandlerFactory.java 2420777516b ./libjava/java/net/URLStreamHandler.java 114232809b ./libjava/java/nio/Buffer.java 3003180277b ./libjava/java/nio/BufferOverflowException.java 2231682041b ./libjava/java/nio/BufferUnderflowException.java 1601207350b ./libjava/java/nio/ByteBuffer.java 3686289353b ./libjava/java/nio/ByteOrder.java 1177379858b ./libjava/java/nio/channels/AlreadyConnectedException.java 1107823056b ./libjava/java/nio/channels/AsynchronousCloseException.java 3361202762b ./libjava/java/nio/channels/ByteChannel.java --- 13497,13539 ---- 9108857b ./libjava/java/net/PortUnreachableException.java 4269059656b ./libjava/java/net/ProtocolException.java 1143041390b ./libjava/java/net/ServerSocket.java + 1962161860b ./libjava/java/net/Socket.java 1288381648b ./libjava/java/net/SocketAddress.java 2640191189b ./libjava/java/net/SocketException.java 1936643428b ./libjava/java/net/SocketImpl.java ! 2277031455b ./libjava/java/net/SocketImplFactory.java 2287397673b ./libjava/java/net/SocketOptions.java 2557609826b ./libjava/java/net/SocketPermission.java 2121024205b ./libjava/java/net/SocketTimeoutException.java 1778798028b ./libjava/java/net/URI.java 1110355129b ./libjava/java/net/URISyntaxException.java + 3836199530b ./libjava/java/net/URL.java 92332022b ./libjava/java/net/URLClassLoader.java 1087332218b ./libjava/java/net/URLConnection.java 3344161737b ./libjava/java/net/URLDecoder.java 1435682115b ./libjava/java/net/URLEncoder.java 2420777516b ./libjava/java/net/URLStreamHandler.java + 2216267556b ./libjava/java/net/URLStreamHandlerFactory.java + 621547579b ./libjava/java/net/UnknownHostException.java + 1524613334b ./libjava/java/net/UnknownServiceException.java + 1717571079b ./libjava/java/net/natInetAddress.cc + 1172732398b ./libjava/java/net/natNetworkInterface.cc + 1843848253b ./libjava/java/net/natPlainDatagramSocketImpl.cc + 3546340705b ./libjava/java/net/natPlainSocketImpl.cc 114232809b ./libjava/java/nio/Buffer.java 3003180277b ./libjava/java/nio/BufferOverflowException.java 2231682041b ./libjava/java/nio/BufferUnderflowException.java 1601207350b ./libjava/java/nio/ByteBuffer.java 3686289353b ./libjava/java/nio/ByteOrder.java + 2811837814b ./libjava/java/nio/CharBuffer.java + 1221212992b ./libjava/java/nio/DoubleBuffer.java + 67400934b ./libjava/java/nio/FloatBuffer.java + 2471040152b ./libjava/java/nio/IntBuffer.java + 783746649b ./libjava/java/nio/InvalidMarkException.java + 327783972b ./libjava/java/nio/LongBuffer.java + 3677204947b ./libjava/java/nio/MappedByteBuffer.java + 3776813594b ./libjava/java/nio/ReadOnlyBufferException.java + 3065952916b ./libjava/java/nio/ShortBuffer.java 1177379858b ./libjava/java/nio/channels/AlreadyConnectedException.java 1107823056b ./libjava/java/nio/channels/AsynchronousCloseException.java 3361202762b ./libjava/java/nio/channels/ByteChannel.java *************** *** 13468,13475 **** 3740244084b ./libjava/java/nio/channels/ConnectionPendingException.java 3518662813b ./libjava/java/nio/channels/DatagramChannel.java 3885509195b ./libjava/java/nio/channels/FileChannel.java - 868008962b ./libjava/java/nio/channels/FileLockInterruptionException.java 3845407183b ./libjava/java/nio/channels/FileLock.java 2289036483b ./libjava/java/nio/channels/GatheringByteChannel.java 1128586081b ./libjava/java/nio/channels/IllegalBlockingModeException.java 1109611563b ./libjava/java/nio/channels/IllegalSelectorException.java --- 13546,13553 ---- 3740244084b ./libjava/java/nio/channels/ConnectionPendingException.java 3518662813b ./libjava/java/nio/channels/DatagramChannel.java 3885509195b ./libjava/java/nio/channels/FileChannel.java 3845407183b ./libjava/java/nio/channels/FileLock.java + 868008962b ./libjava/java/nio/channels/FileLockInterruptionException.java 2289036483b ./libjava/java/nio/channels/GatheringByteChannel.java 1128586081b ./libjava/java/nio/channels/IllegalBlockingModeException.java 1109611563b ./libjava/java/nio/channels/IllegalSelectorException.java *************** *** 13488,13530 **** 449503035b ./libjava/java/nio/channels/Selector.java 756463571b ./libjava/java/nio/channels/ServerSocketChannel.java 2666360020b ./libjava/java/nio/channels/SocketChannel.java 1504911414b ./libjava/java/nio/channels/spi/AbstractInterruptibleChannel.java 1375134345b ./libjava/java/nio/channels/spi/AbstractSelectableChannel.java 4093345435b ./libjava/java/nio/channels/spi/AbstractSelectionKey.java 1401298231b ./libjava/java/nio/channels/spi/AbstractSelector.java 4050154085b ./libjava/java/nio/channels/spi/SelectorProvider.java - 2778637637b ./libjava/java/nio/channels/UnresolvedAddressException.java - 3969634423b ./libjava/java/nio/channels/UnsupportedAddressTypeException.java - 3544554741b ./libjava/java/nio/channels/WritableByteChannel.java - 2811837814b ./libjava/java/nio/CharBuffer.java 2225496161b ./libjava/java/nio/charset/CharacterCodingException.java 1176971308b ./libjava/java/nio/charset/CharsetDecoder.java 1877868600b ./libjava/java/nio/charset/CharsetEncoder.java - 3129762162b ./libjava/java/nio/charset/Charset.java 737660262b ./libjava/java/nio/charset/CoderMalfunctionError.java 4012862540b ./libjava/java/nio/charset/CoderResult.java 490549822b ./libjava/java/nio/charset/CodingErrorAction.java 3780446712b ./libjava/java/nio/charset/IllegalCharsetNameException.java 1055655800b ./libjava/java/nio/charset/MalformedInputException.java - 4069491730b ./libjava/java/nio/charset/spi/CharsetProvider.java 476170321b ./libjava/java/nio/charset/UnmappableCharacterException.java 343000553b ./libjava/java/nio/charset/UnsupportedCharsetException.java ! 1221212992b ./libjava/java/nio/DoubleBuffer.java ! 67400934b ./libjava/java/nio/FloatBuffer.java ! 2471040152b ./libjava/java/nio/IntBuffer.java ! 783746649b ./libjava/java/nio/InvalidMarkException.java ! 327783972b ./libjava/java/nio/LongBuffer.java ! 3677204947b ./libjava/java/nio/MappedByteBuffer.java ! 3776813594b ./libjava/java/nio/ReadOnlyBufferException.java ! 3065952916b ./libjava/java/nio/ShortBuffer.java 2536299246b ./libjava/java/rmi/AccessException.java 1531149925b ./libjava/java/rmi/activation/Activatable.java 2276804202b ./libjava/java/rmi/activation/ActivateFailedException.java 3241489747b ./libjava/java/rmi/activation/ActivationDesc.java 3697136923b ./libjava/java/rmi/activation/ActivationException.java 1497281637b ./libjava/java/rmi/activation/ActivationGroupDesc.java 1688342631b ./libjava/java/rmi/activation/ActivationGroupID.java - 443589476b ./libjava/java/rmi/activation/ActivationGroup.java 2857609657b ./libjava/java/rmi/activation/ActivationID.java 3314676255b ./libjava/java/rmi/activation/ActivationInstantiator.java 331032778b ./libjava/java/rmi/activation/ActivationMonitor.java --- 13566,13618 ---- 449503035b ./libjava/java/nio/channels/Selector.java 756463571b ./libjava/java/nio/channels/ServerSocketChannel.java 2666360020b ./libjava/java/nio/channels/SocketChannel.java + 2778637637b ./libjava/java/nio/channels/UnresolvedAddressException.java + 3969634423b ./libjava/java/nio/channels/UnsupportedAddressTypeException.java + 3544554741b ./libjava/java/nio/channels/WritableByteChannel.java 1504911414b ./libjava/java/nio/channels/spi/AbstractInterruptibleChannel.java 1375134345b ./libjava/java/nio/channels/spi/AbstractSelectableChannel.java 4093345435b ./libjava/java/nio/channels/spi/AbstractSelectionKey.java 1401298231b ./libjava/java/nio/channels/spi/AbstractSelector.java 4050154085b ./libjava/java/nio/channels/spi/SelectorProvider.java 2225496161b ./libjava/java/nio/charset/CharacterCodingException.java + 3129762162b ./libjava/java/nio/charset/Charset.java 1176971308b ./libjava/java/nio/charset/CharsetDecoder.java 1877868600b ./libjava/java/nio/charset/CharsetEncoder.java 737660262b ./libjava/java/nio/charset/CoderMalfunctionError.java 4012862540b ./libjava/java/nio/charset/CoderResult.java 490549822b ./libjava/java/nio/charset/CodingErrorAction.java 3780446712b ./libjava/java/nio/charset/IllegalCharsetNameException.java 1055655800b ./libjava/java/nio/charset/MalformedInputException.java 476170321b ./libjava/java/nio/charset/UnmappableCharacterException.java 343000553b ./libjava/java/nio/charset/UnsupportedCharsetException.java ! 4069491730b ./libjava/java/nio/charset/spi/CharsetProvider.java 2536299246b ./libjava/java/rmi/AccessException.java + 3218589521b ./libjava/java/rmi/AlreadyBoundException.java + 3062104288b ./libjava/java/rmi/ConnectException.java + 2074608419b ./libjava/java/rmi/ConnectIOException.java + 1405989343b ./libjava/java/rmi/MarshalException.java + 626626695b ./libjava/java/rmi/MarshalledObject.java + 2730841917b ./libjava/java/rmi/Naming.java + 1822147110b ./libjava/java/rmi/NoSuchObjectException.java + 309568247b ./libjava/java/rmi/NotBoundException.java + 3203646295b ./libjava/java/rmi/RMISecurityException.java + 1668944357b ./libjava/java/rmi/RMISecurityManager.java + 3977817460b ./libjava/java/rmi/Remote.java + 2927091976b ./libjava/java/rmi/RemoteException.java + 2930230515b ./libjava/java/rmi/ServerError.java + 407423429b ./libjava/java/rmi/ServerException.java + 611023924b ./libjava/java/rmi/ServerRuntimeException.java + 860394651b ./libjava/java/rmi/StubNotFoundException.java + 1208462067b ./libjava/java/rmi/UnexpectedException.java + 891904643b ./libjava/java/rmi/UnknownHostException.java + 33682231b ./libjava/java/rmi/UnmarshalException.java 1531149925b ./libjava/java/rmi/activation/Activatable.java 2276804202b ./libjava/java/rmi/activation/ActivateFailedException.java 3241489747b ./libjava/java/rmi/activation/ActivationDesc.java 3697136923b ./libjava/java/rmi/activation/ActivationException.java + 443589476b ./libjava/java/rmi/activation/ActivationGroup.java 1497281637b ./libjava/java/rmi/activation/ActivationGroupDesc.java 1688342631b ./libjava/java/rmi/activation/ActivationGroupID.java 2857609657b ./libjava/java/rmi/activation/ActivationID.java 3314676255b ./libjava/java/rmi/activation/ActivationInstantiator.java 331032778b ./libjava/java/rmi/activation/ActivationMonitor.java *************** *** 13532,13574 **** 38902488b ./libjava/java/rmi/activation/Activator.java 2836476823b ./libjava/java/rmi/activation/UnknownGroupException.java 33984796b ./libjava/java/rmi/activation/UnknownObjectException.java - 3218589521b ./libjava/java/rmi/AlreadyBoundException.java - 3062104288b ./libjava/java/rmi/ConnectException.java - 2074608419b ./libjava/java/rmi/ConnectIOException.java 1240298b ./libjava/java/rmi/dgc/DGC.java 3040253205b ./libjava/java/rmi/dgc/Lease.java 4206440135b ./libjava/java/rmi/dgc/VMID.java - 1405989343b ./libjava/java/rmi/MarshalException.java - 626626695b ./libjava/java/rmi/MarshalledObject.java - 2730841917b ./libjava/java/rmi/Naming.java - 1822147110b ./libjava/java/rmi/NoSuchObjectException.java - 309568247b ./libjava/java/rmi/NotBoundException.java 2660899207b ./libjava/java/rmi/registry/LocateRegistry.java - 1399983578b ./libjava/java/rmi/registry/RegistryHandler.java 3447606163b ./libjava/java/rmi/registry/Registry.java ! 2927091976b ./libjava/java/rmi/RemoteException.java ! 3977817460b ./libjava/java/rmi/Remote.java ! 3203646295b ./libjava/java/rmi/RMISecurityException.java ! 1668944357b ./libjava/java/rmi/RMISecurityManager.java ! 2930230515b ./libjava/java/rmi/ServerError.java ! 407423429b ./libjava/java/rmi/ServerException.java 2646105728b ./libjava/java/rmi/server/ExportException.java 1080320338b ./libjava/java/rmi/server/LoaderHandler.java 2675657151b ./libjava/java/rmi/server/LogStream.java 3627631958b ./libjava/java/rmi/server/ObjID.java 1620681979b ./libjava/java/rmi/server/Operation.java - 3007384076b ./libjava/java/rmi/server/RemoteCall.java - 503452378b ./libjava/java/rmi/server/RemoteObject.java - 1057967745b ./libjava/java/rmi/server/RemoteRef.java - 4145601291b ./libjava/java/rmi/server/RemoteServer.java - 2379911685b ./libjava/java/rmi/server/RemoteStub.java 1653790122b ./libjava/java/rmi/server/RMIClassLoader.java 1010028748b ./libjava/java/rmi/server/RMIClassLoaderSpi.java 1381387676b ./libjava/java/rmi/server/RMIClientSocketFactory.java 1355495784b ./libjava/java/rmi/server/RMIFailureHandler.java 637510001b ./libjava/java/rmi/server/RMIServerSocketFactory.java 491843230b ./libjava/java/rmi/server/RMISocketFactory.java ! 611023924b ./libjava/java/rmi/ServerRuntimeException.java 27509570b ./libjava/java/rmi/server/ServerCloneException.java 2514270999b ./libjava/java/rmi/server/ServerNotActiveException.java 3269103800b ./libjava/java/rmi/server/ServerRef.java --- 13620,13647 ---- 38902488b ./libjava/java/rmi/activation/Activator.java 2836476823b ./libjava/java/rmi/activation/UnknownGroupException.java 33984796b ./libjava/java/rmi/activation/UnknownObjectException.java 1240298b ./libjava/java/rmi/dgc/DGC.java 3040253205b ./libjava/java/rmi/dgc/Lease.java 4206440135b ./libjava/java/rmi/dgc/VMID.java 2660899207b ./libjava/java/rmi/registry/LocateRegistry.java 3447606163b ./libjava/java/rmi/registry/Registry.java ! 1399983578b ./libjava/java/rmi/registry/RegistryHandler.java 2646105728b ./libjava/java/rmi/server/ExportException.java 1080320338b ./libjava/java/rmi/server/LoaderHandler.java 2675657151b ./libjava/java/rmi/server/LogStream.java 3627631958b ./libjava/java/rmi/server/ObjID.java 1620681979b ./libjava/java/rmi/server/Operation.java 1653790122b ./libjava/java/rmi/server/RMIClassLoader.java 1010028748b ./libjava/java/rmi/server/RMIClassLoaderSpi.java 1381387676b ./libjava/java/rmi/server/RMIClientSocketFactory.java 1355495784b ./libjava/java/rmi/server/RMIFailureHandler.java 637510001b ./libjava/java/rmi/server/RMIServerSocketFactory.java 491843230b ./libjava/java/rmi/server/RMISocketFactory.java ! 3007384076b ./libjava/java/rmi/server/RemoteCall.java ! 503452378b ./libjava/java/rmi/server/RemoteObject.java ! 1057967745b ./libjava/java/rmi/server/RemoteRef.java ! 4145601291b ./libjava/java/rmi/server/RemoteServer.java ! 2379911685b ./libjava/java/rmi/server/RemoteStub.java 27509570b ./libjava/java/rmi/server/ServerCloneException.java 2514270999b ./libjava/java/rmi/server/ServerNotActiveException.java 3269103800b ./libjava/java/rmi/server/ServerRef.java *************** *** 13579,13625 **** 946423957b ./libjava/java/rmi/server/UID.java 803665402b ./libjava/java/rmi/server/UnicastRemoteObject.java 3786643443b ./libjava/java/rmi/server/Unreferenced.java - 860394651b ./libjava/java/rmi/StubNotFoundException.java - 1208462067b ./libjava/java/rmi/UnexpectedException.java - 891904643b ./libjava/java/rmi/UnknownHostException.java - 33682231b ./libjava/java/rmi/UnmarshalException.java 3377565930b ./libjava/java/security/AccessControlContext.java 645134208b ./libjava/java/security/AccessControlException.java 3588628199b ./libjava/java/security/AccessController.java - 1107973997b ./libjava/java/security/acl/AclEntry.java - 208951186b ./libjava/java/security/acl/Acl.java - 2498147684b ./libjava/java/security/acl/AclNotFoundException.java - 1196419206b ./libjava/java/security/acl/Group.java - 1230038778b ./libjava/java/security/acl/LastOwnerException.java - 3467649811b ./libjava/java/security/acl/NotOwnerException.java - 689449683b ./libjava/java/security/acl/Owner.java - 3427961043b ./libjava/java/security/acl/Permission.java 2206881746b ./libjava/java/security/AlgorithmParameterGenerator.java 3955879194b ./libjava/java/security/AlgorithmParameterGeneratorSpi.java 1605717160b ./libjava/java/security/AlgorithmParameters.java 2891548705b ./libjava/java/security/AlgorithmParametersSpi.java 759553445b ./libjava/java/security/AllPermission.java 1520811337b ./libjava/java/security/BasicPermission.java - 1573863421b ./libjava/java/security/cert/CertificateEncodingException.java - 2026304611b ./libjava/java/security/cert/CertificateException.java - 1582164272b ./libjava/java/security/cert/CertificateExpiredException.java - 1554554645b ./libjava/java/security/cert/CertificateFactory.java - 1773373825b ./libjava/java/security/cert/CertificateFactorySpi.java - 2932971988b ./libjava/java/security/cert/Certificate.java - 3600083148b ./libjava/java/security/cert/CertificateNotYetValidException.java - 1378301308b ./libjava/java/security/cert/CertificateParsingException.java - 947418097b ./libjava/java/security/cert/CertPathBuilderException.java - 670032851b ./libjava/java/security/cert/CertPath.java - 1793252223b ./libjava/java/security/cert/CertPathValidatorException.java - 3879438487b ./libjava/java/security/cert/CertStoreException.java - 4092886020b ./libjava/java/security/cert/CRLException.java - 275997395b ./libjava/java/security/cert/CRL.java 3432481564b ./libjava/java/security/Certificate.java - 3595656724b ./libjava/java/security/cert/X509Certificate.java - 379566121b ./libjava/java/security/cert/X509CRLEntry.java - 838800704b ./libjava/java/security/cert/X509CRL.java - 1496043464b ./libjava/java/security/cert/X509Extension.java - 2128346166b ./libjava/java/security/classpath.security 1577610710b ./libjava/java/security/CodeSource.java 4122990934b ./libjava/java/security/DigestException.java 3484233527b ./libjava/java/security/DigestInputStream.java --- 13652,13667 ---- *************** *** 13629,13689 **** 4093927334b ./libjava/java/security/DummyMessageDigest.java 3197216121b ./libjava/java/security/DummySignature.java 151534961b ./libjava/java/security/GeneralSecurityException.java - 1982594480b ./libjava/java/security/GuardedObject.java 4240398367b ./libjava/java/security/Guard.java 382462013b ./libjava/java/security/Identity.java 3669588150b ./libjava/java/security/IdentityScope.java - 1502191052b ./libjava/java/security/interfaces/DSAKey.java - 931326038b ./libjava/java/security/interfaces/DSAKeyPairGenerator.java - 3412106065b ./libjava/java/security/interfaces/DSAParams.java - 2946643846b ./libjava/java/security/interfaces/DSAPrivateKey.java - 348049866b ./libjava/java/security/interfaces/DSAPublicKey.java - 3186115353b ./libjava/java/security/interfaces/RSAKey.java - 1654913905b ./libjava/java/security/interfaces/RSAPrivateCrtKey.java - 2692733678b ./libjava/java/security/interfaces/RSAPrivateKey.java - 1233397848b ./libjava/java/security/interfaces/RSAPublicKey.java 387743926b ./libjava/java/security/InvalidAlgorithmParameterException.java 1114124902b ./libjava/java/security/InvalidKeyException.java 842557512b ./libjava/java/security/InvalidParameterException.java 2538597255b ./libjava/java/security/KeyException.java 3556171286b ./libjava/java/security/KeyFactory.java 1081989305b ./libjava/java/security/KeyFactorySpi.java - 2104909133b ./libjava/java/security/Key.java 3873869696b ./libjava/java/security/KeyManagementException.java 2733769867b ./libjava/java/security/KeyPairGenerator.java 2630188502b ./libjava/java/security/KeyPairGeneratorSpi.java - 3788361193b ./libjava/java/security/KeyPair.java - 3516921498b ./libjava/java/security/KeyStoreException.java 2908170181b ./libjava/java/security/KeyStore.java 803045781b ./libjava/java/security/KeyStoreSpi.java - 464741950b ./libjava/java/security/libgcj.security 2785763200b ./libjava/java/security/MessageDigest.java 3540748562b ./libjava/java/security/MessageDigestSpi.java 2811830407b ./libjava/java/security/NoSuchAlgorithmException.java 2194883871b ./libjava/java/security/NoSuchProviderException.java - 4179048292b ./libjava/java/security/PermissionCollection.java 3216869363b ./libjava/java/security/Permission.java 2966145350b ./libjava/java/security/Permissions.java 19046364b ./libjava/java/security/Policy.java 2295363248b ./libjava/java/security/Principal.java 4182367670b ./libjava/java/security/PrivateKey.java - 3035557964b ./libjava/java/security/PrivilegedActionException.java 845620376b ./libjava/java/security/PrivilegedAction.java 751056497b ./libjava/java/security/PrivilegedExceptionAction.java 2659210574b ./libjava/java/security/ProtectionDomain.java - 2801902693b ./libjava/java/security/ProviderException.java 2816249636b ./libjava/java/security/Provider.java 3182669628b ./libjava/java/security/PublicKey.java 3455569078b ./libjava/java/security/SecureClassLoader.java 872681494b ./libjava/java/security/SecureRandom.java 1398410059b ./libjava/java/security/SecureRandomSpi.java 2332152689b ./libjava/java/security/Security.java 143681966b ./libjava/java/security/SecurityPermission.java - 2750720587b ./libjava/java/security/SignatureException.java 1667712372b ./libjava/java/security/Signature.java 2850222648b ./libjava/java/security/SignatureSpi.java 985912182b ./libjava/java/security/SignedObject.java 3719230281b ./libjava/java/security/Signer.java 822101390b ./libjava/java/security/spec/AlgorithmParameterSpec.java 957943062b ./libjava/java/security/spec/DSAParameterSpec.java 3690614578b ./libjava/java/security/spec/DSAPrivateKeySpec.java --- 13671,13760 ---- 4093927334b ./libjava/java/security/DummyMessageDigest.java 3197216121b ./libjava/java/security/DummySignature.java 151534961b ./libjava/java/security/GeneralSecurityException.java 4240398367b ./libjava/java/security/Guard.java + 1982594480b ./libjava/java/security/GuardedObject.java 382462013b ./libjava/java/security/Identity.java 3669588150b ./libjava/java/security/IdentityScope.java 387743926b ./libjava/java/security/InvalidAlgorithmParameterException.java 1114124902b ./libjava/java/security/InvalidKeyException.java 842557512b ./libjava/java/security/InvalidParameterException.java + 2104909133b ./libjava/java/security/Key.java 2538597255b ./libjava/java/security/KeyException.java 3556171286b ./libjava/java/security/KeyFactory.java 1081989305b ./libjava/java/security/KeyFactorySpi.java 3873869696b ./libjava/java/security/KeyManagementException.java + 3788361193b ./libjava/java/security/KeyPair.java 2733769867b ./libjava/java/security/KeyPairGenerator.java 2630188502b ./libjava/java/security/KeyPairGeneratorSpi.java 2908170181b ./libjava/java/security/KeyStore.java + 3516921498b ./libjava/java/security/KeyStoreException.java 803045781b ./libjava/java/security/KeyStoreSpi.java 2785763200b ./libjava/java/security/MessageDigest.java 3540748562b ./libjava/java/security/MessageDigestSpi.java 2811830407b ./libjava/java/security/NoSuchAlgorithmException.java 2194883871b ./libjava/java/security/NoSuchProviderException.java 3216869363b ./libjava/java/security/Permission.java + 4179048292b ./libjava/java/security/PermissionCollection.java 2966145350b ./libjava/java/security/Permissions.java 19046364b ./libjava/java/security/Policy.java 2295363248b ./libjava/java/security/Principal.java 4182367670b ./libjava/java/security/PrivateKey.java 845620376b ./libjava/java/security/PrivilegedAction.java + 3035557964b ./libjava/java/security/PrivilegedActionException.java 751056497b ./libjava/java/security/PrivilegedExceptionAction.java 2659210574b ./libjava/java/security/ProtectionDomain.java 2816249636b ./libjava/java/security/Provider.java + 2801902693b ./libjava/java/security/ProviderException.java 3182669628b ./libjava/java/security/PublicKey.java 3455569078b ./libjava/java/security/SecureClassLoader.java 872681494b ./libjava/java/security/SecureRandom.java 1398410059b ./libjava/java/security/SecureRandomSpi.java 2332152689b ./libjava/java/security/Security.java 143681966b ./libjava/java/security/SecurityPermission.java 1667712372b ./libjava/java/security/Signature.java + 2750720587b ./libjava/java/security/SignatureException.java 2850222648b ./libjava/java/security/SignatureSpi.java 985912182b ./libjava/java/security/SignedObject.java 3719230281b ./libjava/java/security/Signer.java + 2617159890b ./libjava/java/security/UnrecoverableKeyException.java + 2643960988b ./libjava/java/security/UnresolvedPermission.java + 208951186b ./libjava/java/security/acl/Acl.java + 1107973997b ./libjava/java/security/acl/AclEntry.java + 2498147684b ./libjava/java/security/acl/AclNotFoundException.java + 1196419206b ./libjava/java/security/acl/Group.java + 1230038778b ./libjava/java/security/acl/LastOwnerException.java + 3467649811b ./libjava/java/security/acl/NotOwnerException.java + 689449683b ./libjava/java/security/acl/Owner.java + 3427961043b ./libjava/java/security/acl/Permission.java + 275997395b ./libjava/java/security/cert/CRL.java + 4092886020b ./libjava/java/security/cert/CRLException.java + 670032851b ./libjava/java/security/cert/CertPath.java + 947418097b ./libjava/java/security/cert/CertPathBuilderException.java + 1793252223b ./libjava/java/security/cert/CertPathValidatorException.java + 3879438487b ./libjava/java/security/cert/CertStoreException.java + 2932971988b ./libjava/java/security/cert/Certificate.java + 1573863421b ./libjava/java/security/cert/CertificateEncodingException.java + 2026304611b ./libjava/java/security/cert/CertificateException.java + 1582164272b ./libjava/java/security/cert/CertificateExpiredException.java + 1554554645b ./libjava/java/security/cert/CertificateFactory.java + 1773373825b ./libjava/java/security/cert/CertificateFactorySpi.java + 3600083148b ./libjava/java/security/cert/CertificateNotYetValidException.java + 1378301308b ./libjava/java/security/cert/CertificateParsingException.java + 838800704b ./libjava/java/security/cert/X509CRL.java + 379566121b ./libjava/java/security/cert/X509CRLEntry.java + 3595656724b ./libjava/java/security/cert/X509Certificate.java + 1496043464b ./libjava/java/security/cert/X509Extension.java + 2128346166b ./libjava/java/security/classpath.security + 1502191052b ./libjava/java/security/interfaces/DSAKey.java + 931326038b ./libjava/java/security/interfaces/DSAKeyPairGenerator.java + 3412106065b ./libjava/java/security/interfaces/DSAParams.java + 2946643846b ./libjava/java/security/interfaces/DSAPrivateKey.java + 348049866b ./libjava/java/security/interfaces/DSAPublicKey.java + 3186115353b ./libjava/java/security/interfaces/RSAKey.java + 1654913905b ./libjava/java/security/interfaces/RSAPrivateCrtKey.java + 2692733678b ./libjava/java/security/interfaces/RSAPrivateKey.java + 1233397848b ./libjava/java/security/interfaces/RSAPublicKey.java + 464741950b ./libjava/java/security/libgcj.security 822101390b ./libjava/java/security/spec/AlgorithmParameterSpec.java 957943062b ./libjava/java/security/spec/DSAParameterSpec.java 3690614578b ./libjava/java/security/spec/DSAPrivateKeySpec.java *************** *** 13698,13713 **** 2927717266b ./libjava/java/security/spec/RSAPrivateKeySpec.java 379229426b ./libjava/java/security/spec/RSAPublicKeySpec.java 2631607563b ./libjava/java/security/spec/X509EncodedKeySpec.java - 2617159890b ./libjava/java/security/UnrecoverableKeyException.java - 2643960988b ./libjava/java/security/UnresolvedPermission.java 2075396606b ./libjava/java/sql/Array.java 4157405111b ./libjava/java/sql/BatchUpdateException.java 2586989813b ./libjava/java/sql/Blob.java 1692384713b ./libjava/java/sql/CallableStatement.java 2298223471b ./libjava/java/sql/Clob.java 3941715616b ./libjava/java/sql/Connection.java - 4102002106b ./libjava/java/sql/DatabaseMetaData.java 336101031b ./libjava/java/sql/DataTruncation.java 799054576b ./libjava/java/sql/Date.java 3311253236b ./libjava/java/sql/Driver.java 337493618b ./libjava/java/sql/DriverManager.java --- 13769,13782 ---- 2927717266b ./libjava/java/security/spec/RSAPrivateKeySpec.java 379229426b ./libjava/java/security/spec/RSAPublicKeySpec.java 2631607563b ./libjava/java/security/spec/X509EncodedKeySpec.java 2075396606b ./libjava/java/sql/Array.java 4157405111b ./libjava/java/sql/BatchUpdateException.java 2586989813b ./libjava/java/sql/Blob.java 1692384713b ./libjava/java/sql/CallableStatement.java 2298223471b ./libjava/java/sql/Clob.java 3941715616b ./libjava/java/sql/Connection.java 336101031b ./libjava/java/sql/DataTruncation.java + 4102002106b ./libjava/java/sql/DatabaseMetaData.java 799054576b ./libjava/java/sql/Date.java 3311253236b ./libjava/java/sql/Driver.java 337493618b ./libjava/java/sql/DriverManager.java *************** *** 13717,13729 **** 3020811324b ./libjava/java/sql/Ref.java 3316779926b ./libjava/java/sql/ResultSet.java 2507059794b ./libjava/java/sql/ResultSetMetaData.java - 761750991b ./libjava/java/sql/Savepoint.java 2956635204b ./libjava/java/sql/SQLData.java 3891244003b ./libjava/java/sql/SQLException.java 4001819294b ./libjava/java/sql/SQLInput.java 2816930046b ./libjava/java/sql/SQLOutput.java 922288344b ./libjava/java/sql/SQLPermission.java 2408507038b ./libjava/java/sql/SQLWarning.java 2872208133b ./libjava/java/sql/Statement.java 2296283265b ./libjava/java/sql/Struct.java 1919034406b ./libjava/java/sql/Time.java --- 13786,13798 ---- 3020811324b ./libjava/java/sql/Ref.java 3316779926b ./libjava/java/sql/ResultSet.java 2507059794b ./libjava/java/sql/ResultSetMetaData.java 2956635204b ./libjava/java/sql/SQLData.java 3891244003b ./libjava/java/sql/SQLException.java 4001819294b ./libjava/java/sql/SQLInput.java 2816930046b ./libjava/java/sql/SQLOutput.java 922288344b ./libjava/java/sql/SQLPermission.java 2408507038b ./libjava/java/sql/SQLWarning.java + 761750991b ./libjava/java/sql/Savepoint.java 2872208133b ./libjava/java/sql/Statement.java 2296283265b ./libjava/java/sql/Struct.java 1919034406b ./libjava/java/sql/Time.java *************** *** 13731,13738 **** 3153435951b ./libjava/java/sql/Types.java 2231202473b ./libjava/java/text/Annotation.java 459822626b ./libjava/java/text/AttributedCharacterIterator.java - 1193044303b ./libjava/java/text/AttributedStringIterator.java 1309664747b ./libjava/java/text/AttributedString.java 2390211842b ./libjava/java/text/BreakIterator.java 558207429b ./libjava/java/text/CharacterIterator.java 2514336238b ./libjava/java/text/ChoiceFormat.java --- 13800,13807 ---- 3153435951b ./libjava/java/sql/Types.java 2231202473b ./libjava/java/text/Annotation.java 459822626b ./libjava/java/text/AttributedCharacterIterator.java 1309664747b ./libjava/java/text/AttributedString.java + 1193044303b ./libjava/java/text/AttributedStringIterator.java 2390211842b ./libjava/java/text/BreakIterator.java 558207429b ./libjava/java/text/CharacterIterator.java 2514336238b ./libjava/java/text/ChoiceFormat.java *************** *** 13746,13758 **** 2519664708b ./libjava/java/text/FieldPosition.java 489030362b ./libjava/java/text/Format.java 41364597b ./libjava/java/text/MessageFormat.java - 1224532863b ./libjava/java/text/natCollator.cc 2380468989b ./libjava/java/text/NumberFormat.java 2098004750b ./libjava/java/text/ParseException.java 807650843b ./libjava/java/text/ParsePosition.java 2113083680b ./libjava/java/text/RuleBasedCollator.java 1428855839b ./libjava/java/text/SimpleDateFormat.java 253040983b ./libjava/java/text/StringCharacterIterator.java 2532876071b ./libjava/java/util/AbstractCollection.java 3779992323b ./libjava/java/util/AbstractList.java 296089431b ./libjava/java/util/AbstractMap.java --- 13815,13827 ---- 2519664708b ./libjava/java/text/FieldPosition.java 489030362b ./libjava/java/text/Format.java 41364597b ./libjava/java/text/MessageFormat.java 2380468989b ./libjava/java/text/NumberFormat.java 2098004750b ./libjava/java/text/ParseException.java 807650843b ./libjava/java/text/ParsePosition.java 2113083680b ./libjava/java/text/RuleBasedCollator.java 1428855839b ./libjava/java/text/SimpleDateFormat.java 253040983b ./libjava/java/text/StringCharacterIterator.java + 1224532863b ./libjava/java/text/natCollator.cc 2532876071b ./libjava/java/util/AbstractCollection.java 3779992323b ./libjava/java/util/AbstractList.java 296089431b ./libjava/java/util/AbstractMap.java *************** *** 13779,13814 **** 2697630490b ./libjava/java/util/Hashtable.java 3461596666b ./libjava/java/util/IdentityHashMap.java 4026479457b ./libjava/java/util/Iterator.java - 3386565408b ./libjava/java/util/jar/Attributes.java - 3242774103b ./libjava/java/util/jar/JarEntry.java - 765503455b ./libjava/java/util/jar/JarException.java - 2270300450b ./libjava/java/util/jar/JarFile.java - 3108700190b ./libjava/java/util/jar/JarInputStream.java - 3060414122b ./libjava/java/util/jar/JarOutputStream.java - 870445261b ./libjava/java/util/jar/Manifest.java 875979038b ./libjava/java/util/LinkedHashMap.java 1624117899b ./libjava/java/util/LinkedHashSet.java 2208127961b ./libjava/java/util/LinkedList.java - 751985718b ./libjava/java/util/ListIterator.java 427533929b ./libjava/java/util/List.java 263544433b ./libjava/java/util/ListResourceBundle.java 2598541840b ./libjava/java/util/Locale.java 4001674772b ./libjava/java/util/Map.java 365564519b ./libjava/java/util/MissingResourceException.java - 974643411b ./libjava/java/util/natResourceBundle.cc - 1412254651b ./libjava/java/util/natTimeZone.cc 1572696779b ./libjava/java/util/NoSuchElementException.java 925267169b ./libjava/java/util/Observable.java 3089043170b ./libjava/java/util/Observer.java 3155794945b ./libjava/java/util/Properties.java - 1820991145b ./libjava/java/util/PropertyPermissionCollection.java 2526711315b ./libjava/java/util/PropertyPermission.java 1277794645b ./libjava/java/util/PropertyResourceBundle.java - 2707837116b ./libjava/java/util/RandomAccess.java 1617602218b ./libjava/java/util/Random.java ! 1655052431b ./libjava/java/util/regex/Matcher.java ! 2577874110b ./libjava/java/util/regex/Pattern.java ! 1273083159b ./libjava/java/util/regex/PatternSyntaxException.java 3772649199b ./libjava/java/util/ResourceBundle.java 2326466944b ./libjava/java/util/Set.java 2204545834b ./libjava/java/util/SimpleTimeZone.java --- 13848,13871 ---- 2697630490b ./libjava/java/util/Hashtable.java 3461596666b ./libjava/java/util/IdentityHashMap.java 4026479457b ./libjava/java/util/Iterator.java 875979038b ./libjava/java/util/LinkedHashMap.java 1624117899b ./libjava/java/util/LinkedHashSet.java 2208127961b ./libjava/java/util/LinkedList.java 427533929b ./libjava/java/util/List.java + 751985718b ./libjava/java/util/ListIterator.java 263544433b ./libjava/java/util/ListResourceBundle.java 2598541840b ./libjava/java/util/Locale.java 4001674772b ./libjava/java/util/Map.java 365564519b ./libjava/java/util/MissingResourceException.java 1572696779b ./libjava/java/util/NoSuchElementException.java 925267169b ./libjava/java/util/Observable.java 3089043170b ./libjava/java/util/Observer.java 3155794945b ./libjava/java/util/Properties.java 2526711315b ./libjava/java/util/PropertyPermission.java + 1820991145b ./libjava/java/util/PropertyPermissionCollection.java 1277794645b ./libjava/java/util/PropertyResourceBundle.java 1617602218b ./libjava/java/util/Random.java ! 2707837116b ./libjava/java/util/RandomAccess.java 3772649199b ./libjava/java/util/ResourceBundle.java 2326466944b ./libjava/java/util/Set.java 2204545834b ./libjava/java/util/SimpleTimeZone.java *************** *** 13816,13849 **** 2357787438b ./libjava/java/util/SortedSet.java 1274465736b ./libjava/java/util/Stack.java 3650971754b ./libjava/java/util/StringTokenizer.java 3482719698b ./libjava/java/util/Timer.java 3304049024b ./libjava/java/util/TimerTask.java - 2454222183b ./libjava/java/util/TimeZone.java 2374142028b ./libjava/java/util/TooManyListenersException.java 1629472097b ./libjava/java/util/TreeMap.java 3277604160b ./libjava/java/util/TreeSet.java 3512853982b ./libjava/java/util/Vector.java 2860839520b ./libjava/java/util/WeakHashMap.java 2655847765b ./libjava/java/util/zip/Adler32.java 4095201247b ./libjava/java/util/zip/CheckedInputStream.java 1148292706b ./libjava/java/util/zip/CheckedOutputStream.java 2267421579b ./libjava/java/util/zip/Checksum.java - 2436561403b ./libjava/java/util/zip/CRC32.java 3170102970b ./libjava/java/util/zip/DataFormatException.java 199330457b ./libjava/java/util/zip/Deflater.java 3336807235b ./libjava/java/util/zip/DeflaterOutputStream.java 4173550682b ./libjava/java/util/zip/GZIPInputStream.java 371303032b ./libjava/java/util/zip/GZIPOutputStream.java - 436970631b ./libjava/java/util/zip/InflaterInputStream.java 2396996601b ./libjava/java/util/zip/Inflater.java ! 1592453423b ./libjava/java/util/zip/natDeflater.cc ! 3706907962b ./libjava/java/util/zip/natInflater.cc 1799848574b ./libjava/java/util/zip/ZipConstants.java 1805763671b ./libjava/java/util/zip/ZipEntry.java 711961929b ./libjava/java/util/zip/ZipException.java 848210062b ./libjava/java/util/zip/ZipFile.java 3362483155b ./libjava/java/util/zip/ZipInputStream.java 1243431937b ./libjava/java/util/zip/ZipOutputStream.java 765026405b ./libjava/javax/accessibility/AccessibleAction.java 2410157757b ./libjava/javax/accessibility/AccessibleBundle.java 476875933b ./libjava/javax/accessibility/AccessibleComponent.java --- 13873,13919 ---- 2357787438b ./libjava/java/util/SortedSet.java 1274465736b ./libjava/java/util/Stack.java 3650971754b ./libjava/java/util/StringTokenizer.java + 2454222183b ./libjava/java/util/TimeZone.java 3482719698b ./libjava/java/util/Timer.java 3304049024b ./libjava/java/util/TimerTask.java 2374142028b ./libjava/java/util/TooManyListenersException.java 1629472097b ./libjava/java/util/TreeMap.java 3277604160b ./libjava/java/util/TreeSet.java 3512853982b ./libjava/java/util/Vector.java 2860839520b ./libjava/java/util/WeakHashMap.java + 3386565408b ./libjava/java/util/jar/Attributes.java + 3242774103b ./libjava/java/util/jar/JarEntry.java + 765503455b ./libjava/java/util/jar/JarException.java + 2270300450b ./libjava/java/util/jar/JarFile.java + 3108700190b ./libjava/java/util/jar/JarInputStream.java + 3060414122b ./libjava/java/util/jar/JarOutputStream.java + 870445261b ./libjava/java/util/jar/Manifest.java + 974643411b ./libjava/java/util/natResourceBundle.cc + 1412254651b ./libjava/java/util/natTimeZone.cc + 1655052431b ./libjava/java/util/regex/Matcher.java + 2577874110b ./libjava/java/util/regex/Pattern.java + 1273083159b ./libjava/java/util/regex/PatternSyntaxException.java 2655847765b ./libjava/java/util/zip/Adler32.java + 2436561403b ./libjava/java/util/zip/CRC32.java 4095201247b ./libjava/java/util/zip/CheckedInputStream.java 1148292706b ./libjava/java/util/zip/CheckedOutputStream.java 2267421579b ./libjava/java/util/zip/Checksum.java 3170102970b ./libjava/java/util/zip/DataFormatException.java 199330457b ./libjava/java/util/zip/Deflater.java 3336807235b ./libjava/java/util/zip/DeflaterOutputStream.java 4173550682b ./libjava/java/util/zip/GZIPInputStream.java 371303032b ./libjava/java/util/zip/GZIPOutputStream.java 2396996601b ./libjava/java/util/zip/Inflater.java ! 436970631b ./libjava/java/util/zip/InflaterInputStream.java 1799848574b ./libjava/java/util/zip/ZipConstants.java 1805763671b ./libjava/java/util/zip/ZipEntry.java 711961929b ./libjava/java/util/zip/ZipException.java 848210062b ./libjava/java/util/zip/ZipFile.java 3362483155b ./libjava/java/util/zip/ZipInputStream.java 1243431937b ./libjava/java/util/zip/ZipOutputStream.java + 1592453423b ./libjava/java/util/zip/natDeflater.cc + 3706907962b ./libjava/java/util/zip/natInflater.cc + 3260478420b ./libjava/javax/accessibility/Accessible.java 765026405b ./libjava/javax/accessibility/AccessibleAction.java 2410157757b ./libjava/javax/accessibility/AccessibleBundle.java 476875933b ./libjava/javax/accessibility/AccessibleComponent.java *************** *** 13854,13860 **** 488565b ./libjava/javax/accessibility/AccessibleHyperlink.java 768530314b ./libjava/javax/accessibility/AccessibleHypertext.java 576087898b ./libjava/javax/accessibility/AccessibleIcon.java - 3260478420b ./libjava/javax/accessibility/Accessible.java 3757185563b ./libjava/javax/accessibility/AccessibleKeyBinding.java 1604114229b ./libjava/javax/accessibility/AccessibleRelation.java 2885888465b ./libjava/javax/accessibility/AccessibleRelationSet.java --- 13924,13929 ---- *************** *** 13878,13885 **** 924578413b ./libjava/javax/naming/ConfigurationException.java 4230315303b ./libjava/javax/naming/Context.java 3512961574b ./libjava/javax/naming/ContextNotEmptyException.java ! 2653155353b ./libjava/javax/naming/directory/AttributeInUseException.java 2453832758b ./libjava/javax/naming/directory/Attribute.java 123657565b ./libjava/javax/naming/directory/AttributeModificationException.java 1050669936b ./libjava/javax/naming/directory/Attributes.java 2068899045b ./libjava/javax/naming/directory/BasicAttribute.java --- 13947,13984 ---- 924578413b ./libjava/javax/naming/ConfigurationException.java 4230315303b ./libjava/javax/naming/Context.java 3512961574b ./libjava/javax/naming/ContextNotEmptyException.java ! 1973128135b ./libjava/javax/naming/InitialContext.java ! 361736140b ./libjava/javax/naming/InsufficientResourcesException.java ! 1016595152b ./libjava/javax/naming/InterruptedNamingException.java ! 4165253207b ./libjava/javax/naming/InvalidNameException.java ! 2434068408b ./libjava/javax/naming/LimitExceededException.java ! 2330199926b ./libjava/javax/naming/LinkException.java ! 22978149b ./libjava/javax/naming/LinkLoopException.java ! 3487766619b ./libjava/javax/naming/LinkRef.java ! 3430693620b ./libjava/javax/naming/MalformedLinkException.java ! 1975364309b ./libjava/javax/naming/Name.java ! 1556763091b ./libjava/javax/naming/NameAlreadyBoundException.java ! 572156631b ./libjava/javax/naming/NameClassPair.java ! 2174471505b ./libjava/javax/naming/NameNotFoundException.java ! 1201633991b ./libjava/javax/naming/NameParser.java ! 3098518773b ./libjava/javax/naming/NamingEnumeration.java ! 2282904476b ./libjava/javax/naming/NamingException.java ! 729175013b ./libjava/javax/naming/NamingSecurityException.java ! 777408494b ./libjava/javax/naming/NoInitialContextException.java ! 3635890215b ./libjava/javax/naming/NoPermissionException.java ! 2088749355b ./libjava/javax/naming/NotContextException.java ! 2687124965b ./libjava/javax/naming/OperationNotSupportedException.java ! 1125863632b ./libjava/javax/naming/PartialResultException.java ! 3668063304b ./libjava/javax/naming/RefAddr.java ! 4142766100b ./libjava/javax/naming/Reference.java ! 1025138289b ./libjava/javax/naming/Referenceable.java ! 797780091b ./libjava/javax/naming/ReferralException.java ! 3704681067b ./libjava/javax/naming/ServiceUnavailableException.java ! 604735613b ./libjava/javax/naming/SizeLimitExceededException.java ! 255272768b ./libjava/javax/naming/StringRefAddr.java ! 1396767478b ./libjava/javax/naming/TimeLimitExceededException.java 2453832758b ./libjava/javax/naming/directory/Attribute.java + 2653155353b ./libjava/javax/naming/directory/AttributeInUseException.java 123657565b ./libjava/javax/naming/directory/AttributeModificationException.java 1050669936b ./libjava/javax/naming/directory/Attributes.java 2068899045b ./libjava/javax/naming/directory/BasicAttribute.java *************** *** 13887,13894 **** 125937778b ./libjava/javax/naming/directory/DirContext.java 509989331b ./libjava/javax/naming/directory/InitialDirContext.java 2025773161b ./libjava/javax/naming/directory/InvalidAttributeIdentifierException.java - 1459642370b ./libjava/javax/naming/directory/InvalidAttributesException.java 441409977b ./libjava/javax/naming/directory/InvalidAttributeValueException.java 3061973789b ./libjava/javax/naming/directory/InvalidSearchControlsException.java 4065931623b ./libjava/javax/naming/directory/InvalidSearchFilterException.java 3033329141b ./libjava/javax/naming/directory/ModificationItem.java --- 13986,13993 ---- 125937778b ./libjava/javax/naming/directory/DirContext.java 509989331b ./libjava/javax/naming/directory/InitialDirContext.java 2025773161b ./libjava/javax/naming/directory/InvalidAttributeIdentifierException.java 441409977b ./libjava/javax/naming/directory/InvalidAttributeValueException.java + 1459642370b ./libjava/javax/naming/directory/InvalidAttributesException.java 3061973789b ./libjava/javax/naming/directory/InvalidSearchControlsException.java 4065931623b ./libjava/javax/naming/directory/InvalidSearchFilterException.java 3033329141b ./libjava/javax/naming/directory/ModificationItem.java *************** *** 13903,13968 **** 3608644761b ./libjava/javax/naming/event/NamingExceptionEvent.java 528046180b ./libjava/javax/naming/event/NamingListener.java 290931993b ./libjava/javax/naming/event/ObjectChangeListener.java - 1973128135b ./libjava/javax/naming/InitialContext.java - 361736140b ./libjava/javax/naming/InsufficientResourcesException.java - 1016595152b ./libjava/javax/naming/InterruptedNamingException.java - 4165253207b ./libjava/javax/naming/InvalidNameException.java - 774117726b ./libjava/javax/naming/ldap/ControlFactory.java 455520386b ./libjava/javax/naming/ldap/Control.java 3343298056b ./libjava/javax/naming/ldap/ExtendedRequest.java 3141761690b ./libjava/javax/naming/ldap/ExtendedResponse.java 2604682024b ./libjava/javax/naming/ldap/HasControls.java 3808021639b ./libjava/javax/naming/ldap/InitialLdapContext.java 1851822730b ./libjava/javax/naming/ldap/LdapContext.java 311247848b ./libjava/javax/naming/ldap/LdapReferralException.java - 1167693247b ./libjava/javax/naming/ldap/UnsolicitedNotificationEvent.java 1522403085b ./libjava/javax/naming/ldap/UnsolicitedNotification.java 3381766536b ./libjava/javax/naming/ldap/UnsolicitedNotificationListener.java - 2434068408b ./libjava/javax/naming/LimitExceededException.java - 2330199926b ./libjava/javax/naming/LinkException.java - 22978149b ./libjava/javax/naming/LinkLoopException.java - 3487766619b ./libjava/javax/naming/LinkRef.java - 3430693620b ./libjava/javax/naming/MalformedLinkException.java - 1556763091b ./libjava/javax/naming/NameAlreadyBoundException.java - 572156631b ./libjava/javax/naming/NameClassPair.java - 1975364309b ./libjava/javax/naming/Name.java - 2174471505b ./libjava/javax/naming/NameNotFoundException.java - 1201633991b ./libjava/javax/naming/NameParser.java - 3098518773b ./libjava/javax/naming/NamingEnumeration.java - 2282904476b ./libjava/javax/naming/NamingException.java - 729175013b ./libjava/javax/naming/NamingSecurityException.java - 777408494b ./libjava/javax/naming/NoInitialContextException.java - 3635890215b ./libjava/javax/naming/NoPermissionException.java - 2088749355b ./libjava/javax/naming/NotContextException.java - 2687124965b ./libjava/javax/naming/OperationNotSupportedException.java - 1125863632b ./libjava/javax/naming/PartialResultException.java - 3668063304b ./libjava/javax/naming/RefAddr.java - 1025138289b ./libjava/javax/naming/Referenceable.java - 4142766100b ./libjava/javax/naming/Reference.java - 797780091b ./libjava/javax/naming/ReferralException.java - 3704681067b ./libjava/javax/naming/ServiceUnavailableException.java - 604735613b ./libjava/javax/naming/SizeLimitExceededException.java - 999308001b ./libjava/javax/naming/spi/DirectoryManager.java 2081706856b ./libjava/javax/naming/spi/DirObjectFactory.java 1400574417b ./libjava/javax/naming/spi/DirStateFactory.java ! 3735459034b ./libjava/javax/naming/spi/InitialContextFactoryBuilder.java 3811257042b ./libjava/javax/naming/spi/InitialContextFactory.java 375852986b ./libjava/javax/naming/spi/NamingManager.java - 148845931b ./libjava/javax/naming/spi/ObjectFactoryBuilder.java 2981932521b ./libjava/javax/naming/spi/ObjectFactory.java 1013699198b ./libjava/javax/naming/spi/ResolveResult.java 77448015b ./libjava/javax/naming/spi/Resolver.java 1114754724b ./libjava/javax/naming/spi/StateFactory.java - 255272768b ./libjava/javax/naming/StringRefAddr.java - 1396767478b ./libjava/javax/naming/TimeLimitExceededException.java 1598924264b ./libjava/javax/sql/ConnectionEvent.java 324509581b ./libjava/javax/sql/ConnectionEventListener.java 3183943466b ./libjava/javax/sql/ConnectionPoolDataSource.java 1903361066b ./libjava/javax/sql/DataSource.java 312702808b ./libjava/javax/sql/PooledConnection.java 3740486686b ./libjava/javax/sql/RowSetEvent.java 233288925b ./libjava/javax/sql/RowSetInternal.java - 142780728b ./libjava/javax/sql/RowSet.java 3398926084b ./libjava/javax/sql/RowSetListener.java 148314645b ./libjava/javax/sql/RowSetMetaData.java 3733308273b ./libjava/javax/sql/RowSetReader.java --- 14002,14037 ---- 3608644761b ./libjava/javax/naming/event/NamingExceptionEvent.java 528046180b ./libjava/javax/naming/event/NamingListener.java 290931993b ./libjava/javax/naming/event/ObjectChangeListener.java 455520386b ./libjava/javax/naming/ldap/Control.java + 774117726b ./libjava/javax/naming/ldap/ControlFactory.java 3343298056b ./libjava/javax/naming/ldap/ExtendedRequest.java 3141761690b ./libjava/javax/naming/ldap/ExtendedResponse.java 2604682024b ./libjava/javax/naming/ldap/HasControls.java 3808021639b ./libjava/javax/naming/ldap/InitialLdapContext.java 1851822730b ./libjava/javax/naming/ldap/LdapContext.java 311247848b ./libjava/javax/naming/ldap/LdapReferralException.java 1522403085b ./libjava/javax/naming/ldap/UnsolicitedNotification.java + 1167693247b ./libjava/javax/naming/ldap/UnsolicitedNotificationEvent.java 3381766536b ./libjava/javax/naming/ldap/UnsolicitedNotificationListener.java 2081706856b ./libjava/javax/naming/spi/DirObjectFactory.java 1400574417b ./libjava/javax/naming/spi/DirStateFactory.java ! 999308001b ./libjava/javax/naming/spi/DirectoryManager.java 3811257042b ./libjava/javax/naming/spi/InitialContextFactory.java + 3735459034b ./libjava/javax/naming/spi/InitialContextFactoryBuilder.java 375852986b ./libjava/javax/naming/spi/NamingManager.java 2981932521b ./libjava/javax/naming/spi/ObjectFactory.java + 148845931b ./libjava/javax/naming/spi/ObjectFactoryBuilder.java 1013699198b ./libjava/javax/naming/spi/ResolveResult.java 77448015b ./libjava/javax/naming/spi/Resolver.java 1114754724b ./libjava/javax/naming/spi/StateFactory.java 1598924264b ./libjava/javax/sql/ConnectionEvent.java 324509581b ./libjava/javax/sql/ConnectionEventListener.java 3183943466b ./libjava/javax/sql/ConnectionPoolDataSource.java 1903361066b ./libjava/javax/sql/DataSource.java 312702808b ./libjava/javax/sql/PooledConnection.java + 142780728b ./libjava/javax/sql/RowSet.java 3740486686b ./libjava/javax/sql/RowSetEvent.java 233288925b ./libjava/javax/sql/RowSetInternal.java 3398926084b ./libjava/javax/sql/RowSetListener.java 148314645b ./libjava/javax/sql/RowSetMetaData.java 3733308273b ./libjava/javax/sql/RowSetReader.java *************** *** 13976,13991 **** 2887051295b ./libjava/javax/swing/AbstractSet.java 221499530b ./libjava/javax/swing/Action.java 3236289112b ./libjava/javax/swing/ActionMap.java - 1130131950b ./libjava/javax/swing/border/AbstractBorder.java - 3216239309b ./libjava/javax/swing/border/BevelBorder.java - 4254773811b ./libjava/javax/swing/border/Border.java - 3643497984b ./libjava/javax/swing/border/CompoundBorder.java - 3769723158b ./libjava/javax/swing/border/EmptyBorder.java - 3557339618b ./libjava/javax/swing/border/EtchedBorder.java 202788741b ./libjava/javax/swing/BorderFactory.java - 1880010849b ./libjava/javax/swing/border/LineBorder.java - 456207290b ./libjava/javax/swing/border/MatteBorder.java - 1708340786b ./libjava/javax/swing/border/TitledBorder.java 288440758b ./libjava/javax/swing/BoundedRangeModel.java 2184534331b ./libjava/javax/swing/Box.java 1616609332b ./libjava/javax/swing/BoxLayout.java --- 14045,14051 ---- *************** *** 13993,14002 **** 966775533b ./libjava/javax/swing/ButtonModel.java 3937420799b ./libjava/javax/swing/CellEditor.java 34904380b ./libjava/javax/swing/CellRendererPane.java - 2685544675b ./libjava/javax/swing/colorchooser/AbstractColorChooserPanel.java - 3107430868b ./libjava/javax/swing/colorchooser/ColorChooserComponentFactory.java - 3410433532b ./libjava/javax/swing/colorchooser/ColorSelectionModel.java - 4078086360b ./libjava/javax/swing/colorchooser/DefaultColorSelectionModel.java 1898273114b ./libjava/javax/swing/ComboBoxEditor.java 1783711525b ./libjava/javax/swing/ComboBoxModel.java 3369516448b ./libjava/javax/swing/ComponentInputMap.java --- 14053,14058 ---- *************** *** 14013,14064 **** 4237859972b ./libjava/javax/swing/DefaultListSelectionModel.java 3364206517b ./libjava/javax/swing/DefaultSingleSelectionModel.java 3834225171b ./libjava/javax/swing/DesktopManager.java - 1706792490b ./libjava/javax/swing/event/AncestorEvent.java - 3700501714b ./libjava/javax/swing/event/AncestorListener.java - 1382227892b ./libjava/javax/swing/event/CaretEvent.java - 3521875215b ./libjava/javax/swing/event/CaretListener.java - 2883157052b ./libjava/javax/swing/event/CellEditorListener.java - 2005893020b ./libjava/javax/swing/event/ChangeEvent.java - 3070027624b ./libjava/javax/swing/event/ChangeListener.java - 1911256007b ./libjava/javax/swing/event/DocumentEvent.java - 2383866233b ./libjava/javax/swing/event/DocumentListener.java - 1715105336b ./libjava/javax/swing/event/EventListenerList.java - 2045946240b ./libjava/javax/swing/event/HyperlinkEvent.java - 1382262574b ./libjava/javax/swing/event/HyperlinkListener.java - 843290135b ./libjava/javax/swing/event/InternalFrameAdapter.java - 1258500710b ./libjava/javax/swing/event/InternalFrameEvent.java - 2186391772b ./libjava/javax/swing/event/InternalFrameListener.java - 1592008443b ./libjava/javax/swing/event/ListDataEvent.java - 1076641865b ./libjava/javax/swing/event/ListDataListener.java - 1578453180b ./libjava/javax/swing/event/ListSelectionEvent.java - 3559173088b ./libjava/javax/swing/event/ListSelectionListener.java - 2479877087b ./libjava/javax/swing/event/MenuDragMouseEvent.java - 2685355060b ./libjava/javax/swing/event/MenuDragMouseListener.java - 3023535867b ./libjava/javax/swing/event/MenuEvent.java - 3971214880b ./libjava/javax/swing/event/MenuKeyEvent.java - 2785444747b ./libjava/javax/swing/event/MenuKeyListener.java - 3808074600b ./libjava/javax/swing/event/MenuListener.java - 3794707282b ./libjava/javax/swing/event/MouseInputAdapter.java - 2998166022b ./libjava/javax/swing/event/MouseInputListener.java - 725513679b ./libjava/javax/swing/event/PopupMenuEvent.java - 547770825b ./libjava/javax/swing/event/PopupMenuListener.java - 1479228607b ./libjava/javax/swing/event/SwingPropertyChangeSupport.java - 4198863774b ./libjava/javax/swing/event/TableColumnModelEvent.java - 1031262491b ./libjava/javax/swing/event/TableColumnModelListener.java - 4220558008b ./libjava/javax/swing/event/TableModelEvent.java - 1223981694b ./libjava/javax/swing/event/TableModelListener.java - 9766319b ./libjava/javax/swing/event/TreeExpansionEvent.java - 3109536888b ./libjava/javax/swing/event/TreeExpansionListener.java - 411921968b ./libjava/javax/swing/event/TreeModelEvent.java - 486265876b ./libjava/javax/swing/event/TreeModelListener.java - 3509118559b ./libjava/javax/swing/event/TreeSelectionEvent.java - 1295028794b ./libjava/javax/swing/event/TreeSelectionListener.java - 1977542521b ./libjava/javax/swing/event/TreeWillExpandListener.java - 168714960b ./libjava/javax/swing/event/UndoableEditEvent.java - 2667618060b ./libjava/javax/swing/event/UndoableEditListener.java - 1988278504b ./libjava/javax/swing/filechooser/FileFilter.java - 3879476878b ./libjava/javax/swing/filechooser/FileSystemView.java - 857897025b ./libjava/javax/swing/filechooser/FileView.java 1819534985b ./libjava/javax/swing/FocusManager.java 1905293927b ./libjava/javax/swing/GrayFilter.java 1839113764b ./libjava/javax/swing/Icon.java --- 14069,14074 ---- *************** *** 14081,14089 **** 1931846720b ./libjava/javax/swing/JLabel.java 2885946987b ./libjava/javax/swing/JLayeredPane.java 1282013929b ./libjava/javax/swing/JList.java 229985408b ./libjava/javax/swing/JMenuBar.java 2057593046b ./libjava/javax/swing/JMenuItem.java - 2215382883b ./libjava/javax/swing/JMenu.java 1316288447b ./libjava/javax/swing/JOptionPane.java 3109850202b ./libjava/javax/swing/JPanel.java 2641263101b ./libjava/javax/swing/JPasswordField.java --- 14091,14099 ---- 1931846720b ./libjava/javax/swing/JLabel.java 2885946987b ./libjava/javax/swing/JLayeredPane.java 1282013929b ./libjava/javax/swing/JList.java + 2215382883b ./libjava/javax/swing/JMenu.java 229985408b ./libjava/javax/swing/JMenuBar.java 2057593046b ./libjava/javax/swing/JMenuItem.java 1316288447b ./libjava/javax/swing/JOptionPane.java 3109850202b ./libjava/javax/swing/JPanel.java 2641263101b ./libjava/javax/swing/JPasswordField.java *************** *** 14116,14140 **** 4154783463b ./libjava/javax/swing/MenuSelectionManager.java 4065015575b ./libjava/javax/swing/MutableComboBoxModel.java 1418297156b ./libjava/javax/swing/OverlayLayout.java 2845814411b ./libjava/javax/swing/plaf/ActionMapUIResource.java - 1001403656b ./libjava/javax/swing/plaf/basic/BasicBorders.java - 2925722822b ./libjava/javax/swing/plaf/basic/BasicButtonUI.java - 3827550305b ./libjava/javax/swing/plaf/basic/BasicCheckBoxUI.java - 3994216609b ./libjava/javax/swing/plaf/basic/BasicDefaults.java - 2064160547b ./libjava/javax/swing/plaf/basic/BasicGraphicsUtils.java - 3387377466b ./libjava/javax/swing/plaf/basic/BasicIconFactory.java - 2715624883b ./libjava/javax/swing/plaf/basic/BasicLabelUI.java - 1218363334b ./libjava/javax/swing/plaf/basic/BasicListUI.java - 4142725156b ./libjava/javax/swing/plaf/basic/BasicLookAndFeel.java - 283501118b ./libjava/javax/swing/plaf/basic/BasicOptionPaneUI.java - 3431751273b ./libjava/javax/swing/plaf/basic/BasicPanelUI.java - 3834969947b ./libjava/javax/swing/plaf/basic/BasicRadioButtonUI.java - 2376150809b ./libjava/javax/swing/plaf/basic/BasicScrollPaneUI.java - 3766095341b ./libjava/javax/swing/plaf/basic/BasicTabbedPaneUI.java - 39491336b ./libjava/javax/swing/plaf/basic/BasicTextUI.java - 3522223785b ./libjava/javax/swing/plaf/basic/BasicToggleButtonUI.java - 3258351481b ./libjava/javax/swing/plaf/basic/BasicTreeUI.java - 1762138359b ./libjava/javax/swing/plaf/basic/BasicViewportUI.java 1477234031b ./libjava/javax/swing/plaf/BorderUIResource.java 1891619519b ./libjava/javax/swing/plaf/ButtonUI.java 1174416830b ./libjava/javax/swing/plaf/ColorChooserUI.java --- 14126,14212 ---- 4154783463b ./libjava/javax/swing/MenuSelectionManager.java 4065015575b ./libjava/javax/swing/MutableComboBoxModel.java 1418297156b ./libjava/javax/swing/OverlayLayout.java + 3441135054b ./libjava/javax/swing/ProgressMonitor.java + 1737292334b ./libjava/javax/swing/ProgressMonitorInputStream.java + 271041998b ./libjava/javax/swing/Renderer.java + 422745662b ./libjava/javax/swing/RepaintManager.java + 1019018809b ./libjava/javax/swing/RootPaneContainer.java + 3792870879b ./libjava/javax/swing/ScrollPaneConstants.java + 3875912602b ./libjava/javax/swing/ScrollPaneLayout.java + 1322845843b ./libjava/javax/swing/Scrollable.java + 2789578500b ./libjava/javax/swing/SingleSelectionModel.java + 1269923720b ./libjava/javax/swing/SizeRequirements.java + 3306921956b ./libjava/javax/swing/SizeSequence.java + 2347253833b ./libjava/javax/swing/SwingConstants.java + 3367265967b ./libjava/javax/swing/SwingUtilities.java + 33434864b ./libjava/javax/swing/Timer.java + 3407956077b ./libjava/javax/swing/ToggleButtonModel.java + 3887503118b ./libjava/javax/swing/ToolTipManager.java + 21602999b ./libjava/javax/swing/UIDefaults.java + 2345425161b ./libjava/javax/swing/UIManager.java + 3718291190b ./libjava/javax/swing/UnsupportedLookAndFeelException.java + 2980346064b ./libjava/javax/swing/ViewportLayout.java + 630293868b ./libjava/javax/swing/WindowConstants.java + 1130131950b ./libjava/javax/swing/border/AbstractBorder.java + 3216239309b ./libjava/javax/swing/border/BevelBorder.java + 4254773811b ./libjava/javax/swing/border/Border.java + 3643497984b ./libjava/javax/swing/border/CompoundBorder.java + 3769723158b ./libjava/javax/swing/border/EmptyBorder.java + 3557339618b ./libjava/javax/swing/border/EtchedBorder.java + 1880010849b ./libjava/javax/swing/border/LineBorder.java + 456207290b ./libjava/javax/swing/border/MatteBorder.java + 1708340786b ./libjava/javax/swing/border/TitledBorder.java + 2685544675b ./libjava/javax/swing/colorchooser/AbstractColorChooserPanel.java + 3107430868b ./libjava/javax/swing/colorchooser/ColorChooserComponentFactory.java + 3410433532b ./libjava/javax/swing/colorchooser/ColorSelectionModel.java + 4078086360b ./libjava/javax/swing/colorchooser/DefaultColorSelectionModel.java + 1706792490b ./libjava/javax/swing/event/AncestorEvent.java + 3700501714b ./libjava/javax/swing/event/AncestorListener.java + 1382227892b ./libjava/javax/swing/event/CaretEvent.java + 3521875215b ./libjava/javax/swing/event/CaretListener.java + 2883157052b ./libjava/javax/swing/event/CellEditorListener.java + 2005893020b ./libjava/javax/swing/event/ChangeEvent.java + 3070027624b ./libjava/javax/swing/event/ChangeListener.java + 1911256007b ./libjava/javax/swing/event/DocumentEvent.java + 2383866233b ./libjava/javax/swing/event/DocumentListener.java + 1715105336b ./libjava/javax/swing/event/EventListenerList.java + 2045946240b ./libjava/javax/swing/event/HyperlinkEvent.java + 1382262574b ./libjava/javax/swing/event/HyperlinkListener.java + 843290135b ./libjava/javax/swing/event/InternalFrameAdapter.java + 1258500710b ./libjava/javax/swing/event/InternalFrameEvent.java + 2186391772b ./libjava/javax/swing/event/InternalFrameListener.java + 1592008443b ./libjava/javax/swing/event/ListDataEvent.java + 1076641865b ./libjava/javax/swing/event/ListDataListener.java + 1578453180b ./libjava/javax/swing/event/ListSelectionEvent.java + 3559173088b ./libjava/javax/swing/event/ListSelectionListener.java + 2479877087b ./libjava/javax/swing/event/MenuDragMouseEvent.java + 2685355060b ./libjava/javax/swing/event/MenuDragMouseListener.java + 3023535867b ./libjava/javax/swing/event/MenuEvent.java + 3971214880b ./libjava/javax/swing/event/MenuKeyEvent.java + 2785444747b ./libjava/javax/swing/event/MenuKeyListener.java + 3808074600b ./libjava/javax/swing/event/MenuListener.java + 3794707282b ./libjava/javax/swing/event/MouseInputAdapter.java + 2998166022b ./libjava/javax/swing/event/MouseInputListener.java + 725513679b ./libjava/javax/swing/event/PopupMenuEvent.java + 547770825b ./libjava/javax/swing/event/PopupMenuListener.java + 1479228607b ./libjava/javax/swing/event/SwingPropertyChangeSupport.java + 4198863774b ./libjava/javax/swing/event/TableColumnModelEvent.java + 1031262491b ./libjava/javax/swing/event/TableColumnModelListener.java + 4220558008b ./libjava/javax/swing/event/TableModelEvent.java + 1223981694b ./libjava/javax/swing/event/TableModelListener.java + 9766319b ./libjava/javax/swing/event/TreeExpansionEvent.java + 3109536888b ./libjava/javax/swing/event/TreeExpansionListener.java + 411921968b ./libjava/javax/swing/event/TreeModelEvent.java + 486265876b ./libjava/javax/swing/event/TreeModelListener.java + 3509118559b ./libjava/javax/swing/event/TreeSelectionEvent.java + 1295028794b ./libjava/javax/swing/event/TreeSelectionListener.java + 1977542521b ./libjava/javax/swing/event/TreeWillExpandListener.java + 168714960b ./libjava/javax/swing/event/UndoableEditEvent.java + 2667618060b ./libjava/javax/swing/event/UndoableEditListener.java + 1988278504b ./libjava/javax/swing/filechooser/FileFilter.java + 3879476878b ./libjava/javax/swing/filechooser/FileSystemView.java + 857897025b ./libjava/javax/swing/filechooser/FileView.java 2845814411b ./libjava/javax/swing/plaf/ActionMapUIResource.java 1477234031b ./libjava/javax/swing/plaf/BorderUIResource.java 1891619519b ./libjava/javax/swing/plaf/ButtonUI.java 1174416830b ./libjava/javax/swing/plaf/ColorChooserUI.java *************** *** 14155,14161 **** 1370601366b ./libjava/javax/swing/plaf/ListUI.java 1356565006b ./libjava/javax/swing/plaf/MenuBarUI.java 658224616b ./libjava/javax/swing/plaf/MenuItemUI.java - 2485478966b ./libjava/javax/swing/plaf/metal/MetalLookAndFeel.java 1119106726b ./libjava/javax/swing/plaf/OptionPaneUI.java 1297588943b ./libjava/javax/swing/plaf/PanelUI.java 1118028570b ./libjava/javax/swing/plaf/PopupMenuUI.java --- 14227,14232 ---- *************** *** 14175,14193 **** 3381135940b ./libjava/javax/swing/plaf/TreeUI.java 3744703465b ./libjava/javax/swing/plaf/UIResource.java 1669303262b ./libjava/javax/swing/plaf/ViewportUI.java ! 1737292334b ./libjava/javax/swing/ProgressMonitorInputStream.java ! 3441135054b ./libjava/javax/swing/ProgressMonitor.java ! 271041998b ./libjava/javax/swing/Renderer.java ! 422745662b ./libjava/javax/swing/RepaintManager.java ! 1019018809b ./libjava/javax/swing/RootPaneContainer.java ! 1322845843b ./libjava/javax/swing/Scrollable.java ! 3792870879b ./libjava/javax/swing/ScrollPaneConstants.java ! 3875912602b ./libjava/javax/swing/ScrollPaneLayout.java ! 2789578500b ./libjava/javax/swing/SingleSelectionModel.java ! 1269923720b ./libjava/javax/swing/SizeRequirements.java ! 3306921956b ./libjava/javax/swing/SizeSequence.java ! 2347253833b ./libjava/javax/swing/SwingConstants.java ! 3367265967b ./libjava/javax/swing/SwingUtilities.java 3079464494b ./libjava/javax/swing/table/AbstractTableModel.java 291737387b ./libjava/javax/swing/table/DefaultTableCellRenderer.java 4160644105b ./libjava/javax/swing/table/DefaultTableColumnModel.java --- 14246,14270 ---- 3381135940b ./libjava/javax/swing/plaf/TreeUI.java 3744703465b ./libjava/javax/swing/plaf/UIResource.java 1669303262b ./libjava/javax/swing/plaf/ViewportUI.java ! 1001403656b ./libjava/javax/swing/plaf/basic/BasicBorders.java ! 2925722822b ./libjava/javax/swing/plaf/basic/BasicButtonUI.java ! 3827550305b ./libjava/javax/swing/plaf/basic/BasicCheckBoxUI.java ! 3994216609b ./libjava/javax/swing/plaf/basic/BasicDefaults.java ! 2064160547b ./libjava/javax/swing/plaf/basic/BasicGraphicsUtils.java ! 3387377466b ./libjava/javax/swing/plaf/basic/BasicIconFactory.java ! 2715624883b ./libjava/javax/swing/plaf/basic/BasicLabelUI.java ! 1218363334b ./libjava/javax/swing/plaf/basic/BasicListUI.java ! 4142725156b ./libjava/javax/swing/plaf/basic/BasicLookAndFeel.java ! 283501118b ./libjava/javax/swing/plaf/basic/BasicOptionPaneUI.java ! 3431751273b ./libjava/javax/swing/plaf/basic/BasicPanelUI.java ! 3834969947b ./libjava/javax/swing/plaf/basic/BasicRadioButtonUI.java ! 2376150809b ./libjava/javax/swing/plaf/basic/BasicScrollPaneUI.java ! 3766095341b ./libjava/javax/swing/plaf/basic/BasicTabbedPaneUI.java ! 39491336b ./libjava/javax/swing/plaf/basic/BasicTextUI.java ! 3522223785b ./libjava/javax/swing/plaf/basic/BasicToggleButtonUI.java ! 3258351481b ./libjava/javax/swing/plaf/basic/BasicTreeUI.java ! 1762138359b ./libjava/javax/swing/plaf/basic/BasicViewportUI.java ! 2485478966b ./libjava/javax/swing/plaf/metal/MetalLookAndFeel.java 3079464494b ./libjava/javax/swing/table/AbstractTableModel.java 291737387b ./libjava/javax/swing/table/DefaultTableCellRenderer.java 4160644105b ./libjava/javax/swing/table/DefaultTableColumnModel.java *************** *** 14209,14216 **** 3829581196b ./libjava/javax/swing/text/EditorKit.java 2970875473b ./libjava/javax/swing/text/Element.java 2853732243b ./libjava/javax/swing/text/GapContent.java - 4043897272b ./libjava/javax/swing/text/html/HTML.java - 348698776b ./libjava/javax/swing/text/html/parser/ParserDelegator.java 3331442636b ./libjava/javax/swing/text/JTextComponent.java 2566839308b ./libjava/javax/swing/text/Keymap.java 2074070618b ./libjava/javax/swing/text/MutableAttributeSet.java --- 14286,14291 ---- *************** *** 14218,14232 **** 2162967864b ./libjava/javax/swing/text/PlainEditorKit.java 2579915949b ./libjava/javax/swing/text/Position.java 823120388b ./libjava/javax/swing/text/Segment.java 3426697128b ./libjava/javax/swing/text/StyledDocument.java 1911783619b ./libjava/javax/swing/text/StyledEditorKit.java - 2891437475b ./libjava/javax/swing/text/Style.java 962719405b ./libjava/javax/swing/text/TextAction.java - 2689141824b ./libjava/javax/swing/text/ViewFactory.java 3495234529b ./libjava/javax/swing/text/View.java ! 33434864b ./libjava/javax/swing/Timer.java ! 3407956077b ./libjava/javax/swing/ToggleButtonModel.java ! 3887503118b ./libjava/javax/swing/ToolTipManager.java 2308844089b ./libjava/javax/swing/tree/AbstractLayoutCache.java 3080754508b ./libjava/javax/swing/tree/DefaultMutableTreeNode.java 167253082b ./libjava/javax/swing/tree/DefaultTreeCellEditor.java --- 14293,14306 ---- 2162967864b ./libjava/javax/swing/text/PlainEditorKit.java 2579915949b ./libjava/javax/swing/text/Position.java 823120388b ./libjava/javax/swing/text/Segment.java + 2891437475b ./libjava/javax/swing/text/Style.java 3426697128b ./libjava/javax/swing/text/StyledDocument.java 1911783619b ./libjava/javax/swing/text/StyledEditorKit.java 962719405b ./libjava/javax/swing/text/TextAction.java 3495234529b ./libjava/javax/swing/text/View.java ! 2689141824b ./libjava/javax/swing/text/ViewFactory.java ! 4043897272b ./libjava/javax/swing/text/html/HTML.java ! 348698776b ./libjava/javax/swing/text/html/parser/ParserDelegator.java 2308844089b ./libjava/javax/swing/tree/AbstractLayoutCache.java 3080754508b ./libjava/javax/swing/tree/DefaultMutableTreeNode.java 167253082b ./libjava/javax/swing/tree/DefaultTreeCellEditor.java *************** *** 14244,14263 **** 2667391640b ./libjava/javax/swing/tree/TreePath.java 1990089199b ./libjava/javax/swing/tree/TreeSelectionModel.java 2130907010b ./libjava/javax/swing/tree/VariableHeightLayoutCache.java - 21602999b ./libjava/javax/swing/UIDefaults.java - 2345425161b ./libjava/javax/swing/UIManager.java 3592518646b ./libjava/javax/swing/undo/AbstractUndoableEdit.java 3666237561b ./libjava/javax/swing/undo/CannotRedoException.java 3367641305b ./libjava/javax/swing/undo/CannotUndoException.java 1998794068b ./libjava/javax/swing/undo/CompoundEdit.java - 3110821623b ./libjava/javax/swing/undo/StateEditable.java 4246257322b ./libjava/javax/swing/undo/StateEdit.java 667404810b ./libjava/javax/swing/undo/UndoableEdit.java 1005070151b ./libjava/javax/swing/undo/UndoableEditSupport.java - 2675818546b ./libjava/javax/swing/undo/UndoManager.java - 3718291190b ./libjava/javax/swing/UnsupportedLookAndFeelException.java - 2980346064b ./libjava/javax/swing/ViewportLayout.java - 630293868b ./libjava/javax/swing/WindowConstants.java 1440351788b ./libjava/javax/transaction/HeuristicCommitException.java 2743141414b ./libjava/javax/transaction/HeuristicMixedException.java 3885800227b ./libjava/javax/transaction/HeuristicRollbackException.java --- 14318,14332 ---- 2667391640b ./libjava/javax/swing/tree/TreePath.java 1990089199b ./libjava/javax/swing/tree/TreeSelectionModel.java 2130907010b ./libjava/javax/swing/tree/VariableHeightLayoutCache.java 3592518646b ./libjava/javax/swing/undo/AbstractUndoableEdit.java 3666237561b ./libjava/javax/swing/undo/CannotRedoException.java 3367641305b ./libjava/javax/swing/undo/CannotUndoException.java 1998794068b ./libjava/javax/swing/undo/CompoundEdit.java 4246257322b ./libjava/javax/swing/undo/StateEdit.java + 3110821623b ./libjava/javax/swing/undo/StateEditable.java + 2675818546b ./libjava/javax/swing/undo/UndoManager.java 667404810b ./libjava/javax/swing/undo/UndoableEdit.java 1005070151b ./libjava/javax/swing/undo/UndoableEditSupport.java 1440351788b ./libjava/javax/transaction/HeuristicCommitException.java 2743141414b ./libjava/javax/transaction/HeuristicMixedException.java 3885800227b ./libjava/javax/transaction/HeuristicRollbackException.java *************** *** 14276,14315 **** 3369315948b ./libjava/javax/transaction/xa/XAResource.java 583543514b ./libjava/javax/transaction/xa/Xid.java 2830800794b ./libjava/jni.cc - 1362543266b ./libjava/LIBGCJ_LICENSE - 854343147b ./libjava/libgcj.spec.in 3263845190b ./libjava/libgcj-test.spec.in 464053222b ./libjava/libltdl/acconfig.h 1486261890b ./libjava/libltdl/acinclude.m4 2748542911b ./libjava/libltdl/aclocal.m4 - 1352649985b ./libjava/libltdl/ChangeLog 3229611250b ./libjava/libltdl/config.h.in 3663840013b ./libjava/libltdl/configure 586017012b ./libjava/libltdl/configure.in - 1530919786b ./libjava/libltdl/COPYING.LIB - 3885054737b ./libjava/libltdl/.cvsignore 1708336280b ./libjava/libltdl/ltdl.c 3122579166b ./libjava/libltdl/ltdl.h - 3589765398b ./libjava/libltdl/Makefile.am - 2495909158b ./libjava/libltdl/Makefile.in - 1322928877b ./libjava/libltdl/README 216805921b ./libjava/libltdl/stamp-h.in 3873176006b ./libjava/libtool-version - 2113750124b ./libjava/Makefile.am - 3087644291b ./libjava/Makefile.in 1779444037b ./libjava/mauve-libgcj - 4049677327b ./libjava/NEWS - 3395710497b ./libjava/nogc.cc 529282886b ./libjava/no-threads.cc 2042069291b ./libjava/org/w3c/dom/Attr.java 722169044b ./libjava/org/w3c/dom/CDATASection.java 2065721992b ./libjava/org/w3c/dom/CharacterData.java 2143127567b ./libjava/org/w3c/dom/Comment.java - 862763522b ./libjava/org/w3c/dom/DocumentFragment.java - 1900680333b ./libjava/org/w3c/dom/Document.java - 2426412549b ./libjava/org/w3c/dom/DocumentType.java 488476586b ./libjava/org/w3c/dom/DOMException.java 4211570251b ./libjava/org/w3c/dom/DOMImplementation.java 4250415570b ./libjava/org/w3c/dom/Element.java 4046624265b ./libjava/org/w3c/dom/Entity.java 2262342958b ./libjava/org/w3c/dom/EntityReference.java --- 14345,14380 ---- 3369315948b ./libjava/javax/transaction/xa/XAResource.java 583543514b ./libjava/javax/transaction/xa/Xid.java 2830800794b ./libjava/jni.cc 3263845190b ./libjava/libgcj-test.spec.in + 854343147b ./libjava/libgcj.spec.in + 3885054737b ./libjava/libltdl/.cvsignore + 1530919786b ./libjava/libltdl/COPYING.LIB + 2498936849b ./libjava/libltdl/ChangeLog + 3589765398b ./libjava/libltdl/Makefile.am + 2495909158b ./libjava/libltdl/Makefile.in + 1322928877b ./libjava/libltdl/README 464053222b ./libjava/libltdl/acconfig.h 1486261890b ./libjava/libltdl/acinclude.m4 2748542911b ./libjava/libltdl/aclocal.m4 3229611250b ./libjava/libltdl/config.h.in 3663840013b ./libjava/libltdl/configure 586017012b ./libjava/libltdl/configure.in 1708336280b ./libjava/libltdl/ltdl.c 3122579166b ./libjava/libltdl/ltdl.h 216805921b ./libjava/libltdl/stamp-h.in 3873176006b ./libjava/libtool-version 1779444037b ./libjava/mauve-libgcj 529282886b ./libjava/no-threads.cc + 3395710497b ./libjava/nogc.cc 2042069291b ./libjava/org/w3c/dom/Attr.java 722169044b ./libjava/org/w3c/dom/CDATASection.java 2065721992b ./libjava/org/w3c/dom/CharacterData.java 2143127567b ./libjava/org/w3c/dom/Comment.java 488476586b ./libjava/org/w3c/dom/DOMException.java 4211570251b ./libjava/org/w3c/dom/DOMImplementation.java + 1900680333b ./libjava/org/w3c/dom/Document.java + 862763522b ./libjava/org/w3c/dom/DocumentFragment.java + 2426412549b ./libjava/org/w3c/dom/DocumentType.java 4250415570b ./libjava/org/w3c/dom/Element.java 4046624265b ./libjava/org/w3c/dom/Entity.java 2262342958b ./libjava/org/w3c/dom/EntityReference.java *************** *** 14318,14327 **** 1228842303b ./libjava/org/w3c/dom/NodeList.java 3739671112b ./libjava/org/w3c/dom/Notation.java 358325944b ./libjava/org/w3c/dom/ProcessingInstruction.java 2318984118b ./libjava/org/w3c/dom/ranges/DocumentRange.java - 575095803b ./libjava/org/w3c/dom/ranges/RangeException.java 1265227100b ./libjava/org/w3c/dom/ranges/Range.java ! 1690022844b ./libjava/org/w3c/dom/Text.java 4050517071b ./libjava/org/w3c/dom/traversal/DocumentTraversal.java 2226386849b ./libjava/org/w3c/dom/traversal/NodeFilter.java 3652245705b ./libjava/org/w3c/dom/traversal/NodeIterator.java --- 14383,14392 ---- 1228842303b ./libjava/org/w3c/dom/NodeList.java 3739671112b ./libjava/org/w3c/dom/Notation.java 358325944b ./libjava/org/w3c/dom/ProcessingInstruction.java + 1690022844b ./libjava/org/w3c/dom/Text.java 2318984118b ./libjava/org/w3c/dom/ranges/DocumentRange.java 1265227100b ./libjava/org/w3c/dom/ranges/Range.java ! 575095803b ./libjava/org/w3c/dom/ranges/RangeException.java 4050517071b ./libjava/org/w3c/dom/traversal/DocumentTraversal.java 2226386849b ./libjava/org/w3c/dom/traversal/NodeFilter.java 3652245705b ./libjava/org/w3c/dom/traversal/NodeIterator.java *************** *** 14329,14408 **** 1129310863b ./libjava/org/xml/sax/AttributeList.java 186120789b ./libjava/org/xml/sax/Attributes.java 2728687290b ./libjava/org/xml/sax/ContentHandler.java - 1046461319b ./libjava/org/xml/sax/DocumentHandler.java 3514130481b ./libjava/org/xml/sax/DTDHandler.java 345027888b ./libjava/org/xml/sax/EntityResolver.java 748594598b ./libjava/org/xml/sax/ErrorHandler.java 3920069772b ./libjava/org/xml/sax/ext/DeclHandler.java 1872175396b ./libjava/org/xml/sax/ext/LexicalHandler.java 3813315315b ./libjava/org/xml/sax/ext/package.html - 2474834889b ./libjava/org/xml/sax/HandlerBase.java 3204409856b ./libjava/org/xml/sax/helpers/AttributeListImpl.java 645412983b ./libjava/org/xml/sax/helpers/AttributesImpl.java 489492922b ./libjava/org/xml/sax/helpers/DefaultHandler.java 314779727b ./libjava/org/xml/sax/helpers/LocatorImpl.java 750502649b ./libjava/org/xml/sax/helpers/NamespaceSupport.java 1300988152b ./libjava/org/xml/sax/helpers/NewInstance.java - 3155728298b ./libjava/org/xml/sax/helpers/package.html 3105076878b ./libjava/org/xml/sax/helpers/ParserAdapter.java 1733309899b ./libjava/org/xml/sax/helpers/ParserFactory.java 3640643604b ./libjava/org/xml/sax/helpers/XMLFilterImpl.java 1610756734b ./libjava/org/xml/sax/helpers/XMLReaderAdapter.java 3616638609b ./libjava/org/xml/sax/helpers/XMLReaderFactory.java ! 3969232393b ./libjava/org/xml/sax/InputSource.java ! 1449457533b ./libjava/org/xml/sax/Locator.java 1586395588b ./libjava/org/xml/sax/package.html - 1116558011b ./libjava/org/xml/sax/Parser.java - 688197855b ./libjava/org/xml/sax/SAXException.java - 287566472b ./libjava/org/xml/sax/SAXNotRecognizedException.java - 3488708861b ./libjava/org/xml/sax/SAXNotSupportedException.java - 283277028b ./libjava/org/xml/sax/SAXParseException.java - 797458550b ./libjava/org/xml/sax/XMLFilter.java - 718503864b ./libjava/org/xml/sax/XMLReader.java - 2522783030b ./libjava/posix.cc 1371529945b ./libjava/posix-threads.cc ! 229817601b ./libjava/prims.cc ! 3199155412b ./libjava/README 3770005913b ./libjava/resolve.cc - 2710913388b ./libjava/scripts/classes.pl - 2322272636b ./libjava/scripts/encodings.pl 2639955246b ./libjava/scripts/MakeCharTables.java 211751055b ./libjava/scripts/MakeDefaultMimeTypes.java 415147073b ./libjava/scripts/mime.types 1359447378b ./libjava/scripts/showval.java - 2309086205b ./libjava/scripts/TexinfoDoclet.java 2507783b ./libjava/scripts/unicode-blocks.pl 2554188738b ./libjava/scripts/unicode-decomp.pl 3460612990b ./libjava/scripts/unicode-muncher.pl 810390237b ./libjava/sysdep/alpha/locks.h 2948369561b ./libjava/sysdep/generic/locks.h 255022282b ./libjava/sysdep/i386/locks.h - 4255020929b ./libjava/sysdep/ia64.c 3969226176b ./libjava/sysdep/ia64-frame.h 2487590179b ./libjava/sysdep/ia64/locks.h 984701779b ./libjava/sysdep/powerpc/locks.h 106901581b ./libjava/sysdep/s390/locks.h 2334349943b ./libjava/sysdep/sh/locks.h 2903495760b ./libjava/sysdep/sparc/locks.h 1725741696b ./libjava/sysdep/x86-64/locks.h ! 2105390128b ./libjava/testsuite/ChangeLog 1230501773b ./libjava/testsuite/config/default.exp ! 3718926011b ./libjava/testsuite/libjava.compile/abstr.java ! 2888415448b ./libjava/testsuite/libjava.compile/abstr.xfail 2597392402b ./libjava/testsuite/libjava.compile/ArrayClass.java - 2510342235b ./libjava/testsuite/libjava.compile/assignment_2.java - 113533645b ./libjava/testsuite/libjava.compile/assignment.java - 226856759b ./libjava/testsuite/libjava.compile/block.java - 1927457704b ./libjava/testsuite/libjava.compile/block.xfail 2001362839b ./libjava/testsuite/libjava.compile/Case.java - 1280659122b ./libjava/testsuite/libjava.compile/comment.java - 3786501780b ./libjava/testsuite/libjava.compile/compile.exp - 3540074415b ./libjava/testsuite/libjava.compile/consthrow.java - 4283562407b ./libjava/testsuite/libjava.compile/consthrow.xfail - 3242282126b ./libjava/testsuite/libjava.compile/final_assignment_check.java - 1927457704b ./libjava/testsuite/libjava.compile/final_assignment_check.xfail - 2489230363b ./libjava/testsuite/libjava.compile/final_initialization_in_ctor.java - 2700872724b ./libjava/testsuite/libjava.compile/final_local_switch.java 1402474633b ./libjava/testsuite/libjava.compile/G19990210_1.java 3600660956b ./libjava/testsuite/libjava.compile/G19990210_2.java 2466381413b ./libjava/testsuite/libjava.compile/G19990210_3.java --- 14394,14461 ---- 1129310863b ./libjava/org/xml/sax/AttributeList.java 186120789b ./libjava/org/xml/sax/Attributes.java 2728687290b ./libjava/org/xml/sax/ContentHandler.java 3514130481b ./libjava/org/xml/sax/DTDHandler.java + 1046461319b ./libjava/org/xml/sax/DocumentHandler.java 345027888b ./libjava/org/xml/sax/EntityResolver.java 748594598b ./libjava/org/xml/sax/ErrorHandler.java + 2474834889b ./libjava/org/xml/sax/HandlerBase.java + 3969232393b ./libjava/org/xml/sax/InputSource.java + 1449457533b ./libjava/org/xml/sax/Locator.java + 1116558011b ./libjava/org/xml/sax/Parser.java + 688197855b ./libjava/org/xml/sax/SAXException.java + 287566472b ./libjava/org/xml/sax/SAXNotRecognizedException.java + 3488708861b ./libjava/org/xml/sax/SAXNotSupportedException.java + 283277028b ./libjava/org/xml/sax/SAXParseException.java + 797458550b ./libjava/org/xml/sax/XMLFilter.java + 718503864b ./libjava/org/xml/sax/XMLReader.java 3920069772b ./libjava/org/xml/sax/ext/DeclHandler.java 1872175396b ./libjava/org/xml/sax/ext/LexicalHandler.java 3813315315b ./libjava/org/xml/sax/ext/package.html 3204409856b ./libjava/org/xml/sax/helpers/AttributeListImpl.java 645412983b ./libjava/org/xml/sax/helpers/AttributesImpl.java 489492922b ./libjava/org/xml/sax/helpers/DefaultHandler.java 314779727b ./libjava/org/xml/sax/helpers/LocatorImpl.java 750502649b ./libjava/org/xml/sax/helpers/NamespaceSupport.java 1300988152b ./libjava/org/xml/sax/helpers/NewInstance.java 3105076878b ./libjava/org/xml/sax/helpers/ParserAdapter.java 1733309899b ./libjava/org/xml/sax/helpers/ParserFactory.java 3640643604b ./libjava/org/xml/sax/helpers/XMLFilterImpl.java 1610756734b ./libjava/org/xml/sax/helpers/XMLReaderAdapter.java 3616638609b ./libjava/org/xml/sax/helpers/XMLReaderFactory.java ! 3155728298b ./libjava/org/xml/sax/helpers/package.html 1586395588b ./libjava/org/xml/sax/package.html 1371529945b ./libjava/posix-threads.cc ! 2522783030b ./libjava/posix.cc ! 343900791b ./libjava/prims.cc 3770005913b ./libjava/resolve.cc 2639955246b ./libjava/scripts/MakeCharTables.java 211751055b ./libjava/scripts/MakeDefaultMimeTypes.java + 2309086205b ./libjava/scripts/TexinfoDoclet.java + 2710913388b ./libjava/scripts/classes.pl + 2322272636b ./libjava/scripts/encodings.pl 415147073b ./libjava/scripts/mime.types 1359447378b ./libjava/scripts/showval.java 2507783b ./libjava/scripts/unicode-blocks.pl 2554188738b ./libjava/scripts/unicode-decomp.pl 3460612990b ./libjava/scripts/unicode-muncher.pl 810390237b ./libjava/sysdep/alpha/locks.h 2948369561b ./libjava/sysdep/generic/locks.h 255022282b ./libjava/sysdep/i386/locks.h 3969226176b ./libjava/sysdep/ia64-frame.h + 4255020929b ./libjava/sysdep/ia64.c 2487590179b ./libjava/sysdep/ia64/locks.h 984701779b ./libjava/sysdep/powerpc/locks.h 106901581b ./libjava/sysdep/s390/locks.h 2334349943b ./libjava/sysdep/sh/locks.h 2903495760b ./libjava/sysdep/sparc/locks.h 1725741696b ./libjava/sysdep/x86-64/locks.h ! 2576287933b ./libjava/testsuite/ChangeLog ! 41198457b ./libjava/testsuite/Makefile.am ! 813266623b ./libjava/testsuite/Makefile.in 1230501773b ./libjava/testsuite/config/default.exp ! 2694003197b ./libjava/testsuite/lib/libjava.exp 2597392402b ./libjava/testsuite/libjava.compile/ArrayClass.java 2001362839b ./libjava/testsuite/libjava.compile/Case.java 1402474633b ./libjava/testsuite/libjava.compile/G19990210_1.java 3600660956b ./libjava/testsuite/libjava.compile/G19990210_2.java 2466381413b ./libjava/testsuite/libjava.compile/G19990210_3.java *************** *** 14410,14437 **** 3096844209b ./libjava/testsuite/libjava.compile/G19990217_02.java 290547391b ./libjava/testsuite/libjava.compile/G19990217_02.no-link 2679863284b ./libjava/testsuite/libjava.compile/G19990225_01.java - 2268267866b ./libjava/testsuite/libjava.compile/iface.java - 3867761903b ./libjava/testsuite/libjava.compile/inner_1.java - 20838332b ./libjava/testsuite/libjava.compile/inner_1.xfail - 2923236037b ./libjava/testsuite/libjava.compile/inner_data.java - 1142481695b ./libjava/testsuite/libjava.compile/inner_inherit.java - 2576661865b ./libjava/testsuite/libjava.compile/inner_priv.java - 1329801431b ./libjava/testsuite/libjava.compile/inner_pub.java - 988747335b ./libjava/testsuite/libjava.compile/invokeinterface/A.java - 1237730563b ./libjava/testsuite/libjava.compile/invokeinterface/B.java - 887835602b ./libjava/testsuite/libjava.compile/invokeinterface/Test.java 3848284330b ./libjava/testsuite/libjava.compile/MethodFailure4.java 1927457704b ./libjava/testsuite/libjava.compile/MethodFailure4.xfail 1373164997b ./libjava/testsuite/libjava.compile/N19990310_01.java 2764881773b ./libjava/testsuite/libjava.compile/N19990317.java - 1874616617b ./libjava/testsuite/libjava.compile/narrow_case.java - 1478470590b ./libjava/testsuite/libjava.compile/not_a_redef.java - 2802394982b ./libjava/testsuite/libjava.compile/not_a_redef.xfail 2730053140b ./libjava/testsuite/libjava.compile/OperatorBenchmark.java - 1193669757b ./libjava/testsuite/libjava.compile/perc.java - 4184523558b ./libjava/testsuite/libjava.compile/plusplus.java - 2163108697b ./libjava/testsuite/libjava.compile/pr10459_2.java - 3480725861b ./libjava/testsuite/libjava.compile/pr10459.java 285536381b ./libjava/testsuite/libjava.compile/PR124.java 1927457704b ./libjava/testsuite/libjava.compile/PR124.xfail 2852406997b ./libjava/testsuite/libjava.compile/PR127.java --- 14463,14473 ---- *************** *** 14445,14453 **** 1927457704b ./libjava/testsuite/libjava.compile/PR163.xfail 2290833112b ./libjava/testsuite/libjava.compile/PR164.java 1927457704b ./libjava/testsuite/libjava.compile/PR164.xfail - 127683262b ./libjava/testsuite/libjava.compile/pr172.java - 3745463245b ./libjava/testsuite/libjava.compile/pr174.java - 2787957046b ./libjava/testsuite/libjava.compile/pr176.java 895496907b ./libjava/testsuite/libjava.compile/PR206.java 973849712b ./libjava/testsuite/libjava.compile/PR207.java 2802394982b ./libjava/testsuite/libjava.compile/PR207.xfail --- 14481,14486 ---- *************** *** 14456,14463 **** 1822717569b ./libjava/testsuite/libjava.compile/PR209.java 779507036b ./libjava/testsuite/libjava.compile/PR224.java 1927457704b ./libjava/testsuite/libjava.compile/PR224.xfail - 2627046019b ./libjava/testsuite/libjava.compile/PR232B.java 2989158759b ./libjava/testsuite/libjava.compile/PR232.java 3778326371b ./libjava/testsuite/libjava.compile/PR234.java 842896942b ./libjava/testsuite/libjava.compile/PR235.java 2668948381b ./libjava/testsuite/libjava.compile/PR238.java --- 14489,14496 ---- 1822717569b ./libjava/testsuite/libjava.compile/PR209.java 779507036b ./libjava/testsuite/libjava.compile/PR224.java 1927457704b ./libjava/testsuite/libjava.compile/PR224.xfail 2989158759b ./libjava/testsuite/libjava.compile/PR232.java + 2627046019b ./libjava/testsuite/libjava.compile/PR232B.java 3778326371b ./libjava/testsuite/libjava.compile/PR234.java 842896942b ./libjava/testsuite/libjava.compile/PR235.java 2668948381b ./libjava/testsuite/libjava.compile/PR238.java *************** *** 14479,14484 **** --- 14512,14560 ---- 3689218637b ./libjava/testsuite/libjava.compile/PR6026.java 2971726147b ./libjava/testsuite/libjava.compile/PR6865.java 1927457704b ./libjava/testsuite/libjava.compile/PR6865.xfail + 1601820268b ./libjava/testsuite/libjava.compile/Semi.java + 1283240173b ./libjava/testsuite/libjava.compile/Statics.java + 2919174619b ./libjava/testsuite/libjava.compile/SuperConstr.java + 2226206425b ./libjava/testsuite/libjava.compile/T20020529.java + 1661935898b ./libjava/testsuite/libjava.compile/T20020604.java + 4243896875b ./libjava/testsuite/libjava.compile/Twice.java + 328754321b ./libjava/testsuite/libjava.compile/Where.java + 20838332b ./libjava/testsuite/libjava.compile/Where.xfail + 4003272220b ./libjava/testsuite/libjava.compile/XercesBug.java + 3718926011b ./libjava/testsuite/libjava.compile/abstr.java + 2888415448b ./libjava/testsuite/libjava.compile/abstr.xfail + 113533645b ./libjava/testsuite/libjava.compile/assignment.java + 2510342235b ./libjava/testsuite/libjava.compile/assignment_2.java + 226856759b ./libjava/testsuite/libjava.compile/block.java + 1927457704b ./libjava/testsuite/libjava.compile/block.xfail + 1280659122b ./libjava/testsuite/libjava.compile/comment.java + 3786501780b ./libjava/testsuite/libjava.compile/compile.exp + 3540074415b ./libjava/testsuite/libjava.compile/consthrow.java + 4283562407b ./libjava/testsuite/libjava.compile/consthrow.xfail + 3242282126b ./libjava/testsuite/libjava.compile/final_assignment_check.java + 1927457704b ./libjava/testsuite/libjava.compile/final_assignment_check.xfail + 2489230363b ./libjava/testsuite/libjava.compile/final_initialization_in_ctor.java + 2700872724b ./libjava/testsuite/libjava.compile/final_local_switch.java + 2268267866b ./libjava/testsuite/libjava.compile/iface.java + 3867761903b ./libjava/testsuite/libjava.compile/inner_1.java + 20838332b ./libjava/testsuite/libjava.compile/inner_1.xfail + 2923236037b ./libjava/testsuite/libjava.compile/inner_data.java + 1142481695b ./libjava/testsuite/libjava.compile/inner_inherit.java + 2576661865b ./libjava/testsuite/libjava.compile/inner_priv.java + 1329801431b ./libjava/testsuite/libjava.compile/inner_pub.java + 988747335b ./libjava/testsuite/libjava.compile/invokeinterface/A.java + 1237730563b ./libjava/testsuite/libjava.compile/invokeinterface/B.java + 887835602b ./libjava/testsuite/libjava.compile/invokeinterface/Test.java + 1874616617b ./libjava/testsuite/libjava.compile/narrow_case.java + 1478470590b ./libjava/testsuite/libjava.compile/not_a_redef.java + 2802394982b ./libjava/testsuite/libjava.compile/not_a_redef.xfail + 1193669757b ./libjava/testsuite/libjava.compile/perc.java + 4184523558b ./libjava/testsuite/libjava.compile/plusplus.java + 3480725861b ./libjava/testsuite/libjava.compile/pr10459.java + 2163108697b ./libjava/testsuite/libjava.compile/pr10459_2.java + 127683262b ./libjava/testsuite/libjava.compile/pr172.java + 3745463245b ./libjava/testsuite/libjava.compile/pr174.java + 2787957046b ./libjava/testsuite/libjava.compile/pr176.java 3358917760b ./libjava/testsuite/libjava.compile/pr7912.java 1946038566b ./libjava/testsuite/libjava.compile/pr8712.java 1362898969b ./libjava/testsuite/libjava.compile/pr8955.java *************** *** 14494,14527 **** 1927457704b ./libjava/testsuite/libjava.compile/redef5.xfail 301913850b ./libjava/testsuite/libjava.compile/redef6.java 1927457704b ./libjava/testsuite/libjava.compile/redef6.xfail - 1601820268b ./libjava/testsuite/libjava.compile/Semi.java 1151358467b ./libjava/testsuite/libjava.compile/static_1.java 1927457704b ./libjava/testsuite/libjava.compile/static_1.xfail 3508774254b ./libjava/testsuite/libjava.compile/static_2.java 2802394982b ./libjava/testsuite/libjava.compile/static_2.xfail 2883944369b ./libjava/testsuite/libjava.compile/static_3.java 2802394982b ./libjava/testsuite/libjava.compile/static_3.xfail - 1286489290b ./libjava/testsuite/libjava.compile/static_init2.java 1851980739b ./libjava/testsuite/libjava.compile/static_init.java 1927457704b ./libjava/testsuite/libjava.compile/static_init.xfail 2134939631b ./libjava/testsuite/libjava.compile/static_inner.java - 1283240173b ./libjava/testsuite/libjava.compile/Statics.java - 2919174619b ./libjava/testsuite/libjava.compile/SuperConstr.java 3221090904b ./libjava/testsuite/libjava.compile/support/Case.java 1796854903b ./libjava/testsuite/libjava.compile/support/PR129_A.java 4294110747b ./libjava/testsuite/libjava.compile/support/PR206_A.java 3604033893b ./libjava/testsuite/libjava.compile/support/PR207_A.java 3847332882b ./libjava/testsuite/libjava.compile/support/Waldo.java - 2226206425b ./libjava/testsuite/libjava.compile/T20020529.java - 1661935898b ./libjava/testsuite/libjava.compile/T20020604.java - 4243896875b ./libjava/testsuite/libjava.compile/Twice.java 1618780916b ./libjava/testsuite/libjava.compile/uesc.java 1927457704b ./libjava/testsuite/libjava.compile/uesc.xfail 650583552b ./libjava/testsuite/libjava.compile/weirddecl.java 2802394982b ./libjava/testsuite/libjava.compile/weirddecl.xfail - 328754321b ./libjava/testsuite/libjava.compile/Where.java - 20838332b ./libjava/testsuite/libjava.compile/Where.xfail - 4003272220b ./libjava/testsuite/libjava.compile/XercesBug.java 2065520158b ./libjava/testsuite/libjava.compile/zeroexp.java 2283325765b ./libjava/testsuite/libjava.jacks/jacks.exp 3618791515b ./libjava/testsuite/libjava.jacks/jacks.xfail --- 14570,14594 ---- 1927457704b ./libjava/testsuite/libjava.compile/redef5.xfail 301913850b ./libjava/testsuite/libjava.compile/redef6.java 1927457704b ./libjava/testsuite/libjava.compile/redef6.xfail 1151358467b ./libjava/testsuite/libjava.compile/static_1.java 1927457704b ./libjava/testsuite/libjava.compile/static_1.xfail 3508774254b ./libjava/testsuite/libjava.compile/static_2.java 2802394982b ./libjava/testsuite/libjava.compile/static_2.xfail 2883944369b ./libjava/testsuite/libjava.compile/static_3.java 2802394982b ./libjava/testsuite/libjava.compile/static_3.xfail 1851980739b ./libjava/testsuite/libjava.compile/static_init.java 1927457704b ./libjava/testsuite/libjava.compile/static_init.xfail + 1286489290b ./libjava/testsuite/libjava.compile/static_init2.java 2134939631b ./libjava/testsuite/libjava.compile/static_inner.java 3221090904b ./libjava/testsuite/libjava.compile/support/Case.java 1796854903b ./libjava/testsuite/libjava.compile/support/PR129_A.java 4294110747b ./libjava/testsuite/libjava.compile/support/PR206_A.java 3604033893b ./libjava/testsuite/libjava.compile/support/PR207_A.java 3847332882b ./libjava/testsuite/libjava.compile/support/Waldo.java 1618780916b ./libjava/testsuite/libjava.compile/uesc.java 1927457704b ./libjava/testsuite/libjava.compile/uesc.xfail 650583552b ./libjava/testsuite/libjava.compile/weirddecl.java 2802394982b ./libjava/testsuite/libjava.compile/weirddecl.xfail 2065520158b ./libjava/testsuite/libjava.compile/zeroexp.java 2283325765b ./libjava/testsuite/libjava.jacks/jacks.exp 3618791515b ./libjava/testsuite/libjava.jacks/jacks.xfail *************** *** 14565,14612 **** 1912520937b ./libjava/testsuite/libjava.jni/virtual.c 1112271683b ./libjava/testsuite/libjava.jni/virtual.java 3956933800b ./libjava/testsuite/libjava.jni/virtual.out 68731963b ./libjava/testsuite/libjava.lang/anfi.java 1280347506b ./libjava/testsuite/libjava.lang/anfi.out 3232612065b ./libjava/testsuite/libjava.lang/anon2.java 119345088b ./libjava/testsuite/libjava.lang/anon2.out 1843983227b ./libjava/testsuite/libjava.lang/anon3.java 4270138359b ./libjava/testsuite/libjava.lang/anon3.out 507421585b ./libjava/testsuite/libjava.lang/anon4.java 1106138275b ./libjava/testsuite/libjava.lang/anon4.out 3443545975b ./libjava/testsuite/libjava.lang/anonarray2.java 2382672912b ./libjava/testsuite/libjava.lang/anonarray2.out 3491730776b ./libjava/testsuite/libjava.lang/anonarray3.java 1685542540b ./libjava/testsuite/libjava.lang/anonarray3.out - 1808791407b ./libjava/testsuite/libjava.lang/anonarray.java - 2382672912b ./libjava/testsuite/libjava.lang/anonarray.out - 112674158b ./libjava/testsuite/libjava.lang/anon_ctor_itf_arg.java - 3114021423b ./libjava/testsuite/libjava.lang/anon_ctor_itf_arg.out - 4123776590b ./libjava/testsuite/libjava.lang/anon.java - 2668540913b ./libjava/testsuite/libjava.lang/anon.out - 861880957b ./libjava/testsuite/libjava.lang/Array_1.java - 882278996b ./libjava/testsuite/libjava.lang/Array_1.out - 1251637952b ./libjava/testsuite/libjava.lang/Array_2.java - 684357305b ./libjava/testsuite/libjava.lang/Array_2.out - 2813917809b ./libjava/testsuite/libjava.lang/Array_3.java - 4294967295b ./libjava/testsuite/libjava.lang/Array_3.out - 4266220724b ./libjava/testsuite/libjava.lang/ArrayStore2.java - 2092431633b ./libjava/testsuite/libjava.lang/ArrayStore2.out - 4156356334b ./libjava/testsuite/libjava.lang/ArrayStore2.xfail - 2027810547b ./libjava/testsuite/libjava.lang/ArrayStore.java - 1436845427b ./libjava/testsuite/libjava.lang/ArrayStore.out - 300949552b ./libjava/testsuite/libjava.lang/ArrayStore.xfail 2901641847b ./libjava/testsuite/libjava.lang/assign.java 4294967295b ./libjava/testsuite/libjava.lang/assign.out - 3857779796b ./libjava/testsuite/libjava.lang/Class_1.java - 2350753667b ./libjava/testsuite/libjava.lang/Class_1.out 2546101232b ./libjava/testsuite/libjava.lang/direct_read.java 2764570783b ./libjava/testsuite/libjava.lang/direct_read.out 941796535b ./libjava/testsuite/libjava.lang/direct_write.java 975119945b ./libjava/testsuite/libjava.lang/direct_write.out - 101283440b ./libjava/testsuite/libjava.lang/Divide_1.java - 1217781165b ./libjava/testsuite/libjava.lang/Divide_1.out 3876547816b ./libjava/testsuite/libjava.lang/emptystring.java 2346852551b ./libjava/testsuite/libjava.lang/emptystring.out 215085604b ./libjava/testsuite/libjava.lang/err10.java 2283836352b ./libjava/testsuite/libjava.lang/err10.out 1346535668b ./libjava/testsuite/libjava.lang/err11.java --- 14632,14803 ---- 1912520937b ./libjava/testsuite/libjava.jni/virtual.c 1112271683b ./libjava/testsuite/libjava.jni/virtual.java 3956933800b ./libjava/testsuite/libjava.jni/virtual.out + 2027810547b ./libjava/testsuite/libjava.lang/ArrayStore.java + 1436845427b ./libjava/testsuite/libjava.lang/ArrayStore.out + 300949552b ./libjava/testsuite/libjava.lang/ArrayStore.xfail + 4266220724b ./libjava/testsuite/libjava.lang/ArrayStore2.java + 2092431633b ./libjava/testsuite/libjava.lang/ArrayStore2.out + 4156356334b ./libjava/testsuite/libjava.lang/ArrayStore2.xfail + 861880957b ./libjava/testsuite/libjava.lang/Array_1.java + 882278996b ./libjava/testsuite/libjava.lang/Array_1.out + 1251637952b ./libjava/testsuite/libjava.lang/Array_2.java + 684357305b ./libjava/testsuite/libjava.lang/Array_2.out + 2813917809b ./libjava/testsuite/libjava.lang/Array_3.java + 4294967295b ./libjava/testsuite/libjava.lang/Array_3.out + 3857779796b ./libjava/testsuite/libjava.lang/Class_1.java + 2350753667b ./libjava/testsuite/libjava.lang/Class_1.out + 101283440b ./libjava/testsuite/libjava.lang/Divide_1.java + 1217781165b ./libjava/testsuite/libjava.lang/Divide_1.out + 511367726b ./libjava/testsuite/libjava.lang/EvaluationOrder.java + 3687043723b ./libjava/testsuite/libjava.lang/EvaluationOrder.out + 3723805515b ./libjava/testsuite/libjava.lang/FileHandleGcTest.java + 4294967295b ./libjava/testsuite/libjava.lang/FileHandleGcTest.out + 1007761145b ./libjava/testsuite/libjava.lang/Final.java + 1431193732b ./libjava/testsuite/libjava.lang/Final.out + 4214563461b ./libjava/testsuite/libjava.lang/Float_1.java + 151908695b ./libjava/testsuite/libjava.lang/Float_1.out + 4211438566b ./libjava/testsuite/libjava.lang/G19990301_01.java + 461683115b ./libjava/testsuite/libjava.lang/G19990301_01.out + 33515568b ./libjava/testsuite/libjava.lang/G19990302_02.java + 4126570333b ./libjava/testsuite/libjava.lang/G19990302_02.out + 1577075294b ./libjava/testsuite/libjava.lang/G19990303_01.java + 3694902336b ./libjava/testsuite/libjava.lang/G19990303_01.out + 3568552442b ./libjava/testsuite/libjava.lang/G19990303_02.java + 3718849348b ./libjava/testsuite/libjava.lang/G19990303_02.out + 690728310b ./libjava/testsuite/libjava.lang/G19990304_01.java + 2163223985b ./libjava/testsuite/libjava.lang/G19990304_01.out + 309057909b ./libjava/testsuite/libjava.lang/G19990310_01.java + 3818873941b ./libjava/testsuite/libjava.lang/G19990310_01.out + 3927692588b ./libjava/testsuite/libjava.lang/II.java + 324202418b ./libjava/testsuite/libjava.lang/II.out + 2590078423b ./libjava/testsuite/libjava.lang/InterfaceDispatch.java + 3002596040b ./libjava/testsuite/libjava.lang/InterfaceDispatch.out + 1233424497b ./libjava/testsuite/libjava.lang/InvokeReturn.java + 1505249822b ./libjava/testsuite/libjava.lang/InvokeReturn.out + 2975542902b ./libjava/testsuite/libjava.lang/Invoke_1.java + 636088706b ./libjava/testsuite/libjava.lang/Invoke_1.out + 482546829b ./libjava/testsuite/libjava.lang/Invoke_2.java + 1406708247b ./libjava/testsuite/libjava.lang/Invoke_2.out + 897141912b ./libjava/testsuite/libjava.lang/KeepInline.java + 3068566825b ./libjava/testsuite/libjava.lang/KeepInline.out + 1339868029b ./libjava/testsuite/libjava.lang/Matrix4f.java + 2870485448b ./libjava/testsuite/libjava.lang/Matrix4f.out + 3824357332b ./libjava/testsuite/libjava.lang/N19990310_02.java + 2283836352b ./libjava/testsuite/libjava.lang/N19990310_02.out + 792408510b ./libjava/testsuite/libjava.lang/N19990310_3.java + 2283836352b ./libjava/testsuite/libjava.lang/N19990310_3.out + 1646449121b ./libjava/testsuite/libjava.lang/N19990310_4.java + 2283836352b ./libjava/testsuite/libjava.lang/N19990310_4.out + 1522131980b ./libjava/testsuite/libjava.lang/N19990310_5.java + 2283836352b ./libjava/testsuite/libjava.lang/N19990310_5.out + 4106708340b ./libjava/testsuite/libjava.lang/PR141.java + 417890381b ./libjava/testsuite/libjava.lang/PR141.out + 924969358b ./libjava/testsuite/libjava.lang/PR160.java + 636088706b ./libjava/testsuite/libjava.lang/PR160.out + 710573971b ./libjava/testsuite/libjava.lang/PR162.java + 3491850227b ./libjava/testsuite/libjava.lang/PR162.out + 4227723795b ./libjava/testsuite/libjava.lang/PR218.java + 4039517750b ./libjava/testsuite/libjava.lang/PR218.out + 1329261743b ./libjava/testsuite/libjava.lang/PR242.java + 1147234566b ./libjava/testsuite/libjava.lang/PR242.out + 526707998b ./libjava/testsuite/libjava.lang/PR260.java + 3569591772b ./libjava/testsuite/libjava.lang/PR260.out + 14665884b ./libjava/testsuite/libjava.lang/PR3096.java + 2259565565b ./libjava/testsuite/libjava.lang/PR3096.out + 2985138501b ./libjava/testsuite/libjava.lang/PR3731.java + 3956933800b ./libjava/testsuite/libjava.lang/PR3731.out + 2537530668b ./libjava/testsuite/libjava.lang/PR5057.java + 742353047b ./libjava/testsuite/libjava.lang/PR5057.out + 2570001649b ./libjava/testsuite/libjava.lang/PR5057_2.java + 742353047b ./libjava/testsuite/libjava.lang/PR5057_2.out + 1438756381b ./libjava/testsuite/libjava.lang/PR55.java + 1201518198b ./libjava/testsuite/libjava.lang/PR55.out + 1733338993b ./libjava/testsuite/libjava.lang/PR56.java + 4294967295b ./libjava/testsuite/libjava.lang/PR56.out + 3042764517b ./libjava/testsuite/libjava.lang/PR6085.java + 3918401364b ./libjava/testsuite/libjava.lang/PR6085.out + 1382821704b ./libjava/testsuite/libjava.lang/PR6204.java + 3011727471b ./libjava/testsuite/libjava.lang/PR6204.out + 1407959591b ./libjava/testsuite/libjava.lang/PR6520.java + 596112227b ./libjava/testsuite/libjava.lang/PR6729.java + 3171855956b ./libjava/testsuite/libjava.lang/PR6729.out + 4154727428b ./libjava/testsuite/libjava.lang/PR6820.java + 2934438133b ./libjava/testsuite/libjava.lang/PR6820.out + 3263485865b ./libjava/testsuite/libjava.lang/PR8866.java + 230260077b ./libjava/testsuite/libjava.lang/Shazam.java + 2140426616b ./libjava/testsuite/libjava.lang/Shazam.out + 1190085929b ./libjava/testsuite/libjava.lang/StaticConstructor.java + 2129179555b ./libjava/testsuite/libjava.lang/StaticConstructor.out + 3112946038b ./libjava/testsuite/libjava.lang/StringBuffer_1.java + 2481391305b ./libjava/testsuite/libjava.lang/StringBuffer_1.out + 1320018384b ./libjava/testsuite/libjava.lang/SyncGlobal.java + 2327269251b ./libjava/testsuite/libjava.lang/SyncGlobal.out + 2731334240b ./libjava/testsuite/libjava.lang/SyncTest.java + 636088706b ./libjava/testsuite/libjava.lang/SyncTest.out + 2443605665b ./libjava/testsuite/libjava.lang/SyncTest.xfail + 3629333030b ./libjava/testsuite/libjava.lang/Synch.java + 497334114b ./libjava/testsuite/libjava.lang/Synch.out + 1571608298b ./libjava/testsuite/libjava.lang/TLtest.java + 2677880801b ./libjava/testsuite/libjava.lang/TLtest.out + 2443605665b ./libjava/testsuite/libjava.lang/TLtest.xfail + 1478180716b ./libjava/testsuite/libjava.lang/TestProxy.java + 2030707875b ./libjava/testsuite/libjava.lang/TestProxy.out + 523427206b ./libjava/testsuite/libjava.lang/Thread_Alive.java + 3591103454b ./libjava/testsuite/libjava.lang/Thread_Alive.out + 2443605665b ./libjava/testsuite/libjava.lang/Thread_Alive.xfail + 1125974645b ./libjava/testsuite/libjava.lang/Thread_Interrupt.java + 2320601405b ./libjava/testsuite/libjava.lang/Thread_Interrupt.out + 2443605665b ./libjava/testsuite/libjava.lang/Thread_Interrupt.xfail + 2682118636b ./libjava/testsuite/libjava.lang/Thread_Join.java + 2884008640b ./libjava/testsuite/libjava.lang/Thread_Join.out + 2443605665b ./libjava/testsuite/libjava.lang/Thread_Join.xfail + 3992399686b ./libjava/testsuite/libjava.lang/Thread_Monitor.java + 636088706b ./libjava/testsuite/libjava.lang/Thread_Monitor.out + 2443605665b ./libjava/testsuite/libjava.lang/Thread_Monitor.xfail + 3015472066b ./libjava/testsuite/libjava.lang/Thread_Sleep.java + 1299320686b ./libjava/testsuite/libjava.lang/Thread_Sleep.out + 2443605665b ./libjava/testsuite/libjava.lang/Thread_Sleep.xfail + 3820325918b ./libjava/testsuite/libjava.lang/Thread_Wait.java + 3866441409b ./libjava/testsuite/libjava.lang/Thread_Wait.out + 2443605665b ./libjava/testsuite/libjava.lang/Thread_Wait.xfail + 2785867945b ./libjava/testsuite/libjava.lang/Thread_Wait_2.java + 3278714705b ./libjava/testsuite/libjava.lang/Thread_Wait_2.out + 2443605665b ./libjava/testsuite/libjava.lang/Thread_Wait_2.xfail + 3412514508b ./libjava/testsuite/libjava.lang/Thread_Wait_Interrupt.java + 3606244218b ./libjava/testsuite/libjava.lang/Thread_Wait_Interrupt.out + 2443605665b ./libjava/testsuite/libjava.lang/Thread_Wait_Interrupt.xfail + 1046451808b ./libjava/testsuite/libjava.lang/Throw_1.java + 4294967295b ./libjava/testsuite/libjava.lang/Throw_1.out + 3191152259b ./libjava/testsuite/libjava.lang/Throw_2.java + 2518583198b ./libjava/testsuite/libjava.lang/Throw_2.out 68731963b ./libjava/testsuite/libjava.lang/anfi.java 1280347506b ./libjava/testsuite/libjava.lang/anfi.out + 4123776590b ./libjava/testsuite/libjava.lang/anon.java + 2668540913b ./libjava/testsuite/libjava.lang/anon.out 3232612065b ./libjava/testsuite/libjava.lang/anon2.java 119345088b ./libjava/testsuite/libjava.lang/anon2.out 1843983227b ./libjava/testsuite/libjava.lang/anon3.java 4270138359b ./libjava/testsuite/libjava.lang/anon3.out 507421585b ./libjava/testsuite/libjava.lang/anon4.java 1106138275b ./libjava/testsuite/libjava.lang/anon4.out + 112674158b ./libjava/testsuite/libjava.lang/anon_ctor_itf_arg.java + 3114021423b ./libjava/testsuite/libjava.lang/anon_ctor_itf_arg.out + 1808791407b ./libjava/testsuite/libjava.lang/anonarray.java + 2382672912b ./libjava/testsuite/libjava.lang/anonarray.out 3443545975b ./libjava/testsuite/libjava.lang/anonarray2.java 2382672912b ./libjava/testsuite/libjava.lang/anonarray2.out 3491730776b ./libjava/testsuite/libjava.lang/anonarray3.java 1685542540b ./libjava/testsuite/libjava.lang/anonarray3.out 2901641847b ./libjava/testsuite/libjava.lang/assign.java 4294967295b ./libjava/testsuite/libjava.lang/assign.out 2546101232b ./libjava/testsuite/libjava.lang/direct_read.java 2764570783b ./libjava/testsuite/libjava.lang/direct_read.out 941796535b ./libjava/testsuite/libjava.lang/direct_write.java 975119945b ./libjava/testsuite/libjava.lang/direct_write.out 3876547816b ./libjava/testsuite/libjava.lang/emptystring.java 2346852551b ./libjava/testsuite/libjava.lang/emptystring.out + 4201705759b ./libjava/testsuite/libjava.lang/err1.java + 2283836352b ./libjava/testsuite/libjava.lang/err1.out 215085604b ./libjava/testsuite/libjava.lang/err10.java 2283836352b ./libjava/testsuite/libjava.lang/err10.out 1346535668b ./libjava/testsuite/libjava.lang/err11.java *************** *** 14615,14622 **** 2283836352b ./libjava/testsuite/libjava.lang/err12.out 1986676622b ./libjava/testsuite/libjava.lang/err13.java 2283836352b ./libjava/testsuite/libjava.lang/err13.out - 4201705759b ./libjava/testsuite/libjava.lang/err1.java - 2283836352b ./libjava/testsuite/libjava.lang/err1.out 616366908b ./libjava/testsuite/libjava.lang/err2.java 2283836352b ./libjava/testsuite/libjava.lang/err2.out 826646394b ./libjava/testsuite/libjava.lang/err3.java --- 14806,14811 ---- *************** *** 14633,14666 **** 2283836352b ./libjava/testsuite/libjava.lang/err8.out 1031956187b ./libjava/testsuite/libjava.lang/err9.java 2283836352b ./libjava/testsuite/libjava.lang/err9.out - 511367726b ./libjava/testsuite/libjava.lang/EvaluationOrder.java - 3687043723b ./libjava/testsuite/libjava.lang/EvaluationOrder.out - 3723805515b ./libjava/testsuite/libjava.lang/FileHandleGcTest.java - 4294967295b ./libjava/testsuite/libjava.lang/FileHandleGcTest.out 595443392b ./libjava/testsuite/libjava.lang/final_inner.java 269314928b ./libjava/testsuite/libjava.lang/final_inner.out 2193071619b ./libjava/testsuite/libjava.lang/final_int.java 238725689b ./libjava/testsuite/libjava.lang/final_int.out - 1007761145b ./libjava/testsuite/libjava.lang/Final.java - 1431193732b ./libjava/testsuite/libjava.lang/Final.out 3093949935b ./libjava/testsuite/libjava.lang/final_static_and_friend.java 3219318744b ./libjava/testsuite/libjava.lang/final_static_and_friend.out - 4214563461b ./libjava/testsuite/libjava.lang/Float_1.java - 151908695b ./libjava/testsuite/libjava.lang/Float_1.out - 4211438566b ./libjava/testsuite/libjava.lang/G19990301_01.java - 461683115b ./libjava/testsuite/libjava.lang/G19990301_01.out - 33515568b ./libjava/testsuite/libjava.lang/G19990302_02.java - 4126570333b ./libjava/testsuite/libjava.lang/G19990302_02.out - 1577075294b ./libjava/testsuite/libjava.lang/G19990303_01.java - 3694902336b ./libjava/testsuite/libjava.lang/G19990303_01.out - 3568552442b ./libjava/testsuite/libjava.lang/G19990303_02.java - 3718849348b ./libjava/testsuite/libjava.lang/G19990303_02.out - 690728310b ./libjava/testsuite/libjava.lang/G19990304_01.java - 2163223985b ./libjava/testsuite/libjava.lang/G19990304_01.out - 309057909b ./libjava/testsuite/libjava.lang/G19990310_01.java - 3818873941b ./libjava/testsuite/libjava.lang/G19990310_01.out - 3927692588b ./libjava/testsuite/libjava.lang/II.java - 324202418b ./libjava/testsuite/libjava.lang/II.out 2525179149b ./libjava/testsuite/libjava.lang/indirect.java 904878278b ./libjava/testsuite/libjava.lang/indirect.out 2201837161b ./libjava/testsuite/libjava.lang/indirect_read.java --- 14822,14833 ---- *************** *** 14687,14725 **** 1716749990b ./libjava/testsuite/libjava.lang/inner_interface.out 1867695741b ./libjava/testsuite/libjava.lang/instance.java 1690435817b ./libjava/testsuite/libjava.lang/instance.out - 260121539b ./libjava/testsuite/libjava.lang/instinit2.java - 2177795989b ./libjava/testsuite/libjava.lang/instinit2.out 1279201771b ./libjava/testsuite/libjava.lang/instinit.java 2984417841b ./libjava/testsuite/libjava.lang/instinit.out ! 2590078423b ./libjava/testsuite/libjava.lang/InterfaceDispatch.java ! 3002596040b ./libjava/testsuite/libjava.lang/InterfaceDispatch.out ! 2975542902b ./libjava/testsuite/libjava.lang/Invoke_1.java ! 636088706b ./libjava/testsuite/libjava.lang/Invoke_1.out ! 482546829b ./libjava/testsuite/libjava.lang/Invoke_2.java ! 1406708247b ./libjava/testsuite/libjava.lang/Invoke_2.out 4259046923b ./libjava/testsuite/libjava.lang/invoke_from_inner.java 297330900b ./libjava/testsuite/libjava.lang/invoke_from_inner.out - 1233424497b ./libjava/testsuite/libjava.lang/InvokeReturn.java - 1505249822b ./libjava/testsuite/libjava.lang/InvokeReturn.out 4188659518b ./libjava/testsuite/libjava.lang/invokethrow.java 191230813b ./libjava/testsuite/libjava.lang/invokethrow.out - 897141912b ./libjava/testsuite/libjava.lang/KeepInline.java - 3068566825b ./libjava/testsuite/libjava.lang/KeepInline.out 1729910187b ./libjava/testsuite/libjava.lang/klass.java 1591540413b ./libjava/testsuite/libjava.lang/klass.out 2205709303b ./libjava/testsuite/libjava.lang/lang.exp - 1339868029b ./libjava/testsuite/libjava.lang/Matrix4f.java - 2870485448b ./libjava/testsuite/libjava.lang/Matrix4f.out 2891997855b ./libjava/testsuite/libjava.lang/multiple_finit.java 3652598231b ./libjava/testsuite/libjava.lang/multiple_finit.out - 3824357332b ./libjava/testsuite/libjava.lang/N19990310_02.java - 2283836352b ./libjava/testsuite/libjava.lang/N19990310_02.out - 792408510b ./libjava/testsuite/libjava.lang/N19990310_3.java - 2283836352b ./libjava/testsuite/libjava.lang/N19990310_3.out - 1646449121b ./libjava/testsuite/libjava.lang/N19990310_4.java - 2283836352b ./libjava/testsuite/libjava.lang/N19990310_4.out - 1522131980b ./libjava/testsuite/libjava.lang/N19990310_5.java - 2283836352b ./libjava/testsuite/libjava.lang/N19990310_5.out 1347891809b ./libjava/testsuite/libjava.lang/negzero.java 2849607288b ./libjava/testsuite/libjava.lang/negzero.out 1199013303b ./libjava/testsuite/libjava.lang/nested_with_ctor.java --- 14854,14872 ---- 1716749990b ./libjava/testsuite/libjava.lang/inner_interface.out 1867695741b ./libjava/testsuite/libjava.lang/instance.java 1690435817b ./libjava/testsuite/libjava.lang/instance.out 1279201771b ./libjava/testsuite/libjava.lang/instinit.java 2984417841b ./libjava/testsuite/libjava.lang/instinit.out ! 260121539b ./libjava/testsuite/libjava.lang/instinit2.java ! 2177795989b ./libjava/testsuite/libjava.lang/instinit2.out 4259046923b ./libjava/testsuite/libjava.lang/invoke_from_inner.java 297330900b ./libjava/testsuite/libjava.lang/invoke_from_inner.out 4188659518b ./libjava/testsuite/libjava.lang/invokethrow.java 191230813b ./libjava/testsuite/libjava.lang/invokethrow.out 1729910187b ./libjava/testsuite/libjava.lang/klass.java 1591540413b ./libjava/testsuite/libjava.lang/klass.out 2205709303b ./libjava/testsuite/libjava.lang/lang.exp 2891997855b ./libjava/testsuite/libjava.lang/multiple_finit.java 3652598231b ./libjava/testsuite/libjava.lang/multiple_finit.out 1347891809b ./libjava/testsuite/libjava.lang/negzero.java 2849607288b ./libjava/testsuite/libjava.lang/negzero.out 1199013303b ./libjava/testsuite/libjava.lang/nested_with_ctor.java *************** *** 14732,14776 **** 4059478477b ./libjava/testsuite/libjava.lang/pr109.out 1039260224b ./libjava/testsuite/libjava.lang/pr133.java 3434991606b ./libjava/testsuite/libjava.lang/pr133.out - 4106708340b ./libjava/testsuite/libjava.lang/PR141.java - 417890381b ./libjava/testsuite/libjava.lang/PR141.out - 924969358b ./libjava/testsuite/libjava.lang/PR160.java - 636088706b ./libjava/testsuite/libjava.lang/PR160.out - 710573971b ./libjava/testsuite/libjava.lang/PR162.java - 3491850227b ./libjava/testsuite/libjava.lang/PR162.out 3102718266b ./libjava/testsuite/libjava.lang/pr179.java 3022277835b ./libjava/testsuite/libjava.lang/pr179.out 2924279369b ./libjava/testsuite/libjava.lang/pr184.java 4039517750b ./libjava/testsuite/libjava.lang/pr184.out - 4227723795b ./libjava/testsuite/libjava.lang/PR218.java - 4039517750b ./libjava/testsuite/libjava.lang/PR218.out - 1329261743b ./libjava/testsuite/libjava.lang/PR242.java - 1147234566b ./libjava/testsuite/libjava.lang/PR242.out - 526707998b ./libjava/testsuite/libjava.lang/PR260.java - 3569591772b ./libjava/testsuite/libjava.lang/PR260.out - 14665884b ./libjava/testsuite/libjava.lang/PR3096.java - 2259565565b ./libjava/testsuite/libjava.lang/PR3096.out - 2985138501b ./libjava/testsuite/libjava.lang/PR3731.java - 3956933800b ./libjava/testsuite/libjava.lang/PR3731.out - 2570001649b ./libjava/testsuite/libjava.lang/PR5057_2.java - 742353047b ./libjava/testsuite/libjava.lang/PR5057_2.out - 2537530668b ./libjava/testsuite/libjava.lang/PR5057.java - 742353047b ./libjava/testsuite/libjava.lang/PR5057.out - 1438756381b ./libjava/testsuite/libjava.lang/PR55.java - 1201518198b ./libjava/testsuite/libjava.lang/PR55.out - 1733338993b ./libjava/testsuite/libjava.lang/PR56.java - 4294967295b ./libjava/testsuite/libjava.lang/PR56.out - 3042764517b ./libjava/testsuite/libjava.lang/PR6085.java - 3918401364b ./libjava/testsuite/libjava.lang/PR6085.out - 1382821704b ./libjava/testsuite/libjava.lang/PR6204.java - 3011727471b ./libjava/testsuite/libjava.lang/PR6204.out 4120892206b ./libjava/testsuite/libjava.lang/pr6388.java 3110601854b ./libjava/testsuite/libjava.lang/pr6388.out - 1407959591b ./libjava/testsuite/libjava.lang/PR6520.java - 596112227b ./libjava/testsuite/libjava.lang/PR6729.java - 3171855956b ./libjava/testsuite/libjava.lang/PR6729.out - 4154727428b ./libjava/testsuite/libjava.lang/PR6820.java - 2934438133b ./libjava/testsuite/libjava.lang/PR6820.out 832973302b ./libjava/testsuite/libjava.lang/pr83.java 987139956b ./libjava/testsuite/libjava.lang/pr83.out 3251332277b ./libjava/testsuite/libjava.lang/pr8415.java --- 14879,14890 ---- *************** *** 14780,14786 **** 1369554236b ./libjava/testsuite/libjava.lang/pr8823.java 2196447778b ./libjava/testsuite/libjava.lang/pr8823.out 563800791b ./libjava/testsuite/libjava.lang/pr8823.xfail - 3263485865b ./libjava/testsuite/libjava.lang/PR8866.java 2818824147b ./libjava/testsuite/libjava.lang/pr8945.java 2545623221b ./libjava/testsuite/libjava.lang/pr8945.out 1555339199b ./libjava/testsuite/libjava.lang/private_direct_read.java --- 14894,14899 ---- *************** *** 14790,14850 **** 523758111b ./libjava/testsuite/libjava.lang/private_indirect_write.java 1147328248b ./libjava/testsuite/libjava.lang/search_outer.java 3994336194b ./libjava/testsuite/libjava.lang/search_outer.out - 230260077b ./libjava/testsuite/libjava.lang/Shazam.java - 2140426616b ./libjava/testsuite/libjava.lang/Shazam.out - 1190085929b ./libjava/testsuite/libjava.lang/StaticConstructor.java - 2129179555b ./libjava/testsuite/libjava.lang/StaticConstructor.out - 3112946038b ./libjava/testsuite/libjava.lang/StringBuffer_1.java - 2481391305b ./libjava/testsuite/libjava.lang/StringBuffer_1.out - 1823338028b ./libjava/testsuite/libjava.lang/stringconst2.java - 2835043487b ./libjava/testsuite/libjava.lang/stringconst2.out 1863083995b ./libjava/testsuite/libjava.lang/stringconst.java 2835043487b ./libjava/testsuite/libjava.lang/stringconst.out 4156356334b ./libjava/testsuite/libjava.lang/stringconst.xfail 2261096902b ./libjava/testsuite/libjava.lang/stub.java 3886998802b ./libjava/testsuite/libjava.lang/stub.out - 1320018384b ./libjava/testsuite/libjava.lang/SyncGlobal.java - 2327269251b ./libjava/testsuite/libjava.lang/SyncGlobal.out - 3629333030b ./libjava/testsuite/libjava.lang/Synch.java - 497334114b ./libjava/testsuite/libjava.lang/Synch.out - 2731334240b ./libjava/testsuite/libjava.lang/SyncTest.java - 636088706b ./libjava/testsuite/libjava.lang/SyncTest.out - 2443605665b ./libjava/testsuite/libjava.lang/SyncTest.xfail 1655763772b ./libjava/testsuite/libjava.lang/test_long.java 3533371317b ./libjava/testsuite/libjava.lang/test_long.out - 1478180716b ./libjava/testsuite/libjava.lang/TestProxy.java - 2030707875b ./libjava/testsuite/libjava.lang/TestProxy.out - 523427206b ./libjava/testsuite/libjava.lang/Thread_Alive.java - 3591103454b ./libjava/testsuite/libjava.lang/Thread_Alive.out - 2443605665b ./libjava/testsuite/libjava.lang/Thread_Alive.xfail - 1125974645b ./libjava/testsuite/libjava.lang/Thread_Interrupt.java - 2320601405b ./libjava/testsuite/libjava.lang/Thread_Interrupt.out - 2443605665b ./libjava/testsuite/libjava.lang/Thread_Interrupt.xfail - 2682118636b ./libjava/testsuite/libjava.lang/Thread_Join.java - 2884008640b ./libjava/testsuite/libjava.lang/Thread_Join.out - 2443605665b ./libjava/testsuite/libjava.lang/Thread_Join.xfail - 3992399686b ./libjava/testsuite/libjava.lang/Thread_Monitor.java - 636088706b ./libjava/testsuite/libjava.lang/Thread_Monitor.out - 2443605665b ./libjava/testsuite/libjava.lang/Thread_Monitor.xfail - 3015472066b ./libjava/testsuite/libjava.lang/Thread_Sleep.java - 1299320686b ./libjava/testsuite/libjava.lang/Thread_Sleep.out - 2443605665b ./libjava/testsuite/libjava.lang/Thread_Sleep.xfail - 2785867945b ./libjava/testsuite/libjava.lang/Thread_Wait_2.java - 3278714705b ./libjava/testsuite/libjava.lang/Thread_Wait_2.out - 2443605665b ./libjava/testsuite/libjava.lang/Thread_Wait_2.xfail - 3412514508b ./libjava/testsuite/libjava.lang/Thread_Wait_Interrupt.java - 3606244218b ./libjava/testsuite/libjava.lang/Thread_Wait_Interrupt.out - 2443605665b ./libjava/testsuite/libjava.lang/Thread_Wait_Interrupt.xfail - 3820325918b ./libjava/testsuite/libjava.lang/Thread_Wait.java - 3866441409b ./libjava/testsuite/libjava.lang/Thread_Wait.out - 2443605665b ./libjava/testsuite/libjava.lang/Thread_Wait.xfail - 1046451808b ./libjava/testsuite/libjava.lang/Throw_1.java - 4294967295b ./libjava/testsuite/libjava.lang/Throw_1.out - 3191152259b ./libjava/testsuite/libjava.lang/Throw_2.java - 2518583198b ./libjava/testsuite/libjava.lang/Throw_2.out - 1571608298b ./libjava/testsuite/libjava.lang/TLtest.java - 2677880801b ./libjava/testsuite/libjava.lang/TLtest.out - 2443605665b ./libjava/testsuite/libjava.lang/TLtest.xfail 1531499305b ./libjava/testsuite/libjava.lang/tmi.java 1798035647b ./libjava/testsuite/libjava.lang/tmi.out 4123810669b ./libjava/testsuite/libjava.lang/tp.java --- 14903,14917 ---- 523758111b ./libjava/testsuite/libjava.lang/private_indirect_write.java 1147328248b ./libjava/testsuite/libjava.lang/search_outer.java 3994336194b ./libjava/testsuite/libjava.lang/search_outer.out 1863083995b ./libjava/testsuite/libjava.lang/stringconst.java 2835043487b ./libjava/testsuite/libjava.lang/stringconst.out 4156356334b ./libjava/testsuite/libjava.lang/stringconst.xfail + 1823338028b ./libjava/testsuite/libjava.lang/stringconst2.java + 2835043487b ./libjava/testsuite/libjava.lang/stringconst2.out 2261096902b ./libjava/testsuite/libjava.lang/stub.java 3886998802b ./libjava/testsuite/libjava.lang/stub.out 1655763772b ./libjava/testsuite/libjava.lang/test_long.java 3533371317b ./libjava/testsuite/libjava.lang/test_long.out 1531499305b ./libjava/testsuite/libjava.lang/tmi.java 1798035647b ./libjava/testsuite/libjava.lang/tmi.out 4123810669b ./libjava/testsuite/libjava.lang/tp.java *************** *** 14857,14864 **** 3113392904b ./libjava/testsuite/libjava.lang/utilTest.out 2040334255b ./libjava/testsuite/libjava.lang/verify.java 4294967295b ./libjava/testsuite/libjava.lang/verify.out - 932272313b ./libjava/testsuite/libjava.loader/dummy.java - 3576323543b ./libjava/testsuite/libjava.loader/loader.exp 4167021751b ./libjava/testsuite/libjava.loader/MyLoader.java 2496412578b ./libjava/testsuite/libjava.loader/TestEarlyGC.java 4294967295b ./libjava/testsuite/libjava.loader/TestEarlyGC.out --- 14924,14929 ---- *************** *** 14868,14886 **** 4294967295b ./libjava/testsuite/libjava.loader/TestMultiple.out 1835588609b ./libjava/testsuite/libjava.loader/TestParent.java 4294967295b ./libjava/testsuite/libjava.loader/TestParent.out 4013205125b ./libjava/testsuite/libjava.mauve/DejaGNUTestHarness.java 2966609441b ./libjava/testsuite/libjava.mauve/mauve.exp 3608340727b ./libjava/testsuite/libjava.mauve/xfails - 2694003197b ./libjava/testsuite/lib/libjava.exp - 41198457b ./libjava/testsuite/Makefile.am - 813266623b ./libjava/testsuite/Makefile.in - 3410290178b ./libjava/THANKS 2121899684b ./libjava/verify.cc - 3481778046b ./libjava/win32.cc 295719627b ./libjava/win32-threads.cc 3981227345b ./libobjc/aclocal.m4 2023635858b ./libobjc/archive.c - 4251769240b ./libobjc/ChangeLog 1187612736b ./libobjc/class.c 1748737547b ./libobjc/config.h.in 216167108b ./libobjc/configure --- 14933,14957 ---- 4294967295b ./libjava/testsuite/libjava.loader/TestMultiple.out 1835588609b ./libjava/testsuite/libjava.loader/TestParent.java 4294967295b ./libjava/testsuite/libjava.loader/TestParent.out + 932272313b ./libjava/testsuite/libjava.loader/dummy.java + 3576323543b ./libjava/testsuite/libjava.loader/loader.exp 4013205125b ./libjava/testsuite/libjava.mauve/DejaGNUTestHarness.java 2966609441b ./libjava/testsuite/libjava.mauve/mauve.exp 3608340727b ./libjava/testsuite/libjava.mauve/xfails 2121899684b ./libjava/verify.cc 295719627b ./libjava/win32-threads.cc + 3481778046b ./libjava/win32.cc + 3769241727b ./libobjc/ChangeLog + 4293292598b ./libobjc/Makefile.in + 638422313b ./libobjc/NXConstStr.m + 3808242592b ./libobjc/Object.m + 4111486637b ./libobjc/Protocol.m + 3823063152b ./libobjc/README + 749035591b ./libobjc/README.threads + 519687216b ./libobjc/THREADS + 4055902911b ./libobjc/THREADS.MACH 3981227345b ./libobjc/aclocal.m4 2023635858b ./libobjc/archive.c 1187612736b ./libobjc/class.c 1748737547b ./libobjc/config.h.in 216167108b ./libobjc/configure *************** *** 14893,14927 **** 4072125181b ./libobjc/libobjc_entry.c 4260228535b ./libobjc/linking.m 2398517524b ./libobjc/makefile.dos - 4293292598b ./libobjc/Makefile.in 2483567863b ./libobjc/misc.c 1914983354b ./libobjc/nil_method.c ! 638422313b ./libobjc/NXConstStr.m 2395655210b ./libobjc/objc/encoding.h 75862554b ./libobjc/objc/hash.h - 1937854528b ./libobjc/objc/NXConstStr.h 1908906592b ./libobjc/objc/objc-api.h - 3381499646b ./libobjc/objc/objc.h 1569406371b ./libobjc/objc/objc-list.h ! 1680445531b ./libobjc/objc/Object.h ! 226797930b ./libobjc/objc/Protocol.h 2628563916b ./libobjc/objc/runtime.h 1609667340b ./libobjc/objc/sarray.h 1260149625b ./libobjc/objc/thr.h 2746948162b ./libobjc/objc/typedstream.h - 3808242592b ./libobjc/Object.m 3301042811b ./libobjc/objects.c - 1078942169b ./libobjc/Protocol.m - 3823063152b ./libobjc/README - 749035591b ./libobjc/README.threads 3053500919b ./libobjc/sarray.c 733243441b ./libobjc/selector.c 3114440466b ./libobjc/sendmsg.c - 2758799845b ./libobjc/thr.c 3414327023b ./libobjc/thr-dce.c 2193934747b ./libobjc/thr-decosf1.c - 519687216b ./libobjc/THREADS - 4055902911b ./libobjc/THREADS.MACH 570456722b ./libobjc/thr-irix.c 2827034650b ./libobjc/thr-mach.c 1626852001b ./libobjc/thr-objc.c --- 14964,14989 ---- 4072125181b ./libobjc/libobjc_entry.c 4260228535b ./libobjc/linking.m 2398517524b ./libobjc/makefile.dos 2483567863b ./libobjc/misc.c 1914983354b ./libobjc/nil_method.c ! 1937854528b ./libobjc/objc/NXConstStr.h ! 1680445531b ./libobjc/objc/Object.h ! 226797930b ./libobjc/objc/Protocol.h 2395655210b ./libobjc/objc/encoding.h 75862554b ./libobjc/objc/hash.h 1908906592b ./libobjc/objc/objc-api.h 1569406371b ./libobjc/objc/objc-list.h ! 3381499646b ./libobjc/objc/objc.h 2628563916b ./libobjc/objc/runtime.h 1609667340b ./libobjc/objc/sarray.h 1260149625b ./libobjc/objc/thr.h 2746948162b ./libobjc/objc/typedstream.h 3301042811b ./libobjc/objects.c 3053500919b ./libobjc/sarray.c 733243441b ./libobjc/selector.c 3114440466b ./libobjc/sendmsg.c 3414327023b ./libobjc/thr-dce.c 2193934747b ./libobjc/thr-decosf1.c 570456722b ./libobjc/thr-irix.c 2827034650b ./libobjc/thr-mach.c 1626852001b ./libobjc/thr-objc.c *************** *** 14933,14944 **** 60531382b ./libobjc/thr-solaris.c 2005277748b ./libobjc/thr-vxworks.c 2963027857b ./libobjc/thr-win32.c ! 1476631381b ./libstdc++-v3/acconfig.h ! 2565448560b ./libstdc++-v3/acinclude.m4 ! 3043939341b ./libstdc++-v3/aclocal.m4 ! 3102548050b ./libstdc++-v3/ChangeLog 1996982572b ./libstdc++-v3/ChangeLog-2000 3665233589b ./libstdc++-v3/ChangeLog-2001 3829016086b ./libstdc++-v3/config/abi/alpha-freebsd5/baseline_symbols.txt 4214408479b ./libstdc++-v3/config/abi/alpha-linux-gnu/baseline_symbols.txt 1077465800b ./libstdc++-v3/config/abi/extract_symvers --- 14995,15011 ---- 60531382b ./libobjc/thr-solaris.c 2005277748b ./libobjc/thr-vxworks.c 2963027857b ./libobjc/thr-win32.c ! 2758799845b ./libobjc/thr.c ! 2201693294b ./libstdc++-v3/ChangeLog 1996982572b ./libstdc++-v3/ChangeLog-2000 3665233589b ./libstdc++-v3/ChangeLog-2001 + 980201769b ./libstdc++-v3/Makefile.am + 2176176714b ./libstdc++-v3/Makefile.in + 201474883b ./libstdc++-v3/README + 1476631381b ./libstdc++-v3/acconfig.h + 2565448560b ./libstdc++-v3/acinclude.m4 + 331813293b ./libstdc++-v3/aclocal.m4 + 569844405b ./libstdc++-v3/config.h.in 3829016086b ./libstdc++-v3/config/abi/alpha-freebsd5/baseline_symbols.txt 4214408479b ./libstdc++-v3/config/abi/alpha-linux-gnu/baseline_symbols.txt 1077465800b ./libstdc++-v3/config/abi/extract_symvers *************** *** 14962,14981 **** 4070465676b ./libstdc++-v3/config/cpu/mips/atomicity.h 915792421b ./libstdc++-v3/config/cpu/powerpc/atomicity.h 3930061484b ./libstdc++-v3/config/cpu/s390/atomicity.h ! 1984909614b ./libstdc++-v3/config/cpu/sparc/atomicity.h ! 569844405b ./libstdc++-v3/config.h.in 1453199454b ./libstdc++-v3/config/io/basic_file_libio.cc 3157152478b ./libstdc++-v3/config/io/basic_file_libio.h ! 2462532796b ./libstdc++-v3/config/io/basic_file_stdio.cc 467422175b ./libstdc++-v3/config/io/basic_file_stdio.h - 714808428b ./libstdc++-v3/config/io/c_io_libio_codecvt.c 1754405198b ./libstdc++-v3/config/io/c_io_libio.h 3948747720b ./libstdc++-v3/config/io/c_io_stdio.h 1615839786b ./libstdc++-v3/config/linker-map.dummy 3861607433b ./libstdc++-v3/config/linker-map.gnu 1424668937b ./libstdc++-v3/config/locale/generic/c_locale.cc 3031721532b ./libstdc++-v3/config/locale/generic/c_locale.h - 3981697735b ./libstdc++-v3/config/locale/generic/c++locale_internal.h 1369267090b ./libstdc++-v3/config/locale/generic/codecvt_members.cc 2005861251b ./libstdc++-v3/config/locale/generic/codecvt_specializations.h 4228611347b ./libstdc++-v3/config/locale/generic/collate_members.cc --- 15029,15047 ---- 4070465676b ./libstdc++-v3/config/cpu/mips/atomicity.h 915792421b ./libstdc++-v3/config/cpu/powerpc/atomicity.h 3930061484b ./libstdc++-v3/config/cpu/s390/atomicity.h ! 4245372504b ./libstdc++-v3/config/cpu/sparc/atomicity.h 1453199454b ./libstdc++-v3/config/io/basic_file_libio.cc 3157152478b ./libstdc++-v3/config/io/basic_file_libio.h ! 2716396272b ./libstdc++-v3/config/io/basic_file_stdio.cc 467422175b ./libstdc++-v3/config/io/basic_file_stdio.h 1754405198b ./libstdc++-v3/config/io/c_io_libio.h + 714808428b ./libstdc++-v3/config/io/c_io_libio_codecvt.c 3948747720b ./libstdc++-v3/config/io/c_io_stdio.h 1615839786b ./libstdc++-v3/config/linker-map.dummy 3861607433b ./libstdc++-v3/config/linker-map.gnu + 3981697735b ./libstdc++-v3/config/locale/generic/c++locale_internal.h 1424668937b ./libstdc++-v3/config/locale/generic/c_locale.cc 3031721532b ./libstdc++-v3/config/locale/generic/c_locale.h 1369267090b ./libstdc++-v3/config/locale/generic/codecvt_members.cc 2005861251b ./libstdc++-v3/config/locale/generic/codecvt_specializations.h 4228611347b ./libstdc++-v3/config/locale/generic/collate_members.cc *************** *** 14986,15000 **** 650933917b ./libstdc++-v3/config/locale/generic/numeric_members.cc 1292331022b ./libstdc++-v3/config/locale/generic/time_members.cc 4160660040b ./libstdc++-v3/config/locale/generic/time_members.h 3285574356b ./libstdc++-v3/config/locale/gnu/c_locale.cc 3489573188b ./libstdc++-v3/config/locale/gnu/c_locale.h - 490906006b ./libstdc++-v3/config/locale/gnu/c++locale_internal.h 2712762793b ./libstdc++-v3/config/locale/gnu/codecvt_members.cc 1792931968b ./libstdc++-v3/config/locale/gnu/collate_members.cc 429457042b ./libstdc++-v3/config/locale/gnu/ctype_members.cc 440357314b ./libstdc++-v3/config/locale/gnu/messages_members.cc 2781776822b ./libstdc++-v3/config/locale/gnu/messages_members.h ! 875064597b ./libstdc++-v3/config/locale/gnu/monetary_members.cc 618801409b ./libstdc++-v3/config/locale/gnu/numeric_members.cc 3799603845b ./libstdc++-v3/config/locale/gnu/time_members.cc 2289591476b ./libstdc++-v3/config/locale/gnu/time_members.h --- 15052,15066 ---- 650933917b ./libstdc++-v3/config/locale/generic/numeric_members.cc 1292331022b ./libstdc++-v3/config/locale/generic/time_members.cc 4160660040b ./libstdc++-v3/config/locale/generic/time_members.h + 490906006b ./libstdc++-v3/config/locale/gnu/c++locale_internal.h 3285574356b ./libstdc++-v3/config/locale/gnu/c_locale.cc 3489573188b ./libstdc++-v3/config/locale/gnu/c_locale.h 2712762793b ./libstdc++-v3/config/locale/gnu/codecvt_members.cc 1792931968b ./libstdc++-v3/config/locale/gnu/collate_members.cc 429457042b ./libstdc++-v3/config/locale/gnu/ctype_members.cc 440357314b ./libstdc++-v3/config/locale/gnu/messages_members.cc 2781776822b ./libstdc++-v3/config/locale/gnu/messages_members.h ! 1618555003b ./libstdc++-v3/config/locale/gnu/monetary_members.cc 618801409b ./libstdc++-v3/config/locale/gnu/numeric_members.cc 3799603845b ./libstdc++-v3/config/locale/gnu/time_members.cc 2289591476b ./libstdc++-v3/config/locale/gnu/time_members.h *************** *** 15070,15099 **** 3459761118b ./libstdc++-v3/config/os/windiss/ctype_inline.h 273313682b ./libstdc++-v3/config/os/windiss/ctype_noninline.h 2207004934b ./libstdc++-v3/config/os/windiss/os_defines.h ! 3057615828b ./libstdc++-v3/configure ! 2677676702b ./libstdc++-v3/configure.in 2975501078b ./libstdc++-v3/configure.target 1779001880b ./libstdc++-v3/docs/doxygen/doxygroups.cc 3218460995b ./libstdc++-v3/docs/doxygen/filter 970775578b ./libstdc++-v3/docs/doxygen/filter.sed - 2885814097b ./libstdc++-v3/docs/doxygen/Intro.3 920691422b ./libstdc++-v3/docs/doxygen/mainpage.html 1190610449b ./libstdc++-v3/docs/doxygen/run_doxygen 1848847078b ./libstdc++-v3/docs/doxygen/stdheader.cc 1658879940b ./libstdc++-v3/docs/doxygen/style.css 4159982733b ./libstdc++-v3/docs/doxygen/tables.html - 2181338291b ./libstdc++-v3/docs/doxygen/TODO 3757743049b ./libstdc++-v3/docs/doxygen/user.cfg.in 4001239912b ./libstdc++-v3/docs/html/17_intro/BADNAMES 2484115512b ./libstdc++-v3/docs/html/17_intro/BUGS 696839436b ./libstdc++-v3/docs/html/17_intro/CHECKLIST - 3997884874b ./libstdc++-v3/docs/html/17_intro/concept_check.diff - 3563943056b ./libstdc++-v3/docs/html/17_intro/contribute.html 2171125041b ./libstdc++-v3/docs/html/17_intro/COPYING 3922222294b ./libstdc++-v3/docs/html/17_intro/COPYING.DOC - 3201164177b ./libstdc++-v3/docs/html/17_intro/C++STYLE 3222542515b ./libstdc++-v3/docs/html/17_intro/DESIGN 1363011462b ./libstdc++-v3/docs/html/17_intro/HEADER_POLICY 3461116413b ./libstdc++-v3/docs/html/17_intro/headers_cc.txt 2909345151b ./libstdc++-v3/docs/html/17_intro/howto.html 3565645043b ./libstdc++-v3/docs/html/17_intro/libstdc++-assign.txt --- 15136,15168 ---- 3459761118b ./libstdc++-v3/config/os/windiss/ctype_inline.h 273313682b ./libstdc++-v3/config/os/windiss/ctype_noninline.h 2207004934b ./libstdc++-v3/config/os/windiss/os_defines.h ! 2154062380b ./libstdc++-v3/configure ! 3531775573b ./libstdc++-v3/configure.in 2975501078b ./libstdc++-v3/configure.target + 2885814097b ./libstdc++-v3/docs/doxygen/Intro.3 + 2181338291b ./libstdc++-v3/docs/doxygen/TODO 1779001880b ./libstdc++-v3/docs/doxygen/doxygroups.cc 3218460995b ./libstdc++-v3/docs/doxygen/filter 970775578b ./libstdc++-v3/docs/doxygen/filter.sed 920691422b ./libstdc++-v3/docs/doxygen/mainpage.html 1190610449b ./libstdc++-v3/docs/doxygen/run_doxygen 1848847078b ./libstdc++-v3/docs/doxygen/stdheader.cc 1658879940b ./libstdc++-v3/docs/doxygen/style.css 4159982733b ./libstdc++-v3/docs/doxygen/tables.html 3757743049b ./libstdc++-v3/docs/doxygen/user.cfg.in 4001239912b ./libstdc++-v3/docs/html/17_intro/BADNAMES 2484115512b ./libstdc++-v3/docs/html/17_intro/BUGS + 3201164177b ./libstdc++-v3/docs/html/17_intro/C++STYLE 696839436b ./libstdc++-v3/docs/html/17_intro/CHECKLIST 2171125041b ./libstdc++-v3/docs/html/17_intro/COPYING 3922222294b ./libstdc++-v3/docs/html/17_intro/COPYING.DOC 3222542515b ./libstdc++-v3/docs/html/17_intro/DESIGN 1363011462b ./libstdc++-v3/docs/html/17_intro/HEADER_POLICY + 12001592b ./libstdc++-v3/docs/html/17_intro/PROBLEMS + 2519365120b ./libstdc++-v3/docs/html/17_intro/RELEASE-NOTES + 1434629529b ./libstdc++-v3/docs/html/17_intro/TODO + 3997884874b ./libstdc++-v3/docs/html/17_intro/concept_check.diff + 3563943056b ./libstdc++-v3/docs/html/17_intro/contribute.html 3461116413b ./libstdc++-v3/docs/html/17_intro/headers_cc.txt 2909345151b ./libstdc++-v3/docs/html/17_intro/howto.html 3565645043b ./libstdc++-v3/docs/html/17_intro/libstdc++-assign.txt *************** *** 15102,15110 **** 405521978b ./libstdc++-v3/docs/html/17_intro/porting-howto.xml 1377009950b ./libstdc++-v3/docs/html/17_intro/porting.html 2028272619b ./libstdc++-v3/docs/html/17_intro/porting.texi - 12001592b ./libstdc++-v3/docs/html/17_intro/PROBLEMS - 2519365120b ./libstdc++-v3/docs/html/17_intro/RELEASE-NOTES - 1434629529b ./libstdc++-v3/docs/html/17_intro/TODO 942477833b ./libstdc++-v3/docs/html/18_support/howto.html 3047072579b ./libstdc++-v3/docs/html/19_diagnostics/howto.html 2792519560b ./libstdc++-v3/docs/html/20_util/howto.html --- 15171,15176 ---- *************** *** 15125,15130 **** --- 15191,15197 ---- 2452165260b ./libstdc++-v3/docs/html/27_io/binary_iostreams_kanze.txt 3249620502b ./libstdc++-v3/docs/html/27_io/binary_iostreams_kuehl.txt 3035695656b ./libstdc++-v3/docs/html/27_io/howto.html + 2559700175b ./libstdc++-v3/docs/html/Makefile 3224577239b ./libstdc++-v3/docs/html/abi.txt 1390107914b ./libstdc++-v3/docs/html/configopts.html 3808579651b ./libstdc++-v3/docs/html/debug.html *************** *** 15139,15148 **** 1006357111b ./libstdc++-v3/docs/html/install.html 2049389478b ./libstdc++-v3/docs/html/lib3styles.css 1757651676b ./libstdc++-v3/docs/html/makedoc.awk - 2559700175b ./libstdc++-v3/docs/html/Makefile 3964606044b ./libstdc++-v3/docs/html/test.html ! 2473605692b ./libstdc++-v3/include/backward/algobase.h 2730818532b ./libstdc++-v3/include/backward/algo.h 4187232950b ./libstdc++-v3/include/backward/alloc.h 2505680659b ./libstdc++-v3/include/backward/backward_warning.h 1252063761b ./libstdc++-v3/include/backward/bvector.h --- 15206,15216 ---- 1006357111b ./libstdc++-v3/docs/html/install.html 2049389478b ./libstdc++-v3/docs/html/lib3styles.css 1757651676b ./libstdc++-v3/docs/html/makedoc.awk 3964606044b ./libstdc++-v3/docs/html/test.html ! 3252604710b ./libstdc++-v3/include/Makefile.am ! 2117932589b ./libstdc++-v3/include/Makefile.in 2730818532b ./libstdc++-v3/include/backward/algo.h + 2473605692b ./libstdc++-v3/include/backward/algobase.h 4187232950b ./libstdc++-v3/include/backward/alloc.h 2505680659b ./libstdc++-v3/include/backward/backward_warning.h 1252063761b ./libstdc++-v3/include/backward/bvector.h *************** *** 15171,15248 **** 2568486625b ./libstdc++-v3/include/backward/set.h 2372197114b ./libstdc++-v3/include/backward/slist.h 374939843b ./libstdc++-v3/include/backward/stack.h - 3825989730b ./libstdc++-v3/include/backward/streambuf.h 2367779603b ./libstdc++-v3/include/backward/stream.h 4047744617b ./libstdc++-v3/include/backward/strstream 2999216474b ./libstdc++-v3/include/backward/tempbuf.h 1420771511b ./libstdc++-v3/include/backward/tree.h 3803139445b ./libstdc++-v3/include/backward/vector.h ! 4098873302b ./libstdc++-v3/include/bits/basic_ios.h ! 1002346927b ./libstdc++-v3/include/bits/basic_ios.tcc 2377036917b ./libstdc++-v3/include/bits/basic_string.h ! 925690662b ./libstdc++-v3/include/bits/basic_string.tcc 3126573300b ./libstdc++-v3/include/bits/boost_concept_check.h ! 2418149102b ./libstdc++-v3/include/bits/c++config 994369839b ./libstdc++-v3/include/bits/char_traits.h 694818237b ./libstdc++-v3/include/bits/codecvt.h 4105193573b ./libstdc++-v3/include/bits/concept_check.h 329719722b ./libstdc++-v3/include/bits/cpp_type_traits.h 2371882872b ./libstdc++-v3/include/bits/deque.tcc 489793863b ./libstdc++-v3/include/bits/fpos.h ! 1476997947b ./libstdc++-v3/include/bits/fstream.tcc 3886600201b ./libstdc++-v3/include/bits/functexcept.h - 2533571042b ./libstdc++-v3/include/bits/gslice_array.h 1117238130b ./libstdc++-v3/include/bits/gslice.h 3095889165b ./libstdc++-v3/include/bits/indirect_array.h 1700217390b ./libstdc++-v3/include/bits/ios_base.h ! 4218369762b ./libstdc++-v3/include/bits/istream.tcc ! 3496463763b ./libstdc++-v3/include/bits/list.tcc ! 837416971b ./libstdc++-v3/include/bits/locale_classes.h 1832292610b ./libstdc++-v3/include/bits/locale_facets.h ! 399514550b ./libstdc++-v3/include/bits/locale_facets.tcc 3993915647b ./libstdc++-v3/include/bits/localefwd.h 1105005297b ./libstdc++-v3/include/bits/mask_array.h ! 3915142114b ./libstdc++-v3/include/bits/ostream.tcc 3592433582b ./libstdc++-v3/include/bits/pthread_allocimpl.h 3530846268b ./libstdc++-v3/include/bits/slice_array.h ! 3555571522b ./libstdc++-v3/include/bits/sstream.tcc 3316800061b ./libstdc++-v3/include/bits/stl_algobase.h - 1522343897b ./libstdc++-v3/include/bits/stl_algo.h 2417140750b ./libstdc++-v3/include/bits/stl_alloc.h 840750803b ./libstdc++-v3/include/bits/stl_bvector.h 3302543196b ./libstdc++-v3/include/bits/stl_construct.h 2340261024b ./libstdc++-v3/include/bits/stl_deque.h 297399515b ./libstdc++-v3/include/bits/stl_function.h 2464389940b ./libstdc++-v3/include/bits/stl_heap.h 1904359658b ./libstdc++-v3/include/bits/stl_iterator_base_funcs.h 1450548210b ./libstdc++-v3/include/bits/stl_iterator_base_types.h - 1129412815b ./libstdc++-v3/include/bits/stl_iterator.h 1475754507b ./libstdc++-v3/include/bits/stl_list.h 1933538770b ./libstdc++-v3/include/bits/stl_map.h 742036372b ./libstdc++-v3/include/bits/stl_multimap.h ! 2343171452b ./libstdc++-v3/include/bits/stl_multiset.h 1738941440b ./libstdc++-v3/include/bits/stl_numeric.h 4071317909b ./libstdc++-v3/include/bits/stl_pair.h 369962606b ./libstdc++-v3/include/bits/stl_pthread_alloc.h 3824509806b ./libstdc++-v3/include/bits/stl_queue.h 2150554874b ./libstdc++-v3/include/bits/stl_raw_storage_iter.h 2630067228b ./libstdc++-v3/include/bits/stl_relops.h ! 114789971b ./libstdc++-v3/include/bits/stl_set.h 458911618b ./libstdc++-v3/include/bits/stl_stack.h 745396233b ./libstdc++-v3/include/bits/stl_tempbuf.h 1207025674b ./libstdc++-v3/include/bits/stl_threads.h 119104515b ./libstdc++-v3/include/bits/stl_tree.h 1954571679b ./libstdc++-v3/include/bits/stl_uninitialized.h 6253542b ./libstdc++-v3/include/bits/stl_vector.h - 4258920603b ./libstdc++-v3/include/bits/streambuf_iterator.h - 175438667b ./libstdc++-v3/include/bits/streambuf.tcc 99981565b ./libstdc++-v3/include/bits/stream_iterator.h 1373192946b ./libstdc++-v3/include/bits/stringfwd.h 1571290449b ./libstdc++-v3/include/bits/type_traits.h 338351241b ./libstdc++-v3/include/bits/valarray_array.h 780098702b ./libstdc++-v3/include/bits/valarray_array.tcc 430572417b ./libstdc++-v3/include/bits/valarray_meta.h 3741283544b ./libstdc++-v3/include/bits/vector.tcc 174717104b ./libstdc++-v3/include/c_compatibility/assert.h 157601073b ./libstdc++-v3/include/c_compatibility/ctype.h 1205462529b ./libstdc++-v3/include/c_compatibility/errno.h --- 15239,15334 ---- 2568486625b ./libstdc++-v3/include/backward/set.h 2372197114b ./libstdc++-v3/include/backward/slist.h 374939843b ./libstdc++-v3/include/backward/stack.h 2367779603b ./libstdc++-v3/include/backward/stream.h + 3825989730b ./libstdc++-v3/include/backward/streambuf.h 4047744617b ./libstdc++-v3/include/backward/strstream 2999216474b ./libstdc++-v3/include/backward/tempbuf.h 1420771511b ./libstdc++-v3/include/backward/tree.h 3803139445b ./libstdc++-v3/include/backward/vector.h ! 1247476392b ./libstdc++-v3/include/bits/basic_ios.h ! 1045648475b ./libstdc++-v3/include/bits/basic_ios.tcc 2377036917b ./libstdc++-v3/include/bits/basic_string.h ! 2617734007b ./libstdc++-v3/include/bits/basic_string.tcc 3126573300b ./libstdc++-v3/include/bits/boost_concept_check.h ! 3555994863b ./libstdc++-v3/include/bits/c++config 994369839b ./libstdc++-v3/include/bits/char_traits.h 694818237b ./libstdc++-v3/include/bits/codecvt.h 4105193573b ./libstdc++-v3/include/bits/concept_check.h 329719722b ./libstdc++-v3/include/bits/cpp_type_traits.h 2371882872b ./libstdc++-v3/include/bits/deque.tcc 489793863b ./libstdc++-v3/include/bits/fpos.h ! 2587066478b ./libstdc++-v3/include/bits/fstream.tcc 3886600201b ./libstdc++-v3/include/bits/functexcept.h 1117238130b ./libstdc++-v3/include/bits/gslice.h + 2533571042b ./libstdc++-v3/include/bits/gslice_array.h 3095889165b ./libstdc++-v3/include/bits/indirect_array.h 1700217390b ./libstdc++-v3/include/bits/ios_base.h ! 912571726b ./libstdc++-v3/include/bits/istream.tcc ! 2520058311b ./libstdc++-v3/include/bits/list.tcc ! 1753104675b ./libstdc++-v3/include/bits/locale_classes.h 1832292610b ./libstdc++-v3/include/bits/locale_facets.h ! 2013744461b ./libstdc++-v3/include/bits/locale_facets.tcc 3993915647b ./libstdc++-v3/include/bits/localefwd.h 1105005297b ./libstdc++-v3/include/bits/mask_array.h ! 3414437108b ./libstdc++-v3/include/bits/ostream.tcc 3592433582b ./libstdc++-v3/include/bits/pthread_allocimpl.h 3530846268b ./libstdc++-v3/include/bits/slice_array.h ! 1268335249b ./libstdc++-v3/include/bits/sstream.tcc ! 1941997707b ./libstdc++-v3/include/bits/stl_algo.h 3316800061b ./libstdc++-v3/include/bits/stl_algobase.h 2417140750b ./libstdc++-v3/include/bits/stl_alloc.h 840750803b ./libstdc++-v3/include/bits/stl_bvector.h 3302543196b ./libstdc++-v3/include/bits/stl_construct.h 2340261024b ./libstdc++-v3/include/bits/stl_deque.h 297399515b ./libstdc++-v3/include/bits/stl_function.h 2464389940b ./libstdc++-v3/include/bits/stl_heap.h + 1129412815b ./libstdc++-v3/include/bits/stl_iterator.h 1904359658b ./libstdc++-v3/include/bits/stl_iterator_base_funcs.h 1450548210b ./libstdc++-v3/include/bits/stl_iterator_base_types.h 1475754507b ./libstdc++-v3/include/bits/stl_list.h 1933538770b ./libstdc++-v3/include/bits/stl_map.h 742036372b ./libstdc++-v3/include/bits/stl_multimap.h ! 3296857953b ./libstdc++-v3/include/bits/stl_multiset.h 1738941440b ./libstdc++-v3/include/bits/stl_numeric.h 4071317909b ./libstdc++-v3/include/bits/stl_pair.h 369962606b ./libstdc++-v3/include/bits/stl_pthread_alloc.h 3824509806b ./libstdc++-v3/include/bits/stl_queue.h 2150554874b ./libstdc++-v3/include/bits/stl_raw_storage_iter.h 2630067228b ./libstdc++-v3/include/bits/stl_relops.h ! 1249223517b ./libstdc++-v3/include/bits/stl_set.h 458911618b ./libstdc++-v3/include/bits/stl_stack.h 745396233b ./libstdc++-v3/include/bits/stl_tempbuf.h 1207025674b ./libstdc++-v3/include/bits/stl_threads.h 119104515b ./libstdc++-v3/include/bits/stl_tree.h 1954571679b ./libstdc++-v3/include/bits/stl_uninitialized.h 6253542b ./libstdc++-v3/include/bits/stl_vector.h 99981565b ./libstdc++-v3/include/bits/stream_iterator.h + 2556992850b ./libstdc++-v3/include/bits/streambuf.tcc + 4258920603b ./libstdc++-v3/include/bits/streambuf_iterator.h 1373192946b ./libstdc++-v3/include/bits/stringfwd.h 1571290449b ./libstdc++-v3/include/bits/type_traits.h 338351241b ./libstdc++-v3/include/bits/valarray_array.h 780098702b ./libstdc++-v3/include/bits/valarray_array.tcc 430572417b ./libstdc++-v3/include/bits/valarray_meta.h 3741283544b ./libstdc++-v3/include/bits/vector.tcc + 4098574322b ./libstdc++-v3/include/c/std_cassert.h + 1243273805b ./libstdc++-v3/include/c/std_cctype.h + 4253759613b ./libstdc++-v3/include/c/std_cerrno.h + 4090686127b ./libstdc++-v3/include/c/std_cfloat.h + 1108468159b ./libstdc++-v3/include/c/std_ciso646.h + 1957729161b ./libstdc++-v3/include/c/std_climits.h + 2616677270b ./libstdc++-v3/include/c/std_clocale.h + 3373490872b ./libstdc++-v3/include/c/std_cmath.h + 2198093326b ./libstdc++-v3/include/c/std_csetjmp.h + 3312976087b ./libstdc++-v3/include/c/std_csignal.h + 1491351151b ./libstdc++-v3/include/c/std_cstdarg.h + 969673189b ./libstdc++-v3/include/c/std_cstddef.h + 3498882442b ./libstdc++-v3/include/c/std_cstdio.h + 2143638095b ./libstdc++-v3/include/c/std_cstdlib.h + 948151623b ./libstdc++-v3/include/c/std_cstring.h + 641399722b ./libstdc++-v3/include/c/std_ctime.h + 1161763336b ./libstdc++-v3/include/c/std_cwchar.h + 446614233b ./libstdc++-v3/include/c/std_cwctype.h 174717104b ./libstdc++-v3/include/c_compatibility/assert.h 157601073b ./libstdc++-v3/include/c_compatibility/ctype.h 1205462529b ./libstdc++-v3/include/c_compatibility/errno.h *************** *** 15261,15285 **** 1640882917b ./libstdc++-v3/include/c_compatibility/time.h 242317554b ./libstdc++-v3/include/c_compatibility/wchar.h 264438164b ./libstdc++-v3/include/c_compatibility/wctype.h - 4098574322b ./libstdc++-v3/include/c/std_cassert.h - 1243273805b ./libstdc++-v3/include/c/std_cctype.h - 4253759613b ./libstdc++-v3/include/c/std_cerrno.h - 4090686127b ./libstdc++-v3/include/c/std_cfloat.h - 1108468159b ./libstdc++-v3/include/c/std_ciso646.h - 1957729161b ./libstdc++-v3/include/c/std_climits.h - 2616677270b ./libstdc++-v3/include/c/std_clocale.h - 3373490872b ./libstdc++-v3/include/c/std_cmath.h 4087026299b ./libstdc++-v3/include/c_std/cmath.tcc - 2198093326b ./libstdc++-v3/include/c/std_csetjmp.h - 3312976087b ./libstdc++-v3/include/c/std_csignal.h - 1491351151b ./libstdc++-v3/include/c/std_cstdarg.h - 969673189b ./libstdc++-v3/include/c/std_cstddef.h - 3498882442b ./libstdc++-v3/include/c/std_cstdio.h - 2143638095b ./libstdc++-v3/include/c/std_cstdlib.h - 948151623b ./libstdc++-v3/include/c/std_cstring.h - 641399722b ./libstdc++-v3/include/c/std_ctime.h - 1161763336b ./libstdc++-v3/include/c/std_cwchar.h - 446614233b ./libstdc++-v3/include/c/std_cwctype.h 1055988818b ./libstdc++-v3/include/c_std/std_cassert.h 513093939b ./libstdc++-v3/include/c_std/std_cctype.h 2752122999b ./libstdc++-v3/include/c_std/std_cerrno.h --- 15347,15353 ---- *************** *** 15302,15308 **** 1641495854b ./libstdc++-v3/include/ext/enc_filebuf.h 3444585981b ./libstdc++-v3/include/ext/functional 1263241564b ./libstdc++-v3/include/ext/hash_map ! 1556994010b ./libstdc++-v3/include/ext/hash_set 1006064723b ./libstdc++-v3/include/ext/iterator 1166159156b ./libstdc++-v3/include/ext/memory 2161063846b ./libstdc++-v3/include/ext/numeric --- 15370,15376 ---- 1641495854b ./libstdc++-v3/include/ext/enc_filebuf.h 3444585981b ./libstdc++-v3/include/ext/functional 1263241564b ./libstdc++-v3/include/ext/hash_map ! 2487556950b ./libstdc++-v3/include/ext/hash_set 1006064723b ./libstdc++-v3/include/ext/iterator 1166159156b ./libstdc++-v3/include/ext/memory 2161063846b ./libstdc++-v3/include/ext/numeric *************** *** 15314,15321 **** 2805137138b ./libstdc++-v3/include/ext/stl_hash_fun.h 3897129258b ./libstdc++-v3/include/ext/stl_hashtable.h 984888269b ./libstdc++-v3/include/ext/stl_rope.h - 3252604710b ./libstdc++-v3/include/Makefile.am - 2117932589b ./libstdc++-v3/include/Makefile.in 4064711400b ./libstdc++-v3/include/std/std_algorithm.h 3911856756b ./libstdc++-v3/include/std/std_bitset.h 1807119215b ./libstdc++-v3/include/std/std_complex.h --- 15382,15387 ---- *************** *** 15323,15330 **** 1066440750b ./libstdc++-v3/include/std/std_fstream.h 3174050204b ./libstdc++-v3/include/std/std_functional.h 2685440839b ./libstdc++-v3/include/std/std_iomanip.h - 585057502b ./libstdc++-v3/include/std/std_iosfwd.h 2056599714b ./libstdc++-v3/include/std/std_ios.h 2424855794b ./libstdc++-v3/include/std/std_iostream.h 1392065197b ./libstdc++-v3/include/std/std_istream.h 3826418885b ./libstdc++-v3/include/std/std_iterator.h --- 15389,15396 ---- 1066440750b ./libstdc++-v3/include/std/std_fstream.h 3174050204b ./libstdc++-v3/include/std/std_functional.h 2685440839b ./libstdc++-v3/include/std/std_iomanip.h 2056599714b ./libstdc++-v3/include/std/std_ios.h + 585057502b ./libstdc++-v3/include/std/std_iosfwd.h 2424855794b ./libstdc++-v3/include/std/std_iostream.h 1392065197b ./libstdc++-v3/include/std/std_istream.h 3826418885b ./libstdc++-v3/include/std/std_iterator.h *************** *** 15340,15354 **** 3083807553b ./libstdc++-v3/include/std/std_sstream.h 855058790b ./libstdc++-v3/include/std/std_stack.h 3429471837b ./libstdc++-v3/include/std/std_stdexcept.h ! 2039006963b ./libstdc++-v3/include/std/std_streambuf.h 1365091273b ./libstdc++-v3/include/std/std_string.h 4158492065b ./libstdc++-v3/include/std/std_utility.h 2660730597b ./libstdc++-v3/include/std/std_valarray.h 3713138538b ./libstdc++-v3/include/std/std_vector.h ! 702995762b ./libstdc++-v3/libio/ChangeLog 2122576197b ./libstdc++-v3/libio/filedoalloc.c 3590060213b ./libstdc++-v3/libio/fileops.c - 314955067b ./libstdc++-v3/libio/_G_config.h 1488981607b ./libstdc++-v3/libio/genops.c 1308598865b ./libstdc++-v3/libio/iofclose.c 932932445b ./libstdc++-v3/libio/iofopen.c --- 15406,15422 ---- 3083807553b ./libstdc++-v3/include/std/std_sstream.h 855058790b ./libstdc++-v3/include/std/std_stack.h 3429471837b ./libstdc++-v3/include/std/std_stdexcept.h ! 547219524b ./libstdc++-v3/include/std/std_streambuf.h 1365091273b ./libstdc++-v3/include/std/std_string.h 4158492065b ./libstdc++-v3/include/std/std_utility.h 2660730597b ./libstdc++-v3/include/std/std_valarray.h 3713138538b ./libstdc++-v3/include/std/std_vector.h ! 462797626b ./libstdc++-v3/libio/ChangeLog ! 3759774482b ./libstdc++-v3/libio/Makefile.am ! 3035076726b ./libstdc++-v3/libio/Makefile.in ! 314955067b ./libstdc++-v3/libio/_G_config.h 2122576197b ./libstdc++-v3/libio/filedoalloc.c 3590060213b ./libstdc++-v3/libio/fileops.c 1488981607b ./libstdc++-v3/libio/genops.c 1308598865b ./libstdc++-v3/libio/iofclose.c 932932445b ./libstdc++-v3/libio/iofopen.c *************** *** 15356,15377 **** 3964237465b ./libstdc++-v3/libio/iolibio.h 4269898080b ./libstdc++-v3/libio/libio.h 276542374b ./libstdc++-v3/libio/libioP.h - 3759774482b ./libstdc++-v3/libio/Makefile.am - 3035076726b ./libstdc++-v3/libio/Makefile.in 13280908b ./libstdc++-v3/libio/stdfiles.c 2344987226b ./libstdc++-v3/libio/stdio.c 688559115b ./libstdc++-v3/libio/wfiledoalloc.c 871695306b ./libstdc++-v3/libio/wfileops.c 2568419733b ./libstdc++-v3/libio/wgenops.c - 4088285812b ./libstdc++-v3/libmath/copysignf.c 3838182569b ./libstdc++-v3/libmath/Makefile.am 1884225693b ./libstdc++-v3/libmath/Makefile.in 346371220b ./libstdc++-v3/libmath/mathconf.h 1759197966b ./libstdc++-v3/libmath/nan.c 1774241233b ./libstdc++-v3/libmath/signbit.c 3226432156b ./libstdc++-v3/libmath/signbitf.c 706230946b ./libstdc++-v3/libmath/signbitl.c 517957737b ./libstdc++-v3/libmath/stubs.c 1938961486b ./libstdc++-v3/libsupc++/cxxabi.h 3887473586b ./libstdc++-v3/libsupc++/del_op.cc 2108254126b ./libstdc++-v3/libsupc++/del_opnt.cc --- 15424,15445 ---- 3964237465b ./libstdc++-v3/libio/iolibio.h 4269898080b ./libstdc++-v3/libio/libio.h 276542374b ./libstdc++-v3/libio/libioP.h 13280908b ./libstdc++-v3/libio/stdfiles.c 2344987226b ./libstdc++-v3/libio/stdio.c 688559115b ./libstdc++-v3/libio/wfiledoalloc.c 871695306b ./libstdc++-v3/libio/wfileops.c 2568419733b ./libstdc++-v3/libio/wgenops.c 3838182569b ./libstdc++-v3/libmath/Makefile.am 1884225693b ./libstdc++-v3/libmath/Makefile.in + 4088285812b ./libstdc++-v3/libmath/copysignf.c 346371220b ./libstdc++-v3/libmath/mathconf.h 1759197966b ./libstdc++-v3/libmath/nan.c 1774241233b ./libstdc++-v3/libmath/signbit.c 3226432156b ./libstdc++-v3/libmath/signbitf.c 706230946b ./libstdc++-v3/libmath/signbitl.c 517957737b ./libstdc++-v3/libmath/stubs.c + 2660421896b ./libstdc++-v3/libsupc++/Makefile.am + 334186148b ./libstdc++-v3/libsupc++/Makefile.in 1938961486b ./libstdc++-v3/libsupc++/cxxabi.h 3887473586b ./libstdc++-v3/libsupc++/del_op.cc 2108254126b ./libstdc++-v3/libsupc++/del_opnt.cc *************** *** 15389,15396 **** 3207332728b ./libstdc++-v3/libsupc++/exception 3453419455b ./libstdc++-v3/libsupc++/exception_defines.h 930362627b ./libstdc++-v3/libsupc++/guard.cc - 2660421896b ./libstdc++-v3/libsupc++/Makefile.am - 334186148b ./libstdc++-v3/libsupc++/Makefile.in 1619407531b ./libstdc++-v3/libsupc++/new 2545598190b ./libstdc++-v3/libsupc++/new_handler.cc 2558289852b ./libstdc++-v3/libsupc++/new_op.cc --- 15457,15462 ---- *************** *** 15398,15439 **** 4286163592b ./libstdc++-v3/libsupc++/new_opv.cc 1153125428b ./libstdc++-v3/libsupc++/new_opvnt.cc 2851101423b ./libstdc++-v3/libsupc++/pure.cc - 4266179473b ./libstdc++-v3/libsupc++/tinfo2.cc 1354681125b ./libstdc++-v3/libsupc++/tinfo.cc 1192700122b ./libstdc++-v3/libsupc++/tinfo.h 1563723440b ./libstdc++-v3/libsupc++/typeinfo 2547443127b ./libstdc++-v3/libsupc++/unwind-cxx.h 712738859b ./libstdc++-v3/libsupc++/vec.cc - 980201769b ./libstdc++-v3/Makefile.am - 2176176714b ./libstdc++-v3/Makefile.in 987967454b ./libstdc++-v3/mkcheck.in - 1252249648b ./libstdc++-v3/po/de.po - 4161545945b ./libstdc++-v3/po/fr.po - 571561184b ./libstdc++-v3/po/libstdc++.pot 2710223631b ./libstdc++-v3/po/Makefile.am 1741914905b ./libstdc++-v3/po/Makefile.in 2014452913b ./libstdc++-v3/po/POTFILES.in 1352447199b ./libstdc++-v3/po/string_literals.cc ! 201474883b ./libstdc++-v3/README 4044863439b ./libstdc++-v3/src/bitset.cc 1525000204b ./libstdc++-v3/src/codecvt.cc 252828227b ./libstdc++-v3/src/complex_io.cc 3051346090b ./libstdc++-v3/src/concept-inst.cc 1573161063b ./libstdc++-v3/src/ctype.cc 78911046b ./libstdc++-v3/src/ext-inst.cc - 3692870828b ./libstdc++-v3/src/fstream.cc 3851559670b ./libstdc++-v3/src/fstream-inst.cc 3677721072b ./libstdc++-v3/src/functexcept.cc 1099230693b ./libstdc++-v3/src/globals.cc 363698629b ./libstdc++-v3/src/io-inst.cc 2203507197b ./libstdc++-v3/src/ios.cc 3726206629b ./libstdc++-v3/src/istream-inst.cc 2798828124b ./libstdc++-v3/src/limits.cc - 3213175621b ./libstdc++-v3/src/locale.cc 3700309894b ./libstdc++-v3/src/locale-inst.cc ! 2919294889b ./libstdc++-v3/src/localename.cc ! 4061406571b ./libstdc++-v3/src/Makefile.am ! 1045148615b ./libstdc++-v3/src/Makefile.in 1950596427b ./libstdc++-v3/src/misc-inst.cc 281972773b ./libstdc++-v3/src/ostream-inst.cc 3716553502b ./libstdc++-v3/src/sstream-inst.cc --- 15464,15502 ---- 4286163592b ./libstdc++-v3/libsupc++/new_opv.cc 1153125428b ./libstdc++-v3/libsupc++/new_opvnt.cc 2851101423b ./libstdc++-v3/libsupc++/pure.cc 1354681125b ./libstdc++-v3/libsupc++/tinfo.cc 1192700122b ./libstdc++-v3/libsupc++/tinfo.h + 4266179473b ./libstdc++-v3/libsupc++/tinfo2.cc 1563723440b ./libstdc++-v3/libsupc++/typeinfo 2547443127b ./libstdc++-v3/libsupc++/unwind-cxx.h 712738859b ./libstdc++-v3/libsupc++/vec.cc 987967454b ./libstdc++-v3/mkcheck.in 2710223631b ./libstdc++-v3/po/Makefile.am 1741914905b ./libstdc++-v3/po/Makefile.in 2014452913b ./libstdc++-v3/po/POTFILES.in + 1252249648b ./libstdc++-v3/po/de.po + 4161545945b ./libstdc++-v3/po/fr.po + 571561184b ./libstdc++-v3/po/libstdc++.pot 1352447199b ./libstdc++-v3/po/string_literals.cc ! 3533995407b ./libstdc++-v3/src/Makefile.am ! 3193819837b ./libstdc++-v3/src/Makefile.in 4044863439b ./libstdc++-v3/src/bitset.cc 1525000204b ./libstdc++-v3/src/codecvt.cc 252828227b ./libstdc++-v3/src/complex_io.cc 3051346090b ./libstdc++-v3/src/concept-inst.cc 1573161063b ./libstdc++-v3/src/ctype.cc 78911046b ./libstdc++-v3/src/ext-inst.cc 3851559670b ./libstdc++-v3/src/fstream-inst.cc + 3692870828b ./libstdc++-v3/src/fstream.cc 3677721072b ./libstdc++-v3/src/functexcept.cc 1099230693b ./libstdc++-v3/src/globals.cc 363698629b ./libstdc++-v3/src/io-inst.cc 2203507197b ./libstdc++-v3/src/ios.cc 3726206629b ./libstdc++-v3/src/istream-inst.cc 2798828124b ./libstdc++-v3/src/limits.cc 3700309894b ./libstdc++-v3/src/locale-inst.cc ! 940780139b ./libstdc++-v3/src/locale.cc ! 1560215712b ./libstdc++-v3/src/localename.cc 1950596427b ./libstdc++-v3/src/misc-inst.cc 281972773b ./libstdc++-v3/src/ostream-inst.cc 3716553502b ./libstdc++-v3/src/sstream-inst.cc *************** *** 15464,15474 **** 1794666783b ./libstdc++-v3/testsuite/17_intro/header_iostream.cc 1280776215b ./libstdc++-v3/testsuite/17_intro/header_istream.cc 3671158117b ./libstdc++-v3/testsuite/17_intro/header_ostream.cc - 2645939509b ./libstdc++-v3/testsuite/17_intro/headers.cc - 3404318748b ./libstdc++-v3/testsuite/17_intro/headers_c.cc - 2076357409b ./libstdc++-v3/testsuite/17_intro/headers_c++.cc 161485874b ./libstdc++-v3/testsuite/17_intro/header_sstream.cc 553109088b ./libstdc++-v3/testsuite/17_intro/header_streambuf.cc 2977766596b ./libstdc++-v3/testsuite/18_support/new_delete_placement.cc 587896804b ./libstdc++-v3/testsuite/18_support/numeric_limits.cc 3977893255b ./libstdc++-v3/testsuite/19_diagnostics/stdexceptions.cc --- 15527,15537 ---- 1794666783b ./libstdc++-v3/testsuite/17_intro/header_iostream.cc 1280776215b ./libstdc++-v3/testsuite/17_intro/header_istream.cc 3671158117b ./libstdc++-v3/testsuite/17_intro/header_ostream.cc 161485874b ./libstdc++-v3/testsuite/17_intro/header_sstream.cc 553109088b ./libstdc++-v3/testsuite/17_intro/header_streambuf.cc + 2645939509b ./libstdc++-v3/testsuite/17_intro/headers.cc + 2076357409b ./libstdc++-v3/testsuite/17_intro/headers_c++.cc + 3404318748b ./libstdc++-v3/testsuite/17_intro/headers_c.cc 2977766596b ./libstdc++-v3/testsuite/18_support/new_delete_placement.cc 587896804b ./libstdc++-v3/testsuite/18_support/numeric_limits.cc 3977893255b ./libstdc++-v3/testsuite/19_diagnostics/stdexceptions.cc *************** *** 15482,15492 **** 2339280423b ./libstdc++-v3/testsuite/20_util/temporary_buffer.cc 2620430532b ./libstdc++-v3/testsuite/21_strings/append.cc 1749237095b ./libstdc++-v3/testsuite/21_strings/assign.cc 166406663b ./libstdc++-v3/testsuite/21_strings/capacity.cc 2635888646b ./libstdc++-v3/testsuite/21_strings/char_traits_requirements.cc 4052621376b ./libstdc++-v3/testsuite/21_strings/char_traits_typedefs.cc 2742086522b ./libstdc++-v3/testsuite/21_strings/compare.cc - 1828225934b ./libstdc++-v3/testsuite/21_strings/c_strings.cc 2035394048b ./libstdc++-v3/testsuite/21_strings/ctor_copy_dtor.cc 2926478704b ./libstdc++-v3/testsuite/21_strings/element_access.cc 2204151867b ./libstdc++-v3/testsuite/21_strings/find.cc --- 15545,15555 ---- 2339280423b ./libstdc++-v3/testsuite/20_util/temporary_buffer.cc 2620430532b ./libstdc++-v3/testsuite/21_strings/append.cc 1749237095b ./libstdc++-v3/testsuite/21_strings/assign.cc + 1828225934b ./libstdc++-v3/testsuite/21_strings/c_strings.cc 166406663b ./libstdc++-v3/testsuite/21_strings/capacity.cc 2635888646b ./libstdc++-v3/testsuite/21_strings/char_traits_requirements.cc 4052621376b ./libstdc++-v3/testsuite/21_strings/char_traits_typedefs.cc 2742086522b ./libstdc++-v3/testsuite/21_strings/compare.cc 2035394048b ./libstdc++-v3/testsuite/21_strings/ctor_copy_dtor.cc 2926478704b ./libstdc++-v3/testsuite/21_strings/element_access.cc 2204151867b ./libstdc++-v3/testsuite/21_strings/find.cc *************** *** 15503,15510 **** 1168972362b ./libstdc++-v3/testsuite/22_locale/codecvt_members_unicode_char.cc 56961166b ./libstdc++-v3/testsuite/22_locale/codecvt_members_unicode_wchar_t.cc 4100654250b ./libstdc++-v3/testsuite/22_locale/codecvt_members_wchar_t_char.cc - 378719965b ./libstdc++-v3/testsuite/22_locale/collate_byname.cc 4219192012b ./libstdc++-v3/testsuite/22_locale/collate.cc 1671297459b ./libstdc++-v3/testsuite/22_locale/collate_members_char.cc 2271354246b ./libstdc++-v3/testsuite/22_locale/collate_members_wchar_t.cc 2835583010b ./libstdc++-v3/testsuite/22_locale/ctor_copy_dtor.cc --- 15566,15573 ---- 1168972362b ./libstdc++-v3/testsuite/22_locale/codecvt_members_unicode_char.cc 56961166b ./libstdc++-v3/testsuite/22_locale/codecvt_members_unicode_wchar_t.cc 4100654250b ./libstdc++-v3/testsuite/22_locale/codecvt_members_wchar_t_char.cc 4219192012b ./libstdc++-v3/testsuite/22_locale/collate.cc + 378719965b ./libstdc++-v3/testsuite/22_locale/collate_byname.cc 1671297459b ./libstdc++-v3/testsuite/22_locale/collate_members_char.cc 2271354246b ./libstdc++-v3/testsuite/22_locale/collate_members_wchar_t.cc 2835583010b ./libstdc++-v3/testsuite/22_locale/ctor_copy_dtor.cc *************** *** 15524,15552 **** 3849986858b ./libstdc++-v3/testsuite/22_locale/facet.cc 3496730433b ./libstdc++-v3/testsuite/22_locale/global_templates.cc 1723684426b ./libstdc++-v3/testsuite/22_locale/members.cc - 1401094326b ./libstdc++-v3/testsuite/22_locale/messages_byname.cc 3196187062b ./libstdc++-v3/testsuite/22_locale/messages.cc 1970700053b ./libstdc++-v3/testsuite/22_locale/messages_members_char.cc 2495817416b ./libstdc++-v3/testsuite/22_locale/money_get.cc 1766255762b ./libstdc++-v3/testsuite/22_locale/money_get_members_char.cc 138738715b ./libstdc++-v3/testsuite/22_locale/money_get_members_wchar_t.cc - 396525641b ./libstdc++-v3/testsuite/22_locale/moneypunct_byname.cc - 1298769732b ./libstdc++-v3/testsuite/22_locale/moneypunct.cc - 1486946696b ./libstdc++-v3/testsuite/22_locale/moneypunct_members_char.cc - 2302401224b ./libstdc++-v3/testsuite/22_locale/moneypunct_members_wchar_t.cc 2714963439b ./libstdc++-v3/testsuite/22_locale/money_put.cc 545615219b ./libstdc++-v3/testsuite/22_locale/money_put_members_char.cc 299189870b ./libstdc++-v3/testsuite/22_locale/money_put_members_wchar_t.cc 3806757668b ./libstdc++-v3/testsuite/22_locale/num_get.cc 942400636b ./libstdc++-v3/testsuite/22_locale/num_get_members_char.cc 3952754596b ./libstdc++-v3/testsuite/22_locale/num_get_members_wchar_t.cc - 3109277057b ./libstdc++-v3/testsuite/22_locale/numpunct_byname.cc - 481449220b ./libstdc++-v3/testsuite/22_locale/numpunct.cc - 1180876674b ./libstdc++-v3/testsuite/22_locale/numpunct_members_char.cc - 3139380707b ./libstdc++-v3/testsuite/22_locale/numpunct_members_wchar_t.cc 2013396522b ./libstdc++-v3/testsuite/22_locale/num_put.cc 3717422626b ./libstdc++-v3/testsuite/22_locale/num_put_members_char.cc 2943051713b ./libstdc++-v3/testsuite/22_locale/num_put_members_wchar_t.cc 2592583186b ./libstdc++-v3/testsuite/22_locale/operators.cc 786606213b ./libstdc++-v3/testsuite/22_locale/static_members.cc 3529549306b ./libstdc++-v3/testsuite/22_locale/time_get.cc --- 15587,15615 ---- 3849986858b ./libstdc++-v3/testsuite/22_locale/facet.cc 3496730433b ./libstdc++-v3/testsuite/22_locale/global_templates.cc 1723684426b ./libstdc++-v3/testsuite/22_locale/members.cc 3196187062b ./libstdc++-v3/testsuite/22_locale/messages.cc + 1401094326b ./libstdc++-v3/testsuite/22_locale/messages_byname.cc 1970700053b ./libstdc++-v3/testsuite/22_locale/messages_members_char.cc 2495817416b ./libstdc++-v3/testsuite/22_locale/money_get.cc 1766255762b ./libstdc++-v3/testsuite/22_locale/money_get_members_char.cc 138738715b ./libstdc++-v3/testsuite/22_locale/money_get_members_wchar_t.cc 2714963439b ./libstdc++-v3/testsuite/22_locale/money_put.cc 545615219b ./libstdc++-v3/testsuite/22_locale/money_put_members_char.cc 299189870b ./libstdc++-v3/testsuite/22_locale/money_put_members_wchar_t.cc + 1298769732b ./libstdc++-v3/testsuite/22_locale/moneypunct.cc + 396525641b ./libstdc++-v3/testsuite/22_locale/moneypunct_byname.cc + 1486946696b ./libstdc++-v3/testsuite/22_locale/moneypunct_members_char.cc + 2302401224b ./libstdc++-v3/testsuite/22_locale/moneypunct_members_wchar_t.cc 3806757668b ./libstdc++-v3/testsuite/22_locale/num_get.cc 942400636b ./libstdc++-v3/testsuite/22_locale/num_get_members_char.cc 3952754596b ./libstdc++-v3/testsuite/22_locale/num_get_members_wchar_t.cc 2013396522b ./libstdc++-v3/testsuite/22_locale/num_put.cc 3717422626b ./libstdc++-v3/testsuite/22_locale/num_put_members_char.cc 2943051713b ./libstdc++-v3/testsuite/22_locale/num_put_members_wchar_t.cc + 481449220b ./libstdc++-v3/testsuite/22_locale/numpunct.cc + 3109277057b ./libstdc++-v3/testsuite/22_locale/numpunct_byname.cc + 1180876674b ./libstdc++-v3/testsuite/22_locale/numpunct_members_char.cc + 3139380707b ./libstdc++-v3/testsuite/22_locale/numpunct_members_wchar_t.cc 2592583186b ./libstdc++-v3/testsuite/22_locale/operators.cc 786606213b ./libstdc++-v3/testsuite/22_locale/static_members.cc 3529549306b ./libstdc++-v3/testsuite/22_locale/time_get.cc *************** *** 15579,15589 **** 3679802360b ./libstdc++-v3/testsuite/24_iterators/back_insert_iterator.cc 2736134729b ./libstdc++-v3/testsuite/24_iterators/front_insert_iterator.cc 1154183743b ./libstdc++-v3/testsuite/24_iterators/insert_iterator.cc - 714376333b ./libstdc++-v3/testsuite/24_iterators/istreambuf_iterator.cc 3795589628b ./libstdc++-v3/testsuite/24_iterators/istream_iterator.cc 2873994073b ./libstdc++-v3/testsuite/24_iterators/iterator.cc - 1144199940b ./libstdc++-v3/testsuite/24_iterators/ostreambuf_iterator.cc 3195646624b ./libstdc++-v3/testsuite/24_iterators/ostream_iterator.cc 1944522737b ./libstdc++-v3/testsuite/24_iterators/rel_ops.cc 2512302022b ./libstdc++-v3/testsuite/24_iterators/reverse_iterator.cc 1024863451b ./libstdc++-v3/testsuite/25_algorithms/binary_search.cc --- 15642,15652 ---- 3679802360b ./libstdc++-v3/testsuite/24_iterators/back_insert_iterator.cc 2736134729b ./libstdc++-v3/testsuite/24_iterators/front_insert_iterator.cc 1154183743b ./libstdc++-v3/testsuite/24_iterators/insert_iterator.cc 3795589628b ./libstdc++-v3/testsuite/24_iterators/istream_iterator.cc + 714376333b ./libstdc++-v3/testsuite/24_iterators/istreambuf_iterator.cc 2873994073b ./libstdc++-v3/testsuite/24_iterators/iterator.cc 3195646624b ./libstdc++-v3/testsuite/24_iterators/ostream_iterator.cc + 1144199940b ./libstdc++-v3/testsuite/24_iterators/ostreambuf_iterator.cc 1944522737b ./libstdc++-v3/testsuite/24_iterators/rel_ops.cc 2512302022b ./libstdc++-v3/testsuite/24_iterators/reverse_iterator.cc 1024863451b ./libstdc++-v3/testsuite/25_algorithms/binary_search.cc *************** *** 15598,15613 **** 3487714017b ./libstdc++-v3/testsuite/25_algorithms/unique.cc 825452073b ./libstdc++-v3/testsuite/26_numerics/binary_closure.cc 4174117585b ./libstdc++-v3/testsuite/26_numerics/buggy_complex.cc - 2282141510b ./libstdc++-v3/testsuite/26_numerics/c99_classification_macros_c.cc 477083436b ./libstdc++-v3/testsuite/26_numerics/c99_classification_macros_c++.cc 162388279b ./libstdc++-v3/testsuite/26_numerics/c_math.cc 1247641597b ./libstdc++-v3/testsuite/26_numerics/c_math_dynamic.cc - 3345793307b ./libstdc++-v3/testsuite/26_numerics/complex_inserters_extractors.cc 432352887b ./libstdc++-v3/testsuite/26_numerics/complex/pow.C 2483842052b ./libstdc++-v3/testsuite/26_numerics/complex_value.cc 1538489744b ./libstdc++-v3/testsuite/26_numerics/fabs_inline.cc - 2398191938b ./libstdc++-v3/testsuite/26_numerics/slice_array_assignment.cc 777494929b ./libstdc++-v3/testsuite/26_numerics/slice.cc 2493789332b ./libstdc++-v3/testsuite/26_numerics/sum_diff.cc 2203801309b ./libstdc++-v3/testsuite/26_numerics/valarray.cc 2289035929b ./libstdc++-v3/testsuite/26_numerics/valarray_const_bracket.cc --- 15661,15676 ---- 3487714017b ./libstdc++-v3/testsuite/25_algorithms/unique.cc 825452073b ./libstdc++-v3/testsuite/26_numerics/binary_closure.cc 4174117585b ./libstdc++-v3/testsuite/26_numerics/buggy_complex.cc 477083436b ./libstdc++-v3/testsuite/26_numerics/c99_classification_macros_c++.cc + 2282141510b ./libstdc++-v3/testsuite/26_numerics/c99_classification_macros_c.cc 162388279b ./libstdc++-v3/testsuite/26_numerics/c_math.cc 1247641597b ./libstdc++-v3/testsuite/26_numerics/c_math_dynamic.cc 432352887b ./libstdc++-v3/testsuite/26_numerics/complex/pow.C + 3345793307b ./libstdc++-v3/testsuite/26_numerics/complex_inserters_extractors.cc 2483842052b ./libstdc++-v3/testsuite/26_numerics/complex_value.cc 1538489744b ./libstdc++-v3/testsuite/26_numerics/fabs_inline.cc 777494929b ./libstdc++-v3/testsuite/26_numerics/slice.cc + 2398191938b ./libstdc++-v3/testsuite/26_numerics/slice_array_assignment.cc 2493789332b ./libstdc++-v3/testsuite/26_numerics/sum_diff.cc 2203801309b ./libstdc++-v3/testsuite/26_numerics/valarray.cc 2289035929b ./libstdc++-v3/testsuite/26_numerics/valarray_const_bracket.cc *************** *** 15616,15622 **** 1543732888b ./libstdc++-v3/testsuite/27_io/filebuf.cc 4294967295b ./libstdc++-v3/testsuite/27_io/filebuf_members-1.tst 4294967295b ./libstdc++-v3/testsuite/27_io/filebuf_members-1.txt ! 1856875262b ./libstdc++-v3/testsuite/27_io/filebuf_members.cc 4204648704b ./libstdc++-v3/testsuite/27_io/filebuf_virtuals-1.tst 4204648704b ./libstdc++-v3/testsuite/27_io/filebuf_virtuals-1.txt 655821823b ./libstdc++-v3/testsuite/27_io/filebuf_virtuals-2.tst --- 15679,15685 ---- 1543732888b ./libstdc++-v3/testsuite/27_io/filebuf.cc 4294967295b ./libstdc++-v3/testsuite/27_io/filebuf_members-1.tst 4294967295b ./libstdc++-v3/testsuite/27_io/filebuf_members-1.txt ! 1493999931b ./libstdc++-v3/testsuite/27_io/filebuf_members.cc 4204648704b ./libstdc++-v3/testsuite/27_io/filebuf_virtuals-1.tst 4204648704b ./libstdc++-v3/testsuite/27_io/filebuf_virtuals-1.txt 655821823b ./libstdc++-v3/testsuite/27_io/filebuf_virtuals-2.tst *************** *** 15630,15641 **** 4294967295b ./libstdc++-v3/testsuite/27_io/ifstream_members-1.txt 2885752721b ./libstdc++-v3/testsuite/27_io/ifstream_members.cc 2822576026b ./libstdc++-v3/testsuite/27_io/instantiations.cc 1158981090b ./libstdc++-v3/testsuite/27_io/ios_base_callbacks.cc 3079502096b ./libstdc++-v3/testsuite/27_io/ios_base_members_static-1.tst 2904656871b ./libstdc++-v3/testsuite/27_io/ios_base_members_static.cc 1272750519b ./libstdc++-v3/testsuite/27_io/ios_base_storage.cc 1912639991b ./libstdc++-v3/testsuite/27_io/ios_base_types.cc - 236727293b ./libstdc++-v3/testsuite/27_io/ios.cc 3028704293b ./libstdc++-v3/testsuite/27_io/ios_ctor.cc 3931163797b ./libstdc++-v3/testsuite/27_io/ios_init.cc 1589179378b ./libstdc++-v3/testsuite/27_io/ios_manip_basefield.cc --- 15693,15704 ---- 4294967295b ./libstdc++-v3/testsuite/27_io/ifstream_members-1.txt 2885752721b ./libstdc++-v3/testsuite/27_io/ifstream_members.cc 2822576026b ./libstdc++-v3/testsuite/27_io/instantiations.cc + 236727293b ./libstdc++-v3/testsuite/27_io/ios.cc 1158981090b ./libstdc++-v3/testsuite/27_io/ios_base_callbacks.cc 3079502096b ./libstdc++-v3/testsuite/27_io/ios_base_members_static-1.tst 2904656871b ./libstdc++-v3/testsuite/27_io/ios_base_members_static.cc 1272750519b ./libstdc++-v3/testsuite/27_io/ios_base_storage.cc 1912639991b ./libstdc++-v3/testsuite/27_io/ios_base_types.cc 3028704293b ./libstdc++-v3/testsuite/27_io/ios_ctor.cc 3931163797b ./libstdc++-v3/testsuite/27_io/ios_init.cc 1589179378b ./libstdc++-v3/testsuite/27_io/ios_manip_basefield.cc *************** *** 15703,15708 **** --- 15766,15774 ---- 1660875934b ./libstdc++-v3/testsuite/27_io/stringstream.cc 2617118873b ./libstdc++-v3/testsuite/27_io/stringstream_members.cc 365205754b ./libstdc++-v3/testsuite/27_io/wide_stream_objects.cc + 1763322334b ./libstdc++-v3/testsuite/Makefile.am + 336967323b ./libstdc++-v3/testsuite/Makefile.in + 2335944059b ./libstdc++-v3/testsuite/README 897528513b ./libstdc++-v3/testsuite/abi_check.cc 3762370376b ./libstdc++-v3/testsuite/backward/header_deque_h.cc 651880874b ./libstdc++-v3/testsuite/backward/header_hash_map_h.cc *************** *** 15720,15735 **** 2382325141b ./libstdc++-v3/testsuite/ext/hash_set.cc 2849413443b ./libstdc++-v3/testsuite/ext/headers.cc 2661012354b ./libstdc++-v3/testsuite/ext/rope.cc - 3529200406b ./libstdc++-v3/testsuite/ext/stdio_filebuf_2.cc 3925889556b ./libstdc++-v3/testsuite/ext/stdio_filebuf.cc ! 1094483777b ./libstdc++-v3/testsuite_flags.in ! 2557034066b ./libstdc++-v3/testsuite/lib/libstdc++-v3-dg.exp 3712176129b ./libstdc++-v3/testsuite/lib/prune.exp 1989654054b ./libstdc++-v3/testsuite/libstdc++-v3.dg/dg.exp - 3775586587b ./libstdc++-v3/testsuite/Makefile.am - 3617725346b ./libstdc++-v3/testsuite/Makefile.in 1352817621b ./libstdc++-v3/testsuite/printnow.c - 2335944059b ./libstdc++-v3/testsuite/README 3171796543b ./libstdc++-v3/testsuite/testsuite_allocator.cc 1172596206b ./libstdc++-v3/testsuite/testsuite_allocator.h 4015920727b ./libstdc++-v3/testsuite/testsuite_hooks.cc --- 15786,15797 ---- 2382325141b ./libstdc++-v3/testsuite/ext/hash_set.cc 2849413443b ./libstdc++-v3/testsuite/ext/headers.cc 2661012354b ./libstdc++-v3/testsuite/ext/rope.cc 3925889556b ./libstdc++-v3/testsuite/ext/stdio_filebuf.cc ! 3529200406b ./libstdc++-v3/testsuite/ext/stdio_filebuf_2.cc ! 954290122b ./libstdc++-v3/testsuite/lib/libstdc++-v3-dg.exp 3712176129b ./libstdc++-v3/testsuite/lib/prune.exp 1989654054b ./libstdc++-v3/testsuite/libstdc++-v3.dg/dg.exp 1352817621b ./libstdc++-v3/testsuite/printnow.c 3171796543b ./libstdc++-v3/testsuite/testsuite_allocator.cc 1172596206b ./libstdc++-v3/testsuite/testsuite_allocator.h 4015920727b ./libstdc++-v3/testsuite/testsuite_hooks.cc *************** *** 15740,15811 **** 1685222676b ./libstdc++-v3/testsuite/thread/pthread4.cc 3647024336b ./libstdc++-v3/testsuite/thread/pthread5.cc 1701874201b ./libstdc++-v3/testsuite/thread/pthread6.cc 3719830716b ./libtool.m4 3680999751b ./ltcf-c.sh 809573867b ./ltcf-cxx.sh 2744413125b ./ltcf-gcj.sh 910615352b ./ltconfig 1562969795b ./ltmain.sh ! 941537411b ./MAINTAINERS ! 1059991613b ./maintainer-scripts/ChangeLog 3655238705b ./maintainer-scripts/crontab 4171969357b ./maintainer-scripts/doc_exclude 2394357728b ./maintainer-scripts/gcc_release - 3126840705b ./maintainer-scripts/README - 449123050b ./maintainer-scripts/snapshot-index.html 865042342b ./maintainer-scripts/snapshot-README 1469123857b ./maintainer-scripts/update_version 2459358099b ./maintainer-scripts/update_web_docs 2568232642b ./maintainer-scripts/update_web_docs_libstdcxx 3852629653b ./maintainer-scripts/update_web_docs_old - 459788085b ./Makefile.def - 673596399b ./Makefile.in - 1638614068b ./Makefile.tpl 990942143b ./missing 2656466409b ./mkdep 4236112450b ./mkinstalldirs 902556840b ./move-if-change - 3697693037b ./README - 3286946454b ./README.SCO 1077958069b ./symlink-tree 1370970362b ./ylwrap 1221785251b ./zlib/acinclude.m4 63064805b ./zlib/aclocal.m4 4246695714b ./zlib/adler32.c 2360440520b ./zlib/algorithm.txt 1537725969b ./zlib/amiga/Makefile.pup 3919607569b ./zlib/amiga/Makefile.sas - 3041793522b ./zlib/ChangeLog - 642840868b ./zlib/ChangeLog.gcj 1397025471b ./zlib/compress.c 3790213997b ./zlib/configure 1753606500b ./zlib/configure.in 215845136b ./zlib/contrib/asm386/gvmat32.asm 4143184108b ./zlib/contrib/asm386/gvmat32c.c 2920733537b ./zlib/contrib/asm386/mkgvmt32.bat 3675080833b ./zlib/contrib/asm386/zlibvc.def 2499069487b ./zlib/contrib/asm386/zlibvc.dsp 993885909b ./zlib/contrib/asm386/zlibvc.dsw - 793867511b ./zlib/contrib/asm586/match.S 1760950630b ./zlib/contrib/asm586/README.586 ! 3445355807b ./zlib/contrib/asm686/match.S 3564267527b ./zlib/contrib/asm686/README.686 3962801576b ./zlib/contrib/delphi2/d_zlib.bpr 3205278976b ./zlib/contrib/delphi2/d_zlib.cpp 3618554340b ./zlib/contrib/delphi2/readme.txt - 812510417b ./zlib/contrib/delphi2/zlib32.bpr - 2671802940b ./zlib/contrib/delphi2/zlib32.cpp 1448048189b ./zlib/contrib/delphi2/zlib.bpg 1970984078b ./zlib/contrib/delphi2/zlib.bpr 2460992656b ./zlib/contrib/delphi2/zlib.cpp 2183495051b ./zlib/contrib/delphi2/zlib.pas ! 26085236b ./zlib/contrib/delphi/zlibdef.pas ! 1981000180b ./zlib/contrib/delphi/zlib.mak ! 3191203911b ./zlib/contrib/iostream2/zstream.h ! 3297987584b ./zlib/contrib/iostream2/zstream_test.cpp 339148404b ./zlib/contrib/iostream/test.cpp 1960805227b ./zlib/contrib/iostream/zfstream.cpp 933409408b ./zlib/contrib/iostream/zfstream.h 2533758279b ./zlib/contrib/minizip/ChangeLogUnzip 2310837728b ./zlib/contrib/minizip/Makefile 4259570427b ./zlib/contrib/minizip/miniunz.c --- 15802,15876 ---- 1685222676b ./libstdc++-v3/testsuite/thread/pthread4.cc 3647024336b ./libstdc++-v3/testsuite/thread/pthread5.cc 1701874201b ./libstdc++-v3/testsuite/thread/pthread6.cc + 1094483777b ./libstdc++-v3/testsuite_flags.in 3719830716b ./libtool.m4 3680999751b ./ltcf-c.sh 809573867b ./ltcf-cxx.sh 2744413125b ./ltcf-gcj.sh 910615352b ./ltconfig 1562969795b ./ltmain.sh ! 569373942b ./maintainer-scripts/ChangeLog ! 3126840705b ./maintainer-scripts/README 3655238705b ./maintainer-scripts/crontab 4171969357b ./maintainer-scripts/doc_exclude 2394357728b ./maintainer-scripts/gcc_release 865042342b ./maintainer-scripts/snapshot-README + 449123050b ./maintainer-scripts/snapshot-index.html 1469123857b ./maintainer-scripts/update_version 2459358099b ./maintainer-scripts/update_web_docs 2568232642b ./maintainer-scripts/update_web_docs_libstdcxx 3852629653b ./maintainer-scripts/update_web_docs_old 990942143b ./missing 2656466409b ./mkdep 4236112450b ./mkinstalldirs 902556840b ./move-if-change 1077958069b ./symlink-tree 1370970362b ./ylwrap + 2033573000b ./zlib/ChangeLog + 642840868b ./zlib/ChangeLog.gcj + 1790959550b ./zlib/FAQ + 467711448b ./zlib/INDEX + 3901505907b ./zlib/Make_vms.com + 2499419301b ./zlib/Makefile.am + 957823529b ./zlib/Makefile.in + 3707467235b ./zlib/Makefile.riscos + 3306818000b ./zlib/README 1221785251b ./zlib/acinclude.m4 63064805b ./zlib/aclocal.m4 4246695714b ./zlib/adler32.c 2360440520b ./zlib/algorithm.txt 1537725969b ./zlib/amiga/Makefile.pup 3919607569b ./zlib/amiga/Makefile.sas 1397025471b ./zlib/compress.c 3790213997b ./zlib/configure 1753606500b ./zlib/configure.in + 3769239525b ./zlib/contrib/README.contrib 215845136b ./zlib/contrib/asm386/gvmat32.asm 4143184108b ./zlib/contrib/asm386/gvmat32c.c 2920733537b ./zlib/contrib/asm386/mkgvmt32.bat 3675080833b ./zlib/contrib/asm386/zlibvc.def 2499069487b ./zlib/contrib/asm386/zlibvc.dsp 993885909b ./zlib/contrib/asm386/zlibvc.dsw 1760950630b ./zlib/contrib/asm586/README.586 ! 793867511b ./zlib/contrib/asm586/match.S 3564267527b ./zlib/contrib/asm686/README.686 + 3445355807b ./zlib/contrib/asm686/match.S + 1981000180b ./zlib/contrib/delphi/zlib.mak + 26085236b ./zlib/contrib/delphi/zlibdef.pas 3962801576b ./zlib/contrib/delphi2/d_zlib.bpr 3205278976b ./zlib/contrib/delphi2/d_zlib.cpp 3618554340b ./zlib/contrib/delphi2/readme.txt 1448048189b ./zlib/contrib/delphi2/zlib.bpg 1970984078b ./zlib/contrib/delphi2/zlib.bpr 2460992656b ./zlib/contrib/delphi2/zlib.cpp 2183495051b ./zlib/contrib/delphi2/zlib.pas ! 812510417b ./zlib/contrib/delphi2/zlib32.bpr ! 2671802940b ./zlib/contrib/delphi2/zlib32.cpp 339148404b ./zlib/contrib/iostream/test.cpp 1960805227b ./zlib/contrib/iostream/zfstream.cpp 933409408b ./zlib/contrib/iostream/zfstream.h + 3191203911b ./zlib/contrib/iostream2/zstream.h + 3297987584b ./zlib/contrib/iostream2/zstream_test.cpp 2533758279b ./zlib/contrib/minizip/ChangeLogUnzip 2310837728b ./zlib/contrib/minizip/Makefile 4259570427b ./zlib/contrib/minizip/miniunz.c *************** *** 15820,15826 **** 3675080833b ./zlib/contrib/minizip/zlibvc.def 2499069487b ./zlib/contrib/minizip/zlibvc.dsp 993885909b ./zlib/contrib/minizip/zlibvc.dsw - 3769239525b ./zlib/contrib/README.contrib 4061615005b ./zlib/contrib/untgz/Makefile 1408736380b ./zlib/contrib/untgz/makefile.w32 1384858048b ./zlib/contrib/untgz/untgz.c --- 15885,15890 ---- *************** *** 15830,15838 **** 2321655791b ./zlib/deflate.h 1690938184b ./zlib/descrip.mms 1880553404b ./zlib/example.c - 1790959550b ./zlib/FAQ 2238767519b ./zlib/gzio.c - 467711448b ./zlib/INDEX 3009787290b ./zlib/infblock.c 34847356b ./zlib/infblock.h 763710488b ./zlib/infcodes.c --- 15894,15900 ---- *************** *** 15845,15855 **** 2634414216b ./zlib/inftrees.h 788977750b ./zlib/infutil.c 2297950969b ./zlib/infutil.h - 2499419301b ./zlib/Makefile.am - 957823529b ./zlib/Makefile.in - 3707467235b ./zlib/Makefile.riscos 196153738b ./zlib/maketree.c - 3901505907b ./zlib/Make_vms.com 470692683b ./zlib/minigzip.c 955312409b ./zlib/msdos/Makefile.b32 3122518693b ./zlib/msdos/Makefile.bor --- 15907,15913 ---- *************** *** 15867,15873 **** 3298347746b ./zlib/nt/zlib.dnt 2605576410b ./zlib/os2/Makefile.os2 99579017b ./zlib/os2/zlib.def - 3306818000b ./zlib/README 1164927361b ./zlib/trees.c 10665304b ./zlib/trees.h 275019746b ./zlib/uncompr.c --- 15925,15930 ---- diff -Nrc3pad gcc-3.3.2/BUGS gcc-3.3.3/BUGS *** gcc-3.3.2/BUGS Thu Oct 16 20:10:56 2003 --- gcc-3.3.3/BUGS Sat Feb 14 20:34:32 2004 *************** *** 1,7 **** GCC Bugs ! The latest version of this document is always available at [1]http://gcc.gnu.org/bugs.html. _________________________________________________________________ --- 1,7 ---- GCC Bugs ! The latest version of this document is always available at [1]http://gcc.gnu.org/bugs.html. _________________________________________________________________ *************** Table of Contents *** 13,66 **** + [5]Where to post it + [6]Detailed bug reporting instructions + [7]Detailed bug reporting instructions for GNAT ! + [8]Detailed bug reporting instructions when using a precompiled header * [9]Frequently Reported Bugs in GCC + [10]C++ ! o [11]ABI bugs ! o [12]Missing features ! o [13]Parse errors for "simple" code ! + [14]Fortran ! * [15]Non-bugs ! + [16]General ! + [17]C ! + [18]C++ ! o [19]Common problems updating from G++ 2.95 to G++ 3.0 _________________________________________________________________ Reporting Bugs ! The main purpose of a bug report is to enable us to fix the bug. The ! most important prerequisite for this is that the report must be complete and self-contained, which we explain in detail below. ! Before you report a bug, please check the [20]list of well-known bugs ! and, if possible in any way, try a current development snapshot. If ! you want to report a bug with versions of GCC before 3.1 we strongly recommend upgrading to the current release first. ! Before reporting that GCC compiles your code incorrectly, please ! compile it with gcc -Wall and see whether this shows anything wrong with your code that could be the cause instead of a bug in GCC. Summarized bug reporting instructions ! After this summary, you'll find detailed bug reporting instructions, ! that explain how to obtain some of the information requested in this summary. What we need ! Please include in your bug report all of the following items, the first three of which can be obtained from the output of gcc -v: * the exact version of GCC; * the system type; * the options given when GCC was configured/built; * the complete command line that triggers the bug; * the compiler output (error messages, warnings, etc.); and ! * the preprocessed file (*.i*) that triggers the bug, generated by adding -save-temps to the complete compilation command, or, in the ! case of a bug report for the GNAT front end, a complete set of source files (see below). What we do not want --- 13,65 ---- + [5]Where to post it + [6]Detailed bug reporting instructions + [7]Detailed bug reporting instructions for GNAT ! + [8]Detailed bug reporting instructions when using a precompiled header * [9]Frequently Reported Bugs in GCC + [10]C++ ! o [11]Missing features ! o [12]Bugs fixed in the upcoming 3.4 series ! + [13]Fortran ! * [14]Non-bugs ! + [15]General ! + [16]C ! + [17]C++ ! o [18]Common problems when upgrading the compiler _________________________________________________________________ Reporting Bugs ! The main purpose of a bug report is to enable us to fix the bug. The ! most important prerequisite for this is that the report must be complete and self-contained, which we explain in detail below. ! Before you report a bug, please check the [19]list of well-known bugs ! and, if possible in any way, try a current development snapshot. If ! you want to report a bug with versions of GCC before 3.1 we strongly recommend upgrading to the current release first. ! Before reporting that GCC compiles your code incorrectly, please ! compile it with gcc -Wall and see whether this shows anything wrong with your code that could be the cause instead of a bug in GCC. Summarized bug reporting instructions ! After this summary, you'll find detailed bug reporting instructions, ! that explain how to obtain some of the information requested in this summary. What we need ! Please include in your bug report all of the following items, the first three of which can be obtained from the output of gcc -v: * the exact version of GCC; * the system type; * the options given when GCC was configured/built; * the complete command line that triggers the bug; * the compiler output (error messages, warnings, etc.); and ! * the preprocessed file (*.i*) that triggers the bug, generated by adding -save-temps to the complete compilation command, or, in the ! case of a bug report for the GNAT front end, a complete set of source files (see below). What we do not want *************** Summarized bug reporting instructions *** 68,229 **** * A source file that #includes header files that are left out of the bug report (see above) * That source file and a collection of header files. ! * An attached archive (tar, zip, shar, whatever) containing all (or some :-) of the above. ! * A code snippet that won't cause the compiler to produce the exact ! output mentioned in the bug report (e.g., a snippet with just a ! few lines around the one that apparently triggers the bug, with ! some pieces replaced with ellipses or comments for extra obfuscation :-) ! * The location (URL) of the package that failed to build (we won't download it, anyway, since you've already given us what we need to duplicate the bug, haven't you? :-) ! * An error that occurs only some of the times a certain file is ! compiled, such that retrying a sufficient number of times results ! in a successful compilation; this is a symptom of a hardware problem, not of a compiler bug (sorry) ! * E-mail messages that complement previous, incomplete bug reports. ! Post a new, self-contained, full bug report instead, if possible as a follow-up to the original bug report ! * Assembly files (*.s) produced by the compiler, or any binary ! files, such as object files, executables, core files, or precompiled header files ! * Duplicate bug reports, or reports of bugs already fixed in the development tree, especially those that have already been reported as fixed last week :-) ! * Bugs in the assembler, the linker or the C library. These are ! separate projects, with separate mailing lists and different bug reporting procedures ! * Bugs in releases or snapshots of GCC not issued by the GNU Project. Report them to whoever provided you with the release ! * Questions about the correctness or the expected behavior of certain constructs that are not GCC extensions. Ask them in forums dedicated to the discussion of the programming language Where to post it ! Please submit your bug report directly to the [21]GCC bug database. ! Alternatively, you can use the gccbug script that mails your bug ! report to the bug database. Only if all this is absolutely impossible, ! mail all information to [22]gcc-bugs@gcc.gnu.org, but note that such ! reports are often overlooked since they are not permanently recorded ! into the database for later processing. Detailed bug reporting instructions ! Please refer to the [23]next section when reporting bugs in GNAT, the ! Ada compiler, or to the [24]one after that when reporting bugs that appear when using a precompiled header. ! In general, all the information we need can be obtained by collecting ! the command line below, as well as its output and the preprocessed file it generates. gcc -v -save-temps all-your-options source-file ! Typically the preprocessed file (extension .i for C or .ii for C++, and .f if the preprocessor is used on Fortran files) will be large, so please compress the resulting file with one of the popular compression ! programs such as bzip2, gzip, zip or compress (in decreasing order of preference). Use maximum compression (-9) if available. Please include ! the compressed preprocessor output in your bug report, even if the ! source code is freely available elsewhere; it makes the job of our volunteer testers much easier. ! The only excuses to not send us the preprocessed sources are (i) if ! you've found a bug in the preprocessor, (ii) if you've reduced the ! testcase to a small file that doesn't include any other file or (iii) ! if the bug appears only when using precompiled headers. If you can't ! post the preprocessed sources because they're proprietary code, then try to create a small file that triggers the same problem. ! Since we're supposed to be able to re-create the assembly output ! (extension .s), you usually should not include it in the bug report, ! although you may want to post parts of it to point out assembly code you consider to be wrong. Whether to use MIME attachments or uuencode is up to you. In any case, ! make sure the compiler command line, version and error output are in plain text, so that we don't have to decode the bug report in order to ! tell who should take care of it. A meaningful subject indicating language and platform also helps. ! Please avoid posting an archive (.tar, .shar or .zip); we generally ! need just a single file to reproduce the bug (the .i/.ii/.f ! preprocessed file), and, by storing it in an archive, you're just making our volunteers' jobs harder. Only when your bug report requires multiple source files to be reproduced should you use an archive. This ! is, for example, the case if you are using INCLUDE directives in ! Fortran code, which are not processed by the preprocessor, but the ! compiler. In that case, we need the main file and all INCLUDEd files. ! In any case, make sure the compiler version, error message, etc, are ! included in the body of your bug report as plain text, even if needlessly duplicated as part of an archive. ! If you fail to supply enough information for a bug report to be ! reproduced, someone will probably ask you to post additional ! information (or just ignore your bug report, if they're in a bad day, ! so try to get it right on the first posting :-). In this case, please post the additional information to the bug reporting mailing list, not ! just to the person who requested it, unless explicitly told so. If possible, please include in this follow-up all the information you had ! supplied in the incomplete bug report (including the preprocessor output), so that the new bug report is self-contained. Detailed bug reporting instructions for GNAT ! See the [25]previous section for bug reporting instructions for GCC language implementations other than Ada. ! Bug reports have to contain at least the following information in order to be useful: * the exact version of GCC, as shown by "gcc -v"; * the system type; * the options when GCC was configured/built; ! * the exact command line passed to the gcc program triggering the ! bug (not just the flags passed to gnatmake, but gnatmake prints the parameters it passed to gcc) * a collection of source files for reproducing the bug, preferably a minimal set (see below); * a description of the expected behavior; * a description of actual behavior. ! If your code depends on additional source files (usually package specifications), submit the source code for these compilation units in ! a single file that is acceptable input to gnatchop, i.e. contains no ! non-Ada text. If the compilation terminated normally, you can usually obtain a list of dependencies using the "gnatls -d main_unit" command, ! where main_unit is the file name of the main compilation unit (which is also passed to gcc). ! If you report a bug which causes the compiler to print a bug box, include that bug box in your report, and do not forget to send all the source files listed after the bug box along with your report. ! If you use gnatprep, be sure to send in preprocessed sources (unless you have to report a bug in gnatprep). ! When you have checked that your report meets these criteria, please ! submit it according to our [26]generic instructions. (If you use a ! mailing list for reporting, please include an "[Ada]" tag in the subject.) Detailed bug reporting instructions when using a precompiled header ! If you're encountering a bug when using a precompiled header, the first thing to do is to delete the precompiled header, and try running ! the same GCC command again. If the bug happens again, the bug doesn't ! really involve precompiled headers, please report it without using ! them by following the instructions [27]above. ! If you've found a bug while building a precompiled header (for ! instance, the compiler crashes), follow the usual instructions ! [28]above. ! If you've found a real precompiled header bug, what we'll need to ! reproduce it is the sources to build the precompiled header (as a single .i file), the source file that uses the precompiled header, any ! other headers that source file includes, and the command lines that you used to build the precompiled header and to use it. Please don't send us the actual precompiled header. It is likely to be --- 67,227 ---- * A source file that #includes header files that are left out of the bug report (see above) * That source file and a collection of header files. ! * An attached archive (tar, zip, shar, whatever) containing all (or some :-) of the above. ! * A code snippet that won't cause the compiler to produce the exact ! output mentioned in the bug report (e.g., a snippet with just a ! few lines around the one that apparently triggers the bug, with ! some pieces replaced with ellipses or comments for extra obfuscation :-) ! * The location (URL) of the package that failed to build (we won't download it, anyway, since you've already given us what we need to duplicate the bug, haven't you? :-) ! * An error that occurs only some of the times a certain file is ! compiled, such that retrying a sufficient number of times results ! in a successful compilation; this is a symptom of a hardware problem, not of a compiler bug (sorry) ! * E-mail messages that complement previous, incomplete bug reports. ! Post a new, self-contained, full bug report instead, if possible as a follow-up to the original bug report ! * Assembly files (*.s) produced by the compiler, or any binary ! files, such as object files, executables, core files, or precompiled header files ! * Duplicate bug reports, or reports of bugs already fixed in the development tree, especially those that have already been reported as fixed last week :-) ! * Bugs in the assembler, the linker or the C library. These are ! separate projects, with separate mailing lists and different bug reporting procedures ! * Bugs in releases or snapshots of GCC not issued by the GNU Project. Report them to whoever provided you with the release ! * Questions about the correctness or the expected behavior of certain constructs that are not GCC extensions. Ask them in forums dedicated to the discussion of the programming language Where to post it ! Please submit your bug report directly to the [20]GCC bug database. ! Alternatively, you can use the gccbug script that mails your bug ! report to the bug database. ! Only if all this is absolutely impossible, mail all information to ! [21]gcc-bugs@gcc.gnu.org. Detailed bug reporting instructions ! Please refer to the [22]next section when reporting bugs in GNAT, the ! Ada compiler, or to the [23]one after that when reporting bugs that appear when using a precompiled header. ! In general, all the information we need can be obtained by collecting ! the command line below, as well as its output and the preprocessed file it generates. gcc -v -save-temps all-your-options source-file ! Typically the preprocessed file (extension .i for C or .ii for C++, and .f if the preprocessor is used on Fortran files) will be large, so please compress the resulting file with one of the popular compression ! programs such as bzip2, gzip, zip or compress (in decreasing order of preference). Use maximum compression (-9) if available. Please include ! the compressed preprocessor output in your bug report, even if the ! source code is freely available elsewhere; it makes the job of our volunteer testers much easier. ! The only excuses to not send us the preprocessed sources are (i) if ! you've found a bug in the preprocessor, (ii) if you've reduced the ! testcase to a small file that doesn't include any other file or (iii) ! if the bug appears only when using precompiled headers. If you can't ! post the preprocessed sources because they're proprietary code, then try to create a small file that triggers the same problem. ! Since we're supposed to be able to re-create the assembly output ! (extension .s), you usually should not include it in the bug report, ! although you may want to post parts of it to point out assembly code you consider to be wrong. Whether to use MIME attachments or uuencode is up to you. In any case, ! make sure the compiler command line, version and error output are in plain text, so that we don't have to decode the bug report in order to ! tell who should take care of it. A meaningful subject indicating language and platform also helps. ! Please avoid posting an archive (.tar, .shar or .zip); we generally ! need just a single file to reproduce the bug (the .i/.ii/.f ! preprocessed file), and, by storing it in an archive, you're just making our volunteers' jobs harder. Only when your bug report requires multiple source files to be reproduced should you use an archive. This ! is, for example, the case if you are using INCLUDE directives in ! Fortran code, which are not processed by the preprocessor, but the ! compiler. In that case, we need the main file and all INCLUDEd files. ! In any case, make sure the compiler version, error message, etc, are ! included in the body of your bug report as plain text, even if needlessly duplicated as part of an archive. ! If you fail to supply enough information for a bug report to be ! reproduced, someone will probably ask you to post additional ! information (or just ignore your bug report, if they're in a bad day, ! so try to get it right on the first posting :-). In this case, please post the additional information to the bug reporting mailing list, not ! just to the person who requested it, unless explicitly told so. If possible, please include in this follow-up all the information you had ! supplied in the incomplete bug report (including the preprocessor output), so that the new bug report is self-contained. Detailed bug reporting instructions for GNAT ! See the [24]previous section for bug reporting instructions for GCC language implementations other than Ada. ! Bug reports have to contain at least the following information in order to be useful: * the exact version of GCC, as shown by "gcc -v"; * the system type; * the options when GCC was configured/built; ! * the exact command line passed to the gcc program triggering the ! bug (not just the flags passed to gnatmake, but gnatmake prints the parameters it passed to gcc) * a collection of source files for reproducing the bug, preferably a minimal set (see below); * a description of the expected behavior; * a description of actual behavior. ! If your code depends on additional source files (usually package specifications), submit the source code for these compilation units in ! a single file that is acceptable input to gnatchop, i.e. contains no ! non-Ada text. If the compilation terminated normally, you can usually obtain a list of dependencies using the "gnatls -d main_unit" command, ! where main_unit is the file name of the main compilation unit (which is also passed to gcc). ! If you report a bug which causes the compiler to print a bug box, include that bug box in your report, and do not forget to send all the source files listed after the bug box along with your report. ! If you use gnatprep, be sure to send in preprocessed sources (unless you have to report a bug in gnatprep). ! When you have checked that your report meets these criteria, please ! submit it according to our [25]generic instructions. (If you use a ! mailing list for reporting, please include an "[Ada]" tag in the subject.) Detailed bug reporting instructions when using a precompiled header ! If you're encountering a bug when using a precompiled header, the first thing to do is to delete the precompiled header, and try running ! the same GCC command again. If the bug happens again, the bug doesn't ! really involve precompiled headers, please report it without using ! them by following the instructions [26]above. ! If you've found a bug while building a precompiled header (for ! instance, the compiler crashes), follow the usual instructions ! [27]above. ! If you've found a real precompiled header bug, what we'll need to ! reproduce it is the sources to build the precompiled header (as a single .i file), the source file that uses the precompiled header, any ! other headers that source file includes, and the command lines that you used to build the precompiled header and to use it. Please don't send us the actual precompiled header. It is likely to be *************** Detailed bug reporting instructions when *** 232,361 **** Frequently Reported Bugs in GCC ! This is a list of bugs in GCC that are reported very often, but not ! yet fixed. While it is certainly better to fix bugs instead of ! documenting them, this document might save people the effort of writing a bug report when the bug is already well-known. ! There are many reasons why a reported bug doesn't get fixed. It might ! be difficult to fix, or fixing it might break compatibility. Often, ! reports get a low priority when there is a simple work-around. In particular, bugs caused by invalid code have a simple work-around: fix the code. _________________________________________________________________ C++ - ABI bugs - - GCC 3.0 had a new ABI, which affected class layout, function mangling - and calling conventions. We had intended it to be complete, but - unfortunately some issues came to light, too late to fix in the 3.0 - series. The ABI should not change in dot releases, so we addressed - most issues in GCC 3.1. - - Covariant return types - Up to (and including) GCC 3.3 we did not implement non-trivial - covariant returns. This has been addressed for GCC 3.4. - Missing features - We know some things are missing from G++. - The export keyword is not implemented. ! Most C++ compilers (G++ included) do not yet implement export, ! which is necessary for separate compilation of template ! declarations and definitions. Without export, a template ! definition must be in scope to be used. The obvious workaround ! is simply to place all definitions in the header itself. ! Alternatively, the compilation unit containing template definitions may be included from the header. ! Two stage lookup in templates is not implemented. ! [14.6] specifies how names are looked up inside a template. G++ ! does not do this correctly, but for most templates this will ! not be noticeable. ! Parse errors for "simple" code ! Up to and including GCC 3.0, the compiler will give "parse error" for ! seemingly simple code, such as ! struct A{ A(); A(int); - void func(); }; ! struct B{ B(A); B(A,A); ! void func(); }; ! void foo(){ ! B b(A(),A(1)); //Variable b, initialized with two temporaries ! B(A(2)).func(); //B temporary, initialized with A temporary } ! The problem is that GCC starts to parse the declaration of b as a ! function b returning B, taking a function returning A as an argument. ! When it sees the 1, it is too late. The work-around in these cases is ! to add additional parentheses around the expressions that are mistaken ! as declarations: ! (B(A(2))).func(); ! Sometimes, even that is not enough; to show the compiler that this ! should be really an expression, a comma operator with a dummy argument ! can be used: ! B b((0,A()),A(1)); ! Another example is the parse error for the return statement in ! struct A{}; ! struct B{ ! A a; ! A f1(bool); ! }; ! A B::f1(bool b) ! { ! if (b) ! return (A()); ! return a; ! } ! The problem is that the compiler interprets A() as a function (taking ! no arguments, returning A), and (A()) as a cast - with a missing ! expression, hence the parse error. The work-around is to omit the ! parentheses: ! if (b) ! return A(); ! This problem occurs in a number of variants; in throw statements, ! people also frequently put the object in parentheses. The exact error ! also somewhat varies with the compiler version. The work-arounds ! proposed do not change the semantics of the program at all; they make ! them perhaps less readable. _________________________________________________________________ Fortran ! Fortran bugs are documented in the G77 manual rather than explicitly ! listed here. Please see [29]Known Causes of Trouble with GNU Fortran in the G77 manual. _________________________________________________________________ Non-bugs ! The following are not actually bugs, but are reported often enough to warrant a mention here. ! It is not always a bug in the compiler, if code which "worked" in a ! previous version, is now rejected. Earlier versions of GCC sometimes were less picky about standard conformance and accepted invalid source ! code. In addition, programming languages themselves change, rendering ! code invalid that used to be conforming (this holds especially for ! C++). In either case, you should update your code to match recent language standards. _________________________________________________________________ --- 230,346 ---- Frequently Reported Bugs in GCC ! This is a list of bugs in GCC that are reported very often, but not ! yet fixed. While it is certainly better to fix bugs instead of ! documenting them, this document might save people the effort of writing a bug report when the bug is already well-known. ! There are many reasons why a reported bug doesn't get fixed. It might ! be difficult to fix, or fixing it might break compatibility. Often, ! reports get a low priority when there is a simple work-around. In particular, bugs caused by invalid code have a simple work-around: fix the code. _________________________________________________________________ C++ Missing features The export keyword is not implemented. ! Most C++ compilers (G++ included) do not yet implement export, ! which is necessary for separate compilation of template ! declarations and definitions. Without export, a template ! definition must be in scope to be used. The obvious workaround ! is simply to place all definitions in the header itself. ! Alternatively, the compilation unit containing template definitions may be included from the header. ! Bugs fixed in the upcoming 3.4 series ! The following bugs are present up to (and including) GCC 3.3.x. They ! have been fixed in 3.4.0. ! Two-stage name-lookup. ! GCC did not implement two-stage name-lookup (also see ! [28]below). ! ! Covariant return types. ! GCC did not implement non-trivial covariant returns. ! ! Parse errors for "simple" code. ! GCC gave parse errors for seemingly simple code, such as ! ! struct A ! { A(); A(int); }; ! struct B ! { B(A); B(A,A); ! void foo(); }; ! A bar() ! { ! B b(A(),A(1)); // Variable b, initialized with two temporaries ! B(A(2)).foo(); // B temporary, initialized with A temporary ! return (A()); // return A temporary } ! Although being valid code, each of the three lines with a ! comment was rejected by GCC. The work-arounds for older ! compiler versions proposed below do not change the semantics of ! the programs at all. ! The problem in the first case was that GCC started to parse the ! declaration of b as a function called b returning B, taking a ! function returning A as an argument. When it encountered the 1, ! it was too late. To show the compiler that this should be ! really an expression, a comma operator with a dummy argument ! could be used: ! B b((0,A()),A(1)); ! The work-around for simpler cases like the second one was to ! add additional parentheses around the expressions that were ! mistaken as declarations: ! (B(A(2))).foo(); ! In the third case, however, additional parentheses were causing ! the problems: The compiler interpreted A() as a function ! (taking no arguments, returning A), and (A()) as a cast lacking ! an expression to be casted, hence the parse error. The ! work-around was to omit the parentheses: ! return A(); ! ! This problem occured in a number of variants; in throw ! statements, people also frequently put the object in ! parentheses. _________________________________________________________________ Fortran ! Fortran bugs are documented in the G77 manual rather than explicitly ! listed here. Please see [29]Known Causes of Trouble with GNU Fortran in the G77 manual. _________________________________________________________________ Non-bugs ! The following are not actually bugs, but are reported often enough to warrant a mention here. ! It is not always a bug in the compiler, if code which "worked" in a ! previous version, is now rejected. Earlier versions of GCC sometimes were less picky about standard conformance and accepted invalid source ! code. In addition, programming languages themselves change, rendering ! code invalid that used to be conforming (this holds especially for ! C++). In either case, you should update your code to match recent language standards. _________________________________________________________________ *************** General *** 363,369 **** Problems with floating point numbers - the [30]most often reported non-bug. ! In a number of cases, GCC appears to perform floating point computations incorrectly. For example, the C++ program #include --- 348,354 ---- Problems with floating point numbers - the [30]most often reported non-bug. ! In a number of cases, GCC appears to perform floating point computations incorrectly. For example, the C++ program #include *************** int main() *** 376,402 **** return 0; } ! might print 50 on some systems and optimization levels, and 49 on others. ! The is the result of rounding: The computer cannot represent all real numbers exactly, so it has to use approximations. When ! computing with approximation, the computer needs to round to the nearest representable number. ! This is not a bug in the compiler, but an inherent limitation ! of the floating point types. Please study [31]this paper for more information. _________________________________________________________________ C Casting does not work as expected when optimization is turned on. ! This is often caused by a violation of aliasing rules, which ! are part of the ISO C standard. These rules say that a program is invalid if you try to access a variable through a pointer of ! an incompatible type. This is happening in the following ! example where a short is accessed through a pointer to integer (the code assumes 16-bit shorts and 32-bit ints): #include --- 361,387 ---- return 0; } ! might print 50 on some systems and optimization levels, and 49 on others. ! The is the result of rounding: The computer cannot represent all real numbers exactly, so it has to use approximations. When ! computing with approximation, the computer needs to round to the nearest representable number. ! This is not a bug in the compiler, but an inherent limitation ! of the floating point types. Please study [31]this paper for more information. _________________________________________________________________ C Casting does not work as expected when optimization is turned on. ! This is often caused by a violation of aliasing rules, which ! are part of the ISO C standard. These rules say that a program is invalid if you try to access a variable through a pointer of ! an incompatible type. This is happening in the following ! example where a short is accessed through a pointer to integer (the code assumes 16-bit shorts and 32-bit ints): #include *************** int main() *** 414,448 **** return 0; } ! The aliasing rules were designed to allow compilers more ! aggressive optimization. Basically, a compiler can assume that ! all changes to variables happen through pointers or references ! to variables of a type compatible to the accessed variable. ! Dereferencing a pointer that violates the aliasing rules results in undefined behavior. ! In the case above, the compiler may assume that no access ! through an integer pointer can change the array a, consisting ! of shorts. Thus, printf may be called with the original values of a[0] and a[1]. What really happens is up to the compiler and may change with architecture and optimization level. ! Recent versions of GCC turn on the option -fstrict-aliasing ! (which allows alias-based optimizations) by default with -O2. And some architectures then really print "1111 1111" as result. ! Without optimization the executable will generate the "expected" output "2222 2222". ! To disable optimizations based on alias-analysis for faulty ! legacy code, the option -fno-strict-aliasing can be used as a work-around. The option -Wstrict-aliasing (which is included in -Wall) warns about some - but not all - cases of violation of aliasing rules when -fstrict-aliasing is active. ! To fix the code above, you can use a union instead of a cast ! (note that this is a GCC extension which might not work with other compilers): #include --- 399,433 ---- return 0; } ! The aliasing rules were designed to allow compilers more ! aggressive optimization. Basically, a compiler can assume that ! all changes to variables happen through pointers or references ! to variables of a type compatible to the accessed variable. ! Dereferencing a pointer that violates the aliasing rules results in undefined behavior. ! In the case above, the compiler may assume that no access ! through an integer pointer can change the array a, consisting ! of shorts. Thus, printf may be called with the original values of a[0] and a[1]. What really happens is up to the compiler and may change with architecture and optimization level. ! Recent versions of GCC turn on the option -fstrict-aliasing ! (which allows alias-based optimizations) by default with -O2. And some architectures then really print "1111 1111" as result. ! Without optimization the executable will generate the "expected" output "2222 2222". ! To disable optimizations based on alias-analysis for faulty ! legacy code, the option -fno-strict-aliasing can be used as a work-around. The option -Wstrict-aliasing (which is included in -Wall) warns about some - but not all - cases of violation of aliasing rules when -fstrict-aliasing is active. ! To fix the code above, you can use a union instead of a cast ! (note that this is a GCC extension which might not work with other compilers): #include *************** int main() *** 466,476 **** Now the result will always be "2222 2222". ! For some more insight into the subject, please have a look at [32]this article. Cannot use preprocessor directive in macro arguments. ! Let me guess... you used an older version of GCC to compile code that looks something like this: memcpy(dest, src, --- 451,461 ---- Now the result will always be "2222 2222". ! For some more insight into the subject, please have a look at [32]this article. Cannot use preprocessor directive in macro arguments. ! Let me guess... you used an older version of GCC to compile code that looks something like this: memcpy(dest, src, *************** test.c:8: undefined or invalid # directi *** 492,514 **** test.c:9: parse error before `24' test.c:10: undefined or invalid # directive ! This is because your C library's happens to define ! memcpy as a macro - which is perfectly legitimate. In recent versions of glibc, for example, printf is among those functions which are implemented as macros. ! Versions of GCC prior to 3.3 did not allow you to put #ifdef (or any other preprocessor directive) inside the arguments of a macro. The code therefore would not compile. As of GCC 3.3 this kind of construct is always accepted and the ! preprocessor will probably do what you expect, but see the manual for detailed semantics. ! However, this kind of code is not portable. It is "undefined ! behavior" according to the C standard; that means different ! compilers may do different things with it. It is always ! possible to rewrite code which uses conditionals inside macros so that it doesn't. You could write the above example #ifdef PLATFORM1 --- 477,499 ---- test.c:9: parse error before `24' test.c:10: undefined or invalid # directive ! This is because your C library's happens to define ! memcpy as a macro - which is perfectly legitimate. In recent versions of glibc, for example, printf is among those functions which are implemented as macros. ! Versions of GCC prior to 3.3 did not allow you to put #ifdef (or any other preprocessor directive) inside the arguments of a macro. The code therefore would not compile. As of GCC 3.3 this kind of construct is always accepted and the ! preprocessor will probably do what you expect, but see the manual for detailed semantics. ! However, this kind of code is not portable. It is "undefined ! behavior" according to the C standard; that means different ! compilers may do different things with it. It is always ! possible to rewrite code which uses conditionals inside macros so that it doesn't. You could write the above example #ifdef PLATFORM1 *************** test.c:10: undefined or invalid # direct *** 517,548 **** memcpy(dest, src, 24); #endif ! This is a bit more typing, but I personally think it's better style in addition to being more portable. Cannot initialize a static variable with stdin. ! This has nothing to do with GCC, but people ask us about it a lot. Code like this: #include FILE *yyin = stdin; ! will not compile with GNU libc, because stdin is not a ! constant. This was done deliberately, to make it easier to ! maintain binary compatibility when the type FILE needs to be changed. It is surprising for people used to traditional Unix C libraries, but it is permitted by the C standard. ! This construct commonly occurs in code generated by old ! versions of lex or yacc. We suggest you try regenerating the ! parser with a current version of flex or bison, respectively. ! In your own code, the appropriate fix is to move the initialization to the beginning of main. ! There is a common misconception that the GCC developers are ! responsible for GNU libc. These are in fact two entirely ! separate projects; please check the [33]GNU libc web pages for details. _________________________________________________________________ --- 502,533 ---- memcpy(dest, src, 24); #endif ! This is a bit more typing, but I personally think it's better style in addition to being more portable. Cannot initialize a static variable with stdin. ! This has nothing to do with GCC, but people ask us about it a lot. Code like this: #include FILE *yyin = stdin; ! will not compile with GNU libc, because stdin is not a ! constant. This was done deliberately, to make it easier to ! maintain binary compatibility when the type FILE needs to be changed. It is surprising for people used to traditional Unix C libraries, but it is permitted by the C standard. ! This construct commonly occurs in code generated by old ! versions of lex or yacc. We suggest you try regenerating the ! parser with a current version of flex or bison, respectively. ! In your own code, the appropriate fix is to move the initialization to the beginning of main. ! There is a common misconception that the GCC developers are ! responsible for GNU libc. These are in fact two entirely ! separate projects; please check the [33]GNU libc web pages for details. _________________________________________________________________ *************** C++ *** 550,646 **** Nested classes can access private members and types of the containing class. ! Defect report 45 clarifies that nested classes are members of ! the class they are nested in, and so are granted access to private members of that class. G++ emits two copies of constructors and destructors. ! In general there are three types of constructors (and destructors). 1. The complete object constructor/destructor. 2. The base object constructor/destructor. 3. The allocating constructor/deallocating destructor. ! The first two are different, when virtual base classes are involved. Global destructors are not run in the correct order. ! Global destructors should be run in the reverse order of their ! constructors completing. In most cases this is the same as the ! reverse order of constructors starting, but sometimes it is ! different, and that is important. You need to compile and link ! your programs with --use-cxa-atexit. We have not turned this ! switch on by default, as it requires a cxa aware runtime library (libc, glibc, or equivalent). Classes in exception specifiers must be complete types. ! [15.4]/1 tells you that you cannot have an incomplete type, or ! pointer to incomplete (other than cv void *) in an exception specification. Exceptions don't work in multithreaded applications. ! You need to rebuild g++ and libstdc++ with --enable-threads. ! Remember, C++ exceptions are not like hardware interrupts. You ! cannot throw an exception in one thread and catch it in ! another. You cannot throw an exception from a signal handler and catch it in the main thread. Templates, scoping, and digraphs. ! If you have a class in the global namespace, say named X, and want to give it as a template argument to some other class, say std::vector, then std::vector<::X> fails with a parser error. ! The reason is that the standard mandates that the sequence <: ! is treated as if it were the token [. (There are several such ! combinations of characters - they are called digraphs.) ! Depending on the version, the compiler then reports a parse ! error before the character : (the colon before X) or a missing closing bracket ]. ! The simplest way to avoid this is to write std::vector< ::X>, ! i.e. place a space between the opening angle bracket and the scope operator. ! Common problems updating from G++ 2.95 to G++ 3.0 ! G++ 3.0 conforms much closer to the ISO C++ standard (available at ! [34]http://www.ncits.org/cplusplus.htm). ! We have also implemented some of the core and library defect reports (available at ! [35]http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/cwg_defects.html & [36]http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-defects.html respectively). ! * The ABI has changed. This means that both class layout and name ! mangling is different. You must recompile all c++ libraries (if ! you don't you will get link errors). ! * The standard library is much more conformant, and uses the std:: ! namespace. ! * std:: is now a real namespace, not an alias for ::. * The standard header files for the c library don't end with .h, but begin with c (i.e. rather than ). The .h names are still available, but are deprecated. * is deprecated, use instead. ! * streambuf::seekoff & streambuf::seekpos are private, instead use streambuf::pubseekoff & streambuf::pubseekpos respectively. * If std::operator << (std::ostream &, long long) doesn't exist, you need to recompile libstdc++ with --enable-long-long. ! This means you may get lots of errors about things like strcmp not ! being found. You've most likely forgotten to tell the compiler to look ! in the std:: namespace. There are several ways to do this, ! * Say, std::strcmp at the call. This is the most explicit way of ! saying what you mean. ! * Say, using std::strcmp; somewhere before the call. You will need ! to do this for each function or type you wish to use from the standard library. ! * Say, using namespace std; somewhere before the call. This is the ! quick-but-dirty fix. This brings the whole of the std:: namespace ! into scope. Never do this in a header file, as you will be forcing ! users of your header file to do the same. ! In addition to the problems listed above, the manual contains a section on [37]Common Misunderstandings with GNU C++. References --- 535,717 ---- Nested classes can access private members and types of the containing class. ! Defect report 45 clarifies that nested classes are members of ! the class they are nested in, and so are granted access to private members of that class. G++ emits two copies of constructors and destructors. ! In general there are three types of constructors (and destructors). 1. The complete object constructor/destructor. 2. The base object constructor/destructor. 3. The allocating constructor/deallocating destructor. ! The first two are different, when virtual base classes are involved. Global destructors are not run in the correct order. ! Global destructors should be run in the reverse order of their ! constructors completing. In most cases this is the same as the ! reverse order of constructors starting, but sometimes it is ! different, and that is important. You need to compile and link ! your programs with --use-cxa-atexit. We have not turned this ! switch on by default, as it requires a cxa aware runtime library (libc, glibc, or equivalent). Classes in exception specifiers must be complete types. ! [15.4]/1 tells you that you cannot have an incomplete type, or ! pointer to incomplete (other than cv void *) in an exception specification. Exceptions don't work in multithreaded applications. ! You need to rebuild g++ and libstdc++ with --enable-threads. ! Remember, C++ exceptions are not like hardware interrupts. You ! cannot throw an exception in one thread and catch it in ! another. You cannot throw an exception from a signal handler and catch it in the main thread. Templates, scoping, and digraphs. ! If you have a class in the global namespace, say named X, and want to give it as a template argument to some other class, say std::vector, then std::vector<::X> fails with a parser error. ! The reason is that the standard mandates that the sequence <: ! is treated as if it were the token [. (There are several such ! combinations of characters - they are called digraphs.) ! Depending on the version, the compiler then reports a parse ! error before the character : (the colon before X) or a missing closing bracket ]. ! The simplest way to avoid this is to write std::vector< ::X>, ! i.e. place a space between the opening angle bracket and the scope operator. ! Common problems when upgrading the compiler ! ABI changes ! The application binary interface (ABI) defines how the elements of ! classes are laid out, how functions are called, how function names are ! mangled etc. It usually changes with each major release (i.e. when the ! first or second part of the version number changes). You must ! recompile all C++ libraries, or you risk linker errors or ! malfunctioning programs. However, the ABI is not changed with bug-fix ! releases (i.e. when the third part of the version number changes). The ! code should be binary compatible among these versions. ! ! Standard conformance ! ! With each release, we try to make G++ conform closer to the ISO C++ ! standard (available at [34]http://www.ncits.org/cplusplus.htm). We ! have also implemented some of the core and library defect reports (available at ! [35]http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/cwg_defects.html & [36]http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-defects.html respectively). ! ! Non-conforming legacy code that worked with older versions of GCC may ! be rejected by more recent compilers. There is no command-line switch ! to ensure compatibility in general, because trying to parse ! standard-conforming and old-style code at the same time would render ! the C++ frontend unmaintainable. However, some non-conforming ! constructs are allowed when the command-line option -fpermissive is ! used. ! ! Two milestones in standard conformance are GCC 3.0 (including a major ! overhaul of the standard library) and the upcoming 3.4.0 version (with ! its new C++ parser). ! ! New in GCC 3.0 ! ! * The standard library is much more conformant, and uses the std:: ! namespace (which is now a real namespace, not an alias for ::). * The standard header files for the c library don't end with .h, but begin with c (i.e. rather than ). The .h names are still available, but are deprecated. * is deprecated, use instead. ! * streambuf::seekoff & streambuf::seekpos are private, instead use streambuf::pubseekoff & streambuf::pubseekpos respectively. * If std::operator << (std::ostream &, long long) doesn't exist, you need to recompile libstdc++ with --enable-long-long. ! If you get lots of errors about things like cout not being found, ! you've most likely forgotten to tell the compiler to look in the std:: ! namespace. There are several ways to do this: ! * Say std::cout at the call. This is the most explicit way of saying ! what you mean. ! * Say using std::cout; somewhere before the call. You will need to ! do this for each function or type you wish to use from the standard library. ! * Say using namespace std; somewhere before the call. This is the ! quick-but-dirty fix. This brings the whole of the std:: namespace ! into scope. Never do this in a header file, as every user of your ! header file will be affected by this decision. ! New in GCC 3.4.0 ! ! The new parser brings a lot of improvements, especially concerning ! name-lookup. ! * The "implicit typename" extension got removed (it was already ! deprecated since GCC 3.1), so that the following code is now ! rejected, see [14.6]: ! ! template struct A ! { ! typedef int X; ! }; ! ! template struct B ! { ! A::X x; // error ! typename A::X y; // OK ! }; ! ! B b; ! ! * For similar reasons, the following code now requires the template ! keyword, see [14.2]: ! ! template struct A ! { ! template struct X {}; ! }; ! ! template struct B ! { ! typename A::X<0> x; // error ! typename A::template X<0> y; // OK ! }; ! ! B b; ! ! * We now have two-stage name-lookup, so that the following code is ! rejected, see [14.6]/9: ! ! template int foo() ! { ! return i; // error ! } ! ! * This also affects members of base classes, see [14.6.2]: ! ! template struct A ! { ! int i, j; ! }; ! ! template struct B : A ! { ! int foo1() { return i; } // error ! int foo2() { return this->i; } // OK ! int foo3() { return B::i; } // OK ! int foo4() { return A::i; } // OK ! ! using A::j; ! int foo5() { return j; } // OK ! }; ! ! In addition to the problems listed above, the manual contains a section on [37]Common Misunderstandings with GNU C++. References *************** References *** 655,683 **** 8. http://gcc.gnu.org/bugs.html#pch 9. http://gcc.gnu.org/bugs.html#known 10. http://gcc.gnu.org/bugs.html#cxx ! 11. http://gcc.gnu.org/bugs.html#cxx-abi ! 12. http://gcc.gnu.org/bugs.html#missing ! 13. http://gcc.gnu.org/bugs.html#parsing ! 14. http://gcc.gnu.org/bugs.html#fortran ! 15. http://gcc.gnu.org/bugs.html#nonbugs ! 16. http://gcc.gnu.org/bugs.html#nonbugs_general ! 17. http://gcc.gnu.org/bugs.html#nonbugs_c ! 18. http://gcc.gnu.org/bugs.html#nonbugs_cxx ! 19. http://gcc.gnu.org/bugs.html#updating ! 20. http://gcc.gnu.org/bugs.html#known ! 21. http://gcc.gnu.org/bugzilla/ ! 22. mailto:gcc-bugs@gcc.gnu.org ! 23. http://gcc.gnu.org/bugs.html#gnat ! 24. http://gcc.gnu.org/bugs.html#pch ! 25. http://gcc.gnu.org/bugs.html#detailed ! 26. http://gcc.gnu.org/bugs.html#where 27. http://gcc.gnu.org/bugs.html#detailed ! 28. http://gcc.gnu.org/bugs.html#detailed 29. http://gcc.gnu.org/onlinedocs/g77/Trouble.html 30. http://gcc.gnu.org/PR323 31. http://www.validlab.com/goldberg/paper.ps 32. http://mail-index.NetBSD.org/tech-kern/2003/08/11/0001.html ! 33. http://www.gnu.org/software/glibc/ 34. http://www.ncits.org/cplusplus.htm 35. http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/cwg_defects.html 36. http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-defects.html --- 726,754 ---- 8. http://gcc.gnu.org/bugs.html#pch 9. http://gcc.gnu.org/bugs.html#known 10. http://gcc.gnu.org/bugs.html#cxx ! 11. http://gcc.gnu.org/bugs.html#missing ! 12. http://gcc.gnu.org/bugs.html#fixed34 ! 13. http://gcc.gnu.org/bugs.html#fortran ! 14. http://gcc.gnu.org/bugs.html#nonbugs ! 15. http://gcc.gnu.org/bugs.html#nonbugs_general ! 16. http://gcc.gnu.org/bugs.html#nonbugs_c ! 17. http://gcc.gnu.org/bugs.html#nonbugs_cxx ! 18. http://gcc.gnu.org/bugs.html#upgrading ! 19. http://gcc.gnu.org/bugs.html#known ! 20. http://gcc.gnu.org/bugzilla/ ! 21. mailto:gcc-bugs@gcc.gnu.org ! 22. http://gcc.gnu.org/bugs.html#gnat ! 23. http://gcc.gnu.org/bugs.html#pch ! 24. http://gcc.gnu.org/bugs.html#detailed ! 25. http://gcc.gnu.org/bugs.html#where ! 26. http://gcc.gnu.org/bugs.html#detailed 27. http://gcc.gnu.org/bugs.html#detailed ! 28. http://gcc.gnu.org/bugs.html#new34 29. http://gcc.gnu.org/onlinedocs/g77/Trouble.html 30. http://gcc.gnu.org/PR323 31. http://www.validlab.com/goldberg/paper.ps 32. http://mail-index.NetBSD.org/tech-kern/2003/08/11/0001.html ! 33. http://www.gnu.org/software/libc/ 34. http://www.ncits.org/cplusplus.htm 35. http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/cwg_defects.html 36. http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-defects.html diff -Nrc3pad gcc-3.3.2/ChangeLog gcc-3.3.3/ChangeLog *** gcc-3.3.2/ChangeLog Thu Oct 16 19:42:40 2003 --- gcc-3.3.3/ChangeLog Sat Feb 14 20:16:33 2004 *************** *** 1,3 **** --- 1,28 ---- + 2004-02-14 Release Manager + + * GCC 3.3.3 Released. + + 2004-01-17 Volker Reichelt + + * MAINTAINERS: Remove entries without email address. + + 2004-01-10 Richard Sandiford + + * MAINTAINERS: Add myself as a MIPS maintainer. + + 2004-01-04 Eric Botcazou + + * MAINTAINERS: Move myself from 'Write After Approval' to + 'CPU Port Maintainers' section as SPARC maintainer. + + 2004-01-02 Roger Sayle + + * configure.in (ia64*-*-hpux*): Disable building java libraries. + + 2003-10-21 Matt Thomas + + * MAINTAINERS: Add myself as a vax port maintainer. + 2003-10-16 Release Manager * GCC 3.3.2 Released. diff -Nrc3pad gcc-3.3.2/FAQ gcc-3.3.3/FAQ *** gcc-3.3.2/FAQ Thu Oct 16 20:10:56 2003 --- gcc-3.3.3/FAQ Sat Feb 14 20:34:32 2004 *************** *** 1,12 **** GCC Frequently Asked Questions ! The latest version of this document is always available at [1]http://gcc.gnu.org/faq.html. ! This FAQ tries to answer specific questions concerning GCC. For ! general information regarding C, C++, resp. Fortran please check the ! [2]comp.lang.c FAQ, [3]comp.std.c++ FAQ, and the [4]Fortran Information page. Other GCC-related FAQs: [5]libstdc++-v3, and [6]GCJ. --- 1,12 ---- GCC Frequently Asked Questions ! The latest version of this document is always available at [1]http://gcc.gnu.org/faq.html. ! This FAQ tries to answer specific questions concerning GCC. For ! general information regarding C, C++, resp. Fortran please check the ! [2]comp.lang.c FAQ, [3]comp.std.c++ FAQ, and the [4]Fortran Information page. Other GCC-related FAQs: [5]libstdc++-v3, and [6]GCJ. *************** *** 34,45 **** 1. [24]Is there a stringstream / sstream for GCC 2.95.2? 5. [25]Miscellaneous 1. [26]Friend Templates ! 2. [27]dynamic_cast, throw, typeid don't work with shared libraries 3. [28]Why do I need autoconf, bison, xgettext, automake, etc? 4. [29]Why can't I build a shared library? ! 5. [30]When building C++, the linker says my constructors, ! destructors or virtual tables are undefined, but I defined them 6. [31]Will GCC someday include an incremental linker? _________________________________________________________________ --- 34,45 ---- 1. [24]Is there a stringstream / sstream for GCC 2.95.2? 5. [25]Miscellaneous 1. [26]Friend Templates ! 2. [27]dynamic_cast, throw, typeid don't work with shared libraries 3. [28]Why do I need autoconf, bison, xgettext, automake, etc? 4. [29]Why can't I build a shared library? ! 5. [30]When building C++, the linker says my constructors, ! destructors or virtual tables are undefined, but I defined them 6. [31]Will GCC someday include an incremental linker? _________________________________________________________________ *************** *** 48,148 **** What is the relationship between GCC and EGCS? ! In 1990/1991 gcc version 1 had reached a point of stability. For the ! targets it could support, it worked well. It had limitations inherent ! in its design that would be difficult to resolve, so a major effort ! was made to resolve those limitations and gcc version 2 was the result. ! When we had gcc2 in a useful state, development efforts on gcc1 ! stopped and we all concentrated on making gcc2 better than gcc1 could ! ever be. This is the kind of step forward we wanted to make with the EGCS project when it was formed in 1997. ! In April 1999 the Free Software Foundation officially halted development on the gcc2 compiler and appointed the EGCS project as the ! official GCC maintainers. The net result was a single project which ! carries forward GCC development under the ultimate control of the [32]GCC Steering Committee. _________________________________________________________________ What is an open development model? ! We are using a bazaar style [33][1] approach to GCC development: we ! make snapshots publicly available to anyone who wants to try them; we ! welcome anyone to join the development mailing list. All of the discussions on the development mailing list are available via the web. ! We're going to be making releases with a much higher frequency than they have been made in the past. ! In addition to weekly snapshots of the GCC development sources, we ! have the sources readable from a CVS server by anyone. Furthermore we ! are using remote CVS to allow remote maintainers write access to the sources. ! There have been many potential GCC developers who were not able to ! participate in GCC development in the past. We want these people to ! help in any way they can; we ultimately want GCC to be the best compiler in the world. ! A compiler is a complicated piece of software, there will still be ! strong central maintainers who will reject patches, who will demand ! documentation of implementations, and who will keep the level of ! quality as high as it is today. Code that could use wider testing may be integrated--code that is simply ill-conceived won't be. ! GCC is not the first piece of software to use this open development ! process; FreeBSD, the Emacs lisp repository, and the Linux kernel are a few examples of the bazaar style of development. ! With GCC, we are adding new features and optimizations at a rate that ! has not been done since the creation of gcc2; these additions ! inevitably have a temporarily destabilizing effect. With the help of ! developers working together with this bazaar style development, the ! resulting stability and quality levels will be better than we've had before. ! [1] We've been discussing different development models a lot over the past few months. The paper which started all of this introduced ! two terms: A cathedral development model versus a bazaar ! development model. The paper is written by Eric S. Raymond, it is ! called ``The Cathedral and the Bazaar''. The paper is a useful starting point for discussions. _________________________________________________________________ How do I get a bug fixed or a feature added? ! There are lots of ways to get something fixed. The list below may be ! incomplete, but it covers many of the common cases. These are listed ! roughly in order of decreasing difficulty for the average GCC user, ! meaning someone who is not skilled in the internals of GCC, and where ! difficulty is measured in terms of the time required to fix the bug. ! No alternative is better than any other; each has its benefits and disadvantages. ! * Fix it yourself. This alternative will probably bring results, if ! you work hard enough, but will probably take a lot of time, and, ! depending on the quality of your work and the perceived benefits ! of your changes, your code may or may not ever make it into an official release of GCC. ! * [34]Report the problem to the GCC bug tracking system and hope ! that someone will be kind enough to fix it for you. While this is ! certainly possible, and often happens, there is no guarantee that ! it will. You should not expect the same response from this method ! that you would see from a commercial support organization since ! the people who read GCC bug reports, if they choose to help you, will be volunteering their time. ! * Hire someone to fix it for you. There are various companies and ! individuals providing support for GCC. This alternative costs money, but is relatively likely to get results. _________________________________________________________________ Does GCC work on my platform? ! The host/target specific installation notes for GCC include ! information about known problems with installing or using GCC on ! particular platforms. These are included in the sources for a release ! in INSTALL/specific.html, and the [35]latest version is always ! available at the GCC web site. Reports of [36]successful builds for several versions of GCC are also available at the web site. _________________________________________________________________ --- 48,148 ---- What is the relationship between GCC and EGCS? ! In 1990/1991 gcc version 1 had reached a point of stability. For the ! targets it could support, it worked well. It had limitations inherent ! in its design that would be difficult to resolve, so a major effort ! was made to resolve those limitations and gcc version 2 was the result. ! When we had gcc2 in a useful state, development efforts on gcc1 ! stopped and we all concentrated on making gcc2 better than gcc1 could ! ever be. This is the kind of step forward we wanted to make with the EGCS project when it was formed in 1997. ! In April 1999 the Free Software Foundation officially halted development on the gcc2 compiler and appointed the EGCS project as the ! official GCC maintainers. The net result was a single project which ! carries forward GCC development under the ultimate control of the [32]GCC Steering Committee. _________________________________________________________________ What is an open development model? ! We are using a bazaar style [33][1] approach to GCC development: we ! make snapshots publicly available to anyone who wants to try them; we ! welcome anyone to join the development mailing list. All of the discussions on the development mailing list are available via the web. ! We're going to be making releases with a much higher frequency than they have been made in the past. ! In addition to weekly snapshots of the GCC development sources, we ! have the sources readable from a CVS server by anyone. Furthermore we ! are using remote CVS to allow remote maintainers write access to the sources. ! There have been many potential GCC developers who were not able to ! participate in GCC development in the past. We want these people to ! help in any way they can; we ultimately want GCC to be the best compiler in the world. ! A compiler is a complicated piece of software, there will still be ! strong central maintainers who will reject patches, who will demand ! documentation of implementations, and who will keep the level of ! quality as high as it is today. Code that could use wider testing may be integrated--code that is simply ill-conceived won't be. ! GCC is not the first piece of software to use this open development ! process; FreeBSD, the Emacs lisp repository, and the Linux kernel are a few examples of the bazaar style of development. ! With GCC, we are adding new features and optimizations at a rate that ! has not been done since the creation of gcc2; these additions ! inevitably have a temporarily destabilizing effect. With the help of ! developers working together with this bazaar style development, the ! resulting stability and quality levels will be better than we've had before. ! [1] We've been discussing different development models a lot over the past few months. The paper which started all of this introduced ! two terms: A cathedral development model versus a bazaar ! development model. The paper is written by Eric S. Raymond, it is ! called ``The Cathedral and the Bazaar''. The paper is a useful starting point for discussions. _________________________________________________________________ How do I get a bug fixed or a feature added? ! There are lots of ways to get something fixed. The list below may be ! incomplete, but it covers many of the common cases. These are listed ! roughly in order of decreasing difficulty for the average GCC user, ! meaning someone who is not skilled in the internals of GCC, and where ! difficulty is measured in terms of the time required to fix the bug. ! No alternative is better than any other; each has its benefits and disadvantages. ! * Fix it yourself. This alternative will probably bring results, if ! you work hard enough, but will probably take a lot of time, and, ! depending on the quality of your work and the perceived benefits ! of your changes, your code may or may not ever make it into an official release of GCC. ! * [34]Report the problem to the GCC bug tracking system and hope ! that someone will be kind enough to fix it for you. While this is ! certainly possible, and often happens, there is no guarantee that ! it will. You should not expect the same response from this method ! that you would see from a commercial support organization since ! the people who read GCC bug reports, if they choose to help you, will be volunteering their time. ! * Hire someone to fix it for you. There are various companies and ! individuals providing support for GCC. This alternative costs money, but is relatively likely to get results. _________________________________________________________________ Does GCC work on my platform? ! The host/target specific installation notes for GCC include ! information about known problems with installing or using GCC on ! particular platforms. These are included in the sources for a release ! in INSTALL/specific.html, and the [35]latest version is always ! available at the GCC web site. Reports of [36]successful builds for several versions of GCC are also available at the web site. _________________________________________________________________ *************** Does GCC work on my platform? *** 150,200 **** How to install multiple versions of GCC ! It may be desirable to install multiple versions of the compiler on ! the same system. This can be done by using different prefix paths at configure time and a few symlinks. ! Basically, configure the two compilers with different --prefix ! options, then build and install each compiler. Assume you want "gcc" to be the latest compiler and available in /usr/local/bin; also assume ! that you want "gcc2" to be the older gcc2 compiler and also available in /usr/local/bin. ! The easiest way to do this is to configure the new GCC with ! --prefix=/usr/local/gcc and the older gcc2 with ! --prefix=/usr/local/gcc2. Build and install both compilers. Then make ! a symlink from /usr/local/bin/gcc to /usr/local/gcc/bin/gcc and from ! /usr/local/bin/gcc2 to /usr/local/gcc2/bin/gcc. Create similar links for the "g++", "c++" and "g77" compiler drivers. ! An alternative to using symlinks is to configure with a ! --program-transform-name option. This option specifies a sed command ! to process installed program names with. Using it you can, for instance, have all the new GCC programs installed as "new-gcc" and the ! like. You will still have to specify different --prefix options for ! new GCC and old GCC, because it is only the executable program names that are transformed. The difference is that you (as administrator) do ! not have to set up symlinks, but must specify additional directories in your (as a user) PATH. A complication with --program-transform-name ! is that the sed command invariably contains characters significant to ! the shell, and these have to be escaped correctly, also it is not ! possible to use "^" or "$" in the command. Here is the option to prefix "new-" to the new GCC installed programs: --program-transform-name='s,\\\\(.*\\\\),new-\\\\1,' With the above --prefix option, that will install the new GCC programs ! into /usr/local/gcc/bin with names prefixed by "new-". You can use ! --program-transform-name if you have multiple versions of GCC, and wish to be sure about which version you are invoking. ! If you use --prefix, GCC may have difficulty locating a GNU assembler ! or linker on your system, [37]GCC can not find GNU as/GNU ld explains how to deal with this. ! Another option that may be easier is to use the --program-prefix= or ! --program-suffix= options to configure. So if you're installing GCC ! 2.95.2 and don't want to disturb the current version of GCC in /usr/local/bin/, you could do configure --program-suffix=-2.95.2 --- 150,200 ---- How to install multiple versions of GCC ! It may be desirable to install multiple versions of the compiler on ! the same system. This can be done by using different prefix paths at configure time and a few symlinks. ! Basically, configure the two compilers with different --prefix ! options, then build and install each compiler. Assume you want "gcc" to be the latest compiler and available in /usr/local/bin; also assume ! that you want "gcc2" to be the older gcc2 compiler and also available in /usr/local/bin. ! The easiest way to do this is to configure the new GCC with ! --prefix=/usr/local/gcc and the older gcc2 with ! --prefix=/usr/local/gcc2. Build and install both compilers. Then make ! a symlink from /usr/local/bin/gcc to /usr/local/gcc/bin/gcc and from ! /usr/local/bin/gcc2 to /usr/local/gcc2/bin/gcc. Create similar links for the "g++", "c++" and "g77" compiler drivers. ! An alternative to using symlinks is to configure with a ! --program-transform-name option. This option specifies a sed command ! to process installed program names with. Using it you can, for instance, have all the new GCC programs installed as "new-gcc" and the ! like. You will still have to specify different --prefix options for ! new GCC and old GCC, because it is only the executable program names that are transformed. The difference is that you (as administrator) do ! not have to set up symlinks, but must specify additional directories in your (as a user) PATH. A complication with --program-transform-name ! is that the sed command invariably contains characters significant to ! the shell, and these have to be escaped correctly, also it is not ! possible to use "^" or "$" in the command. Here is the option to prefix "new-" to the new GCC installed programs: --program-transform-name='s,\\\\(.*\\\\),new-\\\\1,' With the above --prefix option, that will install the new GCC programs ! into /usr/local/gcc/bin with names prefixed by "new-". You can use ! --program-transform-name if you have multiple versions of GCC, and wish to be sure about which version you are invoking. ! If you use --prefix, GCC may have difficulty locating a GNU assembler ! or linker on your system, [37]GCC can not find GNU as/GNU ld explains how to deal with this. ! Another option that may be easier is to use the --program-prefix= or ! --program-suffix= options to configure. So if you're installing GCC ! 2.95.2 and don't want to disturb the current version of GCC in /usr/local/bin/, you could do configure --program-suffix=-2.95.2 *************** How to install multiple versions of GCC *** 206,293 **** Dynamic linker is unable to find GCC libraries This problem manifests itself by programs not finding shared libraries ! they depend on when the programs are started. Note this problem often ! manifests itself with failures in the libio/libstdc++ tests after configuring with --enable-shared and building GCC. ! GCC does not specify a runpath so that the dynamic linker can find dynamic libraries at runtime. ! The short explanation is that if you always pass a -R option to the ! linker, then your programs become dependent on directories which may be NFS mounted, and programs may hang unnecessarily when an NFS server goes down. ! The problem is not programs that do require the directories; those ! programs are going to hang no matter what you do. The problem is programs that do not require the directories. ! SunOS effectively always passed a -R option for every -L option; this ! was a bad idea, and so it was removed for Solaris. We should not recreate it. ! However, if you feel you really need such an option to be passed ! automatically to the linker, you may add it to the GCC specs file. ! This file can be found in the same directory that contains cc1 (run gcc -print-prog-name=cc1 to find it). You may add linker flags such as ! -R or -rpath, depending on platform and linker, to the *link or *lib specs. ! Another alternative is to install a wrapper script around gcc, g++ or ! ld that adds the appropriate directory to the environment variable LD_RUN_PATH or equivalent (again, it's platform-dependent). Yet another option, that works on a few platforms, is to hard-code the ! full pathname of the library into its soname. This can only be ! accomplished by modifying the appropriate .ml file within libstdc++/config (and also libg++/config, if you are building libg++), ! so that $(libdir)/ appears just before the library name in -soname or -h options. _________________________________________________________________ GCC can not find GNU as/GNU ld ! GCC searches the PATH for an assembler and a loader, but it only does so after searching a directory list hard-coded in the GCC executables. ! Since, on most platforms, the hard-coded list includes directories in ! which the system assembler and loader can be found, you may have to ! take one of the following actions to arrange that GCC uses the GNU versions of those programs. To ensure that GCC finds the GNU assembler (the GNU loader), which are ! required by [38]some configurations, you should configure these with the same --prefix option as you used for GCC. Then build & install GNU as (GNU ld) and proceed with building GCC. ! Another alternative is to create links to GNU as and ld in any of the ! directories printed by the command `gcc -print-search-dirs | grep ! '^programs:''. The link to `ld' should be named `real-ld' if `ld' already exists. If such links do not exist while you're compiling GCC, ! you may have to create them in the build directories too, within the gcc directory and in all the gcc/stage* subdirectories. ! GCC 2.95 allows you to specify the full pathname of the assembler and the linker to use. The configure flags are `--with-as=/path/to/as' and ! `--with-ld=/path/to/ld'. GCC will try to use these pathnames before ! looking for `as' or `(real-)ld' in the standard search dirs. If, at ! configure-time, the specified programs are found to be GNU utilities, `--with-gnu-as' and `--with-gnu-ld' need not be used; these flags will ! be auto-detected. One drawback of this option is that it won't allow ! you to override the search path for assembler and linker with command-line options -B/path/ if the specified filenames exist. _________________________________________________________________ cpp: Usage:... Error ! If you get an error like this when building GCC (particularly when ! building __mulsi3), then you likely have a problem with your environment variables. cpp: Usage: /usr/lib/gcc-lib/i586-unknown-linux-gnulibc1/2.7.2.3/cpp [switches] input output ! First look for an explicit '.' in either LIBRARY_PATH or ! GCC_EXEC_PREFIX from your environment. If you do not find an explicit ! '.', look for an empty pathname in those variables. Note that ':' at either the start or end of these variables is an implicit '.' and will cause problems. --- 206,293 ---- Dynamic linker is unable to find GCC libraries This problem manifests itself by programs not finding shared libraries ! they depend on when the programs are started. Note this problem often ! manifests itself with failures in the libio/libstdc++ tests after configuring with --enable-shared and building GCC. ! GCC does not specify a runpath so that the dynamic linker can find dynamic libraries at runtime. ! The short explanation is that if you always pass a -R option to the ! linker, then your programs become dependent on directories which may be NFS mounted, and programs may hang unnecessarily when an NFS server goes down. ! The problem is not programs that do require the directories; those ! programs are going to hang no matter what you do. The problem is programs that do not require the directories. ! SunOS effectively always passed a -R option for every -L option; this ! was a bad idea, and so it was removed for Solaris. We should not recreate it. ! However, if you feel you really need such an option to be passed ! automatically to the linker, you may add it to the GCC specs file. ! This file can be found in the same directory that contains cc1 (run gcc -print-prog-name=cc1 to find it). You may add linker flags such as ! -R or -rpath, depending on platform and linker, to the *link or *lib specs. ! Another alternative is to install a wrapper script around gcc, g++ or ! ld that adds the appropriate directory to the environment variable LD_RUN_PATH or equivalent (again, it's platform-dependent). Yet another option, that works on a few platforms, is to hard-code the ! full pathname of the library into its soname. This can only be ! accomplished by modifying the appropriate .ml file within libstdc++/config (and also libg++/config, if you are building libg++), ! so that $(libdir)/ appears just before the library name in -soname or -h options. _________________________________________________________________ GCC can not find GNU as/GNU ld ! GCC searches the PATH for an assembler and a loader, but it only does so after searching a directory list hard-coded in the GCC executables. ! Since, on most platforms, the hard-coded list includes directories in ! which the system assembler and loader can be found, you may have to ! take one of the following actions to arrange that GCC uses the GNU versions of those programs. To ensure that GCC finds the GNU assembler (the GNU loader), which are ! required by [38]some configurations, you should configure these with the same --prefix option as you used for GCC. Then build & install GNU as (GNU ld) and proceed with building GCC. ! Another alternative is to create links to GNU as and ld in any of the ! directories printed by the command `gcc -print-search-dirs | grep ! '^programs:''. The link to `ld' should be named `real-ld' if `ld' already exists. If such links do not exist while you're compiling GCC, ! you may have to create them in the build directories too, within the gcc directory and in all the gcc/stage* subdirectories. ! GCC 2.95 allows you to specify the full pathname of the assembler and the linker to use. The configure flags are `--with-as=/path/to/as' and ! `--with-ld=/path/to/ld'. GCC will try to use these pathnames before ! looking for `as' or `(real-)ld' in the standard search dirs. If, at ! configure-time, the specified programs are found to be GNU utilities, `--with-gnu-as' and `--with-gnu-ld' need not be used; these flags will ! be auto-detected. One drawback of this option is that it won't allow ! you to override the search path for assembler and linker with command-line options -B/path/ if the specified filenames exist. _________________________________________________________________ cpp: Usage:... Error ! If you get an error like this when building GCC (particularly when ! building __mulsi3), then you likely have a problem with your environment variables. cpp: Usage: /usr/lib/gcc-lib/i586-unknown-linux-gnulibc1/2.7.2.3/cpp [switches] input output ! First look for an explicit '.' in either LIBRARY_PATH or ! GCC_EXEC_PREFIX from your environment. If you do not find an explicit ! '.', look for an empty pathname in those variables. Note that ':' at either the start or end of these variables is an implicit '.' and will cause problems. *************** cpp: Usage:... Error *** 296,323 **** Optimizing the compiler itself ! If you want to test a particular optimization option, it's useful to ! try bootstrapping the compiler with that option turned on. For example, to test the -fssa option, you could bootstrap like this: make BOOT_CFLAGS="-O2 -fssa" bootstrap _________________________________________________________________ Why does libiconv get linked into jc1 on Solaris? ! The Java front end requires iconv. If the compiler used to bootstrap ! GCC finds libiconv (because the GNU version of libiconv has been installed in the same prefix as the bootstrap compiler), but the newly built GCC does not find the library (because it will be installed with ! a different prefix), then a link-time error will occur when building ! jc1. This problem does not show up so often on platforms that have ! libiconv in a default location (like /usr/lib) because then both ! compilers can find a library named libiconv, even though it is a different library. ! Using --disable-nls at configure-time does not prevent this problem ! because jc1 uses iconv even in that case. Solutions include ! temporarily removing the GNU libiconv, copying it to a default ! location such as /usr/lib/, and using --enable-languages at configure-time to disable Java. _________________________________________________________________ --- 296,323 ---- Optimizing the compiler itself ! If you want to test a particular optimization option, it's useful to ! try bootstrapping the compiler with that option turned on. For example, to test the -fssa option, you could bootstrap like this: make BOOT_CFLAGS="-O2 -fssa" bootstrap _________________________________________________________________ Why does libiconv get linked into jc1 on Solaris? ! The Java front end requires iconv. If the compiler used to bootstrap ! GCC finds libiconv (because the GNU version of libiconv has been installed in the same prefix as the bootstrap compiler), but the newly built GCC does not find the library (because it will be installed with ! a different prefix), then a link-time error will occur when building ! jc1. This problem does not show up so often on platforms that have ! libiconv in a default location (like /usr/lib) because then both ! compilers can find a library named libiconv, even though it is a different library. ! Using --disable-nls at configure-time does not prevent this problem ! because jc1 uses iconv even in that case. Solutions include ! temporarily removing the GNU libiconv, copying it to a default ! location such as /usr/lib/, and using --enable-languages at configure-time to disable Java. _________________________________________________________________ *************** Why does libiconv get linked into jc1 on *** 325,335 **** How do I pass flags like -fnew-abi to the testsuite? ! If you invoke runtest directly, you can use the --tool_opts option, e.g: runtest --tool_opts "-fnew-abi -fno-honor-std" ! Or, if you use make check you can use the make variable RUNTESTFLAGS, e.g: make RUNTESTFLAGS="--tool_opts '-fnew-abi -fno-honor-std'" check-g++ _________________________________________________________________ --- 325,335 ---- How do I pass flags like -fnew-abi to the testsuite? ! If you invoke runtest directly, you can use the --tool_opts option, e.g: runtest --tool_opts "-fnew-abi -fno-honor-std" ! Or, if you use make check you can use the make variable RUNTESTFLAGS, e.g: make RUNTESTFLAGS="--tool_opts '-fnew-abi -fno-honor-std'" check-g++ _________________________________________________________________ *************** How can I run the test suite with multip *** 340,350 **** e.g: runtest --target_board "unix{-fPIC,-fpic,}" ! Or, if you use make check you can use the make variable RUNTESTFLAGS, e.g: make RUNTESTFLAGS="--target_board 'unix{-fPIC,-fpic,}'" check-gcc ! Either of these examples will run the tests three times. Once with -fPIC, once with -fpic, and once with no additional flags. This technique is particularly useful on multilibbed targets. --- 340,350 ---- e.g: runtest --target_board "unix{-fPIC,-fpic,}" ! Or, if you use make check you can use the make variable RUNTESTFLAGS, e.g: make RUNTESTFLAGS="--target_board 'unix{-fPIC,-fpic,}'" check-gcc ! Either of these examples will run the tests three times. Once with -fPIC, once with -fpic, and once with no additional flags. This technique is particularly useful on multilibbed targets. *************** Is there a stringstream / sstream for GC *** 363,386 **** Friend Templates In order to make a specialization of a template function a friend of a ! (possibly template) class, you must explicitly state that the friend ! function is a template, by appending angle brackets to its name, and ! this template function must have been declared already. Here's an example: template class foo { friend void bar(foo); } ! The above declaration declares a non-template function named bar, so ! it must be explicitly defined for each specialization of foo. A ! template definition of bar won't do, because it is unrelated with the non-template declaration above. So you'd have to end up writing: void bar(foo) { /* ... */ } void bar(foo) { /* ... */ } ! If you meant bar to be a template function, you should have forward-declared it as follows. Note that, since the template function ! declaration refers to the template class, the template class must be forward-declared too: template class foo; --- 363,386 ---- Friend Templates In order to make a specialization of a template function a friend of a ! (possibly template) class, you must explicitly state that the friend ! function is a template, by appending angle brackets to its name, and ! this template function must have been declared already. Here's an example: template class foo { friend void bar(foo); } ! The above declaration declares a non-template function named bar, so ! it must be explicitly defined for each specialization of foo. A ! template definition of bar won't do, because it is unrelated with the non-template declaration above. So you'd have to end up writing: void bar(foo) { /* ... */ } void bar(foo) { /* ... */ } ! If you meant bar to be a template function, you should have forward-declared it as follows. Note that, since the template function ! declaration refers to the template class, the template class must be forward-declared too: template class foo; *************** class foo { *** 396,411 **** template void bar(foo) { /* ... */ } ! In this case, the template argument list could be left empty, because ! it can be implicitly deduced from the function arguments, but the ! angle brackets must be present, otherwise the declaration will be ! taken as a non-template function. Furthermore, in some cases, you may ! have to explicitly specify the template arguments, to remove ambiguity. An error in the last public comment draft of the ANSI/ISO C++ Standard ! and the fact that previous releases of GCC would accept such friend ! declarations as template declarations has led people to believe that the forward declaration was not necessary, but, according to the final version of the Standard, it is. _________________________________________________________________ --- 396,411 ---- template void bar(foo) { /* ... */ } ! In this case, the template argument list could be left empty, because ! it can be implicitly deduced from the function arguments, but the ! angle brackets must be present, otherwise the declaration will be ! taken as a non-template function. Furthermore, in some cases, you may ! have to explicitly specify the template arguments, to remove ambiguity. An error in the last public comment draft of the ANSI/ISO C++ Standard ! and the fact that previous releases of GCC would accept such friend ! declarations as template declarations has led people to believe that the forward declaration was not necessary, but, according to the final version of the Standard, it is. _________________________________________________________________ *************** dynamic_cast, throw, typeid don't work w *** 414,490 **** The new C++ ABI in the GCC 3.0 series uses address comparisons, rather than string compares, to determine type equality. This leads to better ! performance. Like other objects that have to be present in the final ! executable, these std::typeinfo_t objects have what is called vague ! linkage because they are not tightly bound to any one particular ! translation unit (object file). The compiler has to emit them in any ! translation unit that requires their presence, and then rely on the ! linking and loading process to make sure that only one of them is ! active in the final executable. With static linking all of these ! symbols are resolved at link time, but with dynamic linking, further resolution occurs at load time. You have to ensure that objects within ! a shared library are resolved against objects in the executable and other shared libraries. ! * For a program which is linked against a shared library, no additional precautions need taking. ! * You cannot create a shared library with the "-Bsymbolic" option, as that prevents the resolution described above. ! * If you use dlopen to explicitly load code from a shared library, ! you must do several things. First, export global symbols from the ! executable by linking it with the "-E" flag (you will have to ! specify this as "-Wl,-E" if you are invoking the linker in the ! usual manner from the compiler driver, g++). You must also make ! the external symbols in the loaded library available for ! subsequent libraries by providing the RTLD_GLOBAL flag to dlopen. The symbol resolution can be immediate or lazy. ! Template instantiations are another, user visible, case of objects with vague linkage, which needs similar resolution. If you do not take ! the above precautions, you may discover that a template instantiation ! with the same argument list, but instantiated in multiple translation ! units, has several addresses, depending in which translation unit the ! address is taken. (This is not an exhaustive list of the kind of ! objects which have vague linkage and are expected to be resolved during linking & loading.) ! If you are worried about different objects with the same name ! colliding during the linking or loading process, then you should use ! namespaces to disambiguate them. Giving distinct objects with global ! linkage the same name is a violation of the One Definition Rule (ODR) [basic.def.odr]. For more details about the way that GCC implements these and other C++ ! features, please read the [40]ABI specification. Note the ! std::typeinfo_t objects which must be resolved all begin with "_ZTS". ! Refer to ld's documentation for a description of the "-E" & "-Bsymbolic" flags. _________________________________________________________________ Why do I need autoconf, bison, xgettext, automake, etc? ! If you're using diffs up dated from one snapshot to the next, or if ! you're using the CVS repository, you may need several additional programs to build GCC. ! These include, but are not necessarily limited to autoconf, automake, bison, and xgettext. ! This is necessary because neither diff nor cvs keep timestamps ! correct. This causes problems for generated files as "make" may think those generated files are out of date and try to regenerate them. ! An easy way to work around this problem is to use the gcc_update ! script in the contrib subdirectory of GCC, which handles this ! transparently without requiring installation of any additional tools. (Note: Up to and including GCC 2.95 this script was called egcs_update .) ! When building from diffs or CVS or if you modified some sources, you may also need to obtain development versions of some GNU tools, as the ! production versions do not necessarily handle all features needed to rebuild GCC. ! In general, the current versions of these tools from [41]ftp://ftp.gnu.org/gnu/ will work. At present, Autoconf 2.50 is not supported, and you will need to use Autoconf 2.13; work is in progress to fix this problem. Also look at --- 414,490 ---- The new C++ ABI in the GCC 3.0 series uses address comparisons, rather than string compares, to determine type equality. This leads to better ! performance. Like other objects that have to be present in the final ! executable, these std::typeinfo_t objects have what is called vague ! linkage because they are not tightly bound to any one particular ! translation unit (object file). The compiler has to emit them in any ! translation unit that requires their presence, and then rely on the ! linking and loading process to make sure that only one of them is ! active in the final executable. With static linking all of these ! symbols are resolved at link time, but with dynamic linking, further resolution occurs at load time. You have to ensure that objects within ! a shared library are resolved against objects in the executable and other shared libraries. ! * For a program which is linked against a shared library, no additional precautions need taking. ! * You cannot create a shared library with the "-Bsymbolic" option, as that prevents the resolution described above. ! * If you use dlopen to explicitly load code from a shared library, ! you must do several things. First, export global symbols from the ! executable by linking it with the "-E" flag (you will have to ! specify this as "-Wl,-E" if you are invoking the linker in the ! usual manner from the compiler driver, g++). You must also make ! the external symbols in the loaded library available for ! subsequent libraries by providing the RTLD_GLOBAL flag to dlopen. The symbol resolution can be immediate or lazy. ! Template instantiations are another, user visible, case of objects with vague linkage, which needs similar resolution. If you do not take ! the above precautions, you may discover that a template instantiation ! with the same argument list, but instantiated in multiple translation ! units, has several addresses, depending in which translation unit the ! address is taken. (This is not an exhaustive list of the kind of ! objects which have vague linkage and are expected to be resolved during linking & loading.) ! If you are worried about different objects with the same name ! colliding during the linking or loading process, then you should use ! namespaces to disambiguate them. Giving distinct objects with global ! linkage the same name is a violation of the One Definition Rule (ODR) [basic.def.odr]. For more details about the way that GCC implements these and other C++ ! features, please read the [40]ABI specification. Note the ! std::typeinfo_t objects which must be resolved all begin with "_ZTS". ! Refer to ld's documentation for a description of the "-E" & "-Bsymbolic" flags. _________________________________________________________________ Why do I need autoconf, bison, xgettext, automake, etc? ! If you're using diffs up dated from one snapshot to the next, or if ! you're using the CVS repository, you may need several additional programs to build GCC. ! These include, but are not necessarily limited to autoconf, automake, bison, and xgettext. ! This is necessary because neither diff nor cvs keep timestamps ! correct. This causes problems for generated files as "make" may think those generated files are out of date and try to regenerate them. ! An easy way to work around this problem is to use the gcc_update ! script in the contrib subdirectory of GCC, which handles this ! transparently without requiring installation of any additional tools. (Note: Up to and including GCC 2.95 this script was called egcs_update .) ! When building from diffs or CVS or if you modified some sources, you may also need to obtain development versions of some GNU tools, as the ! production versions do not necessarily handle all features needed to rebuild GCC. ! In general, the current versions of these tools from [41]ftp://ftp.gnu.org/gnu/ will work. At present, Autoconf 2.50 is not supported, and you will need to use Autoconf 2.13; work is in progress to fix this problem. Also look at *************** Why do I need autoconf, bison, xgettext, *** 494,513 **** Why can't I build a shared library? ! When building a shared library you may get an error message from the linker like `assert pure-text failed:' or `DP relative code in file'. ! This kind of error occurs when you've failed to provide proper flags to gcc when linking the shared library. You can get this error even if all the .o files for the shared library ! were compiled with the proper PIC option. When building a shared ! library, gcc will compile additional code to be included in the ! library. That additional code must also be compiled with the proper PIC option. ! Adding the proper PIC option (-fpic or -fPIC) to the link line which ! creates the shared library will fix this problem on targets that support PIC in this manner. For example: gcc -c -fPIC myfile.c gcc -shared -o libmyfile.so -fPIC myfile.o --- 494,513 ---- Why can't I build a shared library? ! When building a shared library you may get an error message from the linker like `assert pure-text failed:' or `DP relative code in file'. ! This kind of error occurs when you've failed to provide proper flags to gcc when linking the shared library. You can get this error even if all the .o files for the shared library ! were compiled with the proper PIC option. When building a shared ! library, gcc will compile additional code to be included in the ! library. That additional code must also be compiled with the proper PIC option. ! Adding the proper PIC option (-fpic or -fPIC) to the link line which ! creates the shared library will fix this problem on targets that support PIC in this manner. For example: gcc -c -fPIC myfile.c gcc -shared -o libmyfile.so -fPIC myfile.o *************** Why can't I build a shared library? *** 516,545 **** When building C++, the linker says my constructors, destructors or virtual tables are undefined, but I defined them ! The ISO C++ Standard specifies that all virtual methods of a class ! that are not pure-virtual must be defined, but does not require any ! diagnostic for violations of this rule [class.virtual]/8. Based on ! this assumption, GCC will only emit the implicitly defined ! constructors, the assignment operator, the destructor and the virtual ! table of a class in the translation unit that defines its first such non-inline method. ! Therefore, if you fail to define this particular method, the linker ! may complain about the lack of definitions for apparently unrelated ! symbols. Unfortunately, in order to improve this error message, it ! might be necessary to change the linker, and this can't always be done. ! The solution is to ensure that all virtual methods that are not pure ! are defined. Note that a destructor must be defined even if it is declared pure-virtual [class.dtor]/7. _________________________________________________________________ Will GCC someday include an incremental linker? ! Incremental linking is part of the linker, not the compiler. As such, GCC doesn't have anything to do with incremental linking. Depending on ! what platform you use, it may be possible to tell GCC to use the platform's native linker (e.g., Solaris' ild(1)). References --- 516,545 ---- When building C++, the linker says my constructors, destructors or virtual tables are undefined, but I defined them ! The ISO C++ Standard specifies that all virtual methods of a class ! that are not pure-virtual must be defined, but does not require any ! diagnostic for violations of this rule [class.virtual]/8. Based on ! this assumption, GCC will only emit the implicitly defined ! constructors, the assignment operator, the destructor and the virtual ! table of a class in the translation unit that defines its first such non-inline method. ! Therefore, if you fail to define this particular method, the linker ! may complain about the lack of definitions for apparently unrelated ! symbols. Unfortunately, in order to improve this error message, it ! might be necessary to change the linker, and this can't always be done. ! The solution is to ensure that all virtual methods that are not pure ! are defined. Note that a destructor must be defined even if it is declared pure-virtual [class.dtor]/7. _________________________________________________________________ Will GCC someday include an incremental linker? ! Incremental linking is part of the linker, not the compiler. As such, GCC doesn't have anything to do with incremental linking. Depending on ! what platform you use, it may be possible to tell GCC to use the platform's native linker (e.g., Solaris' ild(1)). References diff -Nrc3pad gcc-3.3.2/INSTALL/binaries.html gcc-3.3.3/INSTALL/binaries.html *** gcc-3.3.2/INSTALL/binaries.html Thu Oct 16 20:10:56 2003 --- gcc-3.3.3/INSTALL/binaries.html Sat Feb 14 20:34:32 2004 *************** *** 1,78 **** ! Installing GCC: Binaries ! ! ! !

Installing GCC: Binaries

We are often asked about pre-compiled versions of GCC. While we cannot provide these for all platforms, below you'll find links to binaries for various platforms where creating them by yourself is not easy due to various reasons. !

Please note that we did not create these binaries, nor do we support them. If you have any problems installing them, please contact their makers. !

!

In addition to those specific offerings, you can get a binary distribution CD-ROM from the Free Software Foundation. It contains binaries for a number of platforms, and *************** not contain the latest version of GCC, b *** 90,98 **** bootstrapping the compiler. An updated version of that disk is in the works. !


Return to the GCC Installation page ! --- 98,106 ---- bootstrapping the compiler. An updated version of that disk is in the works. !


Return to the GCC Installation page ! diff -Nrc3pad gcc-3.3.2/INSTALL/build.html gcc-3.3.3/INSTALL/build.html *** gcc-3.3.2/INSTALL/build.html Thu Oct 16 20:10:56 2003 --- gcc-3.3.3/INSTALL/build.html Sat Feb 14 20:34:32 2004 *************** *** 1,122 **** ! Installing GCC: Building ! ! ! !

Installing GCC: Building

Now that GCC is configured, you are ready to build the compiler and runtime libraries. !

We highly recommend that GCC be built using GNU make; other versions may work, then again they might not. GNU make is required for compiling GNAT (the Ada compiler) and the Java runtime library. !

(For example, many broken versions of make will fail if you use the recommended setup where objdir is different from srcdir. Other broken versions may recompile parts of the compiler when installing the compiler.) !

Some commands executed when making the compiler may fail (return a nonzero status) and be ignored by make. These failures, which are often due to files that were not found, are expected, and can safely be ignored. !

It is normal to have compiler warnings when compiling certain files. Unless you are a GCC developer, you can generally ignore these warnings unless they cause compilation to fail. !

On certain old systems, defining certain environment variables such as CC can interfere with the functioning of make. !

If you encounter seemingly strange errors when trying to build the compiler in a directory other than the source directory, it could be because you have previously configured the compiler in the source directory. Make sure you have done all the necessary preparations. !

If you build GCC on a BSD system using a directory stored in an old System V file system, problems may occur in running fixincludes if the System V file system doesn't support symbolic links. These problems result in a failure to fix the declaration of size_t in sys/types.h. If you find that size_t is a signed type and that type mismatches occur, this could be the cause. !

The solution is not to use such a directory for building GCC. !

When building from CVS or snapshots, or if you modify parser sources, you need the Bison parser generator installed. Any version 1.25 or later should work; older versions may also work. If you do not modify parser sources, releases contain the Bison-generated files and you do not need Bison installed to build them. !

When building from CVS or snapshots, or if you modify Texinfo documentation, you need version 4.2 or later of Texinfo installed if you want Info documentation to be regenerated. Releases contain Info documentation pre-built for the unmodified documentation in the release. !

Building a native compiler

For a native build issue the command make bootstrap. This will build the entire GCC system, which includes the following steps: !

  • Build host tools necessary to build the compiler such as texinfo, bison, gperf. !
  • Build target tools for use by the compiler such as binutils (bfd, binutils, gas, gprof, ld, and opcodes) if they have been individually linked or moved into the top level GCC source tree before configuring. !
  • Perform a 3-stage bootstrap of the compiler. !
  • Perform a comparison test of the stage2 and stage3 compilers. !
  • Build runtime libraries using the stage3 compiler from the previous step. !
!

If you are short on disk space you might consider make bootstrap-lean instead. This is identical to make bootstrap except that object files from the stage1 and stage2 of the 3-stage bootstrap of the compiler are deleted as soon as they are no longer needed. !

If you want to save additional space during the bootstrap and in the final installation as well, you can build the compiler binaries without debugging information as in the following example. This will save roughly 40% of disk space both for the bootstrap and the final installation. (Libraries will still contain debugging information.) !

     make CFLAGS='-O' LIBCFLAGS='-g -O2' \
!        LIBCXXFLAGS='-g -O2 -fno-implicit-templates' bootstrap
! 
!

If you wish to use non-default GCC flags when compiling the stage2 and stage3 compilers, set BOOT_CFLAGS on the command line when doing make bootstrap. Non-default optimization flags are less well tested here than the default of -g -O2, but should still work. --- 1,130 ---- ! Installing GCC: Building ! ! + + !

Installing GCC: Building

Now that GCC is configured, you are ready to build the compiler and runtime libraries. !

We highly recommend that GCC be built using GNU make; other versions may work, then again they might not. GNU make is required for compiling GNAT (the Ada compiler) and the Java runtime library. !

(For example, many broken versions of make will fail if you use the recommended setup where objdir is different from srcdir. Other broken versions may recompile parts of the compiler when installing the compiler.) !

Some commands executed when making the compiler may fail (return a nonzero status) and be ignored by make. These failures, which are often due to files that were not found, are expected, and can safely be ignored. !

It is normal to have compiler warnings when compiling certain files. Unless you are a GCC developer, you can generally ignore these warnings unless they cause compilation to fail. !

On certain old systems, defining certain environment variables such as CC can interfere with the functioning of make. !

If you encounter seemingly strange errors when trying to build the compiler in a directory other than the source directory, it could be because you have previously configured the compiler in the source directory. Make sure you have done all the necessary preparations. !

If you build GCC on a BSD system using a directory stored in an old System V file system, problems may occur in running fixincludes if the System V file system doesn't support symbolic links. These problems result in a failure to fix the declaration of size_t in sys/types.h. If you find that size_t is a signed type and that type mismatches occur, this could be the cause. !

The solution is not to use such a directory for building GCC. !

When building from CVS or snapshots, or if you modify parser sources, you need the Bison parser generator installed. Any version 1.25 or later should work; older versions may also work. If you do not modify parser sources, releases contain the Bison-generated files and you do not need Bison installed to build them. !

When building from CVS or snapshots, or if you modify Texinfo documentation, you need version 4.2 or later of Texinfo installed if you want Info documentation to be regenerated. Releases contain Info documentation pre-built for the unmodified documentation in the release. !

Building a native compiler

For a native build issue the command make bootstrap. This will build the entire GCC system, which includes the following steps: !

  • Build host tools necessary to build the compiler such as texinfo, bison, gperf. !
  • Build target tools for use by the compiler such as binutils (bfd, binutils, gas, gprof, ld, and opcodes) if they have been individually linked or moved into the top level GCC source tree before configuring. !
  • Perform a 3-stage bootstrap of the compiler. !
  • Perform a comparison test of the stage2 and stage3 compilers. !
  • Build runtime libraries using the stage3 compiler from the previous step. !
!

If you are short on disk space you might consider make bootstrap-lean instead. This is identical to make bootstrap except that object files from the stage1 and stage2 of the 3-stage bootstrap of the compiler are deleted as soon as they are no longer needed. !

If you want to save additional space during the bootstrap and in the final installation as well, you can build the compiler binaries without debugging information as in the following example. This will save roughly 40% of disk space both for the bootstrap and the final installation. (Libraries will still contain debugging information.) !

          make CFLAGS='-O' LIBCFLAGS='-g -O2' \
!             LIBCXXFLAGS='-g -O2 -fno-implicit-templates' bootstrap
!      
!

If you wish to use non-default GCC flags when compiling the stage2 and stage3 compilers, set BOOT_CFLAGS on the command line when doing make bootstrap. Non-default optimization flags are less well tested here than the default of -g -O2, but should still work. *************** around this, by choosing BOOT_CFLA *** 127,182 **** stage1 compiler that were miscompiled, or by using make bootstrap4 to increase the number of stages of bootstrap. !

If you used the flag --enable-languages=... to restrict the compilers to be built, only those you've actually enabled will be built. This will of course only build those runtime libraries, for which the particular compiler has been built. Please note, that re-defining LANGUAGES when calling make bootstrap does not work anymore! !

If the comparison of stage2 and stage3 fails, this normally indicates that the stage2 compiler has compiled GCC incorrectly, and is therefore a potentially serious bug which you should investigate and report. (On a few systems, meaningful comparison of object files is impossible; they always appear "different". If you encounter this problem, you will need to disable comparison in the Makefile.) !

Building a cross compiler

We recommend reading the crossgcc FAQ for information about building cross compilers. !

When building a cross compiler, it is not generally possible to do a 3-stage bootstrap of the compiler. This makes for an interesting problem as parts of GCC can only be built with GCC. !

To build a cross compiler, we first recommend building and installing a native compiler. You can then use the native GCC compiler to build the cross compiler. The installed native compiler needs to be GCC version 2.95 or later. !

Assuming you have already installed a native copy of GCC and configured your cross compiler, issue the command make, which performs the following steps: !

  • Build host tools necessary to build the compiler such as texinfo, bison, gperf. !
  • Build target tools for use by the compiler such as binutils (bfd, binutils, gas, gprof, ld, and opcodes) if they have been individually linked or moved into the top level GCC source tree before configuring. !
  • Build the compiler (single stage only). !
  • Build runtime libraries using the compiler from the previous step.
!

Note that if an error occurs in any step the make process will exit. !

Building in parallel

You can use make bootstrap MAKE="make -j 2" -j 2, or just make -j 2 bootstrap for GNU Make 3.79 and above, instead of --- 135,190 ---- stage1 compiler that were miscompiled, or by using make bootstrap4 to increase the number of stages of bootstrap. !

If you used the flag --enable-languages=... to restrict the compilers to be built, only those you've actually enabled will be built. This will of course only build those runtime libraries, for which the particular compiler has been built. Please note, that re-defining LANGUAGES when calling make bootstrap does not work anymore! !

If the comparison of stage2 and stage3 fails, this normally indicates that the stage2 compiler has compiled GCC incorrectly, and is therefore a potentially serious bug which you should investigate and report. (On a few systems, meaningful comparison of object files is impossible; they always appear "different". If you encounter this problem, you will need to disable comparison in the Makefile.) !

Building a cross compiler

We recommend reading the crossgcc FAQ for information about building cross compilers. !

When building a cross compiler, it is not generally possible to do a 3-stage bootstrap of the compiler. This makes for an interesting problem as parts of GCC can only be built with GCC. !

To build a cross compiler, we first recommend building and installing a native compiler. You can then use the native GCC compiler to build the cross compiler. The installed native compiler needs to be GCC version 2.95 or later. !

Assuming you have already installed a native copy of GCC and configured your cross compiler, issue the command make, which performs the following steps: !

  • Build host tools necessary to build the compiler such as texinfo, bison, gperf. !
  • Build target tools for use by the compiler such as binutils (bfd, binutils, gas, gprof, ld, and opcodes) if they have been individually linked or moved into the top level GCC source tree before configuring. !
  • Build the compiler (single stage only). !
  • Build runtime libraries using the compiler from the previous step.
!

Note that if an error occurs in any step the make process will exit. !

Building in parallel

You can use make bootstrap MAKE="make -j 2" -j 2, or just make -j 2 bootstrap for GNU Make 3.79 and above, instead of *************** greater than the number of processors in *** 186,199 **** fewer and shorter I/O latency hits, thus improving overall throughput; this is especially true for slow drives and network filesystems. !

Building the Ada compiler

In order to build GNAT, the Ada compiler, you need a working GNAT compiler (GNAT version 3.13 or later, or GCC version 3.1 or later), since the Ada front end is written in Ada (with some GNAT-specific extensions), and GNU make. !

However, you do not need a full installation of GNAT, just the GNAT binary gnat1, a copy of gnatbind, and a compiler driver which can deal with Ada input (by invoking the gnat1 binary). You can specify this compiler driver by setting the ADAC --- 194,207 ---- fewer and shorter I/O latency hits, thus improving overall throughput; this is especially true for slow drives and network filesystems. !

Building the Ada compiler

In order to build GNAT, the Ada compiler, you need a working GNAT compiler (GNAT version 3.13 or later, or GCC version 3.1 or later), since the Ada front end is written in Ada (with some GNAT-specific extensions), and GNU make. !

However, you do not need a full installation of GNAT, just the GNAT binary gnat1, a copy of gnatbind, and a compiler driver which can deal with Ada input (by invoking the gnat1 binary). You can specify this compiler driver by setting the ADAC *************** and has a sufficiently recent version; i *** 206,247 **** installed, the build will fail unless --enable-languages is used to disable building the Ada front end. !

Additional build tools (such as gnatmake) or a working GNAT run-time library installation are usually not required. However, if you want to bootstrap the compiler using a minimal version of GNAT, you have to issue the following commands before invoking make bootstrap (this assumes that you start with an unmodified and consistent source distribution): !

    cd srcdir/gcc/ada
!     touch treeprs.ads [es]info.h nmake.ad[bs]
! 
!

At the moment, the GNAT library and several tools for GNAT are not built by make bootstrap. You have to invoke ! make gnatlib_and_tools in the objdir/gcc subdirectory before proceeding with the next steps. !

For example, you can build a native Ada compiler by issuing the following commands (assuming make is GNU make): !

    cd objdir
!     srcdir/configure --enable-languages=c,ada
!     cd srcdir/gcc/ada
!     touch treeprs.ads [es]info.h nmake.ad[bs]
!     cd objdir
!     make bootstrap
!     cd gcc
!     make gnatlib_and_tools
!     cd ..
! 
!

Currently, when compiling the Ada front end, you cannot use the parallel build feature described in the previous section. !


Return to the GCC Installation page ! --- 214,255 ---- installed, the build will fail unless --enable-languages is used to disable building the Ada front end. !

Additional build tools (such as gnatmake) or a working GNAT run-time library installation are usually not required. However, if you want to bootstrap the compiler using a minimal version of GNAT, you have to issue the following commands before invoking make bootstrap (this assumes that you start with an unmodified and consistent source distribution): !

         cd srcdir/gcc/ada
!          touch treeprs.ads [es]info.h nmake.ad[bs]
!      
!

At the moment, the GNAT library and several tools for GNAT are not built by make bootstrap. You have to invoke ! make gnatlib_and_tools in the objdir/gcc subdirectory before proceeding with the next steps. !

For example, you can build a native Ada compiler by issuing the following commands (assuming make is GNU make): !

         cd objdir
!          srcdir/configure --enable-languages=c,ada
!          cd srcdir/gcc/ada
!          touch treeprs.ads [es]info.h nmake.ad[bs]
!          cd objdir
!          make bootstrap
!          cd gcc
!          make gnatlib_and_tools
!          cd ..
!      
!

Currently, when compiling the Ada front end, you cannot use the parallel build feature described in the previous section. !


Return to the GCC Installation page ! diff -Nrc3pad gcc-3.3.2/INSTALL/configure.html gcc-3.3.3/INSTALL/configure.html *** gcc-3.3.2/INSTALL/configure.html Thu Oct 16 20:10:56 2003 --- gcc-3.3.3/INSTALL/configure.html Sat Feb 14 20:34:32 2004 *************** *** 1,45 **** ! Installing GCC: Configuration ! ! ! !

Installing GCC: Configuration

Like most GNU software, GCC must be configured before it can be built. This document describes the recommended configuration procedure for both native and cross targets. !

We use srcdir to refer to the toplevel source directory for GCC; we use objdir to refer to the toplevel build/object directory. !

If you obtained the sources via CVS, srcdir must refer to the top gcc directory, the one where the MAINTAINERS can be found, and not its gcc subdirectory, otherwise the build will fail. !

If either srcdir or objdir is located on an automounted NFS file system, the shell's built-in pwd command will return temporary pathnames. Using these can lead to various sorts of build problems. To avoid this issue, set the PWDCMD environment --- 1,53 ---- ! Installing GCC: Configuration ! ! + + !

Installing GCC: Configuration

Like most GNU software, GCC must be configured before it can be built. This document describes the recommended configuration procedure for both native and cross targets. !

We use srcdir to refer to the toplevel source directory for GCC; we use objdir to refer to the toplevel build/object directory. !

If you obtained the sources via CVS, srcdir must refer to the top gcc directory, the one where the MAINTAINERS can be found, and not its gcc subdirectory, otherwise the build will fail. !

If either srcdir or objdir is located on an automounted NFS file system, the shell's built-in pwd command will return temporary pathnames. Using these can lead to various sorts of build problems. To avoid this issue, set the PWDCMD environment *************** variable to an automounter-aware p *** 47,60 **** pawd or amq -w, during the configuration and build phases. !

First, we highly recommend that GCC be built into a separate directory than the sources which does not reside within the source tree. This is how we generally build GCC; building where srcdir == objdir should still work, but doesn't get extensive testing; building where objdir is a subdirectory of srcdir is unsupported. !

If you have previously built GCC in the same directory for a different target machine, do make distclean to delete all files that might be invalid. One of the files this deletes is Makefile; if make distclean complains that Makefile does not exist --- 55,68 ---- pawd or amq -w, during the configuration and build phases. !

First, we highly recommend that GCC be built into a separate directory than the sources which does not reside within the source tree. This is how we generally build GCC; building where srcdir == objdir should still work, but doesn't get extensive testing; building where objdir is a subdirectory of srcdir is unsupported. !

If you have previously built GCC in the same directory for a different target machine, do make distclean to delete all files that might be invalid. One of the files this deletes is Makefile; if make distclean complains that Makefile does not exist *************** means that the directory is already suit *** 63,178 **** recommended method of building in a separate objdir, you should simply use a different objdir for each target. !

Second, when configuring a native system, either cc or gcc must be in your path or you must set CC in your environment before running configure. Otherwise the configuration scripts may fail. !

Note that the bootstrap compiler and the resulting GCC must be link compatible, else the bootstrap will fail with linker errors about incompatible object file formats. Several multilibed targets are affected by this requirement, see host/target specific installation notes. !

To configure GCC: !

   % mkdir objdir
!    % cd objdir
!    % srcdir/configure [options] [target]
! 
!

Target specification

!
  • GCC has code to correctly determine the correct value for target for nearly all native systems. Therefore, we highly recommend you not provide a configure target when configuring a native compiler. !
  • target must be specified as --target=target when configuring a cross compiler; examples of valid targets would be i960-rtems, m68k-coff, sh-elf, etc. !
  • Specifying just target instead of --target=target implies that the host defaults to target.
!

Options specification

Use options to override several configure time options for GCC. A list of supported options follows; configure --help may list other options, but those not listed below may not work and should not normally be used. !

!
--prefix=dirname !
Specify the toplevel installation directory. This is the recommended way to install the tools into a directory other than the default. The toplevel installation directory defaults to /usr/local. !

We highly recommend against dirname being the same or a subdirectory of objdir or vice versa. If specifying a directory beneath a user's home directory tree, some shells will not expand dirname correctly if it contains the ~ metacharacter; use $HOME instead. !

These additional options control where certain parts of the distribution are installed. Normally you should not need to use these options. !

!
--exec-prefix=dirname !
Specify the toplevel installation directory for architecture-dependent ! files. The default is prefix. !
--bindir=dirname !
Specify the installation directory for the executables called by users (such as gcc and g++). The default is ! exec-prefix/bin. !
--libdir=dirname !
Specify the installation directory for object code libraries and ! internal parts of GCC. The default is exec-prefix/lib. !
--with-slibdir=dirname !
Specify the installation directory for the shared libgcc library. The ! default is libdir. !
--infodir=dirname !
Specify the installation directory for documentation in info format. ! The default is prefix/info. !
--datadir=dirname !
Specify the installation directory for some architecture-independent ! data files referenced by GCC. The default is prefix/share. !
--mandir=dirname !
Specify the installation directory for manual pages. The default is ! prefix/man. (Note that the manual pages are only extracts from the full GCC manuals, which are provided in Texinfo format. The manpages are derived by an automatic conversion process from parts of the full manual.) !
--with-gxx-include-dir=dirname !
Specify the installation directory for G++ header files. The default is ! prefix/include/g++-v3. !
!
--program-prefix=prefix !
GCC supports some transformations of the names of its programs when installing them. This option prepends prefix to the names of programs to install in bindir (see above). For example, specifying --program-prefix=foo- would result in gcc being installed as /usr/local/bin/foo-gcc. !
--program-suffix=suffix !
Appends suffix to the names of programs to install in bindir (see above). For example, specifying --program-suffix=-3.1 would result in gcc being installed as /usr/local/bin/gcc-3.1. !
--program-transform-name=pattern !
Applies the sed script pattern to be applied to the names of programs to install in bindir (see above). pattern has to consist of one or more basic sed editing commands, separated by semicolons. For example, if you want the gcc program name to be --- 71,186 ---- recommended method of building in a separate objdir, you should simply use a different objdir for each target. !

Second, when configuring a native system, either cc or gcc must be in your path or you must set CC in your environment before running configure. Otherwise the configuration scripts may fail. !

Note that the bootstrap compiler and the resulting GCC must be link compatible, else the bootstrap will fail with linker errors about incompatible object file formats. Several multilibed targets are affected by this requirement, see host/target specific installation notes. !

To configure GCC: !

        % mkdir objdir
!         % cd objdir
!         % srcdir/configure [options] [target]
!      
!

Target specification

!
  • GCC has code to correctly determine the correct value for target for nearly all native systems. Therefore, we highly recommend you not provide a configure target when configuring a native compiler. !
  • target must be specified as --target=target when configuring a cross compiler; examples of valid targets would be i960-rtems, m68k-coff, sh-elf, etc. !
  • Specifying just target instead of --target=target implies that the host defaults to target.
!

Options specification

Use options to override several configure time options for GCC. A list of supported options follows; configure --help may list other options, but those not listed below may not work and should not normally be used. !

!
--prefix=dirname !
Specify the toplevel installation directory. This is the recommended way to install the tools into a directory other than the default. The toplevel installation directory defaults to /usr/local. !

We highly recommend against dirname being the same or a subdirectory of objdir or vice versa. If specifying a directory beneath a user's home directory tree, some shells will not expand dirname correctly if it contains the ~ metacharacter; use $HOME instead. !

These additional options control where certain parts of the distribution are installed. Normally you should not need to use these options. !

!
--exec-prefix=dirname !
Specify the toplevel installation directory for architecture-dependent ! files. The default is prefix. !
--bindir=dirname !
Specify the installation directory for the executables called by users (such as gcc and g++). The default is ! exec-prefix/bin. !
--libdir=dirname !
Specify the installation directory for object code libraries and ! internal parts of GCC. The default is exec-prefix/lib. !
--with-slibdir=dirname !
Specify the installation directory for the shared libgcc library. The ! default is libdir. !
--infodir=dirname !
Specify the installation directory for documentation in info format. ! The default is prefix/info. !
--datadir=dirname !
Specify the installation directory for some architecture-independent ! data files referenced by GCC. The default is prefix/share. !
--mandir=dirname !
Specify the installation directory for manual pages. The default is ! prefix/man. (Note that the manual pages are only extracts from the full GCC manuals, which are provided in Texinfo format. The manpages are derived by an automatic conversion process from parts of the full manual.) !
--with-gxx-include-dir=dirname !
Specify the installation directory for G++ header files. The default is ! prefix/include/g++-v3. !
!
--program-prefix=prefix !
GCC supports some transformations of the names of its programs when installing them. This option prepends prefix to the names of programs to install in bindir (see above). For example, specifying --program-prefix=foo- would result in gcc being installed as /usr/local/bin/foo-gcc. !
--program-suffix=suffix !
Appends suffix to the names of programs to install in bindir (see above). For example, specifying --program-suffix=-3.1 would result in gcc being installed as /usr/local/bin/gcc-3.1. !
--program-transform-name=pattern !
Applies the sed script pattern to be applied to the names of programs to install in bindir (see above). pattern has to consist of one or more basic sed editing commands, separated by semicolons. For example, if you want the gcc program name to be *************** you could use the pattern *** 183,198 **** --program-transform-name='s/^gcc$/myowngcc/; s/^g++$/gspecial++/' to achieve this effect. !

All three options can be combined and used together, resulting in more complex conversion patterns. As a basic rule, prefix (and suffix) are prepended (appended) before further transformations can happen with a special transformation script pattern. !

As currently implemented, this option only takes effect for native builds; cross compiler binaries' names are not transformed even when a transformation is explicitly asked for by one of these options. !

For native builds, some of the installed programs are also installed with the target alias in front of their name, as in i686-pc-linux-gnu-gcc. All of the above transformations happen before the target alias is prepended to the name - so, specifying --- 191,206 ---- --program-transform-name='s/^gcc$/myowngcc/; s/^g++$/gspecial++/' to achieve this effect. !

All three options can be combined and used together, resulting in more complex conversion patterns. As a basic rule, prefix (and suffix) are prepended (appended) before further transformations can happen with a special transformation script pattern. !

As currently implemented, this option only takes effect for native builds; cross compiler binaries' names are not transformed even when a transformation is explicitly asked for by one of these options. !

For native builds, some of the installed programs are also installed with the target alias in front of their name, as in i686-pc-linux-gnu-gcc. All of the above transformations happen before the target alias is prepended to the name - so, specifying *************** before the target alias is prepended to *** 200,232 **** resulting binary would be installed as /usr/local/bin/i686-pc-linux-gnu-foo-gcc-3.1. !

As a last shortcoming, none of the installed Ada programs are transformed yet, which will be fixed in some time. !

--with-local-prefix=dirname !
Specify the installation directory for local include files. The default is /usr/local. Specify this option if you want the compiler to ! search directory dirname/include for locally installed header files instead of /usr/local/include. !

You should specify --with-local-prefix only if your site has a different convention (not /usr/local) for where to put site-specific files. !

The default value for --with-local-prefix is /usr/local regardless of the value of --prefix. Specifying --prefix has no effect on which directory GCC searches for local header files. This may seem counterintuitive, but actually it is logical. !

The purpose of --prefix is to specify where to install GCC. The local header files in /usr/local/include--if you put any in that directory--are not part of GCC. They are part of other programs--perhaps many others. (GCC installs its own header files in another directory which is based on the --prefix value.) !

Both the local-prefix include directory and the GCC-prefix include directory are part of GCC's "system include" directories. Although these two directories are not fixed, they need to be searched in the proper order for the correct processing of the include_next directive. The --- 208,240 ---- resulting binary would be installed as /usr/local/bin/i686-pc-linux-gnu-foo-gcc-3.1. !

As a last shortcoming, none of the installed Ada programs are transformed yet, which will be fixed in some time. !

--with-local-prefix=dirname !
Specify the installation directory for local include files. The default is /usr/local. Specify this option if you want the compiler to ! search directory dirname/include for locally installed header files instead of /usr/local/include. !

You should specify --with-local-prefix only if your site has a different convention (not /usr/local) for where to put site-specific files. !

The default value for --with-local-prefix is /usr/local regardless of the value of --prefix. Specifying --prefix has no effect on which directory GCC searches for local header files. This may seem counterintuitive, but actually it is logical. !

The purpose of --prefix is to specify where to install GCC. The local header files in /usr/local/include--if you put any in that directory--are not part of GCC. They are part of other programs--perhaps many others. (GCC installs its own header files in another directory which is based on the --prefix value.) !

Both the local-prefix include directory and the GCC-prefix include directory are part of GCC's "system include" directories. Although these two directories are not fixed, they need to be searched in the proper order for the correct processing of the include_next directive. The *************** local-prefix include directory is search *** 234,240 **** include directory. Another characteristic of system include directories is that pedantic warnings are turned off for headers in these directories. !

Some autoconf macros add -I directory options to the compiler command line, to ensure that directories containing installed packages' headers are searched. When directory is one of GCC's system include directories, GCC will ignore the option so that system --- 242,248 ---- include directory. Another characteristic of system include directories is that pedantic warnings are turned off for headers in these directories. !

Some autoconf macros add -I directory options to the compiler command line, to ensure that directories containing installed packages' headers are searched. When directory is one of GCC's system include directories, GCC will ignore the option so that system *************** directories continue to be processed in *** 242,255 **** may result in a search order different from what was specified but the directory will still be searched. !

GCC automatically searches for ordinary libraries using GCC_EXEC_PREFIX. Thus, when the same installation prefix is used for both GCC and packages, GCC will automatically search for both headers and libraries. This provides a configuration that is easy to use. GCC behaves in a manner similar to that when it is installed as a system compiler in /usr. !

Sites that need to install multiple versions of GCC may not want to use the above simple configuration. It is possible to use the --program-prefix, --program-suffix and --program-transform-name options to install multiple versions --- 250,263 ---- may result in a search order different from what was specified but the directory will still be searched. !

GCC automatically searches for ordinary libraries using GCC_EXEC_PREFIX. Thus, when the same installation prefix is used for both GCC and packages, GCC will automatically search for both headers and libraries. This provides a configuration that is easy to use. GCC behaves in a manner similar to that when it is installed as a system compiler in /usr. !

Sites that need to install multiple versions of GCC may not want to use the above simple configuration. It is possible to use the --program-prefix, --program-suffix and --program-transform-name options to install multiple versions *************** site-specific files for each version. I *** 259,288 **** users to specify explicitly the location of local site libraries (e.g., with LIBRARY_PATH). !

The same value can be used for both --with-local-prefix and --prefix provided it is not /usr. This can be used to avoid the default search of /usr/local/include. !

Do not specify /usr as the --with-local-prefix! The directory you use for --with-local-prefix must not contain any of the system's standard header files. If it did contain them, certain programs would be miscompiled (including GNU Emacs, on certain targets), because this would override and nullify the header file corrections made by the fixincludes script. !

Indications are that people who use this option use it based on mistaken ideas of what it is for. People use it as if it specified where to install part of GCC. Perhaps they make this assumption because installing GCC creates the directory. !

--enable-shared[=package[,...]] !
Build shared versions of libraries, if shared libraries are supported on the target platform. Unlike GCC 2.95.x and earlier, shared libraries are enabled by default on all platforms that support shared libraries, except for libobjc which is built as a static library only by default. !

If a list of packages is given as an argument, build shared libraries only for the listed packages. For other packages, only static libraries will be built. Package names currently recognized in the GCC tree are libgcc (also known as gcc), libstdc++ (not --- 267,296 ---- users to specify explicitly the location of local site libraries (e.g., with LIBRARY_PATH). !

The same value can be used for both --with-local-prefix and --prefix provided it is not /usr. This can be used to avoid the default search of /usr/local/include. !

Do not specify /usr as the --with-local-prefix! The directory you use for --with-local-prefix must not contain any of the system's standard header files. If it did contain them, certain programs would be miscompiled (including GNU Emacs, on certain targets), because this would override and nullify the header file corrections made by the fixincludes script. !

Indications are that people who use this option use it based on mistaken ideas of what it is for. People use it as if it specified where to install part of GCC. Perhaps they make this assumption because installing GCC creates the directory. !

--enable-shared[=package[,...]] !
Build shared versions of libraries, if shared libraries are supported on the target platform. Unlike GCC 2.95.x and earlier, shared libraries are enabled by default on all platforms that support shared libraries, except for libobjc which is built as a static library only by default. !

If a list of packages is given as an argument, build shared libraries only for the listed packages. For other packages, only static libraries will be built. Package names currently recognized in the GCC tree are libgcc (also known as gcc), libstdc++ (not *************** any name, so, if you list package names *** 292,506 **** you will only get static Objective-C libraries. libf2c and libiberty do not support shared libraries at all. !

Use --disable-shared to build only static libraries. Note that --disable-shared does not accept a list of package names as argument, only --enable-shared does. !

--with-gnu-as !
Specify that the compiler should assume that the assembler it finds is the GNU assembler. However, this does not modify the rules to find an assembler and will result in confusion if the assembler found is not actually the GNU assembler. (Confusion may also result if the compiler finds the GNU assembler but has not been configured with --with-gnu-as.) If you have more than one assembler installed on your system, you may want to use this option in ! connection with --with-as=pathname. !

The following systems are the only ones where it makes a difference whether you use the GNU assembler. On any other system, --with-gnu-as has no effect. !

    !
  • hppa1.0-any-any !
  • hppa1.1-any-any !
  • i386-any-sysv
  • m68k-bull-sysv
  • m68k-hp-hpux
  • m68000-hp-hpux
  • m68000-att-sysv !
  • any-lynx-lynxos !
  • mips-any !
  • sparc-sun-solaris2.any !
  • sparc64-any-solaris2.any
!

On the systems listed above (except for the HP-PA, the SPARC, for ISC on the 386, and for mips-sgi-irix5.*), if you use the GNU assembler, you should also use the GNU linker (and specify --with-gnu-ld). !

--with-as=pathname !
Specify that the compiler should use the assembler pointed to by pathname, rather than the one found by the standard rules to find an assembler, which are: !
  • Check the ! exec_prefix/lib/gcc-lib/target/version directory, where exec_prefix defaults to prefix which defaults to /usr/local unless overridden by the ! --prefix=pathname switch described above. target is the target system triple, such as sparc-sun-solaris2.7, and version denotes the GCC version, such as 3.0.
  • Check operating system specific directories (e.g. /usr/ccs/bin on Sun Solaris 2).
! Note that these rules do not check for the value of PATH. You may want to use --with-as if no assembler is installed in the directories listed above, or if you have multiple assemblers installed and want to choose one that is not found by the above rules. !
--with-gnu-ld !
Same as --with-gnu-as but for the linker. !
--with-ld=pathname !
Same as --with-as but for the linker. !
--with-stabs !
Specify that stabs debugging information should be used instead of whatever format the host normally uses. Normally GCC uses the same debug format as the host system. !

On MIPS based systems and on Alphas, you must specify whether you want GCC to create the normal ECOFF debugging format, or to use BSD-style stabs passed through the ECOFF symbol table. The normal ECOFF debug format cannot fully handle languages other than C. BSD stabs format can handle other languages, but it only works with the GNU debugger GDB. !

Normally, GCC uses the ECOFF debugging format by default; if you prefer BSD stabs, specify --with-stabs when you configure GCC. !

No matter which default you choose when you configure GCC, the user can use the -gcoff and -gstabs+ options to specify explicitly the debug format for a particular compilation. !

--with-stabs is meaningful on the ISC system on the 386, also, if --with-gas is used. It selects use of stabs debugging information embedded in COFF output. This kind of debugging information supports C++ well; ordinary COFF debugging information does not. !

--with-stabs is also meaningful on 386 systems running SVR4. It selects use of stabs debugging information embedded in ELF output. The C++ compiler currently (2.6.0) does not support the DWARF debugging information normally used on 386 SVR4 platforms; stabs provide a workable alternative. This requires gas and gdb, as the normal SVR4 tools can not generate or interpret stabs. !

--disable-multilib !
Specify that multiple target libraries to support different target variants, calling conventions, etc should not be built. The default is to build a predefined set of them. !

Some targets provide finer-grained control over which multilibs are built (e.g., --disable-softfloat): !

arc-*-elf* !
biendian. !
arm-*-* !
fpu, 26bit, underscore, interwork, biendian, nofmult. !
m68*-*-* !
softfloat, m68881, m68000, m68020. !
mips*-*-* !
single-float, biendian, softfloat. !
powerpc*-*-*, rs6000*-*-* !
aix64, pthread, softfloat, powercpu, powerpccpu, powerpcos, biendian, sysv, aix. !
!
--enable-threads !
Specify that the target supports threads. This affects the Objective-C compiler and runtime library, and exception handling for other languages like C++ and Java. On some systems, this is the default. !

In general, the best (and, in many cases, the only known) threading model available will be configured for use. Beware that on some systems, gcc has not been taught what threading models are generally available for the system. In this case, --enable-threads is an alias for --enable-threads=single. !

--disable-threads !
Specify that threading support should be disabled for the system. This is an alias for --enable-threads=single. !
--enable-threads=lib !
Specify that lib is the thread support library. This affects the Objective-C compiler and runtime library, and exception handling for other languages like C++ and Java. The possibilities for lib are: !
aix !
AIX thread support.
dce !
DCE thread support.
mach !
Generic MACH thread support, known to work on NeXTSTEP. (Please note that the file needed to support this configuration, gthr-mach.h, is missing and thus this setting will cause a known bootstrap failure.)
no !
This is an alias for single.
posix !
Generic POSIX thread support.
pthreads !
Same as posix on arm*-*-linux*, *-*-chorusos* and *-*-freebsd* only. A future release of gcc might remove this alias or extend it to all platforms.
rtems !
RTEMS thread support.
single !
Disable thread support, should work for all platforms.
solaris !
Sun Solaris 2 thread support.
vxworks !
VxWorks thread support.
win32 !
Microsoft Win32 API thread support.
!
--with-cpu=cpu !
Specify which cpu variant the compiler should generate code for by default. This is currently only supported on some ports, specifically arm, powerpc, and SPARC. If configure does not recognize the model name (e.g. arm700, 603e, or ultrasparc) you provide, please check the gcc/config.gcc script for a complete list of supported models. !
--enable-altivec !
Specify that the target supports AltiVec vector enhancements. This option will adjust the ABI for AltiVec enhancements, as well as generate AltiVec code when appropriate. This option is only available for PowerPC systems. !
--enable-target-optspace !
Specify that target libraries should be optimized for code space instead of code speed. This is the default for the m32r platform. !
--disable-cpp !
Specify that a user visible cpp program should not be installed. !
--with-cpp-install-dir=dirname !
Specify that the user visible cpp program should be installed ! in prefix/dirname/cpp, in addition to bindir. !
--enable-initfini-array !
Force the use of sections .init_array and .fini_array (instead of .init and .fini) for constructors and destructors. Option --disable-initfini-array has the opposite effect. If neither option is specified, the configure script will try to guess whether the .init_array and .fini_array sections are supported and, if they are, use them. !
--enable-maintainer-mode !
The build rules that regenerate the GCC master message catalog gcc.pot are normally disabled. This is because it can only be rebuilt if the complete source tree is present. If you have changed the sources and want to rebuild the --- 300,514 ---- you will only get static Objective-C libraries. libf2c and libiberty do not support shared libraries at all. !

Use --disable-shared to build only static libraries. Note that --disable-shared does not accept a list of package names as argument, only --enable-shared does. !

--with-gnu-as !
Specify that the compiler should assume that the assembler it finds is the GNU assembler. However, this does not modify the rules to find an assembler and will result in confusion if the assembler found is not actually the GNU assembler. (Confusion may also result if the compiler finds the GNU assembler but has not been configured with --with-gnu-as.) If you have more than one assembler installed on your system, you may want to use this option in ! connection with --with-as=pathname. !

The following systems are the only ones where it makes a difference whether you use the GNU assembler. On any other system, --with-gnu-as has no effect. !

    !
  • hppa1.0-any-any !
  • hppa1.1-any-any !
  • i386-any-sysv
  • m68k-bull-sysv
  • m68k-hp-hpux
  • m68000-hp-hpux
  • m68000-att-sysv !
  • any-lynx-lynxos !
  • mips-any !
  • sparc-sun-solaris2.any !
  • sparc64-any-solaris2.any
!

On the systems listed above (except for the HP-PA, the SPARC, for ISC on the 386, and for mips-sgi-irix5.*), if you use the GNU assembler, you should also use the GNU linker (and specify --with-gnu-ld). !

--with-as=pathname !
Specify that the compiler should use the assembler pointed to by pathname, rather than the one found by the standard rules to find an assembler, which are: !
  • Check the ! exec_prefix/lib/gcc-lib/target/version directory, where exec_prefix defaults to prefix which defaults to /usr/local unless overridden by the ! --prefix=pathname switch described above. target is the target system triple, such as sparc-sun-solaris2.7, and version denotes the GCC version, such as 3.0.
  • Check operating system specific directories (e.g. /usr/ccs/bin on Sun Solaris 2).
! Note that these rules do not check for the value of PATH. You may want to use --with-as if no assembler is installed in the directories listed above, or if you have multiple assemblers installed and want to choose one that is not found by the above rules. !
--with-gnu-ld !
Same as --with-gnu-as but for the linker. !
--with-ld=pathname !
Same as --with-as but for the linker. !
--with-stabs !
Specify that stabs debugging information should be used instead of whatever format the host normally uses. Normally GCC uses the same debug format as the host system. !

On MIPS based systems and on Alphas, you must specify whether you want GCC to create the normal ECOFF debugging format, or to use BSD-style stabs passed through the ECOFF symbol table. The normal ECOFF debug format cannot fully handle languages other than C. BSD stabs format can handle other languages, but it only works with the GNU debugger GDB. !

Normally, GCC uses the ECOFF debugging format by default; if you prefer BSD stabs, specify --with-stabs when you configure GCC. !

No matter which default you choose when you configure GCC, the user can use the -gcoff and -gstabs+ options to specify explicitly the debug format for a particular compilation. !

--with-stabs is meaningful on the ISC system on the 386, also, if --with-gas is used. It selects use of stabs debugging information embedded in COFF output. This kind of debugging information supports C++ well; ordinary COFF debugging information does not. !

--with-stabs is also meaningful on 386 systems running SVR4. It selects use of stabs debugging information embedded in ELF output. The C++ compiler currently (2.6.0) does not support the DWARF debugging information normally used on 386 SVR4 platforms; stabs provide a workable alternative. This requires gas and gdb, as the normal SVR4 tools can not generate or interpret stabs. !

--disable-multilib !
Specify that multiple target libraries to support different target variants, calling conventions, etc should not be built. The default is to build a predefined set of them. !

Some targets provide finer-grained control over which multilibs are built (e.g., --disable-softfloat): !

arc-*-elf* !
biendian. !
arm-*-* !
fpu, 26bit, underscore, interwork, biendian, nofmult. !
m68*-*-* !
softfloat, m68881, m68000, m68020. !
mips*-*-* !
single-float, biendian, softfloat. !
powerpc*-*-*, rs6000*-*-* !
aix64, pthread, softfloat, powercpu, powerpccpu, powerpcos, biendian, sysv, aix. !
!
--enable-threads !
Specify that the target supports threads. This affects the Objective-C compiler and runtime library, and exception handling for other languages like C++ and Java. On some systems, this is the default. !

In general, the best (and, in many cases, the only known) threading model available will be configured for use. Beware that on some systems, gcc has not been taught what threading models are generally available for the system. In this case, --enable-threads is an alias for --enable-threads=single. !

--disable-threads !
Specify that threading support should be disabled for the system. This is an alias for --enable-threads=single. !
--enable-threads=lib !
Specify that lib is the thread support library. This affects the Objective-C compiler and runtime library, and exception handling for other languages like C++ and Java. The possibilities for lib are: !
aix !
AIX thread support.
dce !
DCE thread support.
mach !
Generic MACH thread support, known to work on NeXTSTEP. (Please note that the file needed to support this configuration, gthr-mach.h, is missing and thus this setting will cause a known bootstrap failure.)
no !
This is an alias for single.
posix !
Generic POSIX thread support.
pthreads !
Same as posix on arm*-*-linux*, *-*-chorusos* and *-*-freebsd* only. A future release of gcc might remove this alias or extend it to all platforms.
rtems !
RTEMS thread support.
single !
Disable thread support, should work for all platforms.
solaris !
Sun Solaris 2 thread support.
vxworks !
VxWorks thread support.
win32 !
Microsoft Win32 API thread support.
!
--with-cpu=cpu !
Specify which cpu variant the compiler should generate code for by default. This is currently only supported on some ports, specifically arm, powerpc, and SPARC. If configure does not recognize the model name (e.g. arm700, 603e, or ultrasparc) you provide, please check the gcc/config.gcc script for a complete list of supported models. !
--enable-altivec !
Specify that the target supports AltiVec vector enhancements. This option will adjust the ABI for AltiVec enhancements, as well as generate AltiVec code when appropriate. This option is only available for PowerPC systems. !
--enable-target-optspace !
Specify that target libraries should be optimized for code space instead of code speed. This is the default for the m32r platform. !
--disable-cpp !
Specify that a user visible cpp program should not be installed. !
--with-cpp-install-dir=dirname !
Specify that the user visible cpp program should be installed ! in prefix/dirname/cpp, in addition to bindir. !
--enable-initfini-array !
Force the use of sections .init_array and .fini_array (instead of .init and .fini) for constructors and destructors. Option --disable-initfini-array has the opposite effect. If neither option is specified, the configure script will try to guess whether the .init_array and .fini_array sections are supported and, if they are, use them. !
--enable-maintainer-mode !
The build rules that regenerate the GCC master message catalog gcc.pot are normally disabled. This is because it can only be rebuilt if the complete source tree is present. If you have changed the sources and want to rebuild the *************** catalog, configuring with --enable *** 508,533 **** this. Note that you need a recent version of the gettext tools to do so. !
--enable-version-specific-runtime-libs !
Specify that runtime libraries should be installed in the compiler specific ! subdirectory (libsubdir) rather than the usual places. In addition, libstdc++'s include files will be installed in ! libsubdir/include/g++ unless you overruled it by using ! --with-gxx-include-dir=dirname. Using this option is particularly useful if you intend to use several versions of GCC in parallel. This is currently supported by libf2c and libstdc++, and is the default for libobjc which cannot be changed in this case. !
--enable-languages=lang1,lang2,... !
Specify that only a particular subset of compilers and their runtime libraries should be built. For a list of valid values for langN you can issue the following command in the gcc directory of your GCC source tree:
!
grep language= */config-lang.in
! 
! Currently, you can use any of the following: ada, c, c++, f77, java, objc. Building the Ada compiler has special requirements, see below.
If you do not pass this flag, all languages available in the gcc --- 516,541 ---- this. Note that you need a recent version of the gettext tools to do so. !
--enable-version-specific-runtime-libs !
Specify that runtime libraries should be installed in the compiler specific ! subdirectory (libsubdir) rather than the usual places. In addition, libstdc++'s include files will be installed in ! libsubdir/include/g++ unless you overruled it by using ! --with-gxx-include-dir=dirname. Using this option is particularly useful if you intend to use several versions of GCC in parallel. This is currently supported by libf2c and libstdc++, and is the default for libobjc which cannot be changed in this case. !
--enable-languages=lang1,lang2,... !
Specify that only a particular subset of compilers and their runtime libraries should be built. For a list of valid values for langN you can issue the following command in the gcc directory of your GCC source tree:
!
          grep language= */config-lang.in
!           
! Currently, you can use any of the following: ada, c, c++, f77, java, objc. Building the Ada compiler has special requirements, see below.
If you do not pass this flag, all languages available in the gcc *************** sub-tree will be configured. Re-definin *** 535,542 **** make bootstrap does not work anymore, as those language sub-directories might not have been configured! !
--disable-libgcj !
Specify that the run-time libraries used by GCJ should not be built. This is useful in case you intend to use GCJ with some other run-time, or you're going to install it separately, or it just happens not to build on your particular --- 543,550 ---- make bootstrap does not work anymore, as those language sub-directories might not have been configured! !
--disable-libgcj !
Specify that the run-time libraries used by GCJ should not be built. This is useful in case you intend to use GCJ with some other run-time, or you're going to install it separately, or it just happens not to build on your particular *************** may need to port it; in this case, befor *** 547,581 **** configure.in so that libgcj is enabled by default on this platform, you may use --enable-libgcj to override the default. !
--with-dwarf2 !
Specify that the compiler should use DWARF 2 debugging information as the default. !
--enable-win32-registry !
--enable-win32-registry=key !
--disable-win32-registry !
The --enable-win32-registry option enables Windows-hosted GCC to look up installations paths in the registry using the following key: !
HKEY_LOCAL_MACHINE\SOFTWARE\Free Software Foundation\key
! 
!

key defaults to GCC version number, and can be overridden by the ! --enable-win32-registry=key option. Vendors and distributors who use custom installers are encouraged to provide a different key, perhaps one comprised of vendor name and GCC version number, to avoid conflict with existing installations. This feature is enabled by default, and can be disabled by --disable-win32-registry option. This option has no effect on the other hosts. !

--nfp !
Specify that the machine does not have a floating point unit. This ! option only applies to m68k-sun-sunosn. On any other system, --nfp has no effect. !
--enable-checking !
--enable-checking=list !
When you specify this option, the compiler is built to perform checking of tree node types when referencing fields of that node, and some other internal consistency checks. This does not change the generated code, but adds error checking within the compiler. This will slow down the --- 555,589 ---- configure.in so that libgcj is enabled by default on this platform, you may use --enable-libgcj to override the default. !
--with-dwarf2 !
Specify that the compiler should use DWARF 2 debugging information as the default. !
--enable-win32-registry !
--enable-win32-registry=key !
--disable-win32-registry !
The --enable-win32-registry option enables Windows-hosted GCC to look up installations paths in the registry using the following key: !
          HKEY_LOCAL_MACHINE\SOFTWARE\Free Software Foundation\key
!           
!

key defaults to GCC version number, and can be overridden by the ! --enable-win32-registry=key option. Vendors and distributors who use custom installers are encouraged to provide a different key, perhaps one comprised of vendor name and GCC version number, to avoid conflict with existing installations. This feature is enabled by default, and can be disabled by --disable-win32-registry option. This option has no effect on the other hosts. !

--nfp !
Specify that the machine does not have a floating point unit. This ! option only applies to m68k-sun-sunosn. On any other system, --nfp has no effect. !
--enable-checking !
--enable-checking=list !
When you specify this option, the compiler is built to perform checking of tree node types when referencing fields of that node, and some other internal consistency checks. This does not change the generated code, but adds error checking within the compiler. This will slow down the *************** external valgrind simulator *** 590,598 **** not specified is misc,tree,gc,rtlflag; the checks rtl, gcac and valgrind are very expensive. !
--enable-coverage !
--enable-coverage=level !
With this option, the compiler is built to collect self coverage information, every time it is run. This is for internal development purposes, and only works when the compiler is being built with gcc. The level argument controls whether the compiler is built optimized or --- 598,606 ---- not specified is misc,tree,gc,rtlflag; the checks rtl, gcac and valgrind are very expensive. !
--enable-coverage !
--enable-coverage=level !
With this option, the compiler is built to collect self coverage information, every time it is run. This is for internal development purposes, and only works when the compiler is being built with gcc. The level argument controls whether the compiler is built optimized or *************** want to disable optimization, for perfor *** 601,675 **** enable optimization. When coverage is enabled, the default level is without optimization. !
--enable-nls !
--disable-nls !
The --enable-nls option enables Native Language Support (NLS), which lets GCC output diagnostics in languages other than American English. Native Language Support is enabled by default if not doing a canadian cross build. The --disable-nls option disables NLS. !
--with-included-gettext !
If NLS is enabled, the --with-included-gettext option causes the build procedure to prefer its copy of GNU gettext. !
--with-catgets !
If NLS is enabled, and if the host lacks gettext but has the inferior catgets interface, the GCC build procedure normally ignores catgets and instead uses GCC's copy of the GNU gettext library. The --with-catgets option causes the build procedure to use the host's catgets in this situation. !
--with-libiconv-prefix=dir !
Search for libiconv header files in dir/include and ! libiconv library files in dir/lib. !
--with-system-zlib !
Use installed zlib rather than that included with GCC. This option only applies if the Java front end is being built. !
--enable-obsolete !
Enable configuration for an obsoleted system. If you attempt to configure GCC for a system (build, host, or target) which has been obsoleted, and you do not specify this flag, configure will halt with an error message. !

All support for systems which have been obsoleted in one release of GCC is removed entirely in the next major release, unless someone steps forward to maintain the port.

!

Some options which only apply to building cross compilers: !

!
--with-headers !
--with-headers=dir !
Specifies that target headers are available when building a cross compiler. The dir argument specifies a directory which has the target include files. These include files will be copied into the gcc install ! directory. This option with the dir argument is required when ! building a cross compiler, if prefix/target/sys-include ! doesn't pre-exist. If prefix/target/sys-include does pre-exist, the dir argument may be omitted. fixincludes will be run on these files to make them compatible with GCC.
--with-libs !
--with-libs=``dir1 dir2 ... dirN'' !
Specifies a list of directories which contain the target runtime libraries. These libraries will be copied into the gcc install directory. If the directory list is omitted, this option has no effect.
--with-newlib !
Specifies that newlib is being used as the target C library. This causes __eprintf to be omitted from libgcc.a on the assumption that it will be provided by newlib.
!

Note that each --enable option has a corresponding --disable option and that each --with option has a corresponding --without option. !


Return to the GCC Installation page ! --- 609,698 ---- enable optimization. When coverage is enabled, the default level is without optimization. !

--enable-nls !
--disable-nls !
The --enable-nls option enables Native Language Support (NLS), which lets GCC output diagnostics in languages other than American English. Native Language Support is enabled by default if not doing a canadian cross build. The --disable-nls option disables NLS. !
--with-included-gettext !
If NLS is enabled, the --with-included-gettext option causes the build procedure to prefer its copy of GNU gettext. !
--with-catgets !
If NLS is enabled, and if the host lacks gettext but has the inferior catgets interface, the GCC build procedure normally ignores catgets and instead uses GCC's copy of the GNU gettext library. The --with-catgets option causes the build procedure to use the host's catgets in this situation. !
--with-libiconv-prefix=dir !
Search for libiconv header files in dir/include and ! libiconv library files in dir/lib. !
--with-system-zlib !
Use installed zlib rather than that included with GCC. This option only applies if the Java front end is being built. !
--enable-obsolete !
Enable configuration for an obsoleted system. If you attempt to configure GCC for a system (build, host, or target) which has been obsoleted, and you do not specify this flag, configure will halt with an error message. !

All support for systems which have been obsoleted in one release of GCC is removed entirely in the next major release, unless someone steps forward to maintain the port.

!

Some options which only apply to building cross compilers: !

!
--with-sysroot !
--with-sysroot=dir !
Tells GCC to consider dir as the root of a tree that contains a ! (subset of) the root filesystem of the target operating system. ! Target system headers, libraries and run-time object files will be ! searched in there. The specified directory is not copied into the ! install tree, unlike the options --with-headers and ! --with-libs that this option obsoletes. The default value, ! in case --with-sysroot is not given an argument, is ! ${gcc_tooldir}/sys-root. If the specified directory is a ! subdirectory of ${exec_prefix}, then it will be found relative to ! the GCC binaries if the installation tree is moved. ! !
--with-headers !
--with-headers=dir !
Deprecated in favor of --with-sysroot. ! Specifies that target headers are available when building a cross compiler. The dir argument specifies a directory which has the target include files. These include files will be copied into the gcc install ! directory. This option with the dir argument is required when ! building a cross compiler, if prefix/target/sys-include ! doesn't pre-exist. If prefix/target/sys-include does pre-exist, the dir argument may be omitted. fixincludes will be run on these files to make them compatible with GCC.
--with-libs !
--with-libs=``dir1 dir2 ... dirN'' !
Deprecated in favor of --with-sysroot. ! Specifies a list of directories which contain the target runtime libraries. These libraries will be copied into the gcc install directory. If the directory list is omitted, this option has no effect.
--with-newlib !
Specifies that newlib is being used as the target C library. This causes __eprintf to be omitted from libgcc.a on the assumption that it will be provided by newlib.
!

Note that each --enable option has a corresponding --disable option and that each --with option has a corresponding --without option. !


Return to the GCC Installation page ! diff -Nrc3pad gcc-3.3.2/INSTALL/download.html gcc-3.3.3/INSTALL/download.html *** gcc-3.3.2/INSTALL/download.html Thu Oct 16 20:10:56 2003 --- gcc-3.3.3/INSTALL/download.html Sat Feb 14 20:34:32 2004 *************** *** 1,67 **** ! Downloading GCC ! ! ! !

Downloading GCC

GCC is distributed via CVS and FTP tarballs compressed with gzip or bzip2. It is possible to download a full distribution or specific components. !

Please refer to our releases web page for information on how to obtain GCC. !

The full distribution includes the C, C++, Objective-C, Fortran, Java, and Ada (in case of GCC 3.1 and later) compilers. The full distribution also includes runtime libraries for C++, Objective-C, Fortran, and Java. In GCC 3.0 and later versions, GNU compiler testsuites are also included in the full distribution. !

If you choose to download specific components, you must download the core GCC distribution plus any language specific distributions you wish to use. The core distribution includes the C language front end as well as the shared components. Each language has a tarball which includes the language front end as well as the language runtime (when appropriate). !

Unpack the core distribution as well as any language specific distributions in the same directory. !

If you also intend to build binutils (either to upgrade an existing installation or for use in place of the corresponding tools of your OS), unpack the binutils distribution either in the same directory or a separate one. In the latter case, add symbolic links to any components of the binutils you intend to build alongside the compiler (bfd, binutils, gas, gprof, ld, ! opcodes, ...) to the directory containing the GCC sources. !


Return to the GCC Installation page ! --- 1,75 ---- ! Downloading GCC ! ! + + !

Downloading GCC

GCC is distributed via CVS and FTP tarballs compressed with gzip or bzip2. It is possible to download a full distribution or specific components. !

Please refer to our releases web page for information on how to obtain GCC. !

The full distribution includes the C, C++, Objective-C, Fortran, Java, and Ada (in case of GCC 3.1 and later) compilers. The full distribution also includes runtime libraries for C++, Objective-C, Fortran, and Java. In GCC 3.0 and later versions, GNU compiler testsuites are also included in the full distribution. !

If you choose to download specific components, you must download the core GCC distribution plus any language specific distributions you wish to use. The core distribution includes the C language front end as well as the shared components. Each language has a tarball which includes the language front end as well as the language runtime (when appropriate). !

Unpack the core distribution as well as any language specific distributions in the same directory. !

If you also intend to build binutils (either to upgrade an existing installation or for use in place of the corresponding tools of your OS), unpack the binutils distribution either in the same directory or a separate one. In the latter case, add symbolic links to any components of the binutils you intend to build alongside the compiler (bfd, binutils, gas, gprof, ld, ! opcodes, ...) to the directory containing the GCC sources. !


Return to the GCC Installation page ! diff -Nrc3pad gcc-3.3.2/INSTALL/finalinstall.html gcc-3.3.3/INSTALL/finalinstall.html *** gcc-3.3.2/INSTALL/finalinstall.html Thu Oct 16 20:10:56 2003 --- gcc-3.3.3/INSTALL/finalinstall.html Sat Feb 14 20:34:32 2004 *************** *** 1,79 **** ! Installing GCC: Final installation ! ! ! !

Installing GCC: Final installation

Now that GCC has been built (and optionally tested), you can install it with !
cd objdir; make install
! 
!

We strongly recommend to install into a target directory where there is no previous version of GCC present. !

That step completes the installation of GCC; user level binaries can ! be found in prefix/bin where prefix is the value you specified with the --prefix to configure (or /usr/local by default). (If you specified --bindir, that directory will be used instead; otherwise, if you specified --exec-prefix, ! exec-prefix/bin will be used.) Headers for the C++ and ! Java libraries are installed in prefix/include; libraries ! in libdir (normally prefix/lib); internal ! parts of the compiler in libdir/gcc-lib; documentation in ! info format in infodir (normally prefix/info). !

When installing cross-compilers, GCC's executables ! are not only installed into bindir, that ! is, exec-prefix/bin, but additionally into ! exec-prefix/target-alias/bin, if that directory exists. Typically, such tooldirs hold target-specific binutils, including assembler and linker. !

Installation into a temporary staging area or into a chroot jail can be achieved with the command !

make DESTDIR=path-to-rootdir install
! 

where path-to-rootdir is the absolute path of a directory relative to which all installation paths will be interpreted. Note that the directory specified by DESTDIR need not exist yet; it will be created if necessary. !

There is a subtle point with tooldirs and DESTDIR: If you relocate a cross-compiler installation with ! e.g. DESTDIR=rootdir, then the directory ! rootdir/exec-prefix/target-alias/bin will be filled with duplicated GCC executables only if it already exists, it will not be created otherwise. This is regarded as a feature, not as a bug, because it gives slightly more control to the packagers using the DESTDIR feature. !

If you built a released version of GCC using make bootstrap then please quickly review the build status page for your release, available from http://gcc.gnu.org/buildstat.html. If your system is not listed for the version of GCC that you built, --- 1,87 ---- ! Installing GCC: Final installation ! ! + + !

Installing GCC: Final installation

Now that GCC has been built (and optionally tested), you can install it with !
     cd objdir; make install
!      
!

We strongly recommend to install into a target directory where there is no previous version of GCC present. !

That step completes the installation of GCC; user level binaries can ! be found in prefix/bin where prefix is the value you specified with the --prefix to configure (or /usr/local by default). (If you specified --bindir, that directory will be used instead; otherwise, if you specified --exec-prefix, ! exec-prefix/bin will be used.) Headers for the C++ and ! Java libraries are installed in prefix/include; libraries ! in libdir (normally prefix/lib); internal ! parts of the compiler in libdir/gcc-lib; documentation in ! info format in infodir (normally prefix/info). !

When installing cross-compilers, GCC's executables ! are not only installed into bindir, that ! is, exec-prefix/bin, but additionally into ! exec-prefix/target-alias/bin, if that directory exists. Typically, such tooldirs hold target-specific binutils, including assembler and linker. !

Installation into a temporary staging area or into a chroot jail can be achieved with the command !

     make DESTDIR=path-to-rootdir install
!      

where path-to-rootdir is the absolute path of a directory relative to which all installation paths will be interpreted. Note that the directory specified by DESTDIR need not exist yet; it will be created if necessary. !

There is a subtle point with tooldirs and DESTDIR: If you relocate a cross-compiler installation with ! e.g. DESTDIR=rootdir, then the directory ! rootdir/exec-prefix/target-alias/bin will be filled with duplicated GCC executables only if it already exists, it will not be created otherwise. This is regarded as a feature, not as a bug, because it gives slightly more control to the packagers using the DESTDIR feature. !

If you built a released version of GCC using make bootstrap then please quickly review the build status page for your release, available from http://gcc.gnu.org/buildstat.html. If your system is not listed for the version of GCC that you built, *************** send a note to *** 82,141 **** that you successfully built and installed GCC. Include the following information: !

    !
  • Output from running srcdir/config.guess. Do not send us that file itself, just the one-line output from running it. !
  • The output of gcc -v for your newly installed gcc. This tells us which version of GCC you built and the options you passed to configure. !
  • Whether you enabled all languages or a subset of them. If you used a full distribution then this information is part of the configure options in the output of gcc -v, but if you downloaded the "core" compiler plus additional front ends then it isn't apparent which ones you built unless you tell us about it. !
  • If the build was for GNU/Linux, also include: !
    • The distribution name and version (e.g., Red Hat 7.1 or Debian 2.2.3); this information should be available from /etc/issue. !
    • The version of the Linux kernel, available from uname --version or uname -a. !
    • The version of glibc you used; for RPM-based systems like Red Hat, Mandrake, and SuSE type rpm -q glibc to get the glibc version, and on systems like Debian and Progeny use dpkg -l libc6.
    ! For other systems, you can include similar information if you think it is relevant. !
  • Any other information that you think would be useful to people building GCC on the same configuration. The new entry in the build status list will include a link to the archived copy of your message.
!

We'd also like to know if the host/target specific installation notes didn't include your host/target information or if that information is incomplete or out of date. Send a note to gcc@gcc.gnu.org telling us how the information should be changed. !

If you find a bug, please report it following our bug reporting guidelines. !

If you want to print the GCC manuals, do cd objdir; make dvi. You will need to have texi2dvi (version at least 4.2) and TeX installed. This creates a number of .dvi files in ! subdirectories of objdir; these may be converted for printing with programs such as dvips. You can also buy printed manuals from the Free Software Foundation, though such manuals may not be for the most recent version of GCC. !


Return to the GCC Installation page ! --- 90,149 ---- that you successfully built and installed GCC. Include the following information: !

    !
  • Output from running srcdir/config.guess. Do not send us that file itself, just the one-line output from running it. !
  • The output of gcc -v for your newly installed gcc. This tells us which version of GCC you built and the options you passed to configure. !
  • Whether you enabled all languages or a subset of them. If you used a full distribution then this information is part of the configure options in the output of gcc -v, but if you downloaded the "core" compiler plus additional front ends then it isn't apparent which ones you built unless you tell us about it. !
  • If the build was for GNU/Linux, also include: !
    • The distribution name and version (e.g., Red Hat 7.1 or Debian 2.2.3); this information should be available from /etc/issue. !
    • The version of the Linux kernel, available from uname --version or uname -a. !
    • The version of glibc you used; for RPM-based systems like Red Hat, Mandrake, and SuSE type rpm -q glibc to get the glibc version, and on systems like Debian and Progeny use dpkg -l libc6.
    ! For other systems, you can include similar information if you think it is relevant. !
  • Any other information that you think would be useful to people building GCC on the same configuration. The new entry in the build status list will include a link to the archived copy of your message.
!

We'd also like to know if the host/target specific installation notes didn't include your host/target information or if that information is incomplete or out of date. Send a note to gcc@gcc.gnu.org telling us how the information should be changed. !

If you find a bug, please report it following our bug reporting guidelines. !

If you want to print the GCC manuals, do cd objdir; make dvi. You will need to have texi2dvi (version at least 4.2) and TeX installed. This creates a number of .dvi files in ! subdirectories of objdir; these may be converted for printing with programs such as dvips. You can also buy printed manuals from the Free Software Foundation, though such manuals may not be for the most recent version of GCC. !


Return to the GCC Installation page ! diff -Nrc3pad gcc-3.3.2/INSTALL/gfdl.html gcc-3.3.3/INSTALL/gfdl.html *** gcc-3.3.2/INSTALL/gfdl.html Thu Oct 16 20:10:56 2003 --- gcc-3.3.3/INSTALL/gfdl.html Sat Feb 14 20:34:32 2004 *************** *** 1,47 **** ! Installing GCC: GNU Free Documentation License ! ! ! !

Installing GCC: GNU Free Documentation License

Installing GCC: GNU Free Documentation License

Version 1.2, November 2002
!
Copyright © 2000,2001,2002 Free Software Foundation, Inc.
! 59 Temple Place, Suite 330, Boston, MA  02111-1307, USA
! 
! Everyone is permitted to copy and distribute verbatim copies
! of this license document, but changing it is not allowed.
! 
!
    !

  1. PREAMBLE !

    The purpose of this License is to make a manual, textbook, or other functional and useful document free in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. --- 1,55 ---- ! Installing GCC: GNU Free Documentation License ! ! + + !

    Installing GCC: GNU Free Documentation License

    Installing GCC: GNU Free Documentation License

    Version 1.2, November 2002
    !
         Copyright © 2000,2001,2002 Free Software Foundation, Inc.
    !      59 Temple Place, Suite 330, Boston, MA  02111-1307, USA
    !      
    !      Everyone is permitted to copy and distribute verbatim copies
    !      of this license document, but changing it is not allowed.
    !      
    !
      !
    1. PREAMBLE !

      The purpose of this License is to make a manual, textbook, or other functional and useful document free in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. *************** Secondarily, this License preserves for *** 49,60 **** to get credit for their work, while not being considered responsible for modifications made by others. !

      This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. !

      We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; --- 57,68 ---- to get credit for their work, while not being considered responsible for modifications made by others. !

      This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. !

      We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; *************** it can be used for any textual work, reg *** 62,70 **** whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. !

    2. APPLICABILITY AND DEFINITIONS !

      This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that --- 70,78 ---- whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. !

    3. APPLICABILITY AND DEFINITIONS !

      This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that *************** licensee, and is addressed as "you". Yo *** 74,84 **** copy, modify or distribute the work in a way requiring permission under copyright law. !

      A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. !

      A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall --- 82,92 ---- copy, modify or distribute the work in a way requiring permission under copyright law. !

      A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. !

      A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall *************** connection with the subject or with rela *** 89,95 **** commercial, philosophical, ethical or political position regarding them. !

      The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not --- 97,103 ---- commercial, philosophical, ethical or political position regarding them. !

      The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not *************** allowed to be designated as Invariant. *** 97,108 **** Invariant Sections. If the Document does not identify any Invariant Sections then there are none. !

      The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. !

      A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of --- 105,116 ---- Invariant Sections. If the Document does not identify any Invariant Sections then there are none. !

      The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. !

      A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of *************** or discourage subsequent modification by *** 115,121 **** An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque". !

      Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, --- 123,129 ---- An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque". !

      Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, *************** not generally available, and the machine *** 128,141 **** PostScript or PDF produced by some word processors for output purposes only. !

      The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. !

      A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", --- 136,149 ---- PostScript or PDF produced by some word processors for output purposes only. !

      The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. !

      A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", *************** specific section name mentioned below, s *** 143,158 **** of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition. !

      The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. !

    4. VERBATIM COPYING !

      You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other --- 151,166 ---- of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition. !

      The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. !

    5. VERBATIM COPYING !

      You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other *************** copying of the copies you make or distri *** 162,173 **** compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. !

      You may also lend copies, under the same conditions stated above, and you may publicly display copies. !

    6. COPYING IN QUANTITY !

      If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover --- 170,181 ---- compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. !

      You may also lend copies, under the same conditions stated above, and you may publicly display copies. !

    7. COPYING IN QUANTITY !

      If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover *************** Copying with changes limited to the cove *** 180,191 **** the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. !

      If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. !

      If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using --- 188,199 ---- the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. !

      If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. !

      If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using *************** location until at least one year after t *** 198,247 **** Opaque copy (directly or through your agents or retailers) of that edition to the public. !

      It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. !

    8. MODIFICATIONS !

      You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: !

        !

      1. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. !
      2. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. !
      3. State on the Title page the name of the publisher of the Modified Version, as the publisher. !
      4. Preserve all the copyright notices of the Document. !
      5. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. !
      6. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. !
      7. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. !
      8. Include an unaltered copy of this License. !
      9. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one --- 206,255 ---- Opaque copy (directly or through your agents or retailers) of that edition to the public. !

        It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. !

      10. MODIFICATIONS !

        You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: !

          !
        1. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. !
        2. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. !
        3. State on the Title page the name of the publisher of the Modified Version, as the publisher. !
        4. Preserve all the copyright notices of the Document. !
        5. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. !
        6. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. !
        7. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. !
        8. Include an unaltered copy of this License. !
        9. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one *************** stating the title, year, authors, and pu *** 249,255 **** given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. !
        10. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. --- 257,263 ---- given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. !
        11. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. *************** You may omit a network location for a wo *** 257,294 **** least four years before the Document itself, or if the original publisher of the version it refers to gives permission. !
        12. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. !
        13. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. !
        14. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version. !
        15. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section. !
        16. Preserve any Warranty Disclaimers. !
        !

        If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. !

        You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. !

        You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or --- 265,302 ---- least four years before the Document itself, or if the original publisher of the version it refers to gives permission. !

      11. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. !
      12. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. !
      13. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version. !
      14. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section. !
      15. Preserve any Warranty Disclaimers. !
      !

      If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. !

      You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. !

      You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or *************** by arrangement made by the same entity y *** 298,317 **** you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. !

      The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. !

    9. COMBINING DOCUMENTS !

      You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. !

      The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by --- 306,325 ---- you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. !

      The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. !

    10. COMBINING DOCUMENTS !

      You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. !

      The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by *************** author or publisher of that section if k *** 320,347 **** Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. !

      In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements." !

    11. COLLECTIONS OF DOCUMENTS !

      You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. !

      You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. !

    12. AGGREGATION WITH INDEPENDENT WORKS !

      A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights --- 328,355 ---- Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. !

      In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements." !

    13. COLLECTIONS OF DOCUMENTS !

      You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. !

      You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. !

    14. AGGREGATION WITH INDEPENDENT WORKS !

      A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights *************** When the Document is included an aggrega *** 350,356 **** apply to the other works in the aggregate which are not themselves derivative works of the Document. !

      If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the --- 358,364 ---- apply to the other works in the aggregate which are not themselves derivative works of the Document. !

      If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the *************** electronic equivalent of covers if the D *** 358,366 **** Otherwise they must appear on printed covers that bracket the whole aggregate. !

    15. TRANSLATION !

      Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include --- 366,374 ---- Otherwise they must appear on printed covers that bracket the whole aggregate. !

    16. TRANSLATION !

      Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include *************** of those notices and disclaimers. In ca *** 373,386 **** the translation and the original version of this License or a notice or disclaimer, the original version will prevail. !

      If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. !

    17. TERMINATION !

      You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, --- 381,394 ---- the translation and the original version of this License or a notice or disclaimer, the original version will prevail. !

      If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. !

    18. TERMINATION !

      You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, *************** parties who have received copies, or rig *** 388,402 **** License will not have their licenses terminated so long as such parties remain in full compliance. !

    19. FUTURE REVISIONS OF THIS LICENSE !

      The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/. !

      Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or --- 396,410 ---- License will not have their licenses terminated so long as such parties remain in full compliance. !

    20. FUTURE REVISIONS OF THIS LICENSE !

      The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/. !

      Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or *************** of any later version that has been publi *** 404,446 **** Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. !

    !

    ADDENDUM: How to use this License for your documents

    To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: !

      Copyright (C)  year  your name.
    !   Permission is granted to copy, distribute and/or modify this document
    !   under the terms of the GNU Free Documentation License, Version 1.2
    !   or any later version published by the Free Software Foundation;
    !   with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
    !   A copy of the license is included in the section entitled ``GNU
    !   Free Documentation License''.
    ! 
    !

    If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this: !

        with the Invariant Sections being list their titles, with
    !     the Front-Cover Texts being list, and with the Back-Cover Texts
    !     being list.
    ! 
    !

    If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. !

    If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. !


    Return to the GCC Installation page ! --- 412,454 ---- Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. !

!

ADDENDUM: How to use this License for your documents

To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: !

       Copyright (C)  year  your name.
!        Permission is granted to copy, distribute and/or modify this document
!        under the terms of the GNU Free Documentation License, Version 1.2
!        or any later version published by the Free Software Foundation;
!        with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
!        A copy of the license is included in the section entitled ``GNU
!        Free Documentation License''.
!      
!

If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this: !

         with the Invariant Sections being list their titles, with
!          the Front-Cover Texts being list, and with the Back-Cover Texts
!          being list.
!      
!

If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. !

If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. !


Return to the GCC Installation page ! diff -Nrc3pad gcc-3.3.2/INSTALL/index.html gcc-3.3.3/INSTALL/index.html *** gcc-3.3.2/INSTALL/index.html Thu Oct 16 20:10:56 2003 --- gcc-3.3.3/INSTALL/index.html Sat Feb 14 20:34:32 2004 *************** *** 1,95 **** ! Installing GCC ! ! ! !

Installing GCC

The latest version of this document is always available at http://gcc.gnu.org/install/. !

This document describes the generic installation procedure for GCC as well as detailing some target specific installation instructions. !

GCC includes several components that previously were separate distributions with their own installation instructions. This document supersedes all package specific installation instructions. !

Before starting the build/install procedure please check the host/target specific installation notes. We recommend you browse the entire generic installation instructions before you proceed. !

Lists of successful builds for released versions of GCC are available at http://gcc.gnu.org/buildstat.html. These lists are updated as new information becomes available. !

The installation procedure itself is broken into five steps. !

    !

  1. Downloading the source
  2. Configuration
  3. Building
  4. Testing (optional)
  5. Final install !
!

Please note that GCC does not support make uninstall and probably won't do so in the near future as this would open a can of worms. Instead, we suggest that you install GCC into a directory of its own and simply remove that directory when you do not need that specific version of GCC any longer, and, if shared libraries are installed there as well, no more binaries exist that use them. !

There are also some old installation instructions, which are mostly obsolete but still contain some information which has not yet been merged into the main part of this manual. !


Return to the GCC Installation page Copyright © 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.

!

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, the Front-Cover texts being (a) (see below), and with the Back-Cover Texts being (b) (see below). A copy of the license is included in the section entitled "GNU Free Documentation License". !

(a) The FSF's Front-Cover Text is: !

A GNU Manual !

(b) The FSF's Back-Cover Text is: !

You have freedom to copy and modify this GNU Manual, like GNU software. Copies published by the Free Software Foundation raise funds for GNU development. ! --- 1,103 ---- ! Installing GCC ! ! + + !

Installing GCC

The latest version of this document is always available at http://gcc.gnu.org/install/. !

This document describes the generic installation procedure for GCC as well as detailing some target specific installation instructions. !

GCC includes several components that previously were separate distributions with their own installation instructions. This document supersedes all package specific installation instructions. !

Before starting the build/install procedure please check the host/target specific installation notes. We recommend you browse the entire generic installation instructions before you proceed. !

Lists of successful builds for released versions of GCC are available at http://gcc.gnu.org/buildstat.html. These lists are updated as new information becomes available. !

The installation procedure itself is broken into five steps. !

    !
  1. Downloading the source
  2. Configuration
  3. Building
  4. Testing (optional)
  5. Final install !
!

Please note that GCC does not support make uninstall and probably won't do so in the near future as this would open a can of worms. Instead, we suggest that you install GCC into a directory of its own and simply remove that directory when you do not need that specific version of GCC any longer, and, if shared libraries are installed there as well, no more binaries exist that use them. !

There are also some old installation instructions, which are mostly obsolete but still contain some information which has not yet been merged into the main part of this manual. !


Return to the GCC Installation page Copyright © 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.

!

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, the Front-Cover texts being (a) (see below), and with the Back-Cover Texts being (b) (see below). A copy of the license is included in the section entitled "GNU Free Documentation License". !

(a) The FSF's Front-Cover Text is: !

A GNU Manual !

(b) The FSF's Back-Cover Text is: !

You have freedom to copy and modify this GNU Manual, like GNU software. Copies published by the Free Software Foundation raise funds for GNU development. ! diff -Nrc3pad gcc-3.3.2/INSTALL/old.html gcc-3.3.3/INSTALL/old.html *** gcc-3.3.2/INSTALL/old.html Thu Oct 16 20:10:56 2003 --- gcc-3.3.3/INSTALL/old.html Sat Feb 14 20:34:32 2004 *************** *** 1,62 **** ! Installing GCC: Old documentation ! ! ! !

Installing GCC: Old documentation

Old installation documentation

!

Note most of this information is out of date and superseded by the previous chapters of this manual. It is provided for historical reference only, because of a lack of volunteers to merge it into the main manual. !

Here is the procedure for installing GNU CC on a GNU or Unix system. See VMS Install, for VMS systems. !

    !

  1. If you have chosen a configuration for GNU CC which requires other GNU tools (such as GAS or the GNU linker) instead of the standard system tools, install the required tools in the build directory under the names as, ld or whatever is appropriate. !

    Alternatively, you can do subsequent compilation using a value of the PATH environment variable such that the necessary GNU tools come before the standard system tools. !

  2. Specify the host, build and target machine configurations. You do this when you run the configure script. !

    The build machine is the system which you are using, the host machine is the system where you want to run the resulting compiler (normally the build machine), and the target machine is the system for which you want the compiler to generate code. !

    If you are building a compiler to produce code for the machine it runs on (a native compiler), you normally do not need to specify any operands to configure; it will try to guess the type of machine you are on and use that as the build, host and target machines. So you don't need --- 1,70 ---- ! Installing GCC: Old documentation ! ! + + !

    Installing GCC: Old documentation

    Old installation documentation

    !

    Note most of this information is out of date and superseded by the previous chapters of this manual. It is provided for historical reference only, because of a lack of volunteers to merge it into the main manual. !

    Here is the procedure for installing GNU CC on a GNU or Unix system. See VMS Install, for VMS systems. !

      !
    1. If you have chosen a configuration for GNU CC which requires other GNU tools (such as GAS or the GNU linker) instead of the standard system tools, install the required tools in the build directory under the names as, ld or whatever is appropriate. !

      Alternatively, you can do subsequent compilation using a value of the PATH environment variable such that the necessary GNU tools come before the standard system tools. !

    2. Specify the host, build and target machine configurations. You do this when you run the configure script. !

      The build machine is the system which you are using, the host machine is the system where you want to run the resulting compiler (normally the build machine), and the target machine is the system for which you want the compiler to generate code. !

      If you are building a compiler to produce code for the machine it runs on (a native compiler), you normally do not need to specify any operands to configure; it will try to guess the type of machine you are on and use that as the build, host and target machines. So you don't need *************** to specify a configuration when building *** 64,107 **** configure cannot figure out what your configuration is or guesses wrong. !

      In those cases, specify the build machine's configuration name with the --host option; the host and target will default to be the same as the host machine. (If you are building a cross-compiler, see Cross-Compiler.) !

      Here is an example: !

      ./configure --host=sparc-sun-sunos4.1
      ! 
      !

      A configuration name may be canonical or it may be more or less abbreviated. !

      A canonical configuration name has three parts, separated by dashes. ! It looks like this: cpu-company-system. (The three parts may themselves contain dashes; configure can figure out which dashes serve which purpose.) For example, m68k-sun-sunos4.1 specifies a Sun 3. !

      You can also replace parts of the configuration by nicknames or aliases. For example, sun3 stands for m68k-sun, so sun3-sunos4.1 is another way to specify a Sun 3. !

      You can specify a version number after any of the system types, and some of the CPU types. In most cases, the version is irrelevant, and will be ignored. So you might as well specify the version if you know it. !

      See Configurations, for a list of supported configuration names and notes on many of the configurations. You should check the notes in that section before proceeding any further with the installation of GNU CC. !

    !

    Configurations Supported by GNU CC

    !

    Here are the possible CPU types: !

    1750a, a29k, alpha, arm, avr, cn, clipper, dsp16xx, elxsi, fr30, h8300, hppa1.0, hppa1.1, i370, i386, i486, i586, i686, i786, i860, i960, ip2k, m32r, m68000, m68k, m6811, m6812, m88k, mcore, mips, mipsel, mips64, mips64el, --- 72,115 ---- configure cannot figure out what your configuration is or guesses wrong. !

    In those cases, specify the build machine's configuration name with the --host option; the host and target will default to be the same as the host machine. (If you are building a cross-compiler, see Cross-Compiler.) !

    Here is an example: !

              ./configure --host=sparc-sun-sunos4.1
    !           
    !

    A configuration name may be canonical or it may be more or less abbreviated. !

    A canonical configuration name has three parts, separated by dashes. ! It looks like this: cpu-company-system. (The three parts may themselves contain dashes; configure can figure out which dashes serve which purpose.) For example, m68k-sun-sunos4.1 specifies a Sun 3. !

    You can also replace parts of the configuration by nicknames or aliases. For example, sun3 stands for m68k-sun, so sun3-sunos4.1 is another way to specify a Sun 3. !

    You can specify a version number after any of the system types, and some of the CPU types. In most cases, the version is irrelevant, and will be ignored. So you might as well specify the version if you know it. !

    See Configurations, for a list of supported configuration names and notes on many of the configurations. You should check the notes in that section before proceeding any further with the installation of GNU CC. !

!

Configurations Supported by GNU CC

!

Here are the possible CPU types: !

1750a, a29k, alpha, arm, avr, cn, clipper, dsp16xx, elxsi, fr30, h8300, hppa1.0, hppa1.1, i370, i386, i486, i586, i686, i786, i860, i960, ip2k, m32r, m68000, m68k, m6811, m6812, m88k, mcore, mips, mipsel, mips64, mips64el, *************** mn10200, mn10300, ns32k, pdp11, powerpc, *** 109,118 **** sparclite, sparc64, v850, vax, we32k.
!

Here are the recognized company names. As you can see, customary abbreviations are used rather than the longer official names. !

acorn, alliant, altos, apollo, apple, att, bull, cbm, convergent, convex, crds, dec, dg, dolphin, elxsi, encore, harris, hitachi, hp, ibm, intergraph, isi, --- 117,126 ---- sparclite, sparc64, v850, vax, we32k.
!

Here are the recognized company names. As you can see, customary abbreviations are used rather than the longer official names. !

acorn, alliant, altos, apollo, apple, att, bull, cbm, convergent, convex, crds, dec, dg, dolphin, elxsi, encore, harris, hitachi, hp, ibm, intergraph, isi, *************** mips, motorola, ncr, next, ns, omron, pl *** 120,133 **** sequent, sgi, sony, sun, tti, unicom, wrs.
!

The company name is meaningful only to disambiguate when the rest of the information supplied is insufficient. You can omit it, writing ! just cpu-system, if it is not needed. For example, vax-ultrix4.2 is equivalent to vax-dec-ultrix4.2. !

Here is a list of system types: !

386bsd, aix, acis, amigaos, aos, aout, aux, bosx, bsd, clix, coff, ctix, cxux, dgux, dynix, ebmon, ecoff, elf, esix, freebsd, hms, genix, gnu, linux, linux-gnu, hiux, hpux, iris, irix, isc, luna, lynxos, mach, minix, msdos, mvs, --- 128,141 ---- sequent, sgi, sony, sun, tti, unicom, wrs.
!

The company name is meaningful only to disambiguate when the rest of the information supplied is insufficient. You can omit it, writing ! just cpu-system, if it is not needed. For example, vax-ultrix4.2 is equivalent to vax-dec-ultrix4.2. !

Here is a list of system types: !

386bsd, aix, acis, amigaos, aos, aout, aux, bosx, bsd, clix, coff, ctix, cxux, dgux, dynix, ebmon, ecoff, elf, esix, freebsd, hms, genix, gnu, linux, linux-gnu, hiux, hpux, iris, irix, isc, luna, lynxos, mach, minix, msdos, mvs, *************** vxworks, winnt, xenix. *** 139,170 ****

You can omit the system type; then configure guesses the operating system from the CPU and company. !

You can add a version number to the system type; this may or may not make a difference. For example, you can write bsd4.3 or bsd4.4 to distinguish versions of BSD. In practice, the version number is most needed for sysv3 and sysv4, which are often treated differently. !

linux-gnu is the canonical name for the GNU/Linux target; however GNU CC will also accept linux. The version of the kernel in use is not relevant on these systems. A suffix such as libc1 or aout distinguishes major versions of the C library; all of the suffixed versions are obsolete. !

If you specify an impossible combination such as i860-dg-vms, then you may get an error message from configure, or it may ignore part of the information and do the best it can with the rest. configure always prints the canonical name for the alternative that it used. GNU CC does not support all possible alternatives. !

Often a particular model of machine has a name. Many machine names are recognized as aliases for CPU/company combinations. Thus, the machine name sun3, mentioned above, is an alias for m68k-sun. Sometimes we accept a company name as a machine name, when the name is popularly used for a particular machine. Here is a table of the known machine names: !

3300, 3b1, 3bn, 7300, altos3068, altos, apollo68, att-7300, balance, convex-cn, crds, decstation-3100, --- 147,178 ----

You can omit the system type; then configure guesses the operating system from the CPU and company. !

You can add a version number to the system type; this may or may not make a difference. For example, you can write bsd4.3 or bsd4.4 to distinguish versions of BSD. In practice, the version number is most needed for sysv3 and sysv4, which are often treated differently. !

linux-gnu is the canonical name for the GNU/Linux target; however GNU CC will also accept linux. The version of the kernel in use is not relevant on these systems. A suffix such as libc1 or aout distinguishes major versions of the C library; all of the suffixed versions are obsolete. !

If you specify an impossible combination such as i860-dg-vms, then you may get an error message from configure, or it may ignore part of the information and do the best it can with the rest. configure always prints the canonical name for the alternative that it used. GNU CC does not support all possible alternatives. !

Often a particular model of machine has a name. Many machine names are recognized as aliases for CPU/company combinations. Thus, the machine name sun3, mentioned above, is an alias for m68k-sun. Sometimes we accept a company name as a machine name, when the name is popularly used for a particular machine. Here is a table of the known machine names: !

3300, 3b1, 3bn, 7300, altos3068, altos, apollo68, att-7300, balance, convex-cn, crds, decstation-3100, *************** sun4, symmetry, tower-32, tower. *** 183,395 **** name. If you want to install your own homemade configuration files, you can use local as the company name to access them. If you use ! configuration cpu-local, the configuration name without the cpu prefix is used to form the configuration file names. !

Thus, if you specify m68k-local, configuration uses files m68k.md, local.h, m68k.c, xm-local.h, t-local, and x-local, all in the directory config/m68k. !

Here is a list of configurations that have special treatment or special things you must know: !

vax-dec-vms !
See VMS Install, for details on how to install GNU CC on VMS.
!

Building and Installing a Cross-Compiler

!

GNU CC can function as a cross-compiler for many machines, but not all. !

  • Cross-compilers for the Mips as target using the Mips assembler currently do not work, because the auxiliary programs mips-tdump.c and mips-tfile.c can't be compiled on anything but a Mips. It does work to cross compile for a Mips if you use the GNU assembler and linker. !
  • Cross-compilers between machines with different floating point formats have not all been made to work. GNU CC now has a floating point emulator with which these can work, but each target machine description needs to be updated to take advantage of it. !
  • Cross-compilation between machines of different word sizes is somewhat problematic and sometimes does not work.
!

Since GNU CC generates assembler code, you probably need a cross-assembler that GNU CC can run, in order to produce object files. If you want to link on other than the target machine, you need a cross-linker as well. You also need header files and libraries suitable for the target machine that you can install on the host machine. !

Steps of Cross-Compilation

!

To compile and run a program using a cross-compiler involves several steps: !

  • Run the cross-compiler on the host machine to produce assembler files for the target machine. This requires header files for the target machine. !
  • Assemble the files produced by the cross-compiler. You can do this either with an assembler on the target machine, or with a cross-assembler on the host machine. !
  • Link those files to make an executable. You can do this either with a linker on the target machine, or with a cross-linker on the host machine. Whichever machine you use, you need libraries and certain ! startup files (typically crt....o) for the target machine.
!

It is most convenient to do all of these steps on the same host machine, since then you can do it all with a single invocation of GNU CC. This requires a suitable cross-assembler and cross-linker. For some targets, the GNU assembler and linker are available. !

Configuring a Cross-Compiler

!

To build GNU CC as a cross-compiler, you start out by running ! configure. Use the --target=target to specify the target type. If configure was unable to correctly identify the ! system you are running on, also specify the --build=build option. For example, here is how to configure for a cross-compiler that produces code for an HP 68030 system running BSD on a system that configure can correctly identify: !

./configure --target=m68k-hp-bsd4.3
! 
!

Tools and Libraries for a Cross-Compiler

!

If you have a cross-assembler and cross-linker available, you should install them now. Put them in the directory ! /usr/local/target/bin. Here is a table of the tools you should put in this directory: !

as !
This should be the cross-assembler. !
ld !
This should be the cross-linker. !
ar !
This should be the cross-archiver: a program which can manipulate archive files (linker libraries) in the target machine's format. !
ranlib !
This should be a program to construct a symbol table in an archive file.
!

The installation of GNU CC will find these programs in that directory, and copy or link them to the proper place to for the cross-compiler to find them when run later. !

The easiest way to provide these files is to build the Binutils package and GAS. Configure them with the same --host and --target options that you use for configuring GNU CC, then build and install them. They install their executables automatically into the proper directory. Alas, they do not support all the targets that GNU CC supports. !

If you want to install libraries to use with the cross-compiler, such as a standard C library, put them in the directory ! /usr/local/target/lib; installation of GNU CC copies all the files in that subdirectory into the proper place for GNU CC to find them and link with them. Here's an example of copying some libraries from a target machine: !

ftp target-machine
! lcd /usr/local/target/lib
! cd /lib
! get libc.a
! cd /usr/lib
! get libg.a
! get libm.a
! quit
! 

The precise set of libraries you'll need, and their locations on the target machine, vary depending on its operating system. !

Many targets require "start files" such as crt0.o and crtn.o which are linked into each executable; these too should be ! placed in /usr/local/target/lib. There may be several alternatives for crt0.o, for use with profiling or other compilation options. Check your target's definition of STARTFILE_SPEC to find out what start files it uses. Here's an example of copying these files from a target machine: !

ftp target-machine
! lcd /usr/local/target/lib
! prompt
! cd /lib
! mget *crt*.o
! cd /usr/lib
! mget *crt*.o
! quit
! 
!

Cross-Compilers and Header Files

!

If you are cross-compiling a standalone program or a program for an embedded system, then you may not need any header files except the few that are part of GNU CC (and those of your program). However, if you intend to link your program with a standard C library such as libc.a, then you probably need to compile with the header files that go with the library you use. !

The GNU C compiler does not come with these files, because (1) they are system-specific, and (2) they belong in a C library, not in a compiler. !

If the GNU C library supports your target machine, then you can get the header files from there (assuming you actually use the GNU library when you link your program). !

If your target machine comes with a C compiler, it probably comes with suitable header files also. If you make these files accessible from the host machine, the cross-compiler can use them also. !

Otherwise, you're on your own in finding header files to use when cross-compiling. !

When you have found suitable header files, you should put them in the ! directory /usr/local/target/include, before building the cross compiler. Then installation will run fixincludes properly and install the corrected versions of the header files where the compiler will use them. !

Provide the header files before you build the cross-compiler, because the build stage actually runs the cross-compiler to produce parts of libgcc.a. (These are the parts that can be compiled with GNU CC.) Some of them need suitable header files. !

Here's an example showing how to copy the header files from a target machine. On the target machine, do this: !

(cd /usr/include; tar cf - .) > tarfile
! 
!

Then, on the host machine, do this: !

ftp target-machine
! lcd /usr/local/target/include
! get tarfile
! quit
! tar xf tarfile
! 
!

Actually Building the Cross-Compiler

!

Now you can proceed just as for compiling a single-machine compiler through the step of building stage 1. !

Do not try to build stage 2 for a cross-compiler. It doesn't work to rebuild GNU CC as a cross-compiler using the cross-compiler, because that would produce a program that runs on the target machine, not on the host. For example, if you compile a 386-to-68030 cross-compiler with --- 191,403 ---- name. If you want to install your own homemade configuration files, you can use local as the company name to access them. If you use ! configuration cpu-local, the configuration name without the cpu prefix is used to form the configuration file names. !

Thus, if you specify m68k-local, configuration uses files m68k.md, local.h, m68k.c, xm-local.h, t-local, and x-local, all in the directory config/m68k. !

Here is a list of configurations that have special treatment or special things you must know: !

vax-dec-vms !
See VMS Install, for details on how to install GNU CC on VMS.
!

Building and Installing a Cross-Compiler

!

GNU CC can function as a cross-compiler for many machines, but not all. !

  • Cross-compilers for the Mips as target using the Mips assembler currently do not work, because the auxiliary programs mips-tdump.c and mips-tfile.c can't be compiled on anything but a Mips. It does work to cross compile for a Mips if you use the GNU assembler and linker. !
  • Cross-compilers between machines with different floating point formats have not all been made to work. GNU CC now has a floating point emulator with which these can work, but each target machine description needs to be updated to take advantage of it. !
  • Cross-compilation between machines of different word sizes is somewhat problematic and sometimes does not work.
!

Since GNU CC generates assembler code, you probably need a cross-assembler that GNU CC can run, in order to produce object files. If you want to link on other than the target machine, you need a cross-linker as well. You also need header files and libraries suitable for the target machine that you can install on the host machine. !

Steps of Cross-Compilation

!

To compile and run a program using a cross-compiler involves several steps: !

  • Run the cross-compiler on the host machine to produce assembler files for the target machine. This requires header files for the target machine. !
  • Assemble the files produced by the cross-compiler. You can do this either with an assembler on the target machine, or with a cross-assembler on the host machine. !
  • Link those files to make an executable. You can do this either with a linker on the target machine, or with a cross-linker on the host machine. Whichever machine you use, you need libraries and certain ! startup files (typically crt....o) for the target machine.
!

It is most convenient to do all of these steps on the same host machine, since then you can do it all with a single invocation of GNU CC. This requires a suitable cross-assembler and cross-linker. For some targets, the GNU assembler and linker are available. !

Configuring a Cross-Compiler

!

To build GNU CC as a cross-compiler, you start out by running ! configure. Use the --target=target to specify the target type. If configure was unable to correctly identify the ! system you are running on, also specify the --build=build option. For example, here is how to configure for a cross-compiler that produces code for an HP 68030 system running BSD on a system that configure can correctly identify: !

     ./configure --target=m68k-hp-bsd4.3
!      
!

Tools and Libraries for a Cross-Compiler

!

If you have a cross-assembler and cross-linker available, you should install them now. Put them in the directory ! /usr/local/target/bin. Here is a table of the tools you should put in this directory: !

as !
This should be the cross-assembler. !
ld !
This should be the cross-linker. !
ar !
This should be the cross-archiver: a program which can manipulate archive files (linker libraries) in the target machine's format. !
ranlib !
This should be a program to construct a symbol table in an archive file.
!

The installation of GNU CC will find these programs in that directory, and copy or link them to the proper place to for the cross-compiler to find them when run later. !

The easiest way to provide these files is to build the Binutils package and GAS. Configure them with the same --host and --target options that you use for configuring GNU CC, then build and install them. They install their executables automatically into the proper directory. Alas, they do not support all the targets that GNU CC supports. !

If you want to install libraries to use with the cross-compiler, such as a standard C library, put them in the directory ! /usr/local/target/lib; installation of GNU CC copies all the files in that subdirectory into the proper place for GNU CC to find them and link with them. Here's an example of copying some libraries from a target machine: !

     ftp target-machine
!      lcd /usr/local/target/lib
!      cd /lib
!      get libc.a
!      cd /usr/lib
!      get libg.a
!      get libm.a
!      quit
!      

The precise set of libraries you'll need, and their locations on the target machine, vary depending on its operating system. !

Many targets require "start files" such as crt0.o and crtn.o which are linked into each executable; these too should be ! placed in /usr/local/target/lib. There may be several alternatives for crt0.o, for use with profiling or other compilation options. Check your target's definition of STARTFILE_SPEC to find out what start files it uses. Here's an example of copying these files from a target machine: !

     ftp target-machine
!      lcd /usr/local/target/lib
!      prompt
!      cd /lib
!      mget *crt*.o
!      cd /usr/lib
!      mget *crt*.o
!      quit
!      
!

Cross-Compilers and Header Files

!

If you are cross-compiling a standalone program or a program for an embedded system, then you may not need any header files except the few that are part of GNU CC (and those of your program). However, if you intend to link your program with a standard C library such as libc.a, then you probably need to compile with the header files that go with the library you use. !

The GNU C compiler does not come with these files, because (1) they are system-specific, and (2) they belong in a C library, not in a compiler. !

If the GNU C library supports your target machine, then you can get the header files from there (assuming you actually use the GNU library when you link your program). !

If your target machine comes with a C compiler, it probably comes with suitable header files also. If you make these files accessible from the host machine, the cross-compiler can use them also. !

Otherwise, you're on your own in finding header files to use when cross-compiling. !

When you have found suitable header files, you should put them in the ! directory /usr/local/target/include, before building the cross compiler. Then installation will run fixincludes properly and install the corrected versions of the header files where the compiler will use them. !

Provide the header files before you build the cross-compiler, because the build stage actually runs the cross-compiler to produce parts of libgcc.a. (These are the parts that can be compiled with GNU CC.) Some of them need suitable header files. !

Here's an example showing how to copy the header files from a target machine. On the target machine, do this: !

     (cd /usr/include; tar cf - .) > tarfile
!      
!

Then, on the host machine, do this: !

     ftp target-machine
!      lcd /usr/local/target/include
!      get tarfile
!      quit
!      tar xf tarfile
!      
!

Actually Building the Cross-Compiler

!

Now you can proceed just as for compiling a single-machine compiler through the step of building stage 1. !

Do not try to build stage 2 for a cross-compiler. It doesn't work to rebuild GNU CC as a cross-compiler using the cross-compiler, because that would produce a program that runs on the target machine, not on the host. For example, if you compile a 386-to-68030 cross-compiler with *************** for a 386 as the host). If you want to *** 399,474 **** whether you compile it on a 68030 or with a cross-compiler on a 386, you must specify a 68030 as the host when you configure it. !

To install the cross-compiler, use make install, as usual. !

Installing GNU CC on VMS

!

The VMS version of GNU CC is distributed in a backup saveset containing both source code and precompiled binaries. !

To install the gcc command so you can use the compiler easily, in the same manner as you use the VMS C compiler, you must install the VMS CLD file for GNU CC as follows: !

    !

  1. Define the VMS logical names GNU_CC and GNU_CC_INCLUDE to point to the directories where the GNU CC executables (gcc-cpp.exe, gcc-cc1.exe, etc.) and the C include files are kept respectively. This should be done with the commands: !
    $ assign /system /translation=concealed -
    !   disk:[gcc.] gnu_cc
    ! $ assign /system /translation=concealed -
    !   disk:[gcc.include.] gnu_cc_include
    ! 
    !

    with the appropriate disk and directory names. These commands can be placed in your system startup file so they will be executed whenever the machine is rebooted. You may, if you choose, do this via the GCC_INSTALL.COM script in the [GCC] directory. !

  2. Install the GCC command with the command line: !
    $ set command /table=sys$common:[syslib]dcltables -
    !   /output=sys$common:[syslib]dcltables gnu_cc:[000000]gcc
    ! $ install replace sys$common:[syslib]dcltables
    ! 
    !
  3. To install the help file, do the following: !
    $ library/help sys$library:helplib.hlb gcc.hlp
    ! 
    !

    Now you can invoke the compiler with a command like gcc /verbose file.c, which is equivalent to the command gcc -v -c file.c in Unix. !

!

If you wish to use GNU C++ you must first install GNU CC, and then perform the following steps: !

    !

  1. Define the VMS logical name GNU_GXX_INCLUDE to point to the directory where the preprocessor will search for the C++ header files. This can be done with the command: !
    $ assign /system /translation=concealed -
    !   disk:[gcc.gxx_include.] gnu_gxx_include
    ! 
    !

    with the appropriate disk and directory name. If you are going to be using a C++ runtime library, this is where its install procedure will install its header files. !

  2. Obtain the file gcc-cc1plus.exe, and place this in the same directory that gcc-cc1.exe is kept. !

    The GNU C++ compiler can be invoked with a command like gcc /plus /verbose file.cc, which is equivalent to the command g++ -v -c file.cc in Unix. !

!

We try to put corresponding binaries and sources on the VMS distribution tape. But sometimes the binaries will be from an older version than the sources, because we don't always have time to update them. (Use the /version option to determine the version number of the binaries and --- 407,482 ---- whether you compile it on a 68030 or with a cross-compiler on a 386, you must specify a 68030 as the host when you configure it. !

To install the cross-compiler, use make install, as usual. !

Installing GNU CC on VMS

!

The VMS version of GNU CC is distributed in a backup saveset containing both source code and precompiled binaries. !

To install the gcc command so you can use the compiler easily, in the same manner as you use the VMS C compiler, you must install the VMS CLD file for GNU CC as follows: !

    !
  1. Define the VMS logical names GNU_CC and GNU_CC_INCLUDE to point to the directories where the GNU CC executables (gcc-cpp.exe, gcc-cc1.exe, etc.) and the C include files are kept respectively. This should be done with the commands: !
              $ assign /system /translation=concealed -
    !             disk:[gcc.] gnu_cc
    !           $ assign /system /translation=concealed -
    !             disk:[gcc.include.] gnu_cc_include
    !           
    !

    with the appropriate disk and directory names. These commands can be placed in your system startup file so they will be executed whenever the machine is rebooted. You may, if you choose, do this via the GCC_INSTALL.COM script in the [GCC] directory. !

  2. Install the GCC command with the command line: !
              $ set command /table=sys$common:[syslib]dcltables -
    !             /output=sys$common:[syslib]dcltables gnu_cc:[000000]gcc
    !           $ install replace sys$common:[syslib]dcltables
    !           
    !
  3. To install the help file, do the following: !
              $ library/help sys$library:helplib.hlb gcc.hlp
    !           
    !

    Now you can invoke the compiler with a command like gcc /verbose file.c, which is equivalent to the command gcc -v -c file.c in Unix. !

!

If you wish to use GNU C++ you must first install GNU CC, and then perform the following steps: !

    !
  1. Define the VMS logical name GNU_GXX_INCLUDE to point to the directory where the preprocessor will search for the C++ header files. This can be done with the command: !
              $ assign /system /translation=concealed -
    !             disk:[gcc.gxx_include.] gnu_gxx_include
    !           
    !

    with the appropriate disk and directory name. If you are going to be using a C++ runtime library, this is where its install procedure will install its header files. !

  2. Obtain the file gcc-cc1plus.exe, and place this in the same directory that gcc-cc1.exe is kept. !

    The GNU C++ compiler can be invoked with a command like gcc /plus /verbose file.cc, which is equivalent to the command g++ -v -c file.cc in Unix. !

!

We try to put corresponding binaries and sources on the VMS distribution tape. But sometimes the binaries will be from an older version than the sources, because we don't always have time to update them. (Use the /version option to determine the version number of the binaries and *************** compare it with the source file ve *** 476,518 **** so.) In this case, you should use the binaries you get to recompile the sources. If you must recompile, here is how: !

    !

  1. Execute the command procedure vmsconfig.com to set up the files tm.h, config.h, aux-output.c, and md., and to create files tconfig.h and hconfig.h. This procedure also creates several linker option files used by make-cc1.com and a data file used by make-l2.com. !
    $ @vmsconfig.com
    ! 
    !
  2. Setup the logical names and command tables as defined above. In addition, define the VMS logical name GNU_BISON to point at the to the directories where the Bison executable is kept. This should be done with the command: !
    $ assign /system /translation=concealed -
    !   disk:[bison.] gnu_bison
    ! 
    !

    You may, if you choose, use the INSTALL_BISON.COM script in the [BISON] directory. !

  3. Install the BISON command with the command line: !
    $ set command /table=sys$common:[syslib]dcltables -
    !   /output=sys$common:[syslib]dcltables -
    !   gnu_bison:[000000]bison
    ! $ install replace sys$common:[syslib]dcltables
    ! 
    !
  4. Type @make-gcc to recompile everything, or submit the file make-gcc.com to a batch queue. If you wish to build the GNU C++ compiler as well as the GNU CC compiler, you must first edit make-gcc.com and follow the instructions that appear in the comments. !
  5. In order to use GCC, you need a library of functions which GCC compiled code will call to perform certain tasks, and these functions are defined in the file libgcc2.c. To compile this you should use the command procedure make-l2.com, which will generate the library libgcc2.olb. --- 484,526 ---- so.) In this case, you should use the binaries you get to recompile the sources. If you must recompile, here is how: !
      !
    1. Execute the command procedure vmsconfig.com to set up the files tm.h, config.h, aux-output.c, and md., and to create files tconfig.h and hconfig.h. This procedure also creates several linker option files used by make-cc1.com and a data file used by make-l2.com. !
                $ @vmsconfig.com
      !           
      !
    2. Setup the logical names and command tables as defined above. In addition, define the VMS logical name GNU_BISON to point at the to the directories where the Bison executable is kept. This should be done with the command: !
                $ assign /system /translation=concealed -
      !             disk:[bison.] gnu_bison
      !           
      !

      You may, if you choose, use the INSTALL_BISON.COM script in the [BISON] directory. !

    3. Install the BISON command with the command line: !
                $ set command /table=sys$common:[syslib]dcltables -
      !             /output=sys$common:[syslib]dcltables -
      !             gnu_bison:[000000]bison
      !           $ install replace sys$common:[syslib]dcltables
      !           
      !
    4. Type @make-gcc to recompile everything, or submit the file make-gcc.com to a batch queue. If you wish to build the GNU C++ compiler as well as the GNU CC compiler, you must first edit make-gcc.com and follow the instructions that appear in the comments. !
    5. In order to use GCC, you need a library of functions which GCC compiled code will call to perform certain tasks, and these functions are defined in the file libgcc2.c. To compile this you should use the command procedure make-l2.com, which will generate the library libgcc2.olb. *************** file libgcc2.c. To compile *** 520,534 **** the same distribution that libgcc2.c came from, and make-gcc.com will automatically do all of this for you. !

      To install the library, use the following commands: !

      $ library gnu_cc:[000000]gcclib/delete=(new,eprintf)
      ! $ library gnu_cc:[000000]gcclib/delete=L_*
      ! $ library libgcc2/extract=*/output=libgcc2.obj
      ! $ library gnu_cc:[000000]gcclib libgcc2.obj
      ! 
      !

      The first command simply removes old modules that will be replaced with modules from libgcc2 under different module names. The modules new and eprintf may not actually be present in your gcclib.olb--if the VMS librarian complains about those modules --- 528,542 ---- the same distribution that libgcc2.c came from, and make-gcc.com will automatically do all of this for you. !

      To install the library, use the following commands: !

                $ library gnu_cc:[000000]gcclib/delete=(new,eprintf)
      !           $ library gnu_cc:[000000]gcclib/delete=L_*
      !           $ library libgcc2/extract=*/output=libgcc2.obj
      !           $ library gnu_cc:[000000]gcclib libgcc2.obj
      !           
      !

      The first command simply removes old modules that will be replaced with modules from libgcc2 under different module names. The modules new and eprintf may not actually be present in your gcclib.olb--if the VMS librarian complains about those modules *************** not being present, simply ignore the mes *** 536,555 **** next command. The second command removes the modules that came from the previous version of the library libgcc2.c. !

      Whenever you update the compiler on your system, you should also update the library with the above procedure. !

    6. You may wish to build GCC in such a way that no files are written to the directory where the source files reside. An example would be the when the source files are on a read-only disk. In these cases, execute the following DCL commands (substituting your actual path names): !
      $ assign dua0:[gcc.build_dir.]/translation=concealed, -
      !          dua1:[gcc.source_dir.]/translation=concealed  gcc_build
      ! $ set default gcc_build:[000000]
      ! 
      !

      where the directory dua1:[gcc.source_dir] contains the source code, and the directory dua0:[gcc.build_dir] is meant to contain all of the generated object files and executables. Once you have done this, you can proceed building GCC as described above. (Keep in mind --- 544,563 ---- next command. The second command removes the modules that came from the previous version of the library libgcc2.c. !

      Whenever you update the compiler on your system, you should also update the library with the above procedure. !

    7. You may wish to build GCC in such a way that no files are written to the directory where the source files reside. An example would be the when the source files are on a read-only disk. In these cases, execute the following DCL commands (substituting your actual path names): !
                $ assign dua0:[gcc.build_dir.]/translation=concealed, -
      !                    dua1:[gcc.source_dir.]/translation=concealed  gcc_build
      !           $ set default gcc_build:[000000]
      !           
      !

      where the directory dua1:[gcc.source_dir] contains the source code, and the directory dua0:[gcc.build_dir] is meant to contain all of the generated object files and executables. Once you have done this, you can proceed building GCC as described above. (Keep in mind *************** that gcc_build is a rooted *** 557,563 **** names in each element of the search list must be an actual physical device name rather than another rooted logical name). !

    8. If you are building GNU CC with a previous version of GNU CC, you also should check to see that you have the newest version of the assembler. In particular, GNU CC version 2 treats global constant variables slightly differently from GNU CC version 1, and GAS version --- 565,571 ---- names in each element of the search list must be an actual physical device name rather than another rooted logical name). !

    9. If you are building GNU CC with a previous version of GNU CC, you also should check to see that you have the newest version of the assembler. In particular, GNU CC version 2 treats global constant variables slightly differently from GNU CC version 1, and GAS version *************** the read-only bit set, and the linker wi *** 567,573 **** about mismatched psect attributes for these variables. These warning messages are merely a nuisance, and can safely be ignored. !
    10. If you want to build GNU CC with the VAX C compiler, you will need to make minor changes in make-cccp.com and make-cc1.com to choose alternate definitions of CC, CFLAGS, and LIBS. See comments in those files. However, you must --- 575,581 ---- about mismatched psect attributes for these variables. These warning messages are merely a nuisance, and can safely be ignored. !
    11. If you want to build GNU CC with the VAX C compiler, you will need to make minor changes in make-cccp.com and make-cc1.com to choose alternate definitions of CC, CFLAGS, and LIBS. See comments in those files. However, you must *************** compile libgcc2 in order to *** 578,618 **** make-l2.com expects to be able to find it operational in gnu_cc:[000000]gnu-as.exe. !

      To use GNU CC on VMS, you need the VMS driver programs gcc.exe, gcc.com, and gcc.cld. They are distributed with the VMS binaries (gcc-vms) rather than the GNU CC sources. GAS is also included in gcc-vms, as is Bison. !

      Once you have successfully built GNU CC with VAX C, you should use the resulting compiler to rebuild itself. Before doing this, be sure to restore the CC, CFLAGS, and LIBS definitions in make-cccp.com and make-cc1.com. The second generation compiler will be able to take advantage of many optimizations that must be suppressed when building with other compilers. !

    !

    Under previous versions of GNU CC, the generated code would occasionally give strange results when linked with the sharable VAXCRTL library. Now this should work. !

    Even with this version, however, GNU CC itself should not be linked with the sharable VAXCRTL. The version of qsort in VAXCRTL has a bug (known to be present in VMS versions V4.6 through V5.5) which causes the compiler to fail. !

    The executables are generated by make-cc1.com and make-cccp.com use the object library version of VAXCRTL in order to make use of the qsort routine in gcclib.olb. If you wish to link the compiler executables with the shareable image version of VAXCRTL, you should edit the file tm.h (created by vmsconfig.com) to define the macro QSORT_WORKAROUND. !

    QSORT_WORKAROUND is always defined when GNU CC is compiled with VAX C, to avoid a problem in case gcclib.olb is not yet available.


    Return to the GCC Installation page ! --- 586,626 ---- make-l2.com expects to be able to find it operational in gnu_cc:[000000]gnu-as.exe. !

    To use GNU CC on VMS, you need the VMS driver programs gcc.exe, gcc.com, and gcc.cld. They are distributed with the VMS binaries (gcc-vms) rather than the GNU CC sources. GAS is also included in gcc-vms, as is Bison. !

    Once you have successfully built GNU CC with VAX C, you should use the resulting compiler to rebuild itself. Before doing this, be sure to restore the CC, CFLAGS, and LIBS definitions in make-cccp.com and make-cc1.com. The second generation compiler will be able to take advantage of many optimizations that must be suppressed when building with other compilers. !

!

Under previous versions of GNU CC, the generated code would occasionally give strange results when linked with the sharable VAXCRTL library. Now this should work. !

Even with this version, however, GNU CC itself should not be linked with the sharable VAXCRTL. The version of qsort in VAXCRTL has a bug (known to be present in VMS versions V4.6 through V5.5) which causes the compiler to fail. !

The executables are generated by make-cc1.com and make-cccp.com use the object library version of VAXCRTL in order to make use of the qsort routine in gcclib.olb. If you wish to link the compiler executables with the shareable image version of VAXCRTL, you should edit the file tm.h (created by vmsconfig.com) to define the macro QSORT_WORKAROUND. !

QSORT_WORKAROUND is always defined when GNU CC is compiled with VAX C, to avoid a problem in case gcclib.olb is not yet available.


Return to the GCC Installation page ! diff -Nrc3pad gcc-3.3.2/INSTALL/specific.html gcc-3.3.3/INSTALL/specific.html *** gcc-3.3.2/INSTALL/specific.html Thu Oct 16 20:10:56 2003 --- gcc-3.3.3/INSTALL/specific.html Sat Feb 14 20:34:32 2004 *************** *** 1,37 **** ! Host/Target specific installation notes for GCC ! ! ! !

Host/Target specific installation notes for GCC

Please read this document carefully before installing the GNU Compiler Collection on your machine. !
  • alpha*-*-*
  • alpha*-dec-osf*
  • alphaev5-cray-unicosmk* --- 1,45 ---- ! Host/Target specific installation notes for GCC ! ! + + !

    Host/Target specific installation notes for GCC

    Please read this document carefully before installing the GNU Compiler Collection on your machine. ! ! !
    !

    alpha*-*-*

    This section contains general configuration information for all alpha-based platforms using ELF (in particular, ignore this section for DEC OSF/1, Digital UNIX and Tru64 UNIX). In addition to reading this section, please read all other sections that match your target. !

    We require binutils 2.11.2 or newer. Previous binutils releases had a number of problems with DWARF 2 debugging information, not the least of which is incorrect linking of shared libraries. !


    !

    alpha*-dec-osf*

    Systems using processors that implement the DEC Alpha architecture and are running the DEC/Compaq Unix (DEC OSF/1, Digital UNIX, or Compaq Tru64 UNIX) operating system, for example the DEC Alpha AXP systems. !

    As of GCC 3.2, versions before alpha*-dec-osf4 are no longer supported. (These are the versions which identify themselves as DEC OSF/1.) !

    In Digital Unix V4.0, virtual memory exhausted bootstrap failures may be fixed by configuring with --with-gc=simple, reconfiguring Kernel Virtual Memory and Swap parameters per the /usr/sbin/sys_check Tuning Suggestions, or applying the patch in http://gcc.gnu.org/ml/gcc/2002-08/msg00822.html. !

    In Tru64 UNIX V5.1, Compaq introduced a new assembler that does not currently (2001-06-13) work with mips-tfile. As a workaround, we need to use the old assembler, invoked via the barely documented -oldas option. To bootstrap GCC, you either need to use the Compaq C Compiler: !

       % CC=cc srcdir/configure [options] [target]
    ! 
    !

    or you can use a copy of GCC 2.95.3 or higher built on Tru64 UNIX V4.0: !

       % CC=gcc -Wa,-oldas srcdir/configure [options] [target]
    ! 
    !

    As of GNU binutils 2.11.2, neither GNU as nor GNU ld are supported on Tru64 UNIX, so you must not configure GCC with --with-gnu-as or --with-gnu-ld. !

    The --enable-threads options isn't supported yet. A patch is in preparation for a future release. !

    GCC writes a .verstamp directive to the assembler output file unless it is built as a cross-compiler. It gets the version to use from the system header file /usr/include/stamp.h. If you install a new version of DEC Unix, you should rebuild GCC to pick up the new version stamp. !

    Note that since the Alpha is a 64-bit architecture, cross-compilers from 32-bit machines will not generate code as efficient as that generated when the compiler is running on a 64-bit machine because many optimizations that depend on being able to represent a word on the --- 115,186 ----

  • Older systems
! !
!

alpha*-*-*

This section contains general configuration information for all alpha-based platforms using ELF (in particular, ignore this section for DEC OSF/1, Digital UNIX and Tru64 UNIX). In addition to reading this section, please read all other sections that match your target. !

We require binutils 2.11.2 or newer. Previous binutils releases had a number of problems with DWARF 2 debugging information, not the least of which is incorrect linking of shared libraries. !


!

alpha*-dec-osf*

Systems using processors that implement the DEC Alpha architecture and are running the DEC/Compaq Unix (DEC OSF/1, Digital UNIX, or Compaq Tru64 UNIX) operating system, for example the DEC Alpha AXP systems. !

As of GCC 3.2, versions before alpha*-dec-osf4 are no longer supported. (These are the versions which identify themselves as DEC OSF/1.) !

In Digital Unix V4.0, virtual memory exhausted bootstrap failures may be fixed by configuring with --with-gc=simple, reconfiguring Kernel Virtual Memory and Swap parameters per the /usr/sbin/sys_check Tuning Suggestions, or applying the patch in http://gcc.gnu.org/ml/gcc/2002-08/msg00822.html. !

In Tru64 UNIX V5.1, Compaq introduced a new assembler that does not currently (2001-06-13) work with mips-tfile. As a workaround, we need to use the old assembler, invoked via the barely documented -oldas option. To bootstrap GCC, you either need to use the Compaq C Compiler: !

        % CC=cc srcdir/configure [options] [target]
!      
!

or you can use a copy of GCC 2.95.3 or higher built on Tru64 UNIX V4.0: !

        % CC=gcc -Wa,-oldas srcdir/configure [options] [target]
!      
!

As of GNU binutils 2.11.2, neither GNU as nor GNU ld are supported on Tru64 UNIX, so you must not configure GCC with --with-gnu-as or --with-gnu-ld. !

The --enable-threads options isn't supported yet. A patch is in preparation for a future release. !

GCC writes a .verstamp directive to the assembler output file unless it is built as a cross-compiler. It gets the version to use from the system header file /usr/include/stamp.h. If you install a new version of DEC Unix, you should rebuild GCC to pick up the new version stamp. !

Note that since the Alpha is a 64-bit architecture, cross-compilers from 32-bit machines will not generate code as efficient as that generated when the compiler is running on a 64-bit machine because many optimizations that depend on being able to represent a word on the *************** target in an integral value on the host *** 179,185 **** cross-compilers on the Alpha for 32-bit machines has only been tested in a few cases and may not work properly. !

make compare may fail on old versions of DEC Unix unless you add -save-temps to CFLAGS. On these systems, the name of the assembler input file is stored in the object file, and that makes comparison fail if it differs between the stage1 and --- 188,194 ---- cross-compilers on the Alpha for 32-bit machines has only been tested in a few cases and may not work properly. !

make compare may fail on old versions of DEC Unix unless you add -save-temps to CFLAGS. On these systems, the name of the assembler input file is stored in the object file, and that makes comparison fail if it differs between the stage1 and *************** unless the comparisons fail without that *** 190,201 **** -save-temps, you will have to manually delete the .i and .s files after each series of compilations. !

GCC now supports both the native (ECOFF) debugging format used by DBX and GDB and an encapsulated STABS format for use only with GDB. See the discussion of the --with-stabs option of configure above for more information on these formats and how to select them. !

There is a bug in DEC's assembler that produces incorrect line numbers for ECOFF format when the .align directive is used. To work around this problem, GCC will not emit such alignment directives while writing ECOFF format debugging information even if optimization is --- 199,210 ---- -save-temps, you will have to manually delete the .i and .s files after each series of compilations. !

GCC now supports both the native (ECOFF) debugging format used by DBX and GDB and an encapsulated STABS format for use only with GDB. See the discussion of the --with-stabs option of configure above for more information on these formats and how to select them. !

There is a bug in DEC's assembler that produces incorrect line numbers for ECOFF format when the .align directive is used. To work around this problem, GCC will not emit such alignment directives while writing ECOFF format debugging information even if optimization is *************** being performed. Unfortunately, this ha *** 203,302 **** side-effect that code addresses when -O is specified are different depending on whether or not -g is also specified. !

To avoid this behavior, specify -gstabs+ and use GDB instead of DBX. DEC is now aware of this problem with the assembler and hopes to provide a fix shortly. !


!

alphaev5-cray-unicosmk*

Cray T3E systems running Unicos/Mk. !

This port is incomplete and has many known bugs. We hope to improve the support for this target soon. Currently, only the C front end is supported, and it is not possible to build parallel applications. Cray modules are not supported; in particular, Craylibs are assumed to be in /opt/ctl/craylibs/craylibs. !

You absolutely must use GNU make on this platform. Also, you need to tell GCC where to find the assembler and the linker. The simplest way to do so is by providing --with-as and --with-ld to configure, e.g. !

    configure --with-as=/opt/ctl/bin/cam --with-ld=/opt/ctl/bin/cld \
!       --enable-languages=c
! 
!

The comparison test during make bootstrap fails on Unicos/Mk because the assembler inserts timestamps into object files. You should be able to work around this by doing make all after getting this failure. !


!

arc-*-elf

Argonaut ARC processor. This configuration is intended for embedded systems. !


!

arm-*-aout

This configuration is obsoleted in GCC 3.3. !

Advanced RISC Machines ARM-family processors. These are often used in embedded applications. There are no standard Unix configurations. This configuration corresponds to the basic instruction sequences and will produce a.out format object modules. !

You may need to make a variant of the file arm.h for your particular configuration. !


!

arm-*-elf

This configuration is intended for embedded systems. !


!

arm*-*-linux-gnu

We require GNU binutils 2.10 or newer. !


!

avr

ATMEL AVR-family micro controllers. These are used in embedded applications. There are no standard Unix configurations. See "AVR Options" in the main manual for the list of supported MCU types. !

Use configure --target=avr --enable-languages="c" to configure GCC. !

Further installation notes and other useful information about AVR tools can also be obtained from: !

!

We strongly recommend using binutils 2.13 or newer. !

The following error: !

  Error: register required
! 
!

indicates that you should upgrade to a newer version of the binutils. !


!

c4x

Texas Instruments TMS320C3x and TMS320C4x Floating Point Digital Signal Processors. These are used in embedded applications. There are no --- 212,311 ---- side-effect that code addresses when -O is specified are different depending on whether or not -g is also specified. !

To avoid this behavior, specify -gstabs+ and use GDB instead of DBX. DEC is now aware of this problem with the assembler and hopes to provide a fix shortly. !


!

alphaev5-cray-unicosmk*

Cray T3E systems running Unicos/Mk. !

This port is incomplete and has many known bugs. We hope to improve the support for this target soon. Currently, only the C front end is supported, and it is not possible to build parallel applications. Cray modules are not supported; in particular, Craylibs are assumed to be in /opt/ctl/craylibs/craylibs. !

You absolutely must use GNU make on this platform. Also, you need to tell GCC where to find the assembler and the linker. The simplest way to do so is by providing --with-as and --with-ld to configure, e.g. !

         configure --with-as=/opt/ctl/bin/cam --with-ld=/opt/ctl/bin/cld \
!            --enable-languages=c
!      
!

The comparison test during make bootstrap fails on Unicos/Mk because the assembler inserts timestamps into object files. You should be able to work around this by doing make all after getting this failure. !


!

arc-*-elf

Argonaut ARC processor. This configuration is intended for embedded systems. !


!

arm-*-aout

This configuration is obsoleted in GCC 3.3. !

Advanced RISC Machines ARM-family processors. These are often used in embedded applications. There are no standard Unix configurations. This configuration corresponds to the basic instruction sequences and will produce a.out format object modules. !

You may need to make a variant of the file arm.h for your particular configuration. !


!

arm-*-elf

This configuration is intended for embedded systems. !


!

arm*-*-linux-gnu

We require GNU binutils 2.10 or newer. !


!

avr

ATMEL AVR-family micro controllers. These are used in embedded applications. There are no standard Unix configurations. See "AVR Options" in the main manual for the list of supported MCU types. !

Use configure --target=avr --enable-languages="c" to configure GCC. !

Further installation notes and other useful information about AVR tools can also be obtained from: !

!

We strongly recommend using binutils 2.13 or newer. !

The following error: !

       Error: register required
!      
!

indicates that you should upgrade to a newer version of the binutils. !


!

c4x

Texas Instruments TMS320C3x and TMS320C4x Floating Point Digital Signal Processors. These are used in embedded applications. There are no *************** standard Unix configurations. *** 304,385 **** See "TMS320C3x/C4x Options" in the main manual for the list of supported MCU types. !

GCC can be configured as a cross compiler for both the C3x and C4x architectures on the same system. Use configure --target=c4x --enable-languages="c,c++" to configure. !

Further installation notes and other useful information about C4x tools can also be obtained from: !

!
!

CRIS

CRIS is the CPU architecture in Axis Communications ETRAX system-on-a-chip series. These are used in embedded applications. !

See "CRIS Options" in the main manual for a list of CRIS-specific options. !

There are a few different CRIS targets: !

cris-axis-aout !
Old target. Includes a multilib for the elinux a.out-based target. No multilibs for newer architecture variants.
cris-axis-elf !
Mainly for monolithic embedded systems. Includes a multilib for the v10 core used in ETRAX 100 LX.
cris-axis-linux-gnu !
A GNU/Linux port for the CRIS architecture, currently targeting ETRAX 100 LX by default.
!

For cris-axis-aout and cris-axis-elf you need binutils 2.11 or newer. For cris-axis-linux-gnu you need binutils 2.12 or newer. !

Pre-packaged tools can be obtained from ftp://ftp.axis.com/pub/axis/tools/cris/compiler-kit/. More information about this platform is available at http://developer.axis.com/. !


!

DOS

Please have a look at our binaries page. !

You cannot install GCC by itself on MSDOS; it will not compile under any MSDOS compiler except itself. You need to get the complete compilation package DJGPP, which includes binaries as well as sources, and includes all the necessary compilation tools and libraries. !


!

dsp16xx

A port to the AT&T DSP1610 family of processors. !


!

*-*-freebsd*

The version of binutils installed in /usr/bin is known to work unless otherwise specified in any per-architecture notes. However, binutils 2.12.1 or greater is known to improve overall testsuite results. !

Support for FreeBSD 1 was discontinued in GCC 3.2. !

For FreeBSD 2 or any mutant a.out versions of FreeBSD 3: All configuration support and files as shipped with GCC 2.95 are still in place. FreeBSD 2.2.7 has been known to bootstrap completely; however, it is unknown which version of binutils was used (it is assumed that it was the system copy in /usr/bin) and C++ EH failures were noted. !

For FreeBSD using the ELF file format: DWARF 2 debugging is now the default for all CPU architectures. It had been the default on FreeBSD/alpha since its inception. You may use -gstabs instead of -g, if you really want the old debugging format. There are --- 313,394 ---- See "TMS320C3x/C4x Options" in the main manual for the list of supported MCU types. !

GCC can be configured as a cross compiler for both the C3x and C4x architectures on the same system. Use configure --target=c4x --enable-languages="c,c++" to configure. !

Further installation notes and other useful information about C4x tools can also be obtained from: !

!
!

CRIS

CRIS is the CPU architecture in Axis Communications ETRAX system-on-a-chip series. These are used in embedded applications. !

See "CRIS Options" in the main manual for a list of CRIS-specific options. !

There are a few different CRIS targets: !

cris-axis-aout !
Old target. Includes a multilib for the elinux a.out-based target. No multilibs for newer architecture variants.
cris-axis-elf !
Mainly for monolithic embedded systems. Includes a multilib for the v10 core used in ETRAX 100 LX.
cris-axis-linux-gnu !
A GNU/Linux port for the CRIS architecture, currently targeting ETRAX 100 LX by default.
!

For cris-axis-aout and cris-axis-elf you need binutils 2.11 or newer. For cris-axis-linux-gnu you need binutils 2.12 or newer. !

Pre-packaged tools can be obtained from ftp://ftp.axis.com/pub/axis/tools/cris/compiler-kit/. More information about this platform is available at http://developer.axis.com/. !


!

DOS

Please have a look at our binaries page. !

You cannot install GCC by itself on MSDOS; it will not compile under any MSDOS compiler except itself. You need to get the complete compilation package DJGPP, which includes binaries as well as sources, and includes all the necessary compilation tools and libraries. !


!

dsp16xx

A port to the AT&T DSP1610 family of processors. !


!

*-*-freebsd*

The version of binutils installed in /usr/bin is known to work unless otherwise specified in any per-architecture notes. However, binutils 2.12.1 or greater is known to improve overall testsuite results. !

Support for FreeBSD 1 was discontinued in GCC 3.2. !

For FreeBSD 2 or any mutant a.out versions of FreeBSD 3: All configuration support and files as shipped with GCC 2.95 are still in place. FreeBSD 2.2.7 has been known to bootstrap completely; however, it is unknown which version of binutils was used (it is assumed that it was the system copy in /usr/bin) and C++ EH failures were noted. !

For FreeBSD using the ELF file format: DWARF 2 debugging is now the default for all CPU architectures. It had been the default on FreeBSD/alpha since its inception. You may use -gstabs instead of -g, if you really want the old debugging format. There are *************** results on FreeBSD 4.8-STABLE and 5-CURR *** 393,399 **** bootstrap and check with good results on FreeBSD 3.0, 3.4, 4.0, 4.2, 4.3, 4.4, 4.5-STABLE. !

In principle, --enable-threads is now compatible with --enable-libgcj on FreeBSD. However, it has only been built and tested on i386-*-freebsd[45] and alpha-*-freebsd[45]. The static --- 402,408 ---- bootstrap and check with good results on FreeBSD 3.0, 3.4, 4.0, 4.2, 4.3, 4.4, 4.5-STABLE. !

In principle, --enable-threads is now compatible with --enable-libgcj on FreeBSD. However, it has only been built and tested on i386-*-freebsd[45] and alpha-*-freebsd[45]. The static *************** libjava) exposes severe threaded signal- *** 405,499 **** supported by FreeBSD will require additional configuration tuning in, at the very least, both boehm-gc and libffi. !

Shared libgcc_s.so is now built and installed by default. !


!

h8300-hms

Renesas H8/300 series of processors. !

Please have a look at our binaries page. !

The calling convention and structure layout has changed in release 2.6. All code must be recompiled. The calling convention now passes the first three arguments in function calls in registers. Structures are no longer a multiple of 2 bytes. !


!

hppa*-hp-hpux*

Support for HP-UX versions 7, 8, and 9 is obsoleted in GCC 3.3. !

We highly recommend using gas/binutils 2.8 or newer on all hppa platforms; you may encounter a variety of problems when using the HP assembler. !

Specifically, -g does not work on HP-UX (since that system uses a peculiar debugging format which GCC does not know about), unless you use GAS and GDB and configure GCC with the --with-gnu-as and ! --with-as=... options. !

If you wish to use the pa-risc 2.0 architecture support with a 32-bit runtime, you must use either the HP assembler, gas/binutils 2.11 or newer, or a recent snapshot of gas. !

There are two default scheduling models for instructions. These are PROCESSOR_7100LC and PROCESSOR_8000. They are selected from the pa-risc architecture specified for the target machine when configuring. PROCESSOR_8000 is the default. PROCESSOR_7100LC is selected when the target is a hppa1* machine. !

The PROCESSOR_8000 model is not well suited to older processors. Thus, it is important to completely specify the machine architecture when configuring if you want a model other than PROCESSOR_8000. The macro TARGET_SCHED_DEFAULT can be defined in BOOT_CFLAGS if a different default scheduling model is desired. !

More specific information to hppa*-hp-hpux* targets follows. !


!

hppa*-hp-hpux9

Support for this system is obsoleted in GCC 3.3. !

The HP assembler has major problems on this platform. We've tried to work around the worst of the problems. However, those workarounds may be causing linker crashes in some circumstances; the workarounds also probably prevent shared libraries from working. Use the GNU assembler to avoid these problems. !

The configuration scripts for GCC will also trigger a bug in the hpux9 shell. To avoid this problem set CONFIG_SHELL to /bin/ksh and SHELL to /bin/ksh in your environment. !


!

hppa*-hp-hpux10

For hpux10.20, we highly recommend you pick up the latest sed patch PHCO_19798 from HP. HP has two sites which provide patches free of charge: !

!

The HP assembler on these systems is much better than the hpux9 assembler, but still has some problems. Most notably the assembler inserts timestamps into each object file it creates, causing the 3-stage comparison test to fail during a make bootstrap. You should be able to continue by saying make all after getting the failure from make bootstrap. !


!

hppa*-hp-hpux11

GCC 3.0 and up support HP-UX 11. On 64-bit capable systems, there are two distinct ports. The hppa2.0w-hp-hpux11* port generates --- 414,508 ---- supported by FreeBSD will require additional configuration tuning in, at the very least, both boehm-gc and libffi. !

Shared libgcc_s.so is now built and installed by default. !


!

h8300-hms

Renesas H8/300 series of processors. !

Please have a look at our binaries page. !

The calling convention and structure layout has changed in release 2.6. All code must be recompiled. The calling convention now passes the first three arguments in function calls in registers. Structures are no longer a multiple of 2 bytes. !


!

hppa*-hp-hpux*

Support for HP-UX versions 7, 8, and 9 is obsoleted in GCC 3.3. !

We highly recommend using gas/binutils 2.8 or newer on all hppa platforms; you may encounter a variety of problems when using the HP assembler. !

Specifically, -g does not work on HP-UX (since that system uses a peculiar debugging format which GCC does not know about), unless you use GAS and GDB and configure GCC with the --with-gnu-as and ! --with-as=... options. !

If you wish to use the pa-risc 2.0 architecture support with a 32-bit runtime, you must use either the HP assembler, gas/binutils 2.11 or newer, or a recent snapshot of gas. !

There are two default scheduling models for instructions. These are PROCESSOR_7100LC and PROCESSOR_8000. They are selected from the pa-risc architecture specified for the target machine when configuring. PROCESSOR_8000 is the default. PROCESSOR_7100LC is selected when the target is a hppa1* machine. !

The PROCESSOR_8000 model is not well suited to older processors. Thus, it is important to completely specify the machine architecture when configuring if you want a model other than PROCESSOR_8000. The macro TARGET_SCHED_DEFAULT can be defined in BOOT_CFLAGS if a different default scheduling model is desired. !

More specific information to hppa*-hp-hpux* targets follows. !


!

hppa*-hp-hpux9

Support for this system is obsoleted in GCC 3.3. !

The HP assembler has major problems on this platform. We've tried to work around the worst of the problems. However, those workarounds may be causing linker crashes in some circumstances; the workarounds also probably prevent shared libraries from working. Use the GNU assembler to avoid these problems. !

The configuration scripts for GCC will also trigger a bug in the hpux9 shell. To avoid this problem set CONFIG_SHELL to /bin/ksh and SHELL to /bin/ksh in your environment. !


!

hppa*-hp-hpux10

For hpux10.20, we highly recommend you pick up the latest sed patch PHCO_19798 from HP. HP has two sites which provide patches free of charge: !

!

The HP assembler on these systems is much better than the hpux9 assembler, but still has some problems. Most notably the assembler inserts timestamps into each object file it creates, causing the 3-stage comparison test to fail during a make bootstrap. You should be able to continue by saying make all after getting the failure from make bootstrap. !


!

hppa*-hp-hpux11

GCC 3.0 and up support HP-UX 11. On 64-bit capable systems, there are two distinct ports. The hppa2.0w-hp-hpux11* port generates *************** set your PATH or define It is best to explicitly configure the hppa64-hp-hpux11* target ! with the --with-ld=... option. We support both the HP and GNU linkers for this target. The two linkers require different link commands. Thus, it's not possible to switch linkers during a GCC build. This has been been reported to occur in a unified build of binutils and GCC. !

GCC 2.95.x is not supported under HP-UX 11 and cannot be used to compile GCC 3.0 and up. Refer to binaries for information about obtaining precompiled GCC binaries for HP-UX. !

You must use GNU binutils 2.11 or above with the 32-bit port. Thread support is not currently implemented, so --enable-threads does not work. See: !

!

GCC 3.3 and later support weak symbols on the 32-bit port using SOM secondary definition symbols. This feature is not enabled for earlier versions of HP-UX since there have been bugs in the linker support for secondary symbols. The HP linker patches PHSS_26559 and --- 514,540 ---- compiler for the initial bootstrap. Different prefixes must be used if both ports are to be installed on the same system. !

It is best to explicitly configure the hppa64-hp-hpux11* target ! with the --with-ld=... option. We support both the HP and GNU linkers for this target. The two linkers require different link commands. Thus, it's not possible to switch linkers during a GCC build. This has been been reported to occur in a unified build of binutils and GCC. !

GCC 2.95.x is not supported under HP-UX 11 and cannot be used to compile GCC 3.0 and up. Refer to binaries for information about obtaining precompiled GCC binaries for HP-UX. !

You must use GNU binutils 2.11 or above with the 32-bit port. Thread support is not currently implemented, so --enable-threads does not work. See: !

!

GCC 3.3 and later support weak symbols on the 32-bit port using SOM secondary definition symbols. This feature is not enabled for earlier versions of HP-UX since there have been bugs in the linker support for secondary symbols. The HP linker patches PHSS_26559 and *************** secondary symbols. The HP linker patche *** 533,539 **** problem of linker core dumps creating C++ libraries. Earlier patches may work but they have not been tested. !

GCC 3.3 nows uses the ELF DT_INIT_ARRAY and DT_FINI_ARRAY capability to run initializers and finalizers on the 64-bit port. The feature requires CVS binutils as of January 2, 2003, or a subsequent release to correct a problem arising from HP's non-standard use of the .init --- 542,548 ---- problem of linker core dumps creating C++ libraries. Earlier patches may work but they have not been tested. !

GCC 3.3 nows uses the ELF DT_INIT_ARRAY and DT_FINI_ARRAY capability to run initializers and finalizers on the 64-bit port. The feature requires CVS binutils as of January 2, 2003, or a subsequent release to correct a problem arising from HP's non-standard use of the .init *************** and +fini options. As with *** 542,555 **** there have been bugs in the order in which these options are executed by the HP linker. So, again a recent linker patch is recommended. !

The HP assembler has many limitations and is not recommended for either the 32 or 64-bit ports. For example, it does not support weak symbols or alias definitions. As a result, explicit template instantiations are required when using C++. This will make it difficult if not impossible to build many C++ applications. You also can't generate debugging information when using the HP assembler with GCC. !

There are a number of issues to consider in selecting which linker to use with the 64-bit port. The GNU 64-bit linker can only create dynamic binaries. The -static option causes linking with archive libraries but doesn't produce a truly static binary. Dynamic binaries --- 551,564 ---- there have been bugs in the order in which these options are executed by the HP linker. So, again a recent linker patch is recommended. !

The HP assembler has many limitations and is not recommended for either the 32 or 64-bit ports. For example, it does not support weak symbols or alias definitions. As a result, explicit template instantiations are required when using C++. This will make it difficult if not impossible to build many C++ applications. You also can't generate debugging information when using the HP assembler with GCC. !

There are a number of issues to consider in selecting which linker to use with the 64-bit port. The GNU 64-bit linker can only create dynamic binaries. The -static option causes linking with archive libraries but doesn't produce a truly static binary. Dynamic binaries *************** dynamic-loader-defined symbols. The def *** 558,567 **** is the same as the GNU linker. However, it can generate true 64-bit static binaries using the +compat option. !

The HP 64-bit linker doesn't support linkonce semantics. As a result, C++ programs have many more sections than they should. !

The GNU 64-bit linker has some issues with shared library support and exceptions. As a result, we only support libgcc in archive format. For similar reasons, dwarf2 unwind and exception support are disabled. The GNU linker also has problems creating binaries --- 567,576 ---- is the same as the GNU linker. However, it can generate true 64-bit static binaries using the +compat option. !

The HP 64-bit linker doesn't support linkonce semantics. As a result, C++ programs have many more sections than they should. !

The GNU 64-bit linker has some issues with shared library support and exceptions. As a result, we only support libgcc in archive format. For similar reasons, dwarf2 unwind and exception support are disabled. The GNU linker also has problems creating binaries *************** with -static. It doesn't p *** 569,610 **** calls to global functions in shared libraries, so these calls can't be overloaded. !

There are several possible approaches to building the distribution. Binutils can be built first using the HP tools. Then, the GCC distribution can be built. The second approach is to build GCC first using the HP tools, then build binutils, then rebuild GCC. There have been problems with various binary distributions, so it is best not to start from a binary distribution. !

When starting with a HP compiler, it is preferable to use the ANSI compiler as the bundled compiler only supports traditional C. Bootstrapping with the bundled compiler is tested infrequently and problems often arise because of the subtle differences in semantics between traditional and ISO C. !

This port still is undergoing significant development. !


!

i370-*-*

This port is very preliminary and has many known bugs. We hope to have a higher-quality port for this machine soon. !


!

*-*-linux-gnu

Versions of libstdc++-v3 starting with 3.2.1 require bugfixes present in glibc 2.2.5 and later. More information is available in the libstdc++-v3 documentation. !

If you use glibc 2.2 (or 2.1.9x), GCC 2.95.2 won't install out-of-the-box. You'll get compile errors while building libstdc++. The patch glibc-2.2.patch, that is to be applied in the GCC source tree, fixes the compatibility problems. !

Currently Glibc 2.2.3 (and older releases) and GCC 3.0 are out of sync since the latest exception handling changes for GCC. Compiling glibc with GCC 3.0 will give a binary incompatible glibc and therefore cause lots of problems and might make your system completely unusable. This --- 578,619 ---- calls to global functions in shared libraries, so these calls can't be overloaded. !

There are several possible approaches to building the distribution. Binutils can be built first using the HP tools. Then, the GCC distribution can be built. The second approach is to build GCC first using the HP tools, then build binutils, then rebuild GCC. There have been problems with various binary distributions, so it is best not to start from a binary distribution. !

When starting with a HP compiler, it is preferable to use the ANSI compiler as the bundled compiler only supports traditional C. Bootstrapping with the bundled compiler is tested infrequently and problems often arise because of the subtle differences in semantics between traditional and ISO C. !

This port still is undergoing significant development. !


!

i370-*-*

This port is very preliminary and has many known bugs. We hope to have a higher-quality port for this machine soon. !


!

*-*-linux-gnu

Versions of libstdc++-v3 starting with 3.2.1 require bugfixes present in glibc 2.2.5 and later. More information is available in the libstdc++-v3 documentation. !

If you use glibc 2.2 (or 2.1.9x), GCC 2.95.2 won't install out-of-the-box. You'll get compile errors while building libstdc++. The patch glibc-2.2.patch, that is to be applied in the GCC source tree, fixes the compatibility problems. !

Currently Glibc 2.2.3 (and older releases) and GCC 3.0 are out of sync since the latest exception handling changes for GCC. Compiling glibc with GCC 3.0 will give a binary incompatible glibc and therefore cause lots of problems and might make your system completely unusable. This *************** strongly advise to wait for glibc 2.2.4 *** 613,660 **** glibc 2.2.4 whether patches for GCC 3.0 are needed. You can use glibc 2.2.3 with GCC 3.0, just do not try to recompile it. !


!

i?86-*-linux*aout

Use this configuration to generate a.out binaries on Linux-based GNU systems. This configuration is being superseded. You must use gas/binutils version 2.5.2 or later. !


!

i?86-*-linux*

As of GCC 3.3, binutils 2.13.1 or later is required for this platform. See bug 10877 for more information. !

If you receive Signal 11 errors when building on GNU/Linux, then it is possible you have a hardware problem. Further information on this can be found on www.bitwizard.nl. !


!

i?86-*-sco

Compilation with RCC is recommended. Also, it may be a good idea to link with GNU malloc instead of the malloc that comes with the system. !


!

i?86-*-sco3.2v5*

Use this for the SCO OpenServer Release 5 family of operating systems. !

Unlike earlier versions of GCC, the ability to generate COFF with this target is no longer provided. !

Earlier versions of GCC emitted DWARF 1 when generating ELF to allow the system debugger to be used. That support was too burdensome to maintain. GCC now emits only DWARF 2 for this target. This means you may use either the UDK debugger or GDB to debug programs built by this version of GCC. !

GCC is now only supported on releases 5.0.4 and later, and requires that you install Support Level Supplement OSS646B or later, and the latest version of the Supplement Graphics, Web and X11 Libraries (GWXLIBS) package. If you are using release 5.0.7 of OpenServer, you must have at --- 622,669 ---- glibc 2.2.4 whether patches for GCC 3.0 are needed. You can use glibc 2.2.3 with GCC 3.0, just do not try to recompile it. !


!

i?86-*-linux*aout

Use this configuration to generate a.out binaries on Linux-based GNU systems. This configuration is being superseded. You must use gas/binutils version 2.5.2 or later. !


!

i?86-*-linux*

As of GCC 3.3, binutils 2.13.1 or later is required for this platform. See bug 10877 for more information. !

If you receive Signal 11 errors when building on GNU/Linux, then it is possible you have a hardware problem. Further information on this can be found on www.bitwizard.nl. !


!

i?86-*-sco

Compilation with RCC is recommended. Also, it may be a good idea to link with GNU malloc instead of the malloc that comes with the system. !


!

i?86-*-sco3.2v5*

Use this for the SCO OpenServer Release 5 family of operating systems. !

Unlike earlier versions of GCC, the ability to generate COFF with this target is no longer provided. !

Earlier versions of GCC emitted DWARF 1 when generating ELF to allow the system debugger to be used. That support was too burdensome to maintain. GCC now emits only DWARF 2 for this target. This means you may use either the UDK debugger or GDB to debug programs built by this version of GCC. !

GCC is now only supported on releases 5.0.4 and later, and requires that you install Support Level Supplement OSS646B or later, and the latest version of the Supplement Graphics, Web and X11 Libraries (GWXLIBS) package. If you are using release 5.0.7 of OpenServer, you must have at *************** and *** 672,678 **** ftp://ftp.sco.com/pub/openserver5/opensrc for the latest versions of these (and other potentially useful) supplements. !

Although there is support for using the native assembler, it is recommended that you configure GCC to use the GNU assembler. You do this by using the flags --with-gnu-as. You should use a modern version of GNU binutils. Version 2.14 was used for all --- 681,687 ---- ftp://ftp.sco.com/pub/openserver5/opensrc for the latest versions of these (and other potentially useful) supplements. !

Although there is support for using the native assembler, it is recommended that you configure GCC to use the GNU assembler. You do this by using the flags --with-gnu-as. You should use a modern version of GNU binutils. Version 2.14 was used for all *************** SCO web and ftp sites for details. That *** 683,691 **** currently "officially supported" version of GCC, version 2.95.3. It is useful for bootstrapping this version. !


!

i?86-*-udk

This target emulates the SCO Universal Development Kit and requires that package be installed. (If it is installed, you will have a --- 692,700 ---- currently "officially supported" version of GCC, version 2.95.3. It is useful for bootstrapping this version. !


!

i?86-*-udk

This target emulates the SCO Universal Development Kit and requires that package be installed. (If it is installed, you will have a *************** default compiler such as OpenServer 5 or *** 696,735 **** generate binaries that will run on OpenServer, Unixware 2, or Unixware 7, with the same warnings and caveats as the SCO UDK. !

This target is a little tricky to build because we have to distinguish it from the native tools (so it gets headers, startups, and libraries from the right place) while making the tools not think we're actually building a cross compiler. The easiest way to do this is with a configure command like this: !

    CC=/udk/usr/ccs/bin/cc /your/path/to/gcc/configure \
!       --host=i686-pc-udk --target=i686-pc-udk --program-prefix=udk-
! 
!

You should substitute i686 in the above command with the appropriate processor for your host. !

After the usual make bootstrap and make install, you can then access the UDK-targeted GCC tools by adding udk- before the commonly known name. For example, to invoke the C compiler, you would use udk-gcc. They will coexist peacefully with any native-target GCC tools you may have installed. !


!

ia64-*-linux

IA-64 processor (also known as IPF, or Itanium Processor Family) running GNU/Linux. !

The toolchain is not completely finished, so requirements will continue to change. GCC 3.0.1 and later require glibc 2.2.4. GCC 3.0.2 requires binutils from 2001-09-05 or later. GCC 3.0.1 requires binutils 2.11.1 or later. !

None of the following versions of GCC has an ABI that is compatible with any of the other versions in this list, with the exception that Red Hat 2.96 and Trillian 000171 are compatible with each other: 3.0.2, 3.0.1, 3.0, Red Hat 2.96, and Trillian 000717. --- 705,744 ---- generate binaries that will run on OpenServer, Unixware 2, or Unixware 7, with the same warnings and caveats as the SCO UDK. !

This target is a little tricky to build because we have to distinguish it from the native tools (so it gets headers, startups, and libraries from the right place) while making the tools not think we're actually building a cross compiler. The easiest way to do this is with a configure command like this: !

         CC=/udk/usr/ccs/bin/cc /your/path/to/gcc/configure \
!            --host=i686-pc-udk --target=i686-pc-udk --program-prefix=udk-
!      
!

You should substitute i686 in the above command with the appropriate processor for your host. !

After the usual make bootstrap and make install, you can then access the UDK-targeted GCC tools by adding udk- before the commonly known name. For example, to invoke the C compiler, you would use udk-gcc. They will coexist peacefully with any native-target GCC tools you may have installed. !


!

ia64-*-linux

IA-64 processor (also known as IPF, or Itanium Processor Family) running GNU/Linux. !

The toolchain is not completely finished, so requirements will continue to change. GCC 3.0.1 and later require glibc 2.2.4. GCC 3.0.2 requires binutils from 2001-09-05 or later. GCC 3.0.1 requires binutils 2.11.1 or later. !

None of the following versions of GCC has an ABI that is compatible with any of the other versions in this list, with the exception that Red Hat 2.96 and Trillian 000171 are compatible with each other: 3.0.2, 3.0.1, 3.0, Red Hat 2.96, and Trillian 000717. *************** GCC 3.0.2 is recommended for compiling l *** 740,781 **** GCC 3.0.2 is believed to be fully ABI compliant, and hence no more major ABI changes are expected. !


!

ia64-*-hpux*

Building GCC on this target requires the GNU Assembler. The bundled HP assembler will not work. To prevent GCC from using the wrong assembler, the option --with-gnu-as may be necessary. !

The GCC libunwind library has not been ported to HPUX. This means that for GCC versions 3.2.3 and earlier, --enable-libunwind-exceptions is required to build GCC. For GCC 3.3 and later, this is the default. !


!

*-lynx-lynxos

Support for SPARC LynxOS is obsoleted in GCC 3.3. !

LynxOS 2.2 and earlier comes with GCC 1.x already installed as /bin/gcc. You should compile with this instead of /bin/cc. You can tell GCC to use the GNU assembler and linker, by specifying --with-gnu-as --with-gnu-ld when configuring. These will produce COFF format object files and executables; otherwise GCC will use the installed tools, which produce a.out format executables. !


!

*-ibm-aix*

Support for AIX versions 1, 2, and 3 is obsoleted in GCC 3.3. !

AIX Make frequently has problems with GCC makefiles. GNU Make 3.76 or newer is recommended to build on this platform. !

Errors involving alloca when building GCC generally are due to an incorrect definition of CC in the Makefile or mixing files compiled with the native C compiler and GCC. During the stage1 phase of the build, the native AIX compiler must be invoked as cc --- 749,790 ---- GCC 3.0.2 is believed to be fully ABI compliant, and hence no more major ABI changes are expected. !


!

ia64-*-hpux*

Building GCC on this target requires the GNU Assembler. The bundled HP assembler will not work. To prevent GCC from using the wrong assembler, the option --with-gnu-as may be necessary. !

The GCC libunwind library has not been ported to HPUX. This means that for GCC versions 3.2.3 and earlier, --enable-libunwind-exceptions is required to build GCC. For GCC 3.3 and later, this is the default. !


!

*-lynx-lynxos

Support for SPARC LynxOS is obsoleted in GCC 3.3. !

LynxOS 2.2 and earlier comes with GCC 1.x already installed as /bin/gcc. You should compile with this instead of /bin/cc. You can tell GCC to use the GNU assembler and linker, by specifying --with-gnu-as --with-gnu-ld when configuring. These will produce COFF format object files and executables; otherwise GCC will use the installed tools, which produce a.out format executables. !


!

*-ibm-aix*

Support for AIX versions 1, 2, and 3 is obsoleted in GCC 3.3. !

AIX Make frequently has problems with GCC makefiles. GNU Make 3.76 or newer is recommended to build on this platform. !

Errors involving alloca when building GCC generally are due to an incorrect definition of CC in the Makefile or mixing files compiled with the native C compiler and GCC. During the stage1 phase of the build, the native AIX compiler must be invoked as cc *************** does not provide a definition that will *** 786,802 **** If this error occurs during stage2 or later, then the problem most likely is the version of Make (see above). !

The native as and ld are recommended for bootstrapping on AIX 4 and required for bootstrapping on AIX 5L. The GNU Assembler reports that it supports WEAK symbols on AIX 4, which causes GCC to try to utilize weak symbol functionality although it is not supported. The GNU Assembler and Linker do not support AIX 5L sufficiently to bootstrap GCC. The native AIX tools do interoperate with GCC. !

Building libstdc++.a requires a fix for an AIX Assembler bug APAR IY26685 (AIX 4.3) or APAR IY25528 (AIX 5.1). !

libstdc++ in GCC 3.2 increments the major version number of the shared object and GCC installation places the libstdc++.a shared library in a common location which will overwrite the GCC 3.1 version of the shared library. Applications either need to be --- 795,811 ---- If this error occurs during stage2 or later, then the problem most likely is the version of Make (see above). !

The native as and ld are recommended for bootstrapping on AIX 4 and required for bootstrapping on AIX 5L. The GNU Assembler reports that it supports WEAK symbols on AIX 4, which causes GCC to try to utilize weak symbol functionality although it is not supported. The GNU Assembler and Linker do not support AIX 5L sufficiently to bootstrap GCC. The native AIX tools do interoperate with GCC. !

Building libstdc++.a requires a fix for an AIX Assembler bug APAR IY26685 (AIX 4.3) or APAR IY25528 (AIX 5.1). !

libstdc++ in GCC 3.2 increments the major version number of the shared object and GCC installation places the libstdc++.a shared library in a common location which will overwrite the GCC 3.1 version of the shared library. Applications either need to be *************** be installed for runtime dynamic loading *** 807,835 **** set the F_LOADONLY flag in the shared object for each multilib libstdc++.a installed: !

Extract the shared object from each the GCC 3.1 libstdc++.a archive: !

   % ar -x libstdc++.a libstdc++.so.4
! 
!

Enable the F_LOADONLY flag so that the shared object will be available for runtime dynamic loading, but not linking: !

   % strip -e libstdc++.so.4
! 
!

Archive the runtime-only shared object in the GCC 3.2 libstdc++.a archive: !

   % ar -q libstdc++.a libstdc++.so.4
! 
!

Linking executables and shared libraries may produce warnings of duplicate symbols. The assembly files generated by GCC for AIX always have included multiple symbol definitions for certain global variable and function declarations in the original program. The warnings should not prevent the linker from producing a correct library or runnable executable. !

AIX 4.3 utilizes a "large format" archive to support both 32-bit and 64-bit object modules. The routines provided in AIX 4.3.0 and AIX 4.3.1 to parse archive libraries did not handle the new format correctly. These routines are used by GCC and result in error messages during --- 816,844 ---- set the F_LOADONLY flag in the shared object for each multilib libstdc++.a installed: !

Extract the shared object from each the GCC 3.1 libstdc++.a archive: !

        % ar -x libstdc++.a libstdc++.so.4
!      
!

Enable the F_LOADONLY flag so that the shared object will be available for runtime dynamic loading, but not linking: !

        % strip -e libstdc++.so.4
!      
!

Archive the runtime-only shared object in the GCC 3.2 libstdc++.a archive: !

        % ar -q libstdc++.a libstdc++.so.4
!      
!

Linking executables and shared libraries may produce warnings of duplicate symbols. The assembly files generated by GCC for AIX always have included multiple symbol definitions for certain global variable and function declarations in the original program. The warnings should not prevent the linker from producing a correct library or runnable executable. !

AIX 4.3 utilizes a "large format" archive to support both 32-bit and 64-bit object modules. The routines provided in AIX 4.3.0 and AIX 4.3.1 to parse archive libraries did not handle the new format correctly. These routines are used by GCC and result in error messages during *************** option of the archive command may be use *** 839,845 **** objects using the original "small format". A correct version of the routines is shipped with AIX 4.3.2 and above. !

Some versions of the AIX binder (linker) can fail with a relocation overflow severe error when the -bbigtoc option is used to link GCC-produced object files into an executable that overflows the TOC. A fix for APAR IX75823 (OVERFLOW DURING LINK WHEN USING GCC AND -BBIGTOC) is --- 848,854 ---- objects using the original "small format". A correct version of the routines is shipped with AIX 4.3.2 and above. !

Some versions of the AIX binder (linker) can fail with a relocation overflow severe error when the -bbigtoc option is used to link GCC-produced object files into an executable that overflows the TOC. A fix for APAR IX75823 (OVERFLOW DURING LINK WHEN USING GCC AND -BBIGTOC) is *************** available from IBM Customer Support and *** 847,865 **** techsupport.services.ibm.com website as PTF U455193. !

The AIX 4.3.2.1 linker (bos.rte.bind_cmds Level 4.3.2.1) will dump core with a segmentation fault when invoked by any version of GCC. A fix for APAR IX87327 is available from IBM Customer Support and from its techsupport.services.ibm.com website as PTF U461879. This fix is incorporated in AIX 4.3.3 and above. !

The initial assembler shipped with AIX 4.3.0 generates incorrect object files. A fix for APAR IX74254 (64BIT DISASSEMBLED OUTPUT FROM COMPILER FAILS TO ASSEMBLE/BIND) is available from IBM Customer Support and from its techsupport.services.ibm.com website as PTF U453956. This fix is incorporated in AIX 4.3.1 and above. !

AIX provides National Language Support (NLS). Compilers and assemblers use NLS to support locale-specific representations of various data formats including floating-point numbers (e.g., . vs , for separating decimal fractions). There have been problems reported where --- 856,874 ---- techsupport.services.ibm.com website as PTF U455193. !

The AIX 4.3.2.1 linker (bos.rte.bind_cmds Level 4.3.2.1) will dump core with a segmentation fault when invoked by any version of GCC. A fix for APAR IX87327 is available from IBM Customer Support and from its techsupport.services.ibm.com website as PTF U461879. This fix is incorporated in AIX 4.3.3 and above. !

The initial assembler shipped with AIX 4.3.0 generates incorrect object files. A fix for APAR IX74254 (64BIT DISASSEMBLED OUTPUT FROM COMPILER FAILS TO ASSEMBLE/BIND) is available from IBM Customer Support and from its techsupport.services.ibm.com website as PTF U453956. This fix is incorporated in AIX 4.3.1 and above. !

AIX provides National Language Support (NLS). Compilers and assemblers use NLS to support locale-specific representations of various data formats including floating-point numbers (e.g., . vs , for separating decimal fractions). There have been problems reported where *************** GCC does not produce the same floating-p *** 867,1061 **** expects. If one encounters this problem, set the LANG environment variable to C or En_US. !

By default, GCC for AIX 4.1 and above produces code that can be used on both Power or PowerPC processors. !

A default can be specified with the -mcpu=cpu_type ! switch and using the configure option --with-cpu-cpu_type. !


!

ip2k-*-elf

Ubicom IP2022 micro controller. This configuration is intended for embedded systems. There are no standard Unix configurations. !

Use configure --target=ip2k-elf --enable-languages=c to configure GCC. !


!

m32r-*-elf

Renesas M32R processor. This configuration is intended for embedded systems. !


!

m68000-hp-bsd

Support for this system is obsoleted in GCC 3.3. !

HP 9000 series 200 running BSD. Note that the C compiler that comes with this system cannot compile GCC; contact law@cygnus.com to get binaries of GCC for bootstrapping. !


!

m6811-elf

Motorola 68HC11 family micro controllers. These are used in embedded applications. There are no standard Unix configurations. !


!

m6812-elf

Motorola 68HC12 family micro controllers. These are used in embedded applications. There are no standard Unix configurations. !


!

m68k-att-sysv

Support for this system is obsoleted in GCC 3.3. !

AT&T 3b1, a.k.a. 7300 PC. This version of GCC cannot be compiled with the system C compiler, which is too buggy. You will need to get a previous version of GCC and use it to bootstrap. Binaries are available from the OSU-CIS archive, at ftp://ftp.uu.net/systems/att7300/. !


!

m68k-crds-unos

Support for this system is obsoleted in GCC 3.3. !

Use configure unos for building on Unos. !

The Unos assembler is named casm instead of as. For some strange reason linking /bin/as to /bin/casm changes the behavior, and does not work. So, when installing GCC, you should install the following script as as in the subdirectory where the passes of GCC are installed: !

#!/bin/sh
! casm $*
! 
!

The default Unos library is named libunos.a instead of libc.a. To allow GCC to function, either change all references to -lc in gcc.c to -lunos or link /lib/libc.a to /lib/libunos.a. !

When compiling GCC with the standard compiler, to overcome bugs in the support of alloca, do not use -O when making stage 2. Then use the stage 2 compiler with -O to make the stage 3 compiler. This compiler will have the same characteristics as the usual stage 2 compiler on other systems. Use it to make a stage 4 compiler and compare that with stage 3 to verify proper compilation. !

(Perhaps simply defining ALLOCA in x-crds as described in the comments there will make the above paragraph superfluous. Please inform us of whether this works.) !

Unos uses memory segmentation instead of demand paging, so you will need a lot of memory. 5 Mb is barely enough if no other tasks are running. If linking cc1 fails, try putting the object files into a library and linking from that library. !


!

m68k-hp-hpux

HP 9000 series 300 or 400 running HP-UX. HP-UX version 8.0 has a bug in the assembler that prevents compilation of GCC. This bug manifests itself during the first stage of compilation, while building libgcc2.a: !

_floatdisf
! cc1: warning: `-g' option not supported on this version of GCC
! cc1: warning: `-g1' option not supported on this version of GCC
! ./xgcc: Internal compiler error: program as got fatal signal 11
! 
!

A patched version of the assembler is available as the file ftp://altdorf.ai.mit.edu/archive/cph/hpux-8.0-assembler. If you have HP software support, the patch can also be obtained directly from HP, as described in the following note: !

This is the patched assembler, to patch SR#1653-010439, where the assembler aborts on floating point constants. !

The bug is not really in the assembler, but in the shared library version of the function "cvtnum(3c)". The bug on "cvtnum(3c)" is SR#4701-078451. Anyway, the attached assembler uses the archive library version of "cvtnum(3c)" and thus does not exhibit the bug.

!

This patch is also known as PHCO_4484. !

In addition, if you wish to use gas, you must use gas version 2.1 or later, and you must use the GNU linker version 2.1 or later. Earlier versions of gas relied upon a program which converted the gas output into the native HP-UX format, but that program has not been kept up to date. gdb does not understand that native HP-UX format, so you must use gas if you wish to use gdb. !

On HP-UX version 8.05, but not on 8.07 or more recent versions, the fixproto shell script triggers a bug in the system shell. If you encounter this problem, upgrade your operating system or use BASH (the GNU shell) to run fixproto. This bug will cause the fixproto program to report an error of the form: !

./fixproto: sh internal 1K buffer overflow
! 
!

To fix this, you can also change the first line of the fixproto script to look like: !

#!/bin/ksh
! 
!
!

m68k-ncr-*

Support for this system is obsoleted in GCC 3.3. !

On the Tower models 4n0 and 6n0, by default a process is not allowed to have more than one megabyte of memory. GCC cannot compile itself (or many other programs) with -O in that much memory. !

To solve this problem, reconfigure the kernel adding the following line to the configuration file: !

MAXUMEM = 4096
! 
!
!

m68k-sun

Support for this system is obsoleted in GCC 3.3. !

Sun 3. We do not provide a configuration file to use the Sun FPA by default, because programs that establish signal handlers for floating point traps inherently cannot work with the FPA. !


!

m68k-sun-sunos4.1.1

Support for this system is obsoleted in GCC 3.3. !

It is reported that you may need the GNU assembler on this platform. !


!

mips-*-*

If on a MIPS system you get an error message saying "does not have gp sections for all it's [sic] sectons [sic]", don't worry about it. This --- 876,1070 ---- expects. If one encounters this problem, set the LANG environment variable to C or En_US. !

By default, GCC for AIX 4.1 and above produces code that can be used on both Power or PowerPC processors. !

A default can be specified with the -mcpu=cpu_type ! switch and using the configure option --with-cpu-cpu_type. !


!

ip2k-*-elf

Ubicom IP2022 micro controller. This configuration is intended for embedded systems. There are no standard Unix configurations. !

Use configure --target=ip2k-elf --enable-languages=c to configure GCC. !


!

m32r-*-elf

Renesas M32R processor. This configuration is intended for embedded systems. !


!

m68000-hp-bsd

Support for this system is obsoleted in GCC 3.3. !

HP 9000 series 200 running BSD. Note that the C compiler that comes with this system cannot compile GCC; contact law@cygnus.com to get binaries of GCC for bootstrapping. !


!

m6811-elf

Motorola 68HC11 family micro controllers. These are used in embedded applications. There are no standard Unix configurations. !


!

m6812-elf

Motorola 68HC12 family micro controllers. These are used in embedded applications. There are no standard Unix configurations. !


!

m68k-att-sysv

Support for this system is obsoleted in GCC 3.3. !

AT&T 3b1, a.k.a. 7300 PC. This version of GCC cannot be compiled with the system C compiler, which is too buggy. You will need to get a previous version of GCC and use it to bootstrap. Binaries are available from the OSU-CIS archive, at ftp://ftp.uu.net/systems/att7300/. !


!

m68k-crds-unos

Support for this system is obsoleted in GCC 3.3. !

Use configure unos for building on Unos. !

The Unos assembler is named casm instead of as. For some strange reason linking /bin/as to /bin/casm changes the behavior, and does not work. So, when installing GCC, you should install the following script as as in the subdirectory where the passes of GCC are installed: !

     #!/bin/sh
!      casm $*
!      
!

The default Unos library is named libunos.a instead of libc.a. To allow GCC to function, either change all references to -lc in gcc.c to -lunos or link /lib/libc.a to /lib/libunos.a. !

When compiling GCC with the standard compiler, to overcome bugs in the support of alloca, do not use -O when making stage 2. Then use the stage 2 compiler with -O to make the stage 3 compiler. This compiler will have the same characteristics as the usual stage 2 compiler on other systems. Use it to make a stage 4 compiler and compare that with stage 3 to verify proper compilation. !

(Perhaps simply defining ALLOCA in x-crds as described in the comments there will make the above paragraph superfluous. Please inform us of whether this works.) !

Unos uses memory segmentation instead of demand paging, so you will need a lot of memory. 5 Mb is barely enough if no other tasks are running. If linking cc1 fails, try putting the object files into a library and linking from that library. !


!

m68k-hp-hpux

HP 9000 series 300 or 400 running HP-UX. HP-UX version 8.0 has a bug in the assembler that prevents compilation of GCC. This bug manifests itself during the first stage of compilation, while building libgcc2.a: !

     _floatdisf
!      cc1: warning: `-g' option not supported on this version of GCC
!      cc1: warning: `-g1' option not supported on this version of GCC
!      ./xgcc: Internal compiler error: program as got fatal signal 11
!      
!

A patched version of the assembler is available as the file ftp://altdorf.ai.mit.edu/archive/cph/hpux-8.0-assembler. If you have HP software support, the patch can also be obtained directly from HP, as described in the following note: !

This is the patched assembler, to patch SR#1653-010439, where the assembler aborts on floating point constants. !

The bug is not really in the assembler, but in the shared library version of the function "cvtnum(3c)". The bug on "cvtnum(3c)" is SR#4701-078451. Anyway, the attached assembler uses the archive library version of "cvtnum(3c)" and thus does not exhibit the bug.

!

This patch is also known as PHCO_4484. !

In addition, if you wish to use gas, you must use gas version 2.1 or later, and you must use the GNU linker version 2.1 or later. Earlier versions of gas relied upon a program which converted the gas output into the native HP-UX format, but that program has not been kept up to date. gdb does not understand that native HP-UX format, so you must use gas if you wish to use gdb. !

On HP-UX version 8.05, but not on 8.07 or more recent versions, the fixproto shell script triggers a bug in the system shell. If you encounter this problem, upgrade your operating system or use BASH (the GNU shell) to run fixproto. This bug will cause the fixproto program to report an error of the form: !

     ./fixproto: sh internal 1K buffer overflow
!      
!

To fix this, you can also change the first line of the fixproto script to look like: !

     #!/bin/ksh
!      
!
!

m68k-ncr-*

Support for this system is obsoleted in GCC 3.3. !

On the Tower models 4n0 and 6n0, by default a process is not allowed to have more than one megabyte of memory. GCC cannot compile itself (or many other programs) with -O in that much memory. !

To solve this problem, reconfigure the kernel adding the following line to the configuration file: !

     MAXUMEM = 4096
!      
!
!

m68k-sun

Support for this system is obsoleted in GCC 3.3. !

Sun 3. We do not provide a configuration file to use the Sun FPA by default, because programs that establish signal handlers for floating point traps inherently cannot work with the FPA. !


!

m68k-sun-sunos4.1.1

Support for this system is obsoleted in GCC 3.3. !

It is reported that you may need the GNU assembler on this platform. !


!

mips-*-*

If on a MIPS system you get an error message saying "does not have gp sections for all it's [sic] sectons [sic]", don't worry about it. This *************** happens whenever you use GAS with the MI *** 1063,1091 **** really anything wrong, and it is okay to use the output file. You can stop such warnings by installing the GNU linker. !

It would be nice to extend GAS to produce the gp tables, but they are optional, and there should not be a warning about their absence. !

The libstdc++ atomic locking routines for MIPS targets requires MIPS II and later. A patch went in just after the GCC 3.3 release to make mips*-*-* use the generic implementation instead. You can also configure for mipsel-elf as a workaround. The mips*-*-linux* target continues to use the MIPS II routines. More work on this is expected in future releases. !


!

mips-sgi-irix5

This configuration has considerable problems, which will be fixed in a future release. !

In order to compile GCC on an SGI running IRIX 5, the "compiler_dev.hdr" subsystem must be installed from the IDO CD-ROM supplied by Silicon Graphics. It is also available for download from http://www.sgi.com/developers/devtools/apis/ido.html. !

make compare may fail on version 5 of IRIX unless you add -save-temps to CFLAGS. On these systems, the name of the assembler input file is stored in the object file, and that makes comparison fail if it differs between the stage1 and --- 1072,1100 ---- really anything wrong, and it is okay to use the output file. You can stop such warnings by installing the GNU linker. !

It would be nice to extend GAS to produce the gp tables, but they are optional, and there should not be a warning about their absence. !

The libstdc++ atomic locking routines for MIPS targets requires MIPS II and later. A patch went in just after the GCC 3.3 release to make mips*-*-* use the generic implementation instead. You can also configure for mipsel-elf as a workaround. The mips*-*-linux* target continues to use the MIPS II routines. More work on this is expected in future releases. !


!

mips-sgi-irix5

This configuration has considerable problems, which will be fixed in a future release. !

In order to compile GCC on an SGI running IRIX 5, the "compiler_dev.hdr" subsystem must be installed from the IDO CD-ROM supplied by Silicon Graphics. It is also available for download from http://www.sgi.com/developers/devtools/apis/ido.html. !

make compare may fail on version 5 of IRIX unless you add -save-temps to CFLAGS. On these systems, the name of the assembler input file is stored in the object file, and that makes comparison fail if it differs between the stage1 and *************** unless the comparisons fail without that *** 1096,1107 **** -save-temps, you will have to manually delete the .i and .s files after each series of compilations. !

If you use the MIPS C compiler to bootstrap, it may be necessary to increase its table size for switch statements with the -Wf,-XNg1500 option. If you use the -O2 optimization option, you also need to use -Olimit 3000. !

To enable debugging under IRIX 5, you must use GNU as 2.11.2 or later, and use the --with-gnu-as configure option when configuring GCC. GNU as is distributed as part of the binutils package. --- 1105,1116 ---- -save-temps, you will have to manually delete the .i and .s files after each series of compilations. !

If you use the MIPS C compiler to bootstrap, it may be necessary to increase its table size for switch statements with the -Wf,-XNg1500 option. If you use the -O2 optimization option, you also need to use -Olimit 3000. !

To enable debugging under IRIX 5, you must use GNU as 2.11.2 or later, and use the --with-gnu-as configure option when configuring GCC. GNU as is distributed as part of the binutils package. *************** When using release 2.11.2, you need to a *** 1109,1115 **** http://sources.redhat.com/ml/binutils/2001-07/msg00352.html which will be included in the next release of binutils. !

When building GCC, the build process loops rebuilding cc1 over and over again. This happens on mips-sgi-irix5.2, and possibly other platforms. It has been reported that this is a known bug in the make shipped with IRIX 5.2. We recommend you use GNU --- 1118,1124 ---- http://sources.redhat.com/ml/binutils/2001-07/msg00352.html which will be included in the next release of binutils. !

When building GCC, the build process loops rebuilding cc1 over and over again. This happens on mips-sgi-irix5.2, and possibly other platforms. It has been reported that this is a known bug in the make shipped with IRIX 5.2. We recommend you use GNU *************** other platforms. It has been reported t *** 1117,1149 **** however, you may have success with smake on IRIX 5.2 if you do not have GNU make available. !


!

mips-sgi-irix6

If you are using IRIX cc as your bootstrap compiler, you must ensure that the N32 ABI is in use. To test this, compile a simple C file with cc and then run file on the resulting object file. The output should look like: !

test.o: ELF N32 MSB ...
! 
!

If you see: !

test.o: ELF 32-bit MSB ...
! 
!

or !

test.o: ELF 64-bit MSB ...
! 
!

then your version of cc uses the O32 or N64 ABI by default. You should set the environment variable CC to cc -n32 before configuring GCC. !

If you want the resulting gcc to run on old 32-bit systems with the MIPS R4400 CPU, you need to ensure that only code for the mips3 instruction set architecture (ISA) is generated. While GCC 3.x does this correctly, both GCC 2.95 and SGI's MIPSpro cc may change --- 1126,1158 ---- however, you may have success with smake on IRIX 5.2 if you do not have GNU make available. !


!

mips-sgi-irix6

If you are using IRIX cc as your bootstrap compiler, you must ensure that the N32 ABI is in use. To test this, compile a simple C file with cc and then run file on the resulting object file. The output should look like: !

     test.o: ELF N32 MSB ...
!      
!

If you see: !

     test.o: ELF 32-bit MSB ...
!      
!

or !

     test.o: ELF 64-bit MSB ...
!      
!

then your version of cc uses the O32 or N64 ABI by default. You should set the environment variable CC to cc -n32 before configuring GCC. !

If you want the resulting gcc to run on old 32-bit systems with the MIPS R4400 CPU, you need to ensure that only code for the mips3 instruction set architecture (ISA) is generated. While GCC 3.x does this correctly, both GCC 2.95 and SGI's MIPSpro cc may change *************** the ISA depending on the machine where G *** 1151,1177 **** as the bootstrap compiler may result in mips4 code, which won't run at all on mips3-only systems. For the test program above, you should see: !

test.o: ELF N32 MSB mips-3 ...
! 
!

If you get: !

test.o: ELF N32 MSB mips-4 ...
! 
!

instead, you should set the environment variable CC to cc -n32 -mips3 or gcc -mips3 respectively before configuring GCC. !

GCC on IRIX 6 is usually built to support both the N32 and N64 ABIs. If you build GCC on a system that doesn't have the N64 libraries installed, you need to configure with --disable-multilib so GCC doesn't try to use them. Look for /usr/lib64/libc.so.1 to see if you have the 64-bit libraries installed. !

You must not use GNU as (which isn't built anyway as of binutils 2.11.2) on IRIX 6 platforms; doing so will only cause problems. !

GCC does not currently support generating O32 ABI binaries in the mips-sgi-irix6 configurations. It is possible to create a GCC with O32 ABI only support by configuring it for the mips-sgi-irix5 target and using a patched GNU as 2.11.2 as documented in the --- 1160,1186 ---- as the bootstrap compiler may result in mips4 code, which won't run at all on mips3-only systems. For the test program above, you should see: !

     test.o: ELF N32 MSB mips-3 ...
!      
!

If you get: !

     test.o: ELF N32 MSB mips-4 ...
!      
!

instead, you should set the environment variable CC to cc -n32 -mips3 or gcc -mips3 respectively before configuring GCC. !

GCC on IRIX 6 is usually built to support both the N32 and N64 ABIs. If you build GCC on a system that doesn't have the N64 libraries installed, you need to configure with --disable-multilib so GCC doesn't try to use them. Look for /usr/lib64/libc.so.1 to see if you have the 64-bit libraries installed. !

You must not use GNU as (which isn't built anyway as of binutils 2.11.2) on IRIX 6 platforms; doing so will only cause problems. !

GCC does not currently support generating O32 ABI binaries in the mips-sgi-irix6 configurations. It is possible to create a GCC with O32 ABI only support by configuring it for the mips-sgi-irix5 target and using a patched GNU as 2.11.2 as documented in the *************** native assembler requires patches to GCC *** 1180,1186 **** future release. It is expected that O32 ABI support will be available again in a future release. !

The --enable-threads option doesn't currently work, a patch is in preparation for a future release. The --enable-libgcj option is disabled by default: IRIX 6 uses a very low default limit (20480) for the command line length. Although libtool contains a --- 1189,1195 ---- future release. It is expected that O32 ABI support will be available again in a future release. !

The --enable-threads option doesn't currently work, a patch is in preparation for a future release. The --enable-libgcj option is disabled by default: IRIX 6 uses a very low default limit (20480) for the command line length. Although libtool contains a *************** to build despite this, running into an i *** 1190,1196 **** its maximum of 262144 bytes. If you have root access, you can use the systune command to do this. !

GCC does not correctly pass/return structures which are smaller than 16 bytes and which are not 8 bytes. The problem is very involved and difficult to fix. It affects a number of other targets also, but IRIX 6 is affected the most, because it is a 64-bit target, and 4 byte --- 1199,1205 ---- its maximum of 262144 bytes. If you have root access, you can use the systune command to do this. !

GCC does not correctly pass/return structures which are smaller than 16 bytes and which are not 8 bytes. The problem is very involved and difficult to fix. It affects a number of other targets also, but IRIX 6 is affected the most, because it is a 64-bit target, and 4 byte *************** at the wrong end, e.g. a 4 byte structur *** 1199,1205 **** of the register when it should be loaded into the upper 4 bytes of the register. !

GCC is consistent with itself, but not consistent with the SGI C compiler (and the SGI supplied runtime libraries), so the only failures that can happen are when there are library functions that take/return such structures. There are very few such library functions. Currently this --- 1208,1214 ---- of the register when it should be loaded into the upper 4 bytes of the register. !

GCC is consistent with itself, but not consistent with the SGI C compiler (and the SGI supplied runtime libraries), so the only failures that can happen are when there are library functions that take/return such structures. There are very few such library functions. Currently this *************** is known to affect inet_ntoainet_netof, inet_makeaddr, and semctl. Until the bug is fixed, GCC contains workarounds for the known affected functions. !

See http://freeware.sgi.com/ for more information about using GCC on IRIX platforms. !


!

powerpc-*-*

!

You can specify a default version for the -mcpu=cpu_type ! switch by using the configure option --with-cpu-cpu_type. !


!

powerpc-*-darwin*

PowerPC running Darwin (Mac OS X kernel). !

Pre-installed versions of Mac OS X may not include any developer tools, meaning that you will not be able to build GCC from source. Tool binaries are available at http://developer.apple.com/tools/compilers.html (free registration required). !

The default stack limit of 512K is too small, which may cause compiles to fail with 'Bus error'. Set the stack larger, for instance by doing limit stack 800. It's a good idea to use the GNU preprocessor instead of Apple's cpp-precomp during the first stage of --- 1216,1244 ---- inet_netof, inet_makeaddr, and semctl. Until the bug is fixed, GCC contains workarounds for the known affected functions. !

See http://freeware.sgi.com/ for more information about using GCC on IRIX platforms. !


!

powerpc-*-*

!

You can specify a default version for the -mcpu=cpu_type ! switch by using the configure option --with-cpu-cpu_type. !


!

powerpc-*-darwin*

PowerPC running Darwin (Mac OS X kernel). !

Pre-installed versions of Mac OS X may not include any developer tools, meaning that you will not be able to build GCC from source. Tool binaries are available at http://developer.apple.com/tools/compilers.html (free registration required). !

The default stack limit of 512K is too small, which may cause compiles to fail with 'Bus error'. Set the stack larger, for instance by doing limit stack 800. It's a good idea to use the GNU preprocessor instead of Apple's cpp-precomp during the first stage of *************** bootstrapping; this is automatic when do *** 1237,1403 **** to do it from the toplevel objdir you will need to say make CC='cc -no-cpp-precomp' bootstrap. !

The version of GCC shipped by Apple typically includes a number of extensions not available in a standard GCC release. These extensions are generally specific to Mac programming. !


!

powerpc-*-elf, powerpc-*-sysv4

PowerPC system in big endian mode, running System V.4. !


!

powerpc-*-linux-gnu*

You will need binutils 2.13.90.0.10 or newer for a working GCC. !


!

powerpc-*-netbsd*

PowerPC system in big endian mode running NetBSD. To build the documentation you will need Texinfo version 4.2 (NetBSD 1.5.1 included Texinfo version 3.12). !


!

powerpc-*-eabiaix

Embedded PowerPC system in big endian mode with -mcall-aix selected as the default. !


!

powerpc-*-eabisim

Embedded PowerPC system in big endian mode for use in running under the PSIM simulator. !


!

powerpc-*-eabi

Embedded PowerPC system in big endian mode. !


!

powerpcle-*-elf, powerpcle-*-sysv4

PowerPC system in little endian mode, running System V.4. !


!

powerpcle-*-eabisim

Embedded PowerPC system in little endian mode for use in running under the PSIM simulator. !


!

powerpcle-*-eabi

Embedded PowerPC system in little endian mode. !


!

s390-*-linux*

S/390 system running Linux for S/390. !


!

s390x-*-linux*

zSeries system (64-bit) running Linux for zSeries. !


!

*-*-solaris2*

Sun does not ship a C compiler with Solaris 2. To bootstrap and install GCC you first have to install a pre-built compiler, see our binaries page for details. !

The Solaris 2 /bin/sh will often fail to configure libstdc++-v3, boehm-gc or libjava. We therefore recommend to use the following sequence of commands to bootstrap and install GCC: !

   % CONFIG_SHELL=/bin/ksh
!    % export CONFIG_SHELL
!    % srcdir/configure [options] [target]
!    % gmake bootstrap
!    % gmake install
! 
!

As explained in the build instructions, we recommend to use GNU make, which we call gmake here to distinguish it from Sun make. !

Solaris 2 comes with a number of optional OS packages. Some of these are needed to use GCC fully, namely SUNWarc, SUNWbtool, SUNWesu, SUNWhea, SUNWlibm, SUNWsprot, and SUNWtoo. If you did not install all optional packages when installing Solaris 2, you will need to verify that the packages that GCC needs are installed. !

To check whether an optional package is installed, use the pkginfo command. To add an optional package, use the pkgadd command. For further details, see the Solaris 2 documentation. !

Trying to use the linker and other tools in /usr/ucb to install GCC has been observed to cause trouble. For example, the linker may hang indefinitely. The fix is to remove /usr/ucb from your PATH. !

The build process works more smoothly with the legacy Sun tools so, if you have /usr/xpg4/bin in your PATH, we recommend that you place /usr/bin before /usr/xpg4/bin for the duration of the build. !

All releases of GNU binutils prior to 2.11.2 have known bugs on this platform. We recommend the use of GNU binutils 2.11.2 or the vendor tools (Sun as, Sun ld). !

Sun bug 4296832 turns up when compiling X11 headers with GCC 2.95 or newer: g++ will complain that types are missing. These headers assume that omitting the type means int; this assumption worked for C89 but is wrong for C++, and is now wrong for C99 also. !

g++ accepts such (invalid) constructs with the option -fpermissive; it will assume that any missing type is int (as defined by C89). !

There are patches for Solaris 2.6 (105633-56 or newer for SPARC, 106248-42 or newer for Intel), Solaris 7 (108376-21 or newer for SPARC, 108377-20 for Intel), and Solaris 8 (108652-24 or newer for SPARC, 108653-22 for Intel) that fix this bug. !


!

sparc-sun-solaris2*

When GCC is configured to use binutils 2.11.2 or later the binaries produced are smaller than the ones produced using Sun's native tools; this difference is quite significant for binaries containing debugging information. !

Sun as 4.x is broken in that it cannot cope with long symbol names. A typical error message might look similar to the following: !

/usr/ccs/bin/as: "/var/tmp/ccMsw135.s", line 11041: error:
!   can't compute value of an expression involving an external symbol.
! 
!

This is Sun bug 4237974. This is fixed with patch 108908-02 for Solaris 2.6 and has been fixed in later (5.x) versions of the assembler, starting with Solaris 7. !

Starting with Solaris 7, the operating system is capable of executing 64-bit SPARC V9 binaries. GCC 3.1 and later properly supports this; the -m64 option enables 64-bit code generation. However, if all you want is code tuned for the UltraSPARC CPU, you --- 1246,1412 ---- to do it from the toplevel objdir you will need to say make CC='cc -no-cpp-precomp' bootstrap. !

The version of GCC shipped by Apple typically includes a number of extensions not available in a standard GCC release. These extensions are generally specific to Mac programming. !


!

powerpc-*-elf, powerpc-*-sysv4

PowerPC system in big endian mode, running System V.4. !


!

powerpc-*-linux-gnu*

You will need binutils 2.13.90.0.10 or newer for a working GCC. !


!

powerpc-*-netbsd*

PowerPC system in big endian mode running NetBSD. To build the documentation you will need Texinfo version 4.2 (NetBSD 1.5.1 included Texinfo version 3.12). !


!

powerpc-*-eabiaix

Embedded PowerPC system in big endian mode with -mcall-aix selected as the default. !


!

powerpc-*-eabisim

Embedded PowerPC system in big endian mode for use in running under the PSIM simulator. !


!

powerpc-*-eabi

Embedded PowerPC system in big endian mode. !


!

powerpcle-*-elf, powerpcle-*-sysv4

PowerPC system in little endian mode, running System V.4. !


!

powerpcle-*-eabisim

Embedded PowerPC system in little endian mode for use in running under the PSIM simulator. !


!

powerpcle-*-eabi

Embedded PowerPC system in little endian mode. !


!

s390-*-linux*

S/390 system running Linux for S/390. !


!

s390x-*-linux*

zSeries system (64-bit) running Linux for zSeries. !


!

*-*-solaris2*

Sun does not ship a C compiler with Solaris 2. To bootstrap and install GCC you first have to install a pre-built compiler, see our binaries page for details. !

The Solaris 2 /bin/sh will often fail to configure libstdc++-v3, boehm-gc or libjava. We therefore recommend to use the following sequence of commands to bootstrap and install GCC: !

        % CONFIG_SHELL=/bin/ksh
!         % export CONFIG_SHELL
!         % srcdir/configure [options] [target]
!         % gmake bootstrap
!         % gmake install
!      
!

As explained in the build instructions, we recommend to use GNU make, which we call gmake here to distinguish it from Sun make. !

Solaris 2 comes with a number of optional OS packages. Some of these are needed to use GCC fully, namely SUNWarc, SUNWbtool, SUNWesu, SUNWhea, SUNWlibm, SUNWsprot, and SUNWtoo. If you did not install all optional packages when installing Solaris 2, you will need to verify that the packages that GCC needs are installed. !

To check whether an optional package is installed, use the pkginfo command. To add an optional package, use the pkgadd command. For further details, see the Solaris 2 documentation. !

Trying to use the linker and other tools in /usr/ucb to install GCC has been observed to cause trouble. For example, the linker may hang indefinitely. The fix is to remove /usr/ucb from your PATH. !

The build process works more smoothly with the legacy Sun tools so, if you have /usr/xpg4/bin in your PATH, we recommend that you place /usr/bin before /usr/xpg4/bin for the duration of the build. !

All releases of GNU binutils prior to 2.11.2 have known bugs on this platform. We recommend the use of GNU binutils 2.11.2 or the vendor tools (Sun as, Sun ld). !

Sun bug 4296832 turns up when compiling X11 headers with GCC 2.95 or newer: g++ will complain that types are missing. These headers assume that omitting the type means int; this assumption worked for C89 but is wrong for C++, and is now wrong for C99 also. !

g++ accepts such (invalid) constructs with the option -fpermissive; it will assume that any missing type is int (as defined by C89). !

There are patches for Solaris 2.6 (105633-56 or newer for SPARC, 106248-42 or newer for Intel), Solaris 7 (108376-21 or newer for SPARC, 108377-20 for Intel), and Solaris 8 (108652-24 or newer for SPARC, 108653-22 for Intel) that fix this bug. !


!

sparc-sun-solaris2*

When GCC is configured to use binutils 2.11.2 or later the binaries produced are smaller than the ones produced using Sun's native tools; this difference is quite significant for binaries containing debugging information. !

Sun as 4.x is broken in that it cannot cope with long symbol names. A typical error message might look similar to the following: !

     /usr/ccs/bin/as: "/var/tmp/ccMsw135.s", line 11041: error:
!        can't compute value of an expression involving an external symbol.
!      
!

This is Sun bug 4237974. This is fixed with patch 108908-02 for Solaris 2.6 and has been fixed in later (5.x) versions of the assembler, starting with Solaris 7. !

Starting with Solaris 7, the operating system is capable of executing 64-bit SPARC V9 binaries. GCC 3.1 and later properly supports this; the -m64 option enables 64-bit code generation. However, if all you want is code tuned for the UltraSPARC CPU, you *************** should try the -mtune=ultrasparcWhen configuring on a Solaris 7 or later system that is running a kernel that supports only 32-bit binaries, one must configure with --disable-multilib, since we will not be able to build the 64-bit target libraries. !


!

sparc-sun-solaris2.7

Sun patch 107058-01 (1999-01-13) for Solaris 7/SPARC triggers a bug in the dynamic linker. This problem (Sun bug 4210064) affects GCC 2.8 --- 1414,1427 ---- code that, unlike full 64-bit code, can still run on non-UltraSPARC machines. !

When configuring on a Solaris 7 or later system that is running a kernel that supports only 32-bit binaries, one must configure with --disable-multilib, since we will not be able to build the 64-bit target libraries. !


!

sparc-sun-solaris2.7

Sun patch 107058-01 (1999-01-13) for Solaris 7/SPARC triggers a bug in the dynamic linker. This problem (Sun bug 4210064) affects GCC 2.8 *************** and later, including all EGCS releases. *** 1420,1440 **** 107058-01 for all Solaris 7 users, but around 1999-09-01 it started to recommend it only for people who use Sun's compilers. !

Here are some workarounds to this problem: !

  • Do not install Sun patch 107058-01 until after Sun releases a complete patch for bug 4210064. This is the simplest course to take, unless you must also use Sun's C compiler. Unfortunately 107058-01 is preinstalled on some new Solaris 7-based hosts, so you may have to back it out. !
  • Copy the original, unpatched Solaris 7 /usr/ccs/bin/as into /usr/local/lib/gcc-lib/sparc-sun-solaris2.7/3.1/as, adjusting the latter name to fit your local conventions and software version numbers. !
  • Install Sun patch 106950-03 (1999-05-25) or later. Nobody with both 107058-01 and 106950-03 installed has reported the bug with GCC and Sun's dynamic linker. This last course of action is riskiest, for two reasons. First, you must install 106950 on all hosts that --- 1429,1449 ---- 107058-01 for all Solaris 7 users, but around 1999-09-01 it started to recommend it only for people who use Sun's compilers. !

    Here are some workarounds to this problem: !

    • Do not install Sun patch 107058-01 until after Sun releases a complete patch for bug 4210064. This is the simplest course to take, unless you must also use Sun's C compiler. Unfortunately 107058-01 is preinstalled on some new Solaris 7-based hosts, so you may have to back it out. !
    • Copy the original, unpatched Solaris 7 /usr/ccs/bin/as into /usr/local/lib/gcc-lib/sparc-sun-solaris2.7/3.1/as, adjusting the latter name to fit your local conventions and software version numbers. !
    • Install Sun patch 106950-03 (1999-05-25) or later. Nobody with both 107058-01 and 106950-03 installed has reported the bug with GCC and Sun's dynamic linker. This last course of action is riskiest, for two reasons. First, you must install 106950 on all hosts that *************** the bug. The current (as of 2001-09-24) *** 1446,1560 **** the Solaris 7 Recommended Patch Cluster.
    !

    GCC 3.3 triggers a bug in version 5.0 Alpha 03/27/98 of the Sun assembler, which causes a bootstrap failure when linking the 64-bit shared version of libgcc. A typical error message is: !

    ld: fatal: relocation error: R_SPARC_32: file libgcc/sparcv9/_muldi3.o:
    !   symbol <unknown>:  offset 0xffffffff7ec133e7 is non-aligned.
    ! 
    !

    This bug has been fixed in the final 5.0 version of the assembler. !


    !

    sparc-sun-sunos4*

    Support for this system is obsoleted in GCC 3.3. !

    A bug in the SunOS 4 linker will cause it to crash when linking -fPIC compiled objects (and will therefore not allow you to build shared libraries). !

    To fix this problem you can either use the most recent version of binutils or get the latest SunOS 4 linker patch (patch ID 100170-10) from Sun's patch site. !

    Sometimes on a Sun 4 you may observe a crash in the program genflags or genoutput while building GCC. This is said to be due to a bug in sh. You can probably get around it by running genflags or genoutput manually and then retrying the make. !


    !

    sparc-unknown-linux-gnulibc1

    Support for this system is obsoleted in GCC 3.3. !

    It has been reported that you might need binutils 2.8.1.0.23 for this platform, too. !


    !

    sparc-*-linux*

    GCC versions 3.0 and higher require binutils 2.11.2 and glibc 2.2.4 or newer on this platform. All earlier binutils and glibc releases mishandled unaligned relocations on sparc-*-* targets. !


    !

    sparc64-*-solaris2*

    The following compiler flags must be specified in the configure step in order to bootstrap this target with the Sun compiler: !

       % CC="cc -xildoff -xarch=v9" srcdir/configure [options] [target]
    ! 
    !

    -xildoff turns off the incremental linker, and -xarch=v9 specifies the SPARC-V9 architecture to the Sun linker and assembler. !


    !

    sparcv9-*-solaris2*

    This is a synonym for sparc64-*-solaris2*. !


    !

    *-*-sysv*

    On System V release 3, you may get this error message while linking: !

    ld fatal: failed to write symbol name something
    !  in strings table for file whatever
    ! 
    !

    This probably indicates that the disk is full or your ulimit won't allow the file to be as large as it needs to be. !

    This problem can also result because the kernel parameter MAXUMEM is too small. If so, you must regenerate the kernel and make the value much larger. The default value is reported to be 1024; a value of 32768 is said to work. Smaller values may also work. !

    On System V, if you get an error like this, !

    /usr/local/lib/bison.simple: In function `yyparse':
    ! /usr/local/lib/bison.simple:625: virtual memory exhausted
    ! 

    that too indicates a problem with disk space, ulimit, or MAXUMEM. !

    On a System V release 4 system, make sure /usr/bin precedes /usr/ucb in PATH. The cc command in /usr/ucb uses libraries which have bugs. !


    !

    vax-dec-ultrix

    Don't try compiling with VAX C (vcc). It produces incorrect code in some cases (for example, when alloca is used). !


    !

    xtensa-*-elf

    This target is intended for embedded Xtensa systems using the newlib C library. It uses ELF but does not support shared --- 1455,1578 ---- the Solaris 7 Recommended Patch Cluster.

!

GCC 3.3 triggers a bug in version 5.0 Alpha 03/27/98 of the Sun assembler, which causes a bootstrap failure when linking the 64-bit shared version of libgcc. A typical error message is: !

     ld: fatal: relocation error: R_SPARC_32: file libgcc/sparcv9/_muldi3.o:
!        symbol <unknown>:  offset 0xffffffff7ec133e7 is non-aligned.
!      
!

This bug has been fixed in the final 5.0 version of the assembler. !


!

sparc-sun-sunos4*

Support for this system is obsoleted in GCC 3.3. !

A bug in the SunOS 4 linker will cause it to crash when linking -fPIC compiled objects (and will therefore not allow you to build shared libraries). !

To fix this problem you can either use the most recent version of binutils or get the latest SunOS 4 linker patch (patch ID 100170-10) from Sun's patch site. !

Sometimes on a Sun 4 you may observe a crash in the program genflags or genoutput while building GCC. This is said to be due to a bug in sh. You can probably get around it by running genflags or genoutput manually and then retrying the make. !


!

sparc-unknown-linux-gnulibc1

Support for this system is obsoleted in GCC 3.3. !

It has been reported that you might need binutils 2.8.1.0.23 for this platform, too. !


!

sparc-*-linux*

GCC versions 3.0 and higher require binutils 2.11.2 and glibc 2.2.4 or newer on this platform. All earlier binutils and glibc releases mishandled unaligned relocations on sparc-*-* targets. !


!

sparc64-*-solaris2*

The following compiler flags must be specified in the configure step in order to bootstrap this target with the Sun compiler: !

        % CC="cc -xildoff -xarch=v9" srcdir/configure [options] [target]
!      
!

-xildoff turns off the incremental linker, and -xarch=v9 specifies the SPARC-V9 architecture to the Sun linker and assembler. !


!

sparcv9-*-solaris2*

This is a synonym for sparc64-*-solaris2*. !


!

*-*-sysv*

On System V release 3, you may get this error message while linking: !

     ld fatal: failed to write symbol name something
!       in strings table for file whatever
!      
!

This probably indicates that the disk is full or your ulimit won't allow the file to be as large as it needs to be. !

This problem can also result because the kernel parameter MAXUMEM is too small. If so, you must regenerate the kernel and make the value much larger. The default value is reported to be 1024; a value of 32768 is said to work. Smaller values may also work. !

On System V, if you get an error like this, !

     /usr/local/lib/bison.simple: In function `yyparse':
!      /usr/local/lib/bison.simple:625: virtual memory exhausted
!      

that too indicates a problem with disk space, ulimit, or MAXUMEM. !

On a System V release 4 system, make sure /usr/bin precedes /usr/ucb in PATH. The cc command in /usr/ucb uses libraries which have bugs. !


!

vax-dec-ultrix

Don't try compiling with VAX C (vcc). It produces incorrect code in some cases (for example, when alloca is used). !


!

x86_64-*-*, amd64-*-*

! !

GCC supports the x86-64 architecture implemented by the AMD64 processor ! (amd64-*-* is an alias for x86_64-*-*) on GNU/Linux, FreeBSD and NetBSD. ! On GNU/Linux the default is a bi-arch compiler which is able to generate ! both 64-bit x86-64 and 32-bit x86 code (via the -m32 switch). ! !


! !

xtensa-*-elf

This target is intended for embedded Xtensa systems using the newlib C library. It uses ELF but does not support shared *************** objects. Designed-defined instructions *** 1562,1577 **** Tensilica Instruction Extension (TIE) language are only supported through inline assembly. !

The Xtensa configuration information must be specified prior to building GCC. The gcc/config/xtensa/xtensa-config.h header file contains the configuration information. If you created your own Xtensa configuration with the Xtensa Processor Generator, the downloaded files include a customized copy of this header file, which you can use to replace the default header file. !


!

xtensa-*-linux*

This target is for Xtensa systems running GNU/Linux. It supports ELF shared objects and the GNU C library (glibc). It also generates --- 1580,1595 ---- Tensilica Instruction Extension (TIE) language are only supported through inline assembly. !

The Xtensa configuration information must be specified prior to building GCC. The gcc/config/xtensa/xtensa-config.h header file contains the configuration information. If you created your own Xtensa configuration with the Xtensa Processor Generator, the downloaded files include a customized copy of this header file, which you can use to replace the default header file. !


!

xtensa-*-linux*

This target is for Xtensa systems running GNU/Linux. It supports ELF shared objects and the GNU C library (glibc). It also generates *************** position-independent code (PIC) regardle *** 1580,1625 **** respects, this target is the same as the xtensa-*-elf target. !


!

Microsoft Windows (32-bit)

A port of GCC 2.95.2 and 3.x is included with the Cygwin environment. !

Current (as of early 2001) snapshots of GCC will build under Cygwin without modification. !

GCC does not currently build with Microsoft's C++ compiler and there are no plans to make it do so. !


!

OS/2

GCC does not currently support OS/2. However, Andrew Zabolotny has been working on a generic OS/2 port with pgcc. The current code can be found at http://www.goof.com/pcg/os2/. !

An older copy of GCC 2.8.1 is included with the EMX tools available at ftp://ftp.leo.org/pub/comp/os/os2/leo/devtools/emx+gcc/. !


!

Older systems

GCC contains support files for many older (1980s and early 1990s) Unix variants. For the most part, support for these systems has not been deliberately removed, but it has not been maintained for several years and may suffer from bitrot. !

Starting with GCC 3.1, each release has a list of "obsoleted" systems. Support for these systems is still present in that release, but configure will fail unless the --enable-obsolete option is given. Unless a maintainer steps forward, support for these systems will be removed from the next release of GCC. !

Support for old systems as hosts for GCC can cause problems if the workarounds for compiler, library and operating system bugs affect the cleanliness or maintainability of the rest of GCC. In some cases, to bring GCC up on such a system, if still possible with current GCC, may --- 1598,1643 ---- respects, this target is the same as the xtensa-*-elf target. !


!

Microsoft Windows (32-bit)

A port of GCC 2.95.2 and 3.x is included with the Cygwin environment. !

Current (as of early 2001) snapshots of GCC will build under Cygwin without modification. !

GCC does not currently build with Microsoft's C++ compiler and there are no plans to make it do so. !


!

OS/2

GCC does not currently support OS/2. However, Andrew Zabolotny has been working on a generic OS/2 port with pgcc. The current code can be found at http://www.goof.com/pcg/os2/. !

An older copy of GCC 2.8.1 is included with the EMX tools available at ftp://ftp.leo.org/pub/comp/os/os2/leo/devtools/emx+gcc/. !


!

Older systems

GCC contains support files for many older (1980s and early 1990s) Unix variants. For the most part, support for these systems has not been deliberately removed, but it has not been maintained for several years and may suffer from bitrot. !

Starting with GCC 3.1, each release has a list of "obsoleted" systems. Support for these systems is still present in that release, but configure will fail unless the --enable-obsolete option is given. Unless a maintainer steps forward, support for these systems will be removed from the next release of GCC. !

Support for old systems as hosts for GCC can cause problems if the workarounds for compiler, library and operating system bugs affect the cleanliness or maintainability of the rest of GCC. In some cases, to bring GCC up on such a system, if still possible with current GCC, may *************** vendor compiler. Old releases of GCC 1 *** 1630,1636 **** fixincludes, but bugs or deficiencies in libraries and the operating system may still cause problems. !

Support for older systems as targets for cross-compilation is less problematic than support for them as hosts for GCC; if an enthusiast wishes to make such a target work again (including resurrecting any of the targets that never worked with GCC 2, starting from the last CVS --- 1648,1654 ---- fixincludes, but bugs or deficiencies in libraries and the operating system may still cause problems. !

Support for older systems as targets for cross-compilation is less problematic than support for them as hosts for GCC; if an enthusiast wishes to make such a target work again (including resurrecting any of the targets that never worked with GCC 2, starting from the last CVS *************** version before they were removed), patch *** 1639,1665 **** likely to be accepted, since they should not affect the support for more modern targets. !

For some systems, old versions of GNU binutils may also be useful, and are available from pub/binutils/old-releases on sources.redhat.com mirror sites. !

Some of the information on specific systems above relates to such older systems, but much of the information about GCC on such systems (which may no longer be applicable to current GCC) is to be found in the GCC texinfo manual. !


!

all ELF targets (SVR4, Solaris 2, etc.)

C++ support is significantly better on ELF targets if you use the GNU linker; duplicate copies of inlines, vtables and template instantiations will be discarded automatically. !


Return to the GCC Installation page ! --- 1657,1683 ---- likely to be accepted, since they should not affect the support for more modern targets. !

For some systems, old versions of GNU binutils may also be useful, and are available from pub/binutils/old-releases on sources.redhat.com mirror sites. !

Some of the information on specific systems above relates to such older systems, but much of the information about GCC on such systems (which may no longer be applicable to current GCC) is to be found in the GCC texinfo manual. !


!

all ELF targets (SVR4, Solaris 2, etc.)

C++ support is significantly better on ELF targets if you use the GNU linker; duplicate copies of inlines, vtables and template instantiations will be discarded automatically. !


Return to the GCC Installation page ! diff -Nrc3pad gcc-3.3.2/INSTALL/test.html gcc-3.3.3/INSTALL/test.html *** gcc-3.3.2/INSTALL/test.html Thu Oct 16 20:10:56 2003 --- gcc-3.3.3/INSTALL/test.html Sat Feb 14 20:34:32 2004 *************** *** 1,33 **** ! Installing GCC: Testing ! ! ! !

Installing GCC: Testing

Before you install GCC, we encourage you to run the testsuites and to compare your results with results from a similar configuration that have been submitted to the --- 1,41 ---- ! Installing GCC: Testing ! ! + + !

Installing GCC: Testing

Before you install GCC, we encourage you to run the testsuites and to compare your results with results from a similar configuration that have been submitted to the *************** This step is optional and may require yo *** 39,107 **** but it can give you confidence in your new GCC installation or point out problems before you install and start using your new GCC. !

First, you must have downloaded the testsuites. These are part of the full distribution, but if you downloaded the "core" compiler plus any front ends, you must download the testsuites separately. !

Second, you must have the testing tools installed. This includes DejaGnu 1.4.1 or 1.4.3 and later, Tcl, and Expect; the DejaGnu site has links to these. !

If the directories where runtest and expect were installed are not in the PATH, you may need to set the following environment variables appropriately, as in the following example (which assumes that DejaGnu has been installed under /usr/local): !

     TCL_LIBRARY = /usr/local/share/tcl8.0
!      DEJAGNULIBS = /usr/local/share/dejagnu
! 
!

(On systems such as Cygwin, these paths are required to be actual paths, not mounts or links; presumably this is due to some lack of portability in the DejaGnu code.) !

Finally, you can run the testsuite (which may take a long time): !

     cd objdir; make -k check
! 
!

This will test various components of GCC, such as compiler front ends and runtime libraries. While running the testsuite, DejaGnu might emit some harmless messages resembling WARNING: Couldn't find the global config file. or WARNING: Couldn't find tool init file that can be ignored. !

How can I run the test suite on selected tests?

In order to run sets of tests selectively, there are targets make check-gcc and make check-g++ in the gcc subdirectory of the object directory. You can also just run make check in a subdirectory of the object directory. !

A more selective way to just run all gcc execute tests in the testsuite is to use !

    make check-gcc RUNTESTFLAGS="execute.exp other-options"
! 
!

Likewise, in order to run only the g++ "old-deja" tests in the testsuite with filenames matching 9805*, you would use !

    make check-g++ RUNTESTFLAGS="old-deja.exp=9805* other-options"
! 
!

The *.exp files are located in the testsuite directories of the GCC source, the most important ones being compile.exp, execute.exp, dg.exp and old-deja.exp. To get a list of the possible *.exp files, pipe the output of make check into a file and look at the ! Running ... .exp lines. !

The Java runtime tests can be executed via make check ! in the target/libjava/testsuite directory in the build tree. !

Additional testing for Java Class Libraries

The Mauve Project provides a suite of tests for the Java Class Libraries. This suite can be run --- 47,115 ---- but it can give you confidence in your new GCC installation or point out problems before you install and start using your new GCC. !

First, you must have downloaded the testsuites. These are part of the full distribution, but if you downloaded the "core" compiler plus any front ends, you must download the testsuites separately. !

Second, you must have the testing tools installed. This includes DejaGnu 1.4.1 or 1.4.3 and later, Tcl, and Expect; the DejaGnu site has links to these. !

If the directories where runtest and expect were installed are not in the PATH, you may need to set the following environment variables appropriately, as in the following example (which assumes that DejaGnu has been installed under /usr/local): !

          TCL_LIBRARY = /usr/local/share/tcl8.0
!           DEJAGNULIBS = /usr/local/share/dejagnu
!      
!

(On systems such as Cygwin, these paths are required to be actual paths, not mounts or links; presumably this is due to some lack of portability in the DejaGnu code.) !

Finally, you can run the testsuite (which may take a long time): !

          cd objdir; make -k check
!      
!

This will test various components of GCC, such as compiler front ends and runtime libraries. While running the testsuite, DejaGnu might emit some harmless messages resembling WARNING: Couldn't find the global config file. or WARNING: Couldn't find tool init file that can be ignored. !

How can I run the test suite on selected tests?

In order to run sets of tests selectively, there are targets make check-gcc and make check-g++ in the gcc subdirectory of the object directory. You can also just run make check in a subdirectory of the object directory. !

A more selective way to just run all gcc execute tests in the testsuite is to use !

         make check-gcc RUNTESTFLAGS="execute.exp other-options"
!      
!

Likewise, in order to run only the g++ "old-deja" tests in the testsuite with filenames matching 9805*, you would use !

         make check-g++ RUNTESTFLAGS="old-deja.exp=9805* other-options"
!      
!

The *.exp files are located in the testsuite directories of the GCC source, the most important ones being compile.exp, execute.exp, dg.exp and old-deja.exp. To get a list of the possible *.exp files, pipe the output of make check into a file and look at the ! Running ... .exp lines. !

The Java runtime tests can be executed via make check ! in the target/libjava/testsuite directory in the build tree. !

Additional testing for Java Class Libraries

The Mauve Project provides a suite of tests for the Java Class Libraries. This suite can be run *************** testsuite at libjava/testsuite/lib *** 110,121 **** specifying the location of that tree when invoking make, as in make MAUVEDIR=~/mauve check. ! Jacks is a free test suite that tests Java compiler front ends. This suite can be run as part of libgcj testing by placing the Jacks tree within the libjava testsuite at libjava/testsuite/libjava.jacks/jacks. !

How to interpret test results

The result of running the testsuite are various *.sum and *.log files in the testsuite subdirectories. The *.log files contain a --- 118,129 ---- specifying the location of that tree when invoking make, as in make MAUVEDIR=~/mauve check. ! Jacks is a free test suite that tests Java compiler front ends. This suite can be run as part of libgcj testing by placing the Jacks tree within the libjava testsuite at libjava/testsuite/libjava.jacks/jacks. !

How to interpret test results

The result of running the testsuite are various *.sum and *.log files in the testsuite subdirectories. The *.log files contain a *************** detailed log of the compiler invocations *** 123,129 **** results, the *.sum files summarize the results. These summaries contain status codes for all tests: !

  • PASS: the test passed as expected
  • XPASS: the test unexpectedly passed
  • FAIL: the test unexpectedly failed --- 131,137 ---- results, the *.sum files summarize the results. These summaries contain status codes for all tests: !
    • PASS: the test passed as expected
    • XPASS: the test unexpectedly passed
    • FAIL: the test unexpectedly failed *************** contain status codes for all tests: *** 133,162 ****
    • WARNING: the testsuite detected a possible problem
    !

    It is normal for some tests to report unexpected failures. At the current time our testing harness does not allow fine grained control over whether or not a test is expected to fail. We expect to fix this problem in future releases. !

    Submitting test results

    If you want to report the results to the GCC project, use the contrib/test_summary shell script. Start it in the objdir with !

        srcdir/contrib/test_summary -p your_commentary.txt \
    !         -m gcc-testresults@gcc.gnu.org |sh
    ! 
    !

    This script uses the Mail program to send the results, so make sure it is in your PATH. The file your_commentary.txt is prepended to the testsuite summary and should contain any special remarks you have on your results or your build environment. Please do not edit the testsuite result block or the subject line, as these messages may be automatically processed. !


    Return to the GCC Installation page ! --- 141,170 ----

  • WARNING: the testsuite detected a possible problem
!

It is normal for some tests to report unexpected failures. At the current time our testing harness does not allow fine grained control over whether or not a test is expected to fail. We expect to fix this problem in future releases. !

Submitting test results

If you want to report the results to the GCC project, use the contrib/test_summary shell script. Start it in the objdir with !

         srcdir/contrib/test_summary -p your_commentary.txt \
!              -m gcc-testresults@gcc.gnu.org |sh
!      
!

This script uses the Mail program to send the results, so make sure it is in your PATH. The file your_commentary.txt is prepended to the testsuite summary and should contain any special remarks you have on your results or your build environment. Please do not edit the testsuite result block or the subject line, as these messages may be automatically processed. !


Return to the GCC Installation page ! diff -Nrc3pad gcc-3.3.2/MAINTAINERS gcc-3.3.3/MAINTAINERS *** gcc-3.3.2/MAINTAINERS Sat Aug 30 07:48:11 2003 --- gcc-3.3.3/MAINTAINERS Fri Jan 16 23:33:12 2004 *************** m68k port (?) Jeff Law law@redhat.com *** 60,65 **** --- 60,66 ---- m68k-motorola-sysv port Philippe De Muyter phdm@macqel.be mcore port Nick Clifton nickc@redhat.com mips port Eric Christopher echristo@redhat.com + mips port Richard Sandiford rsandifo@redhat.com mmix port Hans-Peter Nilsson hp@bitrange.com mn10200 port Jeff Law law@redhat.com mn10300 port Jeff Law law@redhat.com *************** sh port Alexandre Oliva aoliva@redhat *** 74,82 **** --- 75,85 ---- sparc port Richard Henderson rth@redhat.com sparc port David S. Miller davem@redhat.com sparc port Jakub Jelinek jakub@redhat.com + sparc port Eric Botcazou ebotcazou@libertysurf.fr v850 port Nick Clifton nickc@redhat.com v850 port Michael Meissner meissner@redhat.com vax port Dave Anglin dave.anglin@nrc.ca + vax port Matt Thomas matt@3am-software.com x86-64 port Jan Hubicka jh@suse.cz xstormy16 port Geoffrey Keating geoffk@geoffk.org xtensa port Bob Wilson bob.wilson@acm.org *************** Eric Blake ericb@gcc.gnu.org *** 170,176 **** Jim Blandy jimb@redhat.com Phil Blundell pb@futuretv.com Hans Boehm hboehm@gcc.gnu.org - Eric Botcazou ebotcazou@libertysurf.fr Andrew Cagney cagney@redhat.com Chandra Chavva cchavva@redhat.com William Cohen wcohen@redhat.com --- 173,178 ---- *************** Gavin Romig-Koch gavin@redhat.com *** 236,242 **** Ira Ruben ira@apple.com Douglas Rupp rupp@gnat.com Alex Samuel samuel@codesourcery.com - Richard Sandiford rsandifo@redhat.com Roger Sayle roger@eyesopen.com Andreas Schwab schwab@suse.de Svein Seldal svein.seldal@solidas.com --- 238,243 ---- *************** GNATS only accounts *** 264,270 **** Wolfgang Bangerth bangerth bangerth@ticam.utexas.edu James Dennett jdennett jdennett@acm.org Christian Ehrhardt cae ehrhardt@mathematik.uni-ulm.de - - Peter Bienstman(?) - Benjamin Chelf(?) - Mark Galassi(?) --- 265,267 ---- diff -Nrc3pad gcc-3.3.2/boehm-gc/ChangeLog gcc-3.3.3/boehm-gc/ChangeLog *** gcc-3.3.2/boehm-gc/ChangeLog Thu Oct 16 19:42:44 2003 --- gcc-3.3.3/boehm-gc/ChangeLog Sat Feb 14 20:16:39 2004 *************** *** 1,3 **** --- 1,11 ---- + 2004-02-14 Release Manager + + * GCC 3.3.3 Released. + + 2003-12-21 Roger Sayle + + * configure.host: Backport/synchronize from mainline. + 2003-10-16 Release Manager * GCC 3.3.2 Released. diff -Nrc3pad gcc-3.3.2/boehm-gc/configure.host gcc-3.3.3/boehm-gc/configure.host *** gcc-3.3.2/boehm-gc/configure.host Sat Aug 18 01:04:42 2001 --- gcc-3.3.3/boehm-gc/configure.host Sun Dec 21 16:01:27 2003 *************** *** 14,33 **** # host The configuration host # host_cpu The configuration host CPU # target_optspace --enable-target-optspace ("yes", "no", "") # It sets the following shell variables: # gc_cflags Special CFLAGS to use when building # We should set -fexceptions if we are using gcc and might be used # inside something like gcj. This is the zeroth approximation: ! case "$host" in ! *-*-linux* ) ! gc_cflags=-fexceptions ! ;; ! *-*-hpux* ) ! gc_cflags=+ESdbgasm ! ;; ! esac case "${target_optspace}:${host}" in yes:*) --- 14,41 ---- # host The configuration host # host_cpu The configuration host CPU # target_optspace --enable-target-optspace ("yes", "no", "") + # GCC should be "yes" if using gcc # It sets the following shell variables: # gc_cflags Special CFLAGS to use when building + gc_cflags="" + # We should set -fexceptions if we are using gcc and might be used # inside something like gcj. This is the zeroth approximation: ! if test :"$GCC": = :yes: ; then ! gc_cflags="${gc_cflags} -fexceptions" ! else ! case "$host" in ! hppa*-*-hpux* ) ! if test :$GCC: != :"yes": ; then ! gc_cflags="${gc_flags} +ESdbgasm" ! fi ! # :TODO: actaully we should check using Autoconf if ! # the compiler supports this option. ! ;; ! esac ! fi case "${target_optspace}:${host}" in yes:*) *************** esac *** 46,52 **** case "${host}" in mips-tx39-*|mipstx39-unknown-*) ! boehm_gc_cflags="${boehm_gc_cflags} -G 0" ;; *) ;; --- 54,60 ---- case "${host}" in mips-tx39-*|mipstx39-unknown-*) ! gc_cflags="${gc_cflags} -G 0" ;; *) ;; diff -Nrc3pad gcc-3.3.2/bugs.html gcc-3.3.3/bugs.html *** gcc-3.3.2/bugs.html Thu Oct 16 20:10:52 2003 --- gcc-3.3.3/bugs.html Sat Feb 14 20:34:26 2004 *************** *** 28,36 ****

*************** three of which can be obtained from the *** 148,157 **** GCC bug database. Alternatively, you can use the gccbug script that mails your bug report to the bug database. Only if all this is absolutely impossible, mail all information to ! gcc-bugs@gcc.gnu.org, but note that ! such reports are often overlooked since they are not permanently recorded into ! the database for later processing.

Detailed bug reporting instructions

--- 146,154 ---- GCC bug database. Alternatively, you can use the gccbug script that mails your bug report to the bug database. +
Only if all this is absolutely impossible, mail all information to ! gcc-bugs@gcc.gnu.org.

Detailed bug reporting instructions

*************** In particular, bugs caused by invalid co *** 303,327 ****

C++

-

ABI bugs

- -

GCC 3.0 had a new ABI, which affected class layout, function mangling and - calling conventions. We had intended it to be complete, but unfortunately - some issues came to light, too late to fix in the 3.0 series. - The ABI should not change in dot releases, so we addressed most issues - in GCC 3.1.

- -
- -
Covariant return types
- -
Up to (and including) GCC 3.3 we did not implement non-trivial - covariant returns. This has been addressed for GCC 3.4.
- -
-

Missing features

-

We know some things are missing from G++.

--- 300,306 ---- *************** workaround is simply to place all defini *** 334,423 **** itself. Alternatively, the compilation unit containing template definitions may be included from the header.

-
Two stage lookup in templates is not implemented.
-

[14.6] specifies how names are looked up inside a template. G++ - does not do this correctly, but for most templates this will not be - noticeable.

-
!

Parse errors for "simple" code

!

Up to and including GCC 3.0, the compiler will give "parse error" for ! seemingly simple code, such as

!
! struct A{
    A();
    A(int);
-   void func();
  };
  
! struct B{
    B(A);
    B(A,A);
!   void func();
  };
  
! void foo(){
!   B b(A(),A(1));     //Variable b, initialized with two temporaries
!   B(A(2)).func();    //B temporary, initialized with A temporary
  }
! 
! !

The problem is that GCC starts to parse the declaration of ! b as a function b returning B, ! taking a function returning A as an argument. When it ! sees the 1, it is too late. The work-around in these cases is to add ! additional parentheses around the expressions that are mistaken as ! declarations:

! !
!   (B(A(2))).func();
! 
!

Sometimes, even that is not enough; to show the compiler that this ! should be really an expression, a comma operator with a dummy argument ! can be used:

!
!   B b((0,A()),A(1));
! 
!

Another example is the parse error for the return ! statement in

!
! struct A{};
  
! struct B{
!   A a;
!   A f1(bool);
! };
  
! A B::f1(bool b)
! {
!   if (b)
!     return (A());
!   return a;
! }
! 
!

The problem is that the compiler interprets A() as a ! function (taking no arguments, returning A), and ! (A()) as a cast - with a missing expression, hence the ! parse error. The work-around is to omit the parentheses:

!
!   if (b)
!     return A();
! 
!

This problem occurs in a number of variants; in throw ! statements, people also frequently put the object in parentheses. The ! exact error also somewhat varies with the compiler version. The ! work-arounds proposed do not change the semantics of the program at ! all; they make them perhaps less readable.


--- 313,399 ---- itself. Alternatively, the compilation unit containing template definitions may be included from the header.

!

Bugs fixed in the upcoming 3.4 series

!

The following bugs are present up to (and including) GCC 3.3.x. ! They have been fixed in 3.4.0.

!
! !
Two-stage name-lookup.
! !

GCC did not implement two-stage name-lookup (also see ! below).

! !
Covariant return types.
! !

GCC did not implement non-trivial covariant returns.

! !
Parse errors for "simple" code.
! !

GCC gave parse errors for seemingly simple code, such as

! !
! struct A
! {
    A();
    A(int);
  };
  
! struct B
! {
    B(A);
    B(A,A);
!   void foo();
  };
  
! A bar()
! {
!   B b(A(),A(1));  // Variable b, initialized with two temporaries
!   B(A(2)).foo();  // B temporary, initialized with A temporary
!   return (A());   // return A temporary
  }
! 
!

Although being valid code, each of the three lines with a comment was ! rejected by GCC. The work-arounds for older compiler versions proposed ! below do not change the semantics of the programs at all.

!

The problem in the first case was that GCC started to parse the ! declaration of b as a function called b returning ! B, taking a function returning A as an argument. ! When it encountered the 1, it was too late. To show the ! compiler that this should be really an expression, a comma operator with ! a dummy argument could be used:

!
! B b((0,A()),A(1));
! 
!

The work-around for simpler cases like the second one was to add ! additional parentheses around the expressions that were mistaken as ! declarations:

!
! (B(A(2))).foo();
! 
!

In the third case, however, additional parentheses were causing ! the problems: The compiler interpreted A() as a function ! (taking no arguments, returning A), and (A()) ! as a cast lacking an expression to be casted, hence the parse error. ! The work-around was to omit the parentheses:

!
! return A();
! 
!

This problem occured in a number of variants; in throw ! statements, people also frequently put the object in parentheses.

!

*************** main.

*** 639,645 ****

There is a common misconception that the GCC developers are responsible for GNU libc. These are in fact two entirely separate projects; please check the ! GNU libc web pages for details.

--- 615,621 ----

There is a common misconception that the GCC developers are responsible for GNU libc. These are in fact two entirely separate projects; please check the ! GNU libc web pages for details.

*************** a parse error before the character !

Common problems updating from G++ 2.95 to G++ ! 3.0

!

G++ 3.0 conforms much closer to the ISO C++ standard (available at ! http://www.ncits.org/cplusplus.htm).

!

We have also implemented some of the core and library defect reports (available at http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/cwg_defects.html & ! ! http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-defects.html respectively).

!
    !
  • The ABI has changed. This means that both class layout and name ! mangling is different. You must recompile all c++ libraries (if ! you don't you will get link errors).
  • !
  • The standard library is much more conformant, and uses the ! std:: namespace.
  • !
  • std:: is now a real namespace, not an alias for ! ::.
  • The standard header files for the c library don't end with .h, but begin with c (i.e. --- 687,735 ---- and the scope operator.

    !

    Common problems when upgrading the compiler

    !

    ABI changes

    !

    The application binary interface (ABI) defines how the elements of ! classes are laid out, how functions are called, how function names are ! mangled etc. It usually changes with each major release (i.e. when the ! first or second part of the version number changes). You must ! recompile all C++ libraries, or you risk linker errors or malfunctioning ! programs. However, the ABI is not changed with bug-fix releases (i.e. ! when the third part of the version number changes). The code should be ! binary compatible among these versions.

    ! !

    Standard conformance

    ! !

    With each release, we try to make G++ conform closer to the ISO C++ standard ! (available at ! http://www.ncits.org/cplusplus.htm). ! We have also implemented some of the core and library defect reports (available at http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/cwg_defects.html & ! http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-defects.html respectively).

    !

    Non-conforming legacy code that worked with older versions of GCC may be ! rejected by more recent compilers. There is no command-line switch to ensure ! compatibility in general, because trying to parse standard-conforming and ! old-style code at the same time would render the C++ frontend unmaintainable. ! However, some non-conforming constructs are allowed when the command-line ! option -fpermissive is used.

    !

    Two milestones in standard conformance are GCC 3.0 (including a major ! overhaul of the standard library) and the upcoming 3.4.0 version (with its ! new C++ parser).

    !

    New in GCC 3.0

    !
      ! !
    • The standard library is much more conformant, and uses the ! std:: namespace (which is now a real namespace, not an ! alias for ::).
    • The standard header files for the c library don't end with .h, but begin with c (i.e. *************** doesn't exist, you need to recompile lib *** 756,783 ****
    !

    This means you may get lots of errors about things like ! strcmp not being found. You've most likely forgotten to ! tell the compiler to look in the std:: namespace. There are ! several ways to do this,

      !
    • Say, std::strcmp at the call. This is the most explicit way of saying what you mean.
    • !
    • Say, using std::strcmp; somewhere before the call. You will need to do this for each function or type you wish to use from the standard library.
    • !
    • Say, using namespace std; somewhere before the call. This is the quick-but-dirty fix. This brings the whole of the ! std:: namespace into scope. Never do this in a ! header file, as you will be forcing users of your header file to do the ! same.

    In addition to the problems listed above, the manual contains a section on Common --- 750,846 ----

!

If you get lots of errors about things like cout not being ! found, you've most likely forgotten to tell the compiler to look in the ! std:: namespace. There are several ways to do this:

    !
  • Say std::cout at the call. This is the most explicit way of saying what you mean.
  • !
  • Say using std::cout; somewhere before the call. You will need to do this for each function or type you wish to use from the standard library.
  • !
  • Say using namespace std; somewhere before the call. This is the quick-but-dirty fix. This brings the whole of the ! std:: namespace into scope. Never do this in a ! header file, as every user of your header file will be affected by this ! decision.
+

New in GCC 3.4.0

+ +

The new parser brings a lot of improvements, especially concerning + name-lookup.

+ +
    + +
  • The "implicit typename" extension got removed (it was already deprecated + since GCC 3.1), so that the following code is now rejected, see [14.6]: +
    + template <typename> struct A
    + {
    +     typedef int X;
    + };
    + 
    + template <typename T> struct B
    + {
    +     A<T>::X          x;  // error
    +     typename A<T>::X y;  // OK
    + };
    + 
    + B<void> b;
    + 
  • + +
  • For similar reasons, the following code now requires the + template keyword, see [14.2]: +
    + template <typename> struct A
    + {
    +     template <int> struct X {};
    + };
    + 
    + template <typename T> struct B
    + {
    +     typename A<T>::X<0>          x;  // error
    +     typename A<T>::template X<0> y;  // OK
    + };
    + 
    + B<void> b;
    + 
  • + +
  • We now have two-stage name-lookup, so that the following code is + rejected, see [14.6]/9: +
    + template <typename T> int foo()
    + {
    +     return i;  // error
    + }
    + 
  • + +
  • This also affects members of base classes, see [14.6.2]: +
    + template <typename> struct A
    + {
    +     int i, j;
    + };
    + 
    + template <typename T> struct B : A<T>
    + {
    +     int foo1() { return i; }       // error
    +     int foo2() { return this->i; } // OK
    +     int foo3() { return B<T>::i; } // OK
    +     int foo4() { return A<T>::i; } // OK
    + 
    +     using A<T>::j;
    +     int foo5() { return j; }       // OK
    + };
    + 
  • + +

In addition to the problems listed above, the manual contains a section on Common diff -Nrc3pad gcc-3.3.2/config/ChangeLog gcc-3.3.3/config/ChangeLog *** gcc-3.3.2/config/ChangeLog Thu Oct 16 19:42:47 2003 --- gcc-3.3.3/config/ChangeLog Sat Feb 14 20:16:44 2004 *************** *** 1,3 **** --- 1,7 ---- + 2004-02-14 Release Manager + + * GCC 3.3.3 Released. + 2003-10-16 Release Manager * GCC 3.3.2 Released. diff -Nrc3pad gcc-3.3.2/configure.in gcc-3.3.3/configure.in *** gcc-3.3.2/configure.in Sat Aug 9 06:57:21 2003 --- gcc-3.3.3/configure.in Fri Jan 2 14:09:48 2004 *************** *** 14,21 **** ## For more information on these two systems, check out the documentation ## for 'Autoconf' (autoconf.texi) and 'Configure' (configure.texi). ! # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! # 1999, 2000, 2001, 2002 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by --- 14,21 ---- ## For more information on these two systems, check out the documentation ## for 'Autoconf' (autoconf.texi) and 'Configure' (configure.texi). ! # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, ! # 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by *************** case "${target}" in *** 416,422 **** ;; ia64*-**-hpux*) # No gdb or ld support yet. ! noconfigdirs="$noconfigdirs tix readline mmalloc libgui itcl gdb ld" ;; i[3456]86-*-coff | i[3456]86-*-elf) noconfigdirs="$noconfigdirs ${libgcj}" --- 416,422 ---- ;; ia64*-**-hpux*) # No gdb or ld support yet. ! noconfigdirs="$noconfigdirs ${libgcj} tix readline mmalloc libgui itcl gdb ld" ;; i[3456]86-*-coff | i[3456]86-*-elf) noconfigdirs="$noconfigdirs ${libgcj}" diff -Nrc3pad gcc-3.3.2/contrib/ChangeLog gcc-3.3.3/contrib/ChangeLog *** gcc-3.3.2/contrib/ChangeLog Thu Oct 16 19:42:51 2003 --- gcc-3.3.3/contrib/ChangeLog Sat Feb 14 20:16:50 2004 *************** *** 1,3 **** --- 1,12 ---- + 2004-02-14 Release Manager + + * GCC 3.3.3 Released. + + 2003-12-10 Kelley Cook + + * gcc_update (files_and_dependencies): Correct typo in the filename + gnat_ug_wnt.texi. + 2003-10-16 Release Manager * GCC 3.3.2 Released. diff -Nrc3pad gcc-3.3.2/contrib/gcc_update gcc-3.3.3/contrib/gcc_update *** gcc-3.3.2/contrib/gcc_update Tue Jun 24 01:45:48 2003 --- gcc-3.3.3/contrib/gcc_update Thu Dec 11 01:20:42 2003 *************** gcc/ada/nmake.ads: gcc/ada/sinfo.ads gcc *** 82,88 **** gcc/ada/gnat_ug_unx.texi: gcc/ada/gnat_ug.texi gcc/ada/xgnatug.adb gcc/ada/ug_words gcc/ada/gnat_ug_vms.texi: gcc/ada/gnat_ug.texi gcc/ada/xgnatug.adb gcc/ada/ug_words gcc/ada/gnat_ug_vxw.texi: gcc/ada/gnat_ug.texi gcc/ada/xgnatug.adb gcc/ada/ug_words ! gcc/ada/gnat_ug_w32.texi: gcc/ada/gnat_ug.texi gcc/ada/xgnatug.adb gcc/ada/ug_words # testsuite # Without this, _Pragma3.c can have a false negative. gcc/testsuite/gcc.dg/cpp/_Pragma3.c: gcc/testsuite/gcc.dg/cpp/mi1c.h --- 82,88 ---- gcc/ada/gnat_ug_unx.texi: gcc/ada/gnat_ug.texi gcc/ada/xgnatug.adb gcc/ada/ug_words gcc/ada/gnat_ug_vms.texi: gcc/ada/gnat_ug.texi gcc/ada/xgnatug.adb gcc/ada/ug_words gcc/ada/gnat_ug_vxw.texi: gcc/ada/gnat_ug.texi gcc/ada/xgnatug.adb gcc/ada/ug_words ! gcc/ada/gnat_ug_wnt.texi: gcc/ada/gnat_ug.texi gcc/ada/xgnatug.adb gcc/ada/ug_words # testsuite # Without this, _Pragma3.c can have a false negative. gcc/testsuite/gcc.dg/cpp/_Pragma3.c: gcc/testsuite/gcc.dg/cpp/mi1c.h diff -Nrc3pad gcc-3.3.2/contrib/regression/ChangeLog gcc-3.3.3/contrib/regression/ChangeLog *** gcc-3.3.2/contrib/regression/ChangeLog Thu Oct 16 19:42:54 2003 --- gcc-3.3.3/contrib/regression/ChangeLog Sat Feb 14 20:16:54 2004 *************** *** 1,3 **** --- 1,7 ---- + 2004-02-14 Release Manager + + * GCC 3.3.3 Released. + 2003-10-16 Release Manager * GCC 3.3.2 Released. diff -Nrc3pad gcc-3.3.2/fastjar/ChangeLog gcc-3.3.3/fastjar/ChangeLog *** gcc-3.3.2/fastjar/ChangeLog Thu Oct 16 19:42:57 2003 --- gcc-3.3.3/fastjar/ChangeLog Sat Feb 14 20:17:01 2004 *************** *** 1,3 **** --- 1,7 ---- + 2004-02-14 Release Manager + + * GCC 3.3.3 Released. + 2003-10-16 Release Manager * GCC 3.3.2 Released. diff -Nrc3pad gcc-3.3.2/fastjar/fastjar.info gcc-3.3.3/fastjar/fastjar.info *** gcc-3.3.2/fastjar/fastjar.info Thu Oct 16 21:17:45 2003 --- gcc-3.3.3/fastjar/fastjar.info Sat Feb 14 20:54:38 2004 *************** *** 1,5 **** ! This is fastjar.info, produced by makeinfo version 4.2 from ! fastjar.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY --- 1,5 ---- ! Ceci est le fichier Info fastjar.info, produit par Makeinfo version 4.6 ! à partir fastjar.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY *************** File: fastjar.info, Node: Top, Next: I *** 28,34 **** Introduction ************ ! This manual describes how to use `jar' and `grepjar'. * Menu: --- 28,34 ---- Introduction ************ ! This manual describes how to use `jar' and `grepjar'. * Menu: *************** File: fastjar.info, Node: Invoking jar, *** 42,49 **** Invoking jar ************ ! `fastjar' is an implementation of Sun's jar utility that comes with ! the JDK, written entirely in C, and runs in a fraction of the time while being feature compatible. If any file is a directory then it is processed recursively. The --- 42,49 ---- Invoking jar ************ ! `fastjar' is an implementation of Sun's jar utility that comes with the ! JDK, written entirely in C, and runs in a fraction of the time while being feature compatible. If any file is a directory then it is processed recursively. The *************** the same order the `-m' and `-f' flags a *** 65,70 **** --- 65,71 ---- Update existing archive. This option is disabled due to bugs (currently fails with exit status 1 and does nothing). + The following parameters are optional: `-@' *************** the same order the `-m' and `-f' flags a *** 100,105 **** --- 101,107 ---- `-v' Generate verbose output on standard output. + All remaining options are considered to be names of files.  *************** File: fastjar.info, Node: Invoking grep *** 108,115 **** Invoking grepjar **************** ! The `grepjar' program can be used to search files in a jar file for ! a pattern. `-b' Print byte offset of match. --- 110,117 ---- Invoking grepjar **************** ! The `grepjar' program can be used to search files in a jar file for a ! pattern. `-b' Print byte offset of match. *************** GNU GENERAL PUBLIC LICENSE *** 155,163 **** Preamble ======== ! The licenses for most software are designed to take away your ! freedom to share and change it. By contrast, the GNU General Public ! License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to --- 157,165 ---- Preamble ======== ! The licenses for most software are designed to take away your freedom ! to share and change it. By contrast, the GNU General Public License is ! intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to *************** modification follow. *** 438,444 **** How to Apply These Terms to Your New Programs ============================================= ! If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. --- 440,446 ---- How to Apply These Terms to Your New Programs ============================================= ! If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. *************** GNU Library General Public License inste *** 502,510 ****  Tag Table: ! Node: Top822 ! Node: Invoking jar1127 ! Node: Invoking grepjar2908 ! Node: Copying3514  End Tag Table --- 504,512 ----  Tag Table: ! Node: Top843 ! Node: Invoking jar1145 ! Node: Invoking grepjar2925 ! Node: Copying3528  End Tag Table diff -Nrc3pad gcc-3.3.2/fastjar/grepjar.1 gcc-3.3.3/fastjar/grepjar.1 *** gcc-3.3.2/fastjar/grepjar.1 Thu Oct 16 21:17:52 2003 --- gcc-3.3.3/fastjar/grepjar.1 Sat Feb 14 20:54:40 2004 *************** *** 1,7 **** ! .\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13 .\" .\" Standard preamble: ! .\" ======================================================================== .de Sh \" Subsection heading .br .if t .Sp --- 1,8 ---- ! .\" Automatically generated by Pod::Man version 1.15 ! .\" Sat Feb 14 20:54:40 2004 .\" .\" Standard preamble: ! .\" ====================================================================== .de Sh \" Subsection heading .br .if t .Sp *************** *** 14,19 **** --- 15,26 ---- .if t .sp .5v .if n .sp .. + .de Ip \" List item + .br + .ie \\n(.$>=3 .ne \\$3 + .el .ne 3 + .IP "\\$1" \\$2 + .. .de Vb \" Begin verbatim text .ft CW .nf *************** *** 21,34 **** .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. | will give a ! .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to ! .\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' ! .\" expand to `' in nroff, nothing in troff, for use with C<>. .tr \(*W-|\(bv\*(Tr .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ --- 28,42 ---- .. .de Ve \" End verbatim text .ft R + .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. | will give a ! .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used ! .\" to do unbreakable dashes and therefore won't be available. \*(C` and ! .\" \*(C' expand to `' in nroff, nothing in troff, for use with C<> .tr \(*W-|\(bv\*(Tr .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ *************** *** 48,57 **** . ds R" '' 'br\} .\" ! .\" If the F register is turned on, we'll generate index entries on stderr for ! .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index ! .\" entries marked with X<> in POD. Of course, you'll have to process the ! .\" output yourself in some meaningful fashion. .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" --- 56,65 ---- . ds R" '' 'br\} .\" ! .\" If the F register is turned on, we'll generate index entries on stderr ! .\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and ! .\" index entries marked with X<> in POD. Of course, you'll have to process ! .\" the output yourself in some meaningful fashion. .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" *************** *** 60,72 **** . rr F .\} .\" ! .\" For nroff, turn off justification. Always turn off hyphenation; it makes ! .\" way too many mistakes in technical documents. .hy 0 .if n .na .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 --- 68,81 ---- . rr F .\} .\" ! .\" For nroff, turn off justification. Always turn off hyphenation; it ! .\" makes way too many mistakes in technical documents. .hy 0 .if n .na .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. + .bd B 3 . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 *************** *** 126,135 **** . ds Ae AE .\} .rm #[ #] #H #V #F C ! .\" ======================================================================== .\" .IX Title "GREPJAR 1" ! .TH GREPJAR 1 "2003-10-16" "gcc-3.3.2" "GNU" .SH "NAME" grepjar \- search files in a jar file for a pattern .SH "SYNOPSIS" --- 135,145 ---- . ds Ae AE .\} .rm #[ #] #H #V #F C ! .\" ====================================================================== .\" .IX Title "GREPJAR 1" ! .TH GREPJAR 1 "gcc-3.3.3" "2004-02-14" "GNU" ! .UC .SH "NAME" grepjar \- search files in a jar file for a pattern .SH "SYNOPSIS" *************** The \f(CW\*(C`grepjar\*(C'\fR program ca *** 141,175 **** a pattern. .SH "OPTIONS" .IX Header "OPTIONS" ! .IP "\fB\-b\fR" 4 .IX Item "-b" Print byte offset of match. ! .IP "\fB\-c\fR" 4 .IX Item "-c" Print number of matches. ! .IP "\fB\-i\fR" 4 .IX Item "-i" ! Compare case\-insensitively. ! .IP "\fB\-n\fR" 4 .IX Item "-n" Print line number of each match. ! .IP "\fB\-s\fR" 4 .IX Item "-s" Suppress error messages. ! .IP "\fB\-w\fR" 4 .IX Item "-w" Force \fI\s-1PATTERN\s0\fR to match only whole words. ! .IP "\fB\-e\fR \fI\s-1PATTERN\s0\fR" 4 .IX Item "-e PATTERN" Use \fI\s-1PATTERN\s0\fR as regular expression. ! .IP "\fB\-\-help\fR" 4 ! .IX Item "--help" Print help, then exit. ! .IP "\fB\-V\fR" 4 .IX Item "-V" .PD 0 ! .IP "\fB\-\-version\fR" 4 ! .IX Item "--version" .PD Print version number, then exit. .SH "SEE ALSO" --- 151,185 ---- a pattern. .SH "OPTIONS" .IX Header "OPTIONS" ! .Ip "\fB\-b\fR" 4 .IX Item "-b" Print byte offset of match. ! .Ip "\fB\-c\fR" 4 .IX Item "-c" Print number of matches. ! .Ip "\fB\-i\fR" 4 .IX Item "-i" ! Compare case-insensitively. ! .Ip "\fB\-n\fR" 4 .IX Item "-n" Print line number of each match. ! .Ip "\fB\-s\fR" 4 .IX Item "-s" Suppress error messages. ! .Ip "\fB\-w\fR" 4 .IX Item "-w" Force \fI\s-1PATTERN\s0\fR to match only whole words. ! .Ip "\fB\-e\fR \fI\s-1PATTERN\s0\fR" 4 .IX Item "-e PATTERN" Use \fI\s-1PATTERN\s0\fR as regular expression. ! .Ip "\fB\*(--help\fR" 4 ! .IX Item "help" Print help, then exit. ! .Ip "\fB\-V\fR" 4 .IX Item "-V" .PD 0 ! .Ip "\fB\*(--version\fR" 4 ! .IX Item "version" .PD Print version number, then exit. .SH "SEE ALSO" diff -Nrc3pad gcc-3.3.2/fastjar/jar.1 gcc-3.3.3/fastjar/jar.1 *** gcc-3.3.2/fastjar/jar.1 Thu Oct 16 21:17:51 2003 --- gcc-3.3.3/fastjar/jar.1 Sat Feb 14 20:54:40 2004 *************** *** 1,7 **** ! .\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13 .\" .\" Standard preamble: ! .\" ======================================================================== .de Sh \" Subsection heading .br .if t .Sp --- 1,8 ---- ! .\" Automatically generated by Pod::Man version 1.15 ! .\" Sat Feb 14 20:54:40 2004 .\" .\" Standard preamble: ! .\" ====================================================================== .de Sh \" Subsection heading .br .if t .Sp *************** *** 14,19 **** --- 15,26 ---- .if t .sp .5v .if n .sp .. + .de Ip \" List item + .br + .ie \\n(.$>=3 .ne \\$3 + .el .ne 3 + .IP "\\$1" \\$2 + .. .de Vb \" Begin verbatim text .ft CW .nf *************** *** 21,34 **** .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. | will give a ! .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to ! .\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' ! .\" expand to `' in nroff, nothing in troff, for use with C<>. .tr \(*W-|\(bv\*(Tr .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ --- 28,42 ---- .. .de Ve \" End verbatim text .ft R + .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. | will give a ! .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used ! .\" to do unbreakable dashes and therefore won't be available. \*(C` and ! .\" \*(C' expand to `' in nroff, nothing in troff, for use with C<> .tr \(*W-|\(bv\*(Tr .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ *************** *** 48,57 **** . ds R" '' 'br\} .\" ! .\" If the F register is turned on, we'll generate index entries on stderr for ! .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index ! .\" entries marked with X<> in POD. Of course, you'll have to process the ! .\" output yourself in some meaningful fashion. .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" --- 56,65 ---- . ds R" '' 'br\} .\" ! .\" If the F register is turned on, we'll generate index entries on stderr ! .\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and ! .\" index entries marked with X<> in POD. Of course, you'll have to process ! .\" the output yourself in some meaningful fashion. .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" *************** *** 60,72 **** . rr F .\} .\" ! .\" For nroff, turn off justification. Always turn off hyphenation; it makes ! .\" way too many mistakes in technical documents. .hy 0 .if n .na .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 --- 68,81 ---- . rr F .\} .\" ! .\" For nroff, turn off justification. Always turn off hyphenation; it ! .\" makes way too many mistakes in technical documents. .hy 0 .if n .na .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. + .bd B 3 . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 *************** *** 126,135 **** . ds Ae AE .\} .rm #[ #] #H #V #F C ! .\" ======================================================================== .\" .IX Title "FASTJAR 1" ! .TH FASTJAR 1 "2003-10-16" "gcc-3.3.2" "GNU" .SH "NAME" jar \- archive tool for Java archives .SH "SYNOPSIS" --- 135,145 ---- . ds Ae AE .\} .rm #[ #] #H #V #F C ! .\" ====================================================================== .\" .IX Title "FASTJAR 1" ! .TH FASTJAR 1 "gcc-3.3.3" "2004-02-14" "GNU" ! .UC .SH "NAME" jar \- archive tool for Java archives .SH "SYNOPSIS" *************** the same order the \fB\-m\fR and \fB\-f\ *** 147,201 **** .SH "OPTIONS" .IX Header "OPTIONS" Exactly one of the following actions must be specified: ! .IP "\fB\-c\fR" 4 .IX Item "-c" Create new archive. ! .IP "\fB\-t\fR" 4 .IX Item "-t" List table of contents for archive. ! .IP "\fB\-x\fR" 4 .IX Item "-x" Extract named (or all) files from archive. ! .IP "\fB\-u\fR" 4 .IX Item "-u" Update existing archive. This option is disabled due to bugs (currently fails with exit status 1 and does nothing). .PP The following parameters are optional: ! .IP "\fB\-@\fR" 4 .IX Item "-@" Read the names of the files to add to the archive from stdin. This option is supported only in combination with \fB\-c\fR or \fB\-u\fR. Non standard option added in the \s-1GCC\s0 version. ! .IP "\fB\-C\fR \fIdirectory\fR" 4 .IX Item "-C directory" Change to the \fIdirectory\fR and include the following file. ! .IP "\fB\-E\fR" 4 .IX Item "-E" Prevent fastjar from reading the content of a directory when specifying one (and instead relying on the provided list of files to populate the archive with regard to the directory entry). Non standard option added in the \s-1GCC\s0 version. ! .IP "\fB\-M\fR" 4 .IX Item "-M" Do not create a manifest file for the entries. ! .IP "\fB\-0\fR" 4 .IX Item "-0" Store only; use no \s-1ZIP\s0 compression. ! .IP "\fB\-V\fR" 4 .IX Item "-V" .PD 0 ! .IP "\fB\-\-version\fR" 4 ! .IX Item "--version" .PD Display version information. ! .IP "\fB\-f\fR \fIarchive\fR" 4 .IX Item "-f archive" Specify archive file name. ! .IP "\fB\-m\fR \fImanifest\fR" 4 .IX Item "-m manifest" Include manifest information from specified \fImanifest\fR file. ! .IP "\fB\-v\fR" 4 .IX Item "-v" Generate verbose output on standard output. .PP --- 157,211 ---- .SH "OPTIONS" .IX Header "OPTIONS" Exactly one of the following actions must be specified: ! .Ip "\fB\-c\fR" 4 .IX Item "-c" Create new archive. ! .Ip "\fB\-t\fR" 4 .IX Item "-t" List table of contents for archive. ! .Ip "\fB\-x\fR" 4 .IX Item "-x" Extract named (or all) files from archive. ! .Ip "\fB\-u\fR" 4 .IX Item "-u" Update existing archive. This option is disabled due to bugs (currently fails with exit status 1 and does nothing). .PP The following parameters are optional: ! .Ip "\fB\-@\fR" 4 .IX Item "-@" Read the names of the files to add to the archive from stdin. This option is supported only in combination with \fB\-c\fR or \fB\-u\fR. Non standard option added in the \s-1GCC\s0 version. ! .Ip "\fB\-C\fR \fIdirectory\fR" 4 .IX Item "-C directory" Change to the \fIdirectory\fR and include the following file. ! .Ip "\fB\-E\fR" 4 .IX Item "-E" Prevent fastjar from reading the content of a directory when specifying one (and instead relying on the provided list of files to populate the archive with regard to the directory entry). Non standard option added in the \s-1GCC\s0 version. ! .Ip "\fB\-M\fR" 4 .IX Item "-M" Do not create a manifest file for the entries. ! .Ip "\fB\-0\fR" 4 .IX Item "-0" Store only; use no \s-1ZIP\s0 compression. ! .Ip "\fB\-V\fR" 4 .IX Item "-V" .PD 0 ! .Ip "\fB\*(--version\fR" 4 ! .IX Item "version" .PD Display version information. ! .Ip "\fB\-f\fR \fIarchive\fR" 4 .IX Item "-f archive" Specify archive file name. ! .Ip "\fB\-m\fR \fImanifest\fR" 4 .IX Item "-m manifest" Include manifest information from specified \fImanifest\fR file. ! .Ip "\fB\-v\fR" 4 .IX Item "-v" Generate verbose output on standard output. .PP diff -Nrc3pad gcc-3.3.2/gcc/ChangeLog gcc-3.3.3/gcc/ChangeLog *** gcc-3.3.2/gcc/ChangeLog Thu Oct 16 19:43:18 2003 --- gcc-3.3.3/gcc/ChangeLog Sat Feb 14 20:17:31 2004 *************** *** 1,3 **** --- 1,1108 ---- + 2004-02-14 Release Manager + + * GCC 3.3.3 Released. + + 2004-02-12 Eric Botcazou + + PR target/14113 + Backport from mainline: + + 2004-02-03 Eric Botcazou + + * config/sparc/sparc.md (call followed by jump define_peephole's): + Delete. + + 2004-02-06 H.J. Lu + + * doc/invoke.texi: Mention SSE2 and SSE3. + + * config/i386/i386.h: Deprecate -mpni/-mno-pni. + + 2004-02-06 Kelley Cook + + * config/i386/i386.c: Rename pni to sse3. + * config/i386/i386.h: Likewise. + * config/i386/i386.md: Likewise. + * config/i386/pmmintrin.h: Likewise. + * doc/extend.texi: Likewise. + * doc/invoke.texi: Likewise. + + 2004-02-03 Wolfgang Bangerth + + PR other/14003 + * doc/invoke.texi (x86 options): Fix spelling/wording. + + 2004-02-01 Geoffrey Keating + + PR bootstrap/13960 + * config/rs6000/rs6000.h (LEGITIMATE_LO_SUM_ADDRESS_P): Accept + lo_sum addresses on Darwin. + + 2004-01-30 Eric Botcazou + + * config/sparc/sparc.c: Update copyright. + * config/sparc/sparc.h: Likewise. + * config/sparc/sparc.md: Likewise. + + 2004-01-29 Roger Sayle + + PR java/13824 + * tree.c (unsafe_for_reeval): Handle EXIT_BLOCK_EXPR nodes specially + as their EXIT_BLOCK_LABELED_BLOCK operands can lead to unbounded + recursion. + + 2004-01-29 H.J. Lu + + * doc/invoke.texi: Remove the pni option from -mfpmath=. + + 2004-01-29 Gabriel Dos Reis + + Backport from mainline + + 2004-01-20 Zdenek Dvorak + + PR optimization/12440 + * loop.c: Include ggc.h. + (loop_optimize): Run garbage collector between optimization of loops. + * Makefile.in (loop.o): Add GGC_H dependency. + + 2004-01-24 Matthias Klose + + * objc/objc-act.c (is_public): Fix typo in message. + + 2004-01-23 Richard Henderson + + PR opt/12941 + * combine.c (SHIFT_COUNT_TRUNCATED): Provide default value. + (simplify_comparison): Don't simplify (eq (zero_extract c 1 r) 0) + if SHIFT_COUNT_TRUNCATED is set. + + 2004-01-23 Ian Lance Taylor + + * doc/invoke.texi (Optimize Options): Note that --param arguments + are subject to change without notice. + + 2004-01-23 John David Anglin + + * reload.c (can_reload_into): Add prototype and K&R style function + declaration. + + 2004-01-21 Andreas Jaeger + Michael Matz + + * doc/extend.texi (Extended Asm): Clarify memory clobber. + + 2004-01-21 Ralf Corsepius + + PR target/13073 + * config/h8300/t-rtems (h8300-*-rtems*): New. + * config.gcc: Use config/h8300/t-rtems. + + 2004-01-20 Gabriel Dos Reis + + Backport from mainline + + 2004-01-10 Jan Hubicka + PR opt/12826 + * loop.c (insert_loop_mem): Prefer VOLATILE memory references to be + stored. + + 2004-01-16 Jan Hubicka + + PR opt/13608 + * i386.c (ix86_compute_frame_layout): Fix for alloca on leaf function. + + 2004-01-16 Segher Boessenkool + + PR target/11793 + * config/rs6000/rs6000.h (LEGITIMATE_CONSTANT_P): Handle + vectors. + + 2004-01-16 Jan Hubicka + + PR opt/11350 + * cfgcleanup.c (try_optimize_cfg): Suppress tablejump removal + after reload. + * cfgrtl.c (try_redirect_by_replacing_branch): Likewise. + + 2004-01-15 J"orn Rennecke + + PR optimization/10392 + * reload.c (can_reload_into): New function. + (push_reload): Use it. + + 2004-01-14 J"orn Rennecke + + PR target/9365 + * sh.c (gen_block_redirect): Add special handling of RETURN. + (gen_far_branch) Don't call gen_stuff_delay_slot if there is no + far branch target (i.e. it's a return). + + 2004-01-14 Hartmut Penner + + * gcc/config/rs6000/rs6000.c (rs6000_stack_info) + Calculate always vrsave_mask if TARGET_ALTIVEC. + (rs6000_emit_prologue): Emit code for vrsave + only if TARGET_ALTIVEC_VRSAVE. + (rs6000_emit_epilogue): Likewise. + + 2003-01-14 Nicola Pero + + PR objc/7993 + * objc-act.c (is_private): Do not emit the 'instance variable %s + is declared private' error. + (is_public): Emit the error after calling is_private. + (lookup_objc_ivar): If the instance variable is private, return 0 + - the instance variable is invisible here. + + 2004-01-12 Marc Espie + + * system.h: handle YYBYACC like YYBISON. + + 2004-01-12 Matthias Klose + + Backport from mainline + + 2003-12-08 Stuart Hastings + * config/i386/i386.md: Typo in split of fp-valued if_then_else. + + 2004-01-12 Roger Sayle + + PR middle-end/11397 + * varasm.c (assemble_alias): Remove weak aliases from weak_decls. + + 2004-01-12 J"orn Rennecke + + PR target/13585 + * sh-protos.h (check_use_sfunc_addr): Declare. + * sh.c (extract_sfunc_addr, check_use_sfunc_addr): New functions. + * sh.md (use_sfunc_addr): Use check_use_sfunc_addr in insn predicate. + + 2004-01-12 Matthias Klose + + Backport from mainline + + 2004-01-11 Richard Henderson + PR opt/12441 + Revert: Sat Mar 30 14:08:55 CET 2002 Jan Hubicka + * i386.c (aligned_operand): Be prepared for SUBREGed registers. + (ix86_decompose_address): Use REG_P instead of GET_CODE (...) == REG. + (ix86_address_cost): Be prepared for SUBREGed registers. + (legitimate_address_p): Accept SUBREGed registers. + + 2004-01-11 Richard Henderson + + * config/alpha/alpha.c (alpha_encode_section_info): Use 'I' + for TLS_MODEL_INITIAL_EXEC. + (tls_symbolic_operand_1): Update to match. + (tls_symbolic_operand_type): Likewise. + + 2004-01-11 Jakub Jelinek + + PR middle-end/13392 + * builtins.c (expand_builtin_expect_jump): Handle conditional jumps + to drop through label. Don't fall back to SCC even when conditional + jump has not been found. + + 2004-01-09 Jeff Bailey + + PR target/12561 + * config/t-gnu: Rename SYSTEM_HEADER_DIR to NATIVE_SYSTEM_HEADER_DIR. + + 2004-01-09 Richard Henderson + + * recog.c (constrain_operands): Validate mem operands. + + 2004-01-02 Nathanael Nerode + + PR target/13069 + Backport the following from mainline: + + 2003-03-08 Neil Booth + * config/sh/rtemself.h (TARGET_OS_CPP_BUILTINS): Use instead of + CPP_PREDEFINES. + * config/sh/rtems.h (TARGET_OS_CPP_BUILTINS): Use instead of + CPP_PREDEFINES. + + 2003-09-27 Kelley Cook + * config/sh/rtemself.h, config/sh/rtems.h: GNU CC -> GCC. + + 2004-01-02 Roger Sayle + + * tree.h (integer_nonzerop): Use PARAMS macro with prototype. + * tree.c (integer_nonzerop): Use K&R style function declaration. + + 2004-01-02 Andreas Schwab + + * doc/c-tree.texi: Fix @item vs. @itemx. + * doc/cpp.texi: Likewise. + * doc/install.texi: Likewise. + * doc/invoke.texi: Likewise. + + 2004-01-02 Andreas Jaeger , Gerald Pfeifer + + * doc/install.texi (Specific): Mention x86_64. + + 2004-01-01 Jakub Jelinek + + PR optimization/13521 + Backport from mainline: + 2003-03-22 Richard Henderson + + * cfgcleanup.c (insns_match_p): Do not do EQUIV substitution + after reload. + + 2003-12-31 Roger Sayle + + PR fortran/12632 + * tree.c (integer_nonzerop): New predicate for nonzero integers. + * tree.h (integer_nonzerop): Add function prototype. + * fold-const.c (fold) : Don't fold a constant condition, + if we'd replace a COND_EXPR of non-void type by one of its operands + of void type. + + 2003-12-31 Kazu Hirata + + Backport from mainline: + + 2003-09-12 Richard Sandiford + + PR target/13373 + * config/mcore/mcore-protos.h (mcore_r15_operand_p): Declare. + (mcore_secondary_reload_class): Declare. + (mcore_output_inline_const_forced): Remove. + * config/mcore/mcore.md (movsi): Remove the code that forced + non-inlineable constants into a register if the target was r15 + or the stack pointer. Remove constant restrictions from the main + define_insn. Remove r <- I, r <- M and r <- N alternatives in favor + of an r <- P alternative. Remove fallback define_insn for reload. + (movhi, movqi): Use gen_lowpart rather than gen_SUBREG. Remove reload + define_insn. Use mcore_output_move in the remaining define_insn. + Adjust condition and constraints in the way as for movsi. + (movdi): Always split unacceptable constants into two. Use + simplify_gen_subreg instead of operand_subword{,_force}. + * config/mcore/mcore.c (mcore_output_inline_const_forced): Remove. + (mcore_output_move): Support HImode and QImode moves as well. + (mcore_m15_operand_p): New function. + (mcore_reload_class): Use it to detect cases where LRW_REGS are better. + (mcore_secondary_reload_class): New function. + * config/mcore/mcore.h (SECONDARY_RELOAD_CLASS): Redefine in + terms of mcore_secondary_reload_class. + + 2003-12-31 Zack Weinberg + + * config/ia64/ia64.c (ia64_va_arg): Pass pointer for + variable-sized type through convert_memory_address. + (ia64_in_small_data_p): Always return false for FUNCTION_DECLs. + + 2003-12-24 Andrew Pinski + + PR bootstrap/13068 + Backport from mainline: + 2003-05-09 Matt Kraai + + * mklibgcc.in: Remove extra quotes. + 2003-05-08 Aldy Hernandez + + * mklibgcc.in: Use mkinstalldirs when installing multilib + directories. + + 2003-12-24 Roger Sayle + + Backport from mainline: + + 2003-09-18 Mark Mitchell + * explow.c (convert_memory_address): Define even when + POINTERS_EXTEND_UNSIGNED is not defined. Do nothing if the address + is already in the right mode. + + 2003-12-23 Andrew Pinski + + PR middle-end/13475 + Backport from mainline: + 2003-06-19 Aldy Hernandez + + * expr.c (const_vector_from_tree): Initialize remaining + elements to 0. + + 2003-12-23 Kazu Hirata + + PR target/11576 + * config/h8300/h8300.h (CONSTANT_ADDRESS_P): Allow CONST and + HIGH on all variants. + + 2003-12-23 Matthias Klose + + * config/mips/linux.h (LIB_SPEC): Use -lpthread when + -pthread was specified. + + 2003-12-23 Eric Botcazou + + PR optimization/13394 + * toplev.c (rest_of_compilation): Move call to + check_function_return_warnings right after the sibcall + optimization pass. + + 2003-12-23 Eric Botcazou + + PR c/13382 + * c-typeck.c (convert_for_assignment): When converting from + integral type to pointer type, always call convert. + + 2003-12-22 Gabriel Dos Reis + + PR target/11271 + * reload.c: Revert last backport from mainline. It breaks s390. + + 2003-12-21 Roger Sayle + + * config/ia64/hpux.h (TARGET_OS_CPP_BUILTINS): Define _ILP32 + when compiling in ILP32 mode. + + 2003-12-21 Gabriel Dos Reis + + Backport from mainline: + 2003-10-31 Richard Earnshaw + + PR target/11271 + * reload.c (find_reloads_address): Handle any register in + (PLUS (PLUS (REG) (REG)) (CONST_INT). + + 2003-12-21 Roger Sayle + + PR middle-end/13400 + * ifcvt.c (noce_process_if_block): Disable unconditional write + optimizations if we could introduce a store to trapping memory + that wasn't present previously. + + 2003-12-20 Roger Sayle + + PR optimization/13031 + * gcse.c (cprop_jump): Backport code clean-up and bug-fix + from mainline [2003-05-20 Sayle, Hirata and Rennecke patch]. + (cprop_insn): Don't attemp further substitutions if the + current instruction has been deleted. + (local_cprop_pass): Likewise. + + 2003-12-19 Jakub Jelinek + + PR c++/13239 + * builtins.c (expand_builtin_expect_jump): Update + TREE_VALUE (arglist) if unsave_expr_now langhook + created a new tree. + + 2003-12-18 Mark Mitchell + + * config/sol2.h (LINK_ARCH32_SPEC): Define in terms of ... + (LINK_ARCH32_SPEC_BASE): ... this new macro. + * config/sparc/sol2-bi.h (LINK_ARCH64_SPEC): Define in terms of + ... + (LINK_ARCH64_SPEC_BASE): ... this new macro. + * config/sparc/sol2-gld-bi.h (LINK_ARCH32_SPEC): New macro. + (LINK_ARCH64_SPEC): Likewise. + + 2003-12-17 Ulrich Weigand + + PR target/11992 + * config/s390/s390.md ("*cmpmem_long_64"): Use CLCLE instruction + instead of CLCL. + ("*cmpmem_long_31"): Likewise. + + 2003-12-16 Zack Weinberg + + Backport the following patches from mainline. + + 2003-12-05 Mark Mitchell + + * config/ia64/ia64.h (MUST_PASS_IN_STACK): Define. + + 2003-12-01 James E Wilson + + * config/ia64/ia64.h (FUNCTION_ARG_REGNO_P): Use AR_REG_FIRST not + GR_ARG_FIRST. + + 2003-10-21 Zack Weinberg + + * config/ia64/ia64.md (cmpxchg_acq_si): Mark operand 3 as DImode. + * config/ia64/ia64.c (ia64_expand_fetch_and_op, + ia64_expand_op_and_fetch): Make sure the REG for ar.ccv is + DImode. Use convert_move to load ar.ccv. + (ia64_expand_compare_and_swap): Likewise. + If expand_expr doesn't put 'old' and 'new' in the proper + modes, run them through convert_to_mode. + + 2003-10-14 Steve Ellcey + + * config/ia64/ia64.c (ia64_expand_call): Force function address + to DImode. + * config/ia64/ia64.md (call_gp): Put DImode on operand 0. + + 2003-06-11 Richard Henderson + + * config/ia64/ia64.md (call_gp): Fix memory mode. + + 2003-05-14 Eric Christopher + + * combine.c: Fix header comments. + (distribute_notes): Remove usage of elim_i1, elim_i2. Propagate + to all calls and prototype. + + 2003-12-16 David O'Brien + + * config/alpha/freebsd.h (FBSD_TARGET_CPU_CPP_BUILTINS): Add __LP64__. + * config/sparc/freebsd.h (FBSD_TARGET_CPU_CPP_BUILTINS): Likewise. + * config/i386/freebsd64.h (FBSD_TARGET_CPU_CPP_BUILTINS): Conditionally + add __LP64__. + + 2003-12-16 Hartmut Penner + + * altivec.h (vec_cmple, vec_all_numeric): Fix typo. + * testsuite/gcc.dg/altivec-10.c: Test for above. + + 2003-12-15 Kazu Hirata + + PR target/13122 + * config/h8300/h8300.md (pushqi1_h8300hs_normal): New. + (pushqi1): Call gen_pushqi1_h8300hs_normal in normal mode. + (pushhi1_h8300hs_normal): New. + (pushhi1): Call gen_pushqi1_h8300hs_normal in normal mode. + + * config/h8300/h8300.h (LINK_SPEC): Support normal mode. + * config/h8300/h8300.c (asm_file_start): Correctly output + an architecture directive. + * config/h8300/lib1funcs.asm: Correctly specify an + architecture directive. + + 2003-12-12 Roger Sayle + + PR optimization/13037 + * loop.c (update_giv_derive): Ignore redundant sets of a biv when + calculating how to derive a giv from a biv. + + 2003-12-12 Jakub Jelinek + + * config/ia64/linux.h (IA64_GATE_AREA_END): Increase by 64K. + (MD_FALLBACK_FRAME_STATE_FOR): Set fpsr_loc, br_loc[6] and + br_loc[7]. Update comment. + (MD_HANDLE_UNWABI): Define. + * config/ia64/unwind-ia64.c (struct unw_state_record): Add + unwabi field. + (struct _Unwind_Context): Increase br_loc array size to 8 entries. + (desc_abi): Set unwabi. + (uw_update_reg_address): Allow br up to 7. + (uw_update_context): Invoke MD_HANDLE_UNWABI if defined. + (uw_install_context): Load b1..b5 from correct locations. + Fix insn loading ar.fpsr. + * doc/tm.texi: Document MD_HANDLE_UNWABI. + + 2003-12-12 Hans-Peter Nilsson + + PR target/13256 + Backport from mainline: + * resource.h (enum mark_resource_type): Remove member MARK_DEST. + The only user changed as follows: + * resource.c (mark_set_resources) : Always recurse for + SET_SRC (x). + : Always recurse on + operands. + : Delete, deferring to default code. + + PR target/12598 + Backport from mainline: + * config/cris/cris.md (define_split "*mov_sidesi_biap_mem"+1) + (define_splits "*mov_sidesi_mem"+1, "casesi"+9, +10, +11, +12): + Use cris_mem_op and replace_equiv_address, not gen_rtx_MEM. + ("call", "call_value", define_split "*mov_sidesi_mem"+19, +20) + (define_split "*mov_sidesi_mem"+21, +22, +23, +24, +25, +26, +27) + (define_split "*mov_sidesi_mem"+28, +29, +30): Use + replace_equiv_address, not gen_rtx_MEM. + * config/cris/cris.c (cris_mem_op): New match_operator function. + (cris_notice_update_cc): Use replace_equiv_address, not + gen_rtx_MEM. + * config/cris/cris.h (PREDICATE_CODES): Add cris_mem_op. + + 2003-12-11 Eric Botcazou + + Backport from mainline: + + 2003-12-07 Eric Botcazou + + PR optimization/13318 + * loop.c (express_from): Protect integer division from overflow. + + 2003-12-11 Eric Botcazou + + Backport from mainline: + + 2003-12-07 Eric Botcazou + + PR optimization/13060 + * function.c (fixup_var_refs_1) [SUBREG]: Recognize even if a + replacement already exists. Fix again the whole insn if that fails. + + 2003-12-11 Eric Botcazou + + Backport from mainline: + + 2003-12-07 Eric Botcazou + + PR optimization/12965 + * caller-save.c (save_call_clobbered_regs): Do not save/restore + registers around no-return calls. + + 2003-12-10 Andrew Pinski + + * emit-rtl.c (copy_rtx_if_shared_1): Fix warning. + + 2003-12-10 Nathanael Nerode + + Backport from mainline (fixes unreported regression): + * cpptrad.c (_cpp_scan_out_logical_line): Improve test for + whether directive begins at the beginning of a line. + + 2003-12-10 Eric Botcazou + + PR target/13354 + * config/sparc/sparc.c (sparc_output_mi_thunk): Load DELTA + manually if one can do that with only one instruction. + + 2003-12-09 Kelley Cook + + 2003-06-04 Kelley Cook + PR optimization/4490 + * config/i386/i386.md: Don't use XFMode if TARGET_128BIT_LONG_DOUBLE. + + 2003-12-08 David Edelsohn + Graham Reed + + PR target/13150 + * collect2.c (GCC_OK_SYMBOL): Add support for AIX C_WEAKEXT. + (GCC_UNDEF_SYMBOL): Same. + + 2003-12-08 Andrew Pinski + + PR middle-end/10060 + * emit-rtl.c (copy_rtx_if_shared): Split out into ... + (copy_rtx_if_shared_1): here and optimize the last one + in the sequence into tail-recursion. + (reset_used_flags): Optimize the last one + in the sequence into tail-recursion. + + 2003-12-07 Alan Modra + + * config/rs6000/rs6000.c (rs6000_elf_section_type_flags): Don't + set SECTION_WRITE on TARGET_RELOCATABLE. + + 2003-12-05 Andrew Pinski + + PR driver/13211 + * gcc.c (execute) Increment execution_count when returning + early because verbose_only_flag is true. + + 2003-12-05 Stuart Menefy + J"orn Rennecke + + PR target/13302 + * sh.c (sh_build_builtin_va_list): Use (*lang_hooks.types.make_type). + + 2003-12-04 Andrew Pinski + + PR target/11322 + * config/sh/netbsd-elf.h (NO_PROFILE_COUNTERS): Define. + + PR target/12467 + * config/rs6000/altivec.md (altivec_vmsummbm): Fix typo. + + 2003-12-04 H.J. Lu + + * Makefile.in (stmp-fixinc): Don't bail out if SYSTEM_HEADER_DIR + does not exist and it's the default sys-include directory. + + 2003-12-03 Mark Mitchell + + * config/ia64/hpux.h (TARGET_HAVE_TLS): Define it to false. + * config/ia64/ia64.h (TARGET_HAVE_TLS): Define it to true if + HAVE_AS_TLS is true. + * config/ia64/ia64.c (TARGET_HAVE_TLS): Do not define it. + + 2003-12-03 James E Wilson + + 2003-11-29 James E Wilson + * gcc.c (init_spec): Pass -lunwind to init_gcc_specs in eh_name + instead of in shared_name. + + 2003-12-03 David Mosberger + + 2003-11-20 David Mosberger + * config/t-libunwind (LIB2ADDEH): Add unwind-c.c. + (SHLIB_LC): Define. + * unwind-libunwind.c (_Unwind_GetCFA): Implement. + (_Unwind_GetBSP) [UNW_TARGET_IA64]: New function. + + 2003-12-03 Jakub Jelinek + + * expr.c (store_constructor): Only set RTX_UNCHANGING_P for + read-only field if cleared is 0. + + 2003-12-03 Kean Johnston + + PR 12969 + * fixinc/inclhack.def (AAB_svr4_replace_byteorder): Revert the + change I made on 2003-08-11 that removes the mach lines. + Restore them to the same list thats in the head, as per + Nathanael Nerode's changes. + * fixinc/fixincl.x: Regenerated + * fixinc/tests/base/ansi/string.h: Fix test case + + 2003-12-03 James E Wilson + + 2003-12-01 James E Wilson + PR target/8407 + * config/ia64/ia64.c (ia64_function_arg): For single-reg HFA, call + gen_rtx_REG to create new reg with argument mode. + + 2003-12-03 Josef Zlomek + + Backport from mainline + + 2003-10-31 Josef Zlomek + + PR/10239 + * cfgrtl.c (delete_insn): Decrease LABEL_NUSES for all + REG_LABEL notes. + + 2003-10-31 Josef Zlomek + + PR/11640 + * cfgrtl.c (try_redirect_by_replacing_jump): Move jump + immediatelly before BARRIER. + + 2003-12-01 Kaz Kojima + + Backport from mainline + + 2002-11-19 Kaz Kojima + + * config.gcc (sh*-*-linux*): Add t-slibgcc-elf-ver and t-linux. + to tmake_file. + * config/sh/libgcc-glibc.ver: New file. + + Backport from mainline + + 2003-10-08 Kaz Kojima + + * config/sh/t-linux (SHLIB_LINK): Override to use a linker script + libgcc_s.so. + (SHLIB_INSTALL): Likewise. + + 2003-12-01 Roger Sayle + + PR optimization/11634 + * recog.c (split_insn): Factor test of INSN_P and handling of + set_noop_p out of here into the two callers. + (split_all_insns): Add INSN_P test and set_noop_p handling here. + If deleting a no-op set after reload that has a REG_UNUSED note, + mark the basic block as changed and recalculate life information. + (split_all_insns_noflow): Add INSN_P test and set_noop_p handling + here. + + 2003-12-01 Zack Weinberg + + PR 12505 + * configure.in: Check for system-provided 'uchar' type. + * configure, config.in: Regenerate. + * cpphash.h: Only typedef 'uchar' if the system doesn't. + + 2003-12-01 Ulrich Weigand + + * unroll.c (find_splittable_givs): Add missing extend_value_for_giv. + + 2003-12-01 Eric Botcazou + + Backport from mainline: + + 2003-11-27 Eric Botcazou + + PR optimization/13041 + * final.c (frame_pointer_needed): Fix comment. + * reload1.c (reload): Decrease alignment of the frame + pointer if it was used for register allocation. + + 2003-12-01 Eric Botcazou + + Backport from mainline: + + 2003-11-27 Eric Botcazou + + PR target/12900 + * reg-stack (move_for_stack_reg): New prototype. Return + whether a control flow insn was deleted. + (subst_stack_regs_pat): Likewise, using the information provided + by move_for_stack_reg. + (subst_stack_regs): Likewise, using the information provided + by subst_stack_regs_pat. + (convert_regs_1): Record whether a control flow insn was deleted, + using the information provided by subst_stack_regs. Purge dead + edges only if a control flow insn was deleted. + + 2003-12-01 Gabriel Dos Reis + + * doc/c-tree.texi (Function Bodies): Update HANDLER documentation. + + 2003-11-29 Ulrich Weigand + + * config/s390/s390.md ("cmpint_di"): Fix incorrect instruction lengths. + + 2003-11-19 Alan Modra + + Backport 2003-03-26 Alan Modra + * cppinit.c (init_standard_includes): Add both "translated" and + non-translated header paths. + + 2003-11-18 Gerald Pfeifer + + Fix links in online manuals. + * doc/invoke.texi (H8/300 Options): @xref to ld, not ld.info. + + 2003-11-17 Gerald Pfeifer + + * doc/invoke.texi (Warning Options): Simplify and clarify the + description of -Wnonnull. + + 2003-11-14 Matthias Klose + + Backport from mainline + + 2003-06-04 Jakub Jelinek + + * function.c (trampolines_created): New variable. + (expand_function_end): Set it when doing INITIALIZE_TRAMPOLINE. + * function.h (trampolines_created): Add. + * config/s390/linux.h (ASM_FILE_END): Define. + * config/alpha/linux-elf.h (ASM_FILE_END): Define. + * config/m68k/linux.h (ASM_FILE_END): Define. + * config/rs6000/linux.h (ASM_FILE_END): Define. + * config/rs6000/linux64.h (ASM_FILE_END): Define. + * config/sparc/linux.h (ASM_FILE_END): Define. + * config/sparc/linux64.h (ASM_FILE_END): Define. + * config/i386/i386.c (ix86_asm_file_end): Use SUBTARGET_FILE_END. + * config/i386/linux.h (SUBTARGET_FILE_END): Define. + * config/i386/linux64.h (SUBTARGET_FILE_END): Define. + + 2003-06-05 Jakub Jelinek + + * mklibgcc.in: Propagate .note.GNU-stack section if needed into + the .hidden assembly stubs. + + 2003-11-13 Eric Botcazou + + PR optimization/12926 + * expr.c (expand_assignment) [COMPONENT_REF]: Don't put + the UNCHANGING_RTX_P flag on memory references to read-only + components that are not addressable. + + 2003-11-12 Alexey Starovoytov + + PR optimization/12953 + * c-objc-common.c (inline_forbidden_p): Added check for BUILT_IN + before switch by FUNCTION_CODE. + + 2003-11-10 Waldek Hebisch + + PR target/12865 + * config/sparc/sparc.c (sparc_initialize_trampoline): Call + __enable_execute_stack only after writing onto the stack. + (sparc64_initialize_trampoline): Likewise. + + 2003-11-08 Roger Sayle + + Backport from mainline + PR optimization/10467, PR optimization/11741 + * gcse.c (pre_insert_copy_insn): Tweak the logic for finding the + appropriate set to match the code in hash_scan_insn. + + 2003-11-06 H.J. Lu + + * cppinit.c (init_standard_includes): Updated. + + * Makefile.in (fixinc.sh): Updated. + + Backport from 3.4-branch + + 2003-07-16 Daniel Jacobowitz + + * gcc.c (STANDARD_STARTFILE_PREFIX): Remove unnecessary definition. + (main): Remove unnecessary case. Only use standard_startfile_prefix + if native. + + 2003-04-11 Alexandre Oliva + + * Makefile.in (fixinc.sh): Pass BUILD_LIBERTY as LIBERTY to + mkfixinc.sh. + * fixinc/mkfixinc.sh (defs): Add LIBERTY. + * configure.in (STMP_FIXINC, STMP_FIXPROTO): Don't disable on + build != host sysrooted builds. + * configure.in (SYSTEM_HEADER_DIR): Make sure it contains + TARGET_SYSTEM_ROOT even on sysrooted natives. + * configure: Rebuilt. + + 2003-03-04 Daniel Jacobowitz + + * configure.in: Don't always define TARGET_SYSTEM_ROOT. + * configure: Regenerated. + * gcc.c: Check whether TARGET_SYSTEM_ROOT is defined. + + 2003-01-16 Daniel Jacobowitz + + * Makefile.in (PREPROCESSOR_DEFINES): Add + @TARGET_SYSTEM_ROOT_DEFINE@. + * configure.in (PREFIX_INCLUDE_DIR): Don't define if $with_sysroot + is specified or if building a cross compiler. + (TARGET_SYSTEM_ROOT_DEFINE): Add TARGET_SYSTEM_ROOT_RELOCATABLE + if the sysroot is under $exec_prefix. + * configure: Regenerated. + * cppdefault.h: Use native include paths if TARGET_SYSTEM_ROOT is + defined. + (struct default_include): Add add_sysroot field. + (cpp_SYSROOT): Declare. + * cppdefault.c (cpp_include_defaults): Fill in add_sysroot + field. + (cpp_SYSROOT): New variable. + * cppinit.c (cpp_create_reader): Initialize + CPP_OPTION (pfile, sysroot). + (init_standard_includes): Handle add_sysroot. Do not + add unrelocated copies of relocated directories. + (COMMAND_LINE_OPTIONS): Add -isysroot. + (cpp_handle_option): Handle -isysroot. + * cpplib.h (struct cpp_options): Add sysroot member. + * gcc.c (The Specs Language): Update description of %I. + (target_system_root_changed): New variable. + (process_command): Conditionalize make_relative_prefix call + on !VMS and TARGET_SYSTEM_ROOT_RELOCATABLE. Set + target_system_root_changed. + (do_spec_1): Add -isysroot to %I. + * doc/invoke.texi (Spec Files): Update description of %I. + * doc/install.texi (--with-sysroot): Update comment about + relocation. + + 2002-10-19 Alexandre Oliva + Angela Marie Thomas + Brendan Kehoe + Nick Clifton + Andrew Haley + + * configure.in (--with-sysroot): New. Don't inhibit libc if + given. AC_SUBST TARGET_SYSTEM_ROOT, TARGET_SYSTEM_ROOT_DEFINE + and CROSS_SYSTEM_HEADER_DIR. + * configure: Rebuilt. + * Makefile.in (CROSS_SYSTEM_HEADER_DIR): Set in configure. + (TARGET_SYSTEM_ROOT): New. + (DRIVER_DEFINES): Define CROSS_INCLUDE_DIR from + CROSS_SYSTEM_HEADER_DIR. + (install-gcc-tooldir): New target. + (stmp-fixinc): Do not create $(libsubdir), but rather bail out + of SYSTEM_HEADER_DIR does not exist. + (deduced.h, stmp-fixproto): Quote SYSTEM_HEADER_DIR properly. + (install-mkheaders): Likewise. + * gcc.c (target_system_root): New variable. + (add_sysrooted_prefix): New function. + (process_command): Recompute run-time target_system_root from + gcc_exec_prefix, keeping it unchanged if the relocated sysroot + does not exist. + (do_spec_1): Process 'R' spec. + (main): Add md_exec_prefix to exec_prefixes regardless of + startfile_prefix_spec. Use add_sysrooted_prefix for + startfile_prefixes, and don't skip the default ones when cross + compiling with sysroot enabled. Removed unused case of + non-absolute standard_startfile_prefix. + * config/interix.h: Remove the only potential, yet disabled, + occurrence of non-absolute (empty) standard_startfile_prefix. + * config/sh/linux.h (LIB_SPEC): Add -rpath-link in non-static + linking. + * config/mips/linux.h (LIB_SPEC): Define as in sh/linux.h. + * doc/install.texi (--with-sysroot): Document. + (--with-headers, --with-libs): Deprecate. + + 2003-11-06 Ulrich Weigand + + * config/s390/s390-protos.h (s390_output_dwarf_dtprel): Declare. + * config/s390/s390.c (s390_output_dwarf_dtprel): New function. + * config/s390/s390.h (ASM_OUTPUT_DWARF_DTPREL): Define. + + 2003-11-06 Ulrich Weigand + + * config/s390/s390.c (s390_function_arg_pass_by_reference): Return + true for all arguments larger than 8 bytes, as well as for all vector + type arguments. + * config/s390/s390.h (RETURN_IN_MEMORY): Likewise for return values. + + 2003-11-05 Roger Sayle + + PR optimization/10339 + * builtins.c (expand_builtin_strcmp): Try to emit cmpstrsi insn + directly instead of unsafely transforming call into a memcmp. + (expand_builtin_strncmp): Likewise. + + 2003-11-03 Alexander Kabaev + + * real.c (encode_ieee_single): Ensure proper promotion. + + 2003-11-04 H.J. Lu + + Backport from 3.4-branch + + 2003-07-13 Andreas Jaeger + + * config.gcc: Add pmmintrin.h for x86_64-*-*. + + 2003-06-26 H.J. Lu + + * config.gcc (extra_headers): Add pmmintrin.h for i[34567]86-*-*. + + * config/i386/i386.c (override_options): Turn on MASK_SSE2 + for -mpni. + (bdesc_2arg): Add PNI builtins with 2 args. + (bdesc_1arg): Add PNI builtins with 1 arg. + (ix86_init_mmx_sse_builtins): Handle PNI builtins. + (ix86_expand_builtin): Likewise. + + * config/i386/i386.h (MASK_3DNOW, MASK_3DNOW_A, + MASK_128BIT_LONG_DOUBLE, MASK_64BIT, MASK_MS_BITFIELD_LAYOUT, + MASK_TLS_DIRECT_SEG_REFS): Renumbered. + (TARGET_PNI): New. + (TARGET_SWITCHES): Add -mpni and -mno-pni. + (TARGET_CPU_CPP_BUILTINS): Defined __PNI__ for PNI. + (ix86_builtins): Add PNI builtins. + (config/i386/i386.md): Add PNI patterns. + + * config/i386/pmmintrin.h: New file. + + * config/i386/i386.c (override_options): Turn on MASK_SSE for + -msse2. + (MASK_SSE1): Removed. + (MASK_SSE164): Removed. + (MASK_SSE264): Removed. + (bdesc_2arg): Replace MASK_SSE1 with MASK_SSE. Replace + MASK_SSE164 with MASK_SSE | MASK_64BIT. Replace MASK_SSE264 + with MASK_SSE2 | MASK_64BIT. + (bdesc_1arg): Likewise. + (ix86_init_mmx_sse_builtins): Likewise. + + * config/i386/i386.h (TARGET_SSE): Remove MASK_SSE2. + + 2003-06-20 H.J. Lu + + * doc/extend.texi: Document new builtin functions for Intel + Prescott New Intrunctions. + + * doc/invoke.texi: Document new command-line options, -mpni and + -mno-pni, for Intel Prescott New Intrunctions. + + 2003-06-05 H.J. Lu + + * config.gcc (extra_headers): Add emmintrin.h for i[34567]86-*-* + and x86_64-*-*. + + * config/i386/mmintrin.h: Update version and add alternate + intrinsic names. + * config/i386/xmmintrin.h: Likewise. + + * config/i386/xmmintrin.h: Include . Move SSE2 + intrinsics to ... + * config/i386/emmintrin.h: Here. New file. + + 2003-11-04 H.J. Lu + + Backport from 3.4-branch + 2003-04-25 H.J. Lu + + * config/ia64/ia64.c (ia64_expand_compare_and_swap): Add rmode + for return mode. + (ia64_expand_builtin): Set rmode to SImode for + IA64_BUILTIN_BOOL_COMPARE_AND_SWAP_SI, + IA64_BUILTIN_VAL_COMPARE_AND_SWAP_SI and + IA64_BUILTIN_BOOL_COMPARE_AND_SWAP_DI. Set remode to DImode + for IA64_BUILTIN_VAL_COMPARE_AND_SWAP_DI. + + 2003-04-24 H.J. Lu + + * config/ia64/ia64.c (ia64_init_builtins): Add si_ftype_pdi_di_di + for __sync_bool_compare_and_swap_di for int return type. + + * config/ia64/ia64intrin.h (__sync_bool_compare_and_swap_di): + Change return type to int. + (__sync_bool_compare_and_swap): Likewise. + + 2003-11-03 Volker Reichelt + + * doc/contrib.texi: Add Giovanni Bajo, Dara Hazeghi, Falk Hueffner, + and Andrew Pinski. + + 2003-11-03 Rainer Orth + + * fixinc/inclhack.def (stdio_va_list): Allow tab before va_list. + Merge two substitutions. + * fixinc/fixincl.x: Regenerate. + Fixes PR bootstrap/12666. + + 2003-10-28 Franz Sirl + + PR target/11598 + PR libgcj/10610 + * config/rs6000/sysv4.h (PREFERRED_STACK_BOUNDARY): New macro. + + 2003-10-27 Falk Hueffner + + PR target/12654 + * config/alpha/alpha.c (alpha_emit_conditional_branch): Don't do + comparison against constant by adjusting the argument except for + EQ and NE. + + 2003-10-26 Ottavio Campana + + PR target/12690 + * config/i386/mmintrin.h (_mm_set1_pi8): Fix comment. + + 2003-10-25 Bruce Korb + + * gcc/fixinc/tests/base/ansi/string.h: + This fixes a result from a broken sed or a hand-edited output file. + The '__GNUC__' wrappers were misplaced. + + 2003-10-25 Eric Botcazou + + PR target/12712 + * reg-stack.c (convert_regs_1): Create an arbitrary input stack + if the block has no predecessors. + (convert_regs_2): Document the problem with successors whose + only predecessor is the block to be processed. + (convert_regs): Don't create the arbitrary input stack here. + + 2003-10-22 David Taylor + + PR debug/12500 + * dbxout.c (dbxout_typedefs): Use COMPLETE_OR_VOID_TYPE_P. + + 2003-10-20 Zack Weinberg + + * fixinc/inclhack.def (hpux11_snprintf): New edit. + * fixinc/fixincl.x: Regenerate. + * fixinc/tests/base/stdio.h: Add test for hpux11_snprintf. + + 2003-05-16 Jakub Jelinek + + * config/ia64/unwind-ia64.c (uw_update_reg_address): Handle + .save XX, r0. + + 2003-10-19 Mark Mitchell + + * doc/include/gcc-common.texi: Bump version number. + * version.c (version_string): Reset to prerelease format. + + 2003-10-18 Kazu Hirata + + * doc/extend.texi: Fix typos. + 2003-10-16 Release Manager * GCC 3.3.2 Released. *************** *** 5,11 **** 2003-10-14 Jason Merrill PR c/11885 ! * stor-layout.c (update_alignment_for_field): Packed non-bit-fields get byte alignment. 2003-10-14 Rainer Orth --- 1110,1116 ---- 2003-10-14 Jason Merrill PR c/11885 ! * stor-layout.c (update_alignment_for_field): Packed non-bit-fields get byte alignment. 2003-10-14 Rainer Orth *************** *** 13,19 **** * fixinc/inclhack.def (alpha_pthread_gcc): New fix. * fixinc/fixincl.x: Regenerate. * fixinc/tests/base/pthread.h [ALPHA_PTHREAD_GCC_CHECK]: New ! testcase. Fixes PR bootstrap/9330. 2003-10-14 Steven Bosscher --- 1118,1124 ---- * fixinc/inclhack.def (alpha_pthread_gcc): New fix. * fixinc/fixincl.x: Regenerate. * fixinc/tests/base/pthread.h [ALPHA_PTHREAD_GCC_CHECK]: New ! testcase. Fixes PR bootstrap/9330. 2003-10-14 Steven Bosscher *************** *** 61,67 **** Fixes PR libf2c/12263. 2003-10-08 Timo Kokkonen ! Eric Botcazou PR bootstrap/12490 * scan-decls.c (MAX_EXTERN_C_BRACES): New preprocessor constant --- 1166,1172 ---- Fixes PR libf2c/12263. 2003-10-08 Timo Kokkonen ! Eric Botcazou PR bootstrap/12490 * scan-decls.c (MAX_EXTERN_C_BRACES): New preprocessor constant *************** *** 161,167 **** 2003-10-01 Nick Clifton * Import this patch from mainline: ! 2003-02-01 John David Anglin * collect2.c (pexecute_pid): Rename to pid. --- 1266,1272 ---- 2003-10-01 Nick Clifton * Import this patch from mainline: ! 2003-02-01 John David Anglin * collect2.c (pexecute_pid): Rename to pid. *************** *** 267,273 **** * config/alpha/alpha.c (alpha_expand_mov): Do gen_movdi_er_maybe_g always during initial code generation. ! * config/alpha/alpha.md (movdi_er_maybe_g): Don't conditionalize on flag_inline_functions. 2003-09-17 Eric Botcazou --- 1372,1378 ---- * config/alpha/alpha.c (alpha_expand_mov): Do gen_movdi_er_maybe_g always during initial code generation. ! * config/alpha/alpha.md (movdi_er_maybe_g): Don't conditionalize on flag_inline_functions. 2003-09-17 Eric Botcazou *************** *** 328,334 **** * configure: Regenerate. * config.in: Li{ewise. * config/i386/i386.c: Rename CMOV_SUN_AS_SYNTAX to ! HAVE_AS_IX86_CMOV_SUN_SYNTAX. * config/i386/sol2.h (CMOV_SUN_AS_SYNTAX): Remove. Fixes PR target/12101. --- 1433,1439 ---- * configure: Regenerate. * config.in: Li{ewise. * config/i386/i386.c: Rename CMOV_SUN_AS_SYNTAX to ! HAVE_AS_IX86_CMOV_SUN_SYNTAX. * config/i386/sol2.h (CMOV_SUN_AS_SYNTAX): Remove. Fixes PR target/12101. *************** Sun Sep 7 14:53:36 CEST 2003 Jan Hubic *** 365,371 **** Backport from mainline: 2003-07-10 Denis Chertykov ! Richard Kenner * combine.c (gen_binary): Handle the CLOBBER rtx and don't build a binary operation with it. --- 1470,1476 ---- Backport from mainline: 2003-07-10 Denis Chertykov ! Richard Kenner * combine.c (gen_binary): Handle the CLOBBER rtx and don't build a binary operation with it. *************** Sat Sep 6 23:16:35 CEST 2003 Jan Hubic *** 418,424 **** (m32r_block_small_immediate_operand): New predicate. * m32r.md (movstrsi_small_internal): New pattern. * m32r.h (PREDICATE_CODES): Add m32r_block_small_immediate_operand. ! * m32r-protos.h: Add prototype for m32r_block_small_immediate_operand. 2003-08-25 Richard Henderson --- 1523,1529 ---- (m32r_block_small_immediate_operand): New predicate. * m32r.md (movstrsi_small_internal): New pattern. * m32r.h (PREDICATE_CODES): Add m32r_block_small_immediate_operand. ! * m32r-protos.h: Add prototype for m32r_block_small_immediate_operand. 2003-08-25 Richard Henderson *************** cp: *** 17642,17645 **** * mips.h (FUNCTION_ARG_REGNO_P): Fix parentheses. See ChangeLog.7 for earlier changes. - --- 18747,18749 ---- diff -Nrc3pad gcc-3.3.2/gcc/Makefile.in gcc-3.3.3/gcc/Makefile.in *** gcc-3.3.2/gcc/Makefile.in Sun Aug 10 23:11:19 2003 --- gcc-3.3.3/gcc/Makefile.in Thu Jan 29 04:42:13 2004 *************** PARTITION_H = $(srcdir)/../include/parti *** 262,268 **** # Default native SYSTEM_HEADER_DIR, to be overridden by targets. NATIVE_SYSTEM_HEADER_DIR = /usr/include # Default cross SYSTEM_HEADER_DIR, to be overridden by targets. ! CROSS_SYSTEM_HEADER_DIR = $(build_tooldir)/sys-include # autoconf sets SYSTEM_HEADER_DIR to one of the above. SYSTEM_HEADER_DIR = @SYSTEM_HEADER_DIR@ --- 262,268 ---- # Default native SYSTEM_HEADER_DIR, to be overridden by targets. NATIVE_SYSTEM_HEADER_DIR = /usr/include # Default cross SYSTEM_HEADER_DIR, to be overridden by targets. ! CROSS_SYSTEM_HEADER_DIR = @CROSS_SYSTEM_HEADER_DIR@ # autoconf sets SYSTEM_HEADER_DIR to one of the above. SYSTEM_HEADER_DIR = @SYSTEM_HEADER_DIR@ *************** STMP_FIXINC = @STMP_FIXINC@ *** 274,279 **** --- 274,283 ---- # Test to see whether exists in the system header files. LIMITS_H_TEST = [ -f $(SYSTEM_HEADER_DIR)/limits.h ] + # Directory for prefix to system directories, for + # each of $(system_prefix)/usr/include, $(system_prefix)/usr/lib, etc. + TARGET_SYSTEM_ROOT = @TARGET_SYSTEM_ROOT@ + target=@target@ target_alias=@target_alias@ xmake_file=@dep_host_xmake_file@ *************** DRIVER_DEFINES = \ *** 1282,1287 **** --- 1286,1292 ---- -DDEFAULT_TARGET_MACHINE=\"$(target_alias)\" \ -DSTANDARD_BINDIR_PREFIX=\"$(bindir)/\" \ -DTOOLDIR_BASE_PREFIX=\"$(unlibsubdir)/../\" \ + @TARGET_SYSTEM_ROOT_DEFINE@ \ $(VALGRIND_DRIVER_DEFINES) \ `test "X$${SHLIB_LINK}" = "X" || test "@enable_shared@" != "yes" || echo "-DENABLE_SHARED_LIBGCC"` \ `test "X$${SHLIB_MULTILIB}" = "X" || echo "-DNO_SHARED_LIBGCC_MULTILIB"` *************** profile.o : profile.c $(CONFIG_H) $(SYST *** 1540,1546 **** loop.o : loop.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h $(LOOP_H) \ insn-config.h $(REGS_H) hard-reg-set.h $(RECOG_H) $(EXPR_H) \ real.h $(PREDICT_H) $(BASIC_BLOCK_H) function.h \ ! toplev.h varray.h except.h cselib.h $(OPTABS_H) $(TM_P_H) doloop.o : doloop.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h $(LOOP_H) \ $(EXPR_H) hard-reg-set.h $(BASIC_BLOCK_H) $(TM_P_H) toplev.h unroll.o : unroll.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) insn-config.h function.h \ --- 1545,1551 ---- loop.o : loop.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h $(LOOP_H) \ insn-config.h $(REGS_H) hard-reg-set.h $(RECOG_H) $(EXPR_H) \ real.h $(PREDICT_H) $(BASIC_BLOCK_H) function.h \ ! toplev.h varray.h except.h cselib.h $(OPTABS_H) $(TM_P_H) $(GGC_H) doloop.o : doloop.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h $(LOOP_H) \ $(EXPR_H) hard-reg-set.h $(BASIC_BLOCK_H) $(TM_P_H) toplev.h unroll.o : unroll.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) insn-config.h function.h \ *************** PREPROCESSOR_DEFINES = \ *** 2197,2204 **** -DGPLUSPLUS_TOOL_INCLUDE_DIR=\"$(gcc_gxx_include_dir)/$(target_alias)\" \ -DGPLUSPLUS_BACKWARD_INCLUDE_DIR=\"$(gcc_gxx_include_dir)/backward\" \ -DLOCAL_INCLUDE_DIR=\"$(local_includedir)\" \ ! -DCROSS_INCLUDE_DIR=\"$(gcc_tooldir)/sys-include\" \ ! -DTOOL_INCLUDE_DIR=\"$(gcc_tooldir)/include\" LIBCPP_OBJS = cpplib.o cpplex.o cppmacro.o cppexp.o cppfiles.o cpptrad.o \ cpphash.o cpperror.o cppinit.o cppdefault.o cppmain.o \ --- 2202,2210 ---- -DGPLUSPLUS_TOOL_INCLUDE_DIR=\"$(gcc_gxx_include_dir)/$(target_alias)\" \ -DGPLUSPLUS_BACKWARD_INCLUDE_DIR=\"$(gcc_gxx_include_dir)/backward\" \ -DLOCAL_INCLUDE_DIR=\"$(local_includedir)\" \ ! -DCROSS_INCLUDE_DIR=\"$(CROSS_SYSTEM_HEADER_DIR)\" \ ! -DTOOL_INCLUDE_DIR=\"$(gcc_tooldir)/include\" \ ! @TARGET_SYSTEM_ROOT_DEFINE@ LIBCPP_OBJS = cpplib.o cpplex.o cppmacro.o cppexp.o cppfiles.o cpptrad.o \ cpphash.o cpperror.o cppinit.o cppdefault.o cppmain.o \ *************** fixinc.sh: $(FIXINCSRCDIR)/mkfixinc.sh $ *** 2358,2369 **** $(FIXINCSRCDIR)/server.h $(FIXINCSRCDIR)/inclhack.def specs.ready (MAKE="$(MAKE)"; srcdir=`cd $(srcdir)/fixinc && ${PWD_COMMAND}` ; \ CC="$(HOST_CC)"; CFLAGS="$(HOST_CFLAGS)"; LDFLAGS="$(HOST_LDFLAGS)"; \ ! WARN_CFLAGS="$(WARN_CFLAGS)"; \ ! export MAKE srcdir CC CFLAGS LDFLAGS WARN_CFLAGS; cd ./fixinc && \ $(SHELL) $${srcdir}/mkfixinc.sh $(build_canonical) $(target)) # Build fixed copies of system files. stmp-fixinc: fixinc.sh gsyslimits.h rm -rf include; mkdir include -chmod a+rx include (TARGET_MACHINE='$(target)'; srcdir=`cd $(srcdir); ${PWD_COMMAND}`; \ --- 2364,2386 ---- $(FIXINCSRCDIR)/server.h $(FIXINCSRCDIR)/inclhack.def specs.ready (MAKE="$(MAKE)"; srcdir=`cd $(srcdir)/fixinc && ${PWD_COMMAND}` ; \ CC="$(HOST_CC)"; CFLAGS="$(HOST_CFLAGS)"; LDFLAGS="$(HOST_LDFLAGS)"; \ ! WARN_CFLAGS="$(WARN_CFLAGS)"; LIBERTY=`pwd`/"$(BUILD_LIBIBERTY)"; \ ! export MAKE srcdir CC CFLAGS LDFLAGS WARN_CFLAGS LIBERTY; \ ! cd ./fixinc && \ $(SHELL) $${srcdir}/mkfixinc.sh $(build_canonical) $(target)) + .PHONY: install-gcc-tooldir + install-gcc-tooldir: + $(SHELL) ${srcdir}/mkinstalldirs $(gcc_tooldir) + # Build fixed copies of system files. stmp-fixinc: fixinc.sh gsyslimits.h + @if test ! -d ${SYSTEM_HEADER_DIR}; then \ + echo The directory that should contain system headers does not exist: >&2 ; \ + echo " ${SYSTEM_HEADER_DIR}" >&2 ; \ + if test "x${SYSTEM_HEADER_DIR}" = "x${gcc_tooldir}/sys-include"; \ + then sleep 1; else exit 1; fi; \ + fi rm -rf include; mkdir include -chmod a+rx include (TARGET_MACHINE='$(target)'; srcdir=`cd $(srcdir); ${PWD_COMMAND}`; \ *************** stmp-fixinc: fixinc.sh gsyslimits.h *** 2377,2396 **** cp $(srcdir)/gsyslimits.h include/syslimits.h; \ fi; \ chmod a+r include/syslimits.h) - # If $(SYSTEM_HEADER_DIR) is $(build_tooldir)/sys-include, and - # that directory exists, then make sure that $(libsubdir) exists. - # This is because cpp is compiled to find $(gcc_tooldir)/include via - # $(libsubdir)/$(unlibsubdir), which will only work if $(libsubdir) - # exists. - # ??? Better would be to use -isystem $(build_tooldir)/sys-include, - # but fixincludes does not take such arguments. - if [ "$(SYSTEM_HEADER_DIR)" = "$(build_tooldir)/sys-include" ] \ - && [ -d $(build_tooldir)/sys-include ]; then \ - if [ -d $(libdir) ] ; then true ; else mkdir $(libdir) ; fi; \ - if [ -d $(libdir)/gcc-lib ] ; then true ; else mkdir $(libdir)/gcc-lib; fi; \ - if [ -d $(libdir)/gcc-lib/$(target_alias) ] ; then true ; else mkdir $(libdir)/gcc-lib/$(target_alias) ; fi; \ - if [ -d $(libdir)/gcc-lib/$(target_alias)/$(version) ] ; then true ; else mkdir $(libdir)/gcc-lib/$(target_alias)/$(version) ; fi; \ - else true; fi $(STAMP) stmp-fixinc # Files related to the fixproto script. --- 2394,2399 ---- *************** stmp-fixinc: fixinc.sh gsyslimits.h *** 2399,2405 **** # libiberty.a. deduced.h: $(GCC_PASSES) $(srcdir)/scan-types.sh stmp-int-hdrs ! if [ -d $(SYSTEM_HEADER_DIR) ]; \ then \ CC="$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(ALL_CPPFLAGS) -I. -I$(srcdir) -isystem include -isystem ${SYSTEM_HEADER_DIR}"; \ export CC; \ --- 2402,2408 ---- # libiberty.a. deduced.h: $(GCC_PASSES) $(srcdir)/scan-types.sh stmp-int-hdrs ! if [ -d "$(SYSTEM_HEADER_DIR)" ]; \ then \ CC="$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(ALL_CPPFLAGS) -I. -I$(srcdir) -isystem include -isystem ${SYSTEM_HEADER_DIR}"; \ export CC; \ *************** stmp-fixproto: fixhdr.ready fixproto stm *** 2465,2471 **** FIXPROTO_DEFINES="$(FIXPROTO_DEFINES)"; export FIXPROTO_DEFINES; \ mkinstalldirs="$(SHELL) $(srcdir)/mkinstalldirs"; \ export mkinstalldirs; \ ! if [ -d $(SYSTEM_HEADER_DIR) ] ; then \ $(SHELL) ${srcdir}/fixproto include include $(SYSTEM_HEADER_DIR); \ if [ $$? -eq 0 ] ; then true ; else exit 1 ; fi ; \ else true; fi; \ --- 2468,2474 ---- FIXPROTO_DEFINES="$(FIXPROTO_DEFINES)"; export FIXPROTO_DEFINES; \ mkinstalldirs="$(SHELL) $(srcdir)/mkinstalldirs"; \ export mkinstalldirs; \ ! if [ -d "$(SYSTEM_HEADER_DIR)" ]; then \ $(SHELL) ${srcdir}/fixproto include include $(SYSTEM_HEADER_DIR); \ if [ $$? -eq 0 ] ; then true ; else exit 1 ; fi ; \ else true; fi; \ *************** install-mkheaders: stmp-int-hdrs $(STMP_ *** 3043,3049 **** $(DESTDIR)$(itoolsdir)/fix-header$(build_exeext) ; \ else :; fi $(INSTALL_PROGRAM) mkheaders $(DESTDIR)$(itoolsdir)/mkheaders ! echo 'SYSTEM_HEADER_DIR="$(SYSTEM_HEADER_DIR)"' \ > $(DESTDIR)$(itoolsdir)/mkheaders.conf echo 'OTHER_FIXINCLUDES_DIRS="$(OTHER_FIXINCLUDES_DIRS)"' \ >> $(DESTDIR)$(itoolsdir)/mkheaders.conf --- 3046,3052 ---- $(DESTDIR)$(itoolsdir)/fix-header$(build_exeext) ; \ else :; fi $(INSTALL_PROGRAM) mkheaders $(DESTDIR)$(itoolsdir)/mkheaders ! echo 'SYSTEM_HEADER_DIR="'"$(SYSTEM_HEADER_DIR)"'"' \ > $(DESTDIR)$(itoolsdir)/mkheaders.conf echo 'OTHER_FIXINCLUDES_DIRS="$(OTHER_FIXINCLUDES_DIRS)"' \ >> $(DESTDIR)$(itoolsdir)/mkheaders.conf diff -Nrc3pad gcc-3.3.2/gcc/NEWS gcc-3.3.3/gcc/NEWS *** gcc-3.3.2/gcc/NEWS Thu Oct 16 20:11:11 2003 --- gcc-3.3.3/gcc/NEWS Sat Feb 14 20:34:50 2004 *************** http://gcc.gnu.org/gcc-3.3/index.html *** 11,102 **** October 16, 2003 ! The [1]GNU project and the GCC developers are pleased to announce the release of GCC 3.3.2. ! GCC 3.3.2 includes numerous [2]new features, improvements, bug fixes, ! and other changes, thanks to an [3]amazing group of volunteers. ! ! [4]GCJ 3.3 status is tracked for a variety of targets and test ! packages. Release History GCC 3.3.2 ! October 16, 2003 ([5]changes) GCC 3.3.1 ! August 8, 2003 ([6]changes) GCC 3.3 ! May 14, 2003 ([7]changes) References and Acknowledgements ! GCC used to stand for the GNU C Compiler, but since the compiler ! supports several other languages aside from C, it now stands for the GNU Compiler Collection. ! A list of [8]successful builds is updated as new information becomes available. ! The GCC developers would like to thank the numerous people that have ! contributed new features, improvements, bug fixes, and other changes ! as well as test results to GCC. This [9]amazing group of volunteers is what makes GCC successful. ! For additional information about GCC please refer to the [10]GCC ! project web site or contact the [11]GCC development mailing list. ! To obtain GCC please use [12]our mirror sites, one of the [13]GNU ! mirror sites, or [14]our CVS server. _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [15]gnu@gnu.org. There ! are also [16]other ways to contact the FSF. ! These pages are maintained by [17]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [18]GCC manuals. If that fails, the ! [19]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [20]gcc@gnu.org or ! [21]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2003-10-16 [22]Valid XHTML 1.0 References 1. http://www.gnu.org/ 2. http://gcc.gnu.org/gcc-3.3/changes.html 3. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html ! 4. http://gcc.gnu.org/gcc-3.3/gcj-status.html ! 5. http://gcc.gnu.org/gcc-3.3/changes.html 6. http://gcc.gnu.org/gcc-3.3/changes.html ! 7. http://gcc.gnu.org/gcc-3.3/changes.html ! 8. http://gcc.gnu.org/gcc-3.3/buildstat.html ! 9. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html ! 10. http://gcc.gnu.org/index.html ! 11. mailto:gcc@gcc.gnu.org ! 12. http://gcc.gnu.org/mirrors.html ! 13. http://www.gnu.org/order/ftp.html ! 14. http://gcc.gnu.org/cvs.html ! 15. mailto:gnu@gnu.org ! 16. http://www.gnu.org/home.html#ContactInfo ! 17. http://gcc.gnu.org/about.html ! 18. http://gcc.gnu.org/onlinedocs/ ! 19. mailto:gcc-help@gcc.gnu.org ! 20. mailto:gcc@gnu.org ! 21. mailto:gcc@gcc.gnu.org ! 22. http://validator.w3.org/check/referer ====================================================================== http://gcc.gnu.org/gcc-3.3/changes.html --- 11,99 ---- October 16, 2003 ! The [1]GNU project and the GCC developers are pleased to announce the release of GCC 3.3.2. ! The GCC 3.3 release series includes numerous [2]new features, ! improvements, bug fixes, and other changes, thanks to an [3]amazing ! group of volunteers. Release History GCC 3.3.2 ! October 16, 2003 ([4]changes) GCC 3.3.1 ! August 8, 2003 ([5]changes) GCC 3.3 ! May 14, 2003 ([6]changes) References and Acknowledgements ! GCC used to stand for the GNU C Compiler, but since the compiler ! supports several other languages aside from C, it now stands for the GNU Compiler Collection. ! A list of [7]successful builds is updated as new information becomes available. ! The GCC developers would like to thank the numerous people that have ! contributed new features, improvements, bug fixes, and other changes ! as well as test results to GCC. This [8]amazing group of volunteers is what makes GCC successful. ! For additional information about GCC please refer to the [9]GCC ! project web site or contact the [10]GCC development mailing list. ! To obtain GCC please use [11]our mirror sites, one of the [12]GNU ! mirror sites, or [13]our CVS server. _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [14]gnu@gnu.org. There ! are also [15]other ways to contact the FSF. ! These pages are maintained by [16]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [17]GCC manuals. If that fails, the ! [18]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [19]gcc@gnu.org or ! [20]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2003-10-17 [21]Valid XHTML 1.0 References 1. http://www.gnu.org/ 2. http://gcc.gnu.org/gcc-3.3/changes.html 3. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html ! 4. http://gcc.gnu.org/gcc-3.3/changes.html#3.3.2 ! 5. http://gcc.gnu.org/gcc-3.3/changes.html#3.3.1 6. http://gcc.gnu.org/gcc-3.3/changes.html ! 7. http://gcc.gnu.org/gcc-3.3/buildstat.html ! 8. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html ! 9. http://gcc.gnu.org/index.html ! 10. mailto:gcc@gcc.gnu.org ! 11. http://gcc.gnu.org/mirrors.html ! 12. http://www.gnu.org/order/ftp.html ! 13. http://gcc.gnu.org/cvs.html ! 14. mailto:gnu@gnu.org ! 15. http://www.gnu.org/home.html#ContactInfo ! 16. http://gcc.gnu.org/about.html ! 17. http://gcc.gnu.org/onlinedocs/ ! 18. mailto:gcc-help@gcc.gnu.org ! 19. mailto:gcc@gnu.org ! 20. mailto:gcc@gcc.gnu.org ! 21. http://validator.w3.org/check/referer ====================================================================== http://gcc.gnu.org/gcc-3.3/changes.html *************** http://gcc.gnu.org/gcc-3.3/changes.html *** 105,166 **** Caveats ! * The preprocessor no longer accepts multi-line string literals. They were deprecated in 3.0, 3.1, and 3.2. ! * The preprocessor no longer supports the -A- switch when appearing alone. -A- followed by an assertion is still supported. ! * Support for all the systems [1]obsoleted in GCC 3.1 has been removed from GCC 3.3. See below for a [2]list of systems which are obsoleted in this release. ! * Checking for null format arguments has been decoupled from the ! rest of the format checking mechanism. Programs which use the ! format attribute may regain this functionality by using the new ! [3]nonnull function attribute. Note that all functions for which ! GCC has a built-in format attribute, an appropriate built-in nonnull attribute is also applied. ! * The DWARF (version 1) debugging format has been deprecated and will be removed in a future version of GCC. Version 2 of the DWARF debugging format will continue to be supported for the foreseeable future. ! * The C and Objective-C compilers no longer accept the "Naming ! Types" extension (typedef foo = bar); it was already unavailable ! in C++. Code which uses it will need to be changed to use the ! "typeof" extension instead: typedef typeof(bar) foo. (We have ! removed this extension without a period of deprecation because it ! has caused the compiler to crash since version 3.0 and no one ! noticed until very recently. Thus we conclude it is not in widespread use.) ! * The -traditional C compiler option has been removed. It was ! deprecated in 3.1 and 3.2. (Traditional preprocessing remains ! available.) The header, used for writing variadic functions in traditional C, still exists but will produce an error message if used. ! * GCC 3.3.1 automatically places zero-initialized variables in the ! .bss section on some operating systems. Versions of GNU Emacs up ! to (and including) 21.3 will not work correctly when using this ! optimization; you can use -fno-zero-initialized-in-bss to disable it. General Optimizer Improvements ! * A new scheme for accurately describing processor pipelines, the [4]DFA scheduler, has been added. * Pavel Nejedly, Charles University Prague, has contributed new file format used by the edge coverage profiler (-fprofile-arcs). ! The new format is robust and diagnoses common mistakes where ! profiles from different versions (or compilations) of the program ! are combined resulting in nonsensical profiles and slow code to ! produced with profile feedback. Additionally this format allows ! extra data to be gathered. Currently, overall statistics are ! produced helping optimizers to identify hot spots of a program ! globally replacing the old intra-procedural scheme and resulting ! in better code. Note that the gcov tool from older GCC versions ! will not be able to parse the profiles generated by GCC 3.3 and vice versa. * Jan Hubicka, SuSE Labs, has contributed a new superblock formation pass enabled using -ftracer. This pass simplifies the control flow of functions allowing other optimizations to do better job. ! He also contributed the function reordering pass (-freorder-functions) to optimize function placement using profile feedback. --- 102,163 ---- Caveats ! * The preprocessor no longer accepts multi-line string literals. They were deprecated in 3.0, 3.1, and 3.2. ! * The preprocessor no longer supports the -A- switch when appearing alone. -A- followed by an assertion is still supported. ! * Support for all the systems [1]obsoleted in GCC 3.1 has been removed from GCC 3.3. See below for a [2]list of systems which are obsoleted in this release. ! * Checking for null format arguments has been decoupled from the ! rest of the format checking mechanism. Programs which use the ! format attribute may regain this functionality by using the new ! [3]nonnull function attribute. Note that all functions for which ! GCC has a built-in format attribute, an appropriate built-in nonnull attribute is also applied. ! * The DWARF (version 1) debugging format has been deprecated and will be removed in a future version of GCC. Version 2 of the DWARF debugging format will continue to be supported for the foreseeable future. ! * The C and Objective-C compilers no longer accept the "Naming ! Types" extension (typedef foo = bar); it was already unavailable ! in C++. Code which uses it will need to be changed to use the ! "typeof" extension instead: typedef typeof(bar) foo. (We have ! removed this extension without a period of deprecation because it ! has caused the compiler to crash since version 3.0 and no one ! noticed until very recently. Thus we conclude it is not in widespread use.) ! * The -traditional C compiler option has been removed. It was ! deprecated in 3.1 and 3.2. (Traditional preprocessing remains ! available.) The header, used for writing variadic functions in traditional C, still exists but will produce an error message if used. ! * GCC 3.3.1 automatically places zero-initialized variables in the ! .bss section on some operating systems. Versions of GNU Emacs up ! to (and including) 21.3 will not work correctly when using this ! optimization; you can use -fno-zero-initialized-in-bss to disable it. General Optimizer Improvements ! * A new scheme for accurately describing processor pipelines, the [4]DFA scheduler, has been added. * Pavel Nejedly, Charles University Prague, has contributed new file format used by the edge coverage profiler (-fprofile-arcs). ! The new format is robust and diagnoses common mistakes where ! profiles from different versions (or compilations) of the program ! are combined resulting in nonsensical profiles and slow code to ! produced with profile feedback. Additionally this format allows ! extra data to be gathered. Currently, overall statistics are ! produced helping optimizers to identify hot spots of a program ! globally replacing the old intra-procedural scheme and resulting ! in better code. Note that the gcov tool from older GCC versions ! will not be able to parse the profiles generated by GCC 3.3 and vice versa. * Jan Hubicka, SuSE Labs, has contributed a new superblock formation pass enabled using -ftracer. This pass simplifies the control flow of functions allowing other optimizations to do better job. ! He also contributed the function reordering pass (-freorder-functions) to optimize function placement using profile feedback. *************** New Languages and Language specific impr *** 169,228 **** C/ObjC/C++ * The preprocessor now accepts directives within macro arguments. It ! processes them just as if they had not been within macro arguments. ! * The separate ISO and traditional preprocessors have been ! completely removed. The front-end handles either type of preprocessed output if necessary. ! * In C99 mode preprocessor arithmetic is done in the precision of the target's intmax_t, as required by that standard. * The preprocessor can now copy comments inside macros to the output ! file when the macro is expanded. This feature, enabled using the ! -CC option, is intended for use by applications which place metadata or directives inside comments, such as lint. ! * The method of constructing the list of directories to be searched ! for header files has been revised. If a directory named by a -I ! option is a standard system include directory, the option is ! ignored to ensure that the default search order for system ! directories and the special treatment of system header files are not defeated. * A few more [5]ISO C99 features now work correctly. ! * A new function attribute, nonnull, has been added which allows ! pointer arguments to functions to be specified as requiring a ! non-null value. The compiler currently uses this information to ! issue a warning when it detects a null value passed in such an argument slot. ! * A new type attribute, may_alias, has been added. Accesses to ! objects with types with this attribute are not subjected to ! type-based alias analysis, but are instead assumed to be able to alias any other type of objects, just like the char type. C++ ! * Type based alias analysis has been implemented for C++ aggregate types. Objective-C ! * Generate an error if Objective-C objects are passed by value in function and method calls. ! * When -Wselector is used, check the whole list of selectors at the ! end of compilation, and emit a warning if a @selector() is not known. * Define __NEXT_RUNTIME__ when compiling for the NeXT runtime. ! * No longer need to include objc/objc-class.h to compile self calls in class methods (NeXT runtime only). * New -Wundeclared-selector option. * Removed selector bloating which was causing object files to be 10% bigger on average (GNU runtime only). ! * Using at run time @protocol() objects has been fixed in certain situations (GNU runtime only). ! * Type checking has been fixed and improved in many situations involving protocols. Java ! * The java.sql and javax.sql packages now implement the JDBC 3.0 (JDK 1.4) API. * The JDK 1.4 assert facility has been implemented. * The bytecode interpreter is now direct threaded and thus faster. --- 166,225 ---- C/ObjC/C++ * The preprocessor now accepts directives within macro arguments. It ! processes them just as if they had not been within macro arguments. ! * The separate ISO and traditional preprocessors have been ! completely removed. The front end handles either type of preprocessed output if necessary. ! * In C99 mode preprocessor arithmetic is done in the precision of the target's intmax_t, as required by that standard. * The preprocessor can now copy comments inside macros to the output ! file when the macro is expanded. This feature, enabled using the ! -CC option, is intended for use by applications which place metadata or directives inside comments, such as lint. ! * The method of constructing the list of directories to be searched ! for header files has been revised. If a directory named by a -I ! option is a standard system include directory, the option is ! ignored to ensure that the default search order for system ! directories and the special treatment of system header files are not defeated. * A few more [5]ISO C99 features now work correctly. ! * A new function attribute, nonnull, has been added which allows ! pointer arguments to functions to be specified as requiring a ! non-null value. The compiler currently uses this information to ! issue a warning when it detects a null value passed in such an argument slot. ! * A new type attribute, may_alias, has been added. Accesses to ! objects with types with this attribute are not subjected to ! type-based alias analysis, but are instead assumed to be able to alias any other type of objects, just like the char type. C++ ! * Type based alias analysis has been implemented for C++ aggregate types. Objective-C ! * Generate an error if Objective-C objects are passed by value in function and method calls. ! * When -Wselector is used, check the whole list of selectors at the ! end of compilation, and emit a warning if a @selector() is not known. * Define __NEXT_RUNTIME__ when compiling for the NeXT runtime. ! * No longer need to include objc/objc-class.h to compile self calls in class methods (NeXT runtime only). * New -Wundeclared-selector option. * Removed selector bloating which was causing object files to be 10% bigger on average (GNU runtime only). ! * Using at run time @protocol() objects has been fixed in certain situations (GNU runtime only). ! * Type checking has been fixed and improved in many situations involving protocols. Java ! * The java.sql and javax.sql packages now implement the JDBC 3.0 (JDK 1.4) API. * The JDK 1.4 assert facility has been implemented. * The bytecode interpreter is now direct threaded and thus faster. *************** New Languages and Language specific impr *** 238,255 **** New Targets and Target Specific Improvements * The following changes have been made to the HP-PA port: ! + The port now defaults to scheduling for the PA8000 series of processors. + Scheduling support for the PA7300 processor has been added. + The 32-bit port now supports weak symbols under HP-UX 11. + The handling of initializers and finalizers has been improved under HP-UX 11. The 64-bit port no longer uses collect2. + Dwarf2 EH support has been added to the 32-bit linux port. ! + ABI fixes to correct the passing of small structures by value. ! * The SPARC, HP-PA, SH4, and x86/pentium ports have been converted to use the DFA processor pipeline description. ! * The following NetBSD configurations for the SuperH processor family have been added: + SH3, big-endian, sh-*-netbsdelf* + SH3, little-endian, shle-*-netbsdelf* --- 235,252 ---- New Targets and Target Specific Improvements * The following changes have been made to the HP-PA port: ! + The port now defaults to scheduling for the PA8000 series of processors. + Scheduling support for the PA7300 processor has been added. + The 32-bit port now supports weak symbols under HP-UX 11. + The handling of initializers and finalizers has been improved under HP-UX 11. The 64-bit port no longer uses collect2. + Dwarf2 EH support has been added to the 32-bit linux port. ! + ABI fixes to correct the passing of small structures by value. ! * The SPARC, HP-PA, SH4, and x86/pentium ports have been converted to use the DFA processor pipeline description. ! * The following NetBSD configurations for the SuperH processor family have been added: + SH3, big-endian, sh-*-netbsdelf* + SH3, little-endian, shle-*-netbsdelf* *************** New Targets and Target Specific Improvem *** 259,301 **** + SH5, SHmedia, little-endian, 64-bit default, sh64le-*-netbsd* * The following changes have been made to the IA-32/x86-64 port: + SSE2 and 3dNOW! intrinsics are now supported. ! + Support for thread local storage has been added to the IA-32 and x86-64 ports. + The x86-64 port has been significantly improved. * The following changes have been made to the MIPS port: + All configurations now accept the -mabi switch. Note that you ! will need appropriate multilibs for this option to work properly. ! + ELF configurations will always pass an ABI flag to the assembler, except when the MIPS EABI is selected. + -mabi=64 no longer selects MIPS IV code. ! + The -mcpu option, which was deprecated in 3.1 and 3.2, has been removed from this release. ! + -march now changes the core ISA level. In previous releases, it would change the use of processor-specific extensions, but ! would leave the core ISA unchanged. For example, mips64-elf -march=r8000 will now generate MIPS IV code. ! + Under most configurations, -mipsN now acts as a synonym for -march. + There are some new preprocessor macros to describe the -march ! and -mtune settings. See the documentation of those options for details. + Support for the NEC VR-Series processors has been added. This includes the 54xx, 5500, and 41xx series. + Support for the Sandcraft sr71k processor has been added. * The following changes have been made to the S/390 port: ! + Support to build the Java runtime libraries has been added. ! Java is now enabled by default on s390-*-linux* and s390x-*-linux* targets. ! + Multilib support for the s390x-*-linux* target has been ! added; this allows to build 31-bit binaries using the -m31 option. + Support for thread local storage has been added. ! + Inline assembler code may now use the 'Q' constraint to specify memory operands without index register. ! + Various platform-specific performance improvements have been ! implemented; in particular, the compiler now uses the BRANCH ! ON COUNT family of instructions and makes more frequent use of the TEST UNDER MASK family of instructions. * The following changes have been made to the PowerPC port: + Support for IBM Power4 processor added. --- 256,298 ---- + SH5, SHmedia, little-endian, 64-bit default, sh64le-*-netbsd* * The following changes have been made to the IA-32/x86-64 port: + SSE2 and 3dNOW! intrinsics are now supported. ! + Support for thread local storage has been added to the IA-32 and x86-64 ports. + The x86-64 port has been significantly improved. * The following changes have been made to the MIPS port: + All configurations now accept the -mabi switch. Note that you ! will need appropriate multilibs for this option to work properly. ! + ELF configurations will always pass an ABI flag to the assembler, except when the MIPS EABI is selected. + -mabi=64 no longer selects MIPS IV code. ! + The -mcpu option, which was deprecated in 3.1 and 3.2, has been removed from this release. ! + -march now changes the core ISA level. In previous releases, it would change the use of processor-specific extensions, but ! would leave the core ISA unchanged. For example, mips64-elf -march=r8000 will now generate MIPS IV code. ! + Under most configurations, -mipsN now acts as a synonym for -march. + There are some new preprocessor macros to describe the -march ! and -mtune settings. See the documentation of those options for details. + Support for the NEC VR-Series processors has been added. This includes the 54xx, 5500, and 41xx series. + Support for the Sandcraft sr71k processor has been added. * The following changes have been made to the S/390 port: ! + Support to build the Java runtime libraries has been added. ! Java is now enabled by default on s390-*-linux* and s390x-*-linux* targets. ! + Multilib support for the s390x-*-linux* target has been ! added; this allows to build 31-bit binaries using the -m31 option. + Support for thread local storage has been added. ! + Inline assembler code may now use the 'Q' constraint to specify memory operands without index register. ! + Various platform-specific performance improvements have been ! implemented; in particular, the compiler now uses the BRANCH ! ON COUNT family of instructions and makes more frequent use of the TEST UNDER MASK family of instructions. * The following changes have been made to the PowerPC port: + Support for IBM Power4 processor added. *************** New Targets and Target Specific Improvem *** 307,317 **** Obsolete Systems ! Support for a number of older systems has been declared obsolete in ! GCC 3.3. Unless there is activity to revive them, the next release of GCC will have their sources permanently removed. ! All configurations of the following processor architectures have been declared obsolete: * Matsushita MN10200, mn10200-*-* * Motorola 88000, m88k-*-* --- 304,314 ---- Obsolete Systems ! Support for a number of older systems has been declared obsolete in ! GCC 3.3. Unless there is activity to revive them, the next release of GCC will have their sources permanently removed. ! All configurations of the following processor architectures have been declared obsolete: * Matsushita MN10200, mn10200-*-* * Motorola 88000, m88k-*-* *************** Obsolete Systems *** 337,343 **** + Windows NT 3.x, i?86-*-win32 * MC68000 family + HP systems, m68000-hp-bsd* and m68k-hp-bsd* ! + Sun systems, m68000-sun-sunos*, m68k-sun-sunos*, and m68k-sun-mach* + AT&T systems, m68000-att-sysv* + Atari systems, m68k-atari-sysv* --- 334,340 ---- + Windows NT 3.x, i?86-*-win32 * MC68000 family + HP systems, m68000-hp-bsd* and m68k-hp-bsd* ! + Sun systems, m68000-sun-sunos*, m68k-sun-sunos*, and m68k-sun-mach* + AT&T systems, m68000-att-sysv* + Atari systems, m68k-atari-sysv* *************** Obsolete Systems *** 364,370 **** + Generic SysV, powerpc*-*-sysv* + Linux libc1, powerpc*-*-linux*libc1* * Sun SPARC ! + Generic a.out, sparc-*-aout*, sparclet-*-aout*, sparclite-*-aout*, and sparc86x-*-aout* + NetBSD a.out, sparc-*-netbsd*aout* + Generic BSD, sparc-*-bsd* --- 361,367 ---- + Generic SysV, powerpc*-*-sysv* + Linux libc1, powerpc*-*-linux*libc1* * Sun SPARC ! + Generic a.out, sparc-*-aout*, sparclet-*-aout*, sparclite-*-aout*, and sparc86x-*-aout* + NetBSD a.out, sparc-*-netbsd*aout* + Generic BSD, sparc-*-bsd* *************** Documentation improvements *** 383,401 **** Other significant improvements ! * Almost all front-end dependencies in the compiler have been ! separated out into a set of language hooks. This should make adding a new front end clearer and easier. ! * One effect of removing the separate preprocessor is a small ! increase in the robustness of the compiler in general, and the maintainability of target descriptions. Previously target-specific ! built-in macros and others, such as __FAST_MATH__, had to be ! handled with so-called specs that were hard to maintain. Often ! they would fail to behave properly when conflicting options were ! supplied on the command line, and define macros in the user's ! namespace even when strict ISO compliance was requested. Integrating the preprocessor has cleanly solved these issues. ! * The Makefile suite now supports redirection of make install by means of the variable DESTDIR. _________________________________________________________________ --- 380,398 ---- Other significant improvements ! * Almost all front-end dependencies in the compiler have been ! separated out into a set of language hooks. This should make adding a new front end clearer and easier. ! * One effect of removing the separate preprocessor is a small ! increase in the robustness of the compiler in general, and the maintainability of target descriptions. Previously target-specific ! built-in macros and others, such as __FAST_MATH__, had to be ! handled with so-called specs that were hard to maintain. Often ! they would fail to behave properly when conflicting options were ! supplied on the command line, and define macros in the user's ! namespace even when strict ISO compliance was requested. Integrating the preprocessor has cleanly solved these issues. ! * The Makefile suite now supports redirection of make install by means of the variable DESTDIR. _________________________________________________________________ *************** GCC 3.3 *** 407,470 **** bootstrap failures ! * [7]10140 cross compiler build failures: missing __mempcpy (DUP: [8]10198,[9]10338) Internal compiler errors (multi-platform) * [10]3581 large string causes segmentation fault in cc1 * [11]4382 __builtin_{set,long}jmp with -O3 can crash the compiler ! * [12]5533 (c++) ICE when processing std::accumulate(begin, end, init, invalid_op) * [13]6387 -fpic -gdwarf-2 -g1 combination gives ICE in dwarf2out * [14]6412 (c++) ICE in retrieve_specialization ! * [15]6620 (c++) partial template specialization causes an ICE (segmentation fault) * [16]6663 (c++) ICE with attribute aligned * [17]7068 ICE with incomplete types * [18]7083 (c++) ICE using -gstabs with dodgy class derivation ! * [19]7647 (c++) ICE when data member has the name of the enclosing class * [20]7675 ICE in fixup_var_refs_1 * [21]7718 'complex' template instantiation causes ICE * [22]8116 (c++) ICE in member template function * [23]8358 (ada) Ada compiler accesses freed memory, crashes ! * [24]8511 (c++) ICE: (hopefully) reproducible cc1plus segmentation fault * [25]8564 (c++) ICE in find_function_data, in function.c * [26]8660 (c++) template overloading ICE in tsubst_expr, in cp/pt.c ! * [27]8766 (c++) ICE after failed initialization of static template variable * [28]8803 ICE in instantiate_virtual_regs_1, in function.c * [29]8846 (c++) ICE after diagnostic if fr_FR@euro locale is set ! * [30]8906 (c++) ICE (Segmentation fault) when parsing nested-class definition * [31]9216 (c++) ICE on missing template parameter * [32]9261 (c++) ICE in arg_assoc, in cp/decl2.c ! * [33]9263 (fortran) ICE caused by invalid PARAMETER in implied DO loop ! * [34]9429 (c++) ICE in template instantiation with a pointered new operator * [35]9516 Internal error when using a big array * [36]9600 (c++) ICE with typedefs in template class * [37]9629 (c++) virtual inheritance segfault * [38]9672 (c++) ICE: Error reporting routines re-entered ! * [39]9749 (c++) ICE in write_expression on invalid function prototype ! * [40]9794 (fortran) ICE: floating point exception during constant folding * [41]9829 (c++) Missing colon in nested namespace usage causes ICE * [42]9916 (c++) ICE with noreturn function in ?: statement * [43]9936 ICE with local function and variable-length 2d array * [44]10262 (c++) cc1plus crashes with large generated code * [45]10278 (c++) ICE in parser for invalid code ! * [46]10446 (c++) ICE on definition of nonexistent member function of nested class in a class template ! * [47]10451 (c++) ICE in grokdeclarator on spurious mutable declaration ! * [48]10506 (c++) ICE in build_new at cp/init.c with -fkeep-inline-functions and multiple inheritance ! * [49]10549 (c++) ICE in store_bit_field on bitfields that exceed the precision of the declared type Optimization bugs --- 404,467 ---- bootstrap failures ! * [7]10140 cross compiler build failures: missing __mempcpy (DUP: [8]10198,[9]10338) Internal compiler errors (multi-platform) * [10]3581 large string causes segmentation fault in cc1 * [11]4382 __builtin_{set,long}jmp with -O3 can crash the compiler ! * [12]5533 (c++) ICE when processing std::accumulate(begin, end, init, invalid_op) * [13]6387 -fpic -gdwarf-2 -g1 combination gives ICE in dwarf2out * [14]6412 (c++) ICE in retrieve_specialization ! * [15]6620 (c++) partial template specialization causes an ICE (segmentation fault) * [16]6663 (c++) ICE with attribute aligned * [17]7068 ICE with incomplete types * [18]7083 (c++) ICE using -gstabs with dodgy class derivation ! * [19]7647 (c++) ICE when data member has the name of the enclosing class * [20]7675 ICE in fixup_var_refs_1 * [21]7718 'complex' template instantiation causes ICE * [22]8116 (c++) ICE in member template function * [23]8358 (ada) Ada compiler accesses freed memory, crashes ! * [24]8511 (c++) ICE: (hopefully) reproducible cc1plus segmentation fault * [25]8564 (c++) ICE in find_function_data, in function.c * [26]8660 (c++) template overloading ICE in tsubst_expr, in cp/pt.c ! * [27]8766 (c++) ICE after failed initialization of static template variable * [28]8803 ICE in instantiate_virtual_regs_1, in function.c * [29]8846 (c++) ICE after diagnostic if fr_FR@euro locale is set ! * [30]8906 (c++) ICE (Segmentation fault) when parsing nested-class definition * [31]9216 (c++) ICE on missing template parameter * [32]9261 (c++) ICE in arg_assoc, in cp/decl2.c ! * [33]9263 (fortran) ICE caused by invalid PARAMETER in implied DO loop ! * [34]9429 (c++) ICE in template instantiation with a pointered new operator * [35]9516 Internal error when using a big array * [36]9600 (c++) ICE with typedefs in template class * [37]9629 (c++) virtual inheritance segfault * [38]9672 (c++) ICE: Error reporting routines re-entered ! * [39]9749 (c++) ICE in write_expression on invalid function prototype ! * [40]9794 (fortran) ICE: floating point exception during constant folding * [41]9829 (c++) Missing colon in nested namespace usage causes ICE * [42]9916 (c++) ICE with noreturn function in ?: statement * [43]9936 ICE with local function and variable-length 2d array * [44]10262 (c++) cc1plus crashes with large generated code * [45]10278 (c++) ICE in parser for invalid code ! * [46]10446 (c++) ICE on definition of nonexistent member function of nested class in a class template ! * [47]10451 (c++) ICE in grokdeclarator on spurious mutable declaration ! * [48]10506 (c++) ICE in build_new at cp/init.c with -fkeep-inline-functions and multiple inheritance ! * [49]10549 (c++) ICE in store_bit_field on bitfields that exceed the precision of the declared type Optimization bugs *************** GCC 3.3 *** 477,535 **** * [55]6798 very long compile time with large case-statement * [56]6871 const objects shouldn't be moved to .bss * [57]6909 problem w/ -Os on modified loop-2c.c test case ! * [58]7189 gcc -O2 -Wall does not print ``control reaches end of non-void function'' warning * [59]7642 optimization problem with signbit() * [60]8634 incorrect code for inlining of memcpy under -O2 * [61]8750 Cygwin prolog generation erroneously emitting __alloca as regular function call ! c front end * [62]2161 long if-else cascade overflows parser stack * [63]4319 short accepted on typedef'd char ! * [64]8602 incorrect line numbers in warning messages when using inline functions ! * [65]9177 -fdump-translation-unit: C front end deletes function_decl AST nodes and breaks debugging dumps * [66]9853 miscompilation of non-constant structure initializer c++ compiler and library ! * [67]45 legal template specialization code is rejected (DUP: [68]3784) ! * [69]764 lookup failure: friend operator and dereferencing a pointer and templates (DUP: [70]5116) ! * [71]2862 gcc accepts invalid explicit instantiation syntax (DUP: 2863) ! * [72]3663 G++ doesn't check access control during template instantiation ! * [73]3797 gcc fails to emit explicit specialization of a template member ! * [74]3948 Two destructors are called when no copy destructor is defined (ABI change) * [75]4137 Conversion operator within template is not accepted * [76]4361 bogus ambiguity taking the address of a member template ! * [77]4802 g++ accepts illegal template code (access to private member; DUP: [78]5837) ! * [79]4803 inline function is used but never defined, and g++ does not object * [80]5094 Partial specialization cannot be friend? ! * [81]5730 complex::norm() -- huge slowdown from egcs-2.91.66 ! * [82]6713 Regression wrt 3.0.4: g++ -O2 leads to seg fault at run time * [83]7015 certain __asm__ constructs rejected ! * [84]7086 compile time regression (quadratic behavior in fixup_var_refs) ! * [85]7099 G++ doesn't set the noreturn attribute on std::exit and std::abort ! * [86]7247 copy constructor missing when inlining enabled (invalid optimization?) ! * [87]7441 string array initialization compilation time regression from seconds to minutes * [88]7768 __PRETTY_FUNCTION__ for template destructor is wrong ! * [89]7804 bad printing of floating point constant in warning message * [90]8099 Friend classes and template specializations * [91]8117 member function pointers and multiple inheritance --- 474,532 ---- * [55]6798 very long compile time with large case-statement * [56]6871 const objects shouldn't be moved to .bss * [57]6909 problem w/ -Os on modified loop-2c.c test case ! * [58]7189 gcc -O2 -Wall does not print ``control reaches end of non-void function'' warning * [59]7642 optimization problem with signbit() * [60]8634 incorrect code for inlining of memcpy under -O2 * [61]8750 Cygwin prolog generation erroneously emitting __alloca as regular function call ! C front end * [62]2161 long if-else cascade overflows parser stack * [63]4319 short accepted on typedef'd char ! * [64]8602 incorrect line numbers in warning messages when using inline functions ! * [65]9177 -fdump-translation-unit: C front end deletes function_decl AST nodes and breaks debugging dumps * [66]9853 miscompilation of non-constant structure initializer c++ compiler and library ! * [67]45 legal template specialization code is rejected (DUP: [68]3784) ! * [69]764 lookup failure: friend operator and dereferencing a pointer and templates (DUP: [70]5116) ! * [71]2862 gcc accepts invalid explicit instantiation syntax (DUP: 2863) ! * [72]3663 G++ doesn't check access control during template instantiation ! * [73]3797 gcc fails to emit explicit specialization of a template member ! * [74]3948 Two destructors are called when no copy destructor is defined (ABI change) * [75]4137 Conversion operator within template is not accepted * [76]4361 bogus ambiguity taking the address of a member template ! * [77]4802 g++ accepts illegal template code (access to private member; DUP: [78]5837) ! * [79]4803 inline function is used but never defined, and g++ does not object * [80]5094 Partial specialization cannot be friend? ! * [81]5730 complex::norm() -- huge slowdown from egcs-2.91.66 ! * [82]6713 Regression wrt 3.0.4: g++ -O2 leads to seg fault at run time * [83]7015 certain __asm__ constructs rejected ! * [84]7086 compile time regression (quadratic behavior in fixup_var_refs) ! * [85]7099 G++ doesn't set the noreturn attribute on std::exit and std::abort ! * [86]7247 copy constructor missing when inlining enabled (invalid optimization?) ! * [87]7441 string array initialization compilation time regression from seconds to minutes * [88]7768 __PRETTY_FUNCTION__ for template destructor is wrong ! * [89]7804 bad printing of floating point constant in warning message * [90]8099 Friend classes and template specializations * [91]8117 member function pointers and multiple inheritance *************** GCC 3.3 *** 541,1176 **** * [97]8700 unhelpful error message for binding temp to reference * [98]8724 explicit destructor call for incomplete class allowed * [99]8949 numeric_limits<>::denorm_min() and is_iec559 problems ! * [100]9016 Failure to consistently constant fold "constant" C++ objects ! * [101]9053 g++ confused about ambiguity of overloaded function templates * [102]9152 undefined virtual thunks * [103]9182 basic_filebuf<> does not report errors in codecvt<>::out * [104]9297 data corruption due to codegen bug (when copying.) * [105]9318 i/ostream::operator>>/<<(streambuf*) broken ! * [106]9320 Incorrect usage of traits_type::int_type in stdio_filebuf ! * [107]9400 bogus -Wshadow warning: shadowed declaration of this in local classes * [108]9424 i/ostream::operator>>/<<(streambuf*) drops characters * [109]9425 filebuf::pbackfail broken (DUP: [110]9439) ! * [111]9474 GCC freezes in compiling a weird code mixing and ! * [112]9548 Incorrect results from setf(ios::fixed) and ! precision(-1) [DR231] ! * [113]9555 ostream inserters fail to set badbit on exception ! * [114]9561 ostream inserters rethrow exception of wrong type ! * [115]9563 ostream::sentry returns true after a failed preparation ! * [116]9582 one-definition rule violation in std::allocator ! * [117]9622 __PRETTY_FUNCTION__ incorrect in template destructors ! * [118]9683 bug in initialization chains for static const variables from template classes ! * [119]9791 -Woverloaded-virtual reports hiding of destructor ! * [120]9817 collate::compare doesn't handle nul characters ! * [121]9825 filebuf::sputbackc breaks sbumpc ! * [122]9826 operator>>(basic_istream, basic_string) fails to compile with custom traits ! * [123]9924 Multiple using statements for builtin functions not allowed ! * [124]9946 destructor is not called for temporary object ! * [125]9964 filebuf::close() sometimes fails to close file ! * [126]9988 filebuf::overflow writes EOF to file ! * [127]10033 optimization breaks polymorphic references w/ typeid operator ! * [128]10097 filebuf::underflow drops characters ! * [129]10132 filebuf destructor can throw exceptions ! * [130]10180 gcc fails to warn about non-inlined function ! * [131]10199 method parametrized by template does not work everywhere ! * [132]10300 use of array-new (nothrow) in segfaults on NULL return ! * [133]10427 Stack corruption with variable-length automatic arrays and virtual destructors ! * [134]10503 Compilation never stops in fixed_type_or_null Objective-C ! * [135]5956 selectors aren't matched properly when added to the selector table Fortran compiler and library ! * [136]1832 list directed i/o overflow hangs, -fbounds-check doesn't detect ! * [137]3924 g77 generates code that is rejected by GAS if COFF debug info requested ! * [138]5634 doc: explain that configure --prefix=~/... does not work ! * [139]6367 multiple repeat counts confuse namelist read into array ! * [140]6491 Logical operations error on logicals when using -fugly-logint ! * [141]6742 Generation of C++ Prototype for FORTRAN and extern "C" ! * [142]7113 Failure of g77.f-torture/execute/f90-intrinsic-bit.f -Os on irix6.5 ! * [143]7236 OPEN(...,RECL=nnn,...) without ACCESS='DIRECT' should assume a direct access file ! * [144]7278 g77 "bug"; the executable misbehaves (with -O2 -fno-automatic) ! * [145]7384 DATE_AND_TIME milliseconds field inactive on Windows ! * [146]7388 Incorrect output with 0-based array of characters ! * [147]8587 Double complex zero ** double precision number -> NaN instead of zero ! * [148]9038 -ffixed-line-length-none -x f77-cpp-input gives: Warning: unknown register name line-length-none ! * [149]10197 Direct access files not unformatted by default Java compiler and library ! * [150]6005 gcj fails to build rhug on alpha ! * [151]6389 System.getProperty("") should always throw an IllegalArgumentException ! * [152]6576 java.util.ResourceBundle.getResource ignores locale ! * [153]6652 new java.io.File("").getCanonicalFile() throws exception ! * [154]7060 getMethod() doesn't search super interface ! * [155]7073 bytecode interpreter gives wrong answer for interface getSuperclass() ! * [156]7180 possible bug in javax.naming.spi.NamingManager.getPlusPath() ! * [157]7416 java.security startup refs "GNU libgcj.security" ! * [158]7570 Runtime.exec with null envp: child doesn't inherit ! parent env (DUP: [159]7578) ! * [160]7611 Internal error while compiling libjava with -O ! * [161]7709 NullPointerException in _Jv_ResolvePoolEntry ! * [162]7766 ZipInputStream.available returns 0 immediately after construction ! * [163]7785 Calendar.getTimeInMillis/setTimeInMillis should be public ! * [164]7786 TimeZone.getDSTSavings() from JDK1.4 not implemented ! * [165]8142 '$' in class names vs. dlopen 'dynamic string tokens' ! * [166]8234 ZipInputStream chokes when InputStream.read() returns small chunks ! * [167]8415 reflection bug: exception info for Method ! * [168]8481 java.Random.nextInt(int) may return negative ! * [169]8593 Error reading GZIPped files with BufferedReader ! * [170]8759 java.beans.Introspector has no flushCaches() or flushFromCaches() methods ! * [171]8997 spin() calls Thread.sleep ! * [172]9253 on win32, java.io.File.listFiles("C:\\") returns pwd instead of the root content of C: ! * [173]9254 java::lang::Object::wait(), threads-win32.cc returns wrong return codes ! * [174]9271 Severe bias in java.security.SecureRandom Ada compiler and library ! * [175]6767 make gnatlib-shared fails on -laddr2line ! * [176]9911 gnatmake fails to link when GCC configured with --with-sjlj-exceptions=yes ! * [177]10020 Can't bootstrap gcc on AIX with Ada enabled ! * [178]10546 Ada tasking not working on Red Hat 9 preprocessor ! * [179]7029 preprocessor should ignore #warning with -M ARM-specific ! * [180]2903 [arm] Optimization bug with long long arithmetic ! * [181]7873 arm-linux-gcc fails when assigning address to a bit field FreeBSD-specific ! * [182]7680 float functions undefined in math.h/cmath with #define _XOPEN_SOURCE HP-UX or HP-PA-specific ! * [183]8705 [HP-PA] ICE in emit_move_insn_1, in expr.c ! * [184]9986 [HP-UX] Incorrect transformation of fputs_unlocked to fputc_unlocked ! * [185]10056 [HP-PA] ICE at -O2 when building c++ code from doxygen m68hc11-specific ! * [186]6744 Bad assembler code generated: reference to pseudo register z ! * [187]7361 Internal compiler error in reload_cse_simplify_operands, in reload1.c MIPS-specific ! * [188]9496 [mips-linux] bug in optimizer? PowerPC-specific ! * [189]7067 -Os with -mcpu=powerpc optimizes for speed (?) instead of space ! * [190]8480 reload ICEs for LAPACK code on powerpc64-linux ! * [191]8784 [AIX] Internal compiler error in simplify_gen_subreg ! * [192]10315 [powerpc] ICE: in extract_insn, in recog.c SPARC-specific ! * [193]10267 (documentation) Wrong build instructions for *-*-solaris2* x86-specific (Intel/AMD) ! * [194]7916 ICE in instantiate_virtual_register_1 ! * [195]7926 (c++) i486 instructions in header files make c++ programs crash on i386 ! * [196]8555 ICE in gen_split_1231 ! * [197]8994 ICE with -O -march=pentium4 ! * [198]9426 ICE with -fssa -funroll-loops -fprofile-arcs ! * [199]9806 ICE in inline assembly with -fPIC flag ! * [200]10077 gcc -msse2 generates movd to move dwords between xmm regs ! * [201]10233 64-bit comparison only comparing bottom 32-bits ! * [202]10286 type-punning doesn't work with __m64 and -O ! * [203]10308 [x86] ICE with -O -fgcse or -O2 _________________________________________________________________ GCC 3.3.1 Bug Fixes ! This section lists the problem reports (PRs) from GCC's bug tracking ! system that are known to be fixed in the 3.3.1 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). Bootstrap failures ! * [204]11272 [Solaris] make bootstrap fails while building libstdc++ Internal compiler errors (multi-platform) ! * [205]5754 ICE on invalid nested template class ! * [206]6597 ICE in set_mem_alias_set compiling Qt with -O2 on ia64 and --enable-checking ! * [207]6949 (c++) ICE in tsubst_decl, in cp/pt.c ! * [208]7053 (c++) ICE when declaring a function already defined as a friend method of a template class ! * [209]8164 (c++) ICE when using different const expressions as template parameter ! * [210]8384 (c++) ICE in is_base_type, in dwarf2out.c ! * [211]9559 (c++) ICE with invalid initialization of a static const ! * [212]9649 (c++) ICE in finish_member_declaration, in cp/semantics.c when redeclaring a static member variable ! * [213]9864 (fortran) ICE in add_abstract_origin_attribute, in dwarfout.c with -g -O -finline-functions ! * [214]10432 (c++) ICE in poplevel, in cp/decl.c ! * [215]10475 ICE in subreg_highpart_offset for code with long long ! * [216]10635 (c++) ICE when dereferencing an incomplete type casted from a void pointer ! * [217]10661 (c++) ICE in instantiate_decl, in cp/pt.c while instantiating static member variables ! * [218]10700 ICE in copy_to_mode_reg on 64-bit targets ! * [219]10712 (c++) ICE in constructor_name_full, in cp/decl2.c ! * [220]10796 (c++) ICE when defining an enum with two values: -1 and MAX_INT_64BIT ! * [221]10890 ICE in merge_assigned_reloads building Linux 2.4.2x sched.c ! * [222]10939 (c++) ICE with template code ! * [223]10956 (c++) ICE when specializing a template member function of a template class, in tsubst, in cp/pt.c ! * [224]11041 (c++) ICE: const myclass &x = *x; (when operator*() defined) ! * [225]11059 (c++) ICE with empty union ! * [226]11083 (c++) ICE in commit_one_edge_insertion, in cfgrtl.c with -O2 -fnon-call-exceptions ! * [227]11105 (c++) ICE in mangle_conv_op_name_for_type ! * [228]11149 (c++) ICE on error when instantiation with call function of a base type ! * [229]11228 (c++) ICE on new-expression using array operator new and default-initialization ! * [230]11282 (c++) Infinite memory usage after syntax error ! * [231]11301 (fortran) ICE with -fno-globals ! * [232]11308 (c++) ICE when using an enum type name as if it were a class or namespace ! * [233]11473 (c++) ICE with -gstabs when empty struct inherits from an empty struct ! * [234]11503 (c++) ICE when instantiating template with ADDR_EXPR ! * [235]11513 (c++) ICE in push_template_decl_real, in cp/pt.c: template member functions Optimization bugs ! * [236]11198 -O2 -frename-registers generates wrong code (aliasing problem) ! * [237]11304 Wrong code production with -fomit-frame-pointer ! * [238]11381 volatile memory access optimized away ! * [239]11536 [strength-reduce] -O2 optimization produces wrong code ! * [240]11557 constant folding bug generates wrong code C front end ! * [241]5897 No warning for statement after return ! * [242]11279 DWARF-2 output mishandles large enums Preprocessor bugs ! * [243]11022 no warning for non-compatible macro redefinition C++ compiler and library ! * [244]2330 static_cast<>() to a private base is allowed ! * [245]5388 Incorrect message "operands to ?: have different types" ! * [246]5390 Libiberty fails to demangle multi-digit template parameters ! * [247]7877 Incorrect parameter passing to specializations of member function templates ! * [248]9393 Anonymous namespaces and compiling the same file twice ! * [249]10032 -pedantic converts some errors to warnings ! * [250]10468 const typeof(x) is non-const, but only in templates ! * [251]10527 confused error message with "new int()" parameter initializer ! * [252]10679 parameter MIN_INLINE_INSNS is not honored ! * [253]10682 gcc chokes on a typedef for an enum inside a class template ! * [254]10689 pow(std::complex(0),1/3) returns (nan, nan) instead of 0. ! * [255]10845 template member function (with nested template as ! parameter) cannot be called anymore if another unrelated template member function is defined ! * [256]10849 Cannot define an out-of-class specialization of a private nested template class ! * [257]10888 Suppress -Winline warnings for system headers ! * [258]10929 -Winline warns about functions for which no definition is visible ! * [259]10931 valid conversion static_cast(lvalue-of-type-int) is rejected ! * [260]10940 Bad code with explicit specialization ! * [261]10968 If member function implicitly instantiated, explicit instantiation of class fails to instantiate it ! * [262]10990 Cannot convert with dynamic_cast<> to a private base class from within a member function ! * [263]11039 Bad interaction between implicit typename deprecation and friendship ! * [264]11062 (libstdc++) avoid __attribute__ ((unused)); say "__unused__" instead ! * [265]11095 C++ iostream manipulator causes segfault when called with negative argument ! * [266]11098 g++ doesn't emit complete debugging information for local variables in destructors ! * [267]11137 Linux shared library constructors not called unless there's one global object ! * [268]11154 spurious ambiguity report for template class specialization ! * [269]11329 Compiler cannot find user defined implicit typecast ! * [270]11332 Spurious error with casts in ?: expression ! * [271]11431 static_cast behavior with subclasses when default constructor available ! * [272]11528 money_get facet does not accept "$.00" as valid ! * [273]11546 Type lookup problems in out-of-line definition of a class doubly nested from a template class ! * [274]11567 C++ code containing templated member function with same name as pure virtual member function results in linking failure ! * [275]11645 Failure to deal with using and private inheritance Java compiler and library ! * [276]5179 Qualified static field access doesn't initialize its class ! * [277]8204 gcj -O2 to native reorders certain instructions improperly ! * [278]10838 java.io.ObjectInputStream syntax error ! * [279]10886 The RMI registry that comes with GCJ does not work correctly ! * [280]11349 JNDI URL context factories not located correctly x86-specific (Intel/AMD) ! * [281]4823 ICE on inline assembly code ! * [282]8878 miscompilation with -O and SSE ! * [283]9815 (c++ library) atomicity.h - fails to compile with -O3 -masm=intel ! * [284]10402 (inline assembly) [x86] ICE in merge_assigned_reloads, in reload1.c ! * [285]10504 ICE with SSE2 code and -O3 -mcpu=pentium4 -msse2 ! * [286]10673 ICE for x86-64 on freebsd libc vfprintf.c source ! * [287]11044 [x86] out of range loop instructions for FP code on K6 ! * [288]11089 ICE: instantiate_virtual_regs_lossage while using SSE built-ins ! * [289]11420 [x86_64] gcc generates invalid asm code when "-O -fPIC" is used SPARC- or Solaris- specific ! * [290]9362 solaris 'as' dies when fed .s and "-gstabs" ! * [291]10142 [SPARC64] gcc produces wrong code when passing structures by value ! * [292]10663 New configure check aborts with Sun tools. ! * [293]10835 combinatorial explosion in scheduler on HyperSPARC ! * [294]10876 ICE in calculate_giv_inc when building KDE ! * [295]10955 wrong code at -O3 for structure argument in context of structure return ! * [296]11018 -mcpu=ultrasparc busts tar-1.13.25 ! * [297]11556 [sparc64] ICE in gen_reg_rtx() while compiling 2.6.x Linux kernel ia64 specific ! * [298]10907 gcc violates the ia64 ABI (GP must be preserved) ! * [299]11320 scheduler bug (in machine depended reorganization pass) ! * [300]11599 bug with conditional and __builtin_prefetch PowerPC specific ! * [301]9745 [powerpc] gcc mis-compiles libmcrypt (alias problem during loop) ! * [302]10871 error in rs6000_stack_info save_size computation ! * [303]11440 gcc mis-compiles c++ code (libkhtml) with -O2, -fno-gcse cures it m68k-specific ! * [304]7594 [m68k] ICE on legal code associated with simplify-rtx ! * [305]10557 [m68k] ICE in subreg_offset_representable_p ! * [306]11054 [m68k] ICE in reg_overlap_mentioned_p ARM-specific ! * [307]10834 [arm] GCC 3.3 still generates incorrect instructions for functions with __attribute__ ((interrupt ("IRQ"))) ! * [308]10842 [arm] Clobbered link register is copied to pc under certain circumstances ! * [309]11052 [arm] noce_process_if_block() can lose REG_INC notes ! * [310]11183 [arm] ICE in change_address_1 (3.3) / subreg_hard_regno (3.4) MIPS-specific ! * [311]11084 ICE in propagate_one_insn, in flow.c SH-specific ! * [312]10331 can't compile c++ part of gcc cross compiler for sh-elf ! * [313]10413 [SH] ICE in reload_cse_simplify_operands, in reload1.c ! * [314]11096 i686-linux to sh-linux cross compiler fails to compile C++ files GNU/Linux (or Hurd?) specific ! * [315]2873 Bogus fixinclude of stdio.h from glibc 2.2.3 UnixWare specific ! * [316]3163 configure bug: gcc/aclocal.m4 mmap test fails on UnixWare 7.1.1 Cygwin (or mingw) specific ! * [317]5287 ICE with dllimport attribute ! * [318]10148 [MingW/CygWin] Compiler dumps core DJGPP specific ! * [319]8787 GCC fails to emit .intel_syntax when invoked with -masm=intel on DJGPP Documentation ! * [320]1607 (c++) Format attributes on methods undocumented ! * [321]4252 Invalid option `-fdump-translation-unit' ! * [322]4490 Clarify restrictions on -m96bit-long-double, -m128bit-long-double ! * [323]10355 document an issue with regparm attribute on some systems (e.g. Solaris) ! * [324]10726 (fortran) Documentation for function "IDate Intrinsic (Unix)" is wrong ! * [325]10805 document bug in old version of Sun assembler ! * [326]10815 warn against GNU binutils on AIX ! * [327]10877 document need for newer binutils on i?86-*-linux-gnu ! * [328]11280 Manual incorrect with respect to -freorder-blocks ! * [329]11466 Document -mlittle-endian and its restrictions for the sparc64 port Testsuite bugs (compiler itself is not affected) ! * [330]10737 newer bison causes g++.dg/parse/crash2.C to incorrectly report failure ! * [331]10810 gcc-3.3 fails make check: buffer overrun in test_demangle.c _________________________________________________________________ GCC 3.3.2 - Oct. 14, 2003: This section is preliminary, as 3.3.2 has not yet been - officially released. - Bug Fixes ! This section lists the problem reports (PRs) from [332]GCC's bug ! tracking system that are known to be fixed in the 3.3.2 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). Bootstrap failures and problems ! * [333]8336 [SCO5] bootstrap config still tries to use COFF options ! * [334]9330 [alpha-osf] Bootstrap failure on Compaq Tru64 with --enable-threads=posix ! * [335]9631 [hppa64-linux] gcc-3.3 fails to bootstrap ! * [336]9877 fixincludes makes a bad sys/byteorder.h on svr5 (UnixWare 7.1.1) ! * [337]11687 xstormy16-elf build fails in libf2c ! * [338]12263 [SGI IRIX] bootstrap fails during compile of libf2c/libI77/backspace.c ! * [339]12490 buffer overflow in scan-decls.c (during Solaris 9 fix-header processing) Internal compiler errors (multi-platform) ! * [340]7277 Casting integers to vector types causes ICE ! * [341]11063 (c++) ICE on parsing initialization list of const array member ! * [342]11207 ICE with negative index in array element designator ! * [343]11522 (fortran) g77 dwarf-2 ICE in add_abstract_origin_attribute ! * [344]11595 (c++) ICE on duplicate label definition ! * [345]11646 (c++) ICE in commit_one_edge_insertion with -fnon-call-exceptions -fgcse -O ! * [346]11665 ICE in struct initializer when taking address ! * [347]11852 (c++) ICE with bad struct initializer. ! * [348]11878 (c++) ICE in cp_expr_size ! * [349]11883 ICE with any -O on mercury-generated C code ! * [350]11991 (c++) ICE in cxx_incomplete_type_diagnostic, in ! cp/typeck2.c when applying typeid operator to template template parameter ! * [351]12146 ICE in lookup_template_function, in cp/pt.c ! * [352]12215 ICE in make_label_edge with -fnon-call-exceptions -fno-gcse -O2 ! * [353]12446 ICE in emit_move_insn on complicated array reference ! * [354]12510 ICE in final_scan_insn ! * [355]12544 ICE with large parameters used in nested functions C and optimization bugs ! * [356]9862 spurious warnings with -W -finline-functions ! * [357]10962 lookup_field is a linear search on a linked list (can be slow if large struct) ! * [358]11370 -Wunreachable-code gives false complaints ! * [359]11637 invalid assembly with -fnon-call-exceptions ! * [360]11885 Problem with bitfields in packed structs ! * [361]12082 Inappropriate unreachable code warnings ! * [362]12180 Inline optimization fails for variadic function ! * [363]12340 loop unroller + gcse produces wrong code C++ compiler and library ! * [364]3907 nested template parameter collides with member name ! * [365]5293 confusing message when binding a temporary to a reference ! * [366]5296 [DR115] Pointers to functions and to template functions behave differently in deduction ! * [367]7939 ICE on function template specialization ! * [368]8656 Unable to assign function with __attribute__ and pointer return type to an appropriate variable ! * [369]10147 Confusing error message for invalid template function argument ! * [370]11400 std::search_n() makes assumptions about Size parameter ! * [371]11409 issues with using declarations, overloading, and built-in functions ! * [372]11740 ctype::do_is(mask, wchar_t) doesn't handle multiple bits in mask ! * [373]11786 operator() call on variable in other namespace not recognized ! * [374]11867 static_cast ignores ambiguity ! * [375]11928 bug with conversion operators that are typedefs ! * [376]12163 static_cast + explicit constructor regression ! * [377]12181 Wrong code with comma operator and c++ ! * [378]12236 regparm and fastcall messes up parameters ! * [379]12266 incorrect instantiation of unneeded template during overload resolution ! * [380]12296 istream::peek() doesn't set eofbit ! * [381]12369 ICE ith templates and friends ! * [382]12337 apparently infinite loop in g++ ! * [383]12344 stdcall attribute ignored if function returns a pointer ! * [384]12451 missing(late) class forward declaration in cxxabi.h ! * [385]12486 g++ accepts invalid use of a qualified name x86 specific (Intel/AMD) ! * [386]8869 [x86 MMX] ICE with const variable optimization and MMX builtins ! * [387]9786 ICE in fixup_abnormal_edges with -fnon-call-exceptions -O2 ! * [388]11689 g++3.3 emits un-assembleable code for k6 architecture ! * [389]12116 [k6] Invalid assembly output values with X-MAME code ! * [390]12070 ICE converting between double and long double with -msoft-float ia64-specific ! * [391]11184 [ia64 hpux] ICE on __builtin_apply building libobjc ! * [392]11535 __builtin_return_address may not work on ia64 ! * [393]11693 [ia64] ICE in gen_nop_type ! * [394]12224 [ia64] Thread-local storage doesn't work PowerPC-specific ! * [395]11087 [powerpc64-linux] GCC miscompiles raid1.c from linux kernel ! * [396]11319 loop miscompiled on ppc32 ! * [397]11949 ICE Compiler segfault with ffmpeg -maltivec code SPARC-specific ! * [398]11662 wrong code for expr. with cast to long long and exclusive or ! * [399]11965 invalid assembler code for a shift << 32 operation ! * [400]12301 (c++) stack corruption when a returned expression throws an exception Alpha-specific ! * [401]11717 [alpha-linux] unrecognizable insn compiling for.c of kernel 2.4.22-pre8 - Darwin (and MacOS X) specific - - * [402]10900 trampolines crash - HPUX-specific ! * [403]11313 problem with #pragma weak and static inline functions ! * [404]11712 __STDC_EXT__ not defined for C++ by default anymore? Solaris specific ! * [405]12166 Profiled programs crash if PROFDIR is set Solaris-x86 specific ! * [406]12101 i386 Solaris no longer works with GNU as? Miscellaneous embedded target-specific bugs ! * [407]10988 [m32r-elf] wrong blockmove code with -O3 ! * [408]11805 [h8300-unknown-coff] [H8300] ICE for simple code with -O2 ! * [409]11902 [sh4] spec file improperly inserts rpath even when none needed ! * [410]11903 [sh4] -pthread fails to link due to error in spec file on sh4 _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [411]gnu@gnu.org. There ! are also [412]other ways to contact the FSF. ! These pages are maintained by [413]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [414]GCC manuals. If that fails, the ! [415]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [416]gcc@gnu.org or ! [417]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2003-10-16 [418]Valid XHTML 1.0 References --- 538,1431 ---- * [97]8700 unhelpful error message for binding temp to reference * [98]8724 explicit destructor call for incomplete class allowed * [99]8949 numeric_limits<>::denorm_min() and is_iec559 problems ! * [100]9016 Failure to consistently constant fold "constant" C++ objects ! * [101]9053 g++ confused about ambiguity of overloaded function templates * [102]9152 undefined virtual thunks * [103]9182 basic_filebuf<> does not report errors in codecvt<>::out * [104]9297 data corruption due to codegen bug (when copying.) * [105]9318 i/ostream::operator>>/<<(streambuf*) broken ! * [106]9320 Incorrect usage of traits_type::int_type in stdio_filebuf ! * [107]9400 bogus -Wshadow warning: shadowed declaration of this in local classes * [108]9424 i/ostream::operator>>/<<(streambuf*) drops characters * [109]9425 filebuf::pbackfail broken (DUP: [110]9439) ! * [111]9474 GCC freezes in compiling a weird code mixing and ! * [112]9548 Incorrect results from setf(ios::fixed) and ! precision(-1) [113][DR 231] ! * [114]9555 ostream inserters fail to set badbit on exception ! * [115]9561 ostream inserters rethrow exception of wrong type ! * [116]9563 ostream::sentry returns true after a failed preparation ! * [117]9582 one-definition rule violation in std::allocator ! * [118]9622 __PRETTY_FUNCTION__ incorrect in template destructors ! * [119]9683 bug in initialization chains for static const variables from template classes ! * [120]9791 -Woverloaded-virtual reports hiding of destructor ! * [121]9817 collate::compare doesn't handle nul characters ! * [122]9825 filebuf::sputbackc breaks sbumpc ! * [123]9826 operator>>(basic_istream, basic_string) fails to compile with custom traits ! * [124]9924 Multiple using statements for builtin functions not allowed ! * [125]9946 destructor is not called for temporary object ! * [126]9964 filebuf::close() sometimes fails to close file ! * [127]9988 filebuf::overflow writes EOF to file ! * [128]10033 optimization breaks polymorphic references w/ typeid operator ! * [129]10097 filebuf::underflow drops characters ! * [130]10132 filebuf destructor can throw exceptions ! * [131]10180 gcc fails to warn about non-inlined function ! * [132]10199 method parametrized by template does not work everywhere ! * [133]10300 use of array-new (nothrow) in segfaults on NULL return ! * [134]10427 Stack corruption with variable-length automatic arrays and virtual destructors ! * [135]10503 Compilation never stops in fixed_type_or_null Objective-C ! * [136]5956 selectors aren't matched properly when added to the selector table Fortran compiler and library ! * [137]1832 list directed i/o overflow hangs, -fbounds-check doesn't detect ! * [138]3924 g77 generates code that is rejected by GAS if COFF debug info requested ! * [139]5634 doc: explain that configure --prefix=~/... does not work ! * [140]6367 multiple repeat counts confuse namelist read into array ! * [141]6491 Logical operations error on logicals when using -fugly-logint ! * [142]6742 Generation of C++ Prototype for FORTRAN and extern "C" ! * [143]7113 Failure of g77.f-torture/execute/f90-intrinsic-bit.f -Os on irix6.5 ! * [144]7236 OPEN(...,RECL=nnn,...) without ACCESS='DIRECT' should assume a direct access file ! * [145]7278 g77 "bug"; the executable misbehaves (with -O2 -fno-automatic) ! * [146]7384 DATE_AND_TIME milliseconds field inactive on Windows ! * [147]7388 Incorrect output with 0-based array of characters ! * [148]8587 Double complex zero ** double precision number -> NaN instead of zero ! * [149]9038 -ffixed-line-length-none -x f77-cpp-input gives: Warning: unknown register name line-length-none ! * [150]10197 Direct access files not unformatted by default Java compiler and library ! * [151]6005 gcj fails to build rhug on alpha ! * [152]6389 System.getProperty("") should always throw an IllegalArgumentException ! * [153]6576 java.util.ResourceBundle.getResource ignores locale ! * [154]6652 new java.io.File("").getCanonicalFile() throws exception ! * [155]7060 getMethod() doesn't search super interface ! * [156]7073 bytecode interpreter gives wrong answer for interface getSuperclass() ! * [157]7180 possible bug in javax.naming.spi.NamingManager.getPlusPath() ! * [158]7416 java.security startup refs "GNU libgcj.security" ! * [159]7570 Runtime.exec with null envp: child doesn't inherit ! parent env (DUP: [160]7578) ! * [161]7611 Internal error while compiling libjava with -O ! * [162]7709 NullPointerException in _Jv_ResolvePoolEntry ! * [163]7766 ZipInputStream.available returns 0 immediately after construction ! * [164]7785 Calendar.getTimeInMillis/setTimeInMillis should be public ! * [165]7786 TimeZone.getDSTSavings() from JDK1.4 not implemented ! * [166]8142 '$' in class names vs. dlopen 'dynamic string tokens' ! * [167]8234 ZipInputStream chokes when InputStream.read() returns small chunks ! * [168]8415 reflection bug: exception info for Method ! * [169]8481 java.Random.nextInt(int) may return negative ! * [170]8593 Error reading GZIPped files with BufferedReader ! * [171]8759 java.beans.Introspector has no flushCaches() or flushFromCaches() methods ! * [172]8997 spin() calls Thread.sleep ! * [173]9253 on win32, java.io.File.listFiles("C:\\") returns pwd instead of the root content of C: ! * [174]9254 java::lang::Object::wait(), threads-win32.cc returns wrong return codes ! * [175]9271 Severe bias in java.security.SecureRandom Ada compiler and library ! * [176]6767 make gnatlib-shared fails on -laddr2line ! * [177]9911 gnatmake fails to link when GCC configured with --with-sjlj-exceptions=yes ! * [178]10020 Can't bootstrap gcc on AIX with Ada enabled ! * [179]10546 Ada tasking not working on Red Hat 9 preprocessor ! * [180]7029 preprocessor should ignore #warning with -M ARM-specific ! * [181]2903 [arm] Optimization bug with long long arithmetic ! * [182]7873 arm-linux-gcc fails when assigning address to a bit field FreeBSD-specific ! * [183]7680 float functions undefined in math.h/cmath with #define _XOPEN_SOURCE HP-UX or HP-PA-specific ! * [184]8705 [HP-PA] ICE in emit_move_insn_1, in expr.c ! * [185]9986 [HP-UX] Incorrect transformation of fputs_unlocked to fputc_unlocked ! * [186]10056 [HP-PA] ICE at -O2 when building c++ code from doxygen m68hc11-specific ! * [187]6744 Bad assembler code generated: reference to pseudo register z ! * [188]7361 Internal compiler error in reload_cse_simplify_operands, in reload1.c MIPS-specific ! * [189]9496 [mips-linux] bug in optimizer? PowerPC-specific ! * [190]7067 -Os with -mcpu=powerpc optimizes for speed (?) instead of space ! * [191]8480 reload ICEs for LAPACK code on powerpc64-linux ! * [192]8784 [AIX] Internal compiler error in simplify_gen_subreg ! * [193]10315 [powerpc] ICE: in extract_insn, in recog.c SPARC-specific ! * [194]10267 (documentation) Wrong build instructions for *-*-solaris2* x86-specific (Intel/AMD) ! * [195]7916 ICE in instantiate_virtual_register_1 ! * [196]7926 (c++) i486 instructions in header files make c++ programs crash on i386 ! * [197]8555 ICE in gen_split_1231 ! * [198]8994 ICE with -O -march=pentium4 ! * [199]9426 ICE with -fssa -funroll-loops -fprofile-arcs ! * [200]9806 ICE in inline assembly with -fPIC flag ! * [201]10077 gcc -msse2 generates movd to move dwords between xmm regs ! * [202]10233 64-bit comparison only comparing bottom 32-bits ! * [203]10286 type-punning doesn't work with __m64 and -O ! * [204]10308 [x86] ICE with -O -fgcse or -O2 _________________________________________________________________ GCC 3.3.1 Bug Fixes ! This section lists the problem reports (PRs) from GCC's bug tracking ! system that are known to be fixed in the 3.3.1 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). Bootstrap failures ! * [205]11272 [Solaris] make bootstrap fails while building libstdc++ Internal compiler errors (multi-platform) ! * [206]5754 ICE on invalid nested template class ! * [207]6597 ICE in set_mem_alias_set compiling Qt with -O2 on ia64 and --enable-checking ! * [208]6949 (c++) ICE in tsubst_decl, in cp/pt.c ! * [209]7053 (c++) ICE when declaring a function already defined as a friend method of a template class ! * [210]8164 (c++) ICE when using different const expressions as template parameter ! * [211]8384 (c++) ICE in is_base_type, in dwarf2out.c ! * [212]9559 (c++) ICE with invalid initialization of a static const ! * [213]9649 (c++) ICE in finish_member_declaration, in cp/semantics.c when redeclaring a static member variable ! * [214]9864 (fortran) ICE in add_abstract_origin_attribute, in dwarfout.c with -g -O -finline-functions ! * [215]10432 (c++) ICE in poplevel, in cp/decl.c ! * [216]10475 ICE in subreg_highpart_offset for code with long long ! * [217]10635 (c++) ICE when dereferencing an incomplete type casted from a void pointer ! * [218]10661 (c++) ICE in instantiate_decl, in cp/pt.c while instantiating static member variables ! * [219]10700 ICE in copy_to_mode_reg on 64-bit targets ! * [220]10712 (c++) ICE in constructor_name_full, in cp/decl2.c ! * [221]10796 (c++) ICE when defining an enum with two values: -1 and MAX_INT_64BIT ! * [222]10890 ICE in merge_assigned_reloads building Linux 2.4.2x sched.c ! * [223]10939 (c++) ICE with template code ! * [224]10956 (c++) ICE when specializing a template member function of a template class, in tsubst, in cp/pt.c ! * [225]11041 (c++) ICE: const myclass &x = *x; (when operator*() defined) ! * [226]11059 (c++) ICE with empty union ! * [227]11083 (c++) ICE in commit_one_edge_insertion, in cfgrtl.c with -O2 -fnon-call-exceptions ! * [228]11105 (c++) ICE in mangle_conv_op_name_for_type ! * [229]11149 (c++) ICE on error when instantiation with call function of a base type ! * [230]11228 (c++) ICE on new-expression using array operator new and default-initialization ! * [231]11282 (c++) Infinite memory usage after syntax error ! * [232]11301 (fortran) ICE with -fno-globals ! * [233]11308 (c++) ICE when using an enum type name as if it were a class or namespace ! * [234]11473 (c++) ICE with -gstabs when empty struct inherits from an empty struct ! * [235]11503 (c++) ICE when instantiating template with ADDR_EXPR ! * [236]11513 (c++) ICE in push_template_decl_real, in cp/pt.c: template member functions Optimization bugs ! * [237]11198 -O2 -frename-registers generates wrong code (aliasing problem) ! * [238]11304 Wrong code production with -fomit-frame-pointer ! * [239]11381 volatile memory access optimized away ! * [240]11536 [strength-reduce] -O2 optimization produces wrong code ! * [241]11557 constant folding bug generates wrong code C front end ! * [242]5897 No warning for statement after return ! * [243]11279 DWARF-2 output mishandles large enums Preprocessor bugs ! * [244]11022 no warning for non-compatible macro redefinition C++ compiler and library ! * [245]2330 static_cast<>() to a private base is allowed ! * [246]5388 Incorrect message "operands to ?: have different types" ! * [247]5390 Libiberty fails to demangle multi-digit template parameters ! * [248]7877 Incorrect parameter passing to specializations of member function templates ! * [249]9393 Anonymous namespaces and compiling the same file twice ! * [250]10032 -pedantic converts some errors to warnings ! * [251]10468 const typeof(x) is non-const, but only in templates ! * [252]10527 confused error message with "new int()" parameter initializer ! * [253]10679 parameter MIN_INLINE_INSNS is not honored ! * [254]10682 gcc chokes on a typedef for an enum inside a class template ! * [255]10689 pow(std::complex(0),1/3) returns (nan, nan) instead of 0. ! * [256]10845 template member function (with nested template as ! parameter) cannot be called anymore if another unrelated template member function is defined ! * [257]10849 Cannot define an out-of-class specialization of a private nested template class ! * [258]10888 Suppress -Winline warnings for system headers ! * [259]10929 -Winline warns about functions for which no definition is visible ! * [260]10931 valid conversion static_cast(lvalue-of-type-int) is rejected ! * [261]10940 Bad code with explicit specialization ! * [262]10968 If member function implicitly instantiated, explicit instantiation of class fails to instantiate it ! * [263]10990 Cannot convert with dynamic_cast<> to a private base class from within a member function ! * [264]11039 Bad interaction between implicit typename deprecation and friendship ! * [265]11062 (libstdc++) avoid __attribute__ ((unused)); say "__unused__" instead ! * [266]11095 C++ iostream manipulator causes segfault when called with negative argument ! * [267]11098 g++ doesn't emit complete debugging information for local variables in destructors ! * [268]11137 Linux shared library constructors not called unless there's one global object ! * [269]11154 spurious ambiguity report for template class specialization ! * [270]11329 Compiler cannot find user defined implicit typecast ! * [271]11332 Spurious error with casts in ?: expression ! * [272]11431 static_cast behavior with subclasses when default constructor available ! * [273]11528 money_get facet does not accept "$.00" as valid ! * [274]11546 Type lookup problems in out-of-line definition of a class doubly nested from a template class ! * [275]11567 C++ code containing templated member function with same name as pure virtual member function results in linking failure ! * [276]11645 Failure to deal with using and private inheritance Java compiler and library ! * [277]5179 Qualified static field access doesn't initialize its class ! * [278]8204 gcj -O2 to native reorders certain instructions improperly ! * [279]10838 java.io.ObjectInputStream syntax error ! * [280]10886 The RMI registry that comes with GCJ does not work correctly ! * [281]11349 JNDI URL context factories not located correctly x86-specific (Intel/AMD) ! * [282]4823 ICE on inline assembly code ! * [283]8878 miscompilation with -O and SSE ! * [284]9815 (c++ library) atomicity.h - fails to compile with -O3 -masm=intel ! * [285]10402 (inline assembly) [x86] ICE in merge_assigned_reloads, in reload1.c ! * [286]10504 ICE with SSE2 code and -O3 -mcpu=pentium4 -msse2 ! * [287]10673 ICE for x86-64 on freebsd libc vfprintf.c source ! * [288]11044 [x86] out of range loop instructions for FP code on K6 ! * [289]11089 ICE: instantiate_virtual_regs_lossage while using SSE built-ins ! * [290]11420 [x86_64] gcc generates invalid asm code when "-O -fPIC" is used SPARC- or Solaris- specific ! * [291]9362 solaris 'as' dies when fed .s and "-gstabs" ! * [292]10142 [SPARC64] gcc produces wrong code when passing structures by value ! * [293]10663 New configure check aborts with Sun tools. ! * [294]10835 combinatorial explosion in scheduler on HyperSPARC ! * [295]10876 ICE in calculate_giv_inc when building KDE ! * [296]10955 wrong code at -O3 for structure argument in context of structure return ! * [297]11018 -mcpu=ultrasparc busts tar-1.13.25 ! * [298]11556 [sparc64] ICE in gen_reg_rtx() while compiling 2.6.x Linux kernel ia64 specific ! * [299]10907 gcc violates the ia64 ABI (GP must be preserved) ! * [300]11320 scheduler bug (in machine depended reorganization pass) ! * [301]11599 bug with conditional and __builtin_prefetch PowerPC specific ! * [302]9745 [powerpc] gcc mis-compiles libmcrypt (alias problem during loop) ! * [303]10871 error in rs6000_stack_info save_size computation ! * [304]11440 gcc mis-compiles c++ code (libkhtml) with -O2, -fno-gcse cures it m68k-specific ! * [305]7594 [m68k] ICE on legal code associated with simplify-rtx ! * [306]10557 [m68k] ICE in subreg_offset_representable_p ! * [307]11054 [m68k] ICE in reg_overlap_mentioned_p ARM-specific ! * [308]10834 [arm] GCC 3.3 still generates incorrect instructions for functions with __attribute__ ((interrupt ("IRQ"))) ! * [309]10842 [arm] Clobbered link register is copied to pc under certain circumstances ! * [310]11052 [arm] noce_process_if_block() can lose REG_INC notes ! * [311]11183 [arm] ICE in change_address_1 (3.3) / subreg_hard_regno (3.4) MIPS-specific ! * [312]11084 ICE in propagate_one_insn, in flow.c SH-specific ! * [313]10331 can't compile c++ part of gcc cross compiler for sh-elf ! * [314]10413 [SH] ICE in reload_cse_simplify_operands, in reload1.c ! * [315]11096 i686-linux to sh-linux cross compiler fails to compile C++ files GNU/Linux (or Hurd?) specific ! * [316]2873 Bogus fixinclude of stdio.h from glibc 2.2.3 UnixWare specific ! * [317]3163 configure bug: gcc/aclocal.m4 mmap test fails on UnixWare 7.1.1 Cygwin (or mingw) specific ! * [318]5287 ICE with dllimport attribute ! * [319]10148 [MingW/CygWin] Compiler dumps core DJGPP specific ! * [320]8787 GCC fails to emit .intel_syntax when invoked with -masm=intel on DJGPP + Darwin (and MacOS X) specific + + * [321]10900 trampolines crash + Documentation ! * [322]1607 (c++) Format attributes on methods undocumented ! * [323]4252 Invalid option `-fdump-translation-unit' ! * [324]4490 Clarify restrictions on -m96bit-long-double, -m128bit-long-double ! * [325]10355 document an issue with regparm attribute on some systems (e.g. Solaris) ! * [326]10726 (fortran) Documentation for function "IDate Intrinsic (Unix)" is wrong ! * [327]10805 document bug in old version of Sun assembler ! * [328]10815 warn against GNU binutils on AIX ! * [329]10877 document need for newer binutils on i?86-*-linux-gnu ! * [330]11280 Manual incorrect with respect to -freorder-blocks ! * [331]11466 Document -mlittle-endian and its restrictions for the sparc64 port Testsuite bugs (compiler itself is not affected) ! * [332]10737 newer bison causes g++.dg/parse/crash2.C to incorrectly report failure ! * [333]10810 gcc-3.3 fails make check: buffer overrun in test_demangle.c _________________________________________________________________ GCC 3.3.2 Bug Fixes ! This section lists the problem reports (PRs) from [334]GCC's bug ! tracking system that are known to be fixed in the 3.3.2 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). Bootstrap failures and problems ! * [335]8336 [SCO5] bootstrap config still tries to use COFF options ! * [336]9330 [alpha-osf] Bootstrap failure on Compaq Tru64 with --enable-threads=posix ! * [337]9631 [hppa64-linux] gcc-3.3 fails to bootstrap ! * [338]9877 fixincludes makes a bad sys/byteorder.h on svr5 (UnixWare 7.1.1) ! * [339]11687 xstormy16-elf build fails in libf2c ! * [340]12263 [SGI IRIX] bootstrap fails during compile of libf2c/libI77/backspace.c ! * [341]12490 buffer overflow in scan-decls.c (during Solaris 9 fix-header processing) Internal compiler errors (multi-platform) ! * [342]7277 Casting integers to vector types causes ICE ! * [343]7939 (c++) ICE on invalid function template specialization ! * [344]11063 (c++) ICE on parsing initialization list of const array member ! * [345]11207 ICE with negative index in array element designator ! * [346]11522 (fortran) g77 dwarf-2 ICE in add_abstract_origin_attribute ! * [347]11595 (c++) ICE on duplicate label definition ! * [348]11646 (c++) ICE in commit_one_edge_insertion with -fnon-call-exceptions -fgcse -O ! * [349]11665 ICE in struct initializer when taking address ! * [350]11852 (c++) ICE with bad struct initializer. ! * [351]11878 (c++) ICE in cp_expr_size ! * [352]11883 ICE with any -O on mercury-generated C code ! * [353]11991 (c++) ICE in cxx_incomplete_type_diagnostic, in ! cp/typeck2.c when applying typeid operator to template template parameter ! * [354]12146 ICE in lookup_template_function, in cp/pt.c ! * [355]12215 ICE in make_label_edge with -fnon-call-exceptions -fno-gcse -O2 ! * [356]12369 (c++) ICE with templates and friends ! * [357]12446 ICE in emit_move_insn on complicated array reference ! * [358]12510 ICE in final_scan_insn ! * [359]12544 ICE with large parameters used in nested functions C and optimization bugs ! * [360]9862 spurious warnings with -W -finline-functions ! * [361]10962 lookup_field is a linear search on a linked list (can be slow if large struct) ! * [362]11370 -Wunreachable-code gives false complaints ! * [363]11637 invalid assembly with -fnon-call-exceptions ! * [364]11885 Problem with bitfields in packed structs ! * [365]12082 Inappropriate unreachable code warnings ! * [366]12180 Inline optimization fails for variadic function ! * [367]12340 loop unroller + gcse produces wrong code C++ compiler and library ! * [368]3907 nested template parameter collides with member name ! * [369]5293 confusing message when binding a temporary to a reference ! * [370]5296 [DR115] Pointers to functions and to template functions behave differently in deduction ! * [371]7939 ICE on function template specialization ! * [372]8656 Unable to assign function with __attribute__ and pointer return type to an appropriate variable ! * [373]10147 Confusing error message for invalid template function argument ! * [374]11400 std::search_n() makes assumptions about Size parameter ! * [375]11409 issues with using declarations, overloading, and built-in functions ! * [376]11740 ctype::do_is(mask, wchar_t) doesn't handle multiple bits in mask ! * [377]11786 operator() call on variable in other namespace not recognized ! * [378]11867 static_cast ignores ambiguity ! * [379]11928 bug with conversion operators that are typedefs ! * [380]12114 Uninitialized memory accessed in dtor ! * [381]12163 static_cast + explicit constructor regression ! * [382]12181 Wrong code with comma operator and c++ ! * [383]12236 regparm and fastcall messes up parameters ! * [384]12266 incorrect instantiation of unneeded template during overload resolution ! * [385]12296 istream::peek() doesn't set eofbit ! * [386]12298 [sjlj exceptions] Stack unwind destroys ! not-yet-constructed object ! * [387]12369 ICE with templates and friends ! * [388]12337 apparently infinite loop in g++ ! * [389]12344 stdcall attribute ignored if function returns a pointer ! * [390]12451 missing(late) class forward declaration in cxxabi.h ! * [391]12486 g++ accepts invalid use of a qualified name x86 specific (Intel/AMD) ! * [392]8869 [x86 MMX] ICE with const variable optimization and MMX builtins ! * [393]9786 ICE in fixup_abnormal_edges with -fnon-call-exceptions -O2 ! * [394]11689 g++3.3 emits un-assembleable code for k6 architecture ! * [395]12116 [k6] Invalid assembly output values with X-MAME code ! * [396]12070 ICE converting between double and long double with -msoft-float ia64-specific ! * [397]11184 [ia64 hpux] ICE on __builtin_apply building libobjc ! * [398]11535 __builtin_return_address may not work on ia64 ! * [399]11693 [ia64] ICE in gen_nop_type ! * [400]12224 [ia64] Thread-local storage doesn't work PowerPC-specific ! * [401]11087 [powerpc64-linux] GCC miscompiles raid1.c from linux kernel ! * [402]11319 loop miscompiled on ppc32 ! * [403]11949 ICE Compiler segfault with ffmpeg -maltivec code SPARC-specific ! * [404]11662 wrong code for expr. with cast to long long and exclusive or ! * [405]11965 invalid assembler code for a shift < 32 operation ! * [406]12301 (c++) stack corruption when a returned expression throws an exception Alpha-specific ! * [407]11717 [alpha-linux] unrecognizable insn compiling for.c of kernel 2.4.22-pre8 HPUX-specific ! * [408]11313 problem with #pragma weak and static inline functions ! * [409]11712 __STDC_EXT__ not defined for C++ by default anymore? Solaris specific ! * [410]12166 Profiled programs crash if PROFDIR is set Solaris-x86 specific ! * [411]12101 i386 Solaris no longer works with GNU as? Miscellaneous embedded target-specific bugs ! * [412]10988 [m32r-elf] wrong blockmove code with -O3 ! * [413]11805 [h8300-unknown-coff] [H8300] ICE for simple code with -O2 ! * [414]11902 [sh4] spec file improperly inserts rpath even when none needed ! * [415]11903 [sh4] -pthread fails to link due to error in spec file on sh4 _________________________________________________________________ ! GCC 3.3.3 ! Bug Fixes ! ! This section lists the problem reports (PRs) from [416]GCC's bug ! tracking system that are known to be fixed in the 3.3.3 release. This ! list might not be complete (that is, it is possible that some PRs that ! have been fixed are not listed here). + Bootstrap failures and issues ! * [417]11890 Building cross gcc-3.3.1 for sparc-sun-solaris2.6 fails ! * [418]12399 boehm-gc fails (when building a cross compiler): ! libtool unable to infer tagged configuration ! * [419]13068 mklibgcc.in doesn't handle multi-level multilib ! subdirectories properly ! Internal compiler errors (multi-platform) ! ! * [420]10060 ICE (stack overflow) on huge file (300k lines) due to ! recursive behaviour of copy_rtx_if_shared, in emit_rtl.c ! * [421]10555 (c++) ICE on undefined template argument ! * [422]10706 (c++) ICE in mangle_class_name_for_template ! * [423]11496 (fortran) error in flow_loops_find when -funroll-loops ! active ! * [424]11741 ICE in pre_insert_copy_insn, in gcse.c ! * [425]12440 GCC crashes during compilation of quicktime4linux 2.0.0 ! * [426]12632 (fortran) -fbounds-check ICE ! * [427]12712 (c++) ICE on short legit C++ code fragment with gcc ! 3.3.2 ! * [428]12726 (c++) ICE (segfault) on trivial code ! * [429]12890 (c++) ICE on compilation of class with throwing method ! * [430]12900 (c++) ICE in rtl_verify_flow_info_1 ! * [431]13060 (fortran) ICE in fixup_var_refs_1, in function.c on ! correct code with -O2 -fno-force-mem ! * [432]13289 (c++) ICE in regenerate_decl_from_template on recursive ! template ! * [433]13318 ICE: floating point exception in the loop optimizer ! * [434]13392 (c++) ICE in convert_from_eh_region_ranges_1, in ! except.c ! * [435]13574 (c++) invalid array default initializer in class lets ! gcc consume all memory and die ! * [436]13475 ICE on SIMD variables with partial value initialization ! * [437]13797 (c++) ICE on invalid template parameter ! * [438]13824 (java) gcj SEGV with simple .java program ! ! C and optimization bugs ! ! * [439]8776 loop invariants are not removed (most likely) ! * [440]10339 [sparc,ppc,ppc64] Invalid optimization: replacing ! strncmp by memcmp ! * [441]11350 undefined labels with -Os -fPIC ! * [442]12826 Optimizer removes reference through volatile pointer ! * [443]12500 stabs debug info: void no longer a predefined / builtin ! type ! * [444]12941 builtin-bitops-1.c miscompilation (latent bug) ! * [445]12953 tree inliner bug (in inline_forbidden_p) and fix ! * [446]13041 linux-2.6/sound/core/oss/rate.c miscompiled ! * [447]13507 spurious printf format warning ! * [448]13382 Type information for const pointer disappears during ! optimization. ! * [449]13394 noreturn attribute ignored on recursive invokation ! * [450]13400 Compiled code crashes storing to read-only location ! * [451]13521 Endless loop in calculate_global_regs_live ! ! C++ compiler and library ! ! Some of the bug fixes in this list were made to implement decisions ! that the ISO C++ standards committee has made concerning several ! defect reports (DRs). Links in the list below point to detailed ! discussion of the relevant defect report. ! * [452]2094 unimplemented: use of `ptrmem_cst' in template type ! unification ! * [453]2294 using declaration confusion ! * [454]5050 template instantiation depth exceeds limit: recursion ! problem? ! * [455]9371 Bad exception handling in ! i/ostream::operator>>/<<(streambuf*) ! * [456]9546 bad exception handling in ostream members ! * [457]10081 basic_ios::_M_cache_locale leaves NULL members in the ! face of unknown locales ! * [458]10093 [459][DR 61] Setting failbit in exceptions doesn't work ! * [460]10095 istream::operator>>(int&) sets ios::badbit when ! ios::failbit is set. ! * [461]11554 Warning about reordering of initializers doesn't ! mention location of constructor ! * [462]12297 istream::sentry::sentry() handles eof() incorrectly. ! * [463]12352 Exception safety problems in src/localename.cc ! * [464]12438 Memory leak in locale::combine() ! * [465]12540 Memory leak in locale::locale(const char*) ! * [466]12594 DRs [467]60 [TC] and [468]63 [TC] not implemented ! * [469]12657 Resolution of [470]DR 292 (WP) still unimplemented ! * [471]12696 memory eating infinite loop in diagnostics (error ! recovery problem) ! * [472]12815 Code compiled with optimization behaves unexpectedly ! * [473]12862 Conflicts between typedefs/enums and namespace member ! declarations ! * [474]12926 Wrong value after assignment in initialize list using ! bit-fields ! * [475]12967 Resolution of [476]DR 300 [WP] still unimplemented ! * [477]12971 Resolution of [478]DR 328 [WP] still unimplemented ! * [479]13007 basic_streambuf::pubimbue, imbue wrong ! * [480]13009 Implicitly-defined assignment operator writes to wrong ! memory ! * [481]13057 regparm attribute not applied to destructor ! * [482]13070 -Wformat option ignored in g++ ! * [483]13081 forward template declarations in let inlining ! fail ! * [484]13239 Assertion does not seem to work correctly anymore ! * [485]13262 "xxx is private within this context" when initializing ! a self-contained template class ! * [486]13290 simple typo in concept checking for std::generate_n ! * [487]13323 Template code does not compile in presence of typedef ! * [488]13369 __verify_grouping (and __add_grouping?) not correct ! * [489]13371 infinite loop with packed struct and inlining ! * [490]13445 Template argument replacement "dereferences" a typedef ! * [491]13461 Fails to access protected-ctor from public constant ! * [492]13462 Non-standard-conforming type set::pointer ! * [493]13478 gcc uses wrong constructor to initialize a const ! reference ! * [494]13544 "conflicting types" for enums in different scopes ! * [495]13650 string::compare should not (always) use ! traits_type::length() ! * [496]13683 bogus warning about passing non-PODs through ellipsis ! * [497]13688 Derived class is denied access to protected base class ! member class ! * [498]13774 Member variable cleared in virtual multiple inheritance ! class ! * [499]13884 Protect sstream.tcc from extern template use ! ! Java compiler and library ! ! * [500]10746 [win32] garbage collection crash in GCJ ! ! Objective-C compiler and library ! ! * [501]11433 Crash due to dereferencing null pointer when querying ! protocol ! ! Fortran compiler and library ! ! * [502]12633 logical expression gives incorrect result with ! -fugly-logint option ! * [503]13037 [gcse-lm] g77 generates incorrect code ! * [504]13213 Hex constant problem when compiling with -fugly-logint ! and -ftypeless-boz ! ! x86-specific (Intel/AMD) ! ! * [505]4490 ICE with -m128bit-long-double ! * [506]12292 [x86_64] ICE: RTL check: expected code `const_int', ! have `reg' in make_field_assignment, in combine.c ! * [507]12441 ICE: can't find a register to spill ! * [508]12943 array static-init failure under -fpic, -fPIC ! * [509]13608 Incorrect code with -O3 -ffast-math ! ! PowerPC-specific ! ! * [510]11598 testcase gcc.dg/20020118-1.c fails runtime check of ! __attribute__((aligned(16))) ! * [511]11793 ICE in extract_insn, in recog.c (const_vector's) ! * [512]12467 vmsumubm emitted when vmsummbm appropriate (typo in ! altivec.md) ! * [513]12537 g++ generates writeable text sections ! ! SPARC-specific ! ! * [514]12496 wrong result for __atomic_add(&value, -1) when using ! -O0 -m64 ! * [515]12865 mprotect call to make trampoline executable may fail ! * [516]13354 ICE in sparc_emit_set_const32 ! ! ARM-specific ! ! * [517]10467 [arm] ICE in pre_insert_copy_insn, ! ! ia64-specific ! ! * [518]11226 ICE passing struct arg with two floats ! * [519]11227 ICE for _Complex float, _Complex long double args ! * [520]12644 GCC 3.3.2 fails to compile glibc on ia64 ! * [521]13149 build gcc-3.3.2 1305 error:unrecognizable insn ! ! Alpha-specific ! ! * [522]12654 Incorrect comparison code generated for Alpha ! * [523]12965 SEGV+ICE in cc1plus on alpha-linux with -O2 ! * [524]13031 ICE (unrecognizable insn) when building ! gnome-libs-1.4.2 ! ! HPPA-specific ! ! * [525]11634 [hppa] ICE in verify_local_live_at_start, in flow.c ! * [526]12158 [hppa] compilation does not terminate at -O1 ! ! S390-specific ! ! * [527]11992 Wrong built-in code for memcmp with length 1<<24: only ! (1<<24)-1 possible for CLCL-Instruction ! ! SH-specific ! ! * [528]9365 segfault in gen_far_branch (config/sh/sh.c) ! * [529]10392 optimizer generates faulty array indexing ! * [530]11322 SH profiler outputs multiple definitions of symbol ! * [531]13069 gcc/config/sh/rtems.h broken ! * [532]13302 Putting a va_list in a struct causes seg fault ! * [533]13585 Incorrect optimization of call to sfunc ! ! Other embedded target specific ! ! * [534]8916 [mcore] unsigned char assign gets hosed. ! * [535]11576 [h8300] ICE in change_address_1, in emit-rtl.c ! * [536]13122 [h8300] local variable gets corrupted by function call ! when -fomit-frame-pointer is given ! * [537]13256 [cris] strict_low_part mistreated in delay slots ! * [538]13373 [mcore] optimization with -frerun-cse-after-loop ! -fexpensive-optimizations produces wrong code on mcore ! ! GNU HURD-specific ! ! * [539]12561 gcc/config/t-gnu needs updating to work with ! --with-sysroot ! ! Tru64 Unix specific ! ! * [540]6243 testsuite fails almost all tests due to no libintl in ! LD_LIBRARY_PATH during test. ! * [541]11397 weak aliases broken on Tru64 UNIX ! ! AIX-specific ! ! * [542]12505 build failure due to defines of uchar in cpphash.h and ! sys/types.h ! * [543]13150 WEAK symbols not exported by collect2 ! ! IRIX-specific ! ! * [544]12666 fixincludes problem on IRIX 6.5.19m ! ! Solaris-specific ! ! * [545]12969 Including sys/byteorder.h breaks configure checks ! ! Testsuite problems (compiler is not affected) ! ! * [546]10819 testsuite creates CR+LF on compiler version lines in ! test summary files ! * [547]11612 abi_check not finding correct libgcc_s.so.1 ! ! Miscellaneous ! ! * [548]13211 using -###, incorrect warnings about unused linker file ! are produced ! _________________________________________________________________ ! ! Please send FSF & GNU inquiries & questions to [549]gnu@gnu.org. There ! are also [550]other ways to contact the FSF. ! ! These pages are maintained by [551]the GCC team. ! ! ! For questions related to the use of GCC, please consult these web ! pages and the [552]GCC manuals. If that fails, the ! [553]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [554]gcc@gnu.org or ! [555]gcc@gcc.gnu.org. ! ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2004-02-04 [556]Valid XHTML 1.0 References *************** References *** 1286,1597 **** 110. http://gcc.gnu.org/PR9439 111. http://gcc.gnu.org/PR9474 112. http://gcc.gnu.org/PR9548 ! 113. http://gcc.gnu.org/PR9555 ! 114. http://gcc.gnu.org/PR9561 ! 115. http://gcc.gnu.org/PR9563 ! 116. http://gcc.gnu.org/PR9582 ! 117. http://gcc.gnu.org/PR9622 ! 118. http://gcc.gnu.org/PR9683 ! 119. http://gcc.gnu.org/PR9791 ! 120. http://gcc.gnu.org/PR9817 ! 121. http://gcc.gnu.org/PR9825 ! 122. http://gcc.gnu.org/PR9826 ! 123. http://gcc.gnu.org/PR9924 ! 124. http://gcc.gnu.org/PR9946 ! 125. http://gcc.gnu.org/PR9964 ! 126. http://gcc.gnu.org/PR9988 ! 127. http://gcc.gnu.org/PR10033 ! 128. http://gcc.gnu.org/PR10097 ! 129. http://gcc.gnu.org/PR10132 ! 130. http://gcc.gnu.org/PR10180 ! 131. http://gcc.gnu.org/PR10199 ! 132. http://gcc.gnu.org/PR10300 ! 133. http://gcc.gnu.org/PR10427 ! 134. http://gcc.gnu.org/PR10503 ! 135. http://gcc.gnu.org/PR5956 ! 136. http://gcc.gnu.org/PR1832 ! 137. http://gcc.gnu.org/PR3924 ! 138. http://gcc.gnu.org/PR5634 ! 139. http://gcc.gnu.org/PR6367 ! 140. http://gcc.gnu.org/PR6491 ! 141. http://gcc.gnu.org/PR6742 ! 142. http://gcc.gnu.org/PR7113 ! 143. http://gcc.gnu.org/PR7236 ! 144. http://gcc.gnu.org/PR7278 ! 145. http://gcc.gnu.org/PR7384 ! 146. http://gcc.gnu.org/PR7388 ! 147. http://gcc.gnu.org/PR8587 ! 148. http://gcc.gnu.org/PR9038 ! 149. http://gcc.gnu.org/PR10197 ! 150. http://gcc.gnu.org/PR6005 ! 151. http://gcc.gnu.org/PR6389 ! 152. http://gcc.gnu.org/PR6576 ! 153. http://gcc.gnu.org/PR6652 ! 154. http://gcc.gnu.org/PR7060 ! 155. http://gcc.gnu.org/PR7073 ! 156. http://gcc.gnu.org/PR7180 ! 157. http://gcc.gnu.org/PR7416 ! 158. http://gcc.gnu.org/PR7570 ! 159. http://gcc.gnu.org/PR7578 ! 160. http://gcc.gnu.org/PR7611 ! 161. http://gcc.gnu.org/PR7709 ! 162. http://gcc.gnu.org/PR7766 ! 163. http://gcc.gnu.org/PR7785 ! 164. http://gcc.gnu.org/PR7786 ! 165. http://gcc.gnu.org/PR8142 ! 166. http://gcc.gnu.org/PR8234 ! 167. http://gcc.gnu.org/PR8415 ! 168. http://gcc.gnu.org/PR8481 ! 169. http://gcc.gnu.org/PR8593 ! 170. http://gcc.gnu.org/PR8759 ! 171. http://gcc.gnu.org/PR8997 ! 172. http://gcc.gnu.org/PR9253 ! 173. http://gcc.gnu.org/PR9254 ! 174. http://gcc.gnu.org/PR9271 ! 175. http://gcc.gnu.org/PR6767 ! 176. http://gcc.gnu.org/PR9911 ! 177. http://gcc.gnu.org/PR10020 ! 178. http://gcc.gnu.org/PR10546 ! 179. http://gcc.gnu.org/PR7029 ! 180. http://gcc.gnu.org/PR2903 ! 181. http://gcc.gnu.org/PR7873 ! 182. http://gcc.gnu.org/PR7680 ! 183. http://gcc.gnu.org/PR8705 ! 184. http://gcc.gnu.org/PR9986 ! 185. http://gcc.gnu.org/PR10056 ! 186. http://gcc.gnu.org/PR6744 ! 187. http://gcc.gnu.org/PR7361 ! 188. http://gcc.gnu.org/PR9496 ! 189. http://gcc.gnu.org/PR7067 ! 190. http://gcc.gnu.org/PR8480 ! 191. http://gcc.gnu.org/PR8784 ! 192. http://gcc.gnu.org/PR10315 ! 193. http://gcc.gnu.org/PR10267 ! 194. http://gcc.gnu.org/PR7916 ! 195. http://gcc.gnu.org/PR7926 ! 196. http://gcc.gnu.org/PR8555 ! 197. http://gcc.gnu.org/PR8994 ! 198. http://gcc.gnu.org/PR9426 ! 199. http://gcc.gnu.org/PR9806 ! 200. http://gcc.gnu.org/PR10077 ! 201. http://gcc.gnu.org/PR10233 ! 202. http://gcc.gnu.org/PR10286 ! 203. http://gcc.gnu.org/PR10308 ! 204. http://gcc.gnu.org/PR11272 ! 205. http://gcc.gnu.org/PR5754 ! 206. http://gcc.gnu.org/PR6597 ! 207. http://gcc.gnu.org/PR6949 ! 208. http://gcc.gnu.org/PR7053 ! 209. http://gcc.gnu.org/PR8164 ! 210. http://gcc.gnu.org/PR8384 ! 211. http://gcc.gnu.org/PR9559 ! 212. http://gcc.gnu.org/PR9649 ! 213. http://gcc.gnu.org/PR9864 ! 214. http://gcc.gnu.org/PR10432 ! 215. http://gcc.gnu.org/PR10475 ! 216. http://gcc.gnu.org/PR10635 ! 217. http://gcc.gnu.org/PR10661 ! 218. http://gcc.gnu.org/PR10700 ! 219. http://gcc.gnu.org/PR10712 ! 220. http://gcc.gnu.org/PR10796 ! 221. http://gcc.gnu.org/PR10890 ! 222. http://gcc.gnu.org/PR10939 ! 223. http://gcc.gnu.org/PR10956 ! 224. http://gcc.gnu.org/PR11041 ! 225. http://gcc.gnu.org/PR11059 ! 226. http://gcc.gnu.org/PR11083 ! 227. http://gcc.gnu.org/PR11105 ! 228. http://gcc.gnu.org/PR11149 ! 229. http://gcc.gnu.org/PR11228 ! 230. http://gcc.gnu.org/PR11282 ! 231. http://gcc.gnu.org/PR11301 ! 232. http://gcc.gnu.org/PR11308 ! 233. http://gcc.gnu.org/PR11473 ! 234. http://gcc.gnu.org/PR11503 ! 235. http://gcc.gnu.org/PR11513 ! 236. http://gcc.gnu.org/PR11198 ! 237. http://gcc.gnu.org/PR11304 ! 238. http://gcc.gnu.org/PR11381 ! 239. http://gcc.gnu.org/PR11536 ! 240. http://gcc.gnu.org/PR11557 ! 241. http://gcc.gnu.org/PR5897 ! 242. http://gcc.gnu.org/PR11279 ! 243. http://gcc.gnu.org/PR11022 ! 244. http://gcc.gnu.org/PR2330 ! 245. http://gcc.gnu.org/PR5388 ! 246. http://gcc.gnu.org/PR5390 ! 247. http://gcc.gnu.org/PR7877 ! 248. http://gcc.gnu.org/PR9393 ! 249. http://gcc.gnu.org/PR10032 ! 250. http://gcc.gnu.org/PR10468 ! 251. http://gcc.gnu.org/PR10527 ! 252. http://gcc.gnu.org/PR10679 ! 253. http://gcc.gnu.org/PR10682 ! 254. http://gcc.gnu.org/PR10689 ! 255. http://gcc.gnu.org/PR10845 ! 256. http://gcc.gnu.org/PR10849 ! 257. http://gcc.gnu.org/PR10888 ! 258. http://gcc.gnu.org/PR10929 ! 259. http://gcc.gnu.org/PR10931 ! 260. http://gcc.gnu.org/PR10940 ! 261. http://gcc.gnu.org/PR10968 ! 262. http://gcc.gnu.org/PR10990 ! 263. http://gcc.gnu.org/PR11039 ! 264. http://gcc.gnu.org/PR11062 ! 265. http://gcc.gnu.org/PR11095 ! 266. http://gcc.gnu.org/PR11098 ! 267. http://gcc.gnu.org/PR11137 ! 268. http://gcc.gnu.org/PR11154 ! 269. http://gcc.gnu.org/PR11329 ! 270. http://gcc.gnu.org/PR11332 ! 271. http://gcc.gnu.org/PR11431 ! 272. http://gcc.gnu.org/PR11528 ! 273. http://gcc.gnu.org/PR11546 ! 274. http://gcc.gnu.org/PR11567 ! 275. http://gcc.gnu.org/PR11645 ! 276. http://gcc.gnu.org/PR5179 ! 277. http://gcc.gnu.org/PR8204 ! 278. http://gcc.gnu.org/PR10838 ! 279. http://gcc.gnu.org/PR10886 ! 280. http://gcc.gnu.org/PR11349 ! 281. http://gcc.gnu.org/PR4823 ! 282. http://gcc.gnu.org/PR8878 ! 283. http://gcc.gnu.org/PR9815 ! 284. http://gcc.gnu.org/PR10402 ! 285. http://gcc.gnu.org/PR10504 ! 286. http://gcc.gnu.org/PR10673 ! 287. http://gcc.gnu.org/PR11044 ! 288. http://gcc.gnu.org/PR11089 ! 289. http://gcc.gnu.org/PR11420 ! 290. http://gcc.gnu.org/PR9362 ! 291. http://gcc.gnu.org/PR10142 ! 292. http://gcc.gnu.org/PR10663 ! 293. http://gcc.gnu.org/PR10835 ! 294. http://gcc.gnu.org/PR10876 ! 295. http://gcc.gnu.org/PR10955 ! 296. http://gcc.gnu.org/PR11018 ! 297. http://gcc.gnu.org/PR11556 ! 298. http://gcc.gnu.org/PR10907 ! 299. http://gcc.gnu.org/PR11320 ! 300. http://gcc.gnu.org/PR11599 ! 301. http://gcc.gnu.org/PR9745 ! 302. http://gcc.gnu.org/PR10871 ! 303. http://gcc.gnu.org/PR11440 ! 304. http://gcc.gnu.org/PR7594 ! 305. http://gcc.gnu.org/PR10557 ! 306. http://gcc.gnu.org/PR11054 ! 307. http://gcc.gnu.org/PR10834 ! 308. http://gcc.gnu.org/PR10842 ! 309. http://gcc.gnu.org/PR11052 ! 310. http://gcc.gnu.org/PR11183 ! 311. http://gcc.gnu.org/PR11084 ! 312. http://gcc.gnu.org/PR10331 ! 313. http://gcc.gnu.org/PR10413 ! 314. http://gcc.gnu.org/PR11096 ! 315. http://gcc.gnu.org/PR2873 ! 316. http://gcc.gnu.org/PR3163 ! 317. http://gcc.gnu.org/PR5287 ! 318. http://gcc.gnu.org/PR10148 ! 319. http://gcc.gnu.org/PR8787 ! 320. http://gcc.gnu.org/PR1607 ! 321. http://gcc.gnu.org/PR4252 ! 322. http://gcc.gnu.org/PR4490 ! 323. http://gcc.gnu.org/PR10355 ! 324. http://gcc.gnu.org/PR10726 ! 325. http://gcc.gnu.org/PR10805 ! 326. http://gcc.gnu.org/PR10815 ! 327. http://gcc.gnu.org/PR10877 ! 328. http://gcc.gnu.org/PR11280 ! 329. http://gcc.gnu.org/PR11466 ! 330. http://gcc.gnu.org/PR10737 ! 331. http://gcc.gnu.org/PR10810 ! 332. http://gcc.gnu.org/bugzilla/ ! 333. http://gcc.gnu.org/PR8336 ! 334. http://gcc.gnu.org/PR9330 ! 335. http://gcc.gnu.org/PR9631 ! 336. http://gcc.gnu.org/PR9877 ! 337. http://gcc.gnu.org/PR11687 ! 338. http://gcc.gnu.org/PR12263 ! 339. http://gcc.gnu.org/PR12490 ! 340. http://gcc.gnu.org/PR7277 ! 341. http://gcc.gnu.org/PR11063 ! 342. http://gcc.gnu.org/PR11207 ! 343. http://gcc.gnu.org/PR11522 ! 344. http://gcc.gnu.org/PR11595 ! 345. http://gcc.gnu.org/PR11646 ! 346. http://gcc.gnu.org/PR11665 ! 347. http://gcc.gnu.org/PR11852 ! 348. http://gcc.gnu.org/PR11878 ! 349. http://gcc.gnu.org/PR11883 ! 350. http://gcc.gnu.org/PR11991 ! 351. http://gcc.gnu.org/PR12146 ! 352. http://gcc.gnu.org/PR12215 ! 353. http://gcc.gnu.org/PR12446 ! 354. http://gcc.gnu.org/PR12510 ! 355. http://gcc.gnu.org/PR12544 ! 356. http://gcc.gnu.org/PR9862 ! 357. http://gcc.gnu.org/PR10962 ! 358. http://gcc.gnu.org/PR11370 ! 359. http://gcc.gnu.org/PR11637 ! 360. http://gcc.gnu.org/PR11885 ! 361. http://gcc.gnu.org/PR12082 ! 362. http://gcc.gnu.org/PR12180 ! 363. http://gcc.gnu.org/PR12340 ! 364. http://gcc.gnu.org/PR3907 ! 365. http://gcc.gnu.org/PR5293 ! 366. http://gcc.gnu.org/PR5296 ! 367. http://gcc.gno.org/PR7939 ! 368. http://gcc.gnu.org/PR8656 ! 369. http://gcc.gnu.org/PR10147 ! 370. http://gcc.gnu.org/PR11400 ! 371. http://gcc.gnu.org/PR11409 ! 372. http://gcc.gnu.org/PR11740 ! 373. http://gcc.gnu.org/PR11786 ! 374. http://gcc.gnu.org/PR11867 ! 375. http://gcc.gnu.org/PR11928 ! 376. http://gcc.gnu.org/PR12163 ! 377. http://gcc.gnu.org/PR12181 ! 378. http://gcc.gnu.org/PR12236 ! 379. http://gcc.gnu.org/PR12266 ! 380. http://gcc.gnu.org/PR12296 ! 381. http://gcc.gnu.org/PR12369 ! 382. http://gcc.gnu.org/PR12337 ! 383. http://gcc.gnu.org/PR12344 ! 384. http://gcc.gnu.org/PR12451 ! 385. http://gcc.gnu.org/PR12486 ! 386. http://gcc.gnu.org/PR8869 ! 387. http://gcc.gnu.org/PR9786 ! 388. http://gcc.gnu.org/PR11689 ! 389. http://gcc.gnu.org/PR12116 ! 390. http://gcc.gnu.org/PR12070 ! 391. http://gcc.gnu.org/PR11184 ! 392. http://gcc.gnu.org/PR11535 ! 393. http://gcc.gnu.org/PR11693 ! 394. http://gcc.gnu.org/PR12224 ! 395. http://gcc.gnu.org/PR11087 ! 396. http://gcc.gnu.org/PR11319 ! 397. http://gcc.gnu.org/PR11949 ! 398. http://gcc.gnu.org/PR11662 ! 399. http://gcc.gnu.org/PR11965 ! 400. http://gcc.gnu.org/PR12301 ! 401. http://gcc.gnu.org/PR11717 ! 402. http://gcc.gnu.org/PR10900 ! 403. http://gcc.gnu.org/PR11313 ! 404. http://gcc.gnu.org/PR11712 ! 405. http://gcc.gnu.org/PR12166 ! 406. http://gcc.gnu.org/PR12101 ! 407. http://gcc.gnu.org/PR10988 ! 408. http://gcc.gnu.org/PR11805 ! 409. http://gcc.gnu.org/PR11902 ! 410. http://gcc.gnu.org/PR11903 ! 411. mailto:gnu@gnu.org ! 412. http://www.gnu.org/home.html#ContactInfo ! 413. http://gcc.gnu.org/about.html ! 414. http://gcc.gnu.org/onlinedocs/ ! 415. mailto:gcc-help@gcc.gnu.org ! 416. mailto:gcc@gnu.org ! 417. mailto:gcc@gcc.gnu.org ! 418. http://validator.w3.org/check/referer ====================================================================== http://gcc.gnu.org/gcc-3.2/index.html --- 1541,1990 ---- 110. http://gcc.gnu.org/PR9439 111. http://gcc.gnu.org/PR9474 112. http://gcc.gnu.org/PR9548 ! 113. http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/cwg_defects.html#231 ! 114. http://gcc.gnu.org/PR9555 ! 115. http://gcc.gnu.org/PR9561 ! 116. http://gcc.gnu.org/PR9563 ! 117. http://gcc.gnu.org/PR9582 ! 118. http://gcc.gnu.org/PR9622 ! 119. http://gcc.gnu.org/PR9683 ! 120. http://gcc.gnu.org/PR9791 ! 121. http://gcc.gnu.org/PR9817 ! 122. http://gcc.gnu.org/PR9825 ! 123. http://gcc.gnu.org/PR9826 ! 124. http://gcc.gnu.org/PR9924 ! 125. http://gcc.gnu.org/PR9946 ! 126. http://gcc.gnu.org/PR9964 ! 127. http://gcc.gnu.org/PR9988 ! 128. http://gcc.gnu.org/PR10033 ! 129. http://gcc.gnu.org/PR10097 ! 130. http://gcc.gnu.org/PR10132 ! 131. http://gcc.gnu.org/PR10180 ! 132. http://gcc.gnu.org/PR10199 ! 133. http://gcc.gnu.org/PR10300 ! 134. http://gcc.gnu.org/PR10427 ! 135. http://gcc.gnu.org/PR10503 ! 136. http://gcc.gnu.org/PR5956 ! 137. http://gcc.gnu.org/PR1832 ! 138. http://gcc.gnu.org/PR3924 ! 139. http://gcc.gnu.org/PR5634 ! 140. http://gcc.gnu.org/PR6367 ! 141. http://gcc.gnu.org/PR6491 ! 142. http://gcc.gnu.org/PR6742 ! 143. http://gcc.gnu.org/PR7113 ! 144. http://gcc.gnu.org/PR7236 ! 145. http://gcc.gnu.org/PR7278 ! 146. http://gcc.gnu.org/PR7384 ! 147. http://gcc.gnu.org/PR7388 ! 148. http://gcc.gnu.org/PR8587 ! 149. http://gcc.gnu.org/PR9038 ! 150. http://gcc.gnu.org/PR10197 ! 151. http://gcc.gnu.org/PR6005 ! 152. http://gcc.gnu.org/PR6389 ! 153. http://gcc.gnu.org/PR6576 ! 154. http://gcc.gnu.org/PR6652 ! 155. http://gcc.gnu.org/PR7060 ! 156. http://gcc.gnu.org/PR7073 ! 157. http://gcc.gnu.org/PR7180 ! 158. http://gcc.gnu.org/PR7416 ! 159. http://gcc.gnu.org/PR7570 ! 160. http://gcc.gnu.org/PR7578 ! 161. http://gcc.gnu.org/PR7611 ! 162. http://gcc.gnu.org/PR7709 ! 163. http://gcc.gnu.org/PR7766 ! 164. http://gcc.gnu.org/PR7785 ! 165. http://gcc.gnu.org/PR7786 ! 166. http://gcc.gnu.org/PR8142 ! 167. http://gcc.gnu.org/PR8234 ! 168. http://gcc.gnu.org/PR8415 ! 169. http://gcc.gnu.org/PR8481 ! 170. http://gcc.gnu.org/PR8593 ! 171. http://gcc.gnu.org/PR8759 ! 172. http://gcc.gnu.org/PR8997 ! 173. http://gcc.gnu.org/PR9253 ! 174. http://gcc.gnu.org/PR9254 ! 175. http://gcc.gnu.org/PR9271 ! 176. http://gcc.gnu.org/PR6767 ! 177. http://gcc.gnu.org/PR9911 ! 178. http://gcc.gnu.org/PR10020 ! 179. http://gcc.gnu.org/PR10546 ! 180. http://gcc.gnu.org/PR7029 ! 181. http://gcc.gnu.org/PR2903 ! 182. http://gcc.gnu.org/PR7873 ! 183. http://gcc.gnu.org/PR7680 ! 184. http://gcc.gnu.org/PR8705 ! 185. http://gcc.gnu.org/PR9986 ! 186. http://gcc.gnu.org/PR10056 ! 187. http://gcc.gnu.org/PR6744 ! 188. http://gcc.gnu.org/PR7361 ! 189. http://gcc.gnu.org/PR9496 ! 190. http://gcc.gnu.org/PR7067 ! 191. http://gcc.gnu.org/PR8480 ! 192. http://gcc.gnu.org/PR8784 ! 193. http://gcc.gnu.org/PR10315 ! 194. http://gcc.gnu.org/PR10267 ! 195. http://gcc.gnu.org/PR7916 ! 196. http://gcc.gnu.org/PR7926 ! 197. http://gcc.gnu.org/PR8555 ! 198. http://gcc.gnu.org/PR8994 ! 199. http://gcc.gnu.org/PR9426 ! 200. http://gcc.gnu.org/PR9806 ! 201. http://gcc.gnu.org/PR10077 ! 202. http://gcc.gnu.org/PR10233 ! 203. http://gcc.gnu.org/PR10286 ! 204. http://gcc.gnu.org/PR10308 ! 205. http://gcc.gnu.org/PR11272 ! 206. http://gcc.gnu.org/PR5754 ! 207. http://gcc.gnu.org/PR6597 ! 208. http://gcc.gnu.org/PR6949 ! 209. http://gcc.gnu.org/PR7053 ! 210. http://gcc.gnu.org/PR8164 ! 211. http://gcc.gnu.org/PR8384 ! 212. http://gcc.gnu.org/PR9559 ! 213. http://gcc.gnu.org/PR9649 ! 214. http://gcc.gnu.org/PR9864 ! 215. http://gcc.gnu.org/PR10432 ! 216. http://gcc.gnu.org/PR10475 ! 217. http://gcc.gnu.org/PR10635 ! 218. http://gcc.gnu.org/PR10661 ! 219. http://gcc.gnu.org/PR10700 ! 220. http://gcc.gnu.org/PR10712 ! 221. http://gcc.gnu.org/PR10796 ! 222. http://gcc.gnu.org/PR10890 ! 223. http://gcc.gnu.org/PR10939 ! 224. http://gcc.gnu.org/PR10956 ! 225. http://gcc.gnu.org/PR11041 ! 226. http://gcc.gnu.org/PR11059 ! 227. http://gcc.gnu.org/PR11083 ! 228. http://gcc.gnu.org/PR11105 ! 229. http://gcc.gnu.org/PR11149 ! 230. http://gcc.gnu.org/PR11228 ! 231. http://gcc.gnu.org/PR11282 ! 232. http://gcc.gnu.org/PR11301 ! 233. http://gcc.gnu.org/PR11308 ! 234. http://gcc.gnu.org/PR11473 ! 235. http://gcc.gnu.org/PR11503 ! 236. http://gcc.gnu.org/PR11513 ! 237. http://gcc.gnu.org/PR11198 ! 238. http://gcc.gnu.org/PR11304 ! 239. http://gcc.gnu.org/PR11381 ! 240. http://gcc.gnu.org/PR11536 ! 241. http://gcc.gnu.org/PR11557 ! 242. http://gcc.gnu.org/PR5897 ! 243. http://gcc.gnu.org/PR11279 ! 244. http://gcc.gnu.org/PR11022 ! 245. http://gcc.gnu.org/PR2330 ! 246. http://gcc.gnu.org/PR5388 ! 247. http://gcc.gnu.org/PR5390 ! 248. http://gcc.gnu.org/PR7877 ! 249. http://gcc.gnu.org/PR9393 ! 250. http://gcc.gnu.org/PR10032 ! 251. http://gcc.gnu.org/PR10468 ! 252. http://gcc.gnu.org/PR10527 ! 253. http://gcc.gnu.org/PR10679 ! 254. http://gcc.gnu.org/PR10682 ! 255. http://gcc.gnu.org/PR10689 ! 256. http://gcc.gnu.org/PR10845 ! 257. http://gcc.gnu.org/PR10849 ! 258. http://gcc.gnu.org/PR10888 ! 259. http://gcc.gnu.org/PR10929 ! 260. http://gcc.gnu.org/PR10931 ! 261. http://gcc.gnu.org/PR10940 ! 262. http://gcc.gnu.org/PR10968 ! 263. http://gcc.gnu.org/PR10990 ! 264. http://gcc.gnu.org/PR11039 ! 265. http://gcc.gnu.org/PR11062 ! 266. http://gcc.gnu.org/PR11095 ! 267. http://gcc.gnu.org/PR11098 ! 268. http://gcc.gnu.org/PR11137 ! 269. http://gcc.gnu.org/PR11154 ! 270. http://gcc.gnu.org/PR11329 ! 271. http://gcc.gnu.org/PR11332 ! 272. http://gcc.gnu.org/PR11431 ! 273. http://gcc.gnu.org/PR11528 ! 274. http://gcc.gnu.org/PR11546 ! 275. http://gcc.gnu.org/PR11567 ! 276. http://gcc.gnu.org/PR11645 ! 277. http://gcc.gnu.org/PR5179 ! 278. http://gcc.gnu.org/PR8204 ! 279. http://gcc.gnu.org/PR10838 ! 280. http://gcc.gnu.org/PR10886 ! 281. http://gcc.gnu.org/PR11349 ! 282. http://gcc.gnu.org/PR4823 ! 283. http://gcc.gnu.org/PR8878 ! 284. http://gcc.gnu.org/PR9815 ! 285. http://gcc.gnu.org/PR10402 ! 286. http://gcc.gnu.org/PR10504 ! 287. http://gcc.gnu.org/PR10673 ! 288. http://gcc.gnu.org/PR11044 ! 289. http://gcc.gnu.org/PR11089 ! 290. http://gcc.gnu.org/PR11420 ! 291. http://gcc.gnu.org/PR9362 ! 292. http://gcc.gnu.org/PR10142 ! 293. http://gcc.gnu.org/PR10663 ! 294. http://gcc.gnu.org/PR10835 ! 295. http://gcc.gnu.org/PR10876 ! 296. http://gcc.gnu.org/PR10955 ! 297. http://gcc.gnu.org/PR11018 ! 298. http://gcc.gnu.org/PR11556 ! 299. http://gcc.gnu.org/PR10907 ! 300. http://gcc.gnu.org/PR11320 ! 301. http://gcc.gnu.org/PR11599 ! 302. http://gcc.gnu.org/PR9745 ! 303. http://gcc.gnu.org/PR10871 ! 304. http://gcc.gnu.org/PR11440 ! 305. http://gcc.gnu.org/PR7594 ! 306. http://gcc.gnu.org/PR10557 ! 307. http://gcc.gnu.org/PR11054 ! 308. http://gcc.gnu.org/PR10834 ! 309. http://gcc.gnu.org/PR10842 ! 310. http://gcc.gnu.org/PR11052 ! 311. http://gcc.gnu.org/PR11183 ! 312. http://gcc.gnu.org/PR11084 ! 313. http://gcc.gnu.org/PR10331 ! 314. http://gcc.gnu.org/PR10413 ! 315. http://gcc.gnu.org/PR11096 ! 316. http://gcc.gnu.org/PR2873 ! 317. http://gcc.gnu.org/PR3163 ! 318. http://gcc.gnu.org/PR5287 ! 319. http://gcc.gnu.org/PR10148 ! 320. http://gcc.gnu.org/PR8787 ! 321. http://gcc.gnu.org/PR10900 ! 322. http://gcc.gnu.org/PR1607 ! 323. http://gcc.gnu.org/PR4252 ! 324. http://gcc.gnu.org/PR4490 ! 325. http://gcc.gnu.org/PR10355 ! 326. http://gcc.gnu.org/PR10726 ! 327. http://gcc.gnu.org/PR10805 ! 328. http://gcc.gnu.org/PR10815 ! 329. http://gcc.gnu.org/PR10877 ! 330. http://gcc.gnu.org/PR11280 ! 331. http://gcc.gnu.org/PR11466 ! 332. http://gcc.gnu.org/PR10737 ! 333. http://gcc.gnu.org/PR10810 ! 334. http://gcc.gnu.org/bugzilla/ ! 335. http://gcc.gnu.org/PR8336 ! 336. http://gcc.gnu.org/PR9330 ! 337. http://gcc.gnu.org/PR9631 ! 338. http://gcc.gnu.org/PR9877 ! 339. http://gcc.gnu.org/PR11687 ! 340. http://gcc.gnu.org/PR12263 ! 341. http://gcc.gnu.org/PR12490 ! 342. http://gcc.gnu.org/PR7277 ! 343. http://gcc.gnu.org/PR7939 ! 344. http://gcc.gnu.org/PR11063 ! 345. http://gcc.gnu.org/PR11207 ! 346. http://gcc.gnu.org/PR11522 ! 347. http://gcc.gnu.org/PR11595 ! 348. http://gcc.gnu.org/PR11646 ! 349. http://gcc.gnu.org/PR11665 ! 350. http://gcc.gnu.org/PR11852 ! 351. http://gcc.gnu.org/PR11878 ! 352. http://gcc.gnu.org/PR11883 ! 353. http://gcc.gnu.org/PR11991 ! 354. http://gcc.gnu.org/PR12146 ! 355. http://gcc.gnu.org/PR12215 ! 356. http://gcc.gnu.org/PR12369 ! 357. http://gcc.gnu.org/PR12446 ! 358. http://gcc.gnu.org/PR12510 ! 359. http://gcc.gnu.org/PR12544 ! 360. http://gcc.gnu.org/PR9862 ! 361. http://gcc.gnu.org/PR10962 ! 362. http://gcc.gnu.org/PR11370 ! 363. http://gcc.gnu.org/PR11637 ! 364. http://gcc.gnu.org/PR11885 ! 365. http://gcc.gnu.org/PR12082 ! 366. http://gcc.gnu.org/PR12180 ! 367. http://gcc.gnu.org/PR12340 ! 368. http://gcc.gnu.org/PR3907 ! 369. http://gcc.gnu.org/PR5293 ! 370. http://gcc.gnu.org/PR5296 ! 371. http://gcc.gnu.org/PR7939 ! 372. http://gcc.gnu.org/PR8656 ! 373. http://gcc.gnu.org/PR10147 ! 374. http://gcc.gnu.org/PR11400 ! 375. http://gcc.gnu.org/PR11409 ! 376. http://gcc.gnu.org/PR11740 ! 377. http://gcc.gnu.org/PR11786 ! 378. http://gcc.gnu.org/PR11867 ! 379. http://gcc.gnu.org/PR11928 ! 380. http://gcc.gnu.org/PR12114 ! 381. http://gcc.gnu.org/PR12163 ! 382. http://gcc.gnu.org/PR12181 ! 383. http://gcc.gnu.org/PR12236 ! 384. http://gcc.gnu.org/PR12266 ! 385. http://gcc.gnu.org/PR12296 ! 386. http://gcc.gnu.org/PR12298 ! 387. http://gcc.gnu.org/PR12369 ! 388. http://gcc.gnu.org/PR12337 ! 389. http://gcc.gnu.org/PR12344 ! 390. http://gcc.gnu.org/PR12451 ! 391. http://gcc.gnu.org/PR12486 ! 392. http://gcc.gnu.org/PR8869 ! 393. http://gcc.gnu.org/PR9786 ! 394. http://gcc.gnu.org/PR11689 ! 395. http://gcc.gnu.org/PR12116 ! 396. http://gcc.gnu.org/PR12070 ! 397. http://gcc.gnu.org/PR11184 ! 398. http://gcc.gnu.org/PR11535 ! 399. http://gcc.gnu.org/PR11693 ! 400. http://gcc.gnu.org/PR12224 ! 401. http://gcc.gnu.org/PR11087 ! 402. http://gcc.gnu.org/PR11319 ! 403. http://gcc.gnu.org/PR11949 ! 404. http://gcc.gnu.org/PR11662 ! 405. http://gcc.gnu.org/PR11965 ! 406. http://gcc.gnu.org/PR12301 ! 407. http://gcc.gnu.org/PR11717 ! 408. http://gcc.gnu.org/PR11313 ! 409. http://gcc.gnu.org/PR11712 ! 410. http://gcc.gnu.org/PR12166 ! 411. http://gcc.gnu.org/PR12101 ! 412. http://gcc.gnu.org/PR10988 ! 413. http://gcc.gnu.org/PR11805 ! 414. http://gcc.gnu.org/PR11902 ! 415. http://gcc.gnu.org/PR11903 ! 416. http://gcc.gnu.org/bugzilla/ ! 417. http://gcc.gnu.org/PR11890 ! 418. http://gcc.gnu.org/PR12399 ! 419. http://gcc.gnu.org/PR13068 ! 420. http://gcc.gnu.org/PR10060 ! 421. http://gcc.gnu.org/PR10555 ! 422. http://gcc.gnu.org/PR10706 ! 423. http://gcc.gnu.org/PR11496 ! 424. http://gcc.gnu.org/PR11741 ! 425. http://gcc.gnu.org/PR12440 ! 426. http://gcc.gnu.org/PR12632 ! 427. http://gcc.gnu.org/PR12712 ! 428. http://gcc.gnu.org/PR12726 ! 429. http://gcc.gnu.org/PR12890 ! 430. http://gcc.gnu.org/PR12900 ! 431. http://gcc.gnu.org/PR13060 ! 432. http://gcc.gnu.org/PR13289 ! 433. http://gcc.gnu.org/PR13318 ! 434. http://gcc.gnu.org/PR13392 ! 435. http://gcc.gnu.org/PR13574 ! 436. http://gcc.gnu.org/PR13475 ! 437. http://gcc.gnu.org/PR13797 ! 438. http://gcc.gnu.org/PR13824 ! 439. http://gcc.gnu.org/PR8776 ! 440. http://gcc.gnu.org/PR10339 ! 441. http://gcc.gnu.org/PR11350 ! 442. http://gcc.gnu.org/PR12826 ! 443. http://gcc.gnu.org/PR12500 ! 444. http://gcc.gnu.org/PR12941 ! 445. http://gcc.gnu.org/PR12953 ! 446. http://gcc.gnu.org/PR13041 ! 447. http://gcc.gnu.org/PR13507 ! 448. http://gcc.gnu.org/PR13382 ! 449. http://gcc.gnu.org/PR13394 ! 450. http://gcc.gnu.org/PR13400 ! 451. http://gcc.gnu.org/PR13521 ! 452. http://gcc.gnu.org/PR2094 ! 453. http://gcc.gnu.org/PR2294 ! 454. http://gcc.gnu.org/PR5050 ! 455. http://gcc.gnu.org/PR9371 ! 456. http://gcc.gnu.org/PR9546 ! 457. http://gcc.gnu.org/PR10081 ! 458. http://gcc.gnu.org/PR10093 ! 459. http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/cwg_defects.html#61 ! 460. http://gcc.gnu.org/PR10095 ! 461. http://gcc.gnu.org/PR11554 ! 462. http://gcc.gnu.org/PR12297 ! 463. http://gcc.gnu.org/PR12352 ! 464. http://gcc.gnu.org/PR12438 ! 465. http://gcc.gnu.org/PR12540 ! 466. http://gcc.gnu.org/PR12594 ! 467. http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/cwg_defects.html#60 ! 468. http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/cwg_defects.html#63 ! 469. http://gcc.gnu.org/PR12657 ! 470. http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/cwg_defects.html#292 ! 471. http://gcc.gnu.org/PR12696 ! 472. http://gcc.gnu.org/PR12815 ! 473. http://gcc.gnu.org/PR12862 ! 474. http://gcc.gnu.org/PR12926 ! 475. http://gcc.gnu.org/PR12967 ! 476. http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/cwg_defects.html ! 477. http://gcc.gnu.org/PR12971 ! 478. http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/cwg_defects.html#328 ! 479. http://gcc.gnu.org/PR13007 ! 480. http://gcc.gnu.org/PR13009 ! 481. http://gcc.gnu.org/PR13057 ! 482. http://gcc.gnu.org/PR13070 ! 483. http://gcc.gnu.org/PR13081 ! 484. http://gcc.gnu.org/PR13239 ! 485. http://gcc.gnu.org/PR13262 ! 486. http://gcc.gnu.org/PR13290 ! 487. http://gcc.gnu.org/PR13323 ! 488. http://gcc.gnu.org/PR13369 ! 489. http://gcc.gnu.org/PR13371 ! 490. http://gcc.gnu.org/PR13445 ! 491. http://gcc.gnu.org/PR13461 ! 492. http://gcc.gnu.org/PR13462 ! 493. http://gcc.gnu.org/PR13478 ! 494. http://gcc.gnu.org/PR13544 ! 495. http://gcc.gnu.org/PR13650 ! 496. http://gcc.gnu.org/PR13683 ! 497. http://gcc.gnu.org/PR13688 ! 498. http://gcc.gnu.org/PR13774 ! 499. http://gcc.gnu.org/PR13884 ! 500. http://gcc.gnu.org/PR10746 ! 501. http://gcc.gnu.org/PR11433 ! 502. http://gcc.gnu.org/PR12633 ! 503. http://gcc.gnu.org/PR13037 ! 504. http://gcc.gnu.org/PR13213 ! 505. http://gcc.gnu.org/PR4490 ! 506. http://gcc.gnu.org/PR12292 ! 507. http://gcc.gnu.org/PR12441 ! 508. http://gcc.gnu.org/PR12943 ! 509. http://gcc.gnu.org/PR13608 ! 510. http://gcc.gnu.org/PR11598 ! 511. http://gcc.gnu.org/PR11793 ! 512. http://gcc.gnu.org/PR12467 ! 513. http://gcc.gnu.org/PR12537 ! 514. http://gcc.gnu.org/PR12496 ! 515. http://gcc.gnu.org/PR12865 ! 516. http://gcc.gnu.org/PR13354 ! 517. http://gcc.gnu.org/PR10467 ! 518. http://gcc.gnu.org/PR11226 ! 519. http://gcc.gnu.org/PR11227 ! 520. http://gcc.gnu.org/PR12644 ! 521. http://gcc.gnu.org/PR13149 ! 522. http://gcc.gnu.org/PR12654 ! 523. http://gcc.gnu.org/PR12965 ! 524. http://gcc.gnu.org/PR13031 ! 525. http://gcc.gnu.org/PR11634 ! 526. http://gcc.gnu.org/PR12158 ! 527. http://gcc.gnu.org/PR11992 ! 528. http://gcc.gnu.org/PR9365 ! 529. http://gcc.gnu.org/PR10392 ! 530. http://gcc.gnu.org/PR11322 ! 531. http://gcc.gnu.org/PR13069 ! 532. http://gcc.gnu.org/PR13302 ! 533. http://gcc.gnu.org/PR13585 ! 534. http://gcc.gnu.org/PR8916 ! 535. http://gcc.gnu.org/PR11576 ! 536. http://gcc.gnu.org/PR13122 ! 537. http://gcc.gnu.org/PR13256 ! 538. http://gcc.gnu.org/PR13373 ! 539. http://gcc.gnu.org/PR12561 ! 540. http://gcc.gnu.org/PR6243 ! 541. http://gcc.gnu.org/PR11397 ! 542. http://gcc.gnu.org/PR12505 ! 543. http://gcc.gnu.org/PR13150 ! 544. http://gcc.gnu.org/PR12666 ! 545. http://gcc.gnu.org/PR12969 ! 546. http://gcc.gnu.org/PR10819 ! 547. http://gcc.gnu.org/PR11612 ! 548. http://gcc.gnu.org/PR13211 ! 549. mailto:gnu@gnu.org ! 550. http://www.gnu.org/home.html#ContactInfo ! 551. http://gcc.gnu.org/about.html ! 552. http://gcc.gnu.org/onlinedocs/ ! 553. mailto:gcc-help@gcc.gnu.org ! 554. mailto:gcc@gnu.org ! 555. mailto:gcc@gcc.gnu.org ! 556. http://validator.w3.org/check/referer ====================================================================== http://gcc.gnu.org/gcc-3.2/index.html *************** http://gcc.gnu.org/gcc-3.2/index.html *** 1599,1617 **** April 25, 2003 ! The [1]GNU project and the GCC developers are pleased to announce the release of GCC 3.2.3. ! The purpose of the GCC 3.2 release series is to provide a stable ! platform for OS distributors to use building their next releases. A ! primary objective was to stabilize the C++ ABI; we believe that the ! interface to the compiler and the C++ standard library are now relatively stable. ! Be aware that C++ code compiled by GCC 3.2.x will (in general) not interoperate with code compiled by GCC 3.1.1 or earlier. ! Please refer to our [2]detailed list of news, caveats, and bug-fixes for further information. Release History --- 1992,2010 ---- April 25, 2003 ! The [1]GNU project and the GCC developers are pleased to announce the release of GCC 3.2.3. ! The purpose of the GCC 3.2 release series is to provide a stable ! platform for OS distributors to use building their next releases. A ! primary objective was to stabilize the C++ ABI; we believe that the ! interface to the compiler and the C++ standard library are now relatively stable. ! Be aware that C++ code compiled by GCC 3.2.x will (in general) not interoperate with code compiled by GCC 3.1.1 or earlier. ! Please refer to our [2]detailed list of news, caveats, and bug-fixes for further information. Release History *************** Release History *** 1630,1671 **** References and Acknowledgements ! GCC used to stand for the GNU C Compiler, but since the compiler ! supports several other languages aside from C, it now stands for the GNU Compiler Collection. ! A list of [7]successful builds is updated as new information becomes available. ! The GCC developers would like to thank the numerous people that have ! contributed new features, improvements, bug fixes, and other changes as well as test results to GCC. This [8]amazing group of volunteers is what makes GCC successful. ! For additional information about GCC please refer to the [9]GCC project web site or contact the [10]GCC development mailing list. ! To obtain GCC please use [11]our mirror sites, one of the [12]GNU mirror sites, or [13]our CVS server. _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [14]gnu@gnu.org. There are also [15]other ways to contact the FSF. These pages are maintained by [16]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [17]GCC manuals. If that fails, the [18]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [19]gcc@gnu.org or [20]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. Last modified 2003-08-28 [21]Valid XHTML 1.0 --- 2023,2064 ---- References and Acknowledgements ! GCC used to stand for the GNU C Compiler, but since the compiler ! supports several other languages aside from C, it now stands for the GNU Compiler Collection. ! A list of [7]successful builds is updated as new information becomes available. ! The GCC developers would like to thank the numerous people that have ! contributed new features, improvements, bug fixes, and other changes as well as test results to GCC. This [8]amazing group of volunteers is what makes GCC successful. ! For additional information about GCC please refer to the [9]GCC project web site or contact the [10]GCC development mailing list. ! To obtain GCC please use [11]our mirror sites, one of the [12]GNU mirror sites, or [13]our CVS server. _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [14]gnu@gnu.org. There are also [15]other ways to contact the FSF. These pages are maintained by [16]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [17]GCC manuals. If that fails, the [18]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [19]gcc@gnu.org or [20]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. Last modified 2003-08-28 [21]Valid XHTML 1.0 *************** Caveats and New Features *** 1705,1752 **** Caveats ! * The C++ compiler does not correctly zero-initialize pointers-to-data members. You must explicitly initialize them. For ! example: int S::*m(0); will work, but depending on ! default-initialization to zero will not work. This bug cannot be ! fixed in GCC 3.2 without inducing unacceptable risks. It will be fixed in GCC 3.3. ! * This GCC release is based on the GCC 3.1 sourcebase, and thus has all the [2]changes in the GCC 3.1 series. In addition, GCC 3.2 has ! a number of C++ ABI fixes which make its C++ compiler generate ! binary code which is incompatible with the C++ compilers found in earlier GCC releases, including GCC 3.1 and GCC 3.1.1. Frontend Enhancements C/C++/Objective-C ! * The method of constructing the list of directories to be searched ! for header files has been revised. If a directory named by a -I ! option is a standard system include directory, the option is ! ignored to ensure that the default search order for system ! directories and the special treatment of system header files are not defeated. ! * The C and Objective-C compilers no longer accept the "Naming ! Types" extension (typedef foo = bar); it was already unavailable ! in C++. Code which uses it will need to be changed to use the ! "typeof" extension instead: typedef typeof(bar) foo. (We have ! removed this extension without a period of deprecation because it ! has caused the compiler to crash since version 3.0 and no one ! noticed until very recently. Thus we conclude it is not in widespread use.) C++ * There are now no known differences between the C++ ABI implemented ! in GCC and the multi-vendor standard. We believe that the ABI for ! the C++ standard library is now stable and will not change in ! future versions of the compiler. However, hard experience has ! taught us to be cautious; it is possible that more problems will ! be found. It is our intention to make changes to the ABI only if ! they are necessary for correct compilation of C++, as opposed to conformance to the ABI documents. ! * For details on how to build an ABI compliant compiler for GNU/Linux systems, check the [3]common C++ ABI page. New Targets and Target Specific Improvements --- 2098,2145 ---- Caveats ! * The C++ compiler does not correctly zero-initialize pointers-to-data members. You must explicitly initialize them. For ! example: int S::*m(0); will work, but depending on ! default-initialization to zero will not work. This bug cannot be ! fixed in GCC 3.2 without inducing unacceptable risks. It will be fixed in GCC 3.3. ! * This GCC release is based on the GCC 3.1 sourcebase, and thus has all the [2]changes in the GCC 3.1 series. In addition, GCC 3.2 has ! a number of C++ ABI fixes which make its C++ compiler generate ! binary code which is incompatible with the C++ compilers found in earlier GCC releases, including GCC 3.1 and GCC 3.1.1. Frontend Enhancements C/C++/Objective-C ! * The method of constructing the list of directories to be searched ! for header files has been revised. If a directory named by a -I ! option is a standard system include directory, the option is ! ignored to ensure that the default search order for system ! directories and the special treatment of system header files are not defeated. ! * The C and Objective-C compilers no longer accept the "Naming ! Types" extension (typedef foo = bar); it was already unavailable ! in C++. Code which uses it will need to be changed to use the ! "typeof" extension instead: typedef typeof(bar) foo. (We have ! removed this extension without a period of deprecation because it ! has caused the compiler to crash since version 3.0 and no one ! noticed until very recently. Thus we conclude it is not in widespread use.) C++ * There are now no known differences between the C++ ABI implemented ! in GCC and the multi-vendor standard. We believe that the ABI for ! the C++ standard library is now stable and will not change in ! future versions of the compiler. However, hard experience has ! taught us to be cautious; it is possible that more problems will ! be found. It is our intention to make changes to the ABI only if ! they are necessary for correct compilation of C++, as opposed to conformance to the ABI documents. ! * For details on how to build an ABI compliant compiler for GNU/Linux systems, check the [3]common C++ ABI page. New Targets and Target Specific Improvements *************** Caveats and New Features *** 1754,1766 **** IA-32 * Fixed a number of bugs in SSE and MMX intrinsics. ! * Fixed common compiler crashes with SSE instruction set enabled (implied by -march=pentium3, pentium4, athlon-xp) * __m128 and __m128i is not 128bit aligned when used in structures. x86-64 ! * A bug whereby the compiler could generate bad code for bzero has been fixed. * ABI fixes (implying ABI incompatibilities with previous version in some corner cases) --- 2147,2159 ---- IA-32 * Fixed a number of bugs in SSE and MMX intrinsics. ! * Fixed common compiler crashes with SSE instruction set enabled (implied by -march=pentium3, pentium4, athlon-xp) * __m128 and __m128i is not 128bit aligned when used in structures. x86-64 ! * A bug whereby the compiler could generate bad code for bzero has been fixed. * ABI fixes (implying ABI incompatibilities with previous version in some corner cases) *************** Caveats and New Features *** 1769,1788 **** GCC 3.2.3 ! 3.2.3 is a bug fix release only; there are no new features that were not present in GCC 3.2.2. Bug Fixes ! This section lists the problem reports (PRs) from GCC's bug tracking ! system that are known to be fixed in the 3.2.3 release. This list might not be complete (that is, it is possible that some PRs that have ! been fixed are not listed here), and some of the titles have been changed to make them more clear. Internal Compiler Errors (multi-platform) ! * [4]3782: (c++) -quiet -fstats produces a segmentation fault in cc1plus * [5]6440: (c++) template specializations cause ICE * [6]7050: (c++) ICE on: (i ? get_string() : throw) --- 2162,2181 ---- GCC 3.2.3 ! 3.2.3 is a bug fix release only; there are no new features that were not present in GCC 3.2.2. Bug Fixes ! This section lists the problem reports (PRs) from GCC's bug tracking ! system that are known to be fixed in the 3.2.3 release. This list might not be complete (that is, it is possible that some PRs that have ! been fixed are not listed here), and some of the titles have been changed to make them more clear. Internal Compiler Errors (multi-platform) ! * [4]3782: (c++) -quiet -fstats produces a segmentation fault in cc1plus * [5]6440: (c++) template specializations cause ICE * [6]7050: (c++) ICE on: (i ? get_string() : throw) *************** GCC 3.2.3 *** 1793,1804 **** * [11]8396: ICE in copy_to_mode_reg, in explow.c * [12]8674: (c++) ICE in cp_expr_size, in cp/cp-lang.c * [13]9768: ICE when optimizing inline code at -O2 ! * [14]9798: (c++) Infinite recursion (segfault) in cp/decl.c:push_using_directive with recursive using directives ! * [15]9799: mismatching structure initializer with nested flexible array member: ICE * [16]9928: ICE on duplicate enum declaration ! * [17]10114: ICE in mem_loc_descriptor, in dwarf2out.c (affects sparc, alpha) * [18]10352: ICE in find_reloads_toplev * [19]10336: ICE with -Wunreachable-code --- 2186,2197 ---- * [11]8396: ICE in copy_to_mode_reg, in explow.c * [12]8674: (c++) ICE in cp_expr_size, in cp/cp-lang.c * [13]9768: ICE when optimizing inline code at -O2 ! * [14]9798: (c++) Infinite recursion (segfault) in cp/decl.c:push_using_directive with recursive using directives ! * [15]9799: mismatching structure initializer with nested flexible array member: ICE * [16]9928: ICE on duplicate enum declaration ! * [17]10114: ICE in mem_loc_descriptor, in dwarf2out.c (affects sparc, alpha) * [18]10352: ICE in find_reloads_toplev * [19]10336: ICE with -Wunreachable-code *************** GCC 3.2.3 *** 1806,1851 **** C/optimizer bugs: * [20]8224: Incorrect joining of signed and unsigned division ! * [21]8613: -O2 produces wrong code with builtin strlen and postincrements * [22]8828: gcc reports some code is unreachable when it is not * [23]9226: GCSE breaking argument passing * [24]9853: miscompilation of non-constant structure initializer * [25]9797: C99-style struct initializers are miscompiled ! * [26]9967: Some standard C function calls should not be replaced when optimizing for size ! * [27]10116: ce2: invalid merge of join_bb in the context of switch statements * [28]10171: wrong code for inlined function * [29]10175: -Wunreachable-code doesn't work for single lines C++ compiler and library: ! * [30]8316: Confusing diagnostic for code that misuses conversion operators * [31]9169: filebuf output fails if codecvt<>::out returns noconv * [32]9420: incomplete type incorrectly reported ! * [33]9459: typeof in return type specification of template not supported * [34]9507: filebuf::open handles ios_base::ate incorrectly * [35]9538: Out-of-bounds memory access in streambuf::sputbackc * [36]9602: Total confusion about template/friend/virtual/abstract ! * [37]9993: destructor not called for local object created within and returned from infinite loop ! * [38]10167: ieee_1003.1-2001 locale specialisations on a glibc-2.3.2 system Java compiler and library: * [39]9652: libgcj build fails on irix6.5.1[78] ! * [40]10144: gas on solaris complains about bad .stabs lines for java, native as unaffected x86-specific (Intel/AMD): * [41]8746: gcc miscompiles Linux kernel ppa driver on x86 * [42]9888: -mcpu=k6 -Os produces out of range loop instructions ! * [43]9638: Cross-build for target i386-elf and i586-pc-linux-gnu failed * [44]9954: Cross-build for target i586-pc-linux-gnu (--with-newlib) failed --- 2199,2244 ---- C/optimizer bugs: * [20]8224: Incorrect joining of signed and unsigned division ! * [21]8613: -O2 produces wrong code with builtin strlen and postincrements * [22]8828: gcc reports some code is unreachable when it is not * [23]9226: GCSE breaking argument passing * [24]9853: miscompilation of non-constant structure initializer * [25]9797: C99-style struct initializers are miscompiled ! * [26]9967: Some standard C function calls should not be replaced when optimizing for size ! * [27]10116: ce2: invalid merge of join_bb in the context of switch statements * [28]10171: wrong code for inlined function * [29]10175: -Wunreachable-code doesn't work for single lines C++ compiler and library: ! * [30]8316: Confusing diagnostic for code that misuses conversion operators * [31]9169: filebuf output fails if codecvt<>::out returns noconv * [32]9420: incomplete type incorrectly reported ! * [33]9459: typeof in return type specification of template not supported * [34]9507: filebuf::open handles ios_base::ate incorrectly * [35]9538: Out-of-bounds memory access in streambuf::sputbackc * [36]9602: Total confusion about template/friend/virtual/abstract ! * [37]9993: destructor not called for local object created within and returned from infinite loop ! * [38]10167: ieee_1003.1-2001 locale specialisations on a glibc-2.3.2 system Java compiler and library: * [39]9652: libgcj build fails on irix6.5.1[78] ! * [40]10144: gas on solaris complains about bad .stabs lines for java, native as unaffected x86-specific (Intel/AMD): * [41]8746: gcc miscompiles Linux kernel ppa driver on x86 * [42]9888: -mcpu=k6 -Os produces out of range loop instructions ! * [43]9638: Cross-build for target i386-elf and i586-pc-linux-gnu failed * [44]9954: Cross-build for target i586-pc-linux-gnu (--with-newlib) failed *************** GCC 3.2.3 *** 1853,1862 **** Sparc-specific: * [45]7784: [Sparc] ICE in extract_insn, in recog.c ! * [46]7796: sparc extra failure with -m64 on execute/930921-1.c in unroll.c * [47]8281: ICE when compiling with -O2 -fPIC for Ultrasparc ! * [48]8366: [Sparc] C testsuite failure with -m64 -fpic -O in execute/loop-2d.c * [49]8726: gcc -O2 miscompiles Samba 2.2.7 on 32-bit sparc * [50]9414: Scheduling bug on Ultrasparc --- 2246,2255 ---- Sparc-specific: * [45]7784: [Sparc] ICE in extract_insn, in recog.c ! * [46]7796: sparc extra failure with -m64 on execute/930921-1.c in unroll.c * [47]8281: ICE when compiling with -O2 -fPIC for Ultrasparc ! * [48]8366: [Sparc] C testsuite failure with -m64 -fpic -O in execute/loop-2d.c * [49]8726: gcc -O2 miscompiles Samba 2.2.7 on 32-bit sparc * [50]9414: Scheduling bug on Ultrasparc *************** GCC 3.2.3 *** 1880,1893 **** HP-specific: * [58]8694: breaks on HP-UX 10.20 (DUP: 9275) ! * [59]9953: (ada) gcc 3.2.x can't build 3.3-branch ada on HP-UX 10 (missing symbol) ! * [60]10271: Floating point args don't get reloaded across function calls with -O2 MIPS specific: ! * [61]6362: mips-irix6 gcc-3.1 C testsuite failure with -mips4 in compile/920501-4.c CRIS specific: --- 2273,2286 ---- HP-specific: * [58]8694: breaks on HP-UX 10.20 (DUP: 9275) ! * [59]9953: (ada) gcc 3.2.x can't build 3.3-branch ada on HP-UX 10 (missing symbol) ! * [60]10271: Floating point args don't get reloaded across function calls with -O2 MIPS specific: ! * [61]6362: mips-irix6 gcc-3.1 C testsuite failure with -mips4 in compile/920501-4.c CRIS specific: *************** GCC 3.2.3 *** 1901,1909 **** GCC 3.2.2 ! Beginning with 3.2.2, GCC's Makefile suite supports redirection of ! make install by means of the DESTDIR variable. Parts of the GCC tree ! have featured that support long before, but now it is available even from the top level. Other than that, GCC 3.2.2 is a bug fix release only; there are no new --- 2294,2302 ---- GCC 3.2.2 ! Beginning with 3.2.2, GCC's Makefile suite supports redirection of ! make install by means of the DESTDIR variable. Parts of the GCC tree ! have featured that support long before, but now it is available even from the top level. Other than that, GCC 3.2.2 is a bug fix release only; there are no new *************** GCC 3.2.2 *** 1911,1942 **** Bug Fixes ! On the following i386-based systems GCC 3.2.1 broke the C ABI wrt. ! functions returning structures: Cygwin, FreeBSD (GCC 3.2.1 as shipped ! with FreeBSD 5.0 does not have this problem), Interix, a.out-based ! Linux and NetBSD, OpenBSD, and Darwin. GCC 3.2.2 reverts this ABI ! change, and thus restores ABI-compatibility with previous releases (except GCC 3.2.1) on these platforms. ! This section lists the problem reports (PRs) from GCC's bug tracking ! system that are known to be fixed in the 3.2.2 release. This list might not be complete (that is, it is possible that some PRs that have ! been fixed are not listed here) and some of the titles have been changed to make them more clear. Internal Compiler Errors (multi-platform) ! * [64]5919: (c++) ICE when passing variable array to template function ! * [65]7129: (c++) ICE with min/max assignment operators (?=) ! * [66]7507: ICE with -O2 when address of called function is a complicated expression ! * [67]7622: ICE with nested inline functions if function's address is taken ! * [68]7681: (fortran) ICE in compensate_edge, in reg-stack.c (also PR [69]9258) ! * [70]8031: (c++) ICE in code comparing typeids and casting from virtual base * [71]8275: ICE in simplify_subreg * [72]8332: (c++) builtin strlen/template interaction causes ICE --- 2304,2335 ---- Bug Fixes ! On the following i386-based systems GCC 3.2.1 broke the C ABI wrt. ! functions returning structures: Cygwin, FreeBSD (GCC 3.2.1 as shipped ! with FreeBSD 5.0 does not have this problem), Interix, a.out-based ! Linux and NetBSD, OpenBSD, and Darwin. GCC 3.2.2 reverts this ABI ! change, and thus restores ABI-compatibility with previous releases (except GCC 3.2.1) on these platforms. ! This section lists the problem reports (PRs) from GCC's bug tracking ! system that are known to be fixed in the 3.2.2 release. This list might not be complete (that is, it is possible that some PRs that have ! been fixed are not listed here) and some of the titles have been changed to make them more clear. Internal Compiler Errors (multi-platform) ! * [64]5919: (c++) ICE when passing variable array to template function ! * [65]7129: (c++) ICE with min/max assignment operators (?=) ! * [66]7507: ICE with -O2 when address of called function is a complicated expression ! * [67]7622: ICE with nested inline functions if function's address is taken ! * [68]7681: (fortran) ICE in compensate_edge, in reg-stack.c (also PR [69]9258) ! * [70]8031: (c++) ICE in code comparing typeids and casting from virtual base * [71]8275: ICE in simplify_subreg * [72]8332: (c++) builtin strlen/template interaction causes ICE *************** GCC 3.2.2 *** 1944,1950 **** * [74]8439: (c, not c++) empty struct causes ICE * [75]8442: (c++) ICE with nested template classes * [76]8518: ICE when compiling mplayer ("extern inline" issue) ! * [77]8615: (c++) ICE with out-of-range character constant template argument * [78]8663: (c++) ICE in cp_expr_size, at cp-lang.c:307 * [79]8799: (c++) ICE: error reporting routines re-entered --- 2337,2343 ---- * [74]8439: (c, not c++) empty struct causes ICE * [75]8442: (c++) ICE with nested template classes * [76]8518: ICE when compiling mplayer ("extern inline" issue) ! * [77]8615: (c++) ICE with out-of-range character constant template argument * [78]8663: (c++) ICE in cp_expr_size, at cp-lang.c:307 * [79]8799: (c++) ICE: error reporting routines re-entered *************** GCC 3.2.2 *** 1955,1972 **** * [82]47: scoping in nested classes is broken * [83]6745: problems with iostream rdbuf() member function ! * [84]8214: conversion from const char* const to char* sometimes accepted illegally ! * [85]8493: builtin strlen and overload resolution (same bug as [86]8332) * [87]8503: strange behaviour of function types ! * [88]8727: compiler confused by inheritance from an anonymous struct ! * [89]7445: poor performance of std::locale::classic() in multi-threaded applications * [90]8230: mishandling of overflow in vector::resize * [91]8399: sync_with_stdio(false) breaks unformatted input ! * [92]8662: illegal access of private member of unnamed class is accepted * [93]8707: "make distclean" fails in libstdc++-v3 directory * [94]8708: __USE_MALLOC doesn't work --- 2348,2365 ---- * [82]47: scoping in nested classes is broken * [83]6745: problems with iostream rdbuf() member function ! * [84]8214: conversion from const char* const to char* sometimes accepted illegally ! * [85]8493: builtin strlen and overload resolution (same bug as [86]8332) * [87]8503: strange behaviour of function types ! * [88]8727: compiler confused by inheritance from an anonymous struct ! * [89]7445: poor performance of std::locale::classic() in multi-threaded applications * [90]8230: mishandling of overflow in vector::resize * [91]8399: sync_with_stdio(false) breaks unformatted input ! * [92]8662: illegal access of private member of unnamed class is accepted * [93]8707: "make distclean" fails in libstdc++-v3 directory * [94]8708: __USE_MALLOC doesn't work *************** GCC 3.2.2 *** 1977,2007 **** * [98]9151: std::setprecision limited to 16 digits when outputting a double to a stream * [99]9168: codecvt overwrites output buffers ! * [100]9269: libstdc++ headers: explicit specialization of function must precede its first use ! * [101]9322: return value of basic_streambuf<>::getloc affected by locale::global * [102]9433: segfault in runtime support for dynamic_cast C and optimizer bugs ! * [103]8032: GCC incorrectly initializes static structs that have flexible arrays * [104]8639: simple arithmetic expression broken * [105]8794: optimization improperly eliminates certain expressions * [106]8832: traditional "asm volatile" code is illegally optimized ! * [107]8988: loop optimizer bug: with -O2, code is generated that segfaults (found on i386, bug present for all platforms) * [108]9492: structure copy clobbers subsequent stores to structure Objective-C bugs ! * [109]9267: Objective-C parser won't build with newer bison versions (e.g. 1.875) Ada bugs ! * [110]8344: Ada build problem due to conflict between gcc/final.o, gcc/ada/final.o Preprocessor bugs --- 2370,2400 ---- * [98]9151: std::setprecision limited to 16 digits when outputting a double to a stream * [99]9168: codecvt overwrites output buffers ! * [100]9269: libstdc++ headers: explicit specialization of function must precede its first use ! * [101]9322: return value of basic_streambuf<>::getloc affected by locale::global * [102]9433: segfault in runtime support for dynamic_cast C and optimizer bugs ! * [103]8032: GCC incorrectly initializes static structs that have flexible arrays * [104]8639: simple arithmetic expression broken * [105]8794: optimization improperly eliminates certain expressions * [106]8832: traditional "asm volatile" code is illegally optimized ! * [107]8988: loop optimizer bug: with -O2, code is generated that segfaults (found on i386, bug present for all platforms) * [108]9492: structure copy clobbers subsequent stores to structure Objective-C bugs ! * [109]9267: Objective-C parser won't build with newer bison versions (e.g. 1.875) Ada bugs ! * [110]8344: Ada build problem due to conflict between gcc/final.o, gcc/ada/final.o Preprocessor bugs *************** GCC 3.2.2 *** 2016,2025 **** x86-specific (Intel/AMD) ! * [114]8588: ICE in extract_insn, at recog.c:NNNN (shift instruction) * [115]8599: loop unroll bug with -march=k6-3 ! * [116]9506: ABI breakage in structure return (affects BSD and Cygwin, but not GNU/Linux) FreeBSD 5.0 specific --- 2409,2418 ---- x86-specific (Intel/AMD) ! * [114]8588: ICE in extract_insn, at recog.c:NNNN (shift instruction) * [115]8599: loop unroll bug with -march=k6-3 ! * [116]9506: ABI breakage in structure return (affects BSD and Cygwin, but not GNU/Linux) FreeBSD 5.0 specific *************** GCC 3.2.2 *** 2047,2156 **** GCC 3.2.1 ! 3.2.1 adds a new warning, -Wabi. This option warns when GNU C++ ! generates code that is known not to be binary-compatible with the ! vendor-neutral ia32/ia64 ABI. Please consult the GCC manual, included in the distribution, for details. ! This release also removes an old GCC extension, "naming types", and ! the documentation now directs users to use a different GCC extension, ! __typeof__, instead. The feature had evidently been broken for a while. ! Otherwise, 3.2.1 is a bug fix release only; other than bug fixes and the new warning there are no new features that were not present in GCC 3.2. ! In addition, the previous fix for [128]PR 7445 (poor performance of ! std::locale::classic() in multi-threaded applications) was reverted ("unfixed"), because the "fix" was not thread-safe. Bug Fixes ! This section lists the problem reports (PRs) from GCC's bug tracking ! system that are known to be fixed in the 3.2.1 release. This list might not be complete (that is, it is possible that some PRs that have ! been fixed are not listed here). As you can see, the number of bug ! fixes is quite large, so it is strongly recommended that users of earlier GCC 3.x releases upgrade to GCC 3.2.1. Internal Compiler Errors (multi-platform) * [129]2521: (c++) ICE in build_ptrmemfunc, in cp/typeck.c ! * [130]5661: (c++) ICE instantiating template on array of unknown size (bad code) ! * [131]6419: (c++) ICE in make_decl_rtl for "longest" attribute on 64-bit platforms * [132]6994: (c++) ICE in find_function_data * [133]7150: preprocessor: GCC -dM -E gives an ICE * [134]7160: ICE when optimizing branches without a return value ! * [135]7228: (c++) ICE when using member template and template function * [136]7266: (c++) ICE with -pedantic on missing typename * [137]7353: ICE from use of "Naming Types" extension, see above * [138]7411: ICE in instantiate_virtual_regs_1, in function.c * [139]7478: (c++) ICE on static_cast inside template ! * [140]7526: preprocessor core dump when _Pragma implies #pragma dependency * [141]7721: (c++) ICE on simple (but incorrect) template ([142]7803 is a duplicate) * [143]7754: (c++) ICE on union with template parameter ! * [144]7788: (c++) redeclaring a definition as an incomplete class causes ICE * [145]8031: (c++) ICE in comptypes, in cp/typeck.c ! * [146]8055: preprocessor dies with SIG11 when building FreeBSD kernel ! * [147]8067: (c++) ICE due to mishandling of __FUNCTION__ and related variables * [148]8134: (c++) ICE in force_store_init_value on legal code * [149]8149: (c++) ICE on incomplete type ! * [150]8160: (c++) ICE in build_modify_expr, in cp/typeck.c: array initialization C++ (compiler and library) bugs * [151]5607: No pointer adjustment in covariant return types ! * [152]6579: Infinite loop with statement expressions in member initialization * [153]6803: Default copy constructor bug in GCC 3.1 * [154]7176: g++ confused by friend and static member with same name ! * [155]7188: Segfault with template class and recursive (incorrect) initializer list ! * [156]7306: Regression: GCC 3.x fails to compile code with virtual inheritance if a method has a variable number of arguments ! * [157]7461: ctype::classic_table() returns offset array on Cygwin * [158]7524: f(const float arg[3]) fails * [159]7584: Erroneous ambiguous base error on using declaration * [160]7676: Member template overloading problem * [161]7679: infinite loop when a right parenthesis is missing * [162]7811: default locale not taken from environment ! * [163]7961: compare( char *) implemented incorrectly in basic_string<> ! * [164]8071: basic_ostream::operator<<(streambuf*) loops forever if ! streambuf::underflow() leaves gptr() NULL (dups: [165]8127, [166]6745) ! * [167]8096: deque::at() throws std::range_error instead of std::out_of_range * [168]8127: cout << cin.rdbuf() infinite loop ! * [169]8218: Excessively large memory consumed for classes with large array members ! * [170]8287: GCC 3.2: Destructor called for non-constructed local object ! * [171]8347: empty vector range used in string construction causes core dump ! * [172]8348: fail() flag is set in istringstream when eof() flag is set * [173]8391: regression: infinite loop in cp/decl2.c(finish_file) C and optimizer bugs ! * [174]6627: -fno-align-functions doesn't seem to disable function alignment * [175]6631: life_analysis misoptimizes code to initialize fields of a structure * [176]7102: unsigned char division results in floating exception ! * [177]7120: Run once loop should *always* be unrolled (pessimization) * [178]7209: Bug involving array referencing and ?: operator * [179]7515: invalid inlining of global function with -O3 --- 2440,2549 ---- GCC 3.2.1 ! 3.2.1 adds a new warning, -Wabi. This option warns when GNU C++ ! generates code that is known not to be binary-compatible with the ! vendor-neutral ia32/ia64 ABI. Please consult the GCC manual, included in the distribution, for details. ! This release also removes an old GCC extension, "naming types", and ! the documentation now directs users to use a different GCC extension, ! __typeof__, instead. The feature had evidently been broken for a while. ! Otherwise, 3.2.1 is a bug fix release only; other than bug fixes and the new warning there are no new features that were not present in GCC 3.2. ! In addition, the previous fix for [128]PR 7445 (poor performance of ! std::locale::classic() in multi-threaded applications) was reverted ("unfixed"), because the "fix" was not thread-safe. Bug Fixes ! This section lists the problem reports (PRs) from GCC's bug tracking ! system that are known to be fixed in the 3.2.1 release. This list might not be complete (that is, it is possible that some PRs that have ! been fixed are not listed here). As you can see, the number of bug ! fixes is quite large, so it is strongly recommended that users of earlier GCC 3.x releases upgrade to GCC 3.2.1. Internal Compiler Errors (multi-platform) * [129]2521: (c++) ICE in build_ptrmemfunc, in cp/typeck.c ! * [130]5661: (c++) ICE instantiating template on array of unknown size (bad code) ! * [131]6419: (c++) ICE in make_decl_rtl for "longest" attribute on 64-bit platforms * [132]6994: (c++) ICE in find_function_data * [133]7150: preprocessor: GCC -dM -E gives an ICE * [134]7160: ICE when optimizing branches without a return value ! * [135]7228: (c++) ICE when using member template and template function * [136]7266: (c++) ICE with -pedantic on missing typename * [137]7353: ICE from use of "Naming Types" extension, see above * [138]7411: ICE in instantiate_virtual_regs_1, in function.c * [139]7478: (c++) ICE on static_cast inside template ! * [140]7526: preprocessor core dump when _Pragma implies #pragma dependency * [141]7721: (c++) ICE on simple (but incorrect) template ([142]7803 is a duplicate) * [143]7754: (c++) ICE on union with template parameter ! * [144]7788: (c++) redeclaring a definition as an incomplete class causes ICE * [145]8031: (c++) ICE in comptypes, in cp/typeck.c ! * [146]8055: preprocessor dies with SIG11 when building FreeBSD kernel ! * [147]8067: (c++) ICE due to mishandling of __FUNCTION__ and related variables * [148]8134: (c++) ICE in force_store_init_value on legal code * [149]8149: (c++) ICE on incomplete type ! * [150]8160: (c++) ICE in build_modify_expr, in cp/typeck.c: array initialization C++ (compiler and library) bugs * [151]5607: No pointer adjustment in covariant return types ! * [152]6579: Infinite loop with statement expressions in member initialization * [153]6803: Default copy constructor bug in GCC 3.1 * [154]7176: g++ confused by friend and static member with same name ! * [155]7188: Segfault with template class and recursive (incorrect) initializer list ! * [156]7306: Regression: GCC 3.x fails to compile code with virtual inheritance if a method has a variable number of arguments ! * [157]7461: ctype::classic_table() returns offset array on Cygwin * [158]7524: f(const float arg[3]) fails * [159]7584: Erroneous ambiguous base error on using declaration * [160]7676: Member template overloading problem * [161]7679: infinite loop when a right parenthesis is missing * [162]7811: default locale not taken from environment ! * [163]7961: compare( char *) implemented incorrectly in basic_string<> ! * [164]8071: basic_ostream::operator<<(streambuf*) loops forever if ! streambuf::underflow() leaves gptr() NULL (dups: [165]8127, [166]6745) ! * [167]8096: deque::at() throws std::range_error instead of std::out_of_range * [168]8127: cout << cin.rdbuf() infinite loop ! * [169]8218: Excessively large memory consumed for classes with large array members ! * [170]8287: GCC 3.2: Destructor called for non-constructed local object ! * [171]8347: empty vector range used in string construction causes core dump ! * [172]8348: fail() flag is set in istringstream when eof() flag is set * [173]8391: regression: infinite loop in cp/decl2.c(finish_file) C and optimizer bugs ! * [174]6627: -fno-align-functions doesn't seem to disable function alignment * [175]6631: life_analysis misoptimizes code to initialize fields of a structure * [176]7102: unsigned char division results in floating exception ! * [177]7120: Run once loop should *always* be unrolled (pessimization) * [178]7209: Bug involving array referencing and ?: operator * [179]7515: invalid inlining of global function with -O3 *************** GCC 3.2.1 *** 2159,2167 **** Preprocessor bugs ! * [182]4890: incorrect line markers from the traditional preprocessor ! * [183]7357: -M option omits system headers files (making it the same as -MM) * [184]7358: Changes to Sun's make Dependencies * [185]7602: C++ header files found in CPLUS_INCLUDE_PATH treated as --- 2552,2560 ---- Preprocessor bugs ! * [182]4890: incorrect line markers from the traditional preprocessor ! * [183]7357: -M option omits system headers files (making it the same as -MM) * [184]7358: Changes to Sun's make Dependencies * [185]7602: C++ header files found in CPLUS_INCLUDE_PATH treated as *************** GCC 3.2.1 *** 2172,2191 **** x86 specific (Intel/AMD) ! * [189]5351: (i686-only) function pass-by-value structure copy corrupts stack ([190]7591 is a duplicate) ! * [191]6845, [192]7034, [193]7124, [194]7174: ICE's with -march=pentium3/pentium2/athlon (these are all the same underlying bug, in MMX register use) ! * [195]7134, [196]7375, [197]7390: ICE with -march=athlon (maybe same as above?) * [198]6890: xmmintrin.h, _MM_TRANSPOSE4_PS is broken * [199]6981: wrong code in 64-bit manipulation on x86 ! * [200]7242: GCC -mcpu=pentium[23] doesn't define __tune_pentiumpro__ macro ! * [201]7396: ix86: cmpgt_ss, cmpge_ss, cmpngt_ss, and cmpnge_ss SSE intrinsics are broken ! * [202]7630: GCC 3.2 breaks on Mozilla 1.0's JS sources with -march=pentium4 * [203]7693: Typo in i386 mmintrin.h header * [204]7723: ICE - Pentium3 sse - GCC 3.2 --- 2565,2584 ---- x86 specific (Intel/AMD) ! * [189]5351: (i686-only) function pass-by-value structure copy corrupts stack ([190]7591 is a duplicate) ! * [191]6845, [192]7034, [193]7124, [194]7174: ICE's with -march=pentium3/pentium2/athlon (these are all the same underlying bug, in MMX register use) ! * [195]7134, [196]7375, [197]7390: ICE with -march=athlon (maybe same as above?) * [198]6890: xmmintrin.h, _MM_TRANSPOSE4_PS is broken * [199]6981: wrong code in 64-bit manipulation on x86 ! * [200]7242: GCC -mcpu=pentium[23] doesn't define __tune_pentiumpro__ macro ! * [201]7396: ix86: cmpgt_ss, cmpge_ss, cmpngt_ss, and cmpnge_ss SSE intrinsics are broken ! * [202]7630: GCC 3.2 breaks on Mozilla 1.0's JS sources with -march=pentium4 * [203]7693: Typo in i386 mmintrin.h header * [204]7723: ICE - Pentium3 sse - GCC 3.2 *************** GCC 3.2.1 *** 2195,2204 **** PowerPC specific * [207]5967: GCC bug when profiling nested functions on powerpc ! * [208]6984: wrong code generated with -O2, -O3, -Os for do-while loop on PowerPC * [209]7114: PowerPC: ICE building strcoll.op from glibc-2.2.5 ! * [210]7130: miscompiled code for GCC-3.1 in powerpc linux with -funroll-all-loops * [211]7133: PowerPC ICE: unrecognizable insn * [212]7380: ICE in extract_insn, at recog.c:2148 --- 2588,2597 ---- PowerPC specific * [207]5967: GCC bug when profiling nested functions on powerpc ! * [208]6984: wrong code generated with -O2, -O3, -Os for do-while loop on PowerPC * [209]7114: PowerPC: ICE building strcoll.op from glibc-2.2.5 ! * [210]7130: miscompiled code for GCC-3.1 in powerpc linux with -funroll-all-loops * [211]7133: PowerPC ICE: unrecognizable insn * [212]7380: ICE in extract_insn, at recog.c:2148 *************** GCC 3.2.1 *** 2214,2220 **** * [216]6668: when using --disable-multilib, libgcc_s.so is installed in the wrong place on sparc-solaris * [217]7151: ICE when compiling for UltraSPARC ! * [218]7335: SPARC: ICE in verify_wide_reg (flow.c:557) with long double and -O1 * [219]7842: [REGRESSION] SPARC code gen bug --- 2607,2613 ---- * [216]6668: when using --disable-multilib, libgcc_s.so is installed in the wrong place on sparc-solaris * [217]7151: ICE when compiling for UltraSPARC ! * [218]7335: SPARC: ICE in verify_wide_reg (flow.c:557) with long double and -O1 * [219]7842: [REGRESSION] SPARC code gen bug *************** GCC 3.2.1 *** 2240,2252 **** m68k/Coldfire specific ! * [227]8314: crtbegin, crtend need to be multilib'ed for this platform Documentation * [228]761: Document some undocumented options ! * [229]5610: Fix documentation about invoking SSE instructions (-mfpmath=sse) * [230]7484: List -Wmissing-declarations as C-only option * [231]7531: -mcmodel not documented for x86-64 --- 2633,2645 ---- m68k/Coldfire specific ! * [227]8314: crtbegin, crtend need to be multilib'ed for this platform Documentation * [228]761: Document some undocumented options ! * [229]5610: Fix documentation about invoking SSE instructions (-mfpmath=sse) * [230]7484: List -Wmissing-declarations as C-only option * [231]7531: -mcmodel not documented for x86-64 *************** GCC 3.2.1 *** 2255,2266 **** GCC 3.2 ! 3.2 is a small bug fix release, but there is a change to the ! application binary interface (ABI), hence the change to the second part of the version number. The main purpose of the 3.2 release is to correct a couple of problems ! in the C++ ABI, with the intention of providing a stable interface going forward. Accordingly, 3.2 is only a small change to 3.1.1. Bug Fixes --- 2648,2659 ---- GCC 3.2 ! 3.2 is a small bug fix release, but there is a change to the ! application binary interface (ABI), hence the change to the second part of the version number. The main purpose of the 3.2 release is to correct a couple of problems ! in the C++ ABI, with the intention of providing a stable interface going forward. Accordingly, 3.2 is only a small change to 3.1.1. Bug Fixes *************** GCC 3.2 *** 2268,2287 **** C++ * [233]7320: g++ 3.2 relocation problem ! * [234]7470: vtable: virtual function pointers not in declaration order libstdc++ * [235]6410: Trouble with non-ASCII monetary symbols and wchar_t ! * [236]6503, [237]6642, [238]7186: Problems with comparing or subtracting various types of const and non-const iterators * [239]7216: ambiguity with basic_iostream::traits_type * [240]7220: problem with basic_istream::ignore(0,delimiter) * [241]7222: locale::operator==() doesn't work on std::locale("") * [242]7286: placement operator delete issue * [243]7442: cxxabi.h does not match the C++ ABI ! * [244]7445: poor performance of std::locale::classic() in multi-threaded applications x86-64 specific --- 2661,2680 ---- C++ * [233]7320: g++ 3.2 relocation problem ! * [234]7470: vtable: virtual function pointers not in declaration order libstdc++ * [235]6410: Trouble with non-ASCII monetary symbols and wchar_t ! * [236]6503, [237]6642, [238]7186: Problems with comparing or subtracting various types of const and non-const iterators * [239]7216: ambiguity with basic_iostream::traits_type * [240]7220: problem with basic_istream::ignore(0,delimiter) * [241]7222: locale::operator==() doesn't work on std::locale("") * [242]7286: placement operator delete issue * [243]7442: cxxabi.h does not match the C++ ABI ! * [244]7445: poor performance of std::locale::classic() in multi-threaded applications x86-64 specific *************** GCC 3.2 *** 2295,2311 **** These pages are maintained by [248]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [249]GCC manuals. If that fails, the [250]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [251]gcc@gnu.org or [252]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. Last modified 2003-08-28 [253]Valid XHTML 1.0 --- 2688,2704 ---- These pages are maintained by [248]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [249]GCC manuals. If that fails, the [250]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [251]gcc@gnu.org or [252]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. Last modified 2003-08-28 [253]Valid XHTML 1.0 *************** http://gcc.gnu.org/gcc-3.1/index.html *** 2572,2600 **** July 27, 2002 ! The [1]GNU project and the GCC developers are pleased to announce the release of GCC 3.1.1. The links below still apply to GCC 3.1.1. May 15, 2002 ! The [2]GNU project and the GCC developers are pleased to announce the release of GCC 3.1. ! GCC used to stand for the GNU C Compiler, but since the compiler ! supports several other languages aside from C, it now stands for the GNU Compiler Collection. ! A list of [3]successful builds is updated as new information becomes available. ! The GCC developers would like to thank the numerous people that have ! contributed [4]new features, improvements, bug fixes, and other ! changes as well as test results to GCC. This [5]amazing group of volunteers is what makes GCC successful. ! For additional information about GCC please refer to the [6]GCC project web site or contact the [7]GCC development mailing list. To obtain GCC please use [8]our mirror sites, one of the [9]GNU mirror --- 2965,2993 ---- July 27, 2002 ! The [1]GNU project and the GCC developers are pleased to announce the release of GCC 3.1.1. The links below still apply to GCC 3.1.1. May 15, 2002 ! The [2]GNU project and the GCC developers are pleased to announce the release of GCC 3.1. ! GCC used to stand for the GNU C Compiler, but since the compiler ! supports several other languages aside from C, it now stands for the GNU Compiler Collection. ! A list of [3]successful builds is updated as new information becomes available. ! The GCC developers would like to thank the numerous people that have ! contributed [4]new features, improvements, bug fixes, and other ! changes as well as test results to GCC. This [5]amazing group of volunteers is what makes GCC successful. ! For additional information about GCC please refer to the [6]GCC project web site or contact the [7]GCC development mailing list. To obtain GCC please use [8]our mirror sites, one of the [9]GNU mirror *************** http://gcc.gnu.org/gcc-3.1/index.html *** 2602,2624 **** _________________________________________________________________ _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [11]gnu@gnu.org. There are also [12]other ways to contact the FSF. These pages are maintained by [13]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [14]GCC manuals. If that fails, the [15]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [16]gcc@gnu.org or [17]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. Last modified 2003-08-28 [18]Valid XHTML 1.0 --- 2995,3017 ---- _________________________________________________________________ _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [11]gnu@gnu.org. There are also [12]other ways to contact the FSF. These pages are maintained by [13]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [14]GCC manuals. If that fails, the [15]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [16]gcc@gnu.org or [17]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. Last modified 2003-08-28 [18]Valid XHTML 1.0 *************** http://gcc.gnu.org/gcc-3.1/changes.html *** 2651,2705 **** Additional changes in GCC 3.1.1 ! * A bug related to how structures and unions are returned has been fixed for powerpc-*-netbsd*. ! * An important bug in the implementation of -fprefetch-loop-arrays ! has been fixed. Previously the optimization prefetched random blocks of memory for most targets except for i386. ! * The Java compiler now compiles Java programs much faster and also works with parallel make. * Nested functions have been fixed for mips*-*-netbsd*. ! * Some missing floating point support routines have beed added for mips*-*-netbsd*. ! * This [1]message gives additional information about the bugs fixed in this release. Caveats * The -traditional C compiler option has been deprecated and will be ! removed in GCC 3.3. (It remains possible to preprocess non-C code with the traditional preprocessor.) ! * The default debugging format for most ELF platforms (including ! GNU/Linux and FreeBSD; notable exception is Solaris) has changed from stabs to DWARF2. This requires GDB 5.1.1 or later. General Optimizer Improvements ! * Jan Hubicka, SuSE Labs, together with Richard Henderson, Red Hat, ! and Andreas Jaeger, SuSE Labs, has contributed [2]infrastructure for profile driven optimizations. ! Options -fprofile-arcs and -fbranch-probabilities can now be used ! to improve speed of the generated code by profiling the actual ! program behaviour on typical runs. In the absence of profile info the compiler attempts to guess the profile statically. ! * [3]SPEC2000 and SPEC95 benchmark suites are now used daily to monitor performance of the generated code. ! According to the SPECInt2000 results on an AMD Athlon CPU, the code generated by GCC 3.1 is 6% faster on the average (8.2% faster ! with profile feedback) compared to GCC 3.0. The code produced by ! GCC 3.0 is about 2.1% faster compared to 2.95.3. Tests were done using the -O2 -march=athlon command-line options. ! * Alexandre Oliva, of Red Hat, has generalized the tree inlining ! infrastructure developed by CodeSourcery, LLC for the C++ front ! end, so that it is now used in the C front end too. Inlining functions as trees exposes them earlier to the compiler, giving it more opportunities for optimization. ! * Support for data prefetching instructions has been added to the ! GCC back end and several targets. A new __builtin_prefetch ! intrinsic is available to explicitly insert prefetch instructions and experimental support for loop array prefetching has been added (see -fprefetch-loop-array documentation). ! * Support for emitting debugging information for macros has been added for DWARF2. It is activated using -g3. New Languages and Language specific improvements --- 3044,3098 ---- Additional changes in GCC 3.1.1 ! * A bug related to how structures and unions are returned has been fixed for powerpc-*-netbsd*. ! * An important bug in the implementation of -fprefetch-loop-arrays ! has been fixed. Previously the optimization prefetched random blocks of memory for most targets except for i386. ! * The Java compiler now compiles Java programs much faster and also works with parallel make. * Nested functions have been fixed for mips*-*-netbsd*. ! * Some missing floating point support routines have beed added for mips*-*-netbsd*. ! * This [1]message gives additional information about the bugs fixed in this release. Caveats * The -traditional C compiler option has been deprecated and will be ! removed in GCC 3.3. (It remains possible to preprocess non-C code with the traditional preprocessor.) ! * The default debugging format for most ELF platforms (including ! GNU/Linux and FreeBSD; notable exception is Solaris) has changed from stabs to DWARF2. This requires GDB 5.1.1 or later. General Optimizer Improvements ! * Jan Hubicka, SuSE Labs, together with Richard Henderson, Red Hat, ! and Andreas Jaeger, SuSE Labs, has contributed [2]infrastructure for profile driven optimizations. ! Options -fprofile-arcs and -fbranch-probabilities can now be used ! to improve speed of the generated code by profiling the actual ! program behaviour on typical runs. In the absence of profile info the compiler attempts to guess the profile statically. ! * [3]SPEC2000 and SPEC95 benchmark suites are now used daily to monitor performance of the generated code. ! According to the SPECInt2000 results on an AMD Athlon CPU, the code generated by GCC 3.1 is 6% faster on the average (8.2% faster ! with profile feedback) compared to GCC 3.0. The code produced by ! GCC 3.0 is about 2.1% faster compared to 2.95.3. Tests were done using the -O2 -march=athlon command-line options. ! * Alexandre Oliva, of Red Hat, has generalized the tree inlining ! infrastructure developed by CodeSourcery, LLC for the C++ front ! end, so that it is now used in the C front end too. Inlining functions as trees exposes them earlier to the compiler, giving it more opportunities for optimization. ! * Support for data prefetching instructions has been added to the ! GCC back end and several targets. A new __builtin_prefetch ! intrinsic is available to explicitly insert prefetch instructions and experimental support for loop array prefetching has been added (see -fprefetch-loop-array documentation). ! * Support for emitting debugging information for macros has been added for DWARF2. It is activated using -g3. New Languages and Language specific improvements *************** New Languages and Language specific impr *** 2707,2727 **** C/C++ * A few more [4]ISO C99 features. ! * The preprocessor is 10-50% faster than the preprocessor in GCC 3.0. ! * The preprocessor's symbol table has been merged with the symbol table of the C, C++ and Objective-C front ends. * The preprocessor consumes less memory than the preprocessor in GCC ! 3.0, often significantly so. On normal input files, it typically consumes less memory than pre-3.0 cccp-based GCC, too. C++ ! * -fhonor-std and -fno-honor-std have been removed. -fno-honor-std ! was a workaround to allow std compliant code to work with the non-std compliant libstdc++-v2. libstdc++-v3 is std compliant. ! * The C++ ABI has been fixed so that void (A::*)() const is mangled ! as "M1AKFvvE", rather than "MK1AFvvE" as before. This change only affects pointer to cv-qualified member function types. * The C++ ABI has been changed to correctly handle this code: struct A { --- 3100,3120 ---- C/C++ * A few more [4]ISO C99 features. ! * The preprocessor is 10-50% faster than the preprocessor in GCC 3.0. ! * The preprocessor's symbol table has been merged with the symbol table of the C, C++ and Objective-C front ends. * The preprocessor consumes less memory than the preprocessor in GCC ! 3.0, often significantly so. On normal input files, it typically consumes less memory than pre-3.0 cccp-based GCC, too. C++ ! * -fhonor-std and -fno-honor-std have been removed. -fno-honor-std ! was a workaround to allow std compliant code to work with the non-std compliant libstdc++-v2. libstdc++-v3 is std compliant. ! * The C++ ABI has been fixed so that void (A::*)() const is mangled ! as "M1AKFvvE", rather than "MK1AFvvE" as before. This change only affects pointer to cv-qualified member function types. * The C++ ABI has been changed to correctly handle this code: struct A { *************** New Languages and Language specific impr *** 2734,2744 **** new B[10]; The amount of storage allocated for the array will be greater than ! it was in 3.0, in order to store the number of elements in the array, so that the correct size can be passed to operator delete[] ! when the array is deleted. Previously, the value passed to operator delete[] was unpredictable. ! This change will only affect code that declares a two-argument operator delete[] with a second parameter of type size_t in a base class, and does not override that definition in a derived class. * The C++ ABI has been changed so that: --- 3127,3137 ---- new B[10]; The amount of storage allocated for the array will be greater than ! it was in 3.0, in order to store the number of elements in the array, so that the correct size can be passed to operator delete[] ! when the array is deleted. Previously, the value passed to operator delete[] was unpredictable. ! This change will only affect code that declares a two-argument operator delete[] with a second parameter of type size_t in a base class, and does not override that definition in a derived class. * The C++ ABI has been changed so that: *************** New Languages and Language specific impr *** 2747,2764 **** void operator delete[] (void *); }; ! does not cause unnecessary storage to be allocated when an array of A objects is allocated. ! This change will only affect code that declares both of these ! forms of operator delete[], and declared the two-argument form before the one-argument form. * The C++ ABI has been changed so that when a parameter is passed by ! value, any cleanup for that parameter is performed in the caller, ! as specified by the ia64 C++ ABI, rather than the called function ! as before. As a result, classes with a non-trivial destructor but ! a trivial copy constructor will be passed and returned by invisible reference, rather than by bitwise copy as before. ! * G++ now supports the "named return value optimization": for code like A f () { A a; --- 3140,3157 ---- void operator delete[] (void *); }; ! does not cause unnecessary storage to be allocated when an array of A objects is allocated. ! This change will only affect code that declares both of these ! forms of operator delete[], and declared the two-argument form before the one-argument form. * The C++ ABI has been changed so that when a parameter is passed by ! value, any cleanup for that parameter is performed in the caller, ! as specified by the ia64 C++ ABI, rather than the called function ! as before. As a result, classes with a non-trivial destructor but ! a trivial copy constructor will be passed and returned by invisible reference, rather than by bitwise copy as before. ! * G++ now supports the "named return value optimization": for code like A f () { A a; *************** New Languages and Language specific impr *** 2766,2819 **** return a; } ! G++ will allocate a in the return value slot, so that the return ! becomes a no-op. For this to work, all return statements in the function must return the same variable. ! * Improvements to the C++ library are listed in [5]the libstdc++-v3 FAQ. Objective-C ! * Annoying linker warnings (due to incorrect code being generated) have been fixed. * If a class method cannot be found, the compiler no longer issues a ! warning if a corresponding instance method exists in the root class. * Forward @protocol declarations have been fixed. ! * Loading of categories has been fixed in certain situations (GNU run time only). ! * The class lookup in the run-time library has been rewritten so ! that class method dispatch is more than twice as fast as it used to be (GNU run time only). Java ! * libgcj now includes RMI, java.lang.ref.*, javax.naming, and javax.transaction. ! * Property files and other system resources can be compiled into executables which use libgcj using the new gcj --resource feature. ! * libgcj has been ported to more platforms. In particular there is now a mostly-functional mingw32 (Windows) target port. ! * JNI and CNI invocation interfaces were implemented, so gcj-compiled Java code can now be called from a C/C++ application. ! * gcj can now use builtin functions for certain known methods, for instance Math.cos. ! * gcj can now automatically remove redundant array-store checks in some common cases. ! * The --no-store-checks optimization option was added. This can be ! used to omit runtime store checks for code which is known not to throw ArrayStoreException ! * The following third party interface standards were added to libgcj: org.w3c.dom and org.xml.sax. ! * java.security has been merged with GNU Classpath. The new package is now JDK 1.2 compliant, and much more complete. * A bytecode verifier was added to the libgcj interpreter. ! * java.lang.Character was rewritten to comply with the Unicode 3.0 standard, and improve performance. * Partial support for many more locales was added to libgcj. * Socket timeouts have been implemented. ! * libgcj has been merged into a single shared library. There are no ! longer separate shared libraries for the garbage collector and zlib. * Several performance improvements were made to gcj and libgcj: + Hash synchronization (thin locks) --- 3159,3212 ---- return a; } ! G++ will allocate a in the return value slot, so that the return ! becomes a no-op. For this to work, all return statements in the function must return the same variable. ! * Improvements to the C++ library are listed in [5]the libstdc++-v3 FAQ. Objective-C ! * Annoying linker warnings (due to incorrect code being generated) have been fixed. * If a class method cannot be found, the compiler no longer issues a ! warning if a corresponding instance method exists in the root class. * Forward @protocol declarations have been fixed. ! * Loading of categories has been fixed in certain situations (GNU run time only). ! * The class lookup in the run-time library has been rewritten so ! that class method dispatch is more than twice as fast as it used to be (GNU run time only). Java ! * libgcj now includes RMI, java.lang.ref.*, javax.naming, and javax.transaction. ! * Property files and other system resources can be compiled into executables which use libgcj using the new gcj --resource feature. ! * libgcj has been ported to more platforms. In particular there is now a mostly-functional mingw32 (Windows) target port. ! * JNI and CNI invocation interfaces were implemented, so gcj-compiled Java code can now be called from a C/C++ application. ! * gcj can now use builtin functions for certain known methods, for instance Math.cos. ! * gcj can now automatically remove redundant array-store checks in some common cases. ! * The --no-store-checks optimization option was added. This can be ! used to omit runtime store checks for code which is known not to throw ArrayStoreException ! * The following third party interface standards were added to libgcj: org.w3c.dom and org.xml.sax. ! * java.security has been merged with GNU Classpath. The new package is now JDK 1.2 compliant, and much more complete. * A bytecode verifier was added to the libgcj interpreter. ! * java.lang.Character was rewritten to comply with the Unicode 3.0 standard, and improve performance. * Partial support for many more locales was added to libgcj. * Socket timeouts have been implemented. ! * libgcj has been merged into a single shared library. There are no ! longer separate shared libraries for the garbage collector and zlib. * Several performance improvements were made to gcj and libgcj: + Hash synchronization (thin locks) *************** New Languages and Language specific impr *** 2827,2834 **** Ada ! [7]Ada Core Technologies, Inc, has contributed its GNAT Ada 95 front ! end and associated tools. The GNAT compiler fully implements the Ada language as defined by the ISO/IEC 8652 standard. Please note that the integration of the Ada front end is still work in --- 3220,3227 ---- Ada ! [7]Ada Core Technologies, Inc, has contributed its GNAT Ada 95 front ! end and associated tools. The GNAT compiler fully implements the Ada language as defined by the ISO/IEC 8652 standard. Please note that the integration of the Ada front end is still work in *************** New Languages and Language specific impr *** 2836,2894 **** New Targets and Target Specific Improvements ! * Hans-Peter Nilsson has contributed a port to [8]MMIX, the CPU ! architecture used in new editions of Donald E. Knuth's The Art of Computer Programming. ! * [9]Axis Communications has contributed its port to the CRIS CPU ! architecture, used in the ETRAX system-on-a-chip series. See [10]Axis' developer site for technical information. ! * Alexandre Oliva, of Red Hat, has contributed a port to the ! [11]SuperH SH5 64-bit RISC microprocessor architecture, extending the existing SH port. ! * UltraSPARC is fully supported in 64-bit mode. The option -m64 enables it. ! * For compatibility with the Sun compiler #pragma redefine_extname has been implemented on Solaris. * The x86 back end has had some noticeable work done to it. ! + SuSE Labs developers Jan Hubicka, Bo Thorsen and Andreas ! Jaeger have contributed a port to the AMD x86-64 ! architecture. For more information on x86-64 see [12]http://www.x86-64.org. ! + The compiler now supports MMX, 3DNow!, SSE, and SSE2 ! instructions. Options -mmmx, -m3dnow, -msse, and -msse2 will ! enable the respective instruction sets. Intel C++ compatible ! MMX/3DNow!/SSE intrinsics are implemented. SSE2 intrinsics will be added in next major release. ! + Following those improvements, targets for Pentium MMX, K6-2, ! K6-3, Pentium III, Pentium 4, and Athlon 4 Mobile/XP/MP were ! added. Refer to the documentation on -march= and -mcpu= options for details. ! + For those targets that support it, -mfpmath=sse will cause ! the compiler to generate SSE/SSE2 instructions for floating ! point math instead of x87 instructions. Usually, this will ! lead to quicker code -- especially on the Pentium 4. Note that only scalar floating point instructions are used and GCC does not exploit SIMD features yet. ! + Prefetch support has been added to the Pentium III, Pentium 4, K6-2, K6-3, and Athlon series. ! + Code generated for floating point to integer conversions has ! been improved leading to better performance of many 3D applications. * The PowerPC back end has added 64-bit PowerPC GNU/Linux support. * C++ support for AIX has been improved. * Aldy Hernandez, of Red Hat, Inc, has contributed extensions to the ! PowerPC port supporting the AltiVec programming model (SIMD). The ! support, though presently useful, is experimental and is expected ! to stabilize for 3.2. The support is written to conform to Motorola's AltiVec specs. See -maltivec. Obsolete Systems ! Support for a number of older systems has been declared obsolete in ! GCC 3.1. Unless there is activity to revive them, the next release of GCC will have their sources permanently removed. ! All configurations of the following processor architectures have been declared obsolete: * MIL-STD-1750A, 1750a-*-* * AMD A29k, a29k-*-* --- 3229,3287 ---- New Targets and Target Specific Improvements ! * Hans-Peter Nilsson has contributed a port to [8]MMIX, the CPU ! architecture used in new editions of Donald E. Knuth's The Art of Computer Programming. ! * [9]Axis Communications has contributed its port to the CRIS CPU ! architecture, used in the ETRAX system-on-a-chip series. See [10]Axis' developer site for technical information. ! * Alexandre Oliva, of Red Hat, has contributed a port to the ! [11]SuperH SH5 64-bit RISC microprocessor architecture, extending the existing SH port. ! * UltraSPARC is fully supported in 64-bit mode. The option -m64 enables it. ! * For compatibility with the Sun compiler #pragma redefine_extname has been implemented on Solaris. * The x86 back end has had some noticeable work done to it. ! + SuSE Labs developers Jan Hubicka, Bo Thorsen and Andreas ! Jaeger have contributed a port to the AMD x86-64 ! architecture. For more information on x86-64 see [12]http://www.x86-64.org. ! + The compiler now supports MMX, 3DNow!, SSE, and SSE2 ! instructions. Options -mmmx, -m3dnow, -msse, and -msse2 will ! enable the respective instruction sets. Intel C++ compatible ! MMX/3DNow!/SSE intrinsics are implemented. SSE2 intrinsics will be added in next major release. ! + Following those improvements, targets for Pentium MMX, K6-2, ! K6-3, Pentium III, Pentium 4, and Athlon 4 Mobile/XP/MP were ! added. Refer to the documentation on -march= and -mcpu= options for details. ! + For those targets that support it, -mfpmath=sse will cause ! the compiler to generate SSE/SSE2 instructions for floating ! point math instead of x87 instructions. Usually, this will ! lead to quicker code -- especially on the Pentium 4. Note that only scalar floating point instructions are used and GCC does not exploit SIMD features yet. ! + Prefetch support has been added to the Pentium III, Pentium 4, K6-2, K6-3, and Athlon series. ! + Code generated for floating point to integer conversions has ! been improved leading to better performance of many 3D applications. * The PowerPC back end has added 64-bit PowerPC GNU/Linux support. * C++ support for AIX has been improved. * Aldy Hernandez, of Red Hat, Inc, has contributed extensions to the ! PowerPC port supporting the AltiVec programming model (SIMD). The ! support, though presently useful, is experimental and is expected ! to stabilize for 3.2. The support is written to conform to Motorola's AltiVec specs. See -maltivec. Obsolete Systems ! Support for a number of older systems has been declared obsolete in ! GCC 3.1. Unless there is activity to revive them, the next release of GCC will have their sources permanently removed. ! All configurations of the following processor architectures have been declared obsolete: * MIL-STD-1750A, 1750a-*-* * AMD A29k, a29k-*-* *************** Obsolete Systems *** 2900,2907 **** * Western Electric 32000, we32k-*-* Most configurations of the following processor architectures have been ! declared obsolete, but we are preserving a few systems which may have ! active developers. It is unlikely that the remaining systems will survive much longer unless we see definite signs of port activity. * Motorola 88000 except + Generic a.out, m88k-*-aout* --- 3293,3300 ---- * Western Electric 32000, we32k-*-* Most configurations of the following processor architectures have been ! declared obsolete, but we are preserving a few systems which may have ! active developers. It is unlikely that the remaining systems will survive much longer unless we see definite signs of port activity. * Motorola 88000 except + Generic a.out, m88k-*-aout* *************** Obsolete Systems *** 2916,2922 **** Finally, only some configurations of these processor architectures are being obsoleted. * Alpha: ! + OSF/1, alpha*-*-osf[123]*. (Digital Unix and Tru64 Unix, aka alpha*-*-osf[45], are still supported.) * ARM: + RISCiX, arm-*-riscix*. --- 3309,3315 ---- Finally, only some configurations of these processor architectures are being obsoleted. * Alpha: ! + OSF/1, alpha*-*-osf[123]*. (Digital Unix and Tru64 Unix, aka alpha*-*-osf[45], are still supported.) * ARM: + RISCiX, arm-*-riscix*. *************** Obsolete Systems *** 2933,2939 **** + RTEMS/coff, i?86-*-rtemscoff* + RTEMS/go32, i?86-go32-rtems* + Sequent/BSD, i?86-sequent-bsd* ! + Sequent/ptx before version 3, i?86-sequent-ptx[12]* and i?86-sequent-sysv3* + SunOS, i?86-*-sunos* * Motorola 68000: --- 3326,3332 ---- + RTEMS/coff, i?86-*-rtemscoff* + RTEMS/go32, i?86-go32-rtems* + Sequent/BSD, i?86-sequent-bsd* ! + Sequent/ptx before version 3, i?86-sequent-ptx[12]* and i?86-sequent-sysv3* + SunOS, i?86-*-sunos* * Motorola 68000: *************** Obsolete Systems *** 2961,2992 **** Documentation improvements ! * The old manual ("Using and Porting the GNU Compiler Collection") ! has been replaced by a users manual ("Using the GNU Compiler ! Collection") and a separate internals reference manual ("GNU Compiler Collection Internals"). * More complete and much improved documentation about GCC's internal representation used by the C and C++ front ends. * Many cleanups and improvements in general. _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [13]gnu@gnu.org. There are also [14]other ways to contact the FSF. These pages are maintained by [15]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [16]GCC manuals. If that fails, the [17]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [18]gcc@gnu.org or [19]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. Last modified 2003-08-28 [20]Valid XHTML 1.0 --- 3354,3385 ---- Documentation improvements ! * The old manual ("Using and Porting the GNU Compiler Collection") ! has been replaced by a users manual ("Using the GNU Compiler ! Collection") and a separate internals reference manual ("GNU Compiler Collection Internals"). * More complete and much improved documentation about GCC's internal representation used by the C and C++ front ends. * Many cleanups and improvements in general. _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [13]gnu@gnu.org. There are also [14]other ways to contact the FSF. These pages are maintained by [15]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [16]GCC manuals. If that fails, the [17]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [18]gcc@gnu.org or [19]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. Last modified 2003-08-28 [20]Valid XHTML 1.0 *************** http://gcc.gnu.org/gcc-3.0/gcc-3.0.html *** 3020,3048 **** February 20, 2002 ! The [1]GNU project and the GCC developers are pleased to announce the ! release of GCC 3.0.4, which is a bug-fix release for the GCC 3.0 series. ! GCC used to stand for the GNU C Compiler, but since the compiler ! supports several other languages aside from C, it now stands for the GNU Compiler Collection. ! GCC 3.0.x has several new optimizations, new targets, new languages ! and many other new features, relative to GCC 2.95.x. See the [2]new features page for a more complete list. ! A list of [3]successful builds is updated as new information becomes available. ! The GCC developers would like to thank the numerous people that have ! contributed new features, test results, bugfixes, etc to GCC. This [4]amazing group of volunteers is what makes GCC successful. ! And finally, we can't in good conscience fail to mention some [5]caveats to using GCC 3.0.x. ! For additional information about GCC please refer to the [6]GCC project web site or contact the [7]GCC development mailing list. To obtain GCC please use [8]our mirror sites, one of the [9]GNU mirror --- 3413,3441 ---- February 20, 2002 ! The [1]GNU project and the GCC developers are pleased to announce the ! release of GCC 3.0.4, which is a bug-fix release for the GCC 3.0 series. ! GCC used to stand for the GNU C Compiler, but since the compiler ! supports several other languages aside from C, it now stands for the GNU Compiler Collection. ! GCC 3.0.x has several new optimizations, new targets, new languages ! and many other new features, relative to GCC 2.95.x. See the [2]new features page for a more complete list. ! A list of [3]successful builds is updated as new information becomes available. ! The GCC developers would like to thank the numerous people that have ! contributed new features, test results, bugfixes, etc to GCC. This [4]amazing group of volunteers is what makes GCC successful. ! And finally, we can't in good conscience fail to mention some [5]caveats to using GCC 3.0.x. ! For additional information about GCC please refer to the [6]GCC project web site or contact the [7]GCC development mailing list. To obtain GCC please use [8]our mirror sites, one of the [9]GNU mirror *************** Previous 3.0.x Releases *** 3057,3079 **** June 18, 2001: GCC 3.0 has been released. _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [11]gnu@gnu.org. There are also [12]other ways to contact the FSF. These pages are maintained by [13]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [14]GCC manuals. If that fails, the [15]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [16]gcc@gnu.org or [17]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. Last modified 2003-08-28 [18]Valid XHTML 1.0 --- 3450,3472 ---- June 18, 2001: GCC 3.0 has been released. _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [11]gnu@gnu.org. There are also [12]other ways to contact the FSF. These pages are maintained by [13]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [14]GCC manuals. If that fails, the [15]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [16]gcc@gnu.org or [17]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. Last modified 2003-08-28 [18]Valid XHTML 1.0 *************** http://gcc.gnu.org/gcc-3.0/features.html *** 3105,3115 **** Additional changes in GCC 3.0.4 ! * GCC 3.0 now supports newer versions of the [1]NetBSD operating system, which use the ELF object file format, on x86 processors. ! * Correct debugging information is generated from functions that have lines from multiple files (e.g. yacc output). ! * A fix for whitespace handling in the -traditional preprocessor, which can affect Fortran. * Fixes to the exception handling runtime. * More fixes for bad code generation in C++. --- 3498,3508 ---- Additional changes in GCC 3.0.4 ! * GCC 3.0 now supports newer versions of the [1]NetBSD operating system, which use the ELF object file format, on x86 processors. ! * Correct debugging information is generated from functions that have lines from multiple files (e.g. yacc output). ! * A fix for whitespace handling in the -traditional preprocessor, which can affect Fortran. * Fixes to the exception handling runtime. * More fixes for bad code generation in C++. *************** Additional changes in GCC 3.0.3 *** 3122,3128 **** * A fix to correct an accidental change to the PowerPC ABI. * Fixes for bad code generation on a variety of architectures. ! * Improvements to the debugging information generated for C++ classes. * Fixes for bad code generation in C++. * A fix to avoid crashes in the C++ demangler. --- 3515,3521 ---- * A fix to correct an accidental change to the PowerPC ABI. * Fixes for bad code generation on a variety of architectures. ! * Improvements to the debugging information generated for C++ classes. * Fixes for bad code generation in C++. * A fix to avoid crashes in the C++ demangler. *************** Additional changes in GCC 3.0.1 *** 3149,3197 **** General Optimizer Improvements * [2]Basic block reordering pass. ! * New if-conversion pass with support for conditional (predicated) execution. * New tail call and sibling call elimination optimizations. * New register renaming pass. ! * New (experimental) [3]static single assignment (SSA) representation support. ! * New dead-code elimination pass implemented using the SSA representation. * [4]Global null pointer test elimination. * [5]Global code hoisting/unification. ! * More builtins and optimizations for stdio.h, string.h and old BSD functions, as well as for ISO C99 functions. ! * New builtin __builtin_expect for giving hints to the branch predictor. New Languages and Language specific improvements * The GNU Compiler for the Java(TM) language (GCJ) is now integrated ! and supported, including the run-time library containing most common non-GUI Java classes, a bytecode interpreter, and the Boehm conservative garbage collector. Many bugs have been fixed. GCJ can ! compile Java source or Java bytecodes to either native code or ! Java class files, and supports native methods written in either the standard JNI or the more efficient and convenient CNI. ! * Here is a [6]partial list of C++ improvements, both new features and those no longer supported. ! * New C++ ABI. On the IA-64 platform GCC is capable of inter-operating with other IA-64 compilers. ! * The new ABI also significantly reduces the size of symbol and debug information. ! * New [7]C++ support library and many C++ bug fixes, vastly improving our conformance to the ISO C++ standard. * New [8]inliner for C++. * Rewritten C preprocessor, integrated into the C, C++ and Objective C compilers, with very many improvements including ISO C99 support and [9]improvements to dependency generation. * Support for more [10]ISO C99 features. ! * Many improvements to support for checking calls to format ! functions such as printf and scanf, including support for ISO C99 format features, extensions from the Single Unix Specification and ! GNU libc 2.2, checking of strfmon formats and features to assist in auditing for format string security bugs. ! * New warnings for C code that may have undefined semantics because of violations of sequence point rules in the C standard (such as a = a++;, a[n] = b[n++]; and a[i++] = i;), included in -Wall. * Additional warning option -Wfloat-equal. --- 3542,3590 ---- General Optimizer Improvements * [2]Basic block reordering pass. ! * New if-conversion pass with support for conditional (predicated) execution. * New tail call and sibling call elimination optimizations. * New register renaming pass. ! * New (experimental) [3]static single assignment (SSA) representation support. ! * New dead-code elimination pass implemented using the SSA representation. * [4]Global null pointer test elimination. * [5]Global code hoisting/unification. ! * More builtins and optimizations for stdio.h, string.h and old BSD functions, as well as for ISO C99 functions. ! * New builtin __builtin_expect for giving hints to the branch predictor. New Languages and Language specific improvements * The GNU Compiler for the Java(TM) language (GCJ) is now integrated ! and supported, including the run-time library containing most common non-GUI Java classes, a bytecode interpreter, and the Boehm conservative garbage collector. Many bugs have been fixed. GCJ can ! compile Java source or Java bytecodes to either native code or ! Java class files, and supports native methods written in either the standard JNI or the more efficient and convenient CNI. ! * Here is a [6]partial list of C++ improvements, both new features and those no longer supported. ! * New C++ ABI. On the IA-64 platform GCC is capable of inter-operating with other IA-64 compilers. ! * The new ABI also significantly reduces the size of symbol and debug information. ! * New [7]C++ support library and many C++ bug fixes, vastly improving our conformance to the ISO C++ standard. * New [8]inliner for C++. * Rewritten C preprocessor, integrated into the C, C++ and Objective C compilers, with very many improvements including ISO C99 support and [9]improvements to dependency generation. * Support for more [10]ISO C99 features. ! * Many improvements to support for checking calls to format ! functions such as printf and scanf, including support for ISO C99 format features, extensions from the Single Unix Specification and ! GNU libc 2.2, checking of strfmon formats and features to assist in auditing for format string security bugs. ! * New warnings for C code that may have undefined semantics because of violations of sequence point rules in the C standard (such as a = a++;, a[n] = b[n++]; and a[i++] = i;), included in -Wall. * Additional warning option -Wfloat-equal. *************** New Targets and Target Specific Improvem *** 3202,3208 **** * New x86 back-end, generating much improved code. * Support for a generic i386-elf target contributed. ! * New option to emit x86 assembly code using Intel style syntax (-mintel-syntax). * HPUX 11 support contributed. * Improved PowerPC code generation, including scheduled prologue and --- 3595,3601 ---- * New x86 back-end, generating much improved code. * Support for a generic i386-elf target contributed. ! * New option to emit x86 assembly code using Intel style syntax (-mintel-syntax). * HPUX 11 support contributed. * Improved PowerPC code generation, including scheduled prologue and *************** New Targets and Target Specific Improvem *** 3213,3222 **** * Port of GCC to Intel's XScale processor contributed. * Port of GCC to Atmel's AVR microcontrollers contributed. * Port of GCC to Mitsubishi's D30V processor contributed. ! * Port of GCC to Matsushita's AM33 processor (a member of the MN10300 processor family) contributed. * Port of GCC to Fujitsu's FR30 processor contributed. ! * Port of GCC to Motorola's 68HC11 and 68HC12 processors contributed. * Port of GCC to Sun's picoJava processor core contributed. --- 3606,3615 ---- * Port of GCC to Intel's XScale processor contributed. * Port of GCC to Atmel's AVR microcontrollers contributed. * Port of GCC to Mitsubishi's D30V processor contributed. ! * Port of GCC to Matsushita's AM33 processor (a member of the MN10300 processor family) contributed. * Port of GCC to Fujitsu's FR30 processor contributed. ! * Port of GCC to Motorola's 68HC11 and 68HC12 processors contributed. * Port of GCC to Sun's picoJava processor core contributed. *************** Documentation improvements *** 3224,3237 **** * Substantially rewritten and improved C preprocessor manual. * Many improvements to other documentation. ! * Manpages for gcc, cpp and gcov are now generated automatically ! from the master Texinfo manual, eliminating the problem of ! manpages being out of date. (The generated manpages are only ! extracts from the full manual, which is provided in Texinfo form, ! from which info, HTML, other formats and a printed manual can be generated.) ! * Generated info files are included in the release tarballs ! alongside their Texinfo sources, avoiding problems on some platforms with building makeinfo as part of the GCC distribution. Other significant improvements --- 3617,3630 ---- * Substantially rewritten and improved C preprocessor manual. * Many improvements to other documentation. ! * Manpages for gcc, cpp and gcov are now generated automatically ! from the master Texinfo manual, eliminating the problem of ! manpages being out of date. (The generated manpages are only ! extracts from the full manual, which is provided in Texinfo form, ! from which info, HTML, other formats and a printed manual can be generated.) ! * Generated info files are included in the release tarballs ! alongside their Texinfo sources, avoiding problems on some platforms with building makeinfo as part of the GCC distribution. Other significant improvements *************** Other significant improvements *** 3239,3283 **** * Garbage collection used internally by the compiler for most memory allocation instead of obstacks. * Lengauer and Tarjan algorithm used for computing dominators in the ! CFG. This algorithm can be significantly faster and more space efficient than our older algorithm. ! * gccbug script provided to assist in submitting bug reports to our bug tracking system. (Bug reports previously submitted directly to ! our mailing lists, for which you received no bug tracking number, ! should be submitted again using gccbug if you can reproduce the problem with GCC 3.0.) ! * The internal libgcc library is [12]built as a shared library on systems that support it. ! * Extensive testsuite included with GCC, with many new tests. In ! addition to tests for GCC bugs that have been fixed, many tests ! have been added for language features, compiler warnings and builtin functions. ! * Additional language-independent warning options -Wpacked, -Wpadded, -Wunreachable-code and -Wdisabled-optimization. ! * Target-independent options -falign-functions, -falign-loops and -falign-jumps. ! Plus a great many bugfixes and almost all the [13]features found in GCC 2.95. _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [14]gnu@gnu.org. There are also [15]other ways to contact the FSF. These pages are maintained by [16]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [17]GCC manuals. If that fails, the [18]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [19]gcc@gnu.org or [20]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. Last modified 2003-08-28 [21]Valid XHTML 1.0 --- 3632,3676 ---- * Garbage collection used internally by the compiler for most memory allocation instead of obstacks. * Lengauer and Tarjan algorithm used for computing dominators in the ! CFG. This algorithm can be significantly faster and more space efficient than our older algorithm. ! * gccbug script provided to assist in submitting bug reports to our bug tracking system. (Bug reports previously submitted directly to ! our mailing lists, for which you received no bug tracking number, ! should be submitted again using gccbug if you can reproduce the problem with GCC 3.0.) ! * The internal libgcc library is [12]built as a shared library on systems that support it. ! * Extensive testsuite included with GCC, with many new tests. In ! addition to tests for GCC bugs that have been fixed, many tests ! have been added for language features, compiler warnings and builtin functions. ! * Additional language-independent warning options -Wpacked, -Wpadded, -Wunreachable-code and -Wdisabled-optimization. ! * Target-independent options -falign-functions, -falign-loops and -falign-jumps. ! Plus a great many bugfixes and almost all the [13]features found in GCC 2.95. _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [14]gnu@gnu.org. There are also [15]other ways to contact the FSF. These pages are maintained by [16]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [17]GCC manuals. If that fails, the [18]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [19]gcc@gnu.org or [20]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. Last modified 2003-08-28 [21]Valid XHTML 1.0 *************** http://gcc.gnu.org/gcc-3.0/caveats.html *** 3310,3366 **** GCC 3.0 Caveats ! * -fstrict-aliasing is now part of -O2 and higher optimization ! levels. This allows the compiler to assume the strictest aliasing ! rules applicable to the language being compiled. For C and C++, ! this activates optimizations based on the type of expressions. This optimization may thus break old, non-compliant code. ! * Enumerations are now properly promoted to int in function ! parameters and function returns. Normally this change is not visible, but when using -fshort-enums this is an ABI change. * The undocumented extension that allowed C programs to have a label ! at the end of a compound statement has been deprecated and may be ! removed in a future version. Programs that now generate a warning ! about this may be fixed by adding a null statement (a single semicolon) after the label. ! * The poorly documented extension that allowed string constants in ! C, C++ and Objective C to contain unescaped newlines has been ! deprecated and may be removed in a future version. Programs using ! this extension may be fixed in several ways: the bare newline may be replaced by \n, or preceded by \n\, or string concatenation may ! be used with the bare newline preceded by \n" and " placed at the start of the next line. * The Chill compiler is not included in GCC 3.0, because of the lack of a volunteer to convert it to use garbage collection. ! * Certain non-standard iostream methods from earlier versions of ! libstdc++ are not included in libstdc++ v3, i.e. filebuf::attach, ! ostream::form, and istream::gets. Here are workaround hints for: [1]ostream::form, [2]filebuf::attach. ! * The new C++ ABI is not yet fully supported by current (as of ! 2001-07-01) releases and development versions of GDB, or any ! earlier versions. There is a problem setting breakpoints by line ! number, and other related issues that have been fixed in GCC 3.0 but not yet handled in GDB: [3]http://gcc.gnu.org/ml/gcc-bugs/2001-06/msg00421.html _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [4]gnu@gnu.org. There are also [5]other ways to contact the FSF. These pages are maintained by [6]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [7]GCC manuals. If that fails, the [8]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [9]gcc@gnu.org or [10]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. Last modified 2003-08-28 [11]Valid XHTML 1.0 --- 3703,3759 ---- GCC 3.0 Caveats ! * -fstrict-aliasing is now part of -O2 and higher optimization ! levels. This allows the compiler to assume the strictest aliasing ! rules applicable to the language being compiled. For C and C++, ! this activates optimizations based on the type of expressions. This optimization may thus break old, non-compliant code. ! * Enumerations are now properly promoted to int in function ! parameters and function returns. Normally this change is not visible, but when using -fshort-enums this is an ABI change. * The undocumented extension that allowed C programs to have a label ! at the end of a compound statement has been deprecated and may be ! removed in a future version. Programs that now generate a warning ! about this may be fixed by adding a null statement (a single semicolon) after the label. ! * The poorly documented extension that allowed string constants in ! C, C++ and Objective C to contain unescaped newlines has been ! deprecated and may be removed in a future version. Programs using ! this extension may be fixed in several ways: the bare newline may be replaced by \n, or preceded by \n\, or string concatenation may ! be used with the bare newline preceded by \n" and " placed at the start of the next line. * The Chill compiler is not included in GCC 3.0, because of the lack of a volunteer to convert it to use garbage collection. ! * Certain non-standard iostream methods from earlier versions of ! libstdc++ are not included in libstdc++ v3, i.e. filebuf::attach, ! ostream::form, and istream::gets. Here are workaround hints for: [1]ostream::form, [2]filebuf::attach. ! * The new C++ ABI is not yet fully supported by current (as of ! 2001-07-01) releases and development versions of GDB, or any ! earlier versions. There is a problem setting breakpoints by line ! number, and other related issues that have been fixed in GCC 3.0 but not yet handled in GDB: [3]http://gcc.gnu.org/ml/gcc-bugs/2001-06/msg00421.html _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [4]gnu@gnu.org. There are also [5]other ways to contact the FSF. These pages are maintained by [6]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [7]GCC manuals. If that fails, the [8]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [9]gcc@gnu.org or [10]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. Last modified 2003-08-28 [11]Valid XHTML 1.0 *************** http://gcc.gnu.org/gcc-2.95/index.html *** 3394,3449 **** March 16, 2001: GCC version 2.95.3 has been released. ! GCC used to stand for the GNU C Compiler, but since the compiler ! supports several other languages aside from C, it now stands for the GNU Compiler Collection. ! The whole suite has been extensively [1]regression tested and ! [2]package tested. It should be reliable and suitable for widespread use. The compiler has several new optimizations, new targets, new languages ! and other new features. See the [3]new features page for a more complete list of new features found in the GCC 2.95 releases. ! The sources include installation instructions in both HTML and plaintext forms in the install directory in the distribution. However, ! the most up to date [4]installation instructions and [5]build/test ! status are on the web pages. We will update those pages as new information becomes available. ! The GCC developers would like to thank the numerous people that have ! contributed new features, test results, bugfixes, etc to GCC. This [6]amazing group of volunteers is what makes GCC successful. ! And finally, we can't in good conscience fail to mention some [7]caveats to using GCC 2.95. Download GCC 2.95 from the [8]GNU FTP server (ftp://ftp.gnu.org) [9]Find a GNU mirror site [10]Find a GCC mirror site ! For additional information about GCC please see the [11]GCC project web server or contact the [12]GCC development mailing list. _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [13]gnu@gnu.org. There are also [14]other ways to contact the FSF. These pages are maintained by [15]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [16]GCC manuals. If that fails, the [17]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [18]gcc@gnu.org or [19]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. Last modified 2003-08-28 [20]Valid XHTML 1.0 --- 3787,3842 ---- March 16, 2001: GCC version 2.95.3 has been released. ! GCC used to stand for the GNU C Compiler, but since the compiler ! supports several other languages aside from C, it now stands for the GNU Compiler Collection. ! The whole suite has been extensively [1]regression tested and ! [2]package tested. It should be reliable and suitable for widespread use. The compiler has several new optimizations, new targets, new languages ! and other new features. See the [3]new features page for a more complete list of new features found in the GCC 2.95 releases. ! The sources include installation instructions in both HTML and plaintext forms in the install directory in the distribution. However, ! the most up to date [4]installation instructions and [5]build/test ! status are on the web pages. We will update those pages as new information becomes available. ! The GCC developers would like to thank the numerous people that have ! contributed new features, test results, bugfixes, etc to GCC. This [6]amazing group of volunteers is what makes GCC successful. ! And finally, we can't in good conscience fail to mention some [7]caveats to using GCC 2.95. Download GCC 2.95 from the [8]GNU FTP server (ftp://ftp.gnu.org) [9]Find a GNU mirror site [10]Find a GCC mirror site ! For additional information about GCC please see the [11]GCC project web server or contact the [12]GCC development mailing list. _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [13]gnu@gnu.org. There are also [14]other ways to contact the FSF. These pages are maintained by [15]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [16]GCC manuals. If that fails, the [17]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [18]gcc@gnu.org or [19]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. Last modified 2003-08-28 [20]Valid XHTML 1.0 *************** http://gcc.gnu.org/gcc-2.95/features.htm *** 3476,3482 **** GCC 2.95 New Features * General Optimizer Improvements: ! + [1]Localized register spilling to improve speed and code density especially on small register class machines. + [2]Global CSE using lazy code motion algorithms. + [3]Improved global constant/copy propagation. --- 3869,3875 ---- GCC 2.95 New Features * General Optimizer Improvements: ! + [1]Localized register spilling to improve speed and code density especially on small register class machines. + [2]Global CSE using lazy code motion algorithms. + [3]Improved global constant/copy propagation. *************** http://gcc.gnu.org/gcc-2.95/features.htm *** 3493,3561 **** * New Languages and Language specific improvements + [8]Many C++ improvements. + [9]Many Fortran improvements. ! + [10]Java front-end has been integrated. [11]runtime library is available separately. + [12]ISO C99 support + [13]Chill front-end and runtime has been integrated. + Boehm garbage collector support in libobjc. ! + More support for various pragmas which appear in vendor include files * New Targets and Target Specific Improvements + [14]Sparc backend rewrite. ! + -mschedule=8000 will optimize code for PA8000 class ! processors; -mpa-risc-2-0 will generate code for PA2.0 processors ! + Various micro-optimizations for the ia32 port. K6 optimizations ! + Compiler will attempt to align doubles in the stack on the ia32 port + Alpha EV6 support + PowerPC 750 ! + RS6000/PowerPC: -mcpu=401 was added as an alias for ! -mcpu=403. -mcpu=e603e was added to do -mcpu=603e and -msoft-float. + c3x, c4x + HyperSparc + SparcLite86x + sh4 ! + Support for new systems (OpenBSD, FreeBSD, UWIN, Interix, arm-linux) + vxWorks targets include support for vxWorks threads ! + StrongARM 110 and ARM9 support added. ARM Scheduling parameters rewritten. ! + Various changes to the MIPS port to avoid assembler macros, which in turn improves performance + Various performance improvements to the i960 port. + Major rewrite of ns32k port * Other significant improvements + [15]Ability to dump cfg information and display it using vcg. ! + The new faster scheme for fixing vendor header files is enabled by default. + Experimental internationalization support. + multibyte character support + Some compile-time speedups for pathological problems + Better support for complex types * Plus the usual mountain of bugfixes ! * Core compiler is based on the gcc2 development tree from Sept 30, 1998, so we have all of the [16]features found in GCC 2.8. Additional Changes in GCC 2.95.1 * Generic bugfixes and improvements + Various documentation fixes related to the GCC/EGCS merger. ! + Fix memory management bug which could lead to spurious aborts, core dumps or random parsing errors in the compiler. ! + Fix a couple bugs in the dwarf1 and dwarf2 debug record support. + Fix infinite loop in the CSE optimizer. + Avoid undefined behavior in compiler FP emulation code ! + Fix install problem when prefix is overridden on the make install command. ! + Fix problem with unwanted installation of assert.h on some systems. + Fix problem with finding the wrong assembler in a single tree build. ! + Avoid increasing the known alignment of a register that is already known to be a pointer. * Platform specific bugfixes and improvements + Codegen bugfix for prologue/epilogue for cpu32 target. --- 3886,3954 ---- * New Languages and Language specific improvements + [8]Many C++ improvements. + [9]Many Fortran improvements. ! + [10]Java front-end has been integrated. [11]runtime library is available separately. + [12]ISO C99 support + [13]Chill front-end and runtime has been integrated. + Boehm garbage collector support in libobjc. ! + More support for various pragmas which appear in vendor include files * New Targets and Target Specific Improvements + [14]Sparc backend rewrite. ! + -mschedule=8000 will optimize code for PA8000 class ! processors; -mpa-risc-2-0 will generate code for PA2.0 processors ! + Various micro-optimizations for the ia32 port. K6 optimizations ! + Compiler will attempt to align doubles in the stack on the ia32 port + Alpha EV6 support + PowerPC 750 ! + RS6000/PowerPC: -mcpu=401 was added as an alias for ! -mcpu=403. -mcpu=e603e was added to do -mcpu=603e and -msoft-float. + c3x, c4x + HyperSparc + SparcLite86x + sh4 ! + Support for new systems (OpenBSD, FreeBSD, UWIN, Interix, arm-linux) + vxWorks targets include support for vxWorks threads ! + StrongARM 110 and ARM9 support added. ARM Scheduling parameters rewritten. ! + Various changes to the MIPS port to avoid assembler macros, which in turn improves performance + Various performance improvements to the i960 port. + Major rewrite of ns32k port * Other significant improvements + [15]Ability to dump cfg information and display it using vcg. ! + The new faster scheme for fixing vendor header files is enabled by default. + Experimental internationalization support. + multibyte character support + Some compile-time speedups for pathological problems + Better support for complex types * Plus the usual mountain of bugfixes ! * Core compiler is based on the gcc2 development tree from Sept 30, 1998, so we have all of the [16]features found in GCC 2.8. Additional Changes in GCC 2.95.1 * Generic bugfixes and improvements + Various documentation fixes related to the GCC/EGCS merger. ! + Fix memory management bug which could lead to spurious aborts, core dumps or random parsing errors in the compiler. ! + Fix a couple bugs in the dwarf1 and dwarf2 debug record support. + Fix infinite loop in the CSE optimizer. + Avoid undefined behavior in compiler FP emulation code ! + Fix install problem when prefix is overridden on the make install command. ! + Fix problem with unwanted installation of assert.h on some systems. + Fix problem with finding the wrong assembler in a single tree build. ! + Avoid increasing the known alignment of a register that is already known to be a pointer. * Platform specific bugfixes and improvements + Codegen bugfix for prologue/epilogue for cpu32 target. *************** Additional Changes in GCC 2.95.1 *** 3563,3595 **** + Fix various aborts in the SH compiler. + Fix bugs in libgcc support library for the SH. + Fix alpha ev6 code generation bug. ! + Fix problems with EXIT_SUCCESS/EXIT_FAILURE redefinitions on AIX platforms. + Fix -fpic code generation bug for rs6000/ppc svr4 targets. ! + Fix varargs/stdarg code generation bug for rs6000/ppc svr4 targets. + Fix weak symbol handling for rs6000/ppc svr4 targets. ! + Fix various problems with 64bit code generation for the rs6000/ppc port. ! + Fix codegen bug which caused tetex to be mis-compiled on the x86. + Fix compiler abort in new cfg code exposed by x86 port. ! + Fix out of range array reference in code convert flat registers to the x87 stacked FP register file. + Fix minor vxworks configuration bug. + Fix return type of bsearch for SunOS 4.x. * Language & Runtime specific fixes. ! + The G++ signature extension has been deprecated. It will be ! removed in the next major release of G++. Use of signatures will result in a warning from the compiler. + Several bugs relating to templates and namespaces were fixed. + A bug that caused crashes when combining templates with -g on DWARF1 platforms was fixed. ! + Pointers-to-members, virtual functions, and multiple inheritance should now work together correctly. ! + Some code-generation bugs relating to function try blocks were fixed. ! + G++ is a little bit more lenient with certain archaic constructs than in GCC 2.95. + Fix to prevent shared library version #s from bring truncated to 1 digit --- 3956,3988 ---- + Fix various aborts in the SH compiler. + Fix bugs in libgcc support library for the SH. + Fix alpha ev6 code generation bug. ! + Fix problems with EXIT_SUCCESS/EXIT_FAILURE redefinitions on AIX platforms. + Fix -fpic code generation bug for rs6000/ppc svr4 targets. ! + Fix varargs/stdarg code generation bug for rs6000/ppc svr4 targets. + Fix weak symbol handling for rs6000/ppc svr4 targets. ! + Fix various problems with 64bit code generation for the rs6000/ppc port. ! + Fix codegen bug which caused tetex to be mis-compiled on the x86. + Fix compiler abort in new cfg code exposed by x86 port. ! + Fix out of range array reference in code convert flat registers to the x87 stacked FP register file. + Fix minor vxworks configuration bug. + Fix return type of bsearch for SunOS 4.x. * Language & Runtime specific fixes. ! + The G++ signature extension has been deprecated. It will be ! removed in the next major release of G++. Use of signatures will result in a warning from the compiler. + Several bugs relating to templates and namespaces were fixed. + A bug that caused crashes when combining templates with -g on DWARF1 platforms was fixed. ! + Pointers-to-members, virtual functions, and multiple inheritance should now work together correctly. ! + Some code-generation bugs relating to function try blocks were fixed. ! + G++ is a little bit more lenient with certain archaic constructs than in GCC 2.95. + Fix to prevent shared library version #s from bring truncated to 1 digit *************** Additional Changes in GCC 2.95.1 *** 3599,3646 **** Additional Changes in GCC 2.95.2 ! The -fstrict-aliasing is not enabled by default for GCC 2.95.2. While ! the optimizations performed by -fstrict-aliasing are valid according ! to the C and C++ standards, the optimization have caused some problems, particularly with old non-conforming code. ! The GCC developers are experimenting with ways to warn users about ! code which violates the C/C++ standards, but those warnings are not ! ready for widespread use at this time. Rather than wait for those ! warnings the GCC developers have chosen to disable -fstrict-aliasing by default for the GCC 2.95.2 release. ! We strongly encourage developers to find and fix code which violates ! the C/C++ standards as -fstrict-aliasing may be enabled by default in ! future releases. Use the option -fstrict-aliasing to re-enable these optimizations. * Generic bugfixes and improvements ! + Fix incorrectly optimized memory reference in global common subexpression elimination (GCSE) optimization pass. ! + Fix code generation bug in regmove.c in which it could incorrectly change a "const" value. ! + Fix bug in optimization of conditionals involving volatile memory references. + Avoid over-allocation of stack space for some procedures. + Fixed bug in the compiler which caused incorrect optimization ! of an obscure series of bit manipulations, shifts and arithmetic. ! + Fixed register allocator bug which caused teTeX to be mis-compiled on Sparc targets. ! + Avoid incorrect optimization of degenerate case statements for certain targets such as the ARM. + Fix out of range memory reference in the jump optimizer. + Avoid dereferencing null pointer in fix-header. ! + Fix test for GCC specific features so that it is possible to bootstrap with gcc-2.6.2 and older versions of GCC. ! + Fix typo in scheduler which could potentially cause out of range memory accesses. + Avoid incorrect loop reversal which caused incorrect code for certain loops on PowerPC targets. ! + Avoid incorrect optimization of switch statements on certain targets (for example the ARM). * Platform specific bugfixes and improvements ! + Work around bug in Sun V5.0 compilers which caused bootstrap comparison failures on Sparc targets. + Fix Sparc backend bug which caused aborts in final.c. + Fix sparc-hal-solaris2* configuration fragments. --- 3992,4039 ---- Additional Changes in GCC 2.95.2 ! The -fstrict-aliasing is not enabled by default for GCC 2.95.2. While ! the optimizations performed by -fstrict-aliasing are valid according ! to the C and C++ standards, the optimization have caused some problems, particularly with old non-conforming code. ! The GCC developers are experimenting with ways to warn users about ! code which violates the C/C++ standards, but those warnings are not ! ready for widespread use at this time. Rather than wait for those ! warnings the GCC developers have chosen to disable -fstrict-aliasing by default for the GCC 2.95.2 release. ! We strongly encourage developers to find and fix code which violates ! the C/C++ standards as -fstrict-aliasing may be enabled by default in ! future releases. Use the option -fstrict-aliasing to re-enable these optimizations. * Generic bugfixes and improvements ! + Fix incorrectly optimized memory reference in global common subexpression elimination (GCSE) optimization pass. ! + Fix code generation bug in regmove.c in which it could incorrectly change a "const" value. ! + Fix bug in optimization of conditionals involving volatile memory references. + Avoid over-allocation of stack space for some procedures. + Fixed bug in the compiler which caused incorrect optimization ! of an obscure series of bit manipulations, shifts and arithmetic. ! + Fixed register allocator bug which caused teTeX to be mis-compiled on Sparc targets. ! + Avoid incorrect optimization of degenerate case statements for certain targets such as the ARM. + Fix out of range memory reference in the jump optimizer. + Avoid dereferencing null pointer in fix-header. ! + Fix test for GCC specific features so that it is possible to bootstrap with gcc-2.6.2 and older versions of GCC. ! + Fix typo in scheduler which could potentially cause out of range memory accesses. + Avoid incorrect loop reversal which caused incorrect code for certain loops on PowerPC targets. ! + Avoid incorrect optimization of switch statements on certain targets (for example the ARM). * Platform specific bugfixes and improvements ! + Work around bug in Sun V5.0 compilers which caused bootstrap comparison failures on Sparc targets. + Fix Sparc backend bug which caused aborts in final.c. + Fix sparc-hal-solaris2* configuration fragments. *************** Additional Changes in GCC 2.95.2 *** 3655,3679 **** + Fix x86 port to correctly pop the FP stack for functions that return structures in memory. + Fix minor bug in strlen x86 pattern. ! + Use stabs debugging instead of dwarf1 for x86-solaris targets. ! + Fix template repository code to handle leading underscore in mangled names. + Fix weak/weak alias support for OpenBSD. + GNU/Linux for the ARM has C++ compatible include files. * Language & Runtime specific fixes. ! + Fix handling of constructor attribute in the C front-end ! which caused problems building the Chill runtime library on some targets. + Fix minor problem merging type qualifiers in the C front-end. + Fix aliasing bug for pointers and references (C/C++). ! + Fix incorrect "non-constant initializer bug" when -traditional or -fwritable-strings is enabled. + Fix build error for Chill front-end on SunOS. ! + Do not complain about duplicate instantiations when using -frepo (C++). ! + Fix array bounds handling in C++ front-end which caused ! problems with dwarf debugging information in some circumstances. + Fix minor namespace problem. + Fix problem linking java programs. --- 4048,4072 ---- + Fix x86 port to correctly pop the FP stack for functions that return structures in memory. + Fix minor bug in strlen x86 pattern. ! + Use stabs debugging instead of dwarf1 for x86-solaris targets. ! + Fix template repository code to handle leading underscore in mangled names. + Fix weak/weak alias support for OpenBSD. + GNU/Linux for the ARM has C++ compatible include files. * Language & Runtime specific fixes. ! + Fix handling of constructor attribute in the C front-end ! which caused problems building the Chill runtime library on some targets. + Fix minor problem merging type qualifiers in the C front-end. + Fix aliasing bug for pointers and references (C/C++). ! + Fix incorrect "non-constant initializer bug" when -traditional or -fwritable-strings is enabled. + Fix build error for Chill front-end on SunOS. ! + Do not complain about duplicate instantiations when using -frepo (C++). ! + Fix array bounds handling in C++ front-end which caused ! problems with dwarf debugging information in some circumstances. + Fix minor namespace problem. + Fix problem linking java programs. *************** Additional Changes in GCC 2.95.2 *** 3681,3696 **** Additional Changes in GCC 2.95.3 * Generic bugfixes and improvements ! + Fix numerous problems that caused incorrect optimization in the register reloading code. ! + Fix numerous problems that caused incorrect optimization in the loop optimizer. ! + Fix aborts in the functions build_insn_chain and scan_loops under some circumstances. + Fix an alias analysis bug. + Fix an infinite compilation bug in the combiner. + A few problems with complex number support have been fixed. ! + It is no longer possible for gcc to act as a fork bomb when installed incorrectly. + The -fpack-struct option should be recognized now. + Fixed a bug that caused incorrect code to be generated due to --- 4074,4089 ---- Additional Changes in GCC 2.95.3 * Generic bugfixes and improvements ! + Fix numerous problems that caused incorrect optimization in the register reloading code. ! + Fix numerous problems that caused incorrect optimization in the loop optimizer. ! + Fix aborts in the functions build_insn_chain and scan_loops under some circumstances. + Fix an alias analysis bug. + Fix an infinite compilation bug in the combiner. + A few problems with complex number support have been fixed. ! + It is no longer possible for gcc to act as a fork bomb when installed incorrectly. + The -fpack-struct option should be recognized now. + Fixed a bug that caused incorrect code to be generated due to *************** Additional Changes in GCC 2.95.3 *** 3700,3728 **** + Fix attribute calculations in ARM toolchains. + arm-linux support has been improved. + Fix a PIC failure on sparc targets. ! + On ix86 targets, the regparm attribute should now work reliably. + Several updates for the h8300 port. + Fix problem building libio with glibc 2.2. _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [17]gnu@gnu.org. There are also [18]other ways to contact the FSF. These pages are maintained by [19]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [20]GCC manuals. If that fails, the [21]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [22]gcc@gnu.org or [23]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. Last modified 2003-08-28 [24]Valid XHTML 1.0 --- 4093,4121 ---- + Fix attribute calculations in ARM toolchains. + arm-linux support has been improved. + Fix a PIC failure on sparc targets. ! + On ix86 targets, the regparm attribute should now work reliably. + Several updates for the h8300 port. + Fix problem building libio with glibc 2.2. _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [17]gnu@gnu.org. There are also [18]other ways to contact the FSF. These pages are maintained by [19]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [20]GCC manuals. If that fails, the [21]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [22]gcc@gnu.org or [23]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. Last modified 2003-08-28 [24]Valid XHTML 1.0 *************** http://gcc.gnu.org/gcc-2.95/caveats.html *** 3758,3821 **** GCC 2.95 Caveats ! * GCC 2.95 will issue an error for invalid asm statements that had ! been silently accepted by earlier versions of the compiler. This ! is particularly noticeable when compiling older versions of the ! Linux kernel (2.0.xx). Please refer to the FAQ (as shipped with GCC 2.95) for more information on this issue. ! * GCC 2.95 implements type based alias analysis to disambiguate ! memory references. Some programs, particularly the Linux kernel ! violate ANSI/ISO aliasing rules and therefore may not operate correctly when compiled with GCC 2.95. Please refer to the FAQ (as shipped with GCC 2.95) for more information on this issue. ! * GCC 2.95 has a known bug in its handling of complex variables for ! 64bit targets. Instead of silently generating incorrect code, GCC ! 2.95 will issue a fatal error for situations it can not handle. This primarily affects the Fortran community as Fortran makes more use of complex variables than C or C++. ! * GCC 2.95 has an integrated libstdc++, but does not have an ! integrated libg++. Furthermore old libg++ releases will not work ! with GCC 2.95. You can retrieve a recent copy of libg++ from the [1]GCC ftp server. Note most C++ programs only need libstdc++. ! * Exception handling may not work with shared libraries, ! particularly on alphas, hppas, rs6000/powerpc and mips based ! platforms. Exception handling is known to work on x86 GNU/Linux platforms with shared libraries. ! * In general, GCC 2.95 is more rigorous about rejecting invalid C++ code or deprecated C++ constructs than G++ 2.7, G++ 2.8, EGCS 1.0, ! or EGCS 1.1. As a result it may be necessary to fix C++ code before it will compile with GCC 2.95. ! * G++ is also converting toward the ISO C++ standard; as a result ! code which was previously valid (and thus accepted by other ! compilers and older versions of g++) may no longer be accepted. ! The flag -fpermissive may allow some non-conforming code to compile with GCC 2.95. ! * GCC 2.95 compiled C++ code is not binary compatible with EGCS 1.1.x, EGCS 1.0.x or GCC 2.8.x. ! * GCC 2.95 does not have changes from the GCC 2.8 tree that were made between Sept 30, 1998 and April 30, 1999 (the official end of ! the GCC 2.8 project). Future GCC releases will include all the changes from the defunct GCC 2.8 sources. _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [2]gnu@gnu.org. There are also [3]other ways to contact the FSF. These pages are maintained by [4]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [5]GCC manuals. If that fails, the [6]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [7]gcc@gnu.org or [8]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. Last modified 2003-08-28 [9]Valid XHTML 1.0 --- 4151,4214 ---- GCC 2.95 Caveats ! * GCC 2.95 will issue an error for invalid asm statements that had ! been silently accepted by earlier versions of the compiler. This ! is particularly noticeable when compiling older versions of the ! Linux kernel (2.0.xx). Please refer to the FAQ (as shipped with GCC 2.95) for more information on this issue. ! * GCC 2.95 implements type based alias analysis to disambiguate ! memory references. Some programs, particularly the Linux kernel ! violate ANSI/ISO aliasing rules and therefore may not operate correctly when compiled with GCC 2.95. Please refer to the FAQ (as shipped with GCC 2.95) for more information on this issue. ! * GCC 2.95 has a known bug in its handling of complex variables for ! 64bit targets. Instead of silently generating incorrect code, GCC ! 2.95 will issue a fatal error for situations it can not handle. This primarily affects the Fortran community as Fortran makes more use of complex variables than C or C++. ! * GCC 2.95 has an integrated libstdc++, but does not have an ! integrated libg++. Furthermore old libg++ releases will not work ! with GCC 2.95. You can retrieve a recent copy of libg++ from the [1]GCC ftp server. Note most C++ programs only need libstdc++. ! * Exception handling may not work with shared libraries, ! particularly on alphas, hppas, rs6000/powerpc and mips based ! platforms. Exception handling is known to work on x86 GNU/Linux platforms with shared libraries. ! * In general, GCC 2.95 is more rigorous about rejecting invalid C++ code or deprecated C++ constructs than G++ 2.7, G++ 2.8, EGCS 1.0, ! or EGCS 1.1. As a result it may be necessary to fix C++ code before it will compile with GCC 2.95. ! * G++ is also converting toward the ISO C++ standard; as a result ! code which was previously valid (and thus accepted by other ! compilers and older versions of g++) may no longer be accepted. ! The flag -fpermissive may allow some non-conforming code to compile with GCC 2.95. ! * GCC 2.95 compiled C++ code is not binary compatible with EGCS 1.1.x, EGCS 1.0.x or GCC 2.8.x. ! * GCC 2.95 does not have changes from the GCC 2.8 tree that were made between Sept 30, 1998 and April 30, 1999 (the official end of ! the GCC 2.8 project). Future GCC releases will include all the changes from the defunct GCC 2.8 sources. _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [2]gnu@gnu.org. There are also [3]other ways to contact the FSF. These pages are maintained by [4]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [5]GCC manuals. If that fails, the [6]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [7]gcc@gnu.org or [8]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. Last modified 2003-08-28 [9]Valid XHTML 1.0 *************** http://gcc.gnu.org/egcs-1.1/index.html *** 3837,3874 **** EGCS 1.1 September 3, 1998: We are pleased to announce the release of EGCS 1.1. ! December 1, 1998: We are pleased to announce the release of EGCS 1.1.1. March 15, 1999: We are pleased to announce the release of EGCS 1.1.2. ! EGCS is a free software project to further the development of the GNU compilers using an open development environment. ! EGCS 1.1 is a major new release of the EGCS compiler system. It has ! been [1]extensively tested and is believed to be stable and suitable for widespread use. ! EGCS 1.1 is based on an June 6, 1998 snapshot of the GCC 2.8 ! development sources; it contains all of the new features found in GCC 2.8.1 as well as all new development from GCC up to June 6, 1998. EGCS 1.1 also contains many improvements and features not found in GCC or in older versions of EGCS: ! * Global common subexpression elimination and global constant/copy propagation (aka [2]gcse) * Ongoing improvements to the [3]alias analysis support to allow for better optimizations throughout the compiler. ! * Vastly improved [4]C++ compiler and integrated C++ runtime libraries. * Fixes for the /tmp symlink race security problems. * New targets including mips16, arm-thumb and 64 bit PowerPC. ! * Improvements to GNU Fortran (g77) compiler and runtime library made since g77 version 0.5.23. ! See the [5]new features page for a more complete list of new features found in EGCS 1.1 releases. ! EGCS 1.1.1 is a minor update to fix several serious problems in EGCS 1.1: * General improvements and fixes + Avoid some stack overflows when compiling large functions. --- 4230,4267 ---- EGCS 1.1 September 3, 1998: We are pleased to announce the release of EGCS 1.1. ! December 1, 1998: We are pleased to announce the release of EGCS 1.1.1. March 15, 1999: We are pleased to announce the release of EGCS 1.1.2. ! EGCS is a free software project to further the development of the GNU compilers using an open development environment. ! EGCS 1.1 is a major new release of the EGCS compiler system. It has ! been [1]extensively tested and is believed to be stable and suitable for widespread use. ! EGCS 1.1 is based on an June 6, 1998 snapshot of the GCC 2.8 ! development sources; it contains all of the new features found in GCC 2.8.1 as well as all new development from GCC up to June 6, 1998. EGCS 1.1 also contains many improvements and features not found in GCC or in older versions of EGCS: ! * Global common subexpression elimination and global constant/copy propagation (aka [2]gcse) * Ongoing improvements to the [3]alias analysis support to allow for better optimizations throughout the compiler. ! * Vastly improved [4]C++ compiler and integrated C++ runtime libraries. * Fixes for the /tmp symlink race security problems. * New targets including mips16, arm-thumb and 64 bit PowerPC. ! * Improvements to GNU Fortran (g77) compiler and runtime library made since g77 version 0.5.23. ! See the [5]new features page for a more complete list of new features found in EGCS 1.1 releases. ! EGCS 1.1.1 is a minor update to fix several serious problems in EGCS 1.1: * General improvements and fixes + Avoid some stack overflows when compiling large functions. *************** http://gcc.gnu.org/egcs-1.1/index.html *** 3882,3888 **** + Fix a few bad interactions between optimization and exception handling. + Fixes for demangling of template names starting with "__". ! + Fix a bug that would fail to run destructors in some cases with -O2. + Fix 'new' of classes with virtual bases. + Fix crash building Qt on the Alpha. --- 4275,4281 ---- + Fix a few bad interactions between optimization and exception handling. + Fixes for demangling of template names starting with "__". ! + Fix a bug that would fail to run destructors in some cases with -O2. + Fix 'new' of classes with virtual bases. + Fix crash building Qt on the Alpha. *************** http://gcc.gnu.org/egcs-1.1/index.html *** 3892,3898 **** + Various documentation fixes. + Avoid compiler crash on RAND intrinsic. + Fix minor bugs in makefiles exposed by BSD make programs. ! + Define _XOPEN_SOURCE for libI77 build to avoid potential problems on some 64-bit systems. + Fix problem with implicit endfile on rewind. + Fix spurious recursive I/O errors. --- 4285,4291 ---- + Various documentation fixes. + Avoid compiler crash on RAND intrinsic. + Fix minor bugs in makefiles exposed by BSD make programs. ! + Define _XOPEN_SOURCE for libI77 build to avoid potential problems on some 64-bit systems. + Fix problem with implicit endfile on rewind. + Fix spurious recursive I/O errors. *************** http://gcc.gnu.org/egcs-1.1/index.html *** 3903,3917 **** from unsigned ints to double precision floats. + Fix ARM ABI issue with NetBSD. + Fix a few arm code generation bugs. ! + Fixincludes will fix additional broken SCO OpenServer header files. ! + Fix a m68k backend bug which caused invalid offsets in reg+d addresses. + Fix problems with 64bit AIX 4.3 support. ! + Fix handling of long longs for varargs/stdarg functions on the ppc. + Minor fixes to CPP predefines for Windows. ! + Fix code generation problems with gpr<->fpr copies for 64bit ppc. + Fix a few coldfire code generation bugs. + Fix some more header file problems on SunOS 4.x. --- 4296,4310 ---- from unsigned ints to double precision floats. + Fix ARM ABI issue with NetBSD. + Fix a few arm code generation bugs. ! + Fixincludes will fix additional broken SCO OpenServer header files. ! + Fix a m68k backend bug which caused invalid offsets in reg+d addresses. + Fix problems with 64bit AIX 4.3 support. ! + Fix handling of long longs for varargs/stdarg functions on the ppc. + Minor fixes to CPP predefines for Windows. ! + Fix code generation problems with gpr<->fpr copies for 64bit ppc. + Fix a few coldfire code generation bugs. + Fix some more header file problems on SunOS 4.x. *************** http://gcc.gnu.org/egcs-1.1/index.html *** 3919,3934 **** + Fix Windows handling of TREE_SYMBOL_REFERENCED. + Fix x86 compiler abort in reg-stack pass. + Fix cygwin/windows problem with section attributes. ! + Fix Alpha code generation problem exposed by SMP Linux kernels. + Fix typo in m68k 32->64bit integer conversion. ! + Make sure target libraries build with -fPIC for PPC & Alpha targets. ! EGCS 1.1.2 is a minor update to fix several serious problems in EGCS 1.1.1: * General improvements and fixes ! + Fix bug in loop optimizer which caused the SPARC (and potentially other) ports to segfault. + Fix infinite recursion in alias analysis and combiner code. + Fix bug in regclass preferencing. --- 4312,4327 ---- + Fix Windows handling of TREE_SYMBOL_REFERENCED. + Fix x86 compiler abort in reg-stack pass. + Fix cygwin/windows problem with section attributes. ! + Fix Alpha code generation problem exposed by SMP Linux kernels. + Fix typo in m68k 32->64bit integer conversion. ! + Make sure target libraries build with -fPIC for PPC & Alpha targets. ! EGCS 1.1.2 is a minor update to fix several serious problems in EGCS 1.1.1: * General improvements and fixes ! + Fix bug in loop optimizer which caused the SPARC (and potentially other) ports to segfault. + Fix infinite recursion in alias analysis and combiner code. + Fix bug in regclass preferencing. *************** http://gcc.gnu.org/egcs-1.1/index.html *** 3937,3971 **** + Fix return value for builtin memcpy. + Reduce compile time for certain loops which exposed quadratic behavior in the loop optimizer. ! + Fix bug which caused volatile memory to be written multiple times when only one write was needed/desired. + Fix compiler abort in caller-save.c ! + Fix combiner bug which caused incorrect code generation for certain division by constant operations. ! + Fix incorrect code generation due to a bug in range check optimizations. ! + Fix incorrect code generation due to mis-handling of clobbered values in CSE. ! + Fix compiler abort/segfault due to incorrect register splitting when unrolling loops. ! + Fix code generation involving autoincremented addresses with ternary operators. ! + Work around bug in the scheduler which caused qt to be mis-compiled on some platforms. + Fix code generation problems with -fshort-enums. + Tighten security for temporary files. ! + Improve compile time for codes which make heavy use of overloaded functions. + Fix multiply defined constructor/destructor symbol problems. ! + Avoid setting bogus RPATH environment variable during bootstrap. + Avoid GNU-make dependencies in the texinfo subdir. ! + Install CPP wrapper script in $(prefix)/bin if --enable-cpp. ! --enable-cpp= can be used to specify an additional install directory for the cpp wrapper script. + Fix CSE bug which caused incorrect label-label refs to appear on some platforms. ! + Avoid linking in EH routines from libgcc if they are not needed. + Avoid obscure bug in aliasing code. + Fix bug in weak symbol handling. --- 4330,4364 ---- + Fix return value for builtin memcpy. + Reduce compile time for certain loops which exposed quadratic behavior in the loop optimizer. ! + Fix bug which caused volatile memory to be written multiple times when only one write was needed/desired. + Fix compiler abort in caller-save.c ! + Fix combiner bug which caused incorrect code generation for certain division by constant operations. ! + Fix incorrect code generation due to a bug in range check optimizations. ! + Fix incorrect code generation due to mis-handling of clobbered values in CSE. ! + Fix compiler abort/segfault due to incorrect register splitting when unrolling loops. ! + Fix code generation involving autoincremented addresses with ternary operators. ! + Work around bug in the scheduler which caused qt to be mis-compiled on some platforms. + Fix code generation problems with -fshort-enums. + Tighten security for temporary files. ! + Improve compile time for codes which make heavy use of overloaded functions. + Fix multiply defined constructor/destructor symbol problems. ! + Avoid setting bogus RPATH environment variable during bootstrap. + Avoid GNU-make dependencies in the texinfo subdir. ! + Install CPP wrapper script in $(prefix)/bin if --enable-cpp. ! --enable-cpp= can be used to specify an additional install directory for the cpp wrapper script. + Fix CSE bug which caused incorrect label-label refs to appear on some platforms. ! + Avoid linking in EH routines from libgcc if they are not needed. + Avoid obscure bug in aliasing code. + Fix bug in weak symbol handling. *************** http://gcc.gnu.org/egcs-1.1/index.html *** 3973,3984 **** + Fix detection of PPro/PII on Unixware 7. + Fix compiler segfault when building spec99 and other programs for SPARC targets. ! + Fix code-generation bugs for integer and floating point conditional move instructions on the PPro/PII. + Use fixincludes to fix byteorder problems on i?86-*-sysv. + Fix build failure for the arc port. + Fix floating point format configuration for i?86-gnu port. ! + Fix problems with hppa1.0-hp-hpux10.20 configuration when threads are enabled. + Fix coldfire code generation bugs. + Fix "unrecognized insn" problems for Alpha and PPC ports. --- 4366,4377 ---- + Fix detection of PPro/PII on Unixware 7. + Fix compiler segfault when building spec99 and other programs for SPARC targets. ! + Fix code-generation bugs for integer and floating point conditional move instructions on the PPro/PII. + Use fixincludes to fix byteorder problems on i?86-*-sysv. + Fix build failure for the arc port. + Fix floating point format configuration for i?86-gnu port. ! + Fix problems with hppa1.0-hp-hpux10.20 configuration when threads are enabled. + Fix coldfire code generation bugs. + Fix "unrecognized insn" problems for Alpha and PPC ports. *************** http://gcc.gnu.org/egcs-1.1/index.html *** 3989,3995 **** + Fix problems with old assembler on x86 NeXT systems. + Fix PIC code-generation problems for the SPARC port. + Fix minor bug with LONG_CALLS in PowerPC SVR4 support. ! + Fix minor ISO namespace violation in Alpha varargs/stdarg support. + Fix incorrect "braf" instruction usage for the SH port. + Fix minor bug in va-sh which prevented its use with -ansi. --- 4382,4388 ---- + Fix problems with old assembler on x86 NeXT systems. + Fix PIC code-generation problems for the SPARC port. + Fix minor bug with LONG_CALLS in PowerPC SVR4 support. ! + Fix minor ISO namespace violation in Alpha varargs/stdarg support. + Fix incorrect "braf" instruction usage for the SH port. + Fix minor bug in va-sh which prevented its use with -ansi. *************** http://gcc.gnu.org/egcs-1.1/index.html *** 3997,4027 **** + Handle OpenBSD systems correctly. + Minor fixincludes fix for Digital UNIX 4.0B. + Fix problems with ctors/dtors in SCO shared libraries. ! + Abort instead of generating incorrect code for PPro/PII floating point conditional moves. ! + Avoid multiply defined symbols on Linux/GNU systems using libc-5.4.xx. + Fix abort in alpha compiler. * Fortran-specific fixes ! + Fix the IDate intrinsic (VXT) (in libg2c) so the returned ! year is in the documented, non-Y2K-compliant range of 0-99, instead of being returned as 100 in the year 2000. ! + Fix the `Date_and_Time' intrinsic (in libg2c) to return the milliseconds value properly in Values(8). ! + Fix the `LStat' intrinsic (in libg2c) to return device-ID information properly in SArray(7). ! Each release includes installation instructions in both HTML and ! plaintext forms (see the INSTALL directory in the toplevel directory ! of the distribution). However, we also keep the most up to date [6]installation instructions and [7]build/test status on our web page. We will update those pages as new information becomes available. ! The EGCS project would like to thank the numerous people that have contributed new features, test results, bugfixes, etc. This [8]amazing group of volunteers is what makes EGCS successful. ! And finally, we can't in good conscience fail to mention some [9]caveats to using EGCS 1.1. Download EGCS from egcs.cygnus.com (USA California). --- 4390,4420 ---- + Handle OpenBSD systems correctly. + Minor fixincludes fix for Digital UNIX 4.0B. + Fix problems with ctors/dtors in SCO shared libraries. ! + Abort instead of generating incorrect code for PPro/PII floating point conditional moves. ! + Avoid multiply defined symbols on Linux/GNU systems using libc-5.4.xx. + Fix abort in alpha compiler. * Fortran-specific fixes ! + Fix the IDate intrinsic (VXT) (in libg2c) so the returned ! year is in the documented, non-Y2K-compliant range of 0-99, instead of being returned as 100 in the year 2000. ! + Fix the `Date_and_Time' intrinsic (in libg2c) to return the milliseconds value properly in Values(8). ! + Fix the `LStat' intrinsic (in libg2c) to return device-ID information properly in SArray(7). ! Each release includes installation instructions in both HTML and ! plaintext forms (see the INSTALL directory in the toplevel directory ! of the distribution). However, we also keep the most up to date [6]installation instructions and [7]build/test status on our web page. We will update those pages as new information becomes available. ! The EGCS project would like to thank the numerous people that have contributed new features, test results, bugfixes, etc. This [8]amazing group of volunteers is what makes EGCS successful. ! And finally, we can't in good conscience fail to mention some [9]caveats to using EGCS 1.1. Download EGCS from egcs.cygnus.com (USA California). *************** http://gcc.gnu.org/egcs-1.1/index.html *** 4030,4052 **** [10]Goto mirror list to find a closer site. _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [11]gnu@gnu.org. There are also [12]other ways to contact the FSF. These pages are maintained by [13]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [14]GCC manuals. If that fails, the [15]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [16]gcc@gnu.org or [17]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. Last modified 2003-08-28 [18]Valid XHTML 1.0 --- 4423,4445 ---- [10]Goto mirror list to find a closer site. _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [11]gnu@gnu.org. There are also [12]other ways to contact the FSF. These pages are maintained by [13]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [14]GCC manuals. If that fails, the [15]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [16]gcc@gnu.org or [17]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. Last modified 2003-08-28 [18]Valid XHTML 1.0 *************** http://gcc.gnu.org/egcs-1.1/features.htm *** 4076,4166 **** EGCS 1.1 new features ! * Integrated GNU Fortran (g77) compiler and runtime library with improvements, based on [1]g77 version 0.5.23. ! * Vast improvements in the C++ compiler; so many they have [2]page of their own! * Compiler implements [3]global common subexpression elimination and global copy/constant propagation. * More major improvements in the [4]alias analysis code. ! * More major improvements in the exception handling code to improve ! performance, lower static overhead and provide the infrastructure for future improvements. * The infamous /tmp symlink race security problems have been fixed. * The regmove optimization pass has been nearly completely rewritten to improve performance of generated code. ! * The compiler now recomputes register usage information before ! local register allocation. By providing more accurate information ! to the priority based allocator, we get better register allocation. ! * The register reloading phase of the compiler optimizes spill code much better than in previous releases. ! * Some bad interactions between the register allocator and ! instruction scheduler have been fixed, resulting in much better ! code for certain programs. Additionally, we have tuned the scheduler in various ways to improve performance of generated code for some architectures. ! * The compiler's branch shortening algorithms have been ! significantly improved to work better on targets which align jump targets. ! * The compiler now supports -Os to prefer optimizing for code space over optimizing for code speed. ! * The compiler will now totally eliminate library calls which ! compute constant values. This primarily helps targets with no ! integer div/mul support and targets without floating point support. * The compiler now supports an extensive "--help" option. ! * cpplib has been greatly improved and may be suitable for limited use. ! * Memory footprint for the compiler has been significantly reduced for some pathological cases. ! * The time to build EGCS has been improved for certain targets (particularly the alpha and mips platforms). * Many infrastructure improvements throughout the compiler, plus the usual mountain of bugfixes and minor improvements. * Target dependent improvements: ! + SPARC port now includes V8 plus and V9 support as well as ! performance tuning for Ultra class machines. The SPARC port now uses the Haifa scheduler. ! + Alpha port has been tuned for the EV6 processor and has an ! optimized expansion of memcpy/bzero. The Alpha port now uses the Haifa scheduler. ! + RS6000/PowerPC: support for the Power64 architecture and AIX 4.3. The RS6000/PowerPC port now uses the Haifa scheduler. ! + x86: Alignment of static store data and jump targets is per ! Intel recommendations now. Various improvements throughout ! the x86 port to improve performance on Pentium processors ! (including improved epilogue sequences for Pentium chips and backend improvements which should help register allocation on all x86 variants. Conditional move support has been fixed and ! enabled for PPro processors. The x86 port also better supports 64bit operations now. Unixware 7, a System V Release ! 5 target, is now supported and SCO OpenServer targets can support GAS. ! + MIPS has improved multiply/multiply-add support and now includes mips16 ISA support. + M68k has many micro-optimizations and Coldfire fixes. ! * Core compiler is based on the GCC development tree from June 9, 1998, so we have all of the [5]features found in GCC 2.8. _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [6]gnu@gnu.org. There are also [7]other ways to contact the FSF. These pages are maintained by [8]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [9]GCC manuals. If that fails, the [10]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [11]gcc@gnu.org or [12]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. Last modified 2003-08-28 [13]Valid XHTML 1.0 --- 4469,4559 ---- EGCS 1.1 new features ! * Integrated GNU Fortran (g77) compiler and runtime library with improvements, based on [1]g77 version 0.5.23. ! * Vast improvements in the C++ compiler; so many they have [2]page of their own! * Compiler implements [3]global common subexpression elimination and global copy/constant propagation. * More major improvements in the [4]alias analysis code. ! * More major improvements in the exception handling code to improve ! performance, lower static overhead and provide the infrastructure for future improvements. * The infamous /tmp symlink race security problems have been fixed. * The regmove optimization pass has been nearly completely rewritten to improve performance of generated code. ! * The compiler now recomputes register usage information before ! local register allocation. By providing more accurate information ! to the priority based allocator, we get better register allocation. ! * The register reloading phase of the compiler optimizes spill code much better than in previous releases. ! * Some bad interactions between the register allocator and ! instruction scheduler have been fixed, resulting in much better ! code for certain programs. Additionally, we have tuned the scheduler in various ways to improve performance of generated code for some architectures. ! * The compiler's branch shortening algorithms have been ! significantly improved to work better on targets which align jump targets. ! * The compiler now supports -Os to prefer optimizing for code space over optimizing for code speed. ! * The compiler will now totally eliminate library calls which ! compute constant values. This primarily helps targets with no ! integer div/mul support and targets without floating point support. * The compiler now supports an extensive "--help" option. ! * cpplib has been greatly improved and may be suitable for limited use. ! * Memory footprint for the compiler has been significantly reduced for some pathological cases. ! * The time to build EGCS has been improved for certain targets (particularly the alpha and mips platforms). * Many infrastructure improvements throughout the compiler, plus the usual mountain of bugfixes and minor improvements. * Target dependent improvements: ! + SPARC port now includes V8 plus and V9 support as well as ! performance tuning for Ultra class machines. The SPARC port now uses the Haifa scheduler. ! + Alpha port has been tuned for the EV6 processor and has an ! optimized expansion of memcpy/bzero. The Alpha port now uses the Haifa scheduler. ! + RS6000/PowerPC: support for the Power64 architecture and AIX 4.3. The RS6000/PowerPC port now uses the Haifa scheduler. ! + x86: Alignment of static store data and jump targets is per ! Intel recommendations now. Various improvements throughout ! the x86 port to improve performance on Pentium processors ! (including improved epilogue sequences for Pentium chips and backend improvements which should help register allocation on all x86 variants. Conditional move support has been fixed and ! enabled for PPro processors. The x86 port also better supports 64bit operations now. Unixware 7, a System V Release ! 5 target, is now supported and SCO OpenServer targets can support GAS. ! + MIPS has improved multiply/multiply-add support and now includes mips16 ISA support. + M68k has many micro-optimizations and Coldfire fixes. ! * Core compiler is based on the GCC development tree from June 9, 1998, so we have all of the [5]features found in GCC 2.8. _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [6]gnu@gnu.org. There are also [7]other ways to contact the FSF. These pages are maintained by [8]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [9]GCC manuals. If that fails, the [10]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [11]gcc@gnu.org or [12]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. Last modified 2003-08-28 [13]Valid XHTML 1.0 *************** http://gcc.gnu.org/egcs-1.1/caveats.html *** 4185,4231 **** EGCS 1.1 Caveats ! * EGCS has an integrated libstdc++, but does not have an integrated ! libg++. Furthermore old libg++ releases will not work with EGCS; ! HJ Lu has made a libg++-2.8.1.2 snapshot available which may work with EGCS. Note most C++ programs only need libstdc++. ! * Exception handling may not work with shared libraries, ! particularly on alphas, hppas, rs6000/powerpc and mips based ! platforms. Exception handling is known to work on x86-linux platforms with shared libraries. ! * Some versions of the Linux kernel have bugs which prevent them from being compiled or from running when compiled by EGCS. See the FAQ (as shipped with EGCS 1.1) for additional information. * In general, EGCS is more rigorous about rejecting invalid C++ code or deprecated C++ constructs than g++-2.7, g++-2.8 or EGCS 1.0. As ! a result it may be necessary to fix C++ code before it will compile with EGCS. ! * G++ is also converting toward the ISO C++ standard; as a result ! code which was previously valid (and thus accepted by other compilers and older versions of g++) may no longer be accepted. ! * EGCS 1.1 compiled C++ code is not binary compatible with EGCS 1.0.x or GCC 2.8.x due to changes necessary to support thread safe exception handling. _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [1]gnu@gnu.org. There are also [2]other ways to contact the FSF. These pages are maintained by [3]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [4]GCC manuals. If that fails, the [5]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [6]gcc@gnu.org or [7]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. Last modified 2003-08-28 [8]Valid XHTML 1.0 --- 4578,4624 ---- EGCS 1.1 Caveats ! * EGCS has an integrated libstdc++, but does not have an integrated ! libg++. Furthermore old libg++ releases will not work with EGCS; ! HJ Lu has made a libg++-2.8.1.2 snapshot available which may work with EGCS. Note most C++ programs only need libstdc++. ! * Exception handling may not work with shared libraries, ! particularly on alphas, hppas, rs6000/powerpc and mips based ! platforms. Exception handling is known to work on x86-linux platforms with shared libraries. ! * Some versions of the Linux kernel have bugs which prevent them from being compiled or from running when compiled by EGCS. See the FAQ (as shipped with EGCS 1.1) for additional information. * In general, EGCS is more rigorous about rejecting invalid C++ code or deprecated C++ constructs than g++-2.7, g++-2.8 or EGCS 1.0. As ! a result it may be necessary to fix C++ code before it will compile with EGCS. ! * G++ is also converting toward the ISO C++ standard; as a result ! code which was previously valid (and thus accepted by other compilers and older versions of g++) may no longer be accepted. ! * EGCS 1.1 compiled C++ code is not binary compatible with EGCS 1.0.x or GCC 2.8.x due to changes necessary to support thread safe exception handling. _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [1]gnu@gnu.org. There are also [2]other ways to contact the FSF. These pages are maintained by [3]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [4]GCC manuals. If that fails, the [5]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [6]gcc@gnu.org or [7]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. Last modified 2003-08-28 [8]Valid XHTML 1.0 *************** http://gcc.gnu.org/egcs-1.0/egcs-1.0.3.h *** 4249,4283 **** We are pleased to announce the release of EGCS 1.0.3. ! EGCS is a collaborative effort involving several groups of hackers ! using an open development model to accelerate development and testing of GNU compilers and runtime libraries. ! EGCS 1.0.3 is a minor update to the EGCS 1.0.2 compiler to fix a few problems reported by Red Hat for builds of Red Hat 5.1. * Generic bugfixes: ! + Fix a typo in the libio library which resulted in incorrect behavior of istream::get. + Fix the Fortran negative array index problem. ! + Fix a major problem with the ObjC runtime thread support exposed by glibc2. + Reduce memory consumption of the Haifa scheduler. * Target specific bugfixes: ! + Fix one x86 floating point code generation bug exposed by glibc2 builds. + Fix one x86 internal compiler error exposed by glibc2 builds. + Fix profiling bugs on the Alpha. + Fix ImageMagick & emacs 20.2 build problems on the Alpha. ! + Fix rs6000/ppc bug when converting values from integer types to floating point types. ! An important goal of EGCS is to allow wide scale testing of new features and optimizations which are still under development. However, ! EGCS has been carefully tested and should be comparable in quality to most GCC releases. ! EGCS 1.0.3 is based on an August 2, 1997 snapshot of the GCC 2.8 ! development sources; it contains nearly all of the new features found in GCC 2.8. EGCS also contains many improvements and features not found in GCC 2.7 --- 4642,4676 ---- We are pleased to announce the release of EGCS 1.0.3. ! EGCS is a collaborative effort involving several groups of hackers ! using an open development model to accelerate development and testing of GNU compilers and runtime libraries. ! EGCS 1.0.3 is a minor update to the EGCS 1.0.2 compiler to fix a few problems reported by Red Hat for builds of Red Hat 5.1. * Generic bugfixes: ! + Fix a typo in the libio library which resulted in incorrect behavior of istream::get. + Fix the Fortran negative array index problem. ! + Fix a major problem with the ObjC runtime thread support exposed by glibc2. + Reduce memory consumption of the Haifa scheduler. * Target specific bugfixes: ! + Fix one x86 floating point code generation bug exposed by glibc2 builds. + Fix one x86 internal compiler error exposed by glibc2 builds. + Fix profiling bugs on the Alpha. + Fix ImageMagick & emacs 20.2 build problems on the Alpha. ! + Fix rs6000/ppc bug when converting values from integer types to floating point types. ! An important goal of EGCS is to allow wide scale testing of new features and optimizations which are still under development. However, ! EGCS has been carefully tested and should be comparable in quality to most GCC releases. ! EGCS 1.0.3 is based on an August 2, 1997 snapshot of the GCC 2.8 ! development sources; it contains nearly all of the new features found in GCC 2.8. EGCS also contains many improvements and features not found in GCC 2.7 *************** http://gcc.gnu.org/egcs-1.0/egcs-1.0.3.h *** 4290,4339 **** * New instruction scheduler. * New alias analysis code. ! See the [1]new features page for a more complete list of new features found in EGCS 1.0.x releases. The EGCS 1.0.3 release includes installation instructions in both HTML ! and plaintext forms (see the INSTALL directory in the toplevel ! directory of the EGCS 1.0.3 distribution). However, we also keep the ! most up to date [2]installation instructions and [3]build/test status on our web page. We will update those pages as new information becomes available. ! And, we can't in good conscience fail to mention some [4]caveats to using EGCS. ! Update: Big thanks to Stanford for providing a high speed link for downloading EGCS (go.cygnus.com)! ! Download EGCS from ftp.cygnus.com (USA California) or go.cygnus.com (USA California -- High speed link provided by Stanford). The EGCS 1.0.3 release is also available on many mirror sites. [5]Goto mirror list to find a closer site ! We'd like to thank the numerous people that have contributed new ! features, test results, bugfixes, etc. Unfortunately, they're far too numerous to mention by name. _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [6]gnu@gnu.org. There are also [7]other ways to contact the FSF. These pages are maintained by [8]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [9]GCC manuals. If that fails, the [10]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [11]gcc@gnu.org or [12]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. Last modified 2003-08-28 [13]Valid XHTML 1.0 --- 4683,4732 ---- * New instruction scheduler. * New alias analysis code. ! See the [1]new features page for a more complete list of new features found in EGCS 1.0.x releases. The EGCS 1.0.3 release includes installation instructions in both HTML ! and plaintext forms (see the INSTALL directory in the toplevel ! directory of the EGCS 1.0.3 distribution). However, we also keep the ! most up to date [2]installation instructions and [3]build/test status on our web page. We will update those pages as new information becomes available. ! And, we can't in good conscience fail to mention some [4]caveats to using EGCS. ! Update: Big thanks to Stanford for providing a high speed link for downloading EGCS (go.cygnus.com)! ! Download EGCS from ftp.cygnus.com (USA California) or go.cygnus.com (USA California -- High speed link provided by Stanford). The EGCS 1.0.3 release is also available on many mirror sites. [5]Goto mirror list to find a closer site ! We'd like to thank the numerous people that have contributed new ! features, test results, bugfixes, etc. Unfortunately, they're far too numerous to mention by name. _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [6]gnu@gnu.org. There are also [7]other ways to contact the FSF. These pages are maintained by [8]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [9]GCC manuals. If that fails, the [10]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [11]gcc@gnu.org or [12]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. Last modified 2003-08-28 [13]Valid XHTML 1.0 *************** http://gcc.gnu.org/egcs-1.0/egcs-1.0.2.h *** 4362,4399 **** We are pleased to announce the release of EGCS 1.0.2. ! EGCS is a collaborative effort involving several groups of hackers ! using an open development model to accelerate development and testing of GNU compilers and runtime libraries. EGCS 1.0.2 is a minor update to the EGCS 1.0.1 compiler to fix several serious problems in EGCS 1.0.1. * General improvements and fixes ! + Memory consumption significantly reduced, especially for templates and inline functions. + Fix various problems with glibc2.1. + Fix loop optimization bug exposed by rs6000/ppc port. + Fix to avoid potential code generation problems in jump.c. + Fix some undefined symbol problems in dwarf1 debug support. * g++/libstdc++ improvements and fixes ! + libstdc++ in the EGCS release has been updated and should be link compatible with libstdc++-2.8. ! + Various fixes in libio/libstdc++ to work better on Linux systems. ! + Fix problems with duplicate symbols on systems that do not support weak symbols. ! + Memory corruption bug and undefined symbols in bastring have been fixed. + Various exception handling fixes. + Fix compiler abort for very long thunk names. * g77 improvements and fixes ! + Fix compiler crash for omitted bound in Fortran CASE statement. + Add missing entries to g77 lang-options. + Fix problem with -fpedantic in the g77 compiler. + Fix "backspace" problem with g77 on alphas. + Fix x86 backend problem with Fortran literals and -fpic. ! + Fix some of the problems with negative subscripts for g77 on alphas. + Fixes for Fortran builds on cygwin32/mingw32. * platform specific improvements and fixes --- 4755,4792 ---- We are pleased to announce the release of EGCS 1.0.2. ! EGCS is a collaborative effort involving several groups of hackers ! using an open development model to accelerate development and testing of GNU compilers and runtime libraries. EGCS 1.0.2 is a minor update to the EGCS 1.0.1 compiler to fix several serious problems in EGCS 1.0.1. * General improvements and fixes ! + Memory consumption significantly reduced, especially for templates and inline functions. + Fix various problems with glibc2.1. + Fix loop optimization bug exposed by rs6000/ppc port. + Fix to avoid potential code generation problems in jump.c. + Fix some undefined symbol problems in dwarf1 debug support. * g++/libstdc++ improvements and fixes ! + libstdc++ in the EGCS release has been updated and should be link compatible with libstdc++-2.8. ! + Various fixes in libio/libstdc++ to work better on Linux systems. ! + Fix problems with duplicate symbols on systems that do not support weak symbols. ! + Memory corruption bug and undefined symbols in bastring have been fixed. + Various exception handling fixes. + Fix compiler abort for very long thunk names. * g77 improvements and fixes ! + Fix compiler crash for omitted bound in Fortran CASE statement. + Add missing entries to g77 lang-options. + Fix problem with -fpedantic in the g77 compiler. + Fix "backspace" problem with g77 on alphas. + Fix x86 backend problem with Fortran literals and -fpic. ! + Fix some of the problems with negative subscripts for g77 on alphas. + Fixes for Fortran builds on cygwin32/mingw32. * platform specific improvements and fixes *************** http://gcc.gnu.org/egcs-1.0/egcs-1.0.2.h *** 4405,4411 **** + Fix -mcall-linux problem on rs6000/linux. + Fix stdarg/vararg problem for rs6000/linux. + Allow autoconf to select a proper install problem on AIX 3.1. ! + m68k port support includes -mcpu32 option as well as cpu32 multilibs. + Fix stdarg bug for irix6. + Allow EGCS to build on irix5 without the gnu assembler. --- 4798,4804 ---- + Fix -mcall-linux problem on rs6000/linux. + Fix stdarg/vararg problem for rs6000/linux. + Allow autoconf to select a proper install problem on AIX 3.1. ! + m68k port support includes -mcpu32 option as well as cpu32 multilibs. + Fix stdarg bug for irix6. + Allow EGCS to build on irix5 without the gnu assembler. *************** http://gcc.gnu.org/egcs-1.0/egcs-1.0.2.h *** 4415,4427 **** + Fix fixincludes handling of math.h on SunOS. + Minor fix for Motorola 3300 m68k systems. ! An important goal of EGCS is to allow wide scale testing of new features and optimizations which are still under development. However, ! EGCS has been carefully tested and should be comparable in quality to most GCC releases. ! EGCS 1.0.2 is based on an August 2, 1997 snapshot of the GCC 2.8 ! development sources; it contains nearly all of the new features found in GCC 2.8. EGCS also contains many improvements and features not found in GCC 2.7 --- 4808,4820 ---- + Fix fixincludes handling of math.h on SunOS. + Minor fix for Motorola 3300 m68k systems. ! An important goal of EGCS is to allow wide scale testing of new features and optimizations which are still under development. However, ! EGCS has been carefully tested and should be comparable in quality to most GCC releases. ! EGCS 1.0.2 is based on an August 2, 1997 snapshot of the GCC 2.8 ! development sources; it contains nearly all of the new features found in GCC 2.8. EGCS also contains many improvements and features not found in GCC 2.7 *************** http://gcc.gnu.org/egcs-1.0/egcs-1.0.2.h *** 4434,4483 **** * New instruction scheduler. * New alias analysis code. ! See the [1]new features page for a more complete list of new features found in EGCS 1.0.x releases. The EGCS 1.0.2 release includes installation instructions in both HTML ! and plaintext forms (see the INSTALL directory in the toplevel ! directory of the EGCS 1.0.2 distribution). However, we also keep the ! most up to date [2]installation instructions and [3]build/test status on our web page. We will update those pages as new information becomes available. ! And, we can't in good conscience fail to mention some [4]caveats to using EGCS. ! Update: Big thanks to Stanford for providing a high speed link for downloading EGCS (go.cygnus.com)! ! Download EGCS from ftp.cygnus.com (USA California) or go.cygnus.com (USA California -- High speed link provided by Stanford). The EGCS 1.0.2 release is also available on many mirror sites. [5]Goto mirror list to find a closer site ! We'd like to thank the numerous people that have contributed new ! features, test results, bugfixes, etc. Unfortunately, they're far too numerous to mention by name. _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [6]gnu@gnu.org. There are also [7]other ways to contact the FSF. These pages are maintained by [8]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [9]GCC manuals. If that fails, the [10]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [11]gcc@gnu.org or [12]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. Last modified 2003-08-28 [13]Valid XHTML 1.0 --- 4827,4876 ---- * New instruction scheduler. * New alias analysis code. ! See the [1]new features page for a more complete list of new features found in EGCS 1.0.x releases. The EGCS 1.0.2 release includes installation instructions in both HTML ! and plaintext forms (see the INSTALL directory in the toplevel ! directory of the EGCS 1.0.2 distribution). However, we also keep the ! most up to date [2]installation instructions and [3]build/test status on our web page. We will update those pages as new information becomes available. ! And, we can't in good conscience fail to mention some [4]caveats to using EGCS. ! Update: Big thanks to Stanford for providing a high speed link for downloading EGCS (go.cygnus.com)! ! Download EGCS from ftp.cygnus.com (USA California) or go.cygnus.com (USA California -- High speed link provided by Stanford). The EGCS 1.0.2 release is also available on many mirror sites. [5]Goto mirror list to find a closer site ! We'd like to thank the numerous people that have contributed new ! features, test results, bugfixes, etc. Unfortunately, they're far too numerous to mention by name. _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [6]gnu@gnu.org. There are also [7]other ways to contact the FSF. These pages are maintained by [8]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [9]GCC manuals. If that fails, the [10]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [11]gcc@gnu.org or [12]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. Last modified 2003-08-28 [13]Valid XHTML 1.0 *************** http://gcc.gnu.org/egcs-1.0/egcs-1.0.1.h *** 4506,4571 **** We are pleased to announce the release of EGCS 1.0.1. ! EGCS is a collaborative effort involving several groups of hackers ! using an open development model to accelerate development and testing of GNU compilers and runtime libraries. ! EGCS 1.0.1 is a minor update to the EGCS 1.0 compiler to fix a few critical bugs and add support for Red Hat 5.0 Linux. Changes since the EGCS 1.0 release: ! * Add support for Red Hat 5.0 Linux and better support for Linux systems using glibc2. ! Many programs failed to link when compiled with EGCS 1.0 on Red ! Hat 5.0 or on systems with newer versions of glibc2. EGCS 1.0.1 should fix these problems. ! * Compatibility with both EGCS 1.0 and GCC 2.8 libgcc exception handling interfaces. ! To avoid future compatibility problems, we strongly urge anyone ! who is planning on distributing shared libraries that contain C++ code to upgrade to EGCS 1.0.1 first. ! Soon after EGCS 1.0 was released, the GCC developers made some ! incompatible changes in libgcc's exception handling interfaces. ! These changes were needed to solve problems on some platforms. ! This means that GCC 2.8.0, when released, will not be seamlessly ! compatible with shared libraries built by EGCS 1.0. The reason is ! that the libgcc.a in GCC 2.8.0 will not contain a function needed by the old interface. ! The result of this is that there may be compatibility problems with shared libraries built by EGCS 1.0 when used with GCC 2.8.0. ! With EGCS 1.0.1, generated code uses the new (GCC 2.8.0) ! interface, and libgcc.a has the support routines for both the old ! and the new interfaces (so EGCS 1.0.1 and EGCS 1.0 code can be ! freely mixed, and EGCS 1.0.1 and GCC 2.8.0 code can be freely mixed). The maintainers of GCC 2.x have decided against including seamless ! support for the old interface in 2.8.0, since it was never "official", so to avoid future compatibility problems we recommend ! against distributing any shared libraries built by EGCS 1.0 that contain C++ code (upgrade to 1.0.1 and use that). * Various bugfixes in the x86, hppa, mips, and rs6000/ppc backends. ! The x86 changes fix code generation errors exposed when building glibc2 and the Linux dynamic linker (ld.so). ! The hppa change fixes a compiler abort when configured for use with RTEMS. ! The MIPS changes fix problems with the definition of LONG_MAX on newer systems, allow for command line selection of the target ABI, and fix one code generation problem. ! The rs6000/ppc change fixes some problems with passing structures to varargs/stdarg functions. ! * A few machine independent bugfixes, mostly to fix code generation errors when building Linux kernels or glibc. * Fix a few critical exception handling and template bugs in the C++ compiler. * Fix Fortran namelist bug on alphas. * Fix build problems on x86-solaris systems. ! An important goal of EGCS is to allow wide scale testing of new features and optimizations which are still under development. However, ! EGCS has been carefully tested and should be comparable in quality to most GCC releases. ! EGCS 1.0.1 is based on an August 2, 1997 snapshot of the GCC 2.8 ! development sources; it contains nearly all of the new features found in GCC 2.8. EGCS also contains many improvements and features not found in GCC 2.7 --- 4899,4964 ---- We are pleased to announce the release of EGCS 1.0.1. ! EGCS is a collaborative effort involving several groups of hackers ! using an open development model to accelerate development and testing of GNU compilers and runtime libraries. ! EGCS 1.0.1 is a minor update to the EGCS 1.0 compiler to fix a few critical bugs and add support for Red Hat 5.0 Linux. Changes since the EGCS 1.0 release: ! * Add support for Red Hat 5.0 Linux and better support for Linux systems using glibc2. ! Many programs failed to link when compiled with EGCS 1.0 on Red ! Hat 5.0 or on systems with newer versions of glibc2. EGCS 1.0.1 should fix these problems. ! * Compatibility with both EGCS 1.0 and GCC 2.8 libgcc exception handling interfaces. ! To avoid future compatibility problems, we strongly urge anyone ! who is planning on distributing shared libraries that contain C++ code to upgrade to EGCS 1.0.1 first. ! Soon after EGCS 1.0 was released, the GCC developers made some ! incompatible changes in libgcc's exception handling interfaces. ! These changes were needed to solve problems on some platforms. ! This means that GCC 2.8.0, when released, will not be seamlessly ! compatible with shared libraries built by EGCS 1.0. The reason is ! that the libgcc.a in GCC 2.8.0 will not contain a function needed by the old interface. ! The result of this is that there may be compatibility problems with shared libraries built by EGCS 1.0 when used with GCC 2.8.0. ! With EGCS 1.0.1, generated code uses the new (GCC 2.8.0) ! interface, and libgcc.a has the support routines for both the old ! and the new interfaces (so EGCS 1.0.1 and EGCS 1.0 code can be ! freely mixed, and EGCS 1.0.1 and GCC 2.8.0 code can be freely mixed). The maintainers of GCC 2.x have decided against including seamless ! support for the old interface in 2.8.0, since it was never "official", so to avoid future compatibility problems we recommend ! against distributing any shared libraries built by EGCS 1.0 that contain C++ code (upgrade to 1.0.1 and use that). * Various bugfixes in the x86, hppa, mips, and rs6000/ppc backends. ! The x86 changes fix code generation errors exposed when building glibc2 and the Linux dynamic linker (ld.so). ! The hppa change fixes a compiler abort when configured for use with RTEMS. ! The MIPS changes fix problems with the definition of LONG_MAX on newer systems, allow for command line selection of the target ABI, and fix one code generation problem. ! The rs6000/ppc change fixes some problems with passing structures to varargs/stdarg functions. ! * A few machine independent bugfixes, mostly to fix code generation errors when building Linux kernels or glibc. * Fix a few critical exception handling and template bugs in the C++ compiler. * Fix Fortran namelist bug on alphas. * Fix build problems on x86-solaris systems. ! An important goal of EGCS is to allow wide scale testing of new features and optimizations which are still under development. However, ! EGCS has been carefully tested and should be comparable in quality to most GCC releases. ! EGCS 1.0.1 is based on an August 2, 1997 snapshot of the GCC 2.8 ! development sources; it contains nearly all of the new features found in GCC 2.8. EGCS also contains many improvements and features not found in GCC 2.7 *************** http://gcc.gnu.org/egcs-1.0/egcs-1.0.1.h *** 4578,4627 **** * New instruction scheduler * New alias analysis code ! See the [1]new features page for a more complete list of new features found in EGCS 1.0.x releases. The EGCS 1.0.1 release includes installation instructions in both HTML ! and plaintext forms (see the INSTALL directory in the toplevel ! directory of the EGCS 1.0.1 distribution). However, we also keep the ! most up to date [2]installation instructions and [3]build/test status on our web page. We will update those pages as new information becomes available. ! And, we can't in good conscience fail to mention some [4]caveats to using EGCS. ! Update: Big thanks to Stanford for providing a high speed link for downloading EGCS (go.cygnus.com)! ! Download EGCS from ftp.cygnus.com (USA California) or go.cygnus.com (USA California -- High speed link provided by Stanford). The EGCS 1.0.1 release is also available on many mirror sites. [5]Goto mirror list to find a closer site ! We'd like to thank the numerous people that have contributed new ! features, test results, bugfixes, etc. Unfortunately, they're far too numerous to mention by name. _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [6]gnu@gnu.org. There are also [7]other ways to contact the FSF. These pages are maintained by [8]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [9]GCC manuals. If that fails, the [10]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [11]gcc@gnu.org or [12]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. Last modified 2003-08-28 [13]Valid XHTML 1.0 --- 4971,5020 ---- * New instruction scheduler * New alias analysis code ! See the [1]new features page for a more complete list of new features found in EGCS 1.0.x releases. The EGCS 1.0.1 release includes installation instructions in both HTML ! and plaintext forms (see the INSTALL directory in the toplevel ! directory of the EGCS 1.0.1 distribution). However, we also keep the ! most up to date [2]installation instructions and [3]build/test status on our web page. We will update those pages as new information becomes available. ! And, we can't in good conscience fail to mention some [4]caveats to using EGCS. ! Update: Big thanks to Stanford for providing a high speed link for downloading EGCS (go.cygnus.com)! ! Download EGCS from ftp.cygnus.com (USA California) or go.cygnus.com (USA California -- High speed link provided by Stanford). The EGCS 1.0.1 release is also available on many mirror sites. [5]Goto mirror list to find a closer site ! We'd like to thank the numerous people that have contributed new ! features, test results, bugfixes, etc. Unfortunately, they're far too numerous to mention by name. _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [6]gnu@gnu.org. There are also [7]other ways to contact the FSF. These pages are maintained by [8]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [9]GCC manuals. If that fails, the [10]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [11]gcc@gnu.org or [12]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. Last modified 2003-08-28 [13]Valid XHTML 1.0 *************** http://gcc.gnu.org/egcs-1.0/egcs-1.0.htm *** 4650,4667 **** We are pleased to announce the release of EGCS 1.0. ! EGCS is a collaborative effort involving several groups of hackers ! using an open development model to accelerate development and testing of GNU compilers and runtime libraries. ! An important goal of EGCS is to allow wide scale testing of experimental features and optimizations; therefore, EGCS contains some features and optimizations which are still under development. However, ! EGCS has been carefully tested and should be comparable in quality to most GCC releases. ! EGCS 1.0 is based on an August 2, 1997 snapshot of the GCC 2.8 ! development sources; it contains nearly all of the new features found in GCC 2.8. EGCS 1.0 also contains many improvements and features not found in GCC --- 5043,5060 ---- We are pleased to announce the release of EGCS 1.0. ! EGCS is a collaborative effort involving several groups of hackers ! using an open development model to accelerate development and testing of GNU compilers and runtime libraries. ! An important goal of EGCS is to allow wide scale testing of experimental features and optimizations; therefore, EGCS contains some features and optimizations which are still under development. However, ! EGCS has been carefully tested and should be comparable in quality to most GCC releases. ! EGCS 1.0 is based on an August 2, 1997 snapshot of the GCC 2.8 ! development sources; it contains nearly all of the new features found in GCC 2.8. EGCS 1.0 also contains many improvements and features not found in GCC *************** http://gcc.gnu.org/egcs-1.0/egcs-1.0.htm *** 4676,4728 **** See the [1]new features page for a more complete list of new features. ! The EGCS 1.0 release includes installation instructions in both HTML ! and plaintext forms (see the INSTALL directory in the toplevel ! directory of the EGCS 1.0 distribution). However, we also keep the ! most up to date [2]installation instructions and [3]build/test status on our web page. We will update those pages as new information becomes available. ! And, we can't in good conscience fail to mention some [4]caveats to using EGCS. ! Update: The T1 into our main California offices has been 100% ! saturated since shortly after the release. We've added an EGCS 1.0 ! mirror at our Massachusetts office to help share the load. We also ! encourage folks to use the many mirrors available throughout the world. ! Update: Big thanks to Stanford for providing a high speed link for downloading EGCS (go.cygnus.com)! ! Download EGCS from ftp.cygnus.com (USA California) or go.cygnus.com (USA California -- High speed link provided by Stanford). The EGCS 1.0 release should be available on most mirror sites by now. [5]Goto mirror list to find a closer site ! We'd like to thank the numerous people that have contributed new ! features, test results, bugfixes, etc. Unfortunately, they're far too numerous to mention by name. _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [6]gnu@gnu.org. There are also [7]other ways to contact the FSF. These pages are maintained by [8]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [9]GCC manuals. If that fails, the [10]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [11]gcc@gnu.org or [12]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. Last modified 2003-08-28 [13]Valid XHTML 1.0 --- 5069,5121 ---- See the [1]new features page for a more complete list of new features. ! The EGCS 1.0 release includes installation instructions in both HTML ! and plaintext forms (see the INSTALL directory in the toplevel ! directory of the EGCS 1.0 distribution). However, we also keep the ! most up to date [2]installation instructions and [3]build/test status on our web page. We will update those pages as new information becomes available. ! And, we can't in good conscience fail to mention some [4]caveats to using EGCS. ! Update: The T1 into our main California offices has been 100% ! saturated since shortly after the release. We've added an EGCS 1.0 ! mirror at our Massachusetts office to help share the load. We also ! encourage folks to use the many mirrors available throughout the world. ! Update: Big thanks to Stanford for providing a high speed link for downloading EGCS (go.cygnus.com)! ! Download EGCS from ftp.cygnus.com (USA California) or go.cygnus.com (USA California -- High speed link provided by Stanford). The EGCS 1.0 release should be available on most mirror sites by now. [5]Goto mirror list to find a closer site ! We'd like to thank the numerous people that have contributed new ! features, test results, bugfixes, etc. Unfortunately, they're far too numerous to mention by name. _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [6]gnu@gnu.org. There are also [7]other ways to contact the FSF. These pages are maintained by [8]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [9]GCC manuals. If that fails, the [10]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [11]gcc@gnu.org or [12]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. Last modified 2003-08-28 [13]Valid XHTML 1.0 *************** http://gcc.gnu.org/egcs-1.0/features.htm *** 4747,4806 **** EGCS 1.0 features ! * Core compiler is based on the gcc2 development tree from Aug 2, 1997, so we have most of the [1]features found in GCC 2.8. * Integrated GNU Fortran compiler based on g77-0.5.22-19970929. ! * Vast improvements in the C++ compiler; so many they have [2]page of their own! * Integrated C++ runtime libraries, including support for most major linux systems! ! * New instruction scheduler from IBM Haifa which includes support ! for function wide instruction scheduling as well as superscalar scheduling. * Significantly improved alias analysis code. * Improved register allocation for two address machines. ! * Significant code generation improvements for Fortran code on Alphas. ! * Various optimizations from the g77 project as well as improved loop optimizations. * Dwarf2 debug format support for some targets. ! * egcs libstdc++ includes the SGI STL implementation without changes. ! * As a result of these and other changes, egcs libstc++ is not binary compatible with previous releases of libstdc++. ! * Various new ports -- UltraSPARC, Irix6.2 & Irix6.3 support, The ! SCO Openserver 5 family (5.0.{0,2,4} and Internet FastStart 1.0 ! and 1.1), Support for RTEMS on several embedded targets, Support for arm-linux, Mitsubishi M32R, Hitachi H8/S, Matsushita MN102 and MN103, NEC V850, Sparclet, Solaris & Linux on PowerPCs, etc. * Integrated testsuites for gcc, g++, g77, libstdc++ and libio. ! * RS6000/PowerPC ports generate code which can run on all RS6000/PowerPC variants by default. ! * -mcpu= and -march= switches for the x86 port to allow better control over how the x86 port generates code. ! * Includes the template repository patch (aka repo patch); note the new template code makes repo obsolete for ELF systems using gnu-ld such as Linux. * Plus the usual assortment of bugfixes and improvements. _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [3]gnu@gnu.org. There are also [4]other ways to contact the FSF. These pages are maintained by [5]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [6]GCC manuals. If that fails, the [7]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [8]gcc@gnu.org or [9]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. Last modified 2003-08-28 [10]Valid XHTML 1.0 --- 5140,5199 ---- EGCS 1.0 features ! * Core compiler is based on the gcc2 development tree from Aug 2, 1997, so we have most of the [1]features found in GCC 2.8. * Integrated GNU Fortran compiler based on g77-0.5.22-19970929. ! * Vast improvements in the C++ compiler; so many they have [2]page of their own! * Integrated C++ runtime libraries, including support for most major linux systems! ! * New instruction scheduler from IBM Haifa which includes support ! for function wide instruction scheduling as well as superscalar scheduling. * Significantly improved alias analysis code. * Improved register allocation for two address machines. ! * Significant code generation improvements for Fortran code on Alphas. ! * Various optimizations from the g77 project as well as improved loop optimizations. * Dwarf2 debug format support for some targets. ! * egcs libstdc++ includes the SGI STL implementation without changes. ! * As a result of these and other changes, egcs libstc++ is not binary compatible with previous releases of libstdc++. ! * Various new ports -- UltraSPARC, Irix6.2 & Irix6.3 support, The ! SCO Openserver 5 family (5.0.{0,2,4} and Internet FastStart 1.0 ! and 1.1), Support for RTEMS on several embedded targets, Support for arm-linux, Mitsubishi M32R, Hitachi H8/S, Matsushita MN102 and MN103, NEC V850, Sparclet, Solaris & Linux on PowerPCs, etc. * Integrated testsuites for gcc, g++, g77, libstdc++ and libio. ! * RS6000/PowerPC ports generate code which can run on all RS6000/PowerPC variants by default. ! * -mcpu= and -march= switches for the x86 port to allow better control over how the x86 port generates code. ! * Includes the template repository patch (aka repo patch); note the new template code makes repo obsolete for ELF systems using gnu-ld such as Linux. * Plus the usual assortment of bugfixes and improvements. _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [3]gnu@gnu.org. There are also [4]other ways to contact the FSF. These pages are maintained by [5]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [6]GCC manuals. If that fails, the [7]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [8]gcc@gnu.org or [9]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. Last modified 2003-08-28 [10]Valid XHTML 1.0 *************** http://gcc.gnu.org/egcs-1.0/caveats.html *** 4822,4870 **** EGCS 1.0 Caveats ! * EGCS has an integrated libstdc++, but does not have an integrated libg++. Furthermore old libg++ releases will not work with egc; HJ Lu has made a libg++-2.8.1.2 available which may work with EGCS. Note most C++ programs only need libstdc++. ! * Note that using -pedantic or -Wreturn-type can cause an explosion ! in the amount of memory needed for template-heavy C++ code, such ! as code that uses STL. Also note that -Wall includes ! -Wreturn-type, so if you use -Wall you will need to specify -Wno-return-type to turn it off. ! * Exception handling may not work with shared libraries, particularly on alphas, hppas, and mips based platforms. Exception ! handling is known to work on x86-linux platforms with shared libraries. ! * Some versions of the Linux kernel have bugs which prevent them from being compiled or from running when compiled by EGCS. See the FAQ (as shipped with EGCS 1.0) for additional information. * In general, EGCS is more rigorous about rejecting invalid C++ code ! or deprecated C++ constructs than G++ 2.7. As a result it may be necessary to fix C++ code before it will compile with EGCS. ! * G++ is also aggressively tracking the C++ standard; as a result ! code which was previously valid (and thus accepted by other compilers and older versions of G++) may no longer be accepted. ! * EGCS 1.0 may not work with Red Hat Linux 5.0 on all targets. EGCS 1.0.x and later releases should work with Red Hat Linux 5.0. _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [1]gnu@gnu.org. There are also [2]other ways to contact the FSF. These pages are maintained by [3]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [4]GCC manuals. If that fails, the [5]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [6]gcc@gnu.org or [7]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. Last modified 2003-08-28 [8]Valid XHTML 1.0 --- 5215,5263 ---- EGCS 1.0 Caveats ! * EGCS has an integrated libstdc++, but does not have an integrated libg++. Furthermore old libg++ releases will not work with egc; HJ Lu has made a libg++-2.8.1.2 available which may work with EGCS. Note most C++ programs only need libstdc++. ! * Note that using -pedantic or -Wreturn-type can cause an explosion ! in the amount of memory needed for template-heavy C++ code, such ! as code that uses STL. Also note that -Wall includes ! -Wreturn-type, so if you use -Wall you will need to specify -Wno-return-type to turn it off. ! * Exception handling may not work with shared libraries, particularly on alphas, hppas, and mips based platforms. Exception ! handling is known to work on x86-linux platforms with shared libraries. ! * Some versions of the Linux kernel have bugs which prevent them from being compiled or from running when compiled by EGCS. See the FAQ (as shipped with EGCS 1.0) for additional information. * In general, EGCS is more rigorous about rejecting invalid C++ code ! or deprecated C++ constructs than G++ 2.7. As a result it may be necessary to fix C++ code before it will compile with EGCS. ! * G++ is also aggressively tracking the C++ standard; as a result ! code which was previously valid (and thus accepted by other compilers and older versions of G++) may no longer be accepted. ! * EGCS 1.0 may not work with Red Hat Linux 5.0 on all targets. EGCS 1.0.x and later releases should work with Red Hat Linux 5.0. _________________________________________________________________ ! Please send FSF & GNU inquiries & questions to [1]gnu@gnu.org. There are also [2]other ways to contact the FSF. These pages are maintained by [3]the GCC team. ! For questions related to the use of GCC, please consult these web ! pages and the [4]GCC manuals. If that fails, the [5]gcc-help@gcc.gnu.org mailing list might help. ! Please send comments on these web pages and the development of GCC ! to our public developer mailing list at [6]gcc@gnu.org or [7]gcc@gcc.gnu.org. ! Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ! Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. Last modified 2003-08-28 [8]Valid XHTML 1.0 diff -Nrc3pad gcc-3.3.2/gcc/ada/ChangeLog gcc-3.3.3/gcc/ada/ChangeLog *** gcc-3.3.2/gcc/ada/ChangeLog Thu Oct 16 19:43:01 2003 --- gcc-3.3.3/gcc/ada/ChangeLog Sat Feb 14 20:17:09 2004 *************** *** 1,3 **** --- 1,7 ---- + 2004-02-14 Release Manager + + * GCC 3.3.3 Released. + 2003-10-16 Release Manager * GCC 3.3.2 Released. diff -Nrc3pad gcc-3.3.2/gcc/ada/gnat-style.info gcc-3.3.3/gcc/ada/gnat-style.info *** gcc-3.3.2/gcc/ada/gnat-style.info Thu Oct 16 20:24:02 2003 --- gcc-3.3.3/gcc/ada/gnat-style.info Thu Jan 1 00:00:00 1970 *************** *** 1,483 **** - This is ada/gnat-style.info, produced by makeinfo version 4.2 from - ada/gnat-style.texi. - - INFO-DIR-SECTION Programming - START-INFO-DIR-ENTRY - * gnat-style: (gnat-style). GNAT Coding Style - END-INFO-DIR-ENTRY - - GNAT Coding Style - A guide for GNAT developers - Copyright (C) - 1992-2001 Ada Core Technologies, Inc. - -  - File: gnat-style.info, Node: Top, Next: General, Up: (dir) - - * Menu: - - * General:: - * Lexical Elements:: - * Declarations and Types:: - * Expressions and Names:: - * Statements:: - * Subprograms:: - * Packages:: - * Program Structure:: - -  - File: gnat-style.info, Node: General, Next: Lexical Elements, Prev: Top, Up: Top - - General - ******* - - Most of GNAT is written in Ada using a consistent style to ensure - readability of the code. This document has been written to help - maintain this consistent style, while having a large group of developers - work on the compiler. - - For the coding style in the C parts of the compiler and run time, see - the GNU Coding Guidelines. - - This document is structured after the Ada Reference manual. Those - familiar with that document should be able to quickly lookup style - rules for particular constructs. - -  - File: gnat-style.info, Node: Lexical Elements, Next: Declarations and Types, Prev: General, Up: Top - - Lexical Elements - **************** - - Character Set and Separators - ============================ - - * The character set used should be plain 7-bit ASCII. The only - separators allowed are space and the end-of-line sequence. No - other control character or format effector (such as HT, VT, FF) - should be used. The normal end-of-line sequence is used, which - may be LF, CR/LF or CR, depending on the host system. An optional - SUB (16#1A#) may be present as the last character in the file on - hosts using that character as file terminator. - - * Files that are checked in or distributed should be in host format. - - * A line should never be longer than 79 characters, not counting the - line separator. - - * Lines must not have trailing blanks. - - * Indentation is 3 characters per level for if statements, loops, - case statements. For exact information on required spacing - between lexical elements, see file `style.adb'. - - - Identifiers - =========== - - * Identifiers will start with an upper case letter, and each letter - following an underscore will be upper case. Short acronyms may be - all upper case. All other letters are lower case. An exception - is for identifiers matching a foreign language. In particular, we - use all lower case where appropriate for C. - - * Use underscores to separate words in an identifier. - - * Try to limit your use of abbreviations in identifiers. It is ok - to make a few abbreviations, explain what they mean, and then use - them frequently, but don't use lots of obscure abbreviations. An - example is the `ALI' word which stands for Ada Library Information - and is by convention always written in upper-case when used in - entity names. - - procedure Find_ALI_Files; - - * Don't use the variable `I', use `J' instead, `I' is too easily - mixed up with `1' in some fonts. Similarly don't use the variable - `O', which is too easily mixed up with `0'. - - Numeric Literals - ================ - - * Numeric literals should include underscores where helpful for - readability. - - 1_000_000 - 16#8000_000# - 3.14159_26535_89793_23846 - - Reserved Words - ============== - - * Reserved words use all lower case. - - return else - - * The words `Access', `Delta' and `Digits' are capitalized when used - as attribute_designator. - - Comments - ======== - - * Comment start with `-- ' (i.e. `--' followed by two spaces). The - only exception to this rule (i.e. one space is tolerated) is when - the comment ends with ` --'. It also accepted to have only one - space between `--' and the start of the comment when the comment - is at the end of a line, after some Ada code. - - * Every sentence in a comment should start with an upper-case letter - (including the first letter of the comment). - - * When declarations are commented with "hanging" comments, i.e. - comments after the declaration, there is no blank line before the - comment, and if it is absolutely necessary to have blank lines - within the comments these blank lines _do_ have a `--' (unlike the - normal rule, which is to use entirely blank lines for separating - comment paragraphs). The comment start at same level of - indentation as code they are commenting. - - z : Integer; - -- Integer value for storing value of z - -- - -- The previous line was a blank line. - - * Comments that are dubious or incomplete or comment on possibly - wrong or incomplete code should be preceded or followed by `???'. - - * Comments in a subprogram body must generally be surrounded by - blank lines, except after a `begin': - - begin - -- Comment for the next statement - - A := 5; - - -- Comment for the B statement - - B := 6; - - * In sequences of statements, comments at the end of the lines - should be aligned. - - My_Identifier := 5; -- First comment - Other_Id := 6; -- Second comment - - * Short comments that fit on a single line are _not_ ended with a - period. Comments taking more than a line are punctuated in the - normal manner. - - * Comments should focus on why instead of what. Descriptions of - what subprograms do go with the specification. - - * Comments describing a subprogram spec should specifically mention - the formal argument names. General rule: write a comment that - does not depend on the names of things. The names are - supplementary, not sufficient, as comments. - - * Do NOT put two spaces after periods in comments. - -  - File: gnat-style.info, Node: Declarations and Types, Next: Expressions and Names, Prev: Lexical Elements, Up: Top - - Declarations and Types - ********************** - - * In entity declarations, colons must be surrounded by spaces. - Colons should be aligned. - - Entity1 : Integer; - My_Entity : Integer; - - * Declarations should be grouped in a logical order. Related groups - of declarations may be preceded by a header comment. - - * All local subprograms in a subprogram or package body should be - declared before the first local subprogram body. - - * Don't declare local entities that hide global entities. - - * Don't declare multiple variables in one declaration that spans - lines. Start a new declaration on each line, instead. - - * The defining_identifiers of global declarations serve as comments - of a sort. So don't choose terse names, but look for names that - give useful information instead. - - * Local names can be shorter, because they are used only within one - context, where comments explain their purpose. - - -  - File: gnat-style.info, Node: Expressions and Names, Next: Statements, Prev: Declarations and Types, Up: Top - - Expressions and Names - ********************* - - * Every operator must be surrounded by spaces, except for the - exponentiation operator. - - E := A * B**2 + 3 * (C - D); - - * When folding a long line, fold before an operator, not after. - - * Use parentheses where they make the intended order of evaluation - clearer: - (A / B) * C - -  - File: gnat-style.info, Node: Statements, Next: Subprograms, Prev: Expressions and Names, Up: Top - - Statements - ********** - - Simple and Compound Statements - ============================== - - * Use only one statement or label per line. - - * A longer sequence_of_statements may be divided in logical groups - or separated from surrounding code using a blank line. - - If Statements - ============= - - * When the `if', `elsif' or `else' keywords fit on the same line - with the condition and the `then' keyword, then the statement is - formatted as follows: - - if CONDITION then - ... - elsif CONDITION then - ... - else - ... - end if; - - When the above layout is not possible, `then' should be aligned - with `if', and conditions should preferably be split before an - `and' or `or' keyword a follows: - - if LONG_CONDITION_THAT_HAS_TO_BE_SPLIT - and then CONTINUED_ON_THE_NEXT_LINE - then - ... - end if; - - The `elsif', `else' and `end if' always line up with the `if' - keyword. The preferred location for splitting the line is before - `and' or `or'. The continuation of a condition is indented with - two spaces or as many as needed to make nesting clear. As - exception, if conditions are closely related either of the - following is allowed: - - if x = lakdsjfhlkashfdlkflkdsalkhfsalkdhflkjdsahf - or else - x = asldkjhalkdsjfhhfd - or else - x = asdfadsfadsf - then - - if x = lakdsjfhlkashfdlkflkdsalkhfsalkdhflkjdsahf or else - x = asldkjhalkdsjfhhfd or else - x = asdfadsfadsf - then - - * Conditions should use short-circuit forms (`and then', `or else'). - - * Complex conditions in if statements are indented two characters: - - if THIS_COMPLEX_CONDITION - and then THAT_OTHER_ONE - and then ONE_LAST_ONE - then - ... - - * Every `if' block is preceded and followed by a blank line, except - where it begins or ends a sequence_of_statements. - - A := 5; - - if A = 5 then - null; - end if; - - A := 6; - - Case Statements - =============== - - * Layout is as below. For long case statements, the extra - indentation can be saved by aligning the when clauses with the - opening case. - - case EXPRESSION is - when CONDITION => - ... - when CONDITION => - ... - end case; - - Loop Statements - =============== - - When possible, have `for' or `while' on one line with the - condition and the `loop' keyword. - - for J in S'Range loop - ... - end loop; - - If the condition is too long, split the condition (see "If - statements" above) and align `loop' with the `for' or `while' - keyword. - - while LONG_CONDITION_THAT_HAS_TO_BE_SPLIT - and then CONTINUED_ON_THE_NEXT_LINE - loop - ... - end loop; - - If the loop_statement has an identifier, it is laid out as follows: - - Outer : while not CONDITION loop - ... - end Outer; - - Block Statements - ================ - - * The `declare' (optional), `begin' and `end' statements are - aligned, except when the block_statement is named. There is a - blank line before the `begin' keyword: - - Some_Block : declare - ... - - begin - ... - end Some_Block; - - -  - File: gnat-style.info, Node: Subprograms, Next: Packages, Prev: Statements, Up: Top - - Subprograms - *********** - - Subprogram Declarations - ======================= - - * Do not write the `in' for parameters, especially in functions: - - function Length (S : String) return Integer; - - * When the declaration line for a procedure or a function is too - long, fold it. In this case, align the colons, and, for - functions, the result type. - - function Head - (Source : String; - Count : Natural; - Pad : Character := Space) - return String; - - * The parameter list for a subprogram is preceded by a space: - - procedure Func (A : Integer); - - - Subprogram Bodies - ================= - - * The functions and procedures should always be sorted - alphabetically in a compilation unit. - - * All subprograms have a header giving the function name, with the - following format: - - ----------------- - -- My_Function -- - ----------------- - - procedure My_Function is - begin - - Note that the name in the header is preceded by a single space, - not two spaces as for other comments. - - * Every subprogram body must have a preceding subprogram_declaration. - - * If there any declarations in a subprogram, the `begin' keyword is - preceded by a blank line. - - * If the declarations in a subprogram contain at least one nested - subprogram body, then just before the of the enclosing subprogram - `begin', there is a line: - - -- Start of processing for ENCLOSING_SUBPROGRAM - - begin - - -  - File: gnat-style.info, Node: Packages, Next: Program Structure, Prev: Subprograms, Up: Top - - Packages and Visibility Rules - ***************************** - - * All program units and subprograms have their name at the end: - - package P is - ... - end P; - - * We will use the style of `use'-ing `with'-ed packages, with the - context clauses looking like: - - with A; use A; - with B; use B; - - * Names declared in the visible part of packages should be unique, - to prevent name clashes when the packages are `use'd. - - package Entity is - type Entity_Kind is ...; - ... - end Entity; - - * After the file header comment, the context clause and unit - specification should be the first thing in a program_unit. - -  - File: gnat-style.info, Node: Program Structure, Prev: Packages, Up: Top - - Program Structure and Compilation Issues - **************************************** - - * Every GNAT source file must be compiled with the `-gnatg' switch - to check the coding style (Note that you should look at - `style.adb' to see the lexical rules enforced by `-gnatg'). - - * Each source file should contain only one compilation unit. - - * Filenames should be 8 characters or less followed by the `.adb' - extension for a body or `.ads' for a spec. - - * Unit names should be distinct when krunched to 8 characters (see - `krunch.ads') and the filenames should match the unit name, except - that they are all lower case. - - -  - Tag Table: - Node: Top369 - Node: General596 - Node: Lexical Elements1194 - Node: Declarations and Types6078 - Node: Expressions and Names7174 - Node: Statements7659 - Node: Subprograms11650 - Node: Packages13383 - Node: Program Structure14236 -  - End Tag Table --- 0 ---- diff -Nrc3pad gcc-3.3.2/gcc/ada/gnat_rm.info gcc-3.3.3/gcc/ada/gnat_rm.info *** gcc-3.3.2/gcc/ada/gnat_rm.info Thu Oct 16 20:24:02 2003 --- gcc-3.3.3/gcc/ada/gnat_rm.info Thu Jan 1 00:00:00 1970 *************** *** 1,11454 **** - This is ada/gnat_rm.info, produced by makeinfo version 4.2 from - ada/gnat_rm.texi. - - INFO-DIR-SECTION GNU Ada tools - START-INFO-DIR-ENTRY - * GNAT Reference Manual: (gnat_rm). Reference Manual for GNU Ada tools. - END-INFO-DIR-ENTRY - - Copyright (C) 1995-2001, Free Software Foundation - - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.2 or - any later version published by the Free Software Foundation; with the - Invariant Sections being "GNU Free Documentation License", with the - Front-Cover Texts being "GNAT Reference Manual", and with no Back-Cover - Texts. A copy of the license is included in the section entitled "GNU - Free Documentation License". -  - File: gnat_rm.info, Node: Top, Next: About This Guide, Prev: (dir), Up: (dir) - - GNAT Reference Manual - ********************* - - GNAT Reference Manual - - GNAT, The GNU Ada 95 Compiler - - GNAT Version for GCC 3.3.2 - - Ada Core Technologies, Inc. - - Copyright (C) 1995-2001, Free Software Foundation - - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.2 or - any later version published by the Free Software Foundation; with the - Invariant Sections being "GNU Free Documentation License", with the - Front-Cover Texts being "GNAT Reference Manual", and with no Back-Cover - Texts. A copy of the license is included in the section entitled "GNU - Free Documentation License". - * Menu: - - * About This Guide:: - * Implementation Defined Pragmas:: - * Implementation Defined Attributes:: - * Implementation Advice:: - * Implementation Defined Characteristics:: - * Intrinsic Subprograms:: - * Representation Clauses and Pragmas:: - * Standard Library Routines:: - * The Implementation of Standard I/O:: - * The GNAT Library:: - * Interfacing to Other Languages:: - * Machine Code Insertions:: - * GNAT Implementation of Tasking:: - * Code generation for array aggregates:: - * Specialized Needs Annexes:: - * Compatibility Guide:: - * GNU Free Documentation License:: - * Index:: - - --- The Detailed Node Listing --- - - About This Guide - - * What This Reference Manual Contains:: - * Related Information:: - - The Implementation of Standard I/O - - * Standard I/O Packages:: - * FORM Strings:: - * Direct_IO:: - * Sequential_IO:: - * Text_IO:: - * Wide_Text_IO:: - * Stream_IO:: - * Shared Files:: - * Open Modes:: - * Operations on C Streams:: - * Interfacing to C Streams:: - - The GNAT Library - - * Ada.Characters.Latin_9 (a-chlat9.ads):: - * Ada.Characters.Wide_Latin_1 (a-cwila1.ads):: - * Ada.Characters.Wide_Latin_9 (a-cwila9.ads):: - * Ada.Command_Line.Remove (a-colire.ads):: - * Ada.Direct_IO.C_Streams (a-diocst.ads):: - * Ada.Exceptions.Is_Null_Occurrence (a-einuoc.ads):: - * Ada.Sequential_IO.C_Streams (a-siocst.ads):: - * Ada.Streams.Stream_IO.C_Streams (a-ssicst.ads):: - * Ada.Strings.Unbounded.Text_IO (a-suteio.ads):: - * Ada.Strings.Wide_Unbounded.Wide_Text_IO (a-swuwti.ads):: - * Ada.Text_IO.C_Streams (a-tiocst.ads):: - * Ada.Wide_Text_IO.C_Streams (a-wtcstr.ads):: - * GNAT.AWK (g-awk.ads):: - * GNAT.Bubble_Sort_A (g-busora.ads):: - * GNAT.Bubble_Sort_G (g-busorg.ads):: - * GNAT.Calendar (g-calend.ads):: - * GNAT.Calendar.Time_IO (g-catiio.ads):: - * GNAT.Case_Util (g-casuti.ads):: - * GNAT.CGI (g-cgi.ads):: - * GNAT.CGI.Cookie (g-cgicoo.ads):: - * GNAT.CGI.Debug (g-cgideb.ads):: - * GNAT.Command_Line (g-comlin.ads):: - * GNAT.CRC32 (g-crc32.ads):: - * GNAT.Current_Exception (g-curexc.ads):: - * GNAT.Debug_Pools (g-debpoo.ads):: - * GNAT.Debug_Utilities (g-debuti.ads):: - * GNAT.Directory_Operations (g-dirope.ads):: - * GNAT.Dynamic_Tables (g-dyntab.ads):: - * GNAT.Exception_Traces (g-exctra.ads):: - * GNAT.Expect (g-expect.ads):: - * GNAT.Float_Control (g-flocon.ads):: - * GNAT.Heap_Sort_A (g-hesora.ads):: - * GNAT.Heap_Sort_G (g-hesorg.ads):: - * GNAT.HTable (g-htable.ads):: - * GNAT.IO (g-io.ads):: - * GNAT.IO_Aux (g-io_aux.ads):: - * GNAT.Lock_Files (g-locfil.ads):: - * GNAT.MD5 (g-md5.ads):: - * GNAT.Most_Recent_Exception (g-moreex.ads):: - * GNAT.OS_Lib (g-os_lib.ads):: - * GNAT.Regexp (g-regexp.ads):: - * GNAT.Registry (g-regist.ads):: - * GNAT.Regpat (g-regpat.ads):: - * GNAT.Sockets (g-socket.ads):: - * GNAT.Source_Info (g-souinf.ads):: - * GNAT.Spell_Checker (g-speche.ads):: - * GNAT.Spitbol.Patterns (g-spipat.ads):: - * GNAT.Spitbol (g-spitbo.ads):: - * GNAT.Spitbol.Table_Boolean (g-sptabo.ads):: - * GNAT.Spitbol.Table_Integer (g-sptain.ads):: - * GNAT.Spitbol.Table_VString (g-sptavs.ads):: - * GNAT.Table (g-table.ads):: - * GNAT.Task_Lock (g-tasloc.ads):: - * GNAT.Threads (g-thread.ads):: - * GNAT.Traceback (g-traceb.ads):: - * GNAT.Traceback.Symbolic (g-trasym.ads):: - * Interfaces.C.Extensions (i-cexten.ads):: - * Interfaces.C.Streams (i-cstrea.ads):: - * Interfaces.CPP (i-cpp.ads):: - * Interfaces.Os2lib (i-os2lib.ads):: - * Interfaces.Os2lib.Errors (i-os2err.ads):: - * Interfaces.Os2lib.Synchronization (i-os2syn.ads):: - * Interfaces.Os2lib.Threads (i-os2thr.ads):: - * Interfaces.Packed_Decimal (i-pacdec.ads):: - * Interfaces.VxWorks (i-vxwork.ads):: - * Interfaces.VxWorks.IO (i-vxwoio.ads):: - * System.Address_Image (s-addima.ads):: - * System.Assertions (s-assert.ads):: - * System.Partition_Interface (s-parint.ads):: - * System.Task_Info (s-tasinf.ads):: - * System.Wch_Cnv (s-wchcnv.ads):: - * System.Wch_Con (s-wchcon.ads):: - - Text_IO - - * Text_IO Stream Pointer Positioning:: - * Text_IO Reading and Writing Non-Regular Files:: - * Get_Immediate:: - * Treating Text_IO Files as Streams:: - * Text_IO Extensions:: - * Text_IO Facilities for Unbounded Strings:: - - Wide_Text_IO - - * Wide_Text_IO Stream Pointer Positioning:: - * Wide_Text_IO Reading and Writing Non-Regular Files:: - - Interfacing to Other Languages - - * Interfacing to C:: - * Interfacing to C++:: - * Interfacing to COBOL:: - * Interfacing to Fortran:: - * Interfacing to non-GNAT Ada code:: - - GNAT Implementation of Tasking - - * Mapping Ada Tasks onto the Underlying Kernel Threads:: - * Ensuring Compliance with the Real-Time Annex:: - -  - File: gnat_rm.info, Node: About This Guide, Next: Implementation Defined Pragmas, Prev: Top, Up: Top - - About This Guide - **************** - - This manual contains useful information in writing programs using the - GNAT compiler. It includes information on implementation dependent - characteristics of GNAT, including all the information required by Annex - M of the standard. - - Ada 95 is designed to be highly portable,and guarantees that, for - most programs, Ada 95 compilers behave in exactly the same manner on - different machines. However, since Ada 95 is designed to be used in a - wide variety of applications, it also contains a number of system - dependent features to Functbe used in interfacing to the external world. - - Note: Any program that makes use of implementation-dependent features - may be non-portable. You should follow good programming practice and - isolate and clearly document any sections of your program that make use - of these features in a non-portable manner. - - * Menu: - - * What This Reference Manual Contains:: - * Conventions:: - * Related Information:: - -  - File: gnat_rm.info, Node: What This Reference Manual Contains, Next: Conventions, Up: About This Guide - - What This Reference Manual Contains - =================================== - - This reference manual contains the following chapters: - - * *Note Implementation Defined Pragmas:: lists GNAT - implementation-dependent pragmas, which can be used to extend and - enhance the functionality of the compiler. - - * *Note Implementation Defined Attributes:: lists GNAT - implementation-dependent attributes which can be used to extend and - enhance the functionality of the compiler. - - * *Note Implementation Advice:: provides information on generally - desirable behavior which are not requirements that all compilers - must follow since it cannot be provided on all systems, or which - may be undesirable on some systems. - - * *Note Implementation Defined Characteristics:: provides a guide to - minimizing implementation dependent features. - - * *Note Intrinsic Subprograms:: describes the intrinsic subprograms - implemented by GNAT, and how they can be imported into user - application programs. - - * *Note Representation Clauses and Pragmas:: describes in detail the - way that GNAT represents data, and in particular the exact set of - representation clauses and pragmas that is accepted. - - * *Note Standard Library Routines:: provides a listing of packages - and a brief description of the functionality that is provided by - Ada's extensive set of standard library routines as implemented by - GNAT. - - * *Note The Implementation of Standard I/O:: details how the GNAT - implementation of the input-output facilities. - - * *Note Interfacing to Other Languages:: describes how programs - written in Ada using GNAT can be interfaced to other programming - languages. - - * *Note Specialized Needs Annexes:: describes the GNAT - implementation of all of the special needs annexes. - - * *Note Compatibility Guide:: includes sections on compatibility of - GNAT with other Ada 83 and Ada 95 compilation systems, to assist - in porting code from other environments. - - This reference manual assumes that you are familiar with Ada 95 - language, as described in the International Standard - ANSI/ISO/IEC-8652:1995, Jan 1995. - -  - File: gnat_rm.info, Node: Conventions, Next: Related Information, Prev: What This Reference Manual Contains, Up: About This Guide - - Conventions - =========== - - Following are examples of the typographical and graphic conventions used - in this guide: - - * `Functions', `utility program names', `standard names', and - `classes'. - - * `Option flags' - - * `File Names', `button names', and `field names'. - - * `Variables'. - - * _Emphasis_. - - * [optional information or parameters] - - * Examples are described by text - and then shown this way. - - Commands that are entered by the user are preceded in this manual by the - characters `$ ' (dollar sign followed by space). If your system uses - this sequence as a prompt, then the commands will appear exactly as you - see them in the manual. If your system uses some other prompt, then - the command will appear with the `$' replaced by whatever prompt - character you are using. - -  - File: gnat_rm.info, Node: Related Information, Prev: Conventions, Up: About This Guide - - Related Information - =================== - - See the following documents for further information on GNAT: - - * `GNAT User's Guide', which provides information on how to use the - GNAT compiler system. - - * `Ada 95 Reference Manual', which contains all reference material - for the Ada 95 programming language. - - * `Ada 95 Annotated Reference Manual', which is an annotated version - of the standard reference manual cited above. The annotations - describe detailed aspects of the design decision, and in - particular contain useful sections on Ada 83 compatibility. - - * `DEC Ada, Technical Overview and Comparison on DIGITAL Platforms', - which contains specific information on compatibility between GNAT - and DEC Ada 83 systems. - - * `DEC Ada, Language Reference Manual, part number AA-PYZAB-TK' which - describes in detail the pragmas and attributes provided by the DEC - Ada 83 compiler system. - - -  - File: gnat_rm.info, Node: Implementation Defined Pragmas, Next: Implementation Defined Attributes, Prev: About This Guide, Up: Top - - Implementation Defined Pragmas - ****************************** - - Ada 95 defines a set of pragmas that can be used to supply additional - information to the compiler. These language defined pragmas are - implemented in GNAT and work as described in the Ada 95 Reference - Manual. - - In addition, Ada 95 allows implementations to define additional - pragmas whose meaning is defined by the implementation. GNAT provides - a number of these implementation-dependent pragmas which can be used to - extend and enhance the functionality of the compiler. This section of - the GNAT Reference Manual describes these additional pragmas. - - Note that any program using these pragmas may not be portable to - other compilers (although GNAT implements this set of pragmas on all - platforms). Therefore if portability to other compilers is an important - consideration, the use of these pragmas should be minimized. - - `pragma Abort_Defer' - Syntax: - - pragma Abort_Defer; - - This pragma must appear at the start of the statement sequence of a - handled sequence of statements (right after the `begin'). It has - the effect of deferring aborts for the sequence of statements (but - not for the declarations or handlers, if any, associated with this - statement sequence). - - `pragma Ada_83' - Syntax: - - pragma Ada_83; - - A configuration pragma that establishes Ada 83 mode for the unit to - which it applies, regardless of the mode set by the command line - switches. In Ada 83 mode, GNAT attempts to be as compatible with - the syntax and semantics of Ada 83, as defined in the original Ada - 83 Reference Manual as possible. In particular, the new Ada 95 - keywords are not recognized, optional package bodies are allowed, - and generics may name types with unknown discriminants without - using the `(<>)' notation. In addition, some but not all of the - additional restrictions of Ada 83 are enforced. - - Ada 83 mode is intended for two purposes. Firstly, it allows - existing legacy Ada 83 code to be compiled and adapted to GNAT - with less effort. Secondly, it aids in keeping code backwards - compatible with Ada 83. However, there is no guarantee that code - that is processed correctly by GNAT in Ada 83 mode will in fact - compile and execute with an Ada 83 compiler, since GNAT does not - enforce all the additional checks required by Ada 83. - - `pragma Ada_95' - Syntax: - - pragma Ada_95; - - A configuration pragma that establishes Ada 95 mode for the unit - to which it applies, regardless of the mode set by the command - line switches. This mode is set automatically for the `Ada' and - `System' packages and their children, so you need not specify it - in these contexts. This pragma is useful when writing a reusable - component that itself uses Ada 95 features, but which is intended - to be usable from either Ada 83 or Ada 95 programs. - - `pragma Annotate' - Syntax: - - pragma Annotate (IDENTIFIER {, ARG}); - - ARG ::= NAME | EXPRESSION - - This pragma is used to annotate programs. IDENTIFIER identifies - the type of annotation. GNAT verifies this is an identifier, but - does not otherwise analyze it. The ARG argument can be either a - string literal or an expression. String literals are assumed to - be of type `Standard.String'. Names of entities are simply - analyzed as entity names. All other expressions are analyzed as - expressions, and must be unambiguous. - - The analyzed pragma is retained in the tree, but not otherwise - processed by any part of the GNAT compiler. This pragma is - intended for use by external tools, including ASIS. - - `pragma Assert' - Syntax: - - pragma Assert ( - boolean_EXPRESSION - [, static_string_EXPRESSION]) - - The effect of this pragma depends on whether the corresponding - command line switch is set to activate assertions. The pragma - expands into code equivalent to the following: - - if assertions-enabled then - if not boolean_EXPRESSION then - System.Assertions.Raise_Assert_Failure - (string_EXPRESSION); - end if; - end if; - - The string argument, if given, is the message that will be - associated with the exception occurrence if the exception is - raised. If no second argument is given, the default message is - `FILE:NNN', where FILE is the name of the source file containing - the assert, and NNN is the line number of the assert. A pragma is - not a statement, so if a statement sequence contains nothing but a - pragma assert, then a null statement is required in addition, as - in: - - ... - if J > 3 then - pragma Assert (K > 3, "Bad value for K"); - null; - end if; - - Note that, as with the `if' statement to which it is equivalent, - the type of the expression is either `Standard.Boolean', or any - type derived from this standard type. - - If assertions are disabled (switch `-gnata' not used), then there - is no effect (and in particular, any side effects from the - expression are suppressed). More precisely it is not quite true - that the pragma has no effect, since the expression is analyzed, - and may cause types to be frozen if they are mentioned here for - the first time. - - If assertions are enabled, then the given expression is tested, - and if it is `False' then `System.Assertions.Raise_Assert_Failure' - is called which results in the raising of `Assert_Failure' with - the given message. - - If the boolean expression has side effects, these side effects - will turn on and off with the setting of the assertions mode, - resulting in assertions that have an effect on the program. You - should generally avoid side effects in the expression arguments of - this pragma. However, the expressions are analyzed for semantic - correctness whether or not assertions are enabled, so turning - assertions on and off cannot affect the legality of a program. - - `pragma Ast_Entry' - Syntax: - - pragma AST_Entry (entry_IDENTIFIER); - - This pragma is implemented only in the OpenVMS implementation of - GNAT. The argument is the simple name of a single entry; at most - one `AST_Entry' pragma is allowed for any given entry. This - pragma must be used in conjunction with the `AST_Entry' attribute, - and is only allowed after the entry declaration and in the same - task type specification or single task as the entry to which it - applies. This pragma specifies that the given entry may be used - to handle an OpenVMS asynchronous system trap (`AST') resulting - from an OpenVMS system service call. The pragma does not affect - normal use of the entry. For further details on this pragma, see - the DEC Ada Language Reference Manual, section 9.12a. - - `pragma C_Pass_By_Copy' - Syntax: - - pragma C_Pass_By_Copy - ([Max_Size =>] static_integer_EXPRESSION); - - Normally the default mechanism for passing C convention records to - C convention subprograms is to pass them by reference, as - suggested by RM B.3(69). Use the configuration pragma - `C_Pass_By_Copy' to change this default, by requiring that record - formal parameters be passed by copy if all of the following - conditions are met: - - * The size of the record type does not exceed - STATIC_INTEGER_EXPRESSION. - - * The record type has `Convention C'. - - * The formal parameter has this record type, and the subprogram - has a foreign (non-Ada) convention. - - If these conditions are met the argument is passed by copy, i.e. - in a manner consistent with what C expects if the corresponding - formal in the C prototype is a struct (rather than a pointer to a - struct). - - You can also pass records by copy by specifying the convention - `C_Pass_By_Copy' for the record type, or by using the extended - `Import' and `Export' pragmas, which allow specification of - passing mechanisms on a parameter by parameter basis. - - `pragma Comment' - Syntax: - - pragma Comment (static_string_EXPRESSION); - - This is almost identical in effect to pragma `Ident'. It allows - the placement of a comment into the object file and hence into the - executable file if the operating system permits such usage. The - difference is that `Comment', unlike `Ident', has no limit on the - length of the string argument, and no limitations on placement of - the pragma (it can be placed anywhere in the main source unit). - - `pragma Common_Object' - Syntax: - - pragma Common_Object ( - [Internal =>] LOCAL_NAME, - [, [External =>] EXTERNAL_SYMBOL] - [, [Size =>] EXTERNAL_SYMBOL] ) - - EXTERNAL_SYMBOL ::= - IDENTIFIER - | static_string_EXPRESSION - - This pragma enables the shared use of variables stored in overlaid - linker areas corresponding to the use of `COMMON' in Fortran. The - single object LOCAL_NAME is assigned to the area designated by the - EXTERNAL argument. You may define a record to correspond to a - series of fields. The SIZE argument is syntax checked in GNAT, - but otherwise ignored. - - `Common_Object' is not supported on all platforms. If no support - is available, then the code generator will issue a message - indicating that the necessary attribute for implementation of this - pragma is not available. - - `pragma Complex_Representation' - Syntax: - - pragma Complex_Representation - ([Entity =>] LOCAL_NAME); - - The ENTITY argument must be the name of a record type which has - two fields of the same floating-point type. The effect of this - pragma is to force gcc to use the special internal complex - representation form for this record, which may be more efficient. - Note that this may result in the code for this type not conforming - to standard ABI (application binary interface) requirements for - the handling of record types. For example, in some environments, - there is a requirement for passing records by pointer, and the use - of this pragma may result in passing this type in floating-point - registers. - - `pragma Component_Alignment' - Syntax: - - pragma Component_Alignment ( - [Form =>] ALIGNMENT_CHOICE - [, [Name =>] type_LOCAL_NAME]); - - ALIGNMENT_CHOICE ::= - Component_Size - | Component_Size_4 - | Storage_Unit - | Default - - Specifies the alignment of components in array or record types. - The meaning of the FORM argument is as follows: - - `Component_Size' - Aligns scalar components and subcomponents of the array or - record type on boundaries appropriate to their inherent size - (naturally aligned). For example, 1-byte components are - aligned on byte boundaries, 2-byte integer components are - aligned on 2-byte boundaries, 4-byte integer components are - aligned on 4-byte boundaries and so on. These alignment - rules correspond to the normal rules for C compilers on all - machines except the VAX. - - `Component_Size_4' - Naturally aligns components with a size of four or fewer - bytes. Components that are larger than 4 bytes are placed on - the next 4-byte boundary. - - `Storage_Unit' - Specifies that array or record components are byte aligned, - i.e. aligned on boundaries determined by the value of the - constant `System.Storage_Unit'. - - `Default' - Specifies that array or record components are aligned on - default boundaries, appropriate to the underlying hardware or - operating system or both. For OpenVMS VAX systems, the - `Default' choice is the same as the `Storage_Unit' choice - (byte alignment). For all other systems, the `Default' - choice is the same as `Component_Size' (natural alignment). - - If the `Name' parameter is present, TYPE_LOCAL_NAME must refer to - a local record or array type, and the specified alignment choice - applies to the specified type. The use of `Component_Alignment' - together with a pragma `Pack' causes the `Component_Alignment' - pragma to be ignored. The use of `Component_Alignment' together - with a record representation clause is only effective for fields - not specified by the representation clause. - - If the `Name' parameter is absent, the pragma can be used as either - a configuration pragma, in which case it applies to one or more - units in accordance with the normal rules for configuration - pragmas, or it can be used within a declarative part, in which - case it applies to types that are declared within this declarative - part, or within any nested scope within this declarative part. In - either case it specifies the alignment to be applied to any record - or array type which has otherwise standard representation. - - If the alignment for a record or array type is not specified (using - pragma `Pack', pragma `Component_Alignment', or a record rep - clause), the GNAT uses the default alignment as described - previously. - - `pragma Convention_Identifier' - Syntax: - - pragma Convention_Identifier ( - [Name =>] IDENTIFIER, - [Convention =>] convention_IDENTIFIER); - - This pragma provides a mechanism for supplying synonyms for - existing convention identifiers. The `Name' identifier can - subsequently be used as a synonym for the given convention in - other pragmas (including for example pragma `Import' or another - `Convention_Identifier' pragma). As an example of the use of this, - suppose you had legacy code which used Fortran77 as the identifier - for Fortran. Then the pragma: - - pragma Convention_Indentifier (Fortran77, Fortran); - - would allow the use of the convention identifier `Fortran77' in - subsequent code, avoiding the need to modify the sources. As - another example, you could use this to parametrize convention - requirements according to systems. Suppose you needed to use - `Stdcall' on windows systems, and `C' on some other system, then - you could define a convention identifier `Library' and use a single - `Convention_Identifier' pragma to specify which convention would - be used system-wide. - - `pragma CPP_Class' - Syntax: - - pragma CPP_Class ([Entity =>] LOCAL_NAME); - - The argument denotes an entity in the current declarative region - that is declared as a tagged or untagged record type. It - indicates that the type corresponds to an externally declared C++ - class type, and is to be laid out the same way that C++ would lay - out the type. - - If (and only if) the type is tagged, at least one component in the - record must be of type `Interfaces.CPP.Vtable_Ptr', corresponding - to the C++ Vtable (or Vtables in the case of multiple inheritance) - used for dispatching. - - Types for which `CPP_Class' is specified do not have assignment or - equality operators defined (such operations can be imported or - declared as subprograms as required). Initialization is allowed - only by constructor functions (see pragma `CPP_Constructor'). - - Pragma `CPP_Class' is intended primarily for automatic generation - using an automatic binding generator tool. See *Note Interfacing - to C++:: for related information. - - `pragma CPP_Constructor' - Syntax: - - pragma CPP_Constructor ([Entity =>] LOCAL_NAME); - - This pragma identifies an imported function (imported in the usual - way with pragma `Import') as corresponding to a C++ constructor. - The argument is a name that must have been previously mentioned in - a pragma `Import' with `Convention' = `CPP', and must be of one of - the following forms: - - * `function FNAME return T'Class' - - * `function FNAME (...) return T'Class' - - where T is a tagged type to which the pragma `CPP_Class' applies. - - The first form is the default constructor, used when an object of - type T is created on the Ada side with no explicit constructor. - Other constructors (including the copy constructor, which is - simply a special case of the second form in which the one and only - argument is of type T), can only appear in two contexts: - - * On the right side of an initialization of an object of type T. - - * In an extension aggregate for an object of a type derived - from T. - - Although the constructor is described as a function that returns a - value on the Ada side, it is typically a procedure with an extra - implicit argument (the object being initialized) at the - implementation level. GNAT issues the appropriate call, whatever - it is, to get the object properly initialized. - - In the case of derived objects, you may use one of two possible - forms for declaring and creating an object: - - * `New_Object : Derived_T' - - * `New_Object : Derived_T := (CONSTRUCTOR-FUNCTION-CALL WITH - ...)' - - In the first case the default constructor is called and extension - fields if any are initialized according to the default - initialization expressions in the Ada declaration. In the second - case, the given constructor is called and the extension aggregate - indicates the explicit values of the extension fields. - - If no constructors are imported, it is impossible to create any - objects on the Ada side. If no default constructor is imported, - only the initialization forms using an explicit call to a - constructor are permitted. - - Pragma `CPP_Constructor' is intended primarily for automatic - generation using an automatic binding generator tool. See *Note - Interfacing to C++:: for more related information. - - `pragma CPP_Virtual' - Syntax: - - pragma CPP_Virtual - [Entity =>] ENTITY, - [, [Vtable_Ptr =>] vtable_ENTITY,] - [, [Position =>] static_integer_EXPRESSION]) - - This pragma serves the same function as pragma `Import' in that - case of a virtual function imported from C++. The ENTITY argument - must be a primitive subprogram of a tagged type to which pragma - `CPP_Class' applies. The VTABLE_PTR argument specifies the - Vtable_Ptr component which contains the entry for this virtual - function. The POSITION argument is the sequential number counting - virtual functions for this Vtable starting at 1. - - The `Vtable_Ptr' and `Position' arguments may be omitted if there - is one Vtable_Ptr present (single inheritance case) and all - virtual functions are imported. In that case the compiler can - deduce both these values. - - No `External_Name' or `Link_Name' arguments are required for a - virtual function, since it is always accessed indirectly via the - appropriate Vtable entry. - - Pragma `CPP_Virtual' is intended primarily for automatic generation - using an automatic binding generator tool. See *Note Interfacing - to C++:: for related information. - - `pragma CPP_Vtable' - Syntax: - - pragma CPP_Vtable ( - [Entity =>] ENTITY, - [Vtable_Ptr =>] vtable_ENTITY, - [Entry_Count =>] static_integer_EXPRESSION); - - Given a record to which the pragma `CPP_Class' applies, this - pragma can be specified for each component of type - `CPP.Interfaces.Vtable_Ptr'. ENTITY is the tagged type, VTABLE_PTR - is the record field of type `Vtable_Ptr', and ENTRY_COUNT is the - number of virtual functions on the C++ side. Not all of these - functions need to be imported on the Ada side. - - You may omit the `CPP_Vtable' pragma if there is only one - `Vtable_Ptr' component in the record and all virtual functions are - imported on the Ada side (the default value for the entry count in - this case is simply the total number of virtual functions). - - Pragma `CPP_Vtable' is intended primarily for automatic generation - using an automatic binding generator tool. See *Note Interfacing - to C++:: for related information. - - `pragma Debug' - Syntax: - - pragma Debug (PROCEDURE_CALL_WITHOUT_SEMICOLON); - - PROCEDURE_CALL_WITHOUT_SEMICOLON ::= - PROCEDURE_NAME - | PROCEDURE_PREFIX ACTUAL_PARAMETER_PART - - The argument has the syntactic form of an expression, meeting the - syntactic requirements for pragmas. - - If assertions are not enabled on the command line, this pragma has - no effect. If asserts are enabled, the semantics of the pragma is - exactly equivalent to the procedure call statement corresponding - to the argument with a terminating semicolon. Pragmas are - permitted in sequences of declarations, so you can use pragma - `Debug' to intersperse calls to debug procedures in the middle of - declarations. - - `pragma Elaboration_Checks' - Syntax: - - pragma Elaboration_Checks (RM | Static); - - This is a configuration pragma that provides control over the - elaboration model used by the compilation affected by the pragma. - If the parameter is RM, then the dynamic elaboration model - described in the Ada Reference Manual is used, as though the - `-gnatE' switch had been specified on the command line. If the - parameter is Static, then the default GNAT static model is used. - This configuration pragma overrides the setting of the command - line. For full details on the elaboration models used by the GNAT - compiler, see section "Elaboration Order Handling in GNAT" in the - `GNAT User's Guide'. - - `pragma Eliminate' - Syntax: - - pragma Eliminate ( - [Unit_Name =>] IDENTIFIER | - SELECTED_COMPONENT); - - pragma Eliminate ( - [Unit_Name =>] IDENTIFIER | - SELECTED_COMPONENT, - [Entity =>] IDENTIFIER | - SELECTED_COMPONENT | - STRING_LITERAL - [,[Parameter_Types =>] PARAMETER_TYPES] - [,[Result_Type =>] result_SUBTYPE_NAME] - [,[Homonym_Number =>] INTEGER_LITERAL]); - - PARAMETER_TYPES ::= (SUBTYPE_NAME {, SUBTYPE_NAME}) - SUBTYPE_NAME ::= STRING_LITERAL - - This pragma indicates that the given entity is not used outside the - compilation unit it is defined in. The entity may be either a - subprogram or a variable. - - If the entity to be eliminated is a library level subprogram, then - the first form of pragma `Eliminate' is used with only a single - argument. In this form, the `Unit_Name' argument specifies the - name of the library level unit to be eliminated. - - In all other cases, both `Unit_Name' and `Entity' arguments are - required. item is an entity of a library package, then the first - argument specifies the unit name, and the second argument specifies - the particular entity. If the second argument is in string form, - it must correspond to the internal manner in which GNAT stores - entity names (see compilation unit Namet in the compiler sources - for details). - - The remaining parameters are optionally used to distinguish - between overloaded subprograms. There are two ways of doing this. - - Use `Parameter_Types' and `Result_Type' to specify the profile of - the subprogram to be eliminated in a manner similar to that used - for the extended `Import' and `Export' pragmas, except that the - subtype names are always given as string literals, again - corresponding to the internal manner in which GNAT stores entity - names. - - Alternatively, the `Homonym_Number' parameter is used to specify - which overloaded alternative is to be eliminated. A value of 1 - indicates the first subprogram (in lexical order), 2 indicates the - second etc. - - The effect of the pragma is to allow the compiler to eliminate the - code or data associated with the named entity. Any reference to - an eliminated entity outside the compilation unit it is defined in, - causes a compile time or link time error. - - The parameters of this pragma may be given in any order, as long as - the usual rules for use of named parameters and position parameters - are used. - - The intention of pragma `Eliminate' is to allow a program to be - compiled in a system independent manner, with unused entities - eliminated, without the requirement of modifying the source text. - Normally the required set of `Eliminate' pragmas is constructed - automatically using the gnatelim tool. Elimination of unused - entities local to a compilation unit is automatic, without - requiring the use of pragma `Eliminate'. - - Note that the reason this pragma takes string literals where names - might be expected is that a pragma `Eliminate' can appear in a - context where the relevant names are not visible. - - `pragma Export_Exception' - Syntax: - - pragma Export_Exception ( - [Internal =>] LOCAL_NAME, - [, [External =>] EXTERNAL_SYMBOL,] - [, [Form =>] Ada | VMS] - [, [Code =>] static_integer_EXPRESSION]); - - EXTERNAL_SYMBOL ::= - IDENTIFIER - | static_string_EXPRESSION - - This pragma is implemented only in the OpenVMS implementation of - GNAT. It causes the specified exception to be propagated outside - of the Ada program, so that it can be handled by programs written - in other OpenVMS languages. This pragma establishes an external - name for an Ada exception and makes the name available to the - OpenVMS Linker as a global symbol. For further details on this - pragma, see the DEC Ada Language Reference Manual, section - 13.9a3.2. - - `pragma Export_Function ...' - Syntax: - - pragma Export_Function ( - [Internal =>] LOCAL_NAME, - [, [External =>] EXTERNAL_SYMBOL] - [, [Parameter_Types =>] PARAMETER_TYPES] - [, [Result_Type =>] result_SUBTYPE_MARK] - [, [Mechanism =>] MECHANISM] - [, [Result_Mechanism =>] MECHANISM_NAME]); - - EXTERNAL_SYMBOL ::= - IDENTIFIER - | static_string_EXPRESSION - - PARAMETER_TYPES ::= - null - | SUBTYPE_MARK {, SUBTYPE_MARK} - - MECHANISM ::= - MECHANISM_NAME - | (MECHANISM_ASSOCIATION {, MECHANISM_ASSOCIATION}) - - MECHANISM_ASSOCIATION ::= - [formal_parameter_NAME =>] MECHANISM_NAME - - MECHANISM_NAME ::= - Value - | Reference - | Descriptor [([Class =>] CLASS_NAME)] - - CLASS_NAME ::= ubs | ubsb | uba | s | sb | a | nca - - Use this pragma to make a function externally callable and - optionally provide information on mechanisms to be used for - passing parameter and result values. We recommend, for the - purposes of improving portability, this pragma always be used in - conjunction with a separate pragma `Export', which must precede - the pragma `Export_Function'. GNAT does not require a separate - pragma `Export', but if none is present, `Convention Ada' is - assumed, which is usually not what is wanted, so it is usually - appropriate to use this pragma in conjunction with a `Export' or - `Convention' pragma that specifies the desired foreign convention. - Pragma `Export_Function' (and `Export', if present) must appear in - the same declarative region as the function to which they apply. - - INTERNAL_NAME must uniquely designate the function to which the - pragma applies. If more than one function name exists of this - name in the declarative part you must use the `Parameter_Types' and - `Result_Type' parameters is mandatory to achieve the required - unique designation. SUBTYPE_ MARKs in these parameters must - exactly match the subtypes in the corresponding function - specification, using positional notation to match parameters with - subtype marks. Passing by descriptor is supported only on the - OpenVMS ports of GNAT. - - `pragma Export_Object ...' - Syntax: - - pragma Export_Object - [Internal =>] LOCAL_NAME, - [, [External =>] EXTERNAL_SYMBOL] - [, [Size =>] EXTERNAL_SYMBOL] - - EXTERNAL_SYMBOL ::= - IDENTIFIER - | static_string_EXPRESSION - - This pragma designates an object as exported, and apart from the - extended rules for external symbols, is identical in effect to the - use of the normal `Export' pragma applied to an object. You may - use a separate Export pragma (and you probably should from the - point of view of portability), but it is not required. SIZE is - syntax checked, but otherwise ignored by GNAT. - - `pragma Export_Procedure ...' - Syntax: - - pragma Export_Procedure ( - [Internal =>] LOCAL_NAME - [, [External =>] EXTERNAL_SYMBOL] - [, [Parameter_Types =>] PARAMETER_TYPES] - [, [Mechanism =>] MECHANISM]); - - EXTERNAL_SYMBOL ::= - IDENTIFIER - | static_string_EXPRESSION - - PARAMETER_TYPES ::= - null - | SUBTYPE_MARK {, SUBTYPE_MARK} - - MECHANISM ::= - MECHANISM_NAME - | (MECHANISM_ASSOCIATION {, MECHANISM_ASSOCIATION}) - - MECHANISM_ASSOCIATION ::= - [formal_parameter_NAME =>] MECHANISM_NAME - - MECHANISM_NAME ::= - Value - | Reference - | Descriptor [([Class =>] CLASS_NAME)] - - CLASS_NAME ::= ubs | ubsb | uba | s | sb | a | nca - - This pragma is identical to `Export_Function' except that it - applies to a procedure rather than a function and the parameters - `Result_Type' and `Result_Mechanism' are not permitted. GNAT does - not require a separate pragma `Export', but if none is present, - `Convention Ada' is assumed, which is usually not what is wanted, - so it is usually appropriate to use this pragma in conjunction - with a `Export' or `Convention' pragma that specifies the desired - foreign convention. - - `pragma Export_Valued_Procedure' - Syntax: - - pragma Export_Valued_Procedure ( - [Internal =>] LOCAL_NAME - [, [External =>] EXTERNAL_SYMBOL] - [, [Parameter_Types =>] PARAMETER_TYPES] - [, [Mechanism =>] MECHANISM]); - - EXTERNAL_SYMBOL ::= - IDENTIFIER - | static_string_EXPRESSION - - PARAMETER_TYPES ::= - null - | SUBTYPE_MARK {, SUBTYPE_MARK} - - MECHANISM ::= - MECHANISM_NAME - | (MECHANISM_ASSOCIATION {, MECHANISM_ASSOCIATION}) - - MECHANISM_ASSOCIATION ::= - [formal_parameter_NAME =>] MECHANISM_NAME - - MECHANISM_NAME ::= - Value - | Reference - | Descriptor [([Class =>] CLASS_NAME)] - - CLASS_NAME ::= ubs | ubsb | uba | s | sb | a | nca - - This pragma is identical to `Export_Procedure' except that the - first parameter of LOCAL_NAME, which must be present, must be of - mode `OUT', and externally the subprogram is treated as a function - with this parameter as the result of the function. GNAT provides - for this capability to allow the use of `OUT' and `IN OUT' - parameters in interfacing to external functions (which are not - permitted in Ada functions). GNAT does not require a separate - pragma `Export', but if none is present, `Convention Ada' is - assumed, which is almost certainly not what is wanted since the - whole point of this pragma is to interface with foreign language - functions, so it is usually appropriate to use this pragma in - conjunction with a `Export' or `Convention' pragma that specifies - the desired foreign convention. - - `pragma Extend_System' - Syntax: - - pragma Extend_System ([Name =>] IDENTIFIER); - - This pragma is used to provide backwards compatibility with other - implementations that extend the facilities of package `System'. In - GNAT, `System' contains only the definitions that are present in - the Ada 95 RM. However, other implementations, notably the DEC - Ada 83 implementation, provide many extensions to package `System'. - - For each such implementation accommodated by this pragma, GNAT - provides a package `Aux_XXX', e.g. `Aux_DEC' for the DEC Ada 83 - implementation, which provides the required additional - definitions. You can use this package in two ways. You can - `with' it in the normal way and access entities either by - selection or using a `use' clause. In this case no special - processing is required. - - However, if existing code contains references such as `System.XXX' - where XXX is an entity in the extended definitions provided in - package `System', you may use this pragma to extend visibility in - `System' in a non-standard way that provides greater compatibility - with the existing code. Pragma `Extend_System' is a configuration - pragma whose single argument is the name of the package containing - the extended definition (e.g. `Aux_DEC' for the DEC Ada case). A - unit compiled under control of this pragma will be processed using - special visibility processing that looks in package - `System.Aux_XXX' where `Aux_XXX' is the pragma argument for any - entity referenced in package `System', but not found in package - `System'. - - You can use this pragma either to access a predefined `System' - extension supplied with the compiler, for example `Aux_DEC' or you - can construct your own extension unit following the above - definition. Note that such a package is a child of `System' and - thus is considered part of the implementation. To compile it you - will have to use the appropriate switch for compiling system - units. See the GNAT User's Guide for details. - - `pragma External' - Syntax: - - pragma External ( - [ Convention =>] convention_IDENTIFIER, - [ Entity =>] local_NAME - [, [External_Name =>] static_string_EXPRESSION ] - [, [Link_Name =>] static_string_EXPRESSION ]); - - This pragma is identical in syntax and semantics to pragma - `Export' as defined in the Ada Reference Manual. It is provided - for compatibility with some Ada 83 compilers that used this pragma - for exactly the same purposes as pragma `Export' before the latter - was standardized. - - `pragma External_Name_Casing' - Syntax: - - pragma External_Name_Casing ( - Uppercase | Lowercase - [, Uppercase | Lowercase | As_Is]); - - This pragma provides control over the casing of external names - associated with Import and Export pragmas. There are two cases to - consider: - - Implicit external names - Implicit external names are derived from identifiers. The - most common case arises when a standard Ada 95 Import or - Export pragma is used with only two arguments, as in: - - pragma Import (C, C_Routine); - - Since Ada is a case insensitive language, the spelling of the - identifier in the Ada source program does not provide any - information on the desired casing of the external name, and - so a convention is needed. In GNAT the default treatment is - that such names are converted to all lower case letters. - This corresponds to the normal C style in many environments. - The first argument of pragma `External_Name_Casing' can be - used to control this treatment. If `Uppercase' is specified, - then the name will be forced to all uppercase letters. If - `Lowercase' is specified, then the normal default of all - lower case letters will be used. - - This same implicit treatment is also used in the case of - extended DEC Ada 83 compatible Import and Export pragmas - where an external name is explicitly specified using an - identifier rather than a string. - - Explicit external names - Explicit external names are given as string literals. The - most common case arises when a standard Ada 95 Import or - Export pragma is used with three arguments, as in: - - pragma Import (C, C_Routine, "C_routine"); - - In this case, the string literal normally provides the exact - casing required for the external name. The second argument - of pragma `External_Name_Casing' may be used to modify this - behavior. If `Uppercase' is specified, then the name will be - forced to all uppercase letters. If `Lowercase' is specified, - then the name will be forced to all lowercase letters. A - specification of `As_Is' provides the normal default behavior - in which the casing is taken from the string provided. - - This pragma may appear anywhere that a pragma is valid. In - particular, it can be used as a configuration pragma in the - `gnat.adc' file, in which case it applies to all subsequent - compilations, or it can be used as a program unit pragma, in which - case it only applies to the current unit, or it can be used more - locally to control individual Import/Export pragmas. - - It is primarily intended for use with OpenVMS systems, where many - compilers convert all symbols to upper case by default. For - interfacing to such compilers (e.g. the DEC C compiler), it may be - convenient to use the pragma: - - pragma External_Name_Casing (Uppercase, Uppercase); - - to enforce the upper casing of all external symbols. - - `pragma Finalize_Storage_Only' - Syntax: - - pragma Finalize_Storage_Only (first_subtype_LOCAL_NAME); - - This pragma allows the compiler not to emit a Finalize call for - objects defined at the library level. This is mostly useful for - types where finalization is only used to deal with storage - reclamation since in most environments it is not necessary to - reclaim memory just before terminating execution, hence the name. - - `pragma Float_Representation' - Syntax: - - pragma Float_Representation (FLOAT_REP); - - FLOAT_REP ::= VAX_Float | IEEE_Float - - This pragma is implemented only in the OpenVMS implementation of - GNAT. It allows control over the internal representation chosen - for the predefined floating point types declared in the packages - `Standard' and `System'. For further details on this pragma, see - the DEC Ada Language Reference Manual, section 3.5.7a. Note that - to use this pragma, the standard runtime libraries must be - recompiled. See the description of the `GNAT LIBRARY' command in - the OpenVMS version of the GNAT Users Guide for details on the use - of this command. - - `pragma Ident' - Syntax: - - pragma Ident (static_string_EXPRESSION); - - This pragma provides a string identification in the generated - object file, if the system supports the concept of this kind of - identification string. The maximum permitted length of the string - literal is 31 characters. This pragma is allowed only in the - outermost declarative part or declarative items of a compilation - unit. On OpenVMS systems, the effect of the pragma is identical - to the effect of the DEC Ada 83 pragma of the same name. - - `pragma Import_Exception' - Syntax: - - pragma Import_Exception ( - [Internal =>] LOCAL_NAME, - [, [External =>] EXTERNAL_SYMBOL,] - [, [Form =>] Ada | VMS] - [, [Code =>] static_integer_EXPRESSION]); - - EXTERNAL_SYMBOL ::= - IDENTIFIER - | static_string_EXPRESSION - - This pragma is implemented only in the OpenVMS implementation of - GNAT. It allows OpenVMS conditions (for example, from OpenVMS - system services or other OpenVMS languages) to be propagated to - Ada programs as Ada exceptions. The pragma specifies that the - exception associated with an exception declaration in an Ada - program be defined externally (in non-Ada code). For further - details on this pragma, see the DEC Ada Language Reference Manual, - section 13.9a.3.1. - - `pragma Import_Function ...' - Syntax: - - pragma Import_Function ( - [Internal =>] LOCAL_NAME, - [, [External =>] EXTERNAL_SYMBOL] - [, [Parameter_Types =>] PARAMETER_TYPES] - [, [Result_Type =>] SUBTYPE_MARK] - [, [Mechanism =>] MECHANISM] - [, [Result_Mechanism =>] MECHANISM_NAME] - [, [First_Optional_Parameter =>] IDENTIFIER]); - - EXTERNAL_SYMBOL ::= - IDENTIFIER - | static_string_EXPRESSION - - PARAMETER_TYPES ::= - null - | SUBTYPE_MARK {, SUBTYPE_MARK} - - MECHANISM ::= - MECHANISM_NAME - | (MECHANISM_ASSOCIATION {, MECHANISM_ASSOCIATION}) - - MECHANISM_ASSOCIATION ::= - [formal_parameter_NAME =>] MECHANISM_NAME - - MECHANISM_NAME ::= - Value - | Reference - | Descriptor [([Class =>] CLASS_NAME)] - - CLASS_NAME ::= ubs | ubsb | uba | s | sb | a | nca - - This pragma is used in conjunction with a pragma `Import' to - specify additional information for an imported function. The - pragma `Import' (or equivalent pragma `Interface') must precede the - `Import_Function' pragma and both must appear in the same - declarative part as the function specification. - - The INTERNAL_NAME argument must uniquely designate the function to - which the pragma applies. If more than one function name exists - of this name in the declarative part you must use the - `Parameter_Types' and RESULT_TYPE parameters to achieve the - required unique designation. Subtype marks in these parameters - must exactly match the subtypes in the corresponding function - specification, using positional notation to match parameters with - subtype marks. - - You may optionally use the MECHANISM and RESULT_MECHANISM - parameters to specify passing mechanisms for the parameters and - result. If you specify a single mechanism name, it applies to all - parameters. Otherwise you may specify a mechanism on a parameter - by parameter basis using either positional or named notation. If - the mechanism is not specified, the default mechanism is used. - - Passing by descriptor is supported only on the to OpenVMS ports of - GNAT. - - `First_Optional_Parameter' applies only to OpenVMS ports of GNAT. - It specifies that the designated parameter and all following - parameters are optional, meaning that they are not passed at the - generated code level (this is distinct from the notion of optional - parameters in Ada where the parameters are passed anyway with the - designated optional parameters). All optional parameters must be - of mode `IN' and have default parameter values that are either - known at compile time expressions, or uses of the - `'Null_Parameter' attribute. - - `pragma Import_Object' - Syntax: - - pragma Import_Object - [Internal =>] LOCAL_NAME, - [, [External =>] EXTERNAL_SYMBOL], - [, [Size =>] EXTERNAL_SYMBOL]) - - EXTERNAL_SYMBOL ::= - IDENTIFIER - | static_string_EXPRESSION - - This pragma designates an object as imported, and apart from the - extended rules for external symbols, is identical in effect to the - use of the normal `Import' pragma applied to an object. Unlike the - subprogram case, you need not use a separate `Import' pragma, - although you may do so (and probably should do so from a - portability point of view). SIZE is syntax checked, but otherwise - ignored by GNAT. - - `pragma Import_Procedure' - Syntax: - - pragma Import_Procedure ( - [Internal =>] LOCAL_NAME, - [, [External =>] EXTERNAL_SYMBOL] - [, [Parameter_Types =>] PARAMETER_TYPES] - [, [Mechanism =>] MECHANISM] - [, [First_Optional_Parameter =>] IDENTIFIER]); - - EXTERNAL_SYMBOL ::= - IDENTIFIER - | static_string_EXPRESSION - - PARAMETER_TYPES ::= - null - | SUBTYPE_MARK {, SUBTYPE_MARK} - - MECHANISM ::= - MECHANISM_NAME - | (MECHANISM_ASSOCIATION {, MECHANISM_ASSOCIATION}) - - MECHANISM_ASSOCIATION ::= - [formal_parameter_NAME =>] MECHANISM_NAME - - MECHANISM_NAME ::= - Value - | Reference - | Descriptor [([Class =>] CLASS_NAME)] - - CLASS_NAME ::= ubs | ubsb | uba | s | sb | a | nca - - This pragma is identical to `Import_Function' except that it - applies to a procedure rather than a function and the parameters - `Result_Type' and `Result_Mechanism' are not permitted. - - `pragma Import_Valued_Procedure ...' - Syntax: - - pragma Import_Valued_Procedure ( - [Internal =>] LOCAL_NAME, - [, [External =>] EXTERNAL_SYMBOL] - [, [Parameter_Types =>] PARAMETER_TYPES] - [, [Mechanism =>] MECHANISM] - [, [First_Optional_Parameter =>] IDENTIFIER]); - - EXTERNAL_SYMBOL ::= - IDENTIFIER - | static_string_EXPRESSION - - PARAMETER_TYPES ::= - null - | SUBTYPE_MARK {, SUBTYPE_MARK} - - MECHANISM ::= - MECHANISM_NAME - | (MECHANISM_ASSOCIATION {, MECHANISM_ASSOCIATION}) - - MECHANISM_ASSOCIATION ::= - [formal_parameter_NAME =>] MECHANISM_NAME - - MECHANISM_NAME ::= - Value - | Reference - | Descriptor [([Class =>] CLASS_NAME)] - - CLASS_NAME ::= ubs | ubsb | uba | s | sb | a | nca - - This pragma is identical to `Import_Procedure' except that the - first parameter of LOCAL_NAME, which must be present, must be of - mode `OUT', and externally the subprogram is treated as a function - with this parameter as the result of the function. The purpose of - this capability is to allow the use of `OUT' and `IN OUT' - parameters in interfacing to external functions (which are not - permitted in Ada functions). You may optionally use the - `Mechanism' parameters to specify passing mechanisms for the - parameters. If you specify a single mechanism name, it applies to - all parameters. Otherwise you may specify a mechanism on a - parameter by parameter basis using either positional or named - notation. If the mechanism is not specified, the default - mechanism is used. - - Note that it is important to use this pragma in conjunction with a - separate pragma Import that specifies the desired convention, - since otherwise the default convention is Ada, which is almost - certainly not what is required. - - `pragma Initialize_Scalars' - Syntax: - - pragma Initialize_Scalars; - - This pragma is similar to `Normalize_Scalars' conceptually but has - two important differences. First, there is no requirement for the - pragma to be used uniformly in all units of a partition, in - particular, it is fine to use this just for some or all of the - application units of a partition, without needing to recompile the - run-time library. - - In the case where some units are compiled with the pragma, and - some without, then a declaration of a variable where the type is - defined in package Standard or is locally declared will always be - subject to initialization, as will any declaration of a scalar - variable. For composite variables, whether the variable is - initialized may also depend on whether the package in which the - type of the variable is declared is compiled with the pragma. - - The other important difference is that there is control over the - value used for initializing scalar objects. At bind time, you can - select whether to initialize with invalid values (like - Normalize_Scalars), or with high or low values, or with a - specified bit pattern. See the users guide for binder options for - specifying these cases. - - This means that you can compile a program, and then without having - to recompile the program, you can run it with different values - being used for initializing otherwise uninitialized values, to - test if your program behavior depends on the choice. Of course - the behavior should not change, and if it does, then most likely - you have an erroneous reference to an uninitialized value. - - Note that pragma `Initialize_Scalars' is particularly useful in - conjunction with the enhanced validity checking that is now - provided in GNAT, which checks for invalid values under more - conditions. Using this feature (see description of the `-gnatv' - flag in the users guide) in conjunction with pragma - `Initialize_Scalars' provides a powerful new tool to assist in the - detection of problems caused by uninitialized variables. - - `pragma Inline_Always' - Syntax: - - pragma Inline_Always (NAME [, NAME]); - - Similar to pragma `Inline' except that inlining is not subject to - the use of option `-gnatn' for inter-unit inlining. - - `pragma Inline_Generic' - Syntax: - - pragma Inline_Generic (generic_package_NAME) - - This is implemented for compatibility with DEC Ada 83 and is - recognized, but otherwise ignored, by GNAT. All generic - instantiations are inlined by default when using GNAT. - - `pragma Interface' - Syntax: - - pragma Interface ( - [Convention =>] convention_identifier, - [Entity =>] local_name - [, [External_Name =>] static_string_expression], - [, [Link_Name =>] static_string_expression]); - - This pragma is identical in syntax and semantics to the standard - Ada 95 pragma `Import'. It is provided for compatibility with Ada - 83. The definition is upwards compatible both with pragma - `Interface' as defined in the Ada 83 Reference Manual, and also - with some extended implementations of this pragma in certain Ada 83 - implementations. - - `pragma Interface_Name' - Syntax: - - pragma Interface_Name ( - [Entity =>] LOCAL_NAME - [, [External_Name =>] static_string_EXPRESSION] - [, [Link_Name =>] static_string_EXPRESSION]); - - This pragma provides an alternative way of specifying the - interface name for an interfaced subprogram, and is provided for - compatibility with Ada 83 compilers that use the pragma for this - purpose. You must provide at least one of EXTERNAL_NAME or - LINK_NAME. - - `pragma License' - Syntax: - - pragma License (Unrestricted | GPL | Modified_GPL | Restricted); - - This pragma is provided to allow automated checking for - appropriate license conditions with respect to the standard and - modified GPL. A pragma `License', which is a configuration pragma - that typically appears at the start of a source file or in a - separate `gnat.adc' file, specifies the licensing conditions of a - unit as follows: - - * Unrestricted This is used for a unit that can be freely used - with no license restrictions. Examples of such units are - public domain units, and units from the Ada Reference Manual. - - * GPL This is used for a unit that is licensed under the - unmodified GPL, and which therefore cannot be `with''ed by a - restricted unit. - - * Modified_GPL This is used for a unit licensed under the GNAT - modified GPL that includes a special exception paragraph that - specifically permits the inclusion of the unit in programs - without requiring the entire program to be released under the - GPL. This is the license used for the GNAT run-time which - ensures that the run-time can be used freely in any program - without GPL concerns. - - * Restricted This is used for a unit that is restricted in that - it is not permitted to depend on units that are licensed - under the GPL. Typical examples are proprietary code that is - to be released under more restrictive license conditions. - Note that restricted units are permitted to `with' units - which are licensed under the modified GPL (this is the whole - point of the modified GPL). - - - Normally a unit with no `License' pragma is considered to have an - unknown license, and no checking is done. However, standard GNAT - headers are recognized, and license information is derived from - them as follows. - - A GNAT license header starts with a line containing 78 - hyphens. The following comment text is searched for the - appearence of any of the following strings. - - If the string "GNU General Public License" is found, then the - unit is assumed to have GPL license, unless the string "As a - special exception" follows, in which case the license is - assumed to be modified GPL. - - If one of the strings "This specification is adapated from - the Ada Semantic Interface" or "This specification is derived - from the Ada Reference Manual" is found then the unit is - assumed to be unrestricted. - - These default actions means that a program with a restricted - license pragma will automatically get warnings if a GPL unit is - inappropriately `with''ed. For example, the program: - - with Sem_Ch3; - with GNAT.Sockets; - procedure Secret_Stuff is - ... - end Secret_Stuff - - if compiled with pragma `License' (`Restricted') in a `gnat.adc' - file will generate the warning: - - 1. with Sem_Ch3; - | - >>> license of withed unit "Sem_Ch3" is incompatible - - 2. with GNAT.Sockets; - 3. procedure Secret_Stuff is - - Here we get a warning on `Sem_Ch3' since it is part of the GNAT - compiler and is licensed under the GPL, but no warning for - `GNAT.Sockets' which is part of the GNAT run time, and is - therefore licensed under the modified GPL. - - `pragma Link_With' - Syntax: - - pragma Link_With (static_string_EXPRESSION {,static_string_EXPRESSION}); - - This pragma is provided for compatibility with certain Ada 83 - compilers. It has exactly the same effect as pragma - `Linker_Options' except that spaces occurring within one of the - string expressions are treated as separators. For example, in the - following case: - - pragma Link_With ("-labc -ldef"); - - results in passing the strings `-labc' and `-ldef' as two separate - arguments to the linker. In addition pragma Link_With allows - multiple arguments, with the same effect as successive pragmas. - - `pragma Linker_Alias' - Syntax: - - pragma Linker_Alias ( - [Entity =>] LOCAL_NAME - [Alias =>] static_string_EXPRESSION); - - This pragma establishes a linker alias for the given named entity. - For further details on the exact effect, consult the GCC manual. - - `pragma Linker_Section' - Syntax: - - pragma Linker_Section ( - [Entity =>] LOCAL_NAME - [Section =>] static_string_EXPRESSION); - - This pragma specifies the name of the linker section for the given - entity. For further details on the exact effect, consult the GCC - manual. - - `pragma No_Run_Time' - Syntax: - - pragma No_Run_Time; - - This is a configuration pragma that makes sure the user code does - not use nor need anything from the GNAT run time. This is mostly - useful in context where code certification is required. Please - consult the `GNAT Pro High-Integrity Edition User's Guide' for - additional information. - - `pragma Normalize_Scalars' - Syntax: - - pragma Normalize_Scalars; - - This is a language defined pragma which is fully implemented in - GNAT. The effect is to cause all scalar objects that are not - otherwise initialized to be initialized. The initial values are - implementation dependent and are as follows: - - `Standard.Character' - Objects whose root type is Standard.Character are initialized - to Character'Last. This will be out of range of the subtype - only if the subtype range excludes this value. - - `Standard.Wide_Character' - Objects whose root type is Standard.Wide_Character are - initialized to Wide_Character'Last. This will be out of - range of the subtype only if the subtype range excludes this - value. - - `Integer types' - Objects of an integer type are initialized to - base_type'First, where base_type is the base type of the - object type. This will be out of range of the subtype only - if the subtype range excludes this value. For example, if - you declare the subtype: - - subtype Ityp is integer range 1 .. 10; - - then objects of type x will be initialized to Integer'First, - a negative number that is certainly outside the range of - subtype `Ityp'. - - `Real types' - Objects of all real types (fixed and floating) are - initialized to base_type'First, where base_Type is the base - type of the object type. This will be out of range of the - subtype only if the subtype range excludes this value. - - `Modular types' - Objects of a modular type are initialized to typ'Last. This - will be out of range of the subtype only if the subtype - excludes this value. - - `Enumeration types' - Objects of an enumeration type are initialized to all - one-bits, i.e. to the value `2 ** typ'Size - 1'. This will - be out of range of the enumeration subtype in all cases - except where the subtype contains exactly 2**8, 2**16, or - 2**32 elements. - - `pragma Long_Float' - Syntax: - - pragma Long_Float (FLOAT_FORMAT); - - FLOAT_FORMAT ::= D_Float | G_Float - - This pragma is implemented only in the OpenVMS implementation of - GNAT. It allows control over the internal representation chosen - for the predefined type `Long_Float' and for floating point type - representations with `digits' specified in the range 7 through 15. - For further details on this pragma, see the `DEC Ada Language - Reference Manual', section 3.5.7b. Note that to use this pragma, - the standard runtime libraries must be recompiled. See the - description of the `GNAT LIBRARY' command in the OpenVMS version - of the GNAT User's Guide for details on the use of this command. - - `pragma Machine_Attribute ...' - Syntax: - - pragma Machine_Attribute ( - [Attribute_Name =>] string_EXPRESSION, - [Entity =>] LOCAL_NAME); - - Machine dependent attributes can be specified for types and/or - declarations. Currently only subprogram entities are supported. - This pragma is semantically equivalent to - `__attribute__((STRING_EXPRESSION))' in GNU C, where - `STRING_EXPRESSION' is recognized by the GNU C macros - `VALID_MACHINE_TYPE_ATTRIBUTE' and `VALID_MACHINE_DECL_ATTRIBUTE' - which are defined in the configuration header file `tm.h' for each - machine. See the GCC manual for further information. - - `pragma Main_Storage' - Syntax: - - pragma Main_Storage - (MAIN_STORAGE_OPTION [, MAIN_STORAGE_OPTION]); - - MAIN_STORAGE_OPTION ::= - [WORKING_STORAGE =>] static_SIMPLE_EXPRESSION - | [TOP_GUARD =>] static_SIMPLE_EXPRESSION - - This pragma is provided for compatibility with OpenVMS Vax - Systems. It has no effect in GNAT, other than being syntax - checked. Note that the pragma also has no effect in DEC Ada 83 - for OpenVMS Alpha Systems. - - `pragma No_Return' - Syntax: - - pragma No_Return (procedure_LOCAL_NAME); - - PROCEDURE_LOCAL_NAME must refer to one or more procedure - declarations in the current declarative part. A procedure to - which this pragma is applied may not contain any explicit `return' - statements, and also may not contain any implicit return - statements from falling off the end of a statement sequence. One - use of this pragma is to identify procedures whose only purpose is - to raise an exception. - - Another use of this pragma is to suppress incorrect warnings about - missing returns in functions, where the last statement of a - function statement sequence is a call to such a procedure. - - `pragma Passive' - Syntax: - - pragma Passive ([Semaphore | No]); - - Syntax checked, but otherwise ignored by GNAT. This is recognized - for compatibility with DEC Ada 83 implementations, where it is - used within a task definition to request that a task be made - passive. If the argument `Semaphore' is present, or no argument - is omitted, then DEC Ada 83 treats the pragma as an assertion that - the containing task is passive and that optimization of context - switch with this task is permitted and desired. If the argument - `No' is present, the task must not be optimized. GNAT does not - attempt to optimize any tasks in this manner (since protected - objects are available in place of passive tasks). - - `pragma Polling' - Syntax: - - pragma Polling (ON | OFF); - - This pragma controls the generation of polling code. This is - normally off. If `pragma Polling (ON)' is used then periodic - calls are generated to the routine `Ada.Exceptions.Poll'. This - routine is a separate unit in the runtime library, and can be - found in file `a-excpol.adb'. - - Pragma `Polling' can appear as a configuration pragma (for example - it can be placed in the `gnat.adc' file) to enable polling - globally, or it can be used in the statement or declaration - sequence to control polling more locally. - - A call to the polling routine is generated at the start of every - loop and at the start of every subprogram call. This guarantees - that the `Poll' routine is called frequently, and places an upper - bound (determined by the complexity of the code) on the period - between two `Poll' calls. - - The primary purpose of the polling interface is to enable - asynchronous aborts on targets that cannot otherwise support it - (for example Windows NT), but it may be used for any other purpose - requiring periodic polling. The standard version is null, and can - be replaced by a user program. This will require re-compilation - of the `Ada.Exceptions' package that can be found in files - `a-except.ads' and `a-except.adb'. - - A standard alternative unit (in file `4wexcpol.adb' in the - standard GNAT distribution) is used to enable the asynchronous - abort capability on targets that do not normally support the - capability. The version of `Poll' in this file makes a call to - the appropriate runtime routine to test for an abort condition. - - Note that polling can also be enabled by use of the `-gnatP' - switch. See the `GNAT User's Guide' for details. - - `pragma Propagate_Exceptions' - Syntax: - - pragma Propagate_Exceptions (subprogram_LOCAL_NAME); - - This pragma indicates that the given entity, which is the name of - an imported foreign-language subprogram may receive an Ada - exception, and that the exception should be propagated. It is - relevant only if zero cost exception handling is in use, and is - thus never needed if the alternative `longjmp' / `setjmp' - implementation of exceptions is used (although it is harmless to - use it in such cases). - - The implementation of fast exceptions always properly propagates - exceptions through Ada code, as described in the Ada Reference - Manual. However, this manual is silent about the propagation of - exceptions through foreign code. For example, consider the - situation where `P1' calls `P2', and `P2' calls `P3', where `P1' - and `P3' are in Ada, but `P2' is in C. `P3' raises an Ada - exception. The question is whether or not it will be propagated - through `P2' and can be handled in `P1'. - - For the `longjmp' / `setjmp' implementation of exceptions, the - answer is always yes. For some targets on which zero cost - exception handling is implemented, the answer is also always yes. - However, there are some targets, notably in the current version - all x86 architecture targets, in which the answer is that such - propagation does not happen automatically. If such propagation is - required on these targets, it is mandatory to use - `Propagate_Exceptions' to name all foreign language routines - through which Ada exceptions may be propagated. - - `pragma Psect_Object' - Syntax: - - pragma Psect_Object - [Internal =>] LOCAL_NAME, - [, [External =>] EXTERNAL_SYMBOL] - [, [Size =>] EXTERNAL_SYMBOL] - - EXTERNAL_SYMBOL ::= - IDENTIFIER - | static_string_EXPRESSION - - This pragma is identical in effect to pragma `Common_Object'. - - `pragma Pure_Function' - Syntax: - - pragma Pure_Function ([Entity =>] function_LOCAL_NAME); - - This pragma appears in the same declarative part as a function - declaration (or a set of function declarations if more than one - overloaded declaration exists, in which case the pragma applies to - all entities). If specifies that the function `Entity' is to be - considered pure for the purposes of code generation. This means - that the compiler can assume that there are no side effects, and - in particular that two calls with identical arguments produce the - same result. It also means that the function can be used in an - address clause. - - Note that, quite deliberately, there are no static checks to try - to ensure that this promise is met, so `Pure_Function' can be used - with functions that are conceptually pure, even if they do modify - global variables. For example, a square root function that is - instrumented to count the number of times it is called is still - conceptually pure, and can still be optimized, even though it - modifies a global variable (the count). Memo functions are another - example (where a table of previous calls is kept and consulted to - avoid re-computation). - - Note: Most functions in a `Pure' package are automatically pure, - and there is no need to use pragma `Pure_Function' for such - functions. An exception is any function that has at least one - formal of type `System.Address' or a type derived from it. Such - functions are not considered pure by default, since the compiler - assumes that the `Address' parameter may be functioning as a - pointer and that the referenced data may change even if the - address value does not. The use of pragma `Pure_Function' for - such a function will override this default assumption, and cause - the compiler to treat such a function as pure. - - Note: If pragma `Pure_Function' is applied to a renamed function, - it applies to the underlying renamed function. This can be used to - disambiguate cases of overloading where some but not all functions - in a set of overloaded functions are to be designated as pure. - - `pragma Ravenscar' - Syntax: - - pragma Ravenscar - - A configuration pragma that establishes the following set of - restrictions: - - `No_Abort_Statements' - [RM D.7] There are no abort_statements, and there are no - calls to Task_Identification.Abort_Task. - - `No_Select_Statements' - There are no select_statements. - - `No_Task_Hierarchy' - [RM D.7] All (non-environment) tasks depend directly on the - environment task of the partition. - - `No_Task_Allocators' - [RM D.7] There are no allocators for task types or types - containing task subcomponents. - - `No_Dynamic_Priorities' - [RM D.7] There are no semantic dependencies on the package - Dynamic_Priorities. - - `No_Terminate_Alternatives' - [RM D.7] There are no selective_accepts with - terminate_alternatives - - `No_Dynamic_Interrupts' - There are no semantic dependencies on Ada.Interrupts. - - `No_Protected_Type_Allocators' - There are no allocators for protected types or types - containing protected subcomponents. - - `No_Local_Protected_Objects' - Protected objects and access types that designate such - objects shall be declared only at library level. - - `No_Requeue' - Requeue statements are not allowed. - - `No_Calendar' - There are no semantic dependencies on the package - Ada.Calendar. - - `No_Relative_Delay' - There are no delay_relative_statements. - - `No_Task_Attributes' - There are no semantic dependencies on the Ada.Task_Attributes - package and there are no references to the attributes - Callable and Terminated [RM 9.9]. - - `Static_Storage_Size' - The expression for pragma Storage_Size is static. - - `Boolean_Entry_Barriers' - Entry barrier condition expressions shall be boolean objects - which are declared in the protected type which contains the - entry. - - `Max_Asynchronous_Select_Nesting = 0' - [RM D.7] Specifies the maximum dynamic nesting level of - asynchronous_selects. A value of zero prevents the use of - any asynchronous_select. - - `Max_Task_Entries = 0' - [RM D.7] Specifies the maximum number of entries per task. - The bounds of every entry family of a task unit shall be - static, or shall be defined by a discriminant of a subtype - whose corresponding bound is static. A value of zero - indicates that no rendezvous are possible. For the Ravenscar - pragma, the value of Max_Task_Entries is always 0 (zero). - - `Max_Protected_Entries = 1' - [RM D.7] Specifies the maximum number of entries per - protected type. The bounds of every entry family of a - protected unit shall be static, or shall be defined by a - discriminant of a subtype whose corresponding bound is - static. For the Ravenscar pragma the value of - Max_Protected_Entries is always 1. - - `Max_Select_Alternatives = 0' - [RM D.7] Specifies the maximum number of alternatives in a - selective_accept. For the Ravenscar pragma the value if - always 0. - - `No_Task_Termination' - Tasks which terminate are erroneous. - - `No_Entry_Queue' - No task can be queued on a protected entry. Note that this - restrictions is checked at run time. The violation of this - restriction generates a Program_Error exception. - - This set of restrictions corresponds to the definition of the - "Ravenscar Profile" for limited tasking, devised and published by - the `International Real-Time Ada Workshop', 1997. - - The above set is a superset of the restrictions provided by pragma - `Restricted_Run_Time', it includes six additional restrictions - (`Boolean_Entry_Barriers', `No_Select_Statements', `No_Calendar', - `Static_Storage_Size', `No_Relative_Delay' and - `No_Task_Termination'). This means that pragma `Ravenscar', like - the pragma `Restricted_Run_Time', automatically causes the use of - a simplified, more efficient version of the tasking run-time - system. - - `pragma Restricted_Run_Time' - Syntax: - - pragma Restricted_Run_Time - - A configuration pragma that establishes the following set of - restrictions: - - * No_Abort_Statements - - * No_Asynchronous_Control - - * No_Entry_Queue - - * No_Task_Hierarchy - - * No_Task_Allocators - - * No_Dynamic_Priorities - - * No_Terminate_Alternatives - - * No_Dynamic_Interrupts - - * No_Protected_Type_Allocators - - * No_Local_Protected_Objects - - * No_Requeue - - * No_Task_Attributes - - * Max_Asynchronous_Select_Nesting = 0 - - * Max_Task_Entries = 0 - - * Max_Protected_Entries = 1 - - * Max_Select_Alternatives = 0 - - This set of restrictions causes the automatic selection of a - simplified version of the run time that provides improved - performance for the limited set of tasking functionality permitted - by this set of restrictions. - - `pragma Share_Generic' - Syntax: - - pragma Share_Generic (NAME {, NAME}); - - This pragma is recognized for compatibility with other Ada - compilers but is ignored by GNAT. GNAT does not provide the - capability for sharing of generic code. All generic - instantiations result in making an inlined copy of the template - with appropriate substitutions. - - `pragma Source_File_Name' - Syntax: - - pragma Source_File_Name ( - [Unit_Name =>] unit_NAME, - Spec_File_Name => STRING_LITERAL); - - pragma Source_File_Name ( - [Unit_Name =>] unit_NAME, - Body_File_Name => STRING_LITERAL); - - Use this to override the normal naming convention. It is a - configuration pragma, and so has the usual applicability of - configuration pragmas (i.e. it applies to either an entire - partition, or to all units in a compilation, or to a single unit, - depending on how it is used. UNIT_NAME is mapped to - FILE_NAME_LITERAL. The identifier for the second argument is - required, and indicates whether this is the file name for the spec - or for the body. - - Another form of the `Source_File_Name' pragma allows the - specification of patterns defining alternative file naming schemes - to apply to all files. - - pragma Source_File_Name - (Spec_File_Name => STRING_LITERAL - [,Casing => CASING_SPEC] - [,Dot_Replacement => STRING_LITERAL]); - - pragma Source_File_Name - (Body_File_Name => STRING_LITERAL - [,Casing => CASING_SPEC] - [,Dot_Replacement => STRING_LITERAL]); - - pragma Source_File_Name - (Subunit_File_Name => STRING_LITERAL - [,Casing => CASING_SPEC] - [,Dot_Replacement => STRING_LITERAL]); - - CASING_SPEC ::= Lowercase | Uppercase | Mixedcase - - The first argument is a pattern that contains a single asterisk - indicating the point at which the unit name is to be inserted in - the pattern string to form the file name. The second argument is - optional. If present it specifies the casing of the unit name in - the resulting file name string. The default is lower case. - Finally the third argument allows for systematic replacement of - any dots in the unit name by the specified string literal. - - For more details on the use of the `Source_File_Name' pragma, see - the sections "Using Other File Names" and "Alternative File Naming - Schemes" in the `GNAT User's Guide'. - - `pragma Source_Reference' - Syntax: - - pragma Source_Reference (INTEGER_LITERAL, - STRING_LITERAL); - - This pragma must appear as the first line of a source file. - INTEGER_LITERAL is the logical line number of the line following - the pragma line (for use in error messages and debugging - information). STRING_LITERAL is a static string constant that - specifies the file name to be used in error messages and debugging - information. This is most notably used for the output of - `gnatchop' with the `-r' switch, to make sure that the original - unchopped source file is the one referred to. - - The second argument must be a string literal, it cannot be a static - string expression other than a string literal. This is because - its value is needed for error messages issued by all phases of the - compiler. - - `pragma Stream_Convert' - Syntax: - - pragma Stream_Convert ( - [Entity =>] type_LOCAL_NAME, - [Read =>] function_NAME, - [Write =>] function NAME); - - This pragma provides an efficient way of providing stream - functions for types defined in packages. Not only is it simpler - to use than declaring the necessary functions with attribute - representation clauses, but more significantly, it allows the - declaration to made in such a way that the stream packages are not - loaded unless they are needed. The use of the Stream_Convert - pragma adds no overhead at all, unless the stream attributes are - actually used on the designated type. - - The first argument specifies the type for which stream functions - are provided. The second parameter provides a function used to - read values of this type. It must name a function whose argument - type may be any subtype, and whose returned type must be the type - given as the first argument to the pragma. - - The meaning of the READ parameter is that if a stream attribute - directly or indirectly specifies reading of the type given as the - first parameter, then a value of the type given as the argument to - the Read function is read from the stream, and then the Read - function is used to convert this to the required target type. - - Similarly the WRITE parameter specifies how to treat write - attributes that directly or indirectly apply to the type given as - the first parameter. It must have an input parameter of the type - specified by the first parameter, and the return type must be the - same as the input type of the Read function. The effect is to - first call the Write function to convert to the given stream type, - and then write the result type to the stream. - - The Read and Write functions must not be overloaded subprograms. - If necessary renamings can be supplied to meet this requirement. - The usage of this attribute is best illustrated by a simple - example, taken from the GNAT implementation of package - Ada.Strings.Unbounded: - - function To_Unbounded (S : String) - return Unbounded_String - renames To_Unbounded_String; - - pragma Stream_Convert - (Unbounded_String, To_Unbounded, To_String); - - The specifications of the referenced functions, as given in the - Ada 95 Reference Manual are: - - function To_Unbounded_String (Source : String) - return Unbounded_String; - - function To_String (Source : Unbounded_String) - return String; - - The effect is that if the value of an unbounded string is written - to a stream, then the representation of the item in the stream is - in the same format used for `Standard.String', and this same - representation is expected when a value of this type is read from - the stream. - - `pragma Style_Checks' - Syntax: - - pragma Style_Checks (string_LITERAL | ALL_CHECKS | - On | Off [, LOCAL_NAME]); - - This pragma is used in conjunction with compiler switches to - control the built in style checking provided by GNAT. The - compiler switches, if set provide an initial setting for the - switches, and this pragma may be used to modify these settings, or - the settings may be provided entirely by the use of the pragma. - This pragma can be used anywhere that a pragma is legal, including - use as a configuration pragma (including use in the `gnat.adc' - file). - - The form with a string literal specifies which style options are - to be activated. These are additive, so they apply in addition to - any previously set style check options. The codes for the options - are the same as those used in the `-gnaty' switch to `gcc' or - `gnatmake'. For example the following two methods can be used to - enable layout checking: - - pragma Style_Checks ("l"); - gcc -c -gnatyl ... - - The form ALL_CHECKS activates all standard checks (its use is - equivalent to the use of the `gnaty' switch with no options. See - GNAT User's Guide for details. - - The forms with `Off' and `On' can be used to temporarily disable - style checks as shown in the following example: - - pragma Style_Checks ("k"); -- requires keywords in lower case - pragma Style_Checks (Off); -- turn off style checks - NULL; -- this will not generate an error message - pragma Style_Checks (On); -- turn style checks back on - NULL; -- this will generate an error message - - Finally the two argument form is allowed only if the first - argument is `On' or `Off'. The effect is to turn of semantic - style checks for the specified entity, as shown in the following - example: - - pragma Style_Checks ("r"); -- require consistency of identifier casing - Arg : Integer; - Rf1 : Integer := ARG; -- incorrect, wrong case - pragma Style_Checks (Off, Arg); - Rf2 : Integer := ARG; -- OK, no error - - `pragma Subtitle' - Syntax: - - pragma Subtitle ([Subtitle =>] STRING_LITERAL); - - This pragma is recognized for compatibility with other Ada - compilers but is ignored by GNAT. - - `pragma Suppress_All' - Syntax: - - pragma Suppress_All; - - This pragma can only appear immediately following a compilation - unit. The effect is to apply `Suppress (All_Checks)' to the unit - which it follows. This pragma is implemented for compatibility - with DEC Ada 83 usage. The use of pragma `Suppress (All_Checks)' - as a normal configuration pragma is the preferred usage in GNAT. - - `pragma Suppress_Initialization' - Syntax: - - pragma Suppress_Initialization ([Entity =>] type_Name); - - This pragma suppresses any implicit or explicit initialization - associated with the given type name for all variables of this type. - - `pragma Task_Info' - Syntax - - pragma Task_Info (EXPRESSION); - - This pragma appears within a task definition (like pragma - `Priority') and applies to the task in which it appears. The - argument must be of type `System.Task_Info.Task_Info_Type'. The - `Task_Info' pragma provides system dependent control over aspect - of tasking implementation, for example, the ability to map tasks - to specific processors. For details on the facilities available - for the version of GNAT that you are using, see the documentation - in the specification of package System.Task_Info in the runtime - library. - - `pragma Task_Name' - Syntax - - pragma Task_Name (string_EXPRESSION); - - This pragma appears within a task definition (like pragma - `Priority') and applies to the task in which it appears. The - argument must be of type String, and provides a name to be used for - the task instance when the task is created. Note that this - expression is not required to be static, and in particular, it can - contain references to task discriminants. This facility can be - used to provide different names for different tasks as they are - created, as illustrated in the example below. - - The task name is recorded internally in the run-time structures - and is accessible to tools like the debugger. In addition the - routine `Ada.Task_Identification.Image' will return this string, - with a unique task address appended. - - -- Example of the use of pragma Task_Name - - with Ada.Task_Identification; - use Ada.Task_Identification; - with Text_IO; use Text_IO; - procedure t3 is - - type Astring is access String; - - task type Task_Typ (Name : access String) is - pragma Task_Name (Name.all); - end Task_Typ; - - task body Task_Typ is - Nam : constant String := Image (Current_Task); - begin - Put_Line ("-->" & Nam (1 .. 14) & "<--"); - end Task_Typ; - - type Ptr_Task is access Task_Typ; - Task_Var : Ptr_Task; - - begin - Task_Var := - new Task_Typ (new String'("This is task 1")); - Task_Var := - new Task_Typ (new String'("This is task 2")); - end; - - `pragma Task_Storage' - Syntax: - - pragma Task_Storage - [Task_Type =>] LOCAL_NAME, - [Top_Guard =>] static_integer_EXPRESSION); - - This pragma specifies the length of the guard area for tasks. The - guard area is an additional storage area allocated to a task. A - value of zero means that either no guard area is created or a - minimal guard area is created, depending on the target. This - pragma can appear anywhere a `Storage_Size' attribute definition - clause is allowed for a task type. - - `pragma Time_Slice' - Syntax: - - pragma Time_Slice (static_duration_EXPRESSION); - - For implementations of GNAT on operating systems where it is - possible to supply a time slice value, this pragma may be used for - this purpose. It is ignored if it is used in a system that does - not allow this control, or if it appears in other than the main - program unit. Note that the effect of this pragma is identical to - the effect of the DEC Ada 83 pragma of the same name when - operating under OpenVMS systems. - - `pragma Title' - Syntax: - - pragma Title (TITLING_OPTION [, TITLING OPTION]); - - TITLING_OPTION ::= - [Title =>] STRING_LITERAL, - | [Subtitle =>] STRING_LITERAL - - Syntax checked but otherwise ignored by GNAT. This is a listing - control pragma used in DEC Ada 83 implementations to provide a - title and/or subtitle for the program listing. The program - listing generated by GNAT does not have titles or subtitles. - - Unlike other pragmas, the full flexibility of named notation is - allowed for this pragma, i.e. the parameters may be given in any - order if named notation is used, and named and positional notation - can be mixed following the normal rules for procedure calls in Ada. - - `pragma Unchecked_Union' - Syntax: - - pragma Unchecked_Union (first_subtype_LOCAL_NAME) - - This pragma is used to declare that the specified type should be - represented in a manner equivalent to a C union type, and is - intended only for use in interfacing with C code that uses union - types. In Ada terms, the named type must obey the following rules: - - * It is a non-tagged non-limited record type. - - * It has a single discrete discriminant with a default value. - - * The component list consists of a single variant part. - - * Each variant has a component list with a single component. - - * No nested variants are allowed. - - * No component has an explicit default value. - - * No component has a non-static constraint. - - In addition, given a type that meets the above requirements, the - following restrictions apply to its use throughout the program: - - * The discriminant name can be mentioned only in an aggregate. - - * No subtypes may be created of this type. - - * The type may not be constrained by giving a discriminant - value. - - * The type cannot be passed as the actual for a generic formal - with a discriminant. - - Equality and inequality operations on `unchecked_unions' are not - available, since there is no discriminant to compare and the - compiler does not even know how many bits to compare. It is - implementation dependent whether this is detected at compile time - as an illegality or whether it is undetected and considered to be - an erroneous construct. In GNAT, a direct comparison is illegal, - but GNAT does not attempt to catch the composite case (where two - composites are compared that contain an unchecked union - component), so such comparisons are simply considered erroneous. - - The layout of the resulting type corresponds exactly to a C union, - where each branch of the union corresponds to a single variant in - the Ada record. The semantics of the Ada program is not changed - in any way by the pragma, i.e. provided the above restrictions are - followed, and no erroneous incorrect references to fields or - erroneous comparisons occur, the semantics is exactly as described - by the Ada reference manual. Pragma `Suppress - (Discriminant_Check)' applies implicitly to the type and the - default convention is C - - `pragma Unimplemented_Unit' - Syntax: - - pragma Unimplemented_Unit; - - If this pragma occurs in a unit that is processed by the compiler, - GNAT aborts with the message `XXX not implemented', where XXX is - the name of the current compilation unit. This pragma is intended - to allow the compiler to handle unimplemented library units in a - clean manner. - - The abort only happens if code is being generated. Thus you can - use specs of unimplemented packages in syntax or semantic checking - mode. - - `pragma Unreferenced' - Syntax: - - pragma Unreferenced (local_Name {, local_Name}); - - This pragma signals that the entities whose names are listed are - deliberately not referenced. This suppresses warnings about the - entities being unreferenced, and in addition a warning will be - generated if one of these entities is in fact referenced. - - This is particularly useful for clearly signalling that a - particular parameter is not referenced in some particular - subprogram implementation and that this is deliberate. It can also - be useful in the case of objects declared only for their - initialization or finalization side effects. - - If `local_Name' identifies more than one matching homonym in the - current scope, then the entity most recently declared is the one - to which the pragma applies. - - `pragma Unreserve_All_Interrupts' - Syntax: - - pragma Unreserve_All_Interrupts; - - Normally certain interrupts are reserved to the implementation. - Any attempt to attach an interrupt causes Program_Error to be - raised, as described in RM C.3.2(22). A typical example is the - `SIGINT' interrupt used in many systems for an `Ctrl-C' interrupt. - Normally this interrupt is reserved to the implementation, so - that `Ctrl-C' can be used to interrupt execution. - - If the pragma `Unreserve_All_Interrupts' appears anywhere in any - unit in a program, then all such interrupts are unreserved. This - allows the program to handle these interrupts, but disables their - standard functions. For example, if this pragma is used, then - pressing `Ctrl-C' will not automatically interrupt execution. - However, a program can then handle the `SIGINT' interrupt as it - chooses. - - For a full list of the interrupts handled in a specific - implementation, see the source code for the specification of - `Ada.Interrupts.Names' in file `a-intnam.ads'. This is a target - dependent file that contains the list of interrupts recognized for - a given target. The documentation in this file also specifies - what interrupts are affected by the use of the - `Unreserve_All_Interrupts' pragma. - - `pragma Unsuppress' - Syntax: - - pragma Unsuppress (IDENTIFIER [, [On =>] NAME]); - - This pragma undoes the effect of a previous pragma `Suppress'. If - there is no corresponding pragma `Suppress' in effect, it has no - effect. The range of the effect is the same as for pragma - `Suppress'. The meaning of the arguments is identical to that used - in pragma `Suppress'. - - One important application is to ensure that checks are on in cases - where code depends on the checks for its correct functioning, so - that the code will compile correctly even if the compiler switches - are set to suppress checks. - - `pragma Use_VADS_Size' - Syntax: - - pragma Use_VADS_Size; - - This is a configuration pragma. In a unit to which it applies, - any use of the 'Size attribute is automatically interpreted as a - use of the 'VADS_Size attribute. Note that this may result in - incorrect semantic processing of valid Ada 95 programs. This is - intended to aid in the handling of legacy code which depends on - the interpretation of Size as implemented in the VADS compiler. - See description of the VADS_Size attribute for further details. - - `pragma Validity_Checks' - Syntax: - - pragma Validity_Checks (string_LITERAL | ALL_CHECKS | On | Off); - - This pragma is used in conjunction with compiler switches to - control the built in validity checking provided by GNAT. The - compiler switches, if set provide an initial setting for the - switches, and this pragma may be used to modify these settings, or - the settings may be provided entirely by the use of the pragma. - This pragma can be used anywhere that a pragma is legal, including - use as a configuration pragma (including use in the `gnat.adc' - file). - - The form with a string literal specifies which validity options - are to be activated. The validity checks are first set to include - only the default reference manual settings, and then a string of - letters in the string specifies the exact set of options required. - The form of this string is exactly as described for the `-gnatVx' - compiler switch (see the GNAT users guide for details). For - example the following two methods can be used to enable validity - checking for mode `in' and `in out' subprogram parameters: - - pragma Validity_Checks ("im"); - gcc -c -gnatVim ... - - The form ALL_CHECKS activates all standard checks (its use is - equivalent to the use of the `gnatva' switch. - - The forms with `Off' and `On' can be used to temporarily disable - validity checks as shown in the following example: - - pragma Validity_Checks ("c"); -- validity checks for copies - pragma Validity_Checks (Off); -- turn off validity checks - A := B; -- B will not be validity checked - pragma Validity_Checks (On); -- turn validity checks back on - A := C; -- C will be validity checked - - `pragma Volatile' - Syntax: - - pragma Volatile (local_NAME) - - This pragma is defined by the Ada 95 Reference Manual, and the GNAT - implementation is fully conformant with this definition. The - reason it is mentioned in this section is that a pragma of the - same name was supplied in some Ada 83 compilers, including DEC Ada - 83. The Ada 95 implementation of pragma Volatile is upwards - compatible with the implementation in Dec Ada 83. - - `pragma Warnings' - Syntax: - - pragma Warnings (On | Off [, LOCAL_NAME]); - - Normally warnings are enabled, with the output being controlled by - the command line switch. Warnings (`Off') turns off generation of - warnings until a Warnings (`On') is encountered or the end of the - current unit. If generation of warnings is turned off using this - pragma, then no warning messages are output, regardless of the - setting of the command line switches. - - The form with a single argument is a configuration pragma. - - If the LOCAL_NAME parameter is present, warnings are suppressed for - the specified entity. This suppression is effective from the - point where it occurs till the end of the extended scope of the - variable (similar to the scope of `Suppress'). - - `pragma Weak_External' - Syntax: - - pragma Weak_External ([Entity =>] LOCAL_NAME); - - This pragma specifies that the given entity should be marked as a - weak external (one that does not have to be resolved) for the - linker. For further details, consult the GCC manual. - -  - File: gnat_rm.info, Node: Implementation Defined Attributes, Next: Implementation Advice, Prev: Implementation Defined Pragmas, Up: Top - - Implementation Defined Attributes - ********************************* - - Ada 95 defines (throughout the Ada 95 reference manual, summarized - in annex K), a set of attributes that provide useful additional - functionality in all areas of the language. These language defined - attributes are implemented in GNAT and work as described in the Ada 95 - Reference Manual. - - In addition, Ada 95 allows implementations to define additional - attributes whose meaning is defined by the implementation. GNAT - provides a number of these implementation-dependent attributes which - can be used to extend and enhance the functionality of the compiler. - This section of the GNAT reference manual describes these additional - attributes. - - Note that any program using these attributes may not be portable to - other compilers (although GNAT implements this set of attributes on all - platforms). Therefore if portability to other compilers is an important - consideration, you should minimize the use of these attributes. - - `Abort_Signal' - `Standard'Abort_Signal' (`Standard' is the only allowed prefix) - provides the entity for the special exception used to signal task - abort or asynchronous transfer of control. Normally this attribute - should only be used in the tasking runtime (it is highly peculiar, - and completely outside the normal semantics of Ada, for a user - program to intercept the abort exception). - - `Address_Size' - `Standard'Address_Size' (`Standard' is the only allowed prefix) is - a static constant giving the number of bits in an `Address'. It - is used primarily for constructing the definition of `Memory_Size' - in package `Standard', but may be freely used in user programs and - has the advantage of being static, while a direct reference to - System.Address'Size is non-static because Address is a private - type. - - `Asm_Input' - The `Asm_Input' attribute denotes a function that takes two - parameters. The first is a string, the second is an expression of - the type designated by the prefix. The first (string) argument is - required to be a static expression, and is the constraint for the - parameter, (e.g. what kind of register is required). The second - argument is the value to be used as the input argument. The - possible values for the constant are the same as those used in the - RTL, and are dependent on the configuration file used to built the - GCC back end. *Note Machine Code Insertions:: - - `Asm_Output' - The `Asm_Output' attribute denotes a function that takes two - parameters. The first is a string, the second is the name of a - variable of the type designated by the attribute prefix. The - first (string) argument is required to be a static expression and - designates the constraint for the parameter (e.g. what kind of - register is required). The second argument is the variable to be - updated with the result. The possible values for constraint are - the same as those used in the RTL, and are dependent on the - configuration file used to build the GCC back end. If there are - no output operands, then this argument may either be omitted, or - explicitly given as `No_Output_Operands'. *Note Machine Code - Insertions:: - - `AST_Entry' - This attribute is implemented only in OpenVMS versions of GNAT. - Applied to the name of an entry, it yields a value of the - predefined type AST_Handler (declared in the predefined package - System, as extended by the use of pragma `Extend_System - (Aux_DEC)'). This value enables the given entry to be called when - an AST occurs. For further details, refer to the `DEC Ada - Language Reference Manual', section 9.12a. - - `Bit' - `OBJ'Bit', where OBJ is any object, yields the bit offset within - the storage unit (byte) that contains the first bit of storage - allocated for the object. The value of this attribute is of the - type `Universal_Integer', and is always a non-negative number not - exceeding the value of `System.Storage_Unit'. - - For an object that is a variable or a constant allocated in a - register, the value is zero. (The use of this attribute does not - force the allocation of a variable to memory). - - For an object that is a formal parameter, this attribute applies - to either the matching actual parameter or to a copy of the - matching actual parameter. - - For an access object the value is zero. Note that `OBJ.all'Bit' - is subject to an `Access_Check' for the designated object. - Similarly for a record component `X.C'Bit' is subject to a - discriminant check and `X(I).Bit' and `X(I1..I2)'Bit' are subject - to index checks. - - This attribute is designed to be compatible with the DEC Ada 83 - definition and implementation of the `Bit' attribute. - - `Bit_Position' - `R.C'Bit', where R is a record object and C is one of the fields - of the record type, yields the bit offset within the record - contains the first bit of storage allocated for the object. The - value of this attribute is of the type `Universal_Integer'. The - value depends only on the field C and is independent of the - alignment of the containing record R. - - `Code_Address' - The `'Address' attribute may be applied to subprograms in Ada 95, - but the intended effect from the Ada 95 reference manual seems to - be to provide an address value which can be used to call the - subprogram by means of an address clause as in the following - example: - - procedure K is ... - - procedure L; - for L'Address use K'Address; - pragma Import (Ada, L); - - A call to `L' is then expected to result in a call to `K'. In Ada - 83, where there were no access-to-subprogram values, this was a - common work around for getting the effect of an indirect call. - GNAT implements the above use of `Address' and the technique - illustrated by the example code works correctly. - - However, for some purposes, it is useful to have the address of - the start of the generated code for the subprogram. On some - architectures, this is not necessarily the same as the `Address' - value described above. For example, the `Address' value may - reference a subprogram descriptor rather than the subprogram - itself. - - The `'Code_Address' attribute, which can only be applied to - subprogram entities, always returns the address of the start of the - generated code of the specified subprogram, which may or may not be - the same value as is returned by the corresponding `'Address' - attribute. - - `Default_Bit_Order' - `Standard'Default_Bit_Order' (`Standard' is the only permissible - prefix), provides the value `System.Default_Bit_Order' as a `Pos' - value (0 for `High_Order_First', 1 for `Low_Order_First'). This - is used to construct the definition of `Default_Bit_Order' in - package `System'. - - `Elaborated' - The prefix of the `'Elaborated' attribute must be a unit name. The - value is a Boolean which indicates whether or not the given unit - has been elaborated. This attribute is primarily intended for - internal use by the generated code for dynamic elaboration - checking, but it can also be used in user programs. The value - will always be True once elaboration of all units has been - completed. - - `Elab_Body' - This attribute can only be applied to a program unit name. It - returns the entity for the corresponding elaboration procedure for - elaborating the body of the referenced unit. This is used in the - main generated elaboration procedure by the binder and is not - normally used in any other context. However, there may be - specialized situations in which it is useful to be able to call - this elaboration procedure from Ada code, e.g. if it is necessary - to do selective re-elaboration to fix some error. - - `Elab_Spec' - This attribute can only be applied to a program unit name. It - returns the entity for the corresponding elaboration procedure for - elaborating the specification of the referenced unit. This is - used in the main generated elaboration procedure by the binder and - is not normally used in any other context. However, there may be - specialized situations in which it is useful to be able to call - this elaboration procedure from Ada code, e.g. if it is necessary - to do selective re-elaboration to fix some error. - - `Emax' - The `Emax' attribute is provided for compatibility with Ada 83. - See the Ada 83 reference manual for an exact description of the - semantics of this attribute. - - `Enum_Rep' - For every enumeration subtype S, `S'Enum_Rep' denotes a function - with the following specification: - - function S'Enum_Rep (Arg : S'Base) - return Universal_Integer; - - It is also allowable to apply `Enum_Rep' directly to an object of - an enumeration type or to a non-overloaded enumeration literal. - In this case `S'Enum_Rep' is equivalent to `TYP'Enum_Rep(S)' where - TYP is the type of the enumeration literal or object. - - The function returns the representation value for the given - enumeration value. This will be equal to value of the `Pos' - attribute in the absence of an enumeration representation clause. - This is a static attribute (i.e. the result is static if the - argument is static). - - `S'Enum_Rep' can also be used with integer types and objects, in - which case it simply returns the integer value. The reason for - this is to allow it to be used for `(<>)' discrete formal - arguments in a generic unit that can be instantiated with either - enumeration types or integer types. Note that if `Enum_Rep' is - used on a modular type whose upper bound exceeds the upper bound - of the largest signed integer type, and the argument is a - variable, so that the universal integer calculation is done at - run-time, then the call to `Enum_Rep' may raise `Constraint_Error'. - - `Epsilon' - The `Epsilon' attribute is provided for compatibility with Ada 83. - See the Ada 83 reference manual for an exact description of the - semantics of this attribute. - - `Fixed_Value' - For every fixed-point type S, `S'Fixed_Value' denotes a function - with the following specification: - - function S'Fixed_Value (Arg : Universal_Integer) - return S; - - The value returned is the fixed-point value V such that - - V = Arg * S'Small - - The effect is thus equivalent to first converting the argument to - the integer type used to represent S, and then doing an unchecked - conversion to the fixed-point type. This attribute is primarily - intended for use in implementation of the input-output functions - for fixed-point values. - - `Has_Discriminants' - The prefix of the `Has_Discriminants' attribute is a type. The - result is a Boolean value which is True if the type has - discriminants, and False otherwise. The intended use of this - attribute is in conjunction with generic definitions. If the - attribute is applied to a generic private type, it indicates - whether or not the corresponding actual type has discriminants. - - `Img' - The `Img' attribute differs from `Image' in that it may be applied - to objects as well as types, in which case it gives the `Image' - for the subtype of the object. This is convenient for debugging: - - Put_Line ("X = " & X'Img); - - has the same meaning as the more verbose: - - Put_Line ("X = " & TYPE'Image (X)); - - where TYPE is the subtype of the object X. - - `Integer_Value' - For every integer type S, `S'Integer_Value' denotes a function - with the following specification: - - function S'Integer_Value (Arg : Universal_Fixed) - return S; - - The value returned is the integer value V, such that - - Arg = V * TYPE'Small - - The effect is thus equivalent to first doing an unchecked convert - from the fixed-point type to its corresponding implementation - type, and then converting the result to the target integer type. - This attribute is primarily intended for use in implementation of - the standard input-output functions for fixed-point values. - - `Large' - The `Large' attribute is provided for compatibility with Ada 83. - See the Ada 83 reference manual for an exact description of the - semantics of this attribute. - - `Machine_Size' - This attribute is identical to the `Object_Size' attribute. It is - provided for compatibility with the DEC Ada 83 attribute of this - name. - - `Mantissa' - The `Mantissa' attribute is provided for compatibility with Ada - 83. See the Ada 83 reference manual for an exact description of - the semantics of this attribute. - - `Max_Interrupt_Priority' - `Standard'Max_Interrupt_Priority' (`Standard' is the only - permissible prefix), provides the value - `System.Max_Interrupt_Priority' and is intended primarily for - constructing this definition in package `System'. - - `Max_Priority' - `Standard'Max_Priority' (`Standard' is the only permissible - prefix) provides the value `System.Max_Priority' and is intended - primarily for constructing this definition in package `System'. - - `Maximum_Alignment' - `Standard'Maximum_Alignment' (`Standard' is the only permissible - prefix) provides the maximum useful alignment value for the - target. This is a static value that can be used to specify the - alignment for an object, guaranteeing that it is properly aligned - in all cases. This is useful when an external object is imported - and its alignment requirements are unknown. - - `Mechanism_Code' - `FUNCTION'Mechanism_Code' yields an integer code for the mechanism - used for the result of function, and `SUBPROGRAM'Mechanism_Code - (N)' yields the mechanism used for formal parameter number N (a - static integer value with 1 meaning the first parameter) of - SUBPROGRAM. The code returned is: - - 1 - by copy (value) - - 2 - by reference - - 3 - by descriptor (default descriptor class) - - 4 - by descriptor (UBS: unaligned bit string) - - 5 - by descriptor (UBSB: aligned bit string with arbitrary bounds) - - 6 - by descriptor (UBA: unaligned bit array) - - 7 - by descriptor (S: string, also scalar access type parameter) - - 8 - by descriptor (SB: string with arbitrary bounds) - - 9 - by descriptor (A: contiguous array) - - 10 - by descriptor (NCA: non-contiguous array) - - Values from 3 through 10 are only relevant to Digital OpenVMS - implementations. - - `Null_Parameter' - A reference `T'Null_Parameter' denotes an imaginary object of type - or subtype T allocated at machine address zero. The attribute is - allowed only as the default expression of a formal parameter, or as - an actual expression of a subprogram call. In either case, the - subprogram must be imported. - - The identity of the object is represented by the address zero in - the argument list, independent of the passing mechanism (explicit - or default). - - This capability is needed to specify that a zero address should be - passed for a record or other composite object passed by reference. - There is no way of indicating this without the `Null_Parameter' - attribute. - - `Object_Size' - The size of an object is not necessarily the same as the size of - the type of an object. This is because by default object sizes - are increased to be a multiple of the alignment of the object. - For example, `Natural'Size' is 31, but by default objects of type - `Natural' will have a size of 32 bits. Similarly, a record - containing an integer and a character: - - type Rec is record - I : Integer; - C : Character; - end record; - - will have a size of 40 (that is `Rec'Size' will be 40. The - alignment will be 4, because of the integer field, and so the - default size of record objects for this type will be 64 (8 bytes). - - The `TYPE'Object_Size' attribute has been added to GNAT to allow - the default object size of a type to be easily determined. For - example, `Natural'Object_Size' is 32, and `Rec'Object_Size' (for - the record type in the above example) will be 64. Note also that, - unlike the situation with the `Size' attribute as defined in the - Ada RM, the `Object_Size' attribute can be specified individually - for different subtypes. For example: - - type R is new Integer; - subtype R1 is R range 1 .. 10; - subtype R2 is R range 1 .. 10; - for R2'Object_Size use 8; - - In this example, `R'Object_Size' and `R1'Object_Size' are both 32 - since the default object size for a subtype is the same as the - object size for the parent subtype. This means that objects of - type `R' or `R1' will by default be 32 bits (four bytes). But - objects of type `R2' will be only 8 bits (one byte), since - `R2'Object_Size' has been set to 8. - - `Passed_By_Reference' - `TYPE'Passed_By_Reference' for any subtype TYPE returns a value of - type `Boolean' value that is `True' if the type is normally passed - by reference and `False' if the type is normally passed by copy in - calls. For scalar types, the result is always `False' and is - static. For non-scalar types, the result is non-static. - - `Range_Length' - `TYPE'Range_Length' for any discrete type TYPE yields the number - of values represented by the subtype (zero for a null range). The - result is static for static subtypes. `Range_Length' applied to - the index subtype of a one dimensional array always gives the same - result as `Range' applied to the array itself. - - `Safe_Emax' - The `Safe_Emax' attribute is provided for compatibility with Ada - 83. See the Ada 83 reference manual for an exact description of - the semantics of this attribute. - - `Safe_Large' - The `Safe_Large' attribute is provided for compatibility with Ada - 83. See the Ada 83 reference manual for an exact description of - the semantics of this attribute. - - `Safe_Large' - The `Safe_Large' attribute is provided for compatibility with Ada - 83. See the Ada 83 reference manual for an exact description of - the semantics of this attribute. - - `Small' - The `Small' attribute is defined in Ada 95 only for fixed-point - types. GNAT also allows this attribute to be applied to - floating-point types for compatibility with Ada 83. See the Ada - 83 reference manual for an exact description of the semantics of - this attribute when applied to floating-point types. - - `Storage_Unit' - `Standard'Storage_Unit' (`Standard' is the only permissible - prefix) provides the value `System.Storage_Unit' and is intended - primarily for constructing this definition in package `System'. - - `Tick' - `Standard'Tick' (`Standard' is the only permissible prefix) - provides the value of `System.Tick' and is intended primarily for - constructing this definition in package `System'. - - `To_Address' - The `System'To_Address' (`System' is the only permissible prefix) - denotes a function identical to - `System.Storage_Elements.To_Address' except that it is a static - attribute. This means that if its argument is a static - expression, then the result of the attribute is a static - expression. The result is that such an expression can be used in - contexts (e.g. preelaborable packages) which require a static - expression and where the function call could not be used (since - the function call is always non-static, even if its argument is - static). - - `Type_Class' - `TYPE'Type_Class' for any type or subtype TYPE yields the value of - the type class for the full type of TYPE. If TYPE is a generic - formal type, the value is the value for the corresponding actual - subtype. The value of this attribute is of type - `System.Aux_DEC.Type_Class', which has the following definition: - - type Type_Class is - (Type_Class_Enumeration, - Type_Class_Integer, - Type_Class_Fixed_Point, - Type_Class_Floating_Point, - Type_Class_Array, - Type_Class_Record, - Type_Class_Access, - Type_Class_Task, - Type_Class_Address); - - Protected types yield the value `Type_Class_Task', which thus - applies to all concurrent types. This attribute is designed to be - compatible with the DEC Ada 83 attribute of the same name. - - `UET_Address' - The `UET_Address' attribute can only be used for a prefix which - denotes a library package. It yields the address of the unit - exception table when zero cost exception handling is used. This - attribute is intended only for use within the GNAT implementation. - See the unit `Ada.Exceptions' in files `a-except.ads' and - `a-except.adb' for details on how this attribute is used in the - implementation. - - `Universal_Literal_String' - The prefix of `Universal_Literal_String' must be a named number. - The static result is the string consisting of the characters of - the number as defined in the original source. This allows the user - program to access the actual text of named numbers without - intermediate conversions and without the need to enclose the - strings in quotes (which would preclude their use as numbers). - This is used internally for the construction of values of the - floating-point attributes from the file `ttypef.ads', but may also - be used by user programs. - - `Unrestricted_Access' - The `Unrestricted_Access' attribute is similar to `Access' except - that all accessibility and aliased view checks are omitted. This - is a user-beware attribute. It is similar to `Address', for which - it is a desirable replacement where the value desired is an access - type. In other words, its effect is identical to first applying - the `Address' attribute and then doing an unchecked conversion to - a desired access type. In GNAT, but not necessarily in other - implementations, the use of static chains for inner level - subprograms means that `Unrestricted_Access' applied to a - subprogram yields a value that can be called as long as the - subprogram is in scope (normal Ada 95 accessibility rules restrict - this usage). - - `VADS_Size' - The `'VADS_Size' attribute is intended to make it easier to port - legacy code which relies on the semantics of `'Size' as implemented - by the VADS Ada 83 compiler. GNAT makes a best effort at - duplicating the same semantic interpretation. In particular, - `'VADS_Size' applied to a predefined or other primitive type with - no Size clause yields the Object_Size (for example, `Natural'Size' - is 32 rather than 31 on typical machines). In addition - `'VADS_Size' applied to an object gives the result that would be - obtained by applying the attribute to the corresponding type. - - `Value_Size' - `TYPE'Value_Size' is the number of bits required to represent a - value of the given subtype. It is the same as `TYPE'Size', but, - unlike `Size', may be set for non-first subtypes. - - `Wchar_T_Size' - `Standard'Wchar_T_Size' (`Standard' is the only permissible - prefix) provides the size in bits of the C `wchar_t' type - primarily for constructing the definition of this type in package - `Interfaces.C'. - - `Word_Size' - `Standard'Word_Size' (`Standard' is the only permissible prefix) - provides the value `System.Word_Size' and is intended primarily - for constructing this definition in package `System'. - -  - File: gnat_rm.info, Node: Implementation Advice, Next: Implementation Defined Characteristics, Prev: Implementation Defined Attributes, Up: Top - - Implementation Advice - ********************* - - The main text of the Ada 95 Reference Manual describes the required - behavior of all Ada 95 compilers, and the GNAT compiler conforms to - these requirements. - - In addition, there are sections throughout the Ada 95 reference - manual headed by the phrase "implementation advice". These sections - are not normative, i.e. they do not specify requirements that all - compilers must follow. Rather they provide advice on generally - desirable behavior. You may wonder why they are not requirements. The - most typical answer is that they describe behavior that seems generally - desirable, but cannot be provided on all systems, or which may be - undesirable on some systems. - - As far as practical, GNAT follows the implementation advice sections - in the Ada 95 Reference Manual. This chapter contains a table giving - the reference manual section number, paragraph number and several - keywords for each advice. Each entry consists of the text of the - advice followed by the GNAT interpretation of this advice. Most often, - this simply says "followed", which means that GNAT follows the advice. - However, in a number of cases, GNAT deliberately deviates from this - advice, in which case the text describes what GNAT does and why. - - *1.1.3(20): Error Detection* - - If an implementation detects the use of an unsupported Specialized - Needs Annex feature at run time, it should raise `Program_Error' if - feasible. - Not relevant. All specialized needs annex features are either - supported, or diagnosed at compile time. - - *1.1.3(31): Child Units* - - If an implementation wishes to provide implementation-defined - extensions to the functionality of a language-defined library - unit, it should normally do so by adding children to the library - unit. - Followed. - - *1.1.5(12): Bounded Errors* - - If an implementation detects a bounded error or erroneous - execution, it should raise `Program_Error'. - Followed in all cases in which the implementation detects a bounded - error or erroneous execution. Not all such situations are - detected at runtime. - - *2.8(16): Pragmas* - - Normally, implementation-defined pragmas should have no semantic - effect for error-free programs; that is, if the - implementation-defined pragmas are removed from a working program, - the program should still be legal, and should still have the same - semantics. - The following implementation defined pragmas are exceptions to this - rule: - - `Abort_Defer' - Affects semantics - - `Ada_83' - Affects legality - - `Assert' - Affects semantics - - `CPP_Class' - Affects semantics - - `CPP_Constructor' - Affects semantics - - `CPP_Virtual' - Affects semantics - - `CPP_Vtable' - Affects semantics - - `Debug' - Affects semantics - - `Interface_Name' - Affects semantics - - `Machine_Attribute' - Affects semantics - - `Unimplemented_Unit' - Affects legality - - `Unchecked_Union' - Affects semantics - - In each of the above cases, it is essential to the purpose of the - pragma that this advice not be followed. For details see the - separate section on implementation defined pragmas. - - *2.8(17-19): Pragmas* - - Normally, an implementation should not define pragmas that can - make an illegal program legal, except as follows: - - - A pragma used to complete a declaration, such as a pragma `Import'; - - - A pragma used to configure the environment by adding, removing, or - replacing `library_items'. - See response to paragraph 16 of this same section. - - *3.5.2(5): Alternative Character Sets* - - If an implementation supports a mode with alternative - interpretations for `Character' and `Wide_Character', the set of - graphic characters of `Character' should nevertheless remain a - proper subset of the set of graphic characters of - `Wide_Character'. Any character set "localizations" should be - reflected in the results of the subprograms defined in the - language-defined package `Characters.Handling' (see A.3) available - in such a mode. In a mode with an alternative interpretation of - `Character', the implementation should also support a - corresponding change in what is a legal `identifier_letter'. - Not all wide character modes follow this advice, in particular the - JIS and IEC modes reflect standard usage in Japan, and in these - encoding, the upper half of the Latin-1 set is not part of the - wide-character subset, since the most significant bit is used for - wide character encoding. However, this only applies to the - external forms. Internally there is no such restriction. - - *3.5.4(28): Integer Types* - - An implementation should support `Long_Integer' in addition to - `Integer' if the target machine supports 32-bit (or longer) - arithmetic. No other named integer subtypes are recommended for - package `Standard'. Instead, appropriate named integer subtypes - should be provided in the library package `Interfaces' (see B.2). - `Long_Integer' is supported. Other standard integer types are - supported so this advice is not fully followed. These types are - supported for convenient interface to C, and so that all hardware - types of the machine are easily available. - - *3.5.4(29): Integer Types* - - An implementation for a two's complement machine should support - modular types with a binary modulus up to `System.Max_Int*2+2'. An - implementation should support a non-binary modules up to - `Integer'Last'. - Followed. - - *3.5.5(8): Enumeration Values* - - For the evaluation of a call on `S'Pos' for an enumeration - subtype, if the value of the operand does not correspond to the - internal code for any enumeration literal of its type (perhaps due - to an un-initialized variable), then the implementation should - raise `Program_Error'. This is particularly important for - enumeration types with noncontiguous internal codes specified by an - enumeration_representation_clause. - Followed. - - *3.5.7(17): Float Types* - - An implementation should support `Long_Float' in addition to - `Float' if the target machine supports 11 or more digits of - precision. No other named floating point subtypes are recommended - for package `Standard'. Instead, appropriate named floating point - subtypes should be provided in the library package `Interfaces' - (see B.2). - `Short_Float' and `Long_Long_Float' are also provided. The former - provides improved compatibility with other implementations - supporting this type. The latter corresponds to the highest - precision floating-point type supported by the hardware. On most - machines, this will be the same as `Long_Float', but on some - machines, it will correspond to the IEEE extended form. The - notable case is all ia32 (x86) implementations, where - `Long_Long_Float' corresponds to the 80-bit extended precision - format supported in hardware on this processor. Note that the - 128-bit format on SPARC is not supported, since this is a software - rather than a hardware format. - - *3.6.2(11): Multidimensional Arrays* - - An implementation should normally represent multidimensional - arrays in row-major order, consistent with the notation used for - multidimensional array aggregates (see 4.3.3). However, if a - pragma `Convention' (`Fortran', ...) applies to a multidimensional - array type, then column-major order should be used instead (see - B.5, "Interfacing with Fortran"). - Followed. - - *9.6(30-31): Duration'Small* - - Whenever possible in an implementation, the value of - `Duration'Small' should be no greater than 100 microseconds. - Followed. (`Duration'Small' = 10**(-9)). - - - The time base for `delay_relative_statements' should be monotonic; - it need not be the same time base as used for `Calendar.Clock'. - Followed. - - *10.2.1(12): Consistent Representation* - - In an implementation, a type declared in a pre-elaborated package - should have the same representation in every elaboration of a - given version of the package, whether the elaborations occur in - distinct executions of the same program, or in executions of - distinct programs or partitions that include the given version. - Followed, except in the case of tagged types. Tagged types involve - implicit pointers to a local copy of a dispatch table, and these - pointers have representations which thus depend on a particular - elaboration of the package. It is not easy to see how it would be - possible to follow this advice without severely impacting - efficiency of execution. - - *11.4.1(19): Exception Information* - - `Exception_Message' by default and `Exception_Information' should - produce information useful for debugging. `Exception_Message' - should be short, about one line. `Exception_Information' can be - long. `Exception_Message' should not include the - `Exception_Name'. `Exception_Information' should include both the - `Exception_Name' and the `Exception_Message'. - Followed. For each exception that doesn't have a specified - `Exception_Message', the compiler generates one containing the - location of the raise statement. This location has the form - "file:line", where file is the short file name (without path - information) and line is the line number in the file. Note that - in the case of the Zero Cost Exception mechanism, these messages - become redundant with the Exception_Information that contains a - full backtrace of the calling sequence, so they are disabled. To - disable explicitly the generation of the source location message, - use the Pragma `Discard_Names'. - - *11.5(28): Suppression of Checks* - - The implementation should minimize the code executed for checks - that have been suppressed. - Followed. - - *13.1 (21-24): Representation Clauses* - - The recommended level of support for all representation items is - qualified as follows: - - - An implementation need not support representation items containing - non-static expressions, except that an implementation should - support a representation item for a given entity if each - non-static expression in the representation item is a name that - statically denotes a constant declared before the entity. - Followed. GNAT does not support non-static expressions in - representation clauses unless they are constants declared before - the entity. For example: - - X : typ; - for X'Address use To_address (16#2000#); - - will be rejected, since the To_Address expression is non-static. - Instead write: - - X_Address : constant Address : = - To_Address ((16#2000#); - X : typ; - for X'Address use X_Address; - - - An implementation need not support a specification for the `Size' - for a given composite subtype, nor the size or storage place for an - object (including a component) of a given composite subtype, - unless the constraints on the subtype and its composite - subcomponents (if any) are all static constraints. - Followed. Size Clauses are not permitted on non-static - components, as described above. - - - An aliased component, or a component whose type is by-reference, - should always be allocated at an addressable location. - Followed. - - *13.2(6-8): Packed Types* - - If a type is packed, then the implementation should try to minimize - storage allocated to objects of the type, possibly at the expense - of speed of accessing components, subject to reasonable complexity - in addressing calculations. - - - The recommended level of support pragma `Pack' is: - - For a packed record type, the components should be packed as - tightly as possible subject to the Sizes of the component - subtypes, and subject to any `record_representation_clause' that - applies to the type; the implementation may, but need not, reorder - components or cross aligned word boundaries to improve the - packing. A component whose `Size' is greater than the word size - may be allocated an integral number of words. - Followed. Tight packing of arrays is supported for all component - sizes up to 64-bits. - - - An implementation should support Address clauses for imported - subprograms. - Followed. - - *13.3(14-19): Address Clauses* - - For an array X, `X'Address' should point at the first component of - the array, and not at the array bounds. - Followed. - - - The recommended level of support for the `Address' attribute is: - - `X'Address' should produce a useful result if X is an object that - is aliased or of a by-reference type, or is an entity whose - `Address' has been specified. - Followed. A valid address will be produced even if none of those - conditions have been met. If necessary, the object is forced into - memory to ensure the address is valid. - - - An implementation should support `Address' clauses for imported - subprograms. - Followed. - - - Objects (including subcomponents) that are aliased or of a - by-reference type should be allocated on storage element - boundaries. - Followed. - - - If the `Address' of an object is specified, or it is imported or - exported, then the implementation should not perform optimizations - based on assumptions of no aliases. - Followed. - - *13.3(29-35): Alignment Clauses* - - The recommended level of support for the `Alignment' attribute for - subtypes is: - - An implementation should support specified Alignments that are - factors and multiples of the number of storage elements per word, - subject to the following: - Followed. - - - An implementation need not support specified `Alignment's for - combinations of `Size's and `Alignment's that cannot be easily - loaded and stored by available machine instructions. - Followed. - - - An implementation need not support specified `Alignment's that are - greater than the maximum `Alignment' the implementation ever - returns by default. - Followed. - - - The recommended level of support for the `Alignment' attribute for - objects is: - - Same as above, for subtypes, but in addition: - Followed. - - - For stand-alone library-level objects of statically constrained - subtypes, the implementation should support all `Alignment's - supported by the target linker. For example, page alignment is - likely to be supported for such objects, but not for subtypes. - Followed. - - *13.3(42-43): Size Clauses* - - The recommended level of support for the `Size' attribute of - objects is: - - A `Size' clause should be supported for an object if the specified - `Size' is at least as large as its subtype's `Size', and - corresponds to a size in storage elements that is a multiple of the - object's `Alignment' (if the `Alignment' is nonzero). - Followed. - - *13.3(50-56): Size Clauses* - - If the `Size' of a subtype is specified, and allows for efficient - independent addressability (see 9.10) on the target architecture, - then the `Size' of the following objects of the subtype should - equal the `Size' of the subtype: - - Aliased objects (including components). - Followed. - - - `Size' clause on a composite subtype should not affect the - internal layout of components. - Followed. - - - The recommended level of support for the `Size' attribute of - subtypes is: - - - The `Size' (if not specified) of a static discrete or fixed point - subtype should be the number of bits needed to represent each value - belonging to the subtype using an unbiased representation, leaving - space for a sign bit only if the subtype contains negative values. - If such a subtype is a first subtype, then an implementation - should support a specified `Size' for it that reflects this - representation. - Followed. - - - For a subtype implemented with levels of indirection, the `Size' - should include the size of the pointers, but not the size of what - they point at. - Followed. - - *13.3(71-73): Component Size Clauses* - - The recommended level of support for the `Component_Size' - attribute is: - - - An implementation need not support specified `Component_Sizes' - that are less than the `Size' of the component subtype. - Followed. - - - An implementation should support specified `Component_Size's that - are factors and multiples of the word size. For such - `Component_Size's, the array should contain no gaps between - components. For other `Component_Size's (if supported), the array - should contain no gaps between components when packing is also - specified; the implementation should forbid this combination in - cases where it cannot support a no-gaps representation. - Followed. - - *13.4(9-10): Enumeration Representation Clauses* - - The recommended level of support for enumeration representation - clauses is: - - An implementation need not support enumeration representation - clauses for boolean types, but should at minimum support the - internal codes in the range `System.Min_Int.System.Max_Int'. - Followed. - - *13.5.1(17-22): Record Representation Clauses* - - The recommended level of support for - `record_representation_clauses' is: - - An implementation should support storage places that can be - extracted with a load, mask, shift sequence of machine code, and - set with a load, shift, mask, store sequence, given the available - machine instructions and run-time model. - Followed. - - - A storage place should be supported if its size is equal to the - `Size' of the component subtype, and it starts and ends on a - boundary that obeys the `Alignment' of the component subtype. - Followed. - - - If the default bit ordering applies to the declaration of a given - type, then for a component whose subtype's `Size' is less than the - word size, any storage place that does not cross an aligned word - boundary should be supported. - Followed. - - - An implementation may reserve a storage place for the tag field of - a tagged type, and disallow other components from overlapping that - place. - Followed. The storage place for the tag field is the beginning of - the tagged record, and its size is Address'Size. GNAT will reject - an explicit component clause for the tag field. - - - An implementation need not support a `component_clause' for a - component of an extension part if the storage place is not after - the storage places of all components of the parent type, whether - or not those storage places had been specified. - Followed. The above advice on record representation clauses is - followed, and all mentioned features are implemented. - - *13.5.2(5): Storage Place Attributes* - - If a component is represented using some form of pointer (such as - an offset) to the actual data of the component, and this data is - contiguous with the rest of the object, then the storage place - attributes should reflect the place of the actual data, not the - pointer. If a component is allocated discontinuously from the - rest of the object, then a warning should be generated upon - reference to one of its storage place attributes. - Followed. There are no such components in GNAT. - - *13.5.3(7-8): Bit Ordering* - - The recommended level of support for the non-default bit ordering - is: - - - If `Word_Size' = `Storage_Unit', then the implementation should - support the non-default bit ordering in addition to the default - bit ordering. - Followed. Word size does not equal storage size in this - implementation. Thus non-default bit ordering is not supported. - - *13.7(37): Address as Private* - - `Address' should be of a private type. - Followed. - - *13.7.1(16): Address Operations* - - Operations in `System' and its children should reflect the target - environment semantics as closely as is reasonable. For example, - on most machines, it makes sense for address arithmetic to "wrap - around". Operations that do not make sense should raise - `Program_Error'. - Followed. Address arithmetic is modular arithmetic that wraps - around. No operation raises `Program_Error', since all operations - make sense. - - *13.9(14-17): Unchecked Conversion* - - The `Size' of an array object should not include its bounds; hence, - the bounds should not be part of the converted data. - Followed. - - - The implementation should not generate unnecessary run-time checks - to ensure that the representation of S is a representation of the - target type. It should take advantage of the permission to return - by reference when possible. Restrictions on unchecked conversions - should be avoided unless required by the target environment. - Followed. There are no restrictions on unchecked conversion. A - warning is generated if the source and target types do not have - the same size since the semantics in this case may be target - dependent. - - - The recommended level of support for unchecked conversions is: - - - Unchecked conversions should be supported and should be reversible - in the cases where this clause defines the result. To enable - meaningful use of unchecked conversion, a contiguous - representation should be used for elementary subtypes, for - statically constrained array subtypes whose component subtype is - one of the subtypes described in this paragraph, and for record - subtypes without discriminants whose component subtypes are - described in this paragraph. - Followed. - - *13.11(23-25): Implicit Heap Usage* - - An implementation should document any cases in which it dynamically - allocates heap storage for a purpose other than the evaluation of - an allocator. - Followed, the only other points at which heap storage is - dynamically allocated are as follows: - - * At initial elaboration time, to allocate dynamically sized - global objects. - - * To allocate space for a task when a task is created. - - * To extend the secondary stack dynamically when needed. The - secondary stack is used for returning variable length results. - - - A default (implementation-provided) storage pool for an - access-to-constant type should not have overhead to support - deallocation of individual objects. - Followed. - - - A storage pool for an anonymous access type should be created at - the point of an allocator for the type, and be reclaimed when the - designated object becomes inaccessible. - Followed. - - *13.11.2(17): Unchecked De-allocation* - - For a standard storage pool, `Free' should actually reclaim the - storage. - Followed. - - *13.13.2(17): Stream Oriented Attributes* - - If a stream element is the same size as a storage element, then the - normal in-memory representation should be used by `Read' and - `Write' for scalar objects. Otherwise, `Read' and `Write' should - use the smallest number of stream elements needed to represent all - values in the base range of the scalar type. - Followed. In particular, the interpretation chosen is that of - AI-195, which specifies that the size to be used is that of the - first subtype. - - *A.1(52): Implementation Advice* - - If an implementation provides additional named predefined integer - types, then the names should end with `Integer' as in - `Long_Integer'. If an implementation provides additional named - predefined floating point types, then the names should end with - `Float' as in `Long_Float'. - Followed. - - *A.3.2(49): `Ada.Characters.Handling'* - - If an implementation provides a localized definition of `Character' - or `Wide_Character', then the effects of the subprograms in - `Characters.Handling' should reflect the localizations. See also - 3.5.2. - Followed. GNAT provides no such localized definitions. - - *A.4.4(106): Bounded-Length String Handling* - - Bounded string objects should not be implemented by implicit - pointers and dynamic allocation. - Followed. No implicit pointers or dynamic allocation are used. - - *A.5.2(46-47): Random Number Generation* - - Any storage associated with an object of type `Generator' should be - reclaimed on exit from the scope of the object. - Followed. - - - If the generator period is sufficiently long in relation to the - number of distinct initiator values, then each possible value of - `Initiator' passed to `Reset' should initiate a sequence of random - numbers that does not, in a practical sense, overlap the sequence - initiated by any other value. If this is not possible, then the - mapping between initiator values and generator states should be a - rapidly varying function of the initiator value. - Followed. The generator period is sufficiently long for the first - condition here to hold true. - - *A.10.7(23): `Get_Immediate'* - - The `Get_Immediate' procedures should be implemented with - unbuffered input. For a device such as a keyboard, input should be - "available" if a key has already been typed, whereas for a disk - file, input should always be available except at end of file. For - a file associated with a keyboard-like device, any line-editing - features of the underlying operating system should be disabled - during the execution of `Get_Immediate'. - Followed. - - *B.1(39-41): Pragma `Export'* - - If an implementation supports pragma `Export' to a given language, - then it should also allow the main subprogram to be written in that - language. It should support some mechanism for invoking the - elaboration of the Ada library units included in the system, and - for invoking the finalization of the environment task. On typical - systems, the recommended mechanism is to provide two subprograms - whose link names are `adainit' and `adafinal'. `adainit' should - contain the elaboration code for library units. `adafinal' should - contain the finalization code. These subprograms should have no - effect the second and subsequent time they are called. - Followed. - - - Automatic elaboration of pre-elaborated packages should be - provided when pragma `Export' is supported. - Followed when the main program is in Ada. If the main program is - in a foreign language, then `adainit' must be called to elaborate - pre-elaborated packages. - - - For each supported convention L other than `Intrinsic', an - implementation should support `Import' and `Export' pragmas for - objects of L-compatible types and for subprograms, and pragma - `Convention' for L-eligible types and for subprograms, presuming - the other language has corresponding features. Pragma - `Convention' need not be supported for scalar types. - Followed. - - *B.2(12-13): Package `Interfaces'* - - For each implementation-defined convention identifier, there - should be a child package of package Interfaces with the - corresponding name. This package should contain any declarations - that would be useful for interfacing to the language - (implementation) represented by the convention. Any declarations - useful for interfacing to any language on the given hardware - architecture should be provided directly in `Interfaces'. - Followed. An additional package not defined in the Ada 95 - Reference Manual is `Interfaces.CPP', used for interfacing to C++. - - - An implementation supporting an interface to C, COBOL, or Fortran - should provide the corresponding package or packages described in - the following clauses. - Followed. GNAT provides all the packages described in this - section. - - *B.3(63-71): Interfacing with C* - - An implementation should support the following interface - correspondences between Ada and C. - Followed. - - - An Ada procedure corresponds to a void-returning C function. - Followed. - - - An Ada function corresponds to a non-void C function. - Followed. - - - An Ada `in' scalar parameter is passed as a scalar argument to a C - function. - Followed. - - - An Ada `in' parameter of an access-to-object type with designated - type T is passed as a `T*' argument to a C function, where T is - the C type corresponding to the Ada type T. - Followed. - - - An Ada access T parameter, or an Ada `out' or `in out' parameter - of an elementary type T, is passed as a `T*' argument to a C - function, where T is the C type corresponding to the Ada type T. - In the case of an elementary `out' or `in out' parameter, a - pointer to a temporary copy is used to preserve by-copy semantics. - Followed. - - - An Ada parameter of a record type T, of any mode, is passed as a - `T*' argument to a C function, where T is the C structure - corresponding to the Ada type T. - Followed. This convention may be overridden by the use of the - C_Pass_By_Copy pragma, or Convention, or by explicitly specifying - the mechanism for a given call using an extended import or export - pragma. - - - An Ada parameter of an array type with component type T, of any - mode, is passed as a `T*' argument to a C function, where T is the - C type corresponding to the Ada type T. - Followed. - - - An Ada parameter of an access-to-subprogram type is passed as a - pointer to a C function whose prototype corresponds to the - designated subprogram's specification. - Followed. - - *B.4(95-98): Interfacing with COBOL* - - An Ada implementation should support the following interface - correspondences between Ada and COBOL. - Followed. - - - An Ada access T parameter is passed as a `BY REFERENCE' data item - of the COBOL type corresponding to T. - Followed. - - - An Ada in scalar parameter is passed as a `BY CONTENT' data item of - the corresponding COBOL type. - Followed. - - - Any other Ada parameter is passed as a `BY REFERENCE' data item of - the COBOL type corresponding to the Ada parameter type; for - scalars, a local copy is used if necessary to ensure by-copy - semantics. - Followed. - - *B.5(22-26): Interfacing with Fortran* - - An Ada implementation should support the following interface - correspondences between Ada and Fortran: - Followed. - - - An Ada procedure corresponds to a Fortran subroutine. - Followed. - - - An Ada function corresponds to a Fortran function. - Followed. - - - An Ada parameter of an elementary, array, or record type T is - passed as a T argument to a Fortran procedure, where T is the - Fortran type corresponding to the Ada type T, and where the INTENT - attribute of the corresponding dummy argument matches the Ada - formal parameter mode; the Fortran implementation's parameter - passing conventions are used. For elementary types, a local copy - is used if necessary to ensure by-copy semantics. - Followed. - - - An Ada parameter of an access-to-subprogram type is passed as a - reference to a Fortran procedure whose interface corresponds to the - designated subprogram's specification. - Followed. - - *C.1(3-5): Access to Machine Operations* - - The machine code or intrinsic support should allow access to all - operations normally available to assembly language programmers for - the target environment, including privileged instructions, if any. - Followed. - - - The interfacing pragmas (see Annex B) should support interface to - assembler; the default assembler should be associated with the - convention identifier `Assembler'. - Followed. - - - If an entity is exported to assembly language, then the - implementation should allocate it at an addressable location, and - should ensure that it is retained by the linking process, even if - not otherwise referenced from the Ada code. The implementation - should assume that any call to a machine code or assembler - subprogram is allowed to read or update every object that is - specified as exported. - Followed. - - *C.1(10-16): Access to Machine Operations* - - The implementation should ensure that little or no overhead is - associated with calling intrinsic and machine-code subprograms. - Followed for both intrinsics and machine-code subprograms. - - - It is recommended that intrinsic subprograms be provided for - convenient access to any machine operations that provide special - capabilities or efficiency and that are not otherwise available - through the language constructs. - Followed. A full set of machine operation intrinsic subprograms - is provided. - - - Atomic read-modify-write operations--e.g., test and set, compare - and swap, decrement and test, enqueue/dequeue. - Followed on any target supporting such operations. - - - Standard numeric functions--e.g., sin, log. - Followed on any target supporting such operations. - - - String manipulation operations--e.g., translate and test. - Followed on any target supporting such operations. - - - Vector operations--e.g., compare vector against thresholds. - Followed on any target supporting such operations. - - - Direct operations on I/O ports. - Followed on any target supporting such operations. - - *C.3(28): Interrupt Support* - - If the `Ceiling_Locking' policy is not in effect, the - implementation should provide means for the application to specify - which interrupts are to be blocked during protected actions, if - the underlying system allows for a finer-grain control of - interrupt blocking. - Followed. The underlying system does not allow for finer-grain - control of interrupt blocking. - - *C.3.1(20-21): Protected Procedure Handlers* - - Whenever possible, the implementation should allow interrupt - handlers to be called directly by the hardware. - Followed on any target where the underlying operating system - permits such direct calls. - - - Whenever practical, violations of any implementation-defined - restrictions should be detected before run time. - Followed. Compile time warnings are given when possible. - - *C.3.2(25): Package `Interrupts'* - - If implementation-defined forms of interrupt handler procedures are - supported, such as protected procedures with parameters, then for - each such form of a handler, a type analogous to - `Parameterless_Handler' should be specified in a child package of - `Interrupts', with the same operations as in the predefined - package Interrupts. - Followed. - - *C.4(14): Pre-elaboration Requirements* - - It is recommended that pre-elaborated packages be implemented in - such a way that there should be little or no code executed at run - time for the elaboration of entities not already covered by the - Implementation Requirements. - Followed. Executable code is generated in some cases, e.g. loops - to initialize large arrays. - - *C.5(8): Pragma `Discard_Names'* - - If the pragma applies to an entity, then the implementation should - reduce the amount of storage used for storing names associated - with that entity. - Followed. - - *C.7.2(30): The Package Task_Attributes* - - Some implementations are targeted to domains in which memory use - at run time must be completely deterministic. For such - implementations, it is recommended that the storage for task - attributes will be pre-allocated statically and not from the heap. - This can be accomplished by either placing restrictions on the - number and the size of the task's attributes, or by using the - pre-allocated storage for the first N attribute objects, and the - heap for the others. In the latter case, N should be documented. - Not followed. This implementation is not targeted to such a - domain. - - *D.3(17): Locking Policies* - - The implementation should use names that end with `_Locking' for - locking policies defined by the implementation. - Followed. A single implementation-defined locking policy is - defined, whose name (`Inheritance_Locking') follows this - suggestion. - - *D.4(16): Entry Queuing Policies* - - Names that end with `_Queuing' should be used for all - implementation-defined queuing policies. - Followed. No such implementation-defined queueing policies exist. - - *D.6(9-10): Preemptive Abort* - - Even though the `abort_statement' is included in the list of - potentially blocking operations (see 9.5.1), it is recommended - that this statement be implemented in a way that never requires - the task executing the `abort_statement' to block. - Followed. - - - On a multi-processor, the delay associated with aborting a task on - another processor should be bounded; the implementation should use - periodic polling, if necessary, to achieve this. - Followed. - - *D.7(21): Tasking Restrictions* - - When feasible, the implementation should take advantage of the - specified restrictions to produce a more efficient implementation. - GNAT currently takes advantage of these restrictions by providing - an optimized run time when the Ravenscar profile and the GNAT - restricted run time set of restrictions are specified. See pragma - `Ravenscar' and pragma `Restricted_Run_Time' for more details. - - *D.8(47-49): Monotonic Time* - - When appropriate, implementations should provide configuration - mechanisms to change the value of `Tick'. - Such configuration mechanisms are not appropriate to this - implementation and are thus not supported. - - - It is recommended that `Calendar.Clock' and `Real_Time.Clock' be - implemented as transformations of the same time base. - Followed. - - - It is recommended that the "best" time base which exists in the - underlying system be available to the application through `Clock'. - "Best" may mean highest accuracy or largest range. - Followed. - - *E.5(28-29): Partition Communication Subsystem* - - Whenever possible, the PCS on the called partition should allow for - multiple tasks to call the RPC-receiver with different messages and - should allow them to block until the corresponding subprogram body - returns. - Followed by GLADE, a separately supplied PCS that can be used with - GNAT. - - - The `Write' operation on a stream of type `Params_Stream_Type' - should raise `Storage_Error' if it runs out of space trying to - write the `Item' into the stream. - Followed by GLADE, a separately supplied PCS that can be used with - GNAT. - - *F(7): COBOL Support* - - If COBOL (respectively, C) is widely supported in the target - environment, implementations supporting the Information Systems - Annex should provide the child package `Interfaces.COBOL' - (respectively, `Interfaces.C') specified in Annex B and should - support a `convention_identifier' of COBOL (respectively, C) in - the interfacing pragmas (see Annex B), thus allowing Ada programs - to interface with programs written in that language. - Followed. - - *F.1(2): Decimal Radix Support* - - Packed decimal should be used as the internal representation for - objects of subtype S when S'Machine_Radix = 10. - Not followed. GNAT ignores S'Machine_Radix and always uses binary - representations. - - *G: Numerics* - - - If Fortran (respectively, C) is widely supported in the target - environment, implementations supporting the Numerics Annex should - provide the child package `Interfaces.Fortran' (respectively, - `Interfaces.C') specified in Annex B and should support a - `convention_identifier' of Fortran (respectively, C) in the - interfacing pragmas (see Annex B), thus allowing Ada programs to - interface with programs written in that language. - Followed. - - *G.1.1(56-58): Complex Types* - - - Because the usual mathematical meaning of multiplication of a - complex operand and a real operand is that of the scaling of both - components of the former by the latter, an implementation should - not perform this operation by first promoting the real operand to - complex type and then performing a full complex multiplication. - In systems that, in the future, support an Ada binding to IEC - 559:1989, the latter technique will not generate the required - result when one of the components of the complex operand is - infinite. (Explicit multiplication of the infinite component by - the zero component obtained during promotion yields a NaN that - propagates into the final result.) Analogous advice applies in the - case of multiplication of a complex operand and a pure-imaginary - operand, and in the case of division of a complex operand by a - real or pure-imaginary operand. - Not followed. - - - Similarly, because the usual mathematical meaning of addition of a - complex operand and a real operand is that the imaginary operand - remains unchanged, an implementation should not perform this - operation by first promoting the real operand to complex type and - then performing a full complex addition. In implementations in - which the `Signed_Zeros' attribute of the component type is `True' - (and which therefore conform to IEC 559:1989 in regard to the - handling of the sign of zero in predefined arithmetic operations), - the latter technique will not generate the required result when - the imaginary component of the complex operand is a negatively - signed zero. (Explicit addition of the negative zero to the zero - obtained during promotion yields a positive zero.) Analogous - advice applies in the case of addition of a complex operand and a - pure-imaginary operand, and in the case of subtraction of a - complex operand and a real or pure-imaginary operand. - Not followed. - - - Implementations in which `Real'Signed_Zeros' is `True' should - attempt to provide a rational treatment of the signs of zero - results and result components. As one example, the result of the - `Argument' function should have the sign of the imaginary - component of the parameter `X' when the point represented by that - parameter lies on the positive real axis; as another, the sign of - the imaginary component of the `Compose_From_Polar' function - should be the same as (respectively, the opposite of) that of the - `Argument' parameter when that parameter has a value of zero and - the `Modulus' parameter has a nonnegative (respectively, negative) - value. - Followed. - - *G.1.2(49): Complex Elementary Functions* - - Implementations in which `Complex_Types.Real'Signed_Zeros' is - `True' should attempt to provide a rational treatment of the signs - of zero results and result components. For example, many of the - complex elementary functions have components that are odd - functions of one of the parameter components; in these cases, the - result component should have the sign of the parameter component - at the origin. Other complex elementary functions have zero - components whose sign is opposite that of a parameter component at - the origin, or is always positive or always negative. - Followed. - - *G.2.4(19): Accuracy Requirements* - - The versions of the forward trigonometric functions without a - `Cycle' parameter should not be implemented by calling the - corresponding version with a `Cycle' parameter of - `2.0*Numerics.Pi', since this will not provide the required - accuracy in some portions of the domain. For the same reason, the - version of `Log' without a `Base' parameter should not be - implemented by calling the corresponding version with a `Base' - parameter of `Numerics.e'. - Followed. - - *G.2.6(15): Complex Arithmetic Accuracy* - - The version of the `Compose_From_Polar' function without a `Cycle' - parameter should not be implemented by calling the corresponding - version with a `Cycle' parameter of `2.0*Numerics.Pi', since this - will not provide the required accuracy in some portions of the - domain. - Followed. - -  - File: gnat_rm.info, Node: Implementation Defined Characteristics, Next: Intrinsic Subprograms, Prev: Implementation Advice, Up: Top - - Implementation Defined Characteristics - ************************************** - - In addition to the implementation dependent pragmas and attributes, - and the implementation advice, there are a number of other features of - Ada 95 that are potentially implementation dependent. These are - mentioned throughout the Ada 95 Reference Manual, and are summarized in - annex M. - - A requirement for conforming Ada compilers is that they provide - documentation describing how the implementation deals with each of these - issues. In this chapter, you will find each point in annex M listed - followed by a description in italic font of how GNAT handles the - implementation dependence. - - You can use this chapter as a guide to minimizing implementation - dependent features in your programs if portability to other compilers - and other operating systems is an important consideration. The numbers - in each section below correspond to the paragraph number in the Ada 95 - Reference Manual. - - - *2*. Whether or not each recommendation given in Implementation Advice - is followed. See 1.1.2(37). - - *Note Implementation Advice::. - - - *3*. Capacity limitations of the implementation. See 1.1.3(3). - - The complexity of programs that can be processed is limited only by the - total amount of available virtual memory, and disk space for the - generated object files. - - - *4*. Variations from the standard that are impractical to avoid given - the implementation's execution environment. See 1.1.3(6). - - There are no variations from the standard. - - - *5*. Which `code_statement's cause external interactions. See - 1.1.3(10). - - Any `code_statement' can potentially cause external interactions. - - - *6*. The coded representation for the text of an Ada program. See - 2.1(4). - - See separate section on source representation. - - - *7*. The control functions allowed in comments. See 2.1(14). - - See separate section on source representation. - - - *8*. The representation for an end of line. See 2.2(2). - - See separate section on source representation. - - - *9*. Maximum supported line length and lexical element length. See - 2.2(15). - - The maximum line length is 255 characters an the maximum length of a - lexical element is also 255 characters. - - - *10*. Implementation defined pragmas. See 2.8(14). - - *Note Implementation Defined Pragmas::. - - - *11*. Effect of pragma `Optimize'. See 2.8(27). - - Pragma `Optimize', if given with a `Time' or `Space' parameter, checks - that the optimization flag is set, and aborts if it is not. - - - *12*. The sequence of characters of the value returned by `S'Image' - when some of the graphic characters of `S'Wide_Image' are not defined - in `Character'. See 3.5(37). - - The sequence of characters is as defined by the wide character encoding - method used for the source. See section on source representation for - further details. - - - *13*. The predefined integer types declared in `Standard'. See - 3.5.4(25). - - `Short_Short_Integer' - 8 bit signed - - `Short_Integer' - (Short) 16 bit signed - - `Integer' - 32 bit signed - - `Long_Integer' - 64 bit signed (Alpha OpenVMS only) 32 bit signed (all other - targets) - - `Long_Long_Integer' - 64 bit signed - - - *14*. Any nonstandard integer types and the operators defined for - them. See 3.5.4(26). - - There are no nonstandard integer types. - - - *15*. Any nonstandard real types and the operators defined for them. - See 3.5.6(8). - - There are no nonstandard real types. - - - *16*. What combinations of requested decimal precision and range are - supported for floating point types. See 3.5.7(7). - - The precision and range is as defined by the IEEE standard. - - - *17*. The predefined floating point types declared in `Standard'. See - 3.5.7(16). - - `Short_Float' - 32 bit IEEE short - - `Float' - (Short) 32 bit IEEE short - - `Long_Float' - 64 bit IEEE long - - `Long_Long_Float' - 64 bit IEEE long (80 bit IEEE long on x86 processors) - - - *18*. The small of an ordinary fixed point type. See 3.5.9(8). - - `Fine_Delta' is 2**(-63) - - - *19*. What combinations of small, range, and digits are supported for - fixed point types. See 3.5.9(10). - - Any combinations are permitted that do not result in a small less than - `Fine_Delta' and do not result in a mantissa larger than 63 bits. If - the mantissa is larger than 53 bits on machines where Long_Long_Float - is 64 bits (true of all architectures except ia32), then the output from - Text_IO is accurate to only 53 bits, rather than the full mantissa. - This is because floating-point conversions are used to convert fixed - point. - - - *20*. The result of `Tags.Expanded_Name' for types declared within an - unnamed `block_statement'. See 3.9(10). - - Block numbers of the form `BNNN', where NNN is a decimal integer are - allocated. - - - *21*. Implementation-defined attributes. See 4.1.4(12). - - *Note Implementation Defined Attributes::. - - - *22*. Any implementation-defined time types. See 9.6(6). - - There are no implementation-defined time types. - - - *23*. The time base associated with relative delays. - - See 9.6(20). The time base used is that provided by the C library - function `gettimeofday'. - - - *24*. The time base of the type `Calendar.Time'. See 9.6(23). - - The time base used is that provided by the C library function - `gettimeofday'. - - - *25*. The time zone used for package `Calendar' operations. See - 9.6(24). - - The time zone used by package `Calendar' is the current system time zone - setting for local time, as accessed by the C library function - `localtime'. - - - *26*. Any limit on `delay_until_statements' of `select_statements'. - See 9.6(29). - - There are no such limits. - - - *27*. Whether or not two non overlapping parts of a composite object - are independently addressable, in the case where packing, record - layout, or `Component_Size' is specified for the object. See 9.10(1). - - Separate components are independently addressable if they do not share - overlapping storage units. - - - *28*. The representation for a compilation. See 10.1(2). - - A compilation is represented by a sequence of files presented to the - compiler in a single invocation of the `gcc' command. - - - *29*. Any restrictions on compilations that contain multiple - compilation_units. See 10.1(4). - - No single file can contain more than one compilation unit, but any - sequence of files can be presented to the compiler as a single - compilation. - - - *30*. The mechanisms for creating an environment and for adding and - replacing compilation units. See 10.1.4(3). - - See separate section on compilation model. - - - *31*. The manner of explicitly assigning library units to a partition. - See 10.2(2). - - If a unit contains an Ada main program, then the Ada units for the - partition are determined by recursive application of the rules in the - Ada Reference Manual section 10.2(2-6). In other words, the Ada units - will be those that are needed by the main program, and then this - definition of need is applied recursively to those units, and the - partition contains the transitive closure determined by this - relationship. In short, all the necessary units are included, with no - need to explicitly specify the list. If additional units are required, - e.g. by foreign language units, then all units must be mentioned in the - context clause of one of the needed Ada units. - - If the partition contains no main program, or if the main program is - in a language other than Ada, then GNAT provides the binder options - `-z' and `-n' respectively, and in this case a list of units can be - explicitly supplied to the binder for inclusion in the partition (all - units needed by these units will also be included automatically). For - full details on the use of these options, refer to the `GNAT User's - Guide' sections on Binding and Linking. - - - *32*. The implementation-defined means, if any, of specifying which - compilation units are needed by a given compilation unit. See 10.2(2). - - The units needed by a given compilation unit are as defined in the Ada - Reference Manual section 10.2(2-6). There are no - implementation-defined pragmas or other implementation-defined means - for specifying needed units. - - - *33*. The manner of designating the main subprogram of a partition. - See 10.2(7). - - The main program is designated by providing the name of the - corresponding `ALI' file as the input parameter to the binder. - - - *34*. The order of elaboration of `library_items'. See 10.2(18). - - The first constraint on ordering is that it meets the requirements of - chapter 10 of the Ada 95 Reference Manual. This still leaves some - implementation dependent choices, which are resolved by first - elaborating bodies as early as possible (i.e. in preference to specs - where there is a choice), and second by evaluating the immediate with - clauses of a unit to determine the probably best choice, and third by - elaborating in alphabetical order of unit names where a choice still - remains. - - - *35*. Parameter passing and function return for the main subprogram. - See 10.2(21). - - The main program has no parameters. It may be a procedure, or a - function returning an integer type. In the latter case, the returned - integer value is the return code of the program. - - - *36*. The mechanisms for building and running partitions. See - 10.2(24). - - GNAT itself supports programs with only a single partition. The - GNATDIST tool provided with the GLADE package (which also includes an - implementation of the PCS) provides a completely flexible method for - building and running programs consisting of multiple partitions. See - the separate GLADE manual for details. - - - *37*. The details of program execution, including program termination. - See 10.2(25). - - See separate section on compilation model. - - - *38*. The semantics of any non-active partitions supported by the - implementation. See 10.2(28). - - Passive partitions are supported on targets where shared memory is - provided by the operating system. See the GLADE reference manual for - further details. - - - *39*. The information returned by `Exception_Message'. See 11.4.1(10). - - Exception message returns the null string unless a specific message has - been passed by the program. - - - *40*. The result of `Exceptions.Exception_Name' for types declared - within an unnamed `block_statement'. See 11.4.1(12). - - Blocks have implementation defined names of the form `BNNN' where NNN - is an integer. - - - *41*. The information returned by `Exception_Information'. See - 11.4.1(13). - - `Exception_Information' returns a string in the following format: - - _Exception_Name:_ nnnnn - _Message:_ mmmmm - _PID:_ ppp - _Call stack traceback locations:_ - 0xhhhh 0xhhhh 0xhhhh ... 0xhhh - - where - - * `nnnn' is the fully qualified name of the exception in all upper - case letters. This line is always present. - - * `mmmm' is the message (this line present only if message is - non-null) - - * `ppp' is the Process Id value as a decimal integer (this line is - present only if the Process Id is non-zero). Currently we are not - making use of this field. - - * The Call stack traceback locations line and the following values - are present only if at least one traceback location was recorded. - The values are given in C style format, with lower case letters - for a-f, and only as many digits present as are necessary. - - The line terminator sequence at the end of each line, including the - last line is a single `LF' character (`16#0A#'). - - - *42*. Implementation-defined check names. See 11.5(27). - - No implementation-defined check names are supported. - - - *43*. The interpretation of each aspect of representation. See - 13.1(20). - - See separate section on data representations. - - - *44*. Any restrictions placed upon representation items. See 13.1(20). - - See separate section on data representations. - - - *45*. The meaning of `Size' for indefinite subtypes. See 13.3(48). - - Size for an indefinite subtype is the maximum possible size, except that - for the case of a subprogram parameter, the size of the parameter object - is the actual size. - - - *46*. The default external representation for a type tag. See - 13.3(75). - - The default external representation for a type tag is the fully expanded - name of the type in upper case letters. - - - *47*. What determines whether a compilation unit is the same in two - different partitions. See 13.3(76). - - A compilation unit is the same in two different partitions if and only - if it derives from the same source file. - - - *48*. Implementation-defined components. See 13.5.1(15). - - The only implementation defined component is the tag for a tagged type, - which contains a pointer to the dispatching table. - - - *49*. If `Word_Size' = `Storage_Unit', the default bit ordering. See - 13.5.3(5). - - `Word_Size' (32) is not the same as `Storage_Unit' (8) for this - implementation, so no non-default bit ordering is supported. The - default bit ordering corresponds to the natural endianness of the - target architecture. - - - *50*. The contents of the visible part of package `System' and its - language-defined children. See 13.7(2). - - See the definition of these packages in files `system.ads' and - `s-stoele.ads'. - - - *51*. The contents of the visible part of package - `System.Machine_Code', and the meaning of `code_statements'. See - 13.8(7). - - See the definition and documentation in file `s-maccod.ads'. - - - *52*. The effect of unchecked conversion. See 13.9(11). - - Unchecked conversion between types of the same size and results in an - uninterpreted transmission of the bits from one type to the other. If - the types are of unequal sizes, then in the case of discrete types, a - shorter source is first zero or sign extended as necessary, and a - shorter target is simply truncated on the left. For all non-discrete - types, the source is first copied if necessary to ensure that the - alignment requirements of the target are met, then a pointer is - constructed to the source value, and the result is obtained by - dereferencing this pointer after converting it to be a pointer to the - target type. - - - *53*. The manner of choosing a storage pool for an access type when - `Storage_Pool' is not specified for the type. See 13.11(17). - - There are 3 different standard pools used by the compiler when - `Storage_Pool' is not specified depending whether the type is local to - a subprogram or defined at the library level and whether - `Storage_Size'is specified or not. See documentation in the runtime - library units `System.Pool_Global', `System.Pool_Size' and - `System.Pool_Local' in files `s-poosiz.ads', `s-pooglo.ads' and - `s-pooloc.ads' for full details on the default pools used. - - - *54*. Whether or not the implementation provides user-accessible names - for the standard pool type(s). See 13.11(17). - - See documentation in the sources of the run time mentioned in paragraph - *53* . All these pools are accessible by means of `with''ing these - units. - - - *55*. The meaning of `Storage_Size'. See 13.11(18). - - `Storage_Size' is measured in storage units, and refers to the total - space available for an access type collection, or to the primary stack - space for a task. - - - *56*. Implementation-defined aspects of storage pools. See 13.11(22). - - See documentation in the sources of the run time mentioned in paragraph - *53* for details on GNAT-defined aspects of storage pools. - - - *57*. The set of restrictions allowed in a pragma `Restrictions'. See - 13.12(7). - - All RM defined Restriction identifiers are implemented. The following - additional restriction identifiers are provided. There are two separate - lists of implementation dependent restriction identifiers. The first - set requires consistency throughout a partition (in other words, if the - restriction identifier is used for any compilation unit in the - partition, then all compilation units in the partition must obey the - restriction. - - `Boolean_Entry_Barriers' - This restriction ensures at compile time that barriers in entry - declarations for protected types are restricted to references to - simple boolean variables defined in the private part of the - protected type. No other form of entry barriers is permitted. - This is one of the restrictions of the Ravenscar profile for - limited tasking (see also pragma `Ravenscar'). - - `Max_Entry_Queue_Depth => Expr' - This restriction is a declaration that any protected entry - compiled in the scope of the restriction has at most the specified - number of tasks waiting on the entry at any one time, and so no - queue is required. This restriction is not checked at compile - time. A program execution is erroneous if an attempt is made to - queue more than the specified number of tasks on such an entry. - - `No_Calendar' - This restriction ensures at compile time that there is no implicit - or explicit dependence on the package `Ada.Calendar'. - - `No_Dynamic_Interrupts' - This restriction ensures at compile time that there is no attempt - to dynamically associate interrupts. Only static association is - allowed. - - `No_Enumeration_Maps' - This restriction ensures at compile time that no operations - requiring enumeration maps are used (that is Image and Value - attributes applied to enumeration types). - - `No_Entry_Calls_In_Elaboration_Code' - This restriction ensures at compile time that no task or protected - entry calls are made during elaboration code. As a result of the - use of this restriction, the compiler can assume that no code past - an accept statement in a task can be executed at elaboration time. - - `No_Exception_Handlers' - This restriction ensures at compile time that there are no explicit - exception handlers. - - `No_Implicit_Conditionals' - This restriction ensures that the generated code does not contain - any implicit conditionals, either by modifying the generated code - where possible, or by rejecting any construct that would otherwise - generate an implicit conditional. The details and use of this - restriction are described in more detail in the High Integrity - product documentation. - - `No_Implicit_Loops' - This restriction ensures that the generated code does not contain - any implicit `for' loops, either by modifying the generated code - where possible, or by rejecting any construct that would otherwise - generate an implicit `for' loop. The details and use of this - restriction are described in more detail in the High Integrity - product documentation. - - `No_Local_Protected_Objects' - This restriction ensures at compile time that protected objects are - only declared at the library level. - - `No_Protected_Type_Allocators' - This restriction ensures at compile time that there are no - allocator expressions that attempt to allocate protected objects. - - `No_Secondary_Stack' - This restriction ensures at compile time that the generated code - does not contain any reference to the secondary stack. The - secondary stack is used to implement functions returning - unconstrained objects (arrays or records) on some targets. The - details and use of this restriction are described in more detail - in the High Integrity product documentation. - - `No_Select_Statements' - This restriction ensures at compile time no select statements of - any kind are permitted, that is the keyword `select' may not - appear. This is one of the restrictions of the Ravenscar profile - for limited tasking (see also pragma `Ravenscar'). - - `No_Standard_Storage_Pools' - This restriction ensures at compile time that no access types use - the standard default storage pool. Any access type declared must - have an explicit Storage_Pool attribute defined specifying a - user-defined storage pool. - - `No_Streams' - This restriction ensures at compile time that there are no - implicit or explicit dependencies on the package `Ada.Streams'. - - `No_Task_Attributes' - This restriction ensures at compile time that there are no - implicit or explicit dependencies on the package - `Ada.Task_Attributes'. - - `No_Task_Termination' - This restriction ensures at compile time that no terminate - alternatives appear in any task body. - - `No_Tasking' - This restriction prevents the declaration of tasks or task types - throughout the partition. It is similar in effect to the use of - `Max_Tasks => 0' except that violations are caught at compile time - and cause an error message to be output either by the compiler or - binder. - - `No_Wide_Characters' - This restriction ensures at compile time that no uses of the types - `Wide_Character' or `Wide_String' appear, and that no wide - character literals appear in the program (that is literals - representing characters not in type `Character'. - - `Static_Priorities' - This restriction ensures at compile time that all priority - expressions are static, and that there are no dependencies on the - package `Ada.Dynamic_Priorities'. - - `Static_Storage_Size' - This restriction ensures at compile time that any expression - appearing in a Storage_Size pragma or attribute definition clause - is static. - - The second set of implementation dependent restriction identifiers does - not require partition-wide consistency. The restriction may be - enforced for a single compilation unit without any effect on any of the - other compilation units in the partition. - - `No_Elaboration_Code' - This restriction ensures at compile time that no elaboration code - is generated. Note that this is not the same condition as is - enforced by pragma `Preelaborate'. There are cases in which - pragma `Preelaborate' still permits code to be generated (e.g. - code to initialize a large array to all zeroes), and there are - cases of units which do not meet the requirements for pragma - `Preelaborate', but for which no elaboration code is generated. - Generally, it is the case that preelaborable units will meet the - restrictions, with the exception of large aggregates initialized - with an others_clause, and exception declarations (which generate - calls to a run-time registry procedure). Note that this - restriction is enforced on a unit by unit basis, it need not be - obeyed consistently throughout a partition. - - `No_Entry_Queue' - This restriction is a declaration that any protected entry - compiled in the scope of the restriction has at most one task - waiting on the entry at any one time, and so no queue is required. - This restriction is not checked at compile time. A program - execution is erroneous if an attempt is made to queue a second - task on such an entry. - - `No_Implementation_Attributes' - This restriction checks at compile time that no GNAT-defined - attributes are present. With this restriction, the only - attributes that can be used are those defined in the Ada 95 - Reference Manual. - - `No_Implementation_Pragmas' - This restriction checks at compile time that no GNAT-defined - pragmas are present. With this restriction, the only pragmas that - can be used are those defined in the Ada 95 Reference Manual. - - `No_Implementation_Restrictions' - This restriction checks at compile time that no GNAT-defined - restriction identifiers (other than - `No_Implementation_Restrictions' itself) are present. With this - restriction, the only other restriction identifiers that can be - used are those defined in the Ada 95 Reference Manual. - - - *58*. The consequences of violating limitations on `Restrictions' - pragmas. See 13.12(9). - - Restrictions that can be checked at compile time result in illegalities - if violated. Currently there are no other consequences of violating - restrictions. - - - *59*. The representation used by the `Read' and `Write' attributes of - elementary types in terms of stream elements. See 13.13.2(9). - - The representation is the in-memory representation of the base type of - the type, using the number of bits corresponding to the `TYPE'Size' - value, and the natural ordering of the machine. - - - *60*. The names and characteristics of the numeric subtypes declared - in the visible part of package `Standard'. See A.1(3). - - See items describing the integer and floating-point types supported. - - - *61*. The accuracy actually achieved by the elementary functions. See - A.5.1(1). - - The elementary functions correspond to the functions available in the C - library. Only fast math mode is implemented. - - - *62*. The sign of a zero result from some of the operators or - functions in `Numerics.Generic_Elementary_Functions', when - `Float_Type'Signed_Zeros' is `True'. See A.5.1(46). - - The sign of zeroes follows the requirements of the IEEE 754 standard on - floating-point. - - - *63*. The value of `Numerics.Float_Random.Max_Image_Width'. See - A.5.2(27). - - Maximum image width is 649, see library file `a-numran.ads'. - - - *64*. The value of `Numerics.Discrete_Random.Max_Image_Width'. See - A.5.2(27). - - Maximum image width is 80, see library file `a-nudira.ads'. - - - *65*. The algorithms for random number generation. See A.5.2(32). - - The algorithm is documented in the source files `a-numran.ads' and - `a-numran.adb'. - - - *66*. The string representation of a random number generator's state. - See A.5.2(38). - - See the documentation contained in the file `a-numran.adb'. - - - *67*. The minimum time interval between calls to the time-dependent - Reset procedure that are guaranteed to initiate different random number - sequences. See A.5.2(45). - - The minimum period between reset calls to guarantee distinct series of - random numbers is one microsecond. - - - *68*. The values of the `Model_Mantissa', `Model_Emin', - `Model_Epsilon', `Model', `Safe_First', and `Safe_Last' attributes, if - the Numerics Annex is not supported. See A.5.3(72). - - See the source file `ttypef.ads' for the values of all numeric - attributes. - - - *69*. Any implementation-defined characteristics of the input-output - packages. See A.7(14). - - There are no special implementation defined characteristics for these - packages. - - - *70*. The value of `Buffer_Size' in `Storage_IO'. See A.9(10). - - All type representations are contiguous, and the `Buffer_Size' is the - value of `TYPE'Size' rounded up to the next storage unit boundary. - - - *71*. External files for standard input, standard output, and standard - error See A.10(5). - - These files are mapped onto the files provided by the C streams - libraries. See source file `i-cstrea.ads' for further details. - - - *72*. The accuracy of the value produced by `Put'. See A.10.9(36). - - If more digits are requested in the output than are represented by the - precision of the value, zeroes are output in the corresponding least - significant digit positions. - - - *73*. The meaning of `Argument_Count', `Argument', and `Command_Name'. - See A.15(1). - - These are mapped onto the `argv' and `argc' parameters of the main - program in the natural manner. - - - *74*. Implementation-defined convention names. See B.1(11). - - The following convention names are supported - - `Ada' - Ada - - `Assembler' - Assembly language - - `Asm' - Synonym for Assembler - - `Assembly' - Synonym for Assembler - - `C' - C - - `C_Pass_By_Copy' - Allowed only for record types, like C, but also notes that record - is to be passed by copy rather than reference. - - `COBOL' - COBOL - - `CPP' - C++ - - `Default' - Treated the same as C - - `External' - Treated the same as C - - `Fortran' - Fortran - - `Intrinsic' - For support of pragma `Import' with convention Intrinsic, see - separate section on Intrinsic Subprograms. - - `Stdcall' - Stdcall (used for Windows implementations only). This convention - correspond to the WINAPI (previously called Pascal convention) - C/C++ convention under Windows. A function with this convention - cleans the stack before exit. - - `DLL' - Synonym for Stdcall - - `Win32' - Synonym for Stdcall - - `Stubbed' - Stubbed is a special convention used to indicate that the body of - the subprogram will be entirely ignored. Any call to the - subprogram is converted into a raise of the `Program_Error' - exception. If a pragma `Import' specifies convention `stubbed' - then no body need be present at all. This convention is useful - during development for the inclusion of subprograms whose body has - not yet been written. - - In addition, all otherwise unrecognized convention names are also - treated as being synonymous with convention C. In all implementations - except for VMS, use of such other names results in a warning. In VMS - implementations, these names are accepted silently. - - - *75*. The meaning of link names. See B.1(36). - - Link names are the actual names used by the linker. - - - *76*. The manner of choosing link names when neither the link name nor - the address of an imported or exported entity is specified. See - B.1(36). - - The default linker name is that which would be assigned by the relevant - external language, interpreting the Ada name as being in all lower case - letters. - - - *77*. The effect of pragma `Linker_Options'. See B.1(37). - - The string passed to `Linker_Options' is presented uninterpreted as an - argument to the link command, unless it contains Ascii.NUL characters. - NUL characters if they appear act as argument separators, so for example - - pragma Linker_Options ("-labc" & ASCII.Nul & "-ldef"); - - causes two separate arguments `-labc' and `-ldef' to be passed to the - linker. The order of linker options is preserved for a given unit. The - final list of options passed to the linker is in reverse order of the - elaboration order. For example, linker options fo a body always appear - before the options from the corresponding package spec. - - - *78*. The contents of the visible part of package `Interfaces' and its - language-defined descendants. See B.2(1). - - See files with prefix `i-' in the distributed library. - - - *79*. Implementation-defined children of package `Interfaces'. The - contents of the visible part of package `Interfaces'. See B.2(11). - - See files with prefix `i-' in the distributed library. - - - *80*. The types `Floating', `Long_Floating', `Binary', `Long_Binary', - `Decimal_ Element', and `COBOL_Character'; and the initialization of - the variables `Ada_To_COBOL' and `COBOL_To_Ada', in `Interfaces.COBOL'. - See B.4(50). - - `Floating' - Float - - `Long_Floating' - (Floating) Long_Float - - `Binary' - Integer - - `Long_Binary' - Long_Long_Integer - - `Decimal_Element' - Character - - `COBOL_Character' - Character - - For initialization, see the file `i-cobol.ads' in the distributed - library. - - - *81*. Support for access to machine instructions. See C.1(1). - - See documentation in file `s-maccod.ads' in the distributed library. - - - *82*. Implementation-defined aspects of access to machine operations. - See C.1(9). - - See documentation in file `s-maccod.ads' in the distributed library. - - - *83*. Implementation-defined aspects of interrupts. See C.3(2). - - Interrupts are mapped to signals or conditions as appropriate. See - definition of unit `Ada.Interrupt_Names' in source file `a-intnam.ads' - for details on the interrupts supported on a particular target. - - - *84*. Implementation-defined aspects of pre-elaboration. See C.4(13). - - GNAT does not permit a partition to be restarted without reloading, - except under control of the debugger. - - - *85*. The semantics of pragma `Discard_Names'. See C.5(7). - - Pragma `Discard_Names' causes names of enumeration literals to be - suppressed. In the presence of this pragma, the Image attribute - provides the image of the Pos of the literal, and Value accepts Pos - values. - - - *86*. The result of the `Task_Identification.Image' attribute. See - C.7.1(7). - - The result of this attribute is an 8-digit hexadecimal string - representing the virtual address of the task control block. - - - *87*. The value of `Current_Task' when in a protected entry or - interrupt handler. See C.7.1(17). - - Protected entries or interrupt handlers can be executed by any - convenient thread, so the value of `Current_Task' is undefined. - - - *88*. The effect of calling `Current_Task' from an entry body or - interrupt handler. See C.7.1(19). - - The effect of calling `Current_Task' from an entry body or interrupt - handler is to return the identification of the task currently executing - the code. - - - *89*. Implementation-defined aspects of `Task_Attributes'. See - C.7.2(19). - - There are no implementation-defined aspects of `Task_Attributes'. - - - *90*. Values of all `Metrics'. See D(2). - - The metrics information for GNAT depends on the performance of the - underlying operating system. The sources of the run-time for tasking - implementation, together with the output from `-gnatG' can be used to - determine the exact sequence of operating systems calls made to - implement various tasking constructs. Together with appropriate - information on the performance of the underlying operating system, on - the exact target in use, this information can be used to determine the - required metrics. - - - *91*. The declarations of `Any_Priority' and `Priority'. See D.1(11). - - See declarations in file `system.ads'. - - - *92*. Implementation-defined execution resources. See D.1(15). - - There are no implementation-defined execution resources. - - - *93*. Whether, on a multiprocessor, a task that is waiting for access - to a protected object keeps its processor busy. See D.2.1(3). - - On a multi-processor, a task that is waiting for access to a protected - object does not keep its processor busy. - - - *94*. The affect of implementation defined execution resources on task - dispatching. See D.2.1(9). - - Tasks map to threads in the threads package used by GNAT. Where - possible and appropriate, these threads correspond to native threads of - the underlying operating system. - - - *95*. Implementation-defined `policy_identifiers' allowed in a pragma - `Task_Dispatching_Policy'. See D.2.2(3). - - There are no implementation-defined policy-identifiers allowed in this - pragma. - - - *96*. Implementation-defined aspects of priority inversion. See - D.2.2(16). - - Execution of a task cannot be preempted by the implementation processing - of delay expirations for lower priority tasks. - - - *97*. Implementation defined task dispatching. See D.2.2(18). - - The policy is the same as that of the underlying threads implementation. - - - *98*. Implementation-defined `policy_identifiers' allowed in a pragma - `Locking_Policy'. See D.3(4). - - The only implementation defined policy permitted in GNAT is - `Inheritance_Locking'. On targets that support this policy, locking is - implemented by inheritance, i.e. the task owning the lock operates at a - priority equal to the highest priority of any task currently requesting - the lock. - - - *99*. Default ceiling priorities. See D.3(10). - - The ceiling priority of protected objects of the type - `System.Interrupt_Priority'Last' as described in the Ada 95 Reference - Manual D.3(10), - - - *100*. The ceiling of any protected object used internally by the - implementation. See D.3(16). - - The ceiling priority of internal protected objects is - `System.Priority'Last'. - - - *101*. Implementation-defined queuing policies. See D.4(1). - - There are no implementation-defined queueing policies. - - - *102*. On a multiprocessor, any conditions that cause the completion - of an aborted construct to be delayed later than what is specified for - a single processor. See D.6(3). - - The semantics for abort on a multi-processor is the same as on a single - processor, there are no further delays. - - - *103*. Any operations that implicitly require heap storage allocation. - See D.7(8). - - The only operation that implicitly requires heap storage allocation is - task creation. - - - *104*. Implementation-defined aspects of pragma `Restrictions'. See - D.7(20). - - There are no such implementation-defined aspects. - - - *105*. Implementation-defined aspects of package `Real_Time'. See - D.8(17). - - There are no implementation defined aspects of package `Real_Time'. - - - *106*. Implementation-defined aspects of `delay_statements'. See - D.9(8). - - Any difference greater than one microsecond will cause the task to be - delayed (see D.9(7)). - - - *107*. The upper bound on the duration of interrupt blocking caused by - the implementation. See D.12(5). - - The upper bound is determined by the underlying operating system. In - no cases is it more than 10 milliseconds. - - - *108*. The means for creating and executing distributed programs. See - E(5). - - The GLADE package provides a utility GNATDIST for creating and executing - distributed programs. See the GLADE reference manual for further - details. - - - *109*. Any events that can result in a partition becoming - inaccessible. See E.1(7). - - See the GLADE reference manual for full details on such events. - - - *110*. The scheduling policies, treatment of priorities, and - management of shared resources between partitions in certain cases. See - E.1(11). - - See the GLADE reference manual for full details on these aspects of - multi-partition execution. - - - *111*. Events that cause the version of a compilation unit to change. - See E.3(5). - - Editing the source file of a compilation unit, or the source files of - any units on which it is dependent in a significant way cause the - version to change. No other actions cause the version number to - change. All changes are significant except those which affect only - layout, capitalization or comments. - - - *112*. Whether the execution of the remote subprogram is immediately - aborted as a result of cancellation. See E.4(13). - - See the GLADE reference manual for details on the effect of abort in a - distributed application. - - - *113*. Implementation-defined aspects of the PCS. See E.5(25). - - See the GLADE reference manual for a full description of all - implementation defined aspects of the PCS. - - - *114*. Implementation-defined interfaces in the PCS. See E.5(26). - - See the GLADE reference manual for a full description of all - implementation defined interfaces. - - - *115*. The values of named numbers in the package `Decimal'. See - F.2(7). - - `Max_Scale' - +18 - - `Min_Scale' - -18 - - `Min_Delta' - 1.0E-18 - - `Max_Delta' - 1.0E+18 - - `Max_Decimal_Digits' - 18 - - - *116*. The value of `Max_Picture_Length' in the package - `Text_IO.Editing'. See F.3.3(16). - - 64 - - - *117*. The value of `Max_Picture_Length' in the package - `Wide_Text_IO.Editing'. See F.3.4(5). - - 64 - - - *118*. The accuracy actually achieved by the complex elementary - functions and by other complex arithmetic operations. See G.1(1). - - Standard library functions are used for the complex arithmetic - operations. Only fast math mode is currently supported. - - - *119*. The sign of a zero result (or a component thereof) from any - operator or function in `Numerics.Generic_Complex_Types', when - `Real'Signed_Zeros' is True. See G.1.1(53). - - The signs of zero values are as recommended by the relevant - implementation advice. - - - *120*. The sign of a zero result (or a component thereof) from any - operator or function in - `Numerics.Generic_Complex_Elementary_Functions', when - `Real'Signed_Zeros' is `True'. See G.1.2(45). - - The signs of zero values are as recommended by the relevant - implementation advice. - - - *121*. Whether the strict mode or the relaxed mode is the default. - See G.2(2). - - The strict mode is the default. There is no separate relaxed mode. - GNAT provides a highly efficient implementation of strict mode. - - - *122*. The result interval in certain cases of fixed-to-float - conversion. See G.2.1(10). - - For cases where the result interval is implementation dependent, the - accuracy is that provided by performing all operations in 64-bit IEEE - floating-point format. - - - *123*. The result of a floating point arithmetic operation in overflow - situations, when the `Machine_Overflows' attribute of the result type - is `False'. See G.2.1(13). - - Infinite and Nan values are produced as dictated by the IEEE - floating-point standard. - - - *124*. The result interval for division (or exponentiation by a - negative exponent), when the floating point hardware implements division - as multiplication by a reciprocal. See G.2.1(16). - - Not relevant, division is IEEE exact. - - - *125*. The definition of close result set, which determines the - accuracy of certain fixed point multiplications and divisions. See - G.2.3(5). - - Operations in the close result set are performed using IEEE long format - floating-point arithmetic. The input operands are converted to - floating-point, the operation is done in floating-point, and the result - is converted to the target type. - - - *126*. Conditions on a `universal_real' operand of a fixed point - multiplication or division for which the result shall be in the perfect - result set. See G.2.3(22). - - The result is only defined to be in the perfect result set if the result - can be computed by a single scaling operation involving a scale factor - representable in 64-bits. - - - *127*. The result of a fixed point arithmetic operation in overflow - situations, when the `Machine_Overflows' attribute of the result type - is `False'. See G.2.3(27). - - Not relevant, `Machine_Overflows' is `True' for fixed-point types. - - - *128*. The result of an elementary function reference in overflow - situations, when the `Machine_Overflows' attribute of the result type - is `False'. See G.2.4(4). - - IEEE infinite and Nan values are produced as appropriate. - - - *129*. The value of the angle threshold, within which certain - elementary functions, complex arithmetic operations, and complex - elementary functions yield results conforming to a maximum relative - error bound. See G.2.4(10). - - Information on this subject is not yet available. - - - *130*. The accuracy of certain elementary functions for parameters - beyond the angle threshold. See G.2.4(10). - - Information on this subject is not yet available. - - - *131*. The result of a complex arithmetic operation or complex - elementary function reference in overflow situations, when the - `Machine_Overflows' attribute of the corresponding real type is - `False'. See G.2.6(5). - - IEEE infinite and Nan values are produced as appropriate. - - - *132*. The accuracy of certain complex arithmetic operations and - certain complex elementary functions for parameters (or components - thereof) beyond the angle threshold. See G.2.6(8). - - Information on those subjects is not yet available. - - - *133*. Information regarding bounded errors and erroneous execution. - See H.2(1). - - Information on this subject is not yet available. - - - *134*. Implementation-defined aspects of pragma `Inspection_Point'. - See H.3.2(8). - - Pragma `Inspection_Point' ensures that the variable is live and can be - examined by the debugger at the inspection point. - - - *135*. Implementation-defined aspects of pragma `Restrictions'. See - H.4(25). - - There are no implementation-defined aspects of pragma `Restrictions'. - The use of pragma `Restrictions [No_Exceptions]' has no effect on the - generated code. Checks must suppressed by use of pragma `Suppress'. - - - *136*. Any restrictions on pragma `Restrictions'. See H.4(27). - - There are no restrictions on pragma `Restrictions'. - -  - File: gnat_rm.info, Node: Intrinsic Subprograms, Next: Representation Clauses and Pragmas, Prev: Implementation Defined Characteristics, Up: Top - - Intrinsic Subprograms - ********************* - - * Menu: - - * Intrinsic Operators:: - * Enclosing_Entity:: - * Exception_Information:: - * Exception_Message:: - * Exception_Name:: - * File:: - * Line:: - * Rotate_Left:: - * Rotate_Right:: - * Shift_Left:: - * Shift_Right:: - * Shift_Right_Arithmetic:: - * Source_Location:: - - GNAT allows a user application program to write the declaration: - - pragma Import (Intrinsic, name); - - providing that the name corresponds to one of the implemented intrinsic - subprograms in GNAT, and that the parameter profile of the referenced - subprogram meets the requirements. This chapter describes the set of - implemented intrinsic subprograms, and the requirements on parameter - profiles. Note that no body is supplied; as with other uses of pragma - Import, the body is supplied elsewhere (in this case by the compiler - itself). Note that any use of this feature is potentially - non-portable, since the Ada standard does not require Ada compilers to - implement this feature. - -  - File: gnat_rm.info, Node: Intrinsic Operators, Next: Enclosing_Entity, Up: Intrinsic Subprograms - - Intrinsic Operators - =================== - - All the predefined numeric operators in package Standard in `pragma - Import (Intrinsic,..)' declarations. In the binary operator case, the - operands must have the same size. The operand or operands must also be - appropriate for the operator. For example, for addition, the operands - must both be floating-point or both be fixed-point, and the right - operand for `"**"' must have a root type of `Standard.Integer'Base'. - You can use an intrinsic operator declaration as in the following - example: - - type Int1 is new Integer; - type Int2 is new Integer; - - function "+" (X1 : Int1; X2 : Int2) return Int1; - function "+" (X1 : Int1; X2 : Int2) return Int2; - pragma Import (Intrinsic, "+"); - - This declaration would permit "mixed mode" arithmetic on items of the - differing types `Int1' and `Int2'. It is also possible to specify such - operators for private types, if the full views are appropriate - arithmetic types. - -  - File: gnat_rm.info, Node: Enclosing_Entity, Next: Exception_Information, Prev: Intrinsic Operators, Up: Intrinsic Subprograms - - Enclosing_Entity - ================ - - This intrinsic subprogram is used in the implementation of the library - routine `GNAT.Source_Info'. The only useful use of the intrinsic - import in this case is the one in this unit, so an application program - should simply call the function `GNAT.Source_Info.Enclosing_Entity' to - obtain the name of the current subprogram, package, task, entry, or - protected subprogram. - -  - File: gnat_rm.info, Node: Exception_Information, Next: Exception_Message, Prev: Enclosing_Entity, Up: Intrinsic Subprograms - - Exception_Information - ===================== - - This intrinsic subprogram is used in the implementation of the library - routine `GNAT.Current_Exception'. The only useful use of the intrinsic - import in this case is the one in this unit, so an application program - should simply call the function - `GNAT.Current_Exception.Exception_Information' to obtain the exception - information associated with the current exception. - -  - File: gnat_rm.info, Node: Exception_Message, Next: Exception_Name, Prev: Exception_Information, Up: Intrinsic Subprograms - - Exception_Message - ================= - - This intrinsic subprogram is used in the implementation of the library - routine `GNAT.Current_Exception'. The only useful use of the intrinsic - import in this case is the one in this unit, so an application program - should simply call the function - `GNAT.Current_Exception.Exception_Message' to obtain the message - associated with the current exception. - -  - File: gnat_rm.info, Node: Exception_Name, Next: File, Prev: Exception_Message, Up: Intrinsic Subprograms - - Exception_Name - ============== - - This intrinsic subprogram is used in the implementation of the library - routine `GNAT.Current_Exception'. The only useful use of the intrinsic - import in this case is the one in this unit, so an application program - should simply call the function `GNAT.Current_Exception.Exception_Name' - to obtain the name of the current exception. - -  - File: gnat_rm.info, Node: File, Next: Line, Prev: Exception_Name, Up: Intrinsic Subprograms - - File - ==== - - This intrinsic subprogram is used in the implementation of the library - routine `GNAT.Source_Info'. The only useful use of the intrinsic - import in this case is the one in this unit, so an application program - should simply call the function `GNAT.Source_Info.File' to obtain the - name of the current file. - -  - File: gnat_rm.info, Node: Line, Next: Rotate_Left, Prev: File, Up: Intrinsic Subprograms - - Line - ==== - - This intrinsic subprogram is used in the implementation of the library - routine `GNAT.Source_Info'. The only useful use of the intrinsic - import in this case is the one in this unit, so an application program - should simply call the function `GNAT.Source_Info.Line' to obtain the - number of the current source line. - -  - File: gnat_rm.info, Node: Rotate_Left, Next: Rotate_Right, Prev: Line, Up: Intrinsic Subprograms - - Rotate_Left - =========== - - In standard Ada 95, the `Rotate_Left' function is available only for - the predefined modular types in package `Interfaces'. However, in GNAT - it is possible to define a Rotate_Left function for a user defined - modular type or any signed integer type as in this example: - - function Shift_Left - (Value : My_Modular_Type; - Amount : Natural) - return My_Modular_Type; - - The requirements are that the profile be exactly as in the example - above. The only modifications allowed are in the formal parameter - names, and in the type of `Value' and the return type, which must be - the same, and must be either a signed integer type, or a modular - integer type with a binary modulus, and the size must be 8. 16, 32 or - 64 bits. - -  - File: gnat_rm.info, Node: Rotate_Right, Next: Shift_Left, Prev: Rotate_Left, Up: Intrinsic Subprograms - - Rotate_Right - ============ - - A `Rotate_Right' function can be defined for any user defined binary - modular integer type, or signed integer type, as described above for - `Rotate_Left'. - -  - File: gnat_rm.info, Node: Shift_Left, Next: Shift_Right, Prev: Rotate_Right, Up: Intrinsic Subprograms - - Shift_Left - ========== - - A `Shift_Left' function can be defined for any user defined binary - modular integer type, or signed integer type, as described above for - `Rotate_Left'. - -  - File: gnat_rm.info, Node: Shift_Right, Next: Shift_Right_Arithmetic, Prev: Shift_Left, Up: Intrinsic Subprograms - - Shift_Right - =========== - - A `Shift_Right' function can be defined for any user defined binary - modular integer type, or signed integer type, as described above for - `Rotate_Left'. - -  - File: gnat_rm.info, Node: Shift_Right_Arithmetic, Next: Source_Location, Prev: Shift_Right, Up: Intrinsic Subprograms - - Shift_Right_Arithmetic - ====================== - - A `Shift_Right_Arithmetic' function can be defined for any user defined - binary modular integer type, or signed integer type, as described above - for `Rotate_Left'. - -  - File: gnat_rm.info, Node: Source_Location, Prev: Shift_Right_Arithmetic, Up: Intrinsic Subprograms - - Source_Location - =============== - - This intrinsic subprogram is used in the implementation of the library - routine `GNAT.Source_Info'. The only useful use of the intrinsic - import in this case is the one in this unit, so an application program - should simply call the function `GNAT.Source_Info.Source_Location' to - obtain the current source file location. - -  - File: gnat_rm.info, Node: Representation Clauses and Pragmas, Next: Standard Library Routines, Prev: Intrinsic Subprograms, Up: Top - - Representation Clauses and Pragmas - ********************************** - - * Menu: - - * Alignment Clauses:: - * Size Clauses:: - * Storage_Size Clauses:: - * Size of Variant Record Objects:: - * Biased Representation :: - * Value_Size and Object_Size Clauses:: - * Component_Size Clauses:: - * Bit_Order Clauses:: - * Effect of Bit_Order on Byte Ordering:: - * Pragma Pack for Arrays:: - * Pragma Pack for Records:: - * Record Representation Clauses:: - * Enumeration Clauses:: - * Address Clauses:: - * Effect of Convention on Representation:: - * Determining the Representations chosen by GNAT:: - - This section describes the representation clauses accepted by GNAT, and - their effect on the representation of corresponding data objects. - - GNAT fully implements Annex C (Systems Programming). This means - that all the implementation advice sections in chapter 13 are fully - implemented. However, these sections only require a minimal level of - support for representation clauses. GNAT provides much more extensive - capabilities, and this section describes the additional capabilities - provided. - -  - File: gnat_rm.info, Node: Alignment Clauses, Next: Size Clauses, Up: Representation Clauses and Pragmas - - Alignment Clauses - ================= - - GNAT requires that all alignment clauses specify a power of 2, and all - default alignments are always a power of 2. The default alignment - values are as follows: - - * Primitive Types For primitive types, the alignment is the maximum - of the actual size of objects of the type, and the maximum - alignment supported by the target. For example, for type - Long_Float, the object size is 8 bytes, and the default alignment - will be 8 on any target that supports alignments this large, but - on some targets, the maximum alignment may be smaller than 8, in - which case objects of type Long_Float will be maximally aligned. - - * Arrays For arrays, the alignment is equal to the alignment of the - component type for the normal case where no packing or component - size is given. If the array is packed, and the packing is - effective (see separate section on packed arrays), then the - alignment will be one for long packed arrays, or arrays whose - length is not known at compile time. For short packed arrays, - which are handled internally as modular types, the alignment will - be as described for primitive types, e.g. a packed array of length - 31 bits will have an object size of four bytes, and an alignment - of 4. - - * Records For the normal non-packed case, the alignment of a record - is equal to the maximum alignment of any of its components. For - tagged records, this includes the implicit access type used for - the tag. If a pragma `Pack' is used and all fields are packable - (see separate section on pragma `Pack'), then the resulting - alignment is 1. - - A special case is when the size of the record is given explicitly, - or a full record representation clause is given, and the size of - the record is 2, 4, or 8 bytes. In this case, an alignment is - chosen to match the size of the record. For example, if we have: - - type Small is record - A, B : Character; - end record; - - then the default alignment of the record type `Small' is 2, not 1. - This leads to more efficient code when the record is treated as a - unit, and also allows the type to specified as `Atomic' on - architectures requiring strict alignment. - - - An alignment clause may always specify a larger alignment than the - default value, up to some maximum value dependent on the target - (obtainable by using the attribute reference System'Maximum_Alignment). - The only case in which it is permissible to specify a smaller - alignment than the default value is in the case of a record for which a - record representation clause is given. In this case, packable fields - for which a component clause is given still result in a default - alignment corresponding to the original type, but this may be - overridden, since these components in fact only require an alignment of - one byte. For example, given - - type v is record - a : integer; - end record; - - for v use record - a at 0 range 0 .. 31; - end record; - - for v'alignment use 1; - - The default alignment for the type `v' is 4, as a result of the integer - field in the record, but since this field is placed with a component - clause, it is permissible, as shown, to override the default alignment - of the record to a smaller value. - -  - File: gnat_rm.info, Node: Size Clauses, Next: Storage_Size Clauses, Prev: Alignment Clauses, Up: Representation Clauses and Pragmas - - Size Clauses - ============ - - The default size of types is as specified in the reference manual. For - objects, GNAT will generally increase the type size so that the object - size is a multiple of storage units, and also a multiple of the - alignment. For example - - type Smallint is range 1 .. 6; - - type Rec is record - y1 : integer; - y2 : boolean; - end record; - - In this example, `Smallint' has a size of 3, as specified by the RM - rules, but objects of this type will have a size of 8, since objects by - default occupy an integral number of storage units. On some targets, - notably older versions of the Digital Alpha, the size of stand alone - objects of this type may be 32, reflecting the inability of the - hardware to do byte load/stores. - - Similarly, the size of type `Rec' is 40 bits, but the alignment is - 4, so objects of this type will have their size increased to 64 bits so - that it is a multiple of the alignment. The reason for this decision, - which is in accordance with the specific note in RM 13.3(43): - - A Size clause should be supported for an object if the specified - Size is at least as large as its subtype's Size, and corresponds - to a size in storage elements that is a multiple of the object's - Alignment (if the Alignment is nonzero). - - An explicit size clause may be used to override the default size by - increasing it. For example, if we have: - - type My_Boolean is new Boolean; - for My_Boolean'Size use 32; - - then objects of this type will always be 32 bits long. In the case of - discrete types, the size can be increased up to 64 bits, with the effect - that the entire specified field is used to hold the value, sign- or - zero-extended as appropriate. If more than 64 bits is specified, then - padding space is allocated after the value, and a warning is issued that - there are unused bits. - - Similarly the size of records and arrays may be increased, and the - effect is to add padding bits after the value. This also causes a - warning message to be generated. - - The largest Size value permitted in GNAT is 2**32-1. Since this is a - Size in bits, this corresponds to an object of size 256 megabytes (minus - one). This limitation is true on all targets. The reason for this - limitation is that it improves the quality of the code in many cases if - it is known that a Size value can be accommodated in an object of type - Integer. - -  - File: gnat_rm.info, Node: Storage_Size Clauses, Next: Size of Variant Record Objects, Prev: Size Clauses, Up: Representation Clauses and Pragmas - - Storage_Size Clauses - ==================== - - For tasks, the `Storage_Size' clause specifies the amount of space to - be allocated for the task stack. This cannot be extended, and if the - stack is exhausted, then `Storage_Error' will be raised if stack - checking is enabled. If the default size of 20K bytes is insufficient, - then you need to use a `Storage_Size' attribute definition clause, or a - `Storage_Size' pragma in the task definition to set the appropriate - required size. A useful technique is to include in every task - definition a pragma of the form: - - pragma Storage_Size (Default_Stack_Size); - - Then Default_Stack_Size can be defined in a global package, and modified - as required. Any tasks requiring different task stack sizes from the - default can have an appropriate alternative reference in the pragma. - - For access types, the `Storage_Size' clause specifies the maximum - space available for allocation of objects of the type. If this space is - exceeded then `Storage_Error' will be raised by an allocation attempt. - In the case where the access type is declared local to a subprogram, the - use of a `Storage_Size' clause triggers automatic use of a special - predefined storage pool (`System.Pool_Size') that ensures that all - space for the pool is automatically reclaimed on exit from the scope in - which the type is declared. - - A special case recognized by the compiler is the specification of a - `Storage_Size' of zero for an access type. This means that no items - can be allocated from the pool, and this is recognized at compile time, - and all the overhead normally associated with maintaining a fixed size - storage pool is eliminated. Consider the following example: - - procedure p is - type R is array (Natural) of Character; - type P is access all R; - for P'Storage_Size use 0; - -- Above access type intended only for interfacing purposes - - y : P; - - procedure g (m : P); - pragma Import (C, g); - - -- ... - - begin - -- ... - y := new R; - end; - - As indicated in this example, these dummy storage pools are often - useful in connection with interfacing where no object will ever be - allocated. If you compile the above example, you get the warning: - - p.adb:16:09: warning: allocation from empty storage pool - p.adb:16:09: warning: Storage_Error will be raised at run time - - Of course in practice, there will not be any explicit allocators in the - case of such an access declaration. - -  - File: gnat_rm.info, Node: Size of Variant Record Objects, Next: Biased Representation, Prev: Storage_Size Clauses, Up: Representation Clauses and Pragmas - - Size of Variant Record Objects - ============================== - - An issue arises in the case of variant record objects of whether Size - gives information about a particular variant, or the maximum size - required for any variant. Consider the following program - - with Text_IO; use Text_IO; - procedure q is - type R1 (A : Boolean := False) is record - case A is - when True => X : Character; - when False => null; - end case; - end record; - - V1 : R1 (False); - V2 : R1; - - begin - Put_Line (Integer'Image (V1'Size)); - Put_Line (Integer'Image (V2'Size)); - end q; - - Here we are dealing with a variant record, where the True variant - requires 16 bits, and the False variant requires 8 bits. In the above - example, both V1 and V2 contain the False variant, which is only 8 bits - long. However, the result of running the program is: - - 8 - 16 - - The reason for the difference here is that the discriminant value of V1 - is fixed, and will always be False. It is not possible to assign a - True variant value to V1, therefore 8 bits is sufficient. On the other - hand, in the case of V2, the initial discriminant value is False (from - the default), but it is possible to assign a True variant value to V2, - therefore 16 bits must be allocated for V2 in the general case, even - fewer bits may be needed at any particular point during the program - execution. - - As can be seen from the output of this program, the `'Size' - attribute applied to such an object in GNAT gives the actual allocated - size of the variable, which is the largest size of any of the variants. - The Ada Reference Manual is not completely clear on what choice should - be made here, but the GNAT behavior seems most consistent with the - language in the RM. - - In some cases, it may be desirable to obtain the size of the current - variant, rather than the size of the largest variant. This can be - achieved in GNAT by making use of the fact that in the case of a - subprogram parameter, GNAT does indeed return the size of the current - variant (because a subprogram has no way of knowing how much space is - actually allocated for the actual). - - Consider the following modified version of the above program: - - with Text_IO; use Text_IO; - procedure q is - type R1 (A : Boolean := False) is record - case A is - when True => X : Character; - when False => null; - end case; - end record; - - V2 : R1; - - function Size (V : R1) return Integer is - begin - return V'Size; - end Size; - - begin - Put_Line (Integer'Image (V2'Size)); - Put_Line (Integer'IMage (Size (V2))); - V2 := (True, 'x'); - Put_Line (Integer'Image (V2'Size)); - Put_Line (Integer'IMage (Size (V2))); - end q; - - The output from this program is - - 16 - 8 - 16 - 16 - - Here we see that while the `'Size' attribute always returns the maximum - size, regardless of the current variant value, the `Size' function does - indeed return the size of the current variant value. - -  - File: gnat_rm.info, Node: Biased Representation, Next: Value_Size and Object_Size Clauses, Prev: Size of Variant Record Objects, Up: Representation Clauses and Pragmas - - Biased Representation - ===================== - - In the case of scalars with a range starting at other than zero, it is - possible in some cases to specify a size smaller than the default - minimum value, and in such cases, GNAT uses an unsigned biased - representation, in which zero is used to represent the lower bound, and - successive values represent successive values of the type. - - For example, suppose we have the declaration: - - type Small is range -7 .. -4; - for Small'Size use 2; - - Although the default size of type `Small' is 4, the `Size' clause is - accepted by GNAT and results in the following representation scheme: - - -7 is represented as 2#00# - -6 is represented as 2#01# - -5 is represented as 2#10# - -4 is represented as 2#11# - - Biased representation is only used if the specified `Size' clause - cannot be accepted in any other manner. These reduced sizes that force - biased representation can be used for all discrete types except for - enumeration types for which a representation clause is given. - -  - File: gnat_rm.info, Node: Value_Size and Object_Size Clauses, Next: Component_Size Clauses, Prev: Biased Representation, Up: Representation Clauses and Pragmas - - Value_Size and Object_Size Clauses - ================================== - - In Ada 95, the `Size' of a discrete type is the minimum number of bits - required to hold values of the type. Although this interpretation was - allowed in Ada 83, it was not required, and this requirement in practice - can cause some significant difficulties. For example, in most Ada 83 - compilers, `Natural'Size' was 32. However, in Ada-95, `Natural'Size' is - typically 31. This means that code may change in behavior when moving - from Ada 83 to Ada 95. For example, consider: - - type Rec is record; - A : Natural; - B : Natural; - end record; - - for Rec use record - for A use at 0 range 0 .. Natural'Size - 1; - for B use at 0 range Natural'Size .. 2 * Natural'Size - 1; - end record; - - In the above code, since the typical size of `Natural' objects is 32 - bits and `Natural'Size' is 31, the above code can cause unexpected - inefficient packing in Ada 95, and in general there are surprising - cases where the fact that the object size can exceed the size of the - type causes surprises. - - To help get around this problem GNAT provides two implementation - dependent attributes `Value_Size' and `Object_Size'. When applied to a - type, these attributes yield the size of the type (corresponding to the - RM defined size attribute), and the size of objects of the type - respectively. - - The `Object_Size' is used for determining the default size of - objects and components. This size value can be referred to using the - `Object_Size' attribute. The phrase "is used" here means that it is - the basis of the determination of the size. The backend is free to pad - this up if necessary for efficiency, e.g. an 8-bit stand-alone - character might be stored in 32 bits on a machine with no efficient - byte access instructions such as the Alpha. - - The default rules for the value of `Object_Size' for fixed-point and - discrete types are as follows: - - * The `Object_Size' for base subtypes reflect the natural hardware - size in bits (run the utility `gnatpsta' to find those values for - numeric types). Enumeration types and fixed-point base subtypes - have 8, 16, 32 or 64 bits for this size, depending on the range of - values to be stored. - - * The `Object_Size' of a subtype is the same as the `Object_Size' of - the type from which it is obtained. - - * The `Object_Size' of a derived base type is copied from the parent - base type, and the `Object_Size' of a derived first subtype is - copied from the parent first subtype. - - The `Value_Size' attribute is the number of bits required to store a - value of the type. This size can be referred to using the `Value_Size' - attribute. This value is used to determine how tightly to pack records - or arrays with components of this type, and also affects the semantics - of unchecked conversion (unchecked conversions where the `Value_Size' - values differ generate a warning, and are potentially target dependent). - - The default rules for the value of `Value_Size' are as follows: - - * The `Value_Size' for a base subtype is the minimum number of bits - required to store all values of the type (including the sign bit - only if negative values are possible). - - * If a subtype statically matches the first subtype of a given type, - then it has by default the same `Value_Size' as the first subtype. - This is a consequence of RM 13.1(14) ("if two subtypes statically - match, then their subtype-specific aspects are the same".) - - * All other subtypes have a `Value_Size' corresponding to the minimum - number of bits required to store all values of the subtype. For - dynamic bounds, it is assumed that the value can range down or up - to the corresponding bound of the ancestor - - The RM defined attribute `Size' corresponds to the `Value_Size' - attribute. - - The `Size' attribute may be defined for a first-named subtype. This - sets the `Value_Size' of the first-named subtype to the given value, - and the `Object_Size' of this first-named subtype to the given value - padded up to an appropriate boundary. It is a consequence of the - default rules above that this `Object_Size' will apply to all further - subtypes. On the other hand, `Value_Size' is affected only for the - first subtype, any dynamic subtypes obtained from it directly, and any - statically matching subtypes. The `Value_Size' of any other static - subtypes is not affected. - - `Value_Size' and `Object_Size' may be explicitly set for any subtype - using an attribute definition clause. Note that the use of these - attributes can cause the RM 13.1(14) rule to be violated. If two - access types reference aliased objects whose subtypes have differing - `Object_Size' values as a result of explicit attribute definition - clauses, then it is erroneous to convert from one access subtype to the - other. - - At the implementation level, Esize stores the Object_SIze and the - RM_Size field stores the `Value_Size' (and hence the value of the - `Size' attribute, which, as noted above, is equivalent to `Value_Size'). - - To get a feel for the difference, consider the following examples - (note that in each case the base is short_short_integer with a size of - 8): - - Object_Size Value_Size - - type x1 is range 0 .. 5; 8 3 - - type x2 is range 0 .. 5; - for x2'size use 12; 12 12 - - subtype x3 is x2 range 0 .. 3; 12 2 - - subtype x4 is x2'base range 0 .. 10; 8 4 - - subtype x5 is x2 range 0 .. dynamic; 12 (7) - - subtype x6 is x2'base range 0 .. dynamic; 8 (7) - - Note: the entries marked (7) are not actually specified by the Ada 95 - RM, but it seems in the spirit of the RM rules to allocate the minimum - number of bits known to be large enough to hold the given range of - values. - - So far, so good, but GNAT has to obey the RM rules, so the question - is under what conditions must the RM `Size' be used. The following is - a list of the occasions on which the RM `Size' must be used: - - * Component size for packed arrays or records - - * Value of the attribute `Size' for a type - - * Warning about sizes not matching for unchecked conversion - - For types other than discrete and fixed-point types, the `Object_Size' - and Value_Size are the same (and equivalent to the RM attribute `Size'). - Only `Size' may be specified for such types. - -  - File: gnat_rm.info, Node: Component_Size Clauses, Next: Bit_Order Clauses, Prev: Value_Size and Object_Size Clauses, Up: Representation Clauses and Pragmas - - Component_Size Clauses - ====================== - - Normally, the value specified in a component clause must be consistent - with the subtype of the array component with regard to size and - alignment. In other words, the value specified must be at least equal - to the size of this subtype, and must be a multiple of the alignment - value. - - In addition, component size clauses are allowed which cause the array - to be packed, by specifying a smaller value. The cases in which this - is allowed are for component size values in the range 1 through 63. - The value specified must not be smaller than the Size of the subtype. - GNAT will accurately honor all packing requests in this range. For - example, if we have: - - type r is array (1 .. 8) of Natural; - for r'Size use 31; - - then the resulting array has a length of 31 bytes (248 bits = 8 * 31). - Of course access to the components of such an array is considerably - less efficient than if the natural component size of 32 is used. - -  - File: gnat_rm.info, Node: Bit_Order Clauses, Next: Effect of Bit_Order on Byte Ordering, Prev: Component_Size Clauses, Up: Representation Clauses and Pragmas - - Bit_Order Clauses - ================= - - For record subtypes, GNAT permits the specification of the `Bit_Order' - attribute. The specification may either correspond to the default bit - order for the target, in which case the specification has no effect and - places no additional restrictions, or it may be for the non-standard - setting (that is the opposite of the default). - - In the case where the non-standard value is specified, the effect is - to renumber bits within each byte, but the ordering of bytes is not - affected. There are certain restrictions placed on component clauses - as follows: - - * Components fitting within a single storage unit. - - These are unrestricted, and the effect is merely to renumber bits. - For example if we are on a little-endian machine with - `Low_Order_First' being the default, then the following two - declarations have exactly the same effect: - - type R1 is record - A : Boolean; - B : Integer range 1 .. 120; - end record; - - for R1 use record - A at 0 range 0 .. 0; - B at 0 range 1 .. 7; - end record; - - type R2 is record - A : Boolean; - B : Integer range 1 .. 120; - end record; - - for R2'Bit_Order use High_Order_First; - - for R2 use record - A at 0 range 7 .. 7; - B at 0 range 0 .. 6; - end record; - - The useful application here is to write the second declaration - with the `Bit_Order' attribute definition clause, and know that it - will be treated the same, regardless of whether the target is - little-endian or big-endian. - - * Components occupying an integral number of bytes. - - These are components that exactly fit in two or more bytes. Such - component declarations are allowed, but have no effect, since it - is important to realize that the `Bit_Order' specification does - not affect the ordering of bytes. In particular, the following - attempt at getting an endian-independent integer does not work: - - type R2 is record - A : Integer; - end record; - - for R2'Bit_Order use High_Order_First; - - for R2 use record - A at 0 range 0 .. 31; - end record; - - This declaration will result in a little-endian integer on a - little-endian machine, and a big-endian integer on a big-endian - machine. If byte flipping is required for interoperability - between big- and little-endian machines, this must be explicitly - programmed. This capability is not provided by `Bit_Order'. - - * Components that are positioned across byte boundaries - - but do not occupy an integral number of bytes. Given that bytes - are not reordered, such fields would occupy a non-contiguous - sequence of bits in memory, requiring non-trivial code to - reassemble. They are for this reason not permitted, and any - component clause specifying such a layout will be flagged as - illegal by GNAT. - - - Since the misconception that Bit_Order automatically deals with all - endian-related incompatibilities is a common one, the specification of - a component field that is an integral number of bytes will always - generate a warning. This warning may be suppressed using `pragma - Suppress' if desired. The following section contains additional - details regarding the issue of byte ordering. - -  - File: gnat_rm.info, Node: Effect of Bit_Order on Byte Ordering, Next: Pragma Pack for Arrays, Prev: Bit_Order Clauses, Up: Representation Clauses and Pragmas - - Effect of Bit_Order on Byte Ordering - ==================================== - - In this section we will review the effect of the `Bit_Order' attribute - definition clause on byte ordering. Briefly, it has no effect at all, - but a detailed example will be helpful. Before giving this example, - let us review the precise definition of the effect of defining - `Bit_Order'. The effect of a non-standard bit order is described in - section 15.5.3 of the Ada Reference Manual: - - 2 A bit ordering is a method of interpreting the meaning of - the storage place attributes. - - To understand the precise definition of storage place attributes in - this context, we visit section 13.5.1 of the manual: - - 13 A record_representation_clause (without the mod_clause) - specifies the layout. The storage place attributes (see 13.5.2) - are taken from the values of the position, first_bit, and last_bit - expressions after normalizing those values so that first_bit is - less than Storage_Unit. - - The critical point here is that storage places are taken from the - values after normalization, not before. So the `Bit_Order' - interpretation applies to normalized values. The interpretation is - described in the later part of the 15.5.3 paragraph: - - 2 A bit ordering is a method of interpreting the meaning of - the storage place attributes. High_Order_First (known in the - vernacular as ``big endian'') means that the first bit of a - storage element (bit 0) is the most significant bit (interpreting - the sequence of bits that represent a component as an unsigned - integer value). Low_Order_First (known in the vernacular as - ``little endian'') means the opposite: the first bit is the - least significant. - - Note that the numbering is with respect to the bits of a storage unit. - In other words, the specification affects only the numbering of bits - within a single storage unit. - - We can make the effect clearer by giving an example. - - Suppose that we have an external device which presents two bytes, - the first byte presented, which is the first (low addressed byte) of - the two byte record is called Master, and the second byte is called - Slave. - - The left most (most significant bit is called Control for each byte, - and the remaining 7 bits are called V1, V2, ... V7, where V7 is the - rightmost (least significant) bit. - - On a big-endian machine, we can write the following representation - clause - - type Data is record - Master_Control : Bit; - Master_V1 : Bit; - Master_V2 : Bit; - Master_V3 : Bit; - Master_V4 : Bit; - Master_V5 : Bit; - Master_V6 : Bit; - Master_V7 : Bit; - Slave_Control : Bit; - Slave_V1 : Bit; - Slave_V2 : Bit; - Slave_V3 : Bit; - Slave_V4 : Bit; - Slave_V5 : Bit; - Slave_V6 : Bit; - Slave_V7 : Bit; - end record; - - for Data use record - Master_Control at 0 range 0 .. 0; - Master_V1 at 0 range 1 .. 1; - Master_V2 at 0 range 2 .. 2; - Master_V3 at 0 range 3 .. 3; - Master_V4 at 0 range 4 .. 4; - Master_V5 at 0 range 5 .. 5; - Master_V6 at 0 range 6 .. 6; - Master_V7 at 0 range 7 .. 7; - Slave_Control at 1 range 0 .. 0; - Slave_V1 at 1 range 1 .. 1; - Slave_V2 at 1 range 2 .. 2; - Slave_V3 at 1 range 3 .. 3; - Slave_V4 at 1 range 4 .. 4; - Slave_V5 at 1 range 5 .. 5; - Slave_V6 at 1 range 6 .. 6; - Slave_V7 at 1 range 7 .. 7; - end record; - - Now if we move this to a little endian machine, then the bit ordering - within the byte is backwards, so we have to rewrite the record rep - clause as: - - for Data use record - Master_Control at 0 range 7 .. 7; - Master_V1 at 0 range 6 .. 6; - Master_V2 at 0 range 5 .. 5; - Master_V3 at 0 range 4 .. 4; - Master_V4 at 0 range 3 .. 3; - Master_V5 at 0 range 2 .. 2; - Master_V6 at 0 range 1 .. 1; - Master_V7 at 0 range 0 .. 0; - Slave_Control at 1 range 7 .. 7; - Slave_V1 at 1 range 6 .. 6; - Slave_V2 at 1 range 5 .. 5; - Slave_V3 at 1 range 4 .. 4; - Slave_V4 at 1 range 3 .. 3; - Slave_V5 at 1 range 2 .. 2; - Slave_V6 at 1 range 1 .. 1; - Slave_V7 at 1 range 0 .. 0; - end record; - - It is a nuisance to have to rewrite the clause, especially if the - code has to be maintained on both machines. However, this is a case - that we can handle with the `Bit_Order' attribute if it is implemented. - Note that the implementation is not required on byte addressed - machines, but it is indeed implemented in GNAT. This means that we can - simply use the first record clause, together with the declaration - - for Data'Bit_Order use High_Order_First; - - and the effect is what is desired, namely the layout is exactly the - same, independent of whether the code is compiled on a big-endian or - little-endian machine. - - The important point to understand is that byte ordering is not - affected. A `Bit_Order' attribute definition never affects which byte - a field ends up in, only where it ends up in that byte. To make this - clear, let us rewrite the record rep clause of the previous example as: - - for Data'Bit_Order use High_Order_First; - for Data use record - Master_Control at 0 range 0 .. 0; - Master_V1 at 0 range 1 .. 1; - Master_V2 at 0 range 2 .. 2; - Master_V3 at 0 range 3 .. 3; - Master_V4 at 0 range 4 .. 4; - Master_V5 at 0 range 5 .. 5; - Master_V6 at 0 range 6 .. 6; - Master_V7 at 0 range 7 .. 7; - Slave_Control at 0 range 8 .. 8; - Slave_V1 at 0 range 9 .. 9; - Slave_V2 at 0 range 10 .. 10; - Slave_V3 at 0 range 11 .. 11; - Slave_V4 at 0 range 12 .. 12; - Slave_V5 at 0 range 13 .. 13; - Slave_V6 at 0 range 14 .. 14; - Slave_V7 at 0 range 15 .. 15; - end record; - - This is exactly equivalent to saying (a repeat of the first example): - - for Data'Bit_Order use High_Order_First; - for Data use record - Master_Control at 0 range 0 .. 0; - Master_V1 at 0 range 1 .. 1; - Master_V2 at 0 range 2 .. 2; - Master_V3 at 0 range 3 .. 3; - Master_V4 at 0 range 4 .. 4; - Master_V5 at 0 range 5 .. 5; - Master_V6 at 0 range 6 .. 6; - Master_V7 at 0 range 7 .. 7; - Slave_Control at 1 range 0 .. 0; - Slave_V1 at 1 range 1 .. 1; - Slave_V2 at 1 range 2 .. 2; - Slave_V3 at 1 range 3 .. 3; - Slave_V4 at 1 range 4 .. 4; - Slave_V5 at 1 range 5 .. 5; - Slave_V6 at 1 range 6 .. 6; - Slave_V7 at 1 range 7 .. 7; - end record; - - Why are they equivalent? Well take a specific field, the `Slave_V2' - field. The storage place attributes are obtained by normalizing the - values given so that the `First_Bit' value is less than 8. After - nromalizing the values (0,10,10) we get (1,2,2) which is exactly what - we specified in the other case. - - Now one might expect that the `Bit_Order' attribute might affect bit - numbering within the entire record component (two bytes in this case, - thus affecting which byte fields end up in), but that is not the way - this feature is defined, it only affects numbering of bits, not which - byte they end up in. - - Consequently it never makes sense to specify a starting bit number - greater than 7 (for a byte addressable field) if an attribute - definition for `Bit_Order' has been given, and indeed it may be - actively confusing to specify such a value, so the compiler generates a - warning for such usage. - - If you do need to control byte ordering then appropriate conditional - values must be used. If in our example, the slave byte came first on - some machines we might write: - - Master_Byte_First constant Boolean := ...; - - Master_Byte : constant Natural := - 1 - Boolean'Pos (Master_Byte_First); - Slave_Byte : constant Natural := - Boolean'Pos (Master_Byte_First); - - for Data'Bit_Order use High_Order_First; - for Data use record - Master_Control at Master_Byte range 0 .. 0; - Master_V1 at Master_Byte range 1 .. 1; - Master_V2 at Master_Byte range 2 .. 2; - Master_V3 at Master_Byte range 3 .. 3; - Master_V4 at Master_Byte range 4 .. 4; - Master_V5 at Master_Byte range 5 .. 5; - Master_V6 at Master_Byte range 6 .. 6; - Master_V7 at Master_Byte range 7 .. 7; - Slave_Control at Slave_Byte range 0 .. 0; - Slave_V1 at Slave_Byte range 1 .. 1; - Slave_V2 at Slave_Byte range 2 .. 2; - Slave_V3 at Slave_Byte range 3 .. 3; - Slave_V4 at Slave_Byte range 4 .. 4; - Slave_V5 at Slave_Byte range 5 .. 5; - Slave_V6 at Slave_Byte range 6 .. 6; - Slave_V7 at Slave_Byte range 7 .. 7; - end record; - - Now to switch between machines, all that is necessary is to set the - boolean constant `Master_Byte_First' in an appropriate manner. - -  - File: gnat_rm.info, Node: Pragma Pack for Arrays, Next: Pragma Pack for Records, Prev: Effect of Bit_Order on Byte Ordering, Up: Representation Clauses and Pragmas - - Pragma Pack for Arrays - ====================== - - Pragma `Pack' applied to an array has no effect unless the component - type is packable. For a component type to be packable, it must be one - of the following cases: - - * Any scalar type - - * Any fixed-point type - - * Any type whose size is specified with a size clause - - * Any packed array type with a static size - - For all these cases, if the component subtype size is in the range 1 - through 63, then the effect of the pragma `Pack' is exactly as though a - component size were specified giving the component subtype size. For - example if we have: - - type r is range 0 .. 17; - - type ar is array (1 .. 8) of r; - pragma Pack (ar); - - Then the component size of `ar' will be set to 5 (i.e. to `r'size', and - the size of the array `ar' will be exactly 40 bits. - - Note that in some cases this rather fierce approach to packing can - produce unexpected effects. For example, in Ada 95, type Natural - typically has a size of 31, meaning that if you pack an array of - Natural, you get 31-bit close packing, which saves a few bits, but - results in far less efficient access. Since many other Ada compilers - will ignore such a packing request, GNAT will generate a warning on - some uses of pragma `Pack' that it guesses might not be what is - intended. You can easily remove this warning by using an explicit - `Component_Size' setting instead, which never generates a warning, - since the intention of the programmer is clear in this case. - - GNAT treats packed arrays in one of two ways. If the size of the - array is known at compile time and is less than 64 bits, then - internally the array is represented as a single modular type, of - exactly the appropriate number of bits. If the length is greater than - 63 bits, or is not known at compile time, then the packed array is - represented as an array of bytes, and the length is always a multiple - of 8 bits. - -  - File: gnat_rm.info, Node: Pragma Pack for Records, Next: Record Representation Clauses, Prev: Pragma Pack for Arrays, Up: Representation Clauses and Pragmas - - Pragma Pack for Records - ======================= - - Pragma `Pack' applied to a record will pack the components to reduce - wasted space from alignment gaps and by reducing the amount of space - taken by components. We distinguish between package components and - non-packable components. Components of the following types are - considered packable: - - * All scalar types are packable. - - * All fixed-point types are represented internally as integers, and - are packable. - - * Small packed arrays, whose size does not exceed 64 bits, and where - the size is statically known at compile time, are represented - internally as modular integers, and so they are also packable. - - - All packable components occupy the exact number of bits corresponding to - their `Size' value, and are packed with no padding bits, i.e. they can - start on an arbitrary bit boundary. - - All other types are non-packable, they occupy an integral number of - storage units, and are placed at a boundary corresponding to their - alignment requirements. - - For example, consider the record - - type Rb1 is array (1 .. 13) of Boolean; - pragma Pack (rb1); - - type Rb2 is array (1 .. 65) of Boolean; - pragma Pack (rb2); - - type x2 is record - l1 : Boolean; - l2 : Duration; - l3 : Float; - l4 : Boolean; - l5 : Rb1; - l6 : Rb2; - end record; - pragma Pack (x2); - - The representation for the record x2 is as follows: - - for x2'Size use 224; - for x2 use record - l1 at 0 range 0 .. 0; - l2 at 0 range 1 .. 64; - l3 at 12 range 0 .. 31; - l4 at 16 range 0 .. 0; - l5 at 16 range 1 .. 13; - l6 at 18 range 0 .. 71; - end record; - - Studying this example, we see that the packable fields `l1' and `l2' are - of length equal to their sizes, and placed at specific bit boundaries - (and not byte boundaries) to eliminate padding. But `l3' is of a - non-packable float type, so it is on the next appropriate alignment - boundary. - - The next two fields are fully packable, so `l4' and `l5' are - minimally packed with no gaps. However, type `Rb2' is a packed array - that is longer than 64 bits, so it is itself non-packable. Thus the - `l6' field is aligned to the next byte boundary, and takes an integral - number of bytes, i.e. 72 bits. - -  - File: gnat_rm.info, Node: Record Representation Clauses, Next: Enumeration Clauses, Prev: Pragma Pack for Records, Up: Representation Clauses and Pragmas - - Record Representation Clauses - ============================= - - Record representation clauses may be given for all record types, - including types obtained by record extension. Component clauses are - allowed for any static component. The restrictions on component - clauses depend on the type of the component. - - For all components of an elementary type, the only restriction on - component clauses is that the size must be at least the 'Size value of - the type (actually the Value_Size). There are no restrictions due to - alignment, and such components may freely cross storage boundaries. - - Packed arrays with a size up to and including 64 bits are represented - internally using a modular type with the appropriate number of bits, and - thus the same lack of restriction applies. For example, if you declare: - - type R is array (1 .. 49) of Boolean; - pragma Pack (R); - for R'Size use 49; - - then a component clause for a component of type R may start on any - specified bit boundary, and may specify a value of 49 bits or greater. - - For non-primitive types, including packed arrays with a size greater - than 64 bits, component clauses must respect the alignment requirement - of the type, in particular, always starting on a byte boundary, and the - length must be a multiple of the storage unit. - - The tag field of a tagged type always occupies an address sized - field at the start of the record. No component clause may attempt to - overlay this tag. - - In the case of a record extension T1, of a type T, no component - clause applied to the type T1 can specify a storage location that would - overlap the first T'Size bytes of the record. - -  - File: gnat_rm.info, Node: Enumeration Clauses, Next: Address Clauses, Prev: Record Representation Clauses, Up: Representation Clauses and Pragmas - - Enumeration Clauses - =================== - - The only restriction on enumeration clauses is that the range of - values must be representable. For the signed case, if one or more of - the representation values are negative, all values must be in the range: - - System.Min_Int .. System.Max_Int - - For the unsigned case, where all values are non negative, the values - must be in the range: - - 0 .. System.Max_Binary_Modulus; - - A _confirming_ representation clause is one in which the values range - from 0 in sequence, i.e. a clause that confirms the default - representation for an enumeration type. Such a confirming - representation is permitted by these rules, and is specially recognized - by the compiler so that no extra overhead results from the use of such - a clause. - - If an array has an index type which is an enumeration type to which - an enumeration clause has been applied, then the array is stored in a - compact manner. Consider the declarations: - - type r is (A, B, C); - for r use (A => 1, B => 5, C => 10); - type t is array (r) of Character; - - The array type t corresponds to a vector with exactly three elements and - has a default size equal to `3*Character'Size'. This ensures efficient - use of space, but means that accesses to elements of the array will - incur the overhead of converting representation values to the - corresponding positional values, (i.e. the value delivered by the `Pos' - attribute). - -  - File: gnat_rm.info, Node: Address Clauses, Next: Effect of Convention on Representation, Prev: Enumeration Clauses, Up: Representation Clauses and Pragmas - - Address Clauses - =============== - - The reference manual allows a general restriction on representation - clauses, as found in RM 13.1(22): - - An implementation need not support representation - items containing nonstatic expressions, except that - an implementation should support a representation item - for a given entity if each nonstatic expression in the - representation item is a name that statically denotes - a constant declared before the entity. - - In practice this is applicable only to address clauses, since this is - the only case in which a non-static expression is permitted by the - syntax. As the AARM notes in sections 13.1 (22.a-22.h): - - 22.a Reason: This is to avoid the following sort - of thing: - - 22.b X : Integer := F(...); - Y : Address := G(...); - for X'Address use Y; - - 22.c In the above, we have to evaluate the - initialization expression for X before we - know where to put the result. This seems - like an unreasonable implementation burden. - - 22.d The above code should instead be written - like this: - - 22.e Y : constant Address := G(...); - X : Integer := F(...); - for X'Address use Y; - - 22.f This allows the expression ``Y'' to be safely - evaluated before X is created. - - 22.g The constant could be a formal parameter of mode in. - - 22.h An implementation can support other nonstatic - expressions if it wants to. Expressions of type - Address are hardly ever static, but their value - might be known at compile time anyway in many - cases. - - GNAT does indeed permit many additional cases of non-static - expressions. In particular, if the type involved is elementary there - are no restrictions (since in this case, holding a temporary copy of - the initialization value, if one is present, is inexpensive). In - addition, if there is no implicit or explicit initialization, then - there are no restrictions. GNAT will reject only the case where all - three of these conditions hold: - - * The type of the item is non-elementary (e.g. a record or array). - - * There is explicit or implicit initialization required for the - object. - - * The address value is non-static. Here GNAT is more permissive - than the RM, and allows the address value to be the address of a - previously declared stand-alone variable, as long as it does not - itself have an address clause. - - Anchor : Some_Initialized_Type; - Overlay : Some_Initialized_Type; - for Overlay'Address use Anchor'Address; - - However, the prefix of the address clause cannot be an array - component, or a component of a discriminated record. - - - As noted above in section 22.h, address values are typically - non-static. In particular the To_Address function, even if applied to - a literal value, is a non-static function call. To avoid this minor - annoyance, GNAT provides the implementation defined attribute - 'To_Address. The following two expressions have identical values: - - Another issue with address clauses is the interaction with alignment - requirements. When an address clause is given for an object, the - address value must be consistent with the alignment of the object - (which is usually the same as the alignment of the type of the object). - If an address clause is given that specifies an inappropriately - aligned address value, then the program execution is erroneous. - - Since this source of erroneous behavior can have unfortunate - effects, GNAT checks (at compile time if possible, generating a - warning, or at execution time with a run-time check) that the alignment - is appropriate. If the run-time check fails, then `Program_Error' is - raised. This run-time check is suppressed if range checks are - suppressed, or if `pragma Restrictions (No_Elaboration_Code)' is in - effect. - - To_Address (16#1234_0000#) - System'To_Address (16#1234_0000#); - - except that the second form is considered to be a static expression, and - thus when used as an address clause value is always permitted. - - Additionally, GNAT treats as static an address clause that is an - unchecked_conversion of a static integer value. This simplifies the - porting of legacy code, and provides a portable equivalent to the GNAT - attribute To_Address. - - An address clause cannot be given for an exported object. More - understandably the real restriction is that objects with an address - clause cannot be exported. This is because such variables are not - defined by the Ada program, so there is no external object so export. - - It is permissible to give an address clause and a pragma Import for - the same object. In this case, the variable is not really defined by - the Ada program, so there is no external symbol to be linked. The link - name and the external name are ignored in this case. The reason that - we allow this combination is that it provides a useful idiom to avoid - unwanted initializations on objects with address clauses. - - When an address clause is given for an object that has implicit or - explicit initialization, then by default initialization takes place. - This means that the effect of the object declaration is to overwrite the - memory at the specified address. This is almost always not what the - programmer wants, so GNAT will output a warning: - - with System; - package G is - type R is record - M : Integer := 0; - end record; - - Ext : R; - for Ext'Address use System'To_Address (16#1234_1234#); - | - >>> warning: implicit initialization of "Ext" may - modify overlaid storage - >>> warning: use pragma Import for "Ext" to suppress - initialization (RM B(24)) - - end G; - - As indicated by the warning message, the solution is to use a (dummy) - pragma Import to suppress this initialization. The pragma tell the - compiler that the object is declared and initialized elsewhere. The - following package compiles without warnings (and the initialization is - suppressed): - - with System; - package G is - type R is record - M : Integer := 0; - end record; - - Ext : R; - for Ext'Address use System'To_Address (16#1234_1234#); - pragma Import (Ada, Ext); - end G; - -  - File: gnat_rm.info, Node: Effect of Convention on Representation, Next: Determining the Representations chosen by GNAT, Prev: Address Clauses, Up: Representation Clauses and Pragmas - - Effect of Convention on Representation - ====================================== - - Normally the specification of a foreign language convention for a type - or an object has no effect on the chosen representation. In - particular, the representation chosen for data in GNAT generally meets - the standard system conventions, and for example records are laid out - in a manner that is consistent with C. This means that specifying - convention C (for example) has no effect. - - There are three exceptions to this general rule: - - * Convention Fortran and array subtypes If pragma Convention Fortran - is specified for an array subtype, then in accordance with the - implementation advice in section 3.6.2(11) of the Ada Reference - Manual, the array will be stored in a Fortran-compatible - column-major manner, instead of the normal default row-major order. - - * Convention C and enumeration types GNAT normally stores - enumeration types in 8, 16, or 32 bits as required to accommodate - all values of the type. For example, for the enumeration type - declared by: - - type Color is (Red, Green, Blue); - - 8 bits is sufficient to store all values of the type, so by - default, objects of type `Color' will be represented using 8 bits. - However, normal C convention is to use 32 bits for all enum - values in C, since enum values are essentially of type int. If - pragma `Convention C' is specified for an Ada enumeration type, - then the size is modified as necessary (usually to 32 bits) to be - consistent with the C convention for enum values. - - * Convention C/Fortran and Boolean types In C, the usual convention - for boolean values, that is values used for conditions, is that - zero represents false, and nonzero values represent true. In Ada, - the normal convention is that two specific values, typically 0/1, - are used to represent false/true respectively. - - Fortran has a similar convention for `LOGICAL' values (any nonzero - value represents true). - - To accommodate the Fortran and C conventions, if a pragma - Convention specifies C or Fortran convention for a derived - Boolean, as in the following example: - - type C_Switch is new Boolean; - pragma Convention (C, C_Switch); - - then the GNAT generated code will treat any nonzero value as true. - For truth values generated by GNAT, the conventional value 1 will - be used for True, but when one of these values is read, any - nonzero value is treated as True. - - -  - File: gnat_rm.info, Node: Determining the Representations chosen by GNAT, Prev: Effect of Convention on Representation, Up: Representation Clauses and Pragmas - - Determining the Representations chosen by GNAT - ============================================== - - Although the descriptions in this section are intended to be complete, - it is often easier to simply experiment to see what GNAT accepts and - what the effect is on the layout of types and objects. - - As required by the Ada RM, if a representation clause is not - accepted, then it must be rejected as illegal by the compiler. - However, when a representation clause or pragma is accepted, there can - still be questions of what the compiler actually does. For example, if - a partial record representation clause specifies the location of some - components and not others, then where are the non-specified components - placed? Or if pragma `Pack' is used on a record, then exactly where are - the resulting fields placed? The section on pragma `Pack' in this - chapter can be used to answer the second question, but it is often - easier to just see what the compiler does. - - For this purpose, GNAT provides the option `-gnatR'. If you compile - with this option, then the compiler will output information on the - actual representations chosen, in a format similar to source - representation clauses. For example, if we compile the package: - - package q is - type r (x : boolean) is tagged record - case x is - when True => S : String (1 .. 100); - when False => null; - end case; - end record; - - type r2 is new r (false) with record - y2 : integer; - end record; - - for r2 use record - y2 at 16 range 0 .. 31; - end record; - - type x is record - y : character; - end record; - - type x1 is array (1 .. 10) of x; - for x1'component_size use 11; - - type ia is access integer; - - type Rb1 is array (1 .. 13) of Boolean; - pragma Pack (rb1); - - type Rb2 is array (1 .. 65) of Boolean; - pragma Pack (rb2); - - type x2 is record - l1 : Boolean; - l2 : Duration; - l3 : Float; - l4 : Boolean; - l5 : Rb1; - l6 : Rb2; - end record; - pragma Pack (x2); - end q; - - using the switch `-gnatR' we obtain the following output: - - Representation information for unit q - ------------------------------------- - - for r'Size use ??; - for r'Alignment use 4; - for r use record - x at 4 range 0 .. 7; - _tag at 0 range 0 .. 31; - s at 5 range 0 .. 799; - end record; - - for r2'Size use 160; - for r2'Alignment use 4; - for r2 use record - x at 4 range 0 .. 7; - _tag at 0 range 0 .. 31; - _parent at 0 range 0 .. 63; - y2 at 16 range 0 .. 31; - end record; - - for x'Size use 8; - for x'Alignment use 1; - for x use record - y at 0 range 0 .. 7; - end record; - - for x1'Size use 112; - for x1'Alignment use 1; - for x1'Component_Size use 11; - - for rb1'Size use 13; - for rb1'Alignment use 2; - for rb1'Component_Size use 1; - - for rb2'Size use 72; - for rb2'Alignment use 1; - for rb2'Component_Size use 1; - - for x2'Size use 224; - for x2'Alignment use 4; - for x2 use record - l1 at 0 range 0 .. 0; - l2 at 0 range 1 .. 64; - l3 at 12 range 0 .. 31; - l4 at 16 range 0 .. 0; - l5 at 16 range 1 .. 13; - l6 at 18 range 0 .. 71; - end record; - - The Size values are actually the Object_Size, i.e. the default size that - will be allocated for objects of the type. The ?? size for type r - indicates that we have a variant record, and the actual size of objects - will depend on the discriminant value. - - The Alignment values show the actual alignment chosen by the compiler - for each record or array type. - - The record representation clause for type r shows where all fields - are placed, including the compiler generated tag field (whose location - cannot be controlled by the programmer). - - The record representation clause for the type extension r2 shows all - the fields present, including the parent field, which is a copy of the - fields of the parent type of r2, i.e. r1. - - The component size and size clauses for types rb1 and rb2 show the - exact effect of pragma `Pack' on these arrays, and the record - representation clause for type x2 shows how pragma `Pack' affects this - record type. - - In some cases, it may be useful to cut and paste the representation - clauses generated by the compiler into the original source to fix and - guarantee the actual representation to be used. - -  - File: gnat_rm.info, Node: Standard Library Routines, Next: The Implementation of Standard I/O, Prev: Representation Clauses and Pragmas, Up: Top - - Standard Library Routines - ************************* - - The Ada 95 Reference Manual contains in Annex A a full description of an - extensive set of standard library routines that can be used in any Ada - program, and which must be provided by all Ada compilers. They are - analogous to the standard C library used by C programs. - - GNAT implements all of the facilities described in annex A, and for - most purposes the description in the Ada 95 reference manual, or - appropriate Ada text book, will be sufficient for making use of these - facilities. - - In the case of the input-output facilities, *Note The Implementation - of Standard I/O::, gives details on exactly how GNAT interfaces to the - file system. For the remaining packages, the Ada 95 reference manual - should be sufficient. The following is a list of the packages included, - together with a brief description of the functionality that is provided. - - For completeness, references are included to other predefined library - routines defined in other sections of the Ada 95 reference manual - (these are cross-indexed from annex A). - - `Ada (A.2)' - This is a parent package for all the standard library packages. - It is usually included implicitly in your program, and itself - contains no useful data or routines. - - `Ada.Calendar (9.6)' - `Calendar' provides time of day access, and routines for - manipulating times and durations. - - `Ada.Characters (A.3.1)' - This is a dummy parent package that contains no useful entities - - `Ada.Characters.Handling (A.3.2)' - This package provides some basic character handling capabilities, - including classification functions for classes of characters (e.g. - test for letters, or digits). - - `Ada.Characters.Latin_1 (A.3.3)' - This package includes a complete set of definitions of the - characters that appear in type CHARACTER. It is useful for - writing programs that will run in international environments. For - example, if you want an upper case E with an acute accent in a - string, it is often better to use the definition of `UC_E_Acute' - in this package. Then your program will print in an - understandable manner even if your environment does not support - these extended characters. - - `Ada.Command_Line (A.15)' - This package provides access to the command line parameters and - the name of the current program (analogous to the use of `argc' - and `argv' in C), and also allows the exit status for the program - to be set in a system-independent manner. - - `Ada.Decimal (F.2)' - This package provides constants describing the range of decimal - numbers implemented, and also a decimal divide routine (analogous - to the COBOL verb DIVIDE .. GIVING .. REMAINDER ..) - - `Ada.Direct_IO (A.8.4)' - This package provides input-output using a model of a set of - records of fixed-length, containing an arbitrary definite Ada - type, indexed by an integer record number. - - `Ada.Dynamic_Priorities (D.5)' - This package allows the priorities of a task to be adjusted - dynamically as the task is running. - - `Ada.Exceptions (11.4.1)' - This package provides additional information on exceptions, and - also contains facilities for treating exceptions as data objects, - and raising exceptions with associated messages. - - `Ada.Finalization (7.6)' - This package contains the declarations and subprograms to support - the use of controlled types, providing for automatic - initialization and finalization (analogous to the constructors and - destructors of C++) - - `Ada.Interrupts (C.3.2)' - This package provides facilities for interfacing to interrupts, - which includes the set of signals or conditions that can be raised - and recognized as interrupts. - - `Ada.Interrupts.Names (C.3.2)' - This package provides the set of interrupt names (actually signal - or condition names) that can be handled by GNAT. - - `Ada.IO_Exceptions (A.13)' - This package defines the set of exceptions that can be raised by - use of the standard IO packages. - - `Ada.Numerics' - This package contains some standard constants and exceptions used - throughout the numerics packages. Note that the constants pi and - e are defined here, and it is better to use these definitions than - rolling your own. - - `Ada.Numerics.Complex_Elementary_Functions' - Provides the implementation of standard elementary functions (such - as log and trigonometric functions) operating on complex numbers - using the standard `Float' and the `Complex' and `Imaginary' types - created by the package `Numerics.Complex_Types'. - - `Ada.Numerics.Complex_Types' - This is a predefined instantiation of - `Numerics.Generic_Complex_Types' using `Standard.Float' to build - the type `Complex' and `Imaginary'. - - `Ada.Numerics.Discrete_Random' - This package provides a random number generator suitable for - generating random integer values from a specified range. - - `Ada.Numerics.Float_Random' - This package provides a random number generator suitable for - generating uniformly distributed floating point values. - - `Ada.Numerics.Generic_Complex_Elementary_Functions' - This is a generic version of the package that provides the - implementation of standard elementary functions (such as log and - trigonometric functions) for an arbitrary complex type. - - The following predefined instantiations of this package are - provided: - - `Short_Float' - `Ada.Numerics.Short_Complex_Elementary_Functions' - - `Float' - `Ada.Numerics.Complex_Elementary_Functions' - - `Long_Float' - `Ada.Numerics. Long_Complex_Elementary_Functions' - - `Ada.Numerics.Generic_Complex_Types' - This is a generic package that allows the creation of complex - types, with associated complex arithmetic operations. - - The following predefined instantiations of this package exist - `Short_Float' - `Ada.Numerics.Short_Complex_Complex_Types' - - `Float' - `Ada.Numerics.Complex_Complex_Types' - - `Long_Float' - `Ada.Numerics.Long_Complex_Complex_Types' - - `Ada.Numerics.Generic_Elementary_Functions' - This is a generic package that provides the implementation of - standard elementary functions (such as log an trigonometric - functions) for an arbitrary float type. - - The following predefined instantiations of this package exist - - `Short_Float' - `Ada.Numerics.Short_Elementary_Functions' - - `Float' - `Ada.Numerics.Elementary_Functions' - - `Long_Float' - `Ada.Numerics.Long_Elementary_Functions' - - `Ada.Real_Time (D.8)' - This package provides facilities similar to those of `Calendar', - but operating with a finer clock suitable for real time control. - Note that annex D requires that there be no backward clock jumps, - and GNAT generally guarantees this behavior, but of course if the - external clock on which the GNAT runtime depends is deliberately - reset by some external event, then such a backward jump may occur. - - `Ada.Sequential_IO (A.8.1)' - This package provides input-output facilities for sequential files, - which can contain a sequence of values of a single type, which can - be any Ada type, including indefinite (unconstrained) types. - - `Ada.Storage_IO (A.9)' - This package provides a facility for mapping arbitrary Ada types - to and from a storage buffer. It is primarily intended for the - creation of new IO packages. - - `Ada.Streams (13.13.1)' - This is a generic package that provides the basic support for the - concept of streams as used by the stream attributes (`Input', - `Output', `Read' and `Write'). - - `Ada.Streams.Stream_IO (A.12.1)' - This package is a specialization of the type `Streams' defined in - package `Streams' together with a set of operations providing - Stream_IO capability. The Stream_IO model permits both random and - sequential access to a file which can contain an arbitrary set of - values of one or more Ada types. - - `Ada.Strings (A.4.1)' - This package provides some basic constants used by the string - handling packages. - - `Ada.Strings.Bounded (A.4.4)' - This package provides facilities for handling variable length - strings. The bounded model requires a maximum length. It is thus - somewhat more limited than the unbounded model, but avoids the use - of dynamic allocation or finalization. - - `Ada.Strings.Fixed (A.4.3)' - This package provides facilities for handling fixed length strings. - - `Ada.Strings.Maps (A.4.2)' - This package provides facilities for handling character mappings - and arbitrarily defined subsets of characters. For instance it is - useful in defining specialized translation tables. - - `Ada.Strings.Maps.Constants (A.4.6)' - This package provides a standard set of predefined mappings and - predefined character sets. For example, the standard upper to - lower case conversion table is found in this package. Note that - upper to lower case conversion is non-trivial if you want to take - the entire set of characters, including extended characters like E - with an acute accent, into account. You should use the mappings - in this package (rather than adding 32 yourself) to do case - mappings. - - `Ada.Strings.Unbounded (A.4.5)' - This package provides facilities for handling variable length - strings. The unbounded model allows arbitrary length strings, but - requires the use of dynamic allocation and finalization. - - `Ada.Strings.Wide_Bounded (A.4.7)' - `Ada.Strings.Wide_Fixed (A.4.7)' - `Ada.Strings.Wide_Maps (A.4.7)' - `Ada.Strings.Wide_Maps.Constants (A.4.7)' - `Ada.Strings.Wide_Unbounded (A.4.7)' - These package provide analogous capabilities to the corresponding - packages without `Wide_' in the name, but operate with the types - `Wide_String' and `Wide_Character' instead of `String' and - `Character'. - - `Ada.Synchronous_Task_Control (D.10)' - This package provides some standard facilities for controlling task - communication in a synchronous manner. - - `Ada.Tags' - This package contains definitions for manipulation of the tags of - tagged values. - - `Ada.Task_Attributes' - This package provides the capability of associating arbitrary - task-specific data with separate tasks. - - `Ada.Text_IO' - This package provides basic text input-output capabilities for - character, string and numeric data. The subpackages of this - package are listed next. - - `Ada.Text_IO.Decimal_IO' - Provides input-output facilities for decimal fixed-point types - - `Ada.Text_IO.Enumeration_IO' - Provides input-output facilities for enumeration types. - - `Ada.Text_IO.Fixed_IO' - Provides input-output facilities for ordinary fixed-point types. - - `Ada.Text_IO.Float_IO' - Provides input-output facilities for float types. The following - predefined instantiations of this generic package are available: - - `Short_Float' - `Short_Float_Text_IO' - - `Float' - `Float_Text_IO' - - `Long_Float' - `Long_Float_Text_IO' - - `Ada.Text_IO.Integer_IO' - Provides input-output facilities for integer types. The following - predefined instantiations of this generic package are available: - - `Short_Short_Integer' - `Ada.Short_Short_Integer_Text_IO' - - `Short_Integer' - `Ada.Short_Integer_Text_IO' - - `Integer' - `Ada.Integer_Text_IO' - - `Long_Integer' - `Ada.Long_Integer_Text_IO' - - `Long_Long_Integer' - `Ada.Long_Long_Integer_Text_IO' - - `Ada.Text_IO.Modular_IO' - Provides input-output facilities for modular (unsigned) types - - `Ada.Text_IO.Complex_IO (G.1.3)' - This package provides basic text input-output capabilities for - complex data. - - `Ada.Text_IO.Editing (F.3.3)' - This package contains routines for edited output, analogous to the - use of pictures in COBOL. The picture formats used by this - package are a close copy of the facility in COBOL. - - `Ada.Text_IO.Text_Streams (A.12.2)' - This package provides a facility that allows Text_IO files to be - treated as streams, so that the stream attributes can be used for - writing arbitrary data, including binary data, to Text_IO files. - - `Ada.Unchecked_Conversion (13.9)' - This generic package allows arbitrary conversion from one type to - another of the same size, providing for breaking the type safety in - special circumstances. - - If the types have the same Size (more accurately the same - Value_Size), then the effect is simply to transfer the bits from - the source to the target type without any modification. This - usage is well defined, and for simple types whose representation - is typically the same across all implementations, gives a portable - method of performing such conversions. - - If the types do not have the same size, then the result is - implementation defined, and thus may be non-portable. The - following describes how GNAT handles such unchecked conversion - cases. - - If the types are of different sizes, and are both discrete types, - then the effect is of a normal type conversion without any - constraint checking. In particular if the result type has a - larger size, the result will be zero or sign extended. If the - result type has a smaller size, the result will be truncated by - ignoring high order bits. - - If the types are of different sizes, and are not both discrete - types, then the conversion works as though pointers were created - to the source and target, and the pointer value is converted. The - effect is that bits are copied from successive low order storage - units and bits of the source up to the length of the target type. - - A warning is issued if the lengths differ, since the effect in this - case is implementation dependent, and the above behavior may not - match that of some other compiler. - - A pointer to one type may be converted to a pointer to another - type using unchecked conversion. The only case in which the - effect is undefined is when one or both pointers are pointers to - unconstrained array types. In this case, the bounds information - may get incorrectly transferred, and in particular, GNAT uses - double size pointers for such types, and it is meaningless to - convert between such pointer types. GNAT will issue a warning if - the alignment of the target designated type is more strict than - the alignment of the source designated type (since the result may - be unaligned in this case). - - A pointer other than a pointer to an unconstrained array type may - be converted to and from System.Address. Such usage is common in - Ada 83 programs, but note that Ada.Address_To_Access_Conversions - is the preferred method of performing such conversions in Ada 95. - Neither unchecked conversion nor Ada.Address_To_Access_Conversions - should be used in conjunction with pointers to unconstrained - objects, since the bounds information cannot be handled correctly - in this case. - - `Ada.Unchecked_Deallocation (13.11.2)' - This generic package allows explicit freeing of storage previously - allocated by use of an allocator. - - `Ada.Wide_Text_IO (A.11)' - This package is similar to `Ada.Text_IO', except that the external - file supports wide character representations, and the internal - types are `Wide_Character' and `Wide_String' instead of `Character' - and `String'. It contains generic subpackages listed next. - - `Ada.Wide_Text_IO.Decimal_IO' - Provides input-output facilities for decimal fixed-point types - - `Ada.Wide_Text_IO.Enumeration_IO' - Provides input-output facilities for enumeration types. - - `Ada.Wide_Text_IO.Fixed_IO' - Provides input-output facilities for ordinary fixed-point types. - - `Ada.Wide_Text_IO.Float_IO' - Provides input-output facilities for float types. The following - predefined instantiations of this generic package are available: - - `Short_Float' - `Short_Float_Wide_Text_IO' - - `Float' - `Float_Wide_Text_IO' - - `Long_Float' - `Long_Float_Wide_Text_IO' - - `Ada.Wide_Text_IO.Integer_IO' - Provides input-output facilities for integer types. The following - predefined instantiations of this generic package are available: - - `Short_Short_Integer' - `Ada.Short_Short_Integer_Wide_Text_IO' - - `Short_Integer' - `Ada.Short_Integer_Wide_Text_IO' - - `Integer' - `Ada.Integer_Wide_Text_IO' - - `Long_Integer' - `Ada.Long_Integer_Wide_Text_IO' - - `Long_Long_Integer' - `Ada.Long_Long_Integer_Wide_Text_IO' - - `Ada.Wide_Text_IO.Modular_IO' - Provides input-output facilities for modular (unsigned) types - - `Ada.Wide_Text_IO.Complex_IO (G.1.3)' - This package is similar to `Ada.Text_IO.Complex_IO', except that - the external file supports wide character representations. - - `Ada.Wide_Text_IO.Editing (F.3.4)' - This package is similar to `Ada.Text_IO.Editing', except that the - types are `Wide_Character' and `Wide_String' instead of - `Character' and `String'. - - `Ada.Wide_Text_IO.Streams (A.12.3)' - This package is similar to `Ada.Text_IO.Streams', except that the - types are `Wide_Character' and `Wide_String' instead of - `Character' and `String'. - -  - File: gnat_rm.info, Node: The Implementation of Standard I/O, Next: The GNAT Library, Prev: Standard Library Routines, Up: Top - - The Implementation of Standard I/O - ********************************** - - GNAT implements all the required input-output facilities described in - A.6 through A.14. These sections of the Ada 95 reference manual - describe the required behavior of these packages from the Ada point of - view, and if you are writing a portable Ada program that does not need - to know the exact manner in which Ada maps to the outside world when it - comes to reading or writing external files, then you do not need to - read this chapter. As long as your files are all regular files (not - pipes or devices), and as long as you write and read the files only - from Ada, the description in the Ada 95 reference manual is sufficient. - - However, if you want to do input-output to pipes or other devices, - such as the keyboard or screen, or if the files you are dealing with are - either generated by some other language, or to be read by some other - language, then you need to know more about the details of how the GNAT - implementation of these input-output facilities behaves. - - In this chapter we give a detailed description of exactly how GNAT - interfaces to the file system. As always, the sources of the system are - available to you for answering questions at an even more detailed level, - but for most purposes the information in this chapter will suffice. - - Another reason that you may need to know more about how input-output - is implemented arises when you have a program written in mixed languages - where, for example, files are shared between the C and Ada sections of - the same program. GNAT provides some additional facilities, in the form - of additional child library packages, that facilitate this sharing, and - these additional facilities are also described in this chapter. - - * Menu: - - * Standard I/O Packages:: - * FORM Strings:: - * Direct_IO:: - * Sequential_IO:: - * Text_IO:: - * Wide_Text_IO:: - * Stream_IO:: - * Shared Files:: - * Open Modes:: - * Operations on C Streams:: - * Interfacing to C Streams:: - -  - File: gnat_rm.info, Node: Standard I/O Packages, Next: FORM Strings, Up: The Implementation of Standard I/O - - Standard I/O Packages - ===================== - - The Standard I/O packages described in Annex A for - - * Ada.Text_IO - - * Ada.Text_IO.Complex_IO - - * Ada.Text_IO.Text_Streams, - - * Ada.Wide_Text_IO - - * Ada.Wide_Text_IO.Complex_IO, - - * Ada.Wide_Text_IO.Text_Streams - - * Ada.Stream_IO - - * Ada.Sequential_IO - - * Ada.Direct_IO - - are implemented using the C library streams facility; where - - * All files are opened using `fopen'. - - * All input/output operations use `fread'/`fwrite'. - - There is no internal buffering of any kind at the Ada library level. - The only buffering is that provided at the system level in the - implementation of the C library routines that support streams. This - facilitates shared use of these streams by mixed language programs. - -  - File: gnat_rm.info, Node: FORM Strings, Next: Direct_IO, Prev: Standard I/O Packages, Up: The Implementation of Standard I/O - - FORM Strings - ============ - - The format of a FORM string in GNAT is: - - "keyword=value,keyword=value,...,keyword=value" - - where letters may be in upper or lower case, and there are no spaces - between values. The order of the entries is not important. Currently - there are two keywords defined. - - SHARED=[YES|NO] - WCEM=[n|h|u|s\e] - - The use of these parameters is described later in this section. - -  - File: gnat_rm.info, Node: Direct_IO, Next: Sequential_IO, Prev: FORM Strings, Up: The Implementation of Standard I/O - - Direct_IO - ========= - - Direct_IO can only be instantiated for definite types. This is a - restriction of the Ada language, which means that the records are fixed - length (the length being determined by `TYPE'Size', rounded up to the - next storage unit boundary if necessary). - - The records of a Direct_IO file are simply written to the file in - index sequence, with the first record starting at offset zero, and - subsequent records following. There is no control information of any - kind. For example, if 32-bit integers are being written, each record - takes 4-bytes, so the record at index K starts at offset (K-1)*4. - - There is no limit on the size of Direct_IO files, they are expanded - as necessary to accommodate whatever records are written to the file. - -  - File: gnat_rm.info, Node: Sequential_IO, Next: Text_IO, Prev: Direct_IO, Up: The Implementation of Standard I/O - - Sequential_IO - ============= - - Sequential_IO may be instantiated with either a definite (constrained) - or indefinite (unconstrained) type. - - For the definite type case, the elements written to the file are - simply the memory images of the data values with no control information - of any kind. The resulting file should be read using the same type, no - validity checking is performed on input. - - For the indefinite type case, the elements written consist of two - parts. First is the size of the data item, written as the memory image - of a `Interfaces.C.size_t' value, followed by the memory image of the - data value. The resulting file can only be read using the same - (unconstrained) type. Normal assignment checks are performed on these - read operations, and if these checks fail, `Data_Error' is raised. In - particular, in the array case, the lengths must match, and in the - variant record case, if the variable for a particular read operation is - constrained, the discriminants must match. - - Note that it is not possible to use Sequential_IO to write variable - length array items, and then read the data back into different length - arrays. For example, the following will raise `Data_Error': - - package IO is new Sequential_IO (String); - F : IO.File_Type; - S : String (1..4); - ... - IO.Create (F) - IO.Write (F, "hello!") - IO.Reset (F, Mode=>In_File); - IO.Read (F, S); - Put_Line (S); - - On some Ada implementations, this will print `hell', but the program - is clearly incorrect, since there is only one element in the file, and - that element is the string `hello!'. - - In Ada 95, this kind of behavior can be legitimately achieved using - Stream_IO, and this is the preferred mechanism. In particular, the - above program fragment rewritten to use Stream_IO will work correctly. - -  - File: gnat_rm.info, Node: Text_IO, Next: Wide_Text_IO, Prev: Sequential_IO, Up: The Implementation of Standard I/O - - Text_IO - ======= - - Text_IO files consist of a stream of characters containing the following - special control characters: - - LF (line feed, 16#0A#) Line Mark - FF (form feed, 16#0C#) Page Mark - - A canonical Text_IO file is defined as one in which the following - conditions are met: - - * The character `LF' is used only as a line mark, i.e. to mark the - end of the line. - - * The character `FF' is used only as a page mark, i.e. to mark the - end of a page and consequently can appear only immediately - following a `LF' (line mark) character. - - * The file ends with either `LF' (line mark) or `LF'-`FF' (line - mark, page mark). In the former case, the page mark is implicitly - assumed to be present. - - A file written using Text_IO will be in canonical form provided that - no explicit `LF' or `FF' characters are written using `Put' or - `Put_Line'. There will be no `FF' character at the end of the file - unless an explicit `New_Page' operation was performed before closing - the file. - - A canonical Text_IO file that is a regular file, i.e. not a device - or a pipe, can be read using any of the routines in Text_IO. The - semantics in this case will be exactly as defined in the Ada 95 - reference manual and all the routines in Text_IO are fully implemented. - - A text file that does not meet the requirements for a canonical - Text_IO file has one of the following: - - * The file contains `FF' characters not immediately following a `LF' - character. - - * The file contains `LF' or `FF' characters written by `Put' or - `Put_Line', which are not logically considered to be line marks or - page marks. - - * The file ends in a character other than `LF' or `FF', i.e. there - is no explicit line mark or page mark at the end of the file. - - Text_IO can be used to read such non-standard text files but - subprograms to do with line or page numbers do not have defined - meanings. In particular, a `FF' character that does not follow a `LF' - character may or may not be treated as a page mark from the point of - view of page and line numbering. Every `LF' character is considered to - end a line, and there is an implied `LF' character at the end of the - file. - - * Menu: - - * Text_IO Stream Pointer Positioning:: - * Text_IO Reading and Writing Non-Regular Files:: - * Get_Immediate:: - * Treating Text_IO Files as Streams:: - * Text_IO Extensions:: - * Text_IO Facilities for Unbounded Strings:: - -  - File: gnat_rm.info, Node: Text_IO Stream Pointer Positioning, Next: Text_IO Reading and Writing Non-Regular Files, Up: Text_IO - - Stream Pointer Positioning - -------------------------- - - `Ada.Text_IO' has a definition of current position for a file that is - being read. No internal buffering occurs in Text_IO, and usually the - physical position in the stream used to implement the file corresponds - to this logical position defined by Text_IO. There are two exceptions: - - * After a call to `End_Of_Page' that returns `True', the stream is - positioned past the `LF' (line mark) that precedes the page mark. - Text_IO maintains an internal flag so that subsequent read - operations properly handle the logical position which is unchanged - by the `End_Of_Page' call. - - * After a call to `End_Of_File' that returns `True', if the Text_IO - file was positioned before the line mark at the end of file before - the call, then the logical position is unchanged, but the stream - is physically positioned right at the end of file (past the line - mark, and past a possible page mark following the line mark. - Again Text_IO maintains internal flags so that subsequent read - operations properly handle the logical position. - - These discrepancies have no effect on the observable behavior of - Text_IO, but if a single Ada stream is shared between a C program and - Ada program, or shared (using `shared=yes' in the form string) between - two Ada files, then the difference may be observable in some situations. - -  - File: gnat_rm.info, Node: Text_IO Reading and Writing Non-Regular Files, Next: Get_Immediate, Prev: Text_IO Stream Pointer Positioning, Up: Text_IO - - Reading and Writing Non-Regular Files - ------------------------------------- - - A non-regular file is a device (such as a keyboard), or a pipe. Text_IO - can be used for reading and writing. Writing is not affected and the - sequence of characters output is identical to the normal file case, but - for reading, the behavior of Text_IO is modified to avoid undesirable - look-ahead as follows: - - An input file that is not a regular file is considered to have no - page marks. Any `Ascii.FF' characters (the character normally used for - a page mark) appearing in the file are considered to be data - characters. In particular: - - * `Get_Line' and `Skip_Line' do not test for a page mark following a - line mark. If a page mark appears, it will be treated as a data - character. - - * This avoids the need to wait for an extra character to be typed or - entered from the pipe to complete one of these operations. - - * `End_Of_Page' always returns `False' - - * `End_Of_File' will return `False' if there is a page mark at the - end of the file. - - Output to non-regular files is the same as for regular files. Page - marks may be written to non-regular files using `New_Page', but as noted - above they will not be treated as page marks on input if the output is - piped to another Ada program. - - Another important discrepancy when reading non-regular files is that - the end of file indication is not "sticky". If an end of file is - entered, e.g. by pressing the key, then end of file is signalled - once (i.e. the test `End_Of_File' will yield `True', or a read will - raise `End_Error'), but then reading can resume to read data past that - end of file indication, until another end of file indication is entered. - -  - File: gnat_rm.info, Node: Get_Immediate, Next: Treating Text_IO Files as Streams, Prev: Text_IO Reading and Writing Non-Regular Files, Up: Text_IO - - Get_Immediate - ------------- - - Get_Immediate returns the next character (including control characters) - from the input file. In particular, Get_Immediate will return LF or FF - characters used as line marks or page marks. Such operations leave the - file positioned past the control character, and it is thus not treated - as having its normal function. This means that page, line and column - counts after this kind of Get_Immediate call are set as though the mark - did not occur. In the case where a Get_Immediate leaves the file - positioned between the line mark and page mark (which is not normally - possible), it is undefined whether the FF character will be treated as a - page mark. - -  - File: gnat_rm.info, Node: Treating Text_IO Files as Streams, Next: Text_IO Extensions, Prev: Get_Immediate, Up: Text_IO - - Treating Text_IO Files as Streams - --------------------------------- - - The package `Text_IO.Streams' allows a Text_IO file to be treated as a - stream. Data written to a Text_IO file in this stream mode is binary - data. If this binary data contains bytes 16#0A# (`LF') or 16#0C# - (`FF'), the resulting file may have non-standard format. Similarly if - read operations are used to read from a Text_IO file treated as a - stream, then `LF' and `FF' characters may be skipped and the effect is - similar to that described above for `Get_Immediate'. - -  - File: gnat_rm.info, Node: Text_IO Extensions, Next: Text_IO Facilities for Unbounded Strings, Prev: Treating Text_IO Files as Streams, Up: Text_IO - - Text_IO Extensions - ------------------ - - A package GNAT.IO_Aux in the GNAT library provides some useful - extensions to the standard `Text_IO' package: - - * function File_Exists (Name : String) return Boolean; Determines if - a file of the given name exists and can be successfully opened - (without actually performing the open operation). - - * function Get_Line return String; Reads a string from the standard - input file. The value returned is exactly the length of the line - that was read. - - * function Get_Line (File : Ada.Text_IO.File_Type) return String; - Similar, except that the parameter File specifies the file from - which the string is to be read. - - -  - File: gnat_rm.info, Node: Text_IO Facilities for Unbounded Strings, Prev: Text_IO Extensions, Up: Text_IO - - Text_IO Facilities for Unbounded Strings - ---------------------------------------- - - The package `Ada.Strings.Unbounded.Text_IO' in library files - `a-suteio.ads/adb' contains some GNAT-specific subprograms useful for - Text_IO operations on unbounded strings: - - * function Get_Line (File : File_Type) return Unbounded_String; - Reads a line from the specified file and returns the result as an - unbounded string. - - * procedure Put (File : File_Type; U : Unbounded_String); Writes the - value of the given unbounded string to the specified file Similar - to the effect of `Put (To_String (U))' except that an extra copy - is avoided. - - * procedure Put_Line (File : File_Type; U : Unbounded_String); - Writes the value of the given unbounded string to the specified - file, followed by a `New_Line'. Similar to the effect of - `Put_Line (To_String (U))' except that an extra copy is avoided. - - In the above procedures, `File' is of type `Ada.Text_IO.File_Type' and - is optional. If the parameter is omitted, then the standard input or - output file is referenced as appropriate. - - The package `Ada.Strings.Wide_Unbounded.Wide_Text_IO' in library - files `a-swuwti.ads' and `a-swuwti.adb' provides similar extended - `Wide_Text_IO' functionality for unbounded wide strings. - -  - File: gnat_rm.info, Node: Wide_Text_IO, Next: Stream_IO, Prev: Text_IO, Up: The Implementation of Standard I/O - - Wide_Text_IO - ============ - - `Wide_Text_IO' is similar in most respects to Text_IO, except that both - input and output files may contain special sequences that represent - wide character values. The encoding scheme for a given file may be - specified using a FORM parameter: - - WCEM=X - - as part of the FORM string (WCEM = wide character encoding method), - where X is one of the following characters - - `h' - Hex ESC encoding - - `u' - Upper half encoding - - `s' - Shift-JIS encoding - - `e' - EUC Encoding - - `8' - UTF-8 encoding - - `b' - Brackets encoding - - The encoding methods match those that can be used in a source - program, but there is no requirement that the encoding method used for - the source program be the same as the encoding method used for files, - and different files may use different encoding methods. - - The default encoding method for the standard files, and for opened - files for which no WCEM parameter is given in the FORM string matches - the wide character encoding specified for the main program (the default - being brackets encoding if no coding method was specified with -gnatW). - - Hex Coding - In this encoding, a wide character is represented by a five - character sequence: - - ESC a b c d - - where A, B, C, D are the four hexadecimal characters (using upper - case letters) of the wide character code. For example, ESC A345 - is used to represent the wide character with code 16#A345#. This - scheme is compatible with use of the full `Wide_Character' set. - - Upper Half Coding - The wide character with encoding 16#abcd#, where the upper bit is - on (i.e. a is in the range 8-F) is represented as two bytes 16#ab# - and 16#cd#. The second byte may never be a format control - character, but is not required to be in the upper half. This - method can be also used for shift-JIS or EUC where the internal - coding matches the external coding. - - Shift JIS Coding - A wide character is represented by a two character sequence 16#ab# - and 16#cd#, with the restrictions described for upper half - encoding as described above. The internal character code is the - corresponding JIS character according to the standard algorithm - for Shift-JIS conversion. Only characters defined in the JIS code - set table can be used with this encoding method. - - EUC Coding - A wide character is represented by a two character sequence 16#ab# - and 16#cd#, with both characters being in the upper half. The - internal character code is the corresponding JIS character - according to the EUC encoding algorithm. Only characters defined - in the JIS code set table can be used with this encoding method. - - UTF-8 Coding - A wide character is represented using UCS Transformation Format 8 - (UTF-8) as defined in Annex R of ISO 10646-1/Am.2. Depending on - the character value, the representation is a one, two, or three - byte sequence: - - 16#0000#-16#007f#: 2#0xxxxxxx# - 16#0080#-16#07ff#: 2#110xxxxx# 2#10xxxxxx# - 16#0800#-16#ffff#: 2#1110xxxx# 2#10xxxxxx# 2#10xxxxxx# - - where the xxx bits correspond to the left-padded bits of the - 16-bit character value. Note that all lower half ASCII characters - are represented as ASCII bytes and all upper half characters and - other wide characters are represented as sequences of upper-half - (The full UTF-8 scheme allows for encoding 31-bit characters as - 6-byte sequences, but in this implementation, all UTF-8 sequences - of four or more bytes length will raise a Constraint_Error, as - will all invalid UTF-8 sequences.) - - Brackets Coding - In this encoding, a wide character is represented by the following - eight character sequence: - - [ " a b c d " ] - - Where `a', `b', `c', `d' are the four hexadecimal characters - (using uppercase letters) of the wide character code. For - example, `["A345"]' is used to represent the wide character with - code `16#A345#'. This scheme is compatible with use of the full - Wide_Character set. On input, brackets coding can also be used - for upper half characters, e.g. `["C1"]' for lower case a. - However, on output, brackets notation is only used for wide - characters with a code greater than `16#FF#'. - - For the coding schemes other than Hex and Brackets encoding, not all - wide character values can be represented. An attempt to output a - character that cannot be represented using the encoding scheme for the - file causes Constraint_Error to be raised. An invalid wide character - sequence on input also causes Constraint_Error to be raised. - - * Menu: - - * Wide_Text_IO Stream Pointer Positioning:: - * Wide_Text_IO Reading and Writing Non-Regular Files:: - -  - File: gnat_rm.info, Node: Wide_Text_IO Stream Pointer Positioning, Next: Wide_Text_IO Reading and Writing Non-Regular Files, Up: Wide_Text_IO - - Stream Pointer Positioning - -------------------------- - - `Ada.Wide_Text_IO' is similar to `Ada.Text_IO' in its handling of - stream pointer positioning (*note Text_IO::). There is one additional - case: - - If `Ada.Wide_Text_IO.Look_Ahead' reads a character outside the - normal lower ASCII set (i.e. a character in the range: - - Wide_Character'Val (16#0080#) .. Wide_Character'Val (16#FFFF#) - - then although the logical position of the file pointer is unchanged by - the `Look_Ahead' call, the stream is physically positioned past the - wide character sequence. Again this is to avoid the need for buffering - or backup, and all `Wide_Text_IO' routines check the internal - indication that this situation has occurred so that this is not visible - to a normal program using `Wide_Text_IO'. However, this discrepancy - can be observed if the wide text file shares a stream with another file. - -  - File: gnat_rm.info, Node: Wide_Text_IO Reading and Writing Non-Regular Files, Prev: Wide_Text_IO Stream Pointer Positioning, Up: Wide_Text_IO - - Reading and Writing Non-Regular Files - ------------------------------------- - - As in the case of Text_IO, when a non-regular file is read, it is - assumed that the file contains no page marks (any form characters are - treated as data characters), and `End_Of_Page' always returns `False'. - Similarly, the end of file indication is not sticky, so it is possible - to read beyond an end of file. - -  - File: gnat_rm.info, Node: Stream_IO, Next: Shared Files, Prev: Wide_Text_IO, Up: The Implementation of Standard I/O - - Stream_IO - ========= - - A stream file is a sequence of bytes, where individual elements are - written to the file as described in the Ada 95 reference manual. The - type `Stream_Element' is simply a byte. There are two ways to read or - write a stream file. - - * The operations `Read' and `Write' directly read or write a - sequence of stream elements with no control information. - - * The stream attributes applied to a stream file transfer data in the - manner described for stream attributes. - -  - File: gnat_rm.info, Node: Shared Files, Next: Open Modes, Prev: Stream_IO, Up: The Implementation of Standard I/O - - Shared Files - ============ - - Section A.14 of the Ada 95 Reference Manual allows implementations to - provide a wide variety of behavior if an attempt is made to access the - same external file with two or more internal files. - - To provide a full range of functionality, while at the same time - minimizing the problems of portability caused by this implementation - dependence, GNAT handles file sharing as follows: - - * In the absence of a `shared=XXX' form parameter, an attempt to - open two or more files with the same full name is considered an - error and is not supported. The exception `Use_Error' will be - raised. Note that a file that is not explicitly closed by the - program remains open until the program terminates. - - * If the form parameter `shared=no' appears in the form string, the - file can be opened or created with its own separate stream - identifier, regardless of whether other files sharing the same - external file are opened. The exact effect depends on how the C - stream routines handle multiple accesses to the same external - files using separate streams. - - * If the form parameter `shared=yes' appears in the form string for - each of two or more files opened using the same full name, the same - stream is shared between these files, and the semantics are as - described in Ada 95 Reference Manual, Section A.14. - - When a program that opens multiple files with the same name is ported - from another Ada compiler to GNAT, the effect will be that `Use_Error' - is raised. - - The documentation of the original compiler and the documentation of - the program should then be examined to determine if file sharing was - expected, and `shared=XXX' parameters added to `Open' and `Create' - calls as required. - - When a program is ported from GNAT to some other Ada compiler, no - special attention is required unless the `shared=XXX' form parameter is - used in the program. In this case, you must examine the documentation - of the new compiler to see if it supports the required file sharing - semantics, and form strings modified appropriately. Of course it may - be the case that the program cannot be ported if the target compiler - does not support the required functionality. The best approach in - writing portable code is to avoid file sharing (and hence the use of - the `shared=XXX' parameter in the form string) completely. - - One common use of file sharing in Ada 83 is the use of - instantiations of Sequential_IO on the same file with different types, - to achieve heterogeneous input-output. Although this approach will - work in GNAT if `shared=yes' is specified, it is preferable in Ada 95 - to use Stream_IO for this purpose (using the stream attributes) - -  - File: gnat_rm.info, Node: Open Modes, Next: Operations on C Streams, Prev: Shared Files, Up: The Implementation of Standard I/O - - Open Modes - ========== - - `Open' and `Create' calls result in a call to `fopen' using the mode - shown in Table 6.1 - - - - Table 6-1 `Open' and `Create' Call Modes - OPEN CREATE - Append_File "r+" "w+" - In_File "r" "w+" - Out_File (Direct_IO) "r+" "w" - Out_File (all other cases) "w" "w" - Inout_File "r+" "w+" - - If text file translation is required, then either `b' or `t' is - added to the mode, depending on the setting of Text. Text file - translation refers to the mapping of CR/LF sequences in an external file - to LF characters internally. This mapping only occurs in DOS and - DOS-like systems, and is not relevant to other systems. - - A special case occurs with Stream_IO. As shown in the above table, - the file is initially opened in `r' or `w' mode for the `In_File' and - `Out_File' cases. If a `Set_Mode' operation subsequently requires - switching from reading to writing or vice-versa, then the file is - reopened in `r+' mode to permit the required operation. - -  - File: gnat_rm.info, Node: Operations on C Streams, Next: Interfacing to C Streams, Prev: Open Modes, Up: The Implementation of Standard I/O - - Operations on C Streams - ======================= - - The package `Interfaces.C_Streams' provides an Ada program with - direct access to the C library functions for operations on C streams: - - package Interfaces.C_Streams is - -- Note: the reason we do not use the types that are in - -- Interfaces.C is that we want to avoid dragging in the - -- code in this unit if possible. - subtype chars is System.Address; - -- Pointer to null-terminated array of characters - subtype FILEs is System.Address; - -- Corresponds to the C type FILE* - subtype voids is System.Address; - -- Corresponds to the C type void* - subtype int is Integer; - subtype long is Long_Integer; - -- Note: the above types are subtypes deliberately, and it - -- is part of this spec that the above correspondences are - -- guaranteed. This means that it is legitimate to, for - -- example, use Integer instead of int. We provide these - -- synonyms for clarity, but in some cases it may be - -- convenient to use the underlying types (for example to - -- avoid an unnecessary dependency of a spec on the spec - -- of this unit). - type size_t is mod 2 ** Standard'Address_Size; - NULL_Stream : constant FILEs; - -- Value returned (NULL in C) to indicate an - -- fdopen/fopen/tmpfile error - ---------------------------------- - -- Constants Defined in stdio.h -- - ---------------------------------- - EOF : constant int; - -- Used by a number of routines to indicate error or - -- end of file - IOFBF : constant int; - IOLBF : constant int; - IONBF : constant int; - -- Used to indicate buffering mode for setvbuf call - SEEK_CUR : constant int; - SEEK_END : constant int; - SEEK_SET : constant int; - -- Used to indicate origin for fseek call - function stdin return FILEs; - function stdout return FILEs; - function stderr return FILEs; - -- Streams associated with standard files - -------------------------- - -- Standard C functions -- - -------------------------- - -- The functions selected below are ones that are - -- available in DOS, OS/2, UNIX and Xenix (but not - -- necessarily in ANSI C). These are very thin interfaces - -- which copy exactly the C headers. For more - -- documentation on these functions, see the Microsoft C - -- "Run-Time Library Reference" (Microsoft Press, 1990, - -- ISBN 1-55615-225-6), which includes useful information - -- on system compatibility. - procedure clearerr (stream : FILEs); - function fclose (stream : FILEs) return int; - function fdopen (handle : int; mode : chars) return FILEs; - function feof (stream : FILEs) return int; - function ferror (stream : FILEs) return int; - function fflush (stream : FILEs) return int; - function fgetc (stream : FILEs) return int; - function fgets (strng : chars; n : int; stream : FILEs) - return chars; - function fileno (stream : FILEs) return int; - function fopen (filename : chars; Mode : chars) - return FILEs; - -- Note: to maintain target independence, use - -- text_translation_required, a boolean variable defined in - -- a-sysdep.c to deal with the target dependent text - -- translation requirement. If this variable is set, - -- then b/t should be appended to the standard mode - -- argument to set the text translation mode off or on - -- as required. - function fputc (C : int; stream : FILEs) return int; - function fputs (Strng : chars; Stream : FILEs) return int; - function fread - (buffer : voids; - size : size_t; - count : size_t; - stream : FILEs) - return size_t; - function freopen - (filename : chars; - mode : chars; - stream : FILEs) - return FILEs; - function fseek - (stream : FILEs; - offset : long; - origin : int) - return int; - function ftell (stream : FILEs) return long; - function fwrite - (buffer : voids; - size : size_t; - count : size_t; - stream : FILEs) - return size_t; - function isatty (handle : int) return int; - procedure mktemp (template : chars); - -- The return value (which is just a pointer to template) - -- is discarded - procedure rewind (stream : FILEs); - function rmtmp return int; - function setvbuf - (stream : FILEs; - buffer : chars; - mode : int; - size : size_t) - return int; - - function tmpfile return FILEs; - function ungetc (c : int; stream : FILEs) return int; - function unlink (filename : chars) return int; - --------------------- - -- Extra functions -- - --------------------- - -- These functions supply slightly thicker bindings than - -- those above. They are derived from functions in the - -- C Run-Time Library, but may do a bit more work than - -- just directly calling one of the Library functions. - function is_regular_file (handle : int) return int; - -- Tests if given handle is for a regular file (result 1) - -- or for a non-regular file (pipe or device, result 0). - --------------------------------- - -- Control of Text/Binary Mode -- - --------------------------------- - -- If text_translation_required is true, then the following - -- functions may be used to dynamically switch a file from - -- binary to text mode or vice versa. These functions have - -- no effect if text_translation_required is false (i.e. in - -- normal UNIX mode). Use fileno to get a stream handle. - procedure set_binary_mode (handle : int); - procedure set_text_mode (handle : int); - ---------------------------- - -- Full Path Name support -- - ---------------------------- - procedure full_name (nam : chars; buffer : chars); - -- Given a NUL terminated string representing a file - -- name, returns in buffer a NUL terminated string - -- representing the full path name for the file name. - -- On systems where it is relevant the drive is also - -- part of the full path name. It is the responsibility - -- of the caller to pass an actual parameter for buffer - -- that is big enough for any full path name. Use - -- max_path_len given below as the size of buffer. - max_path_len : integer; - -- Maximum length of an allowable full path name on the - -- system, including a terminating NUL character. - end Interfaces.C_Streams; - -  - File: gnat_rm.info, Node: Interfacing to C Streams, Prev: Operations on C Streams, Up: The Implementation of Standard I/O - - Interfacing to C Streams - ======================== - - The packages in this section permit interfacing Ada files to C Stream - operations. - - with Interfaces.C_Streams; - package Ada.Sequential_IO.C_Streams is - function C_Stream (F : File_Type) - return Interfaces.C_Streams.FILEs; - procedure Open - (File : in out File_Type; - Mode : in File_Mode; - C_Stream : in Interfaces.C_Streams.FILEs; - Form : in String := ""); - end Ada.Sequential_IO.C_Streams; - - with Interfaces.C_Streams; - package Ada.Direct_IO.C_Streams is - function C_Stream (F : File_Type) - return Interfaces.C_Streams.FILEs; - procedure Open - (File : in out File_Type; - Mode : in File_Mode; - C_Stream : in Interfaces.C_Streams.FILEs; - Form : in String := ""); - end Ada.Direct_IO.C_Streams; - - with Interfaces.C_Streams; - package Ada.Text_IO.C_Streams is - function C_Stream (F : File_Type) - return Interfaces.C_Streams.FILEs; - procedure Open - (File : in out File_Type; - Mode : in File_Mode; - C_Stream : in Interfaces.C_Streams.FILEs; - Form : in String := ""); - end Ada.Text_IO.C_Streams; - - with Interfaces.C_Streams; - package Ada.Wide_Text_IO.C_Streams is - function C_Stream (F : File_Type) - return Interfaces.C_Streams.FILEs; - procedure Open - (File : in out File_Type; - Mode : in File_Mode; - C_Stream : in Interfaces.C_Streams.FILEs; - Form : in String := ""); - end Ada.Wide_Text_IO.C_Streams; - - with Interfaces.C_Streams; - package Ada.Stream_IO.C_Streams is - function C_Stream (F : File_Type) - return Interfaces.C_Streams.FILEs; - procedure Open - (File : in out File_Type; - Mode : in File_Mode; - C_Stream : in Interfaces.C_Streams.FILEs; - Form : in String := ""); - end Ada.Stream_IO.C_Streams; - - In each of these five packages, the `C_Stream' function obtains the - `FILE' pointer from a currently opened Ada file. It is then possible - to use the `Interfaces.C_Streams' package to operate on this stream, or - the stream can be passed to a C program which can operate on it - directly. Of course the program is responsible for ensuring that only - appropriate sequences of operations are executed. - - One particular use of relevance to an Ada program is that the - `setvbuf' function can be used to control the buffering of the stream - used by an Ada file. In the absence of such a call the standard - default buffering is used. - - The `Open' procedures in these packages open a file giving an - existing C Stream instead of a file name. Typically this stream is - imported from a C program, allowing an Ada file to operate on an - existing C file. - -  - File: gnat_rm.info, Node: The GNAT Library, Next: Interfacing to Other Languages, Prev: The Implementation of Standard I/O, Up: Top - - The GNAT Library - **************** - - The GNAT library contains a number of general and special purpose - packages. It represents functionality that the GNAT developers have - found useful, and which is made available to GNAT users. The packages - described here are fully supported, and upwards compatibility will be - maintained in future releases, so you can use these facilities with the - confidence that the same functionality will be available in future - releases. - - The chapter here simply gives a brief summary of the facilities - available. The full documentation is found in the spec file for the - package. The full sources of these library packages, including both - spec and body, are provided with all GNAT releases. For example, to - find out the full specifications of the SPITBOL pattern matching - capability, including a full tutorial and extensive examples, look in - the `g-spipat.ads' file in the library. - - For each entry here, the package name (as it would appear in a `with' - clause) is given, followed by the name of the corresponding spec file in - parentheses. The packages are children in four hierarchies, `Ada', - `Interfaces', `System', and `GNAT', the latter being a GNAT-specific - hierarchy. - - Note that an application program should only use packages in one of - these four hierarchies if the package is defined in the Ada Reference - Manual, or is listed in this section of the GNAT Programmers Reference - Manual. All other units should be considered internal implementation - units and should not be directly `with''ed by application code. The - use of a `with' statement that references one of these internal - implementation units makes an application potentially dependent on - changes in versions of GNAT, and will generate a warning message. - - * Menu: - - * Ada.Characters.Latin_9 (a-chlat9.ads):: - * Ada.Characters.Wide_Latin_1 (a-cwila1.ads):: - * Ada.Characters.Wide_Latin_9 (a-cwila9.ads):: - * Ada.Command_Line.Remove (a-colire.ads):: - * Ada.Direct_IO.C_Streams (a-diocst.ads):: - * Ada.Exceptions.Is_Null_Occurrence (a-einuoc.ads):: - * Ada.Sequential_IO.C_Streams (a-siocst.ads):: - * Ada.Streams.Stream_IO.C_Streams (a-ssicst.ads):: - * Ada.Strings.Unbounded.Text_IO (a-suteio.ads):: - * Ada.Strings.Wide_Unbounded.Wide_Text_IO (a-swuwti.ads):: - * Ada.Text_IO.C_Streams (a-tiocst.ads):: - * Ada.Wide_Text_IO.C_Streams (a-wtcstr.ads):: - * GNAT.AWK (g-awk.ads):: - * GNAT.Bubble_Sort_A (g-busora.ads):: - * GNAT.Bubble_Sort_G (g-busorg.ads):: - * GNAT.Calendar (g-calend.ads):: - * GNAT.Calendar.Time_IO (g-catiio.ads):: - * GNAT.CRC32 (g-crc32.ads):: - * GNAT.Case_Util (g-casuti.ads):: - * GNAT.CGI (g-cgi.ads):: - * GNAT.CGI.Cookie (g-cgicoo.ads):: - * GNAT.CGI.Debug (g-cgideb.ads):: - * GNAT.Command_Line (g-comlin.ads):: - * GNAT.Current_Exception (g-curexc.ads):: - * GNAT.Debug_Pools (g-debpoo.ads):: - * GNAT.Debug_Utilities (g-debuti.ads):: - * GNAT.Directory_Operations (g-dirope.ads):: - * GNAT.Dynamic_Tables (g-dyntab.ads):: - * GNAT.Exception_Traces (g-exctra.ads):: - * GNAT.Expect (g-expect.ads):: - * GNAT.Float_Control (g-flocon.ads):: - * GNAT.Heap_Sort_A (g-hesora.ads):: - * GNAT.Heap_Sort_G (g-hesorg.ads):: - * GNAT.HTable (g-htable.ads):: - * GNAT.IO (g-io.ads):: - * GNAT.IO_Aux (g-io_aux.ads):: - * GNAT.Lock_Files (g-locfil.ads):: - * GNAT.MD5 (g-md5.ads):: - * GNAT.Most_Recent_Exception (g-moreex.ads):: - * GNAT.OS_Lib (g-os_lib.ads):: - * GNAT.Regexp (g-regexp.ads):: - * GNAT.Registry (g-regist.ads):: - * GNAT.Regpat (g-regpat.ads):: - * GNAT.Sockets (g-socket.ads):: - * GNAT.Source_Info (g-souinf.ads):: - * GNAT.Spell_Checker (g-speche.ads):: - * GNAT.Spitbol.Patterns (g-spipat.ads):: - * GNAT.Spitbol (g-spitbo.ads):: - * GNAT.Spitbol.Table_Boolean (g-sptabo.ads):: - * GNAT.Spitbol.Table_Integer (g-sptain.ads):: - * GNAT.Spitbol.Table_VString (g-sptavs.ads):: - * GNAT.Table (g-table.ads):: - * GNAT.Task_Lock (g-tasloc.ads):: - * GNAT.Threads (g-thread.ads):: - * GNAT.Traceback (g-traceb.ads):: - * GNAT.Traceback.Symbolic (g-trasym.ads):: - * Interfaces.C.Extensions (i-cexten.ads):: - * Interfaces.C.Streams (i-cstrea.ads):: - * Interfaces.CPP (i-cpp.ads):: - * Interfaces.Os2lib (i-os2lib.ads):: - * Interfaces.Os2lib.Errors (i-os2err.ads):: - * Interfaces.Os2lib.Synchronization (i-os2syn.ads):: - * Interfaces.Os2lib.Threads (i-os2thr.ads):: - * Interfaces.Packed_Decimal (i-pacdec.ads):: - * Interfaces.VxWorks (i-vxwork.ads):: - * Interfaces.VxWorks.IO (i-vxwoio.ads):: - * System.Address_Image (s-addima.ads):: - * System.Assertions (s-assert.ads):: - * System.Partition_Interface (s-parint.ads):: - * System.Task_Info (s-tasinf.ads):: - * System.Wch_Cnv (s-wchcnv.ads):: - * System.Wch_Con (s-wchcon.ads):: - -  - File: gnat_rm.info, Node: Ada.Characters.Latin_9 (a-chlat9.ads), Next: Ada.Characters.Wide_Latin_1 (a-cwila1.ads), Up: The GNAT Library - - `Ada.Characters.Latin_9' (`a-chlat9.ads') - ========================================= - - This child of `Ada.Characters' provides a set of definitions - corresponding to those in the RM-defined package - `Ada.Characters.Latin_1' but with the few modifications required for - `Latin-9' The provision of such a package is specifically authorized by - the Ada Reference Manual (RM A.3(27)). - -  - File: gnat_rm.info, Node: Ada.Characters.Wide_Latin_1 (a-cwila1.ads), Next: Ada.Characters.Wide_Latin_9 (a-cwila9.ads), Prev: Ada.Characters.Latin_9 (a-chlat9.ads), Up: The GNAT Library - - `Ada.Characters.Wide_Latin_1' (`a-cwila1.ads') - ============================================== - - This child of `Ada.Characters' provides a set of definitions - corresponding to those in the RM-defined package - `Ada.Characters.Latin_1' but with the types of the constants being - `Wide_Character' instead of `Character'. The provision of such a - package is specifically authorized by the Ada Reference Manual (RM - A.3(27)). - -  - File: gnat_rm.info, Node: Ada.Characters.Wide_Latin_9 (a-cwila9.ads), Next: Ada.Command_Line.Remove (a-colire.ads), Prev: Ada.Characters.Wide_Latin_1 (a-cwila1.ads), Up: The GNAT Library - - `Ada.Characters.Wide_Latin_9' (`a-cwila1.ads') - ============================================== - - This child of `Ada.Characters' provides a set of definitions - corresponding to those in the GNAT defined package - `Ada.Characters.Latin_9' but with the types of the constants being - `Wide_Character' instead of `Character'. The provision of such a - package is specifically authorized by the Ada Reference Manual (RM - A.3(27)). - -  - File: gnat_rm.info, Node: Ada.Command_Line.Remove (a-colire.ads), Next: Ada.Direct_IO.C_Streams (a-diocst.ads), Prev: Ada.Characters.Wide_Latin_9 (a-cwila9.ads), Up: The GNAT Library - - `Ada.Command_Line.Remove' (`a-colire.ads') - ========================================== - - This child of `Ada.Command_Line' provides a mechanism for logically - removing arguments from the argument list. Once removed, an argument - is not visible to further calls on the subprograms in - `Ada.Command_Line' will not see the removed argument. - -  - File: gnat_rm.info, Node: Ada.Direct_IO.C_Streams (a-diocst.ads), Next: Ada.Exceptions.Is_Null_Occurrence (a-einuoc.ads), Prev: Ada.Command_Line.Remove (a-colire.ads), Up: The GNAT Library - - `Ada.Direct_IO.C_Streams' (`a-diocst.ads') - ========================================== - - This package provides subprograms that allow interfacing between C - streams and `Direct_IO'. The stream identifier can be extracted from a - file opened on the Ada side, and an Ada file can be constructed from a - stream opened on the C side. - -  - File: gnat_rm.info, Node: Ada.Exceptions.Is_Null_Occurrence (a-einuoc.ads), Next: Ada.Sequential_IO.C_Streams (a-siocst.ads), Prev: Ada.Direct_IO.C_Streams (a-diocst.ads), Up: The GNAT Library - - `Ada.Exceptions.Is_Null_Occurrence' (`a-einuoc.ads') - ==================================================== - - This child subprogram provides a way of testing for the null exception - occurrence (`Null_Occurrence') without raising an exception. - -  - File: gnat_rm.info, Node: Ada.Sequential_IO.C_Streams (a-siocst.ads), Next: Ada.Streams.Stream_IO.C_Streams (a-ssicst.ads), Prev: Ada.Exceptions.Is_Null_Occurrence (a-einuoc.ads), Up: The GNAT Library - - `Ada.Sequential_IO.C_Streams' (`a-siocst.ads') - ============================================== - - This package provides subprograms that allow interfacing between C - streams and `Sequential_IO'. The stream identifier can be extracted - from a file opened on the Ada side, and an Ada file can be constructed - from a stream opened on the C side. - -  - File: gnat_rm.info, Node: Ada.Streams.Stream_IO.C_Streams (a-ssicst.ads), Next: Ada.Strings.Unbounded.Text_IO (a-suteio.ads), Prev: Ada.Sequential_IO.C_Streams (a-siocst.ads), Up: The GNAT Library - - `Ada.Streams.Stream_IO.C_Streams' (`a-ssicst.ads') - ================================================== - - This package provides subprograms that allow interfacing between C - streams and `Stream_IO'. The stream identifier can be extracted from a - file opened on the Ada side, and an Ada file can be constructed from a - stream opened on the C side. - -  - File: gnat_rm.info, Node: Ada.Strings.Unbounded.Text_IO (a-suteio.ads), Next: Ada.Strings.Wide_Unbounded.Wide_Text_IO (a-swuwti.ads), Prev: Ada.Streams.Stream_IO.C_Streams (a-ssicst.ads), Up: The GNAT Library - - `Ada.Strings.Unbounded.Text_IO' (`a-suteio.ads') - ================================================ - - This package provides subprograms for Text_IO for unbounded strings, - avoiding the necessity for an intermediate operation with ordinary - strings. - -  - File: gnat_rm.info, Node: Ada.Strings.Wide_Unbounded.Wide_Text_IO (a-swuwti.ads), Next: Ada.Text_IO.C_Streams (a-tiocst.ads), Prev: Ada.Strings.Unbounded.Text_IO (a-suteio.ads), Up: The GNAT Library - - `Ada.Strings.Wide_Unbounded.Wide_Text_IO' (`a-swuwti.ads') - ========================================================== - - This package provides subprograms for Text_IO for unbounded wide - strings, avoiding the necessity for an intermediate operation with - ordinary wide strings. - -  - File: gnat_rm.info, Node: Ada.Text_IO.C_Streams (a-tiocst.ads), Next: Ada.Wide_Text_IO.C_Streams (a-wtcstr.ads), Prev: Ada.Strings.Wide_Unbounded.Wide_Text_IO (a-swuwti.ads), Up: The GNAT Library - - `Ada.Text_IO.C_Streams' (`a-tiocst.ads') - ======================================== - - This package provides subprograms that allow interfacing between C - streams and `Text_IO'. The stream identifier can be extracted from a - file opened on the Ada side, and an Ada file can be constructed from a - stream opened on the C side. - -  - File: gnat_rm.info, Node: Ada.Wide_Text_IO.C_Streams (a-wtcstr.ads), Next: GNAT.AWK (g-awk.ads), Prev: Ada.Text_IO.C_Streams (a-tiocst.ads), Up: The GNAT Library - - `Ada.Wide_Text_IO.C_Streams' (`a-wtcstr.ads') - ============================================= - - This package provides subprograms that allow interfacing between C - streams and `Wide_Text_IO'. The stream identifier can be extracted - from a file opened on the Ada side, and an Ada file can be constructed - from a stream opened on the C side. - -  - File: gnat_rm.info, Node: GNAT.AWK (g-awk.ads), Next: GNAT.Bubble_Sort_A (g-busora.ads), Prev: Ada.Wide_Text_IO.C_Streams (a-wtcstr.ads), Up: The GNAT Library - - `GNAT.AWK' (`g-awk.ads') - ======================== - - Provides AWK-like parsing functions, with an easy interface for parsing - one or more files containing formatted data. The file is viewed as a - database where each record is a line and a field is a data element in - this line. - -  - File: gnat_rm.info, Node: GNAT.Bubble_Sort_A (g-busora.ads), Next: GNAT.Bubble_Sort_G (g-busorg.ads), Prev: GNAT.AWK (g-awk.ads), Up: The GNAT Library - - `GNAT.Bubble_Sort_A' (`g-busora.ads') - ===================================== - - Provides a general implementation of bubble sort usable for sorting - arbitrary data items. Move and comparison procedures are provided by - passing access-to-procedure values. - -  - File: gnat_rm.info, Node: GNAT.Bubble_Sort_G (g-busorg.ads), Next: GNAT.Calendar (g-calend.ads), Prev: GNAT.Bubble_Sort_A (g-busora.ads), Up: The GNAT Library - - `GNAT.Bubble_Sort_G' (`g-busorg.ads') - ===================================== - - Similar to `Bubble_Sort_A' except that the move and sorting procedures - are provided as generic parameters, this improves efficiency, especially - if the procedures can be inlined, at the expense of duplicating code for - multiple instantiations. - -  - File: gnat_rm.info, Node: GNAT.Calendar (g-calend.ads), Next: GNAT.Calendar.Time_IO (g-catiio.ads), Prev: GNAT.Bubble_Sort_G (g-busorg.ads), Up: The GNAT Library - - `GNAT.Calendar' (`g-calend.ads') - ================================ - - Extends the facilities provided by `Ada.Calendar' to include handling - of days of the week, an extended `Split' and `Time_Of' capability. - Also provides conversion of `Ada.Calendar.Time' values to and from the - C `timeval' format. - -  - File: gnat_rm.info, Node: GNAT.Calendar.Time_IO (g-catiio.ads), Next: GNAT.CRC32 (g-crc32.ads), Prev: GNAT.Calendar (g-calend.ads), Up: The GNAT Library - - `GNAT.Calendar.Time_IO' (`g-catiio.ads') - ======================================== - -  - File: gnat_rm.info, Node: GNAT.CRC32 (g-crc32.ads), Next: GNAT.Case_Util (g-casuti.ads), Prev: GNAT.Calendar.Time_IO (g-catiio.ads), Up: The GNAT Library - - `GNAT.CRC32' (`g-crc32.ads') - ============================ - - This package implements the CRC-32 algorithm. For a full description - of this algorithm you should have a look at: "Computation of Cyclic - Redundancy Checks via Table Look-Up", `Communications of the ACM', Vol. - 31 No. 8, pp. 1008-1013, Aug. 1988. Sarwate, D.V. - - Provides an extended capability for formatted output of time values with - full user control over the format. Modeled on the GNU Date - specification. - -  - File: gnat_rm.info, Node: GNAT.Case_Util (g-casuti.ads), Next: GNAT.CGI (g-cgi.ads), Prev: GNAT.CRC32 (g-crc32.ads), Up: The GNAT Library - - `GNAT.Case_Util' (`g-casuti.ads') - ================================= - - A set of simple routines for handling upper and lower casing of strings - without the overhead of the full casing tables in - `Ada.Characters.Handling'. - -  - File: gnat_rm.info, Node: GNAT.CGI (g-cgi.ads), Next: GNAT.CGI.Cookie (g-cgicoo.ads), Prev: GNAT.Case_Util (g-casuti.ads), Up: The GNAT Library - - `GNAT.CGI' (`g-cgi.ads') - ======================== - - This is a package for interfacing a GNAT program with a Web server via - the Common Gateway Interface (CGI). Basically this package parses the - CGI parameters, which are a set of key/value pairs sent by the Web - server. It builds a table whose index is the key and provides some - services to deal with this table. - -  - File: gnat_rm.info, Node: GNAT.CGI.Cookie (g-cgicoo.ads), Next: GNAT.CGI.Debug (g-cgideb.ads), Prev: GNAT.CGI (g-cgi.ads), Up: The GNAT Library - - `GNAT.CGI.Cookie' (`g-cgicoo.ads') - ================================== - - This is a package to interface a GNAT program with a Web server via the - Common Gateway Interface (CGI). It exports services to deal with Web - cookies (piece of information kept in the Web client software). - -  - File: gnat_rm.info, Node: GNAT.CGI.Debug (g-cgideb.ads), Next: GNAT.Command_Line (g-comlin.ads), Prev: GNAT.CGI.Cookie (g-cgicoo.ads), Up: The GNAT Library - - `GNAT.CGI.Debug' (`g-cgideb.ads') - ================================= - - This is a package to help debugging CGI (Common Gateway Interface) - programs written in Ada. - -  - File: gnat_rm.info, Node: GNAT.Command_Line (g-comlin.ads), Next: GNAT.Current_Exception (g-curexc.ads), Prev: GNAT.CGI.Debug (g-cgideb.ads), Up: The GNAT Library - - `GNAT.Command_Line' (`g-comlin.ads') - ==================================== - - Provides a high level interface to `Ada.Command_Line' facilities, - including the ability to scan for named switches with optional - parameters and expand file names using wild card notations. - -  - File: gnat_rm.info, Node: GNAT.Current_Exception (g-curexc.ads), Next: GNAT.Debug_Pools (g-debpoo.ads), Prev: GNAT.Command_Line (g-comlin.ads), Up: The GNAT Library - - `GNAT.Current_Exception' (`g-curexc.ads') - ========================================= - - Provides access to information on the current exception that has been - raised without the need for using the Ada-95 exception choice parameter - specification syntax. This is particularly useful in simulating - typical facilities for obtaining information about exceptions provided - by Ada 83 compilers. - -  - File: gnat_rm.info, Node: GNAT.Debug_Pools (g-debpoo.ads), Next: GNAT.Debug_Utilities (g-debuti.ads), Prev: GNAT.Current_Exception (g-curexc.ads), Up: The GNAT Library - - `GNAT.Debug_Pools' (`g-debpoo.ads') - =================================== - - Provide a debugging storage pools that helps tracking memory corruption - problems. See section "Finding memory problems with GNAT Debug Pool" in - the `GNAT User's Guide'. - -  - File: gnat_rm.info, Node: GNAT.Debug_Utilities (g-debuti.ads), Next: GNAT.Directory_Operations (g-dirope.ads), Prev: GNAT.Debug_Pools (g-debpoo.ads), Up: The GNAT Library - - `GNAT.Debug_Utilities' (`g-debuti.ads') - ======================================= - - Provides a few useful utilities for debugging purposes, including - conversion to and from string images of address values. - -  - File: gnat_rm.info, Node: GNAT.Directory_Operations (g-dirope.ads), Next: GNAT.Dynamic_Tables (g-dyntab.ads), Prev: GNAT.Debug_Utilities (g-debuti.ads), Up: The GNAT Library - - `GNAT.Directory_Operations' (g-dirope.ads) - ========================================== - - Provides a set of routines for manipulating directories, including - changing the current directory, making new directories, and scanning - the files in a directory. - -  - File: gnat_rm.info, Node: GNAT.Dynamic_Tables (g-dyntab.ads), Next: GNAT.Exception_Traces (g-exctra.ads), Prev: GNAT.Directory_Operations (g-dirope.ads), Up: The GNAT Library - - `GNAT.Dynamic_Tables' (`g-dyntab.ads') - ====================================== - - A generic package providing a single dimension array abstraction where - the length of the array can be dynamically modified. - - This package provides a facility similar to that of GNAT.Table, except - that this package declares a type that can be used to define dynamic - instances of the table, while an instantiation of GNAT.Table creates a - single instance of the table type. - -  - File: gnat_rm.info, Node: GNAT.Exception_Traces (g-exctra.ads), Next: GNAT.Expect (g-expect.ads), Prev: GNAT.Dynamic_Tables (g-dyntab.ads), Up: The GNAT Library - - `GNAT.Exception_Traces' (`g-exctra.ads') - ======================================== - - Provides an interface allowing to control automatic output upon - exception occurrences. - -  - File: gnat_rm.info, Node: GNAT.Expect (g-expect.ads), Next: GNAT.Float_Control (g-flocon.ads), Prev: GNAT.Exception_Traces (g-exctra.ads), Up: The GNAT Library - - `GNAT.Expect' (`g-expect.ads') - ============================== - - Provides a set of subprograms similar to what is available with the - standard Tcl Expect tool. It allows you to easily spawn and - communicate with an external process. You can send commands or inputs - to the process, and compare the output with some expected regular - expression. Currently GNAT.Expect is implemented on all native GNAT - ports except for OpenVMS. It is not implemented for cross ports, and - in particular is not implemented for VxWorks or LynxOS. - -  - File: gnat_rm.info, Node: GNAT.Float_Control (g-flocon.ads), Next: GNAT.Heap_Sort_A (g-hesora.ads), Prev: GNAT.Expect (g-expect.ads), Up: The GNAT Library - - `GNAT.Float_Control' (`g-flocon.ads') - ===================================== - - Provides an interface for resetting the floating-point processor into - the mode required for correct semantic operation in Ada. Some third - party library calls may cause this mode to be modified, and the Reset - procedure in this package can be used to reestablish the required mode. - -  - File: gnat_rm.info, Node: GNAT.Heap_Sort_A (g-hesora.ads), Next: GNAT.Heap_Sort_G (g-hesorg.ads), Prev: GNAT.Float_Control (g-flocon.ads), Up: The GNAT Library - - `GNAT.Heap_Sort_A' (`g-hesora.ads') - =================================== - - Provides a general implementation of heap sort usable for sorting - arbitrary data items. Move and comparison procedures are provided by - passing access-to-procedure values. The algorithm used is a modified - heap sort that performs approximately N*log(N) comparisons in the worst - case. - -  - File: gnat_rm.info, Node: GNAT.Heap_Sort_G (g-hesorg.ads), Next: GNAT.HTable (g-htable.ads), Prev: GNAT.Heap_Sort_A (g-hesora.ads), Up: The GNAT Library - - `GNAT.Heap_Sort_G' (`g-hesorg.ads') - =================================== - - Similar to `Heap_Sort_A' except that the move and sorting procedures - are provided as generic parameters, this improves efficiency, especially - if the procedures can be inlined, at the expense of duplicating code for - multiple instantiations. - -  - File: gnat_rm.info, Node: GNAT.HTable (g-htable.ads), Next: GNAT.IO (g-io.ads), Prev: GNAT.Heap_Sort_G (g-hesorg.ads), Up: The GNAT Library - - `GNAT.HTable' (`g-htable.ads') - ============================== - - A generic implementation of hash tables that can be used to hash - arbitrary data. Provides two approaches, one a simple static approach, - and the other allowing arbitrary dynamic hash tables. - -  - File: gnat_rm.info, Node: GNAT.IO (g-io.ads), Next: GNAT.IO_Aux (g-io_aux.ads), Prev: GNAT.HTable (g-htable.ads), Up: The GNAT Library - - `GNAT.IO' (`g-io.ads') - ====================== - - A simple preealborable input-output package that provides a subset of - simple Text_IO functions for reading characters and strings from - Standard_Input, and writing characters, strings and integers to either - Standard_Output or Standard_Error. - -  - File: gnat_rm.info, Node: GNAT.IO_Aux (g-io_aux.ads), Next: GNAT.Lock_Files (g-locfil.ads), Prev: GNAT.IO (g-io.ads), Up: The GNAT Library - - `GNAT.IO_Aux' (`g-io_aux.ads') - ============================== - - Provides some auxiliary functions for use with Text_IO, including a - test for whether a file exists, and functions for reading a line of - text. - -  - File: gnat_rm.info, Node: GNAT.Lock_Files (g-locfil.ads), Next: GNAT.MD5 (g-md5.ads), Prev: GNAT.IO_Aux (g-io_aux.ads), Up: The GNAT Library - - `GNAT.Lock_Files' (`g-locfil.ads') - ================================== - - Provides a general interface for using files as locks. Can be used for - providing program level synchronization. - -  - File: gnat_rm.info, Node: GNAT.MD5 (g-md5.ads), Next: GNAT.Most_Recent_Exception (g-moreex.ads), Prev: GNAT.Lock_Files (g-locfil.ads), Up: The GNAT Library - - `GNAT.MD5' (`g-md5.ads') - ======================== - - Implements the MD5 Message-Digest Algorithm as described in RFC 1321. - -  - File: gnat_rm.info, Node: GNAT.Most_Recent_Exception (g-moreex.ads), Next: GNAT.OS_Lib (g-os_lib.ads), Prev: GNAT.MD5 (g-md5.ads), Up: The GNAT Library - - `GNAT.Most_Recent_Exception' (`g-moreex.ads') - ============================================= - - Provides access to the most recently raised exception. Can be used for - various logging purposes, including duplicating functionality of some - Ada 83 implementation dependent extensions. - -  - File: gnat_rm.info, Node: GNAT.OS_Lib (g-os_lib.ads), Next: GNAT.Regexp (g-regexp.ads), Prev: GNAT.Most_Recent_Exception (g-moreex.ads), Up: The GNAT Library - - `GNAT.OS_Lib' (`g-os_lib.ads') - ============================== - - Provides a range of target independent operating system interface - functions, including time/date management, file operations, subprocess - management, including a portable spawn procedure, and access to - environment variables and error return codes. - -  - File: gnat_rm.info, Node: GNAT.Regexp (g-regexp.ads), Next: GNAT.Registry (g-regist.ads), Prev: GNAT.OS_Lib (g-os_lib.ads), Up: The GNAT Library - - `GNAT.Regexp' (`g-regexp.ads') - ============================== - - A simple implementation of regular expressions, using a subset of - regular expression syntax copied from familiar Unix style utilities. - This is the simples of the three pattern matching packages provided, - and is particularly suitable for "file globbing" applications. - -  - File: gnat_rm.info, Node: GNAT.Registry (g-regist.ads), Next: GNAT.Regpat (g-regpat.ads), Prev: GNAT.Regexp (g-regexp.ads), Up: The GNAT Library - - `GNAT.Registry' (`g-regist.ads') - ================================ - - This is a high level binding to the Windows registry. It is possible to - do simple things like reading a key value, creating a new key. For full - registry API, but at a lower level of abstraction, refer to the - Win32.Winreg package provided with the Win32Ada binding - -  - File: gnat_rm.info, Node: GNAT.Regpat (g-regpat.ads), Next: GNAT.Sockets (g-socket.ads), Prev: GNAT.Registry (g-regist.ads), Up: The GNAT Library - - `GNAT.Regpat' (`g-regpat.ads') - ============================== - - A complete implementation of Unix-style regular expression matching, - copied from the original V7 style regular expression library written in - C by Henry Spencer (and binary compatible with this C library). - -  - File: gnat_rm.info, Node: GNAT.Sockets (g-socket.ads), Next: GNAT.Source_Info (g-souinf.ads), Prev: GNAT.Regpat (g-regpat.ads), Up: The GNAT Library - - `GNAT.Sockets' (`g-socket.ads') - =============================== - - A high level and portable interface to develop sockets based - applications. This package is based on the sockets thin binding found - in GNAT.Sockets.Thin. Currently GNAT.Sockets is implemented on all - native GNAT ports except for OpenVMS. It is not implemented for the - LynxOS cross port. - -  - File: gnat_rm.info, Node: GNAT.Source_Info (g-souinf.ads), Next: GNAT.Spell_Checker (g-speche.ads), Prev: GNAT.Sockets (g-socket.ads), Up: The GNAT Library - - `GNAT.Source_Info' (`g-souinf.ads') - =================================== - - Provides subprograms that give access to source code information known - at compile time, such as the current file name and line number. - -  - File: gnat_rm.info, Node: GNAT.Spell_Checker (g-speche.ads), Next: GNAT.Spitbol.Patterns (g-spipat.ads), Prev: GNAT.Source_Info (g-souinf.ads), Up: The GNAT Library - - `GNAT.Spell_Checker' (`g-speche.ads') - ===================================== - - Provides a function for determining whether one string is a plausible - near misspelling of another string. - -  - File: gnat_rm.info, Node: GNAT.Spitbol.Patterns (g-spipat.ads), Next: GNAT.Spitbol (g-spitbo.ads), Prev: GNAT.Spell_Checker (g-speche.ads), Up: The GNAT Library - - `GNAT.Spitbol.Patterns' (`g-spipat.ads') - ======================================== - - A complete implementation of SNOBOL4 style pattern matching. This is - the most elaborate of the pattern matching packages provided. It fully - duplicates the SNOBOL4 dynamic pattern construction and matching - capabilities, using the efficient algorithm developed by Robert Dewar - for the SPITBOL system. - -  - File: gnat_rm.info, Node: GNAT.Spitbol (g-spitbo.ads), Next: GNAT.Spitbol.Table_Boolean (g-sptabo.ads), Prev: GNAT.Spitbol.Patterns (g-spipat.ads), Up: The GNAT Library - - `GNAT.Spitbol' (`g-spitbo.ads') - =============================== - - The top level package of the collection of SPITBOL-style functionality, - this package provides basic SNOBOL4 string manipulation functions, such - as Pad, Reverse, Trim, Substr capability, as well as a generic table - function useful for constructing arbitrary mappings from strings in the - style of the SNOBOL4 TABLE function. - -  - File: gnat_rm.info, Node: GNAT.Spitbol.Table_Boolean (g-sptabo.ads), Next: GNAT.Spitbol.Table_Integer (g-sptain.ads), Prev: GNAT.Spitbol (g-spitbo.ads), Up: The GNAT Library - - `GNAT.Spitbol.Table_Boolean' (`g-sptabo.ads') - ============================================= - - A library level of instantiation of `GNAT.Spitbol.Patterns.Table' for - type `Standard.Boolean', giving an implementation of sets of string - values. - -  - File: gnat_rm.info, Node: GNAT.Spitbol.Table_Integer (g-sptain.ads), Next: GNAT.Spitbol.Table_VString (g-sptavs.ads), Prev: GNAT.Spitbol.Table_Boolean (g-sptabo.ads), Up: The GNAT Library - - `GNAT.Spitbol.Table_Integer' (`g-sptain.ads') - ============================================= - - A library level of instantiation of `GNAT.Spitbol.Patterns.Table' for - type `Standard.Integer', giving an implementation of maps from string - to integer values. - -  - File: gnat_rm.info, Node: GNAT.Spitbol.Table_VString (g-sptavs.ads), Next: GNAT.Table (g-table.ads), Prev: GNAT.Spitbol.Table_Integer (g-sptain.ads), Up: The GNAT Library - - `GNAT.Spitbol.Table_VString' (`g-sptavs.ads') - ============================================= - - A library level of instantiation of GNAT.Spitbol.Patterns.Table for a - variable length string type, giving an implementation of general maps - from strings to strings. - -  - File: gnat_rm.info, Node: GNAT.Table (g-table.ads), Next: GNAT.Task_Lock (g-tasloc.ads), Prev: GNAT.Spitbol.Table_VString (g-sptavs.ads), Up: The GNAT Library - - `GNAT.Table' (`g-table.ads') - ============================ - - A generic package providing a single dimension array abstraction where - the length of the array can be dynamically modified. - - This package provides a facility similar to that of GNAT.Dynamic_Tables, - except that this package declares a single instance of the table type, - while an instantiation of GNAT.Dynamic_Tables creates a type that can be - used to define dynamic instances of the table. - -  - File: gnat_rm.info, Node: GNAT.Task_Lock (g-tasloc.ads), Next: GNAT.Threads (g-thread.ads), Prev: GNAT.Table (g-table.ads), Up: The GNAT Library - - `GNAT.Task_Lock' (`g-tasloc.ads') - ================================= - - A very simple facility for locking and unlocking sections of code using - a single global task lock. Appropriate for use in situations where - contention between tasks is very rarely expected. - -  - File: gnat_rm.info, Node: GNAT.Threads (g-thread.ads), Next: GNAT.Traceback (g-traceb.ads), Prev: GNAT.Task_Lock (g-tasloc.ads), Up: The GNAT Library - - `GNAT.Threads' (`g-thread.ads') - =============================== - - Provides facilities for creating and destroying threads with explicit - calls. These threads are known to the GNAT run-time system. These - subprograms are exported C-convention procedures intended to be called - from foreign code. By using these primitives rather than directly - calling operating systems routines, compatibility with the Ada tasking - runt-time is provided. - -  - File: gnat_rm.info, Node: GNAT.Traceback (g-traceb.ads), Next: GNAT.Traceback.Symbolic (g-trasym.ads), Prev: GNAT.Threads (g-thread.ads), Up: The GNAT Library - - `GNAT.Traceback' (`g-traceb.ads') - ================================= - - Provides a facility for obtaining non-symbolic traceback information, - useful in various debugging situations. - -  - File: gnat_rm.info, Node: GNAT.Traceback.Symbolic (g-trasym.ads), Next: Interfaces.C.Extensions (i-cexten.ads), Prev: GNAT.Traceback (g-traceb.ads), Up: The GNAT Library - - `GNAT.Traceback.Symbolic' (`g-trasym.ads') - ========================================== - - Provides symbolic traceback information that includes the subprogram - name and line number information. - -  - File: gnat_rm.info, Node: Interfaces.C.Extensions (i-cexten.ads), Next: Interfaces.C.Streams (i-cstrea.ads), Prev: GNAT.Traceback.Symbolic (g-trasym.ads), Up: The GNAT Library - - `Interfaces.C.Extensions' (`i-cexten.ads') - ========================================== - - This package contains additional C-related definitions, intended for - use with either manually or automatically generated bindings to C - libraries. - -  - File: gnat_rm.info, Node: Interfaces.C.Streams (i-cstrea.ads), Next: Interfaces.CPP (i-cpp.ads), Prev: Interfaces.C.Extensions (i-cexten.ads), Up: The GNAT Library - - `Interfaces.C.Streams' (`i-cstrea.ads') - ======================================= - - This package is a binding for the most commonly used operations on C - streams. - -  - File: gnat_rm.info, Node: Interfaces.CPP (i-cpp.ads), Next: Interfaces.Os2lib (i-os2lib.ads), Prev: Interfaces.C.Streams (i-cstrea.ads), Up: The GNAT Library - - `Interfaces.CPP' (`i-cpp.ads') - ============================== - - This package provides facilities for use in interfacing to C++. It is - primarily intended to be used in connection with automated tools for - the generation of C++ interfaces. - -  - File: gnat_rm.info, Node: Interfaces.Os2lib (i-os2lib.ads), Next: Interfaces.Os2lib.Errors (i-os2err.ads), Prev: Interfaces.CPP (i-cpp.ads), Up: The GNAT Library - - `Interfaces.Os2lib' (`i-os2lib.ads') - ==================================== - - This package provides interface definitions to the OS/2 library. It is - a thin binding which is a direct translation of the various `' - files. - -  - File: gnat_rm.info, Node: Interfaces.Os2lib.Errors (i-os2err.ads), Next: Interfaces.Os2lib.Synchronization (i-os2syn.ads), Prev: Interfaces.Os2lib (i-os2lib.ads), Up: The GNAT Library - - `Interfaces.Os2lib.Errors' (`i-os2err.ads') - =========================================== - - This package provides definitions of the OS/2 error codes. - -  - File: gnat_rm.info, Node: Interfaces.Os2lib.Synchronization (i-os2syn.ads), Next: Interfaces.Os2lib.Threads (i-os2thr.ads), Prev: Interfaces.Os2lib.Errors (i-os2err.ads), Up: The GNAT Library - - `Interfaces.Os2lib.Synchronization' (`i-os2syn.ads') - ==================================================== - - This is a child package that provides definitions for interfacing to - the `OS/2' synchronization primitives. - -  - File: gnat_rm.info, Node: Interfaces.Os2lib.Threads (i-os2thr.ads), Next: Interfaces.Packed_Decimal (i-pacdec.ads), Prev: Interfaces.Os2lib.Synchronization (i-os2syn.ads), Up: The GNAT Library - - `Interfaces.Os2lib.Threads' (`i-os2thr.ads') - ============================================ - - This is a child package that provides definitions for interfacing to - the `OS/2' thread primitives. - -  - File: gnat_rm.info, Node: Interfaces.Packed_Decimal (i-pacdec.ads), Next: Interfaces.VxWorks (i-vxwork.ads), Prev: Interfaces.Os2lib.Threads (i-os2thr.ads), Up: The GNAT Library - - `Interfaces.Packed_Decimal' (`i-pacdec.ads') - ============================================ - - This package provides a set of routines for conversions to and from a - packed decimal format compatible with that used on IBM mainframes. - -  - File: gnat_rm.info, Node: Interfaces.VxWorks (i-vxwork.ads), Next: Interfaces.VxWorks.IO (i-vxwoio.ads), Prev: Interfaces.Packed_Decimal (i-pacdec.ads), Up: The GNAT Library - - `Interfaces.VxWorks' (`i-vxwork.ads') - ===================================== - - This package provides a limited binding to the VxWorks API. In - particular, it interfaces with the VxWorks hardware interrupt - facilities. - -  - File: gnat_rm.info, Node: Interfaces.VxWorks.IO (i-vxwoio.ads), Next: System.Address_Image (s-addima.ads), Prev: Interfaces.VxWorks (i-vxwork.ads), Up: The GNAT Library - - `Interfaces.VxWorks.IO' (`i-vxwoio.ads') - ======================================== - - This package provides a limited binding to the VxWorks' I/O API. In - particular, it provides procedures that enable the use of Get_Immediate - under VxWorks. - -  - File: gnat_rm.info, Node: System.Address_Image (s-addima.ads), Next: System.Assertions (s-assert.ads), Prev: Interfaces.VxWorks.IO (i-vxwoio.ads), Up: The GNAT Library - - `System.Address_Image' (`s-addima.ads') - ======================================= - - This function provides a useful debugging function that gives an - (implementation dependent) string which identifies an address. - -  - File: gnat_rm.info, Node: System.Assertions (s-assert.ads), Next: System.Partition_Interface (s-parint.ads), Prev: System.Address_Image (s-addima.ads), Up: The GNAT Library - - `System.Assertions' (`s-assert.ads') - ==================================== - - This package provides the declaration of the exception raised by an - run-time assertion failure, as well as the routine that is used - internally to raise this assertion. - -  - File: gnat_rm.info, Node: System.Partition_Interface (s-parint.ads), Next: System.Task_Info (s-tasinf.ads), Prev: System.Assertions (s-assert.ads), Up: The GNAT Library - - `System.Partition_Interface' (`s-parint.ads') - ============================================= - - This package provides facilities for partition interfacing. It is used - primarily in a distribution context when using Annex E with `GLADE'. - -  - File: gnat_rm.info, Node: System.Task_Info (s-tasinf.ads), Next: System.Wch_Cnv (s-wchcnv.ads), Prev: System.Partition_Interface (s-parint.ads), Up: The GNAT Library - - `System.Task_Info' (`s-tasinf.ads') - =================================== - - This package provides target dependent functionality that is used to - support the `Task_Info' pragma - -  - File: gnat_rm.info, Node: System.Wch_Cnv (s-wchcnv.ads), Next: System.Wch_Con (s-wchcon.ads), Prev: System.Task_Info (s-tasinf.ads), Up: The GNAT Library - - `System.Wch_Cnv' (`s-wchcnv.ads') - ================================= - - This package provides routines for converting between wide characters - and a representation as a value of type `Standard.String', using a - specified wide character encoding method. It uses definitions in - package `System.Wch_Con'. - -  - File: gnat_rm.info, Node: System.Wch_Con (s-wchcon.ads), Prev: System.Wch_Cnv (s-wchcnv.ads), Up: The GNAT Library - - `System.Wch_Con' (`s-wchcon.ads') - ================================= - - This package provides definitions and descriptions of the various - methods used for encoding wide characters in ordinary strings. These - definitions are used by the package `System.Wch_Cnv'. - -  - File: gnat_rm.info, Node: Interfacing to Other Languages, Next: Machine Code Insertions, Prev: The GNAT Library, Up: Top - - Interfacing to Other Languages - ****************************** - - The facilities in annex B of the Ada 95 Reference Manual are fully - implemented in GNAT, and in addition, a full interface to C++ is - provided. - - * Menu: - - * Interfacing to C:: - * Interfacing to C++:: - * Interfacing to COBOL:: - * Interfacing to Fortran:: - * Interfacing to non-GNAT Ada code:: - -  - File: gnat_rm.info, Node: Interfacing to C, Next: Interfacing to C++, Up: Interfacing to Other Languages - - Interfacing to C - ================ - - Interfacing to C with GNAT can use one of two approaches: - - 1. The types in the package `Interfaces.C' may be used. - - 2. Standard Ada types may be used directly. This may be less - portable to other compilers, but will work on all GNAT compilers, - which guarantee correspondence between the C and Ada types. - - Pragma `Convention C' maybe applied to Ada types, but mostly has no - effect, since this is the default. The following table shows the - correspondence between Ada scalar types and the corresponding C types. - - `Integer' - `int' - - `Short_Integer' - `short' - - `Short_Short_Integer' - `signed char' - - `Long_Integer' - `long' - - `Long_Long_Integer' - `long long' - - `Short_Float' - `float' - - `Float' - `float' - - `Long_Float' - `double' - - `Long_Long_Float' - This is the longest floating-point type supported by the hardware. - - * Ada enumeration types map to C enumeration types directly if pragma - `Convention C' is specified, which causes them to have int length. - Without pragma `Convention C', Ada enumeration types map to 8, - 16, or 32 bits (i.e. C types `signed char', `short', `int', - respectively) depending on the number of values passed. This is - the only case in which pragma `Convention C' affects the - representation of an Ada type. - - * Ada access types map to C pointers, except for the case of - pointers to unconstrained types in Ada, which have no direct C - equivalent. - - * Ada arrays map directly to C arrays. - - * Ada records map directly to C structures. - - * Packed Ada records map to C structures where all members are bit - fields of the length corresponding to the `TYPE'Size' value in Ada. - -  - File: gnat_rm.info, Node: Interfacing to C++, Next: Interfacing to COBOL, Prev: Interfacing to C, Up: Interfacing to Other Languages - - Interfacing to C++ - ================== - - The interface to C++ makes use of the following pragmas, which are - primarily intended to be constructed automatically using a binding - generator tool, although it is possible to construct them by hand. No - suitable binding generator tool is supplied with GNAT though. - - Using these pragmas it is possible to achieve complete - inter-operability between Ada tagged types and C class definitions. - See *Note Implementation Defined Pragmas:: for more details. - - `pragma CPP_Class ([Entity =>] LOCAL_NAME)' - The argument denotes an entity in the current declarative region - that is declared as a tagged or untagged record type. It - indicates that the type corresponds to an externally declared C++ - class type, and is to be laid out the same way that C++ would lay - out the type. - - `pragma CPP_Constructor ([Entity =>] LOCAL_NAME)' - This pragma identifies an imported function (imported in the usual - way with pragma `Import') as corresponding to a C++ constructor. - - `pragma CPP_Vtable ...' - One `CPP_Vtable' pragma can be present for each component of type - `CPP.Interfaces.Vtable_Ptr' in a record to which pragma `CPP_Class' - applies. - -  - File: gnat_rm.info, Node: Interfacing to COBOL, Next: Interfacing to Fortran, Prev: Interfacing to C++, Up: Interfacing to Other Languages - - Interfacing to COBOL - ==================== - - Interfacing to COBOL is achieved as described in section B.4 of the Ada - 95 reference manual. - -  - File: gnat_rm.info, Node: Interfacing to Fortran, Next: Interfacing to non-GNAT Ada code, Prev: Interfacing to COBOL, Up: Interfacing to Other Languages - - Interfacing to Fortran - ====================== - - Interfacing to Fortran is achieved as described in section B.5 of the - reference manual. The pragma `Convention Fortran', applied to a - multi-dimensional array causes the array to be stored in column-major - order as required for convenient interface to Fortran. - -  - File: gnat_rm.info, Node: Interfacing to non-GNAT Ada code, Prev: Interfacing to Fortran, Up: Interfacing to Other Languages - - Interfacing to non-GNAT Ada code - ================================ - - It is possible to specify the convention `Ada' in a pragma `Import' - or pragma `Export'. However this refers to the calling conventions used - by GNAT, which may or may not be similar enough to those used by some - other Ada 83 or Ada 95 compiler to allow interoperation. - - If arguments types are kept simple, and if the foreign compiler - generally follows system calling conventions, then it may be possible - to integrate files compiled by other Ada compilers, provided that the - elaboration issues are adequately addressed (for example by eliminating - the need for any load time elaboration). - - In particular, GNAT running on VMS is designed to be highly - compatible with the DEC Ada 83 compiler, so this is one case in which - it is possible to import foreign units of this type, provided that the - data items passed are restricted to simple scalar values or simple - record types without variants, or simple array types with fixed bounds. - -  - File: gnat_rm.info, Node: Machine Code Insertions, Next: GNAT Implementation of Tasking, Prev: Interfacing to Other Languages, Up: Top - - Machine Code Insertions - *********************** - - Package `Machine_Code' provides machine code support as described in - the Ada 95 Reference Manual in two separate forms: - * Machine code statements, consisting of qualified expressions that - fit the requirements of RM section 13.8. - - * An intrinsic callable procedure, providing an alternative - mechanism of including machine instructions in a subprogram. - - The two features are similar, and both closely related to the - mechanism provided by the asm instruction in the GNU C compiler. Full - understanding and use of the facilities in this package requires - understanding the asm instruction as described in `Using and Porting - the GNU Compiler Collection (GCC)' by Richard Stallman. Calls to the - function `Asm' and the procedure `Asm' have identical semantic - restrictions and effects as described below. Both are provided so that - the procedure call can be used as a statement, and the function call - can be used to form a code_statement. - - The first example given in the GCC documentation is the C `asm' - instruction: - asm ("fsinx %1 %0" : "=f" (result) : "f" (angle)); - - The equivalent can be written for GNAT as: - - Asm ("fsinx %1 %0", - My_Float'Asm_Output ("=f", result), - My_Float'Asm_Input ("f", angle)); - - The first argument to `Asm' is the assembler template, and is - identical to what is used in GNU C. This string must be a static - expression. The second argument is the output operand list. It is - either a single `Asm_Output' attribute reference, or a list of such - references enclosed in parentheses (technically an array aggregate of - such references). - - The `Asm_Output' attribute denotes a function that takes two - parameters. The first is a string, the second is the name of a variable - of the type designated by the attribute prefix. The first (string) - argument is required to be a static expression and designates the - constraint for the parameter (e.g. what kind of register is required). - The second argument is the variable to be updated with the result. The - possible values for constraint are the same as those used in the RTL, - and are dependent on the configuration file used to build the GCC back - end. If there are no output operands, then this argument may either be - omitted, or explicitly given as `No_Output_Operands'. - - The second argument of `MY_FLOAT'Asm_Output' functions as though it - were an `out' parameter, which is a little curious, but all names have - the form of expressions, so there is no syntactic irregularity, even - though normally functions would not be permitted `out' parameters. The - third argument is the list of input operands. It is either a single - `Asm_Input' attribute reference, or a list of such references enclosed - in parentheses (technically an array aggregate of such references). - - The `Asm_Input' attribute denotes a function that takes two - parameters. The first is a string, the second is an expression of the - type designated by the prefix. The first (string) argument is required - to be a static expression, and is the constraint for the parameter, - (e.g. what kind of register is required). The second argument is the - value to be used as the input argument. The possible values for the - constant are the same as those used in the RTL, and are dependent on - the configuration file used to built the GCC back end. - - If there are no input operands, this argument may either be omitted, - or explicitly given as `No_Input_Operands'. The fourth argument, not - present in the above example, is a list of register names, called the - "clobber" argument. This argument, if given, must be a static string - expression, and is a space or comma separated list of names of registers - that must be considered destroyed as a result of the `Asm' call. If - this argument is the null string (the default value), then the code - generator assumes that no additional registers are destroyed. - - The fifth argument, not present in the above example, called the - "volatile" argument, is by default `False'. It can be set to the - literal value `True' to indicate to the code generator that all - optimizations with respect to the instruction specified should be - suppressed, and that in particular, for an instruction that has outputs, - the instruction will still be generated, even if none of the outputs are - used. See the full description in the GCC manual for further details. - - The `Asm' subprograms may be used in two ways. First the procedure - forms can be used anywhere a procedure call would be valid, and - correspond to what the RM calls "intrinsic" routines. Such calls can - be used to intersperse machine instructions with other Ada statements. - Second, the function forms, which return a dummy value of the limited - private type `Asm_Insn', can be used in code statements, and indeed - this is the only context where such calls are allowed. Code statements - appear as aggregates of the form: - - Asm_Insn'(Asm (...)); - Asm_Insn'(Asm_Volatile (...)); - - In accordance with RM rules, such code statements are allowed only - within subprograms whose entire body consists of such statements. It is - not permissible to intermix such statements with other Ada statements. - - Typically the form using intrinsic procedure calls is more convenient - and more flexible. The code statement form is provided to meet the RM - suggestion that such a facility should be made available. The following - is the exact syntax of the call to `Asm' (of course if named notation is - used, the arguments may be given in arbitrary order, following the - normal rules for use of positional and named arguments) - - ASM_CALL ::= Asm ( - [Template =>] static_string_EXPRESSION - [,[Outputs =>] OUTPUT_OPERAND_LIST ] - [,[Inputs =>] INPUT_OPERAND_LIST ] - [,[Clobber =>] static_string_EXPRESSION ] - [,[Volatile =>] static_boolean_EXPRESSION] ) - OUTPUT_OPERAND_LIST ::= - No_Output_Operands - | OUTPUT_OPERAND_ATTRIBUTE - | (OUTPUT_OPERAND_ATTRIBUTE {,OUTPUT_OPERAND_ATTRIBUTE}) - OUTPUT_OPERAND_ATTRIBUTE ::= - SUBTYPE_MARK'Asm_Output (static_string_EXPRESSION, NAME) - INPUT_OPERAND_LIST ::= - No_Input_Operands - | INPUT_OPERAND_ATTRIBUTE - | (INPUT_OPERAND_ATTRIBUTE {,INPUT_OPERAND_ATTRIBUTE}) - INPUT_OPERAND_ATTRIBUTE ::= - SUBTYPE_MARK'Asm_Input (static_string_EXPRESSION, EXPRESSION) - -  - File: gnat_rm.info, Node: GNAT Implementation of Tasking, Next: Code generation for array aggregates, Prev: Machine Code Insertions, Up: Top - - GNAT Implementation of Tasking - ****************************** - - * Menu: - - * Mapping Ada Tasks onto the Underlying Kernel Threads:: - * Ensuring Compliance with the Real-Time Annex:: - -  - File: gnat_rm.info, Node: Mapping Ada Tasks onto the Underlying Kernel Threads, Next: Ensuring Compliance with the Real-Time Annex, Up: GNAT Implementation of Tasking - - Mapping Ada Tasks onto the Underlying Kernel Threads - ==================================================== - - GNAT run-time system comprises two layers: - - * GNARL (GNAT Run-time Layer) - - * GNULL (GNAT Low-level Library) - - In GNAT, Ada's tasking services rely on a platform and OS independent - layer known as GNARL. This code is responsible for implementing the - correct semantics of Ada's task creation, rendezvous, protected - operations etc. - - GNARL decomposes Ada's tasking semantics into simpler lower level - operations such as create a thread, set the priority of a thread, - yield, create a lock, lock/unlock, etc. The spec for these low-level - operations constitutes GNULLI, the GNULL Interface. This interface is - directly inspired from the POSIX real-time API. - - If the underlying executive or OS implements the POSIX standard - faithfully, the GNULL Interface maps as is to the services offered by - the underlying kernel. Otherwise, some target dependent glue code maps - the services offered by the underlying kernel to the semantics expected - by GNARL. - - Whatever the underlying OS (VxWorks, UNIX, OS/2, Windows NT, etc.) - the key point is that each Ada task is mapped on a thread in the - underlying kernel. For example, in the case of VxWorks, one Ada task = - one VxWorks task. - - In addition Ada task priorities map onto the underlying thread - priorities. Mapping Ada tasks onto the underlying kernel threads has - several advantages: - - 1. The underlying scheduler is used to schedule the Ada tasks. This - makes Ada tasks as efficient as kernel threads from a scheduling - standpoint. - - 2. Interaction with code written in C containing threads is eased - since at the lowest level Ada tasks and C threads map onto the same - underlying kernel concept. - - 3. When an Ada task is blocked during I/O the remaining Ada tasks are - able to proceed. - - 4. On multi-processor systems Ada Tasks can execute in parallel. - -  - File: gnat_rm.info, Node: Ensuring Compliance with the Real-Time Annex, Prev: Mapping Ada Tasks onto the Underlying Kernel Threads, Up: GNAT Implementation of Tasking - - Ensuring Compliance with the Real-Time Annex - ============================================ - - The reader will be quick to notice that while mapping Ada tasks onto - the underlying threads has significant advantages, it does create some - complications when it comes to respecting the scheduling semantics - specified in the real-time annex (Annex D). - - For instance Annex D requires that for the FIFO_Within_Priorities - scheduling policy we have: - - When the active priority of a ready task that is not running - changes, or the setting of its base priority takes effect, the - task is removed from the ready queue for its old active priority - and is added at the tail of the ready queue for its new active - priority, except in the case where the active priority is lowered - due to the loss of inherited priority, in which case the task is - added at the head of the ready queue for its new active priority. - - While most kernels do put tasks at the end of the priority queue when - a task changes its priority, (which respects the main - FIFO_Within_Priorities requirement), almost none keep a thread at the - beginning of its priority queue when its priority drops from the loss - of inherited priority. - - As a result most vendors have provided incomplete Annex D - implementations. - - The GNAT run-time, has a nice cooperative solution to this problem - which ensures that accurate FIFO_Within_Priorities semantics are - respected. - - The principle is as follows. When an Ada task T is about to start - running, it checks whether some other Ada task R with the same priority - as T has been suspended due to the loss of priority inheritance. If - this is the case, T yields and is placed at the end of its priority - queue. When R arrives at the front of the queue it executes. - - Note that this simple scheme preserves the relative order of the - tasks that were ready to execute in the priority queue where R has been - placed at the end. - -  - File: gnat_rm.info, Node: Code generation for array aggregates, Next: Specialized Needs Annexes, Prev: GNAT Implementation of Tasking, Up: Top - - Code generation for array aggregates - ************************************ - - * Menu: - - * Static constant aggregates with static bounds:: - * Constant aggregates with an unconstrained nominal types:: - * Aggregates with static bounds:: - * Aggregates with non-static bounds:: - * Aggregates in assignments statements:: - - Aggregate have a rich syntax and allow the user to specify the - values of complex data structures by means of a single construct. As a - result, the code generated for aggregates can be quite complex and - involve loops, case statements and multiple assignments. In the - simplest cases, however, the compiler will recognize aggregates whose - components and constraints are fully static, and in those cases the - compiler will generate little or no executable code. The following is - an outline of the code that GNAT generates for various aggregate - constructs. For further details, the user will find it useful to - examine the output produced by the -gnatG flag to see the expanded - source that is input to the code generator. The user will also want to - examine the assembly code generated at various levels of optimization. - - The code generated for aggregates depends on the context, the - component values, and the type. In the context of an object - declaration the code generated is generally simpler than in the case of - an assignment. As a general rule, static component values and static - subtypes also lead to simpler code. - -  - File: gnat_rm.info, Node: Static constant aggregates with static bounds, Next: Constant aggregates with an unconstrained nominal types, Up: Code generation for array aggregates - - Static constant aggregates with static bounds - ============================================= - - For the declarations: - type One_Dim is array (1..10) of integer; - ar0 : constant One_Dim := ( 1, 2, 3, 4, 5, 6, 7, 8, 9, 0); - - GNAT generates no executable code: the constant ar0 is placed in - static memory. The same is true for constant aggregates with named - associations: - - Cr1 : constant One_Dim := (4 => 16, 2 => 4, 3 => 9, 1=> 1); - Cr3 : constant One_Dim := (others => 7777); - - The same is true for multidimensional constant arrays such as: - - type two_dim is array (1..3, 1..3) of integer; - Unit : constant two_dim := ( (1,0,0), (0,1,0), (0,0,1)); - - The same is true for arrays of one-dimensional arrays: the following - are static: - - type ar1b is array (1..3) of boolean; - type ar_ar is array (1..3) of ar1b; - None : constant ar1b := (others => false); -- fully static - None2 : constant ar_ar := (1..3 => None); -- fully static - - However, for multidimensional aggregates with named associations, - GNAT will generate assignments and loops, even if all associations are - static. The following two declarations generate a loop for the first - dimension, and individual component assignments for the second - dimension: - - Zero1: constant two_dim := (1..3 => (1..3 => 0)); - Zero2: constant two_dim := (others => (others => 0)); - -  - File: gnat_rm.info, Node: Constant aggregates with an unconstrained nominal types, Next: Aggregates with static bounds, Prev: Static constant aggregates with static bounds, Up: Code generation for array aggregates - - Constant aggregates with an unconstrained nominal types - ======================================================= - - In such cases the aggregate itself establishes the subtype, so that - associations with `others' cannot be used. GNAT determines the bounds - for the actual subtype of the aggregate, and allocates the aggregate - statically as well. No code is generated for the following: - - type One_Unc is array (natural range <>) of integer; - Cr_Unc : constant One_Unc := (12,24,36); - -  - File: gnat_rm.info, Node: Aggregates with static bounds, Next: Aggregates with non-static bounds, Prev: Constant aggregates with an unconstrained nominal types, Up: Code generation for array aggregates - - Aggregates with static bounds - ============================= - - In all previous examples the aggregate was the initial (and - immutable) value of a constant. If the aggregate initializes a - variable, then code is generated for it as a combination of individual - assignments and loops over the target object. The declarations - - Cr_Var1 : One_Dim := (2, 5, 7, 11); - Cr_Var2 : One_Dim := (others > -1); - - generate the equivalent of - - Cr_Var1 (1) := 2; - Cr_Var1 (2) := 3; - Cr_Var1 (3) := 5; - Cr_Var1 (4) := 11; - - for I in Cr_Var2'range loop - Cr_Var2 (I) := =-1; - end loop; - -  - File: gnat_rm.info, Node: Aggregates with non-static bounds, Next: Aggregates in assignments statements, Prev: Aggregates with static bounds, Up: Code generation for array aggregates - - Aggregates with non-static bounds - ================================= - - If the bounds of the aggregate are not statically compatible with - the bounds of the nominal subtype of the target, then constraint - checks have to be generated on the bounds. For a multidimensional - array, constraint checks may have to be applied to sub-arrays - individually, if they do not have statically compatible subtypes. - -  - File: gnat_rm.info, Node: Aggregates in assignments statements, Prev: Aggregates with non-static bounds, Up: Code generation for array aggregates - - Aggregates in assignments statements - ==================================== - - In general, aggregate assignment requires the construction of a - temporary, and a copy from the temporary to the target of the - assignment. This is because it is not always possible to convert the - assignment into a series of individual component assignments. For - example, consider the simple case: - - A := (A(2), A(1)); - - This cannot be converted into: - - A(1) := A(2); - A(2) := A(1); - - So the aggregate has to be built first in a separate location, and - then copied into the target. GNAT recognizes simple cases where this - intermediate step is not required, and the assignments can be performed - in place, directly into the target. The following sufficient criteria - are applied: - - 1. The bounds of the aggregate are static, and the associations are - static. - - 2. The components of the aggregate are static constants, names of - simple variables that are not renamings, or expressions not - involving indexed components whose operands obey these rules. - - If any of these conditions are violated, the aggregate will be built - in a temporary (created either by the front-end or the code generator) - and then that temporary will be copied onto the target. - -  - File: gnat_rm.info, Node: Specialized Needs Annexes, Next: Compatibility Guide, Prev: Code generation for array aggregates, Up: Top - - Specialized Needs Annexes - ************************* - - Ada 95 defines a number of specialized needs annexes, which are not - required in all implementations. However, as described in this chapter, - GNAT implements all of these special needs annexes: - - Systems Programming (Annex C) - The Systems Programming Annex is fully implemented. - - Real-Time Systems (Annex D) - The Real-Time Systems Annex is fully implemented. - - Distributed Systems (Annex E) - Stub generation is fully implemented in the GNAT compiler. In - addition, a complete compatible PCS is available as part of the - GLADE system, a separate product. When the two products are used - in conjunction, this annex is fully implemented. - - Information Systems (Annex F) - The Information Systems annex is fully implemented. - - Numerics (Annex G) - The Numerics Annex is fully implemented. - - Safety and Security (Annex H) - The Safety and Security annex is fully implemented. - -  - File: gnat_rm.info, Node: Compatibility Guide, Next: GNU Free Documentation License, Prev: Specialized Needs Annexes, Up: Top - - Compatibility Guide - ******************* - - This chapter contains sections that describe compatibility issues - between GNAT and other Ada 83 and Ada 95 compilation systems, to aid in - porting applications developed in other Ada environments. - - * Menu: - - * Compatibility with Ada 83:: - * Compatibility with DEC Ada 83:: - * Compatibility with Other Ada 95 Systems:: - * Representation Clauses:: - -  - File: gnat_rm.info, Node: Compatibility with Ada 83, Next: Compatibility with DEC Ada 83, Up: Compatibility Guide - - Compatibility with Ada 83 - ========================= - - Ada 95 is designed to be highly upwards compatible with Ada 83. In - particular, the design intention is that the difficulties associated - with moving from Ada 83 to Ada 95 should be no greater than those that - occur when moving from one Ada 83 system to another. - - However, there are a number of points at which there are minor - incompatibilities. The Ada 95 Annotated Reference Manual contains full - details of these issues, and should be consulted for a complete - treatment. In practice the following are the most likely issues to be - encountered. - - Character range - The range of `Standard.Character' is now the full 256 characters - of Latin-1, whereas in most Ada 83 implementations it was - restricted to 128 characters. This may show up as compile time or - runtime errors. The desirable fix is to adapt the program to - accommodate the full character set, but in some cases it may be - convenient to define a subtype or derived type of Character that - covers only the restricted range. - - New reserved words - The identifiers `abstract', `aliased', `protected', `requeue', - `tagged', and `until' are reserved in Ada 95. Existing Ada 83 - code using any of these identifiers must be edited to use some - alternative name. - - Freezing rules - The rules in Ada 95 are slightly different with regard to the - point at which entities are frozen, and representation pragmas and - clauses are not permitted past the freeze point. This shows up - most typically in the form of an error message complaining that a - representation item appears too late, and the appropriate - corrective action is to move the item nearer to the declaration of - the entity to which it refers. - - A particular case is that representation pragmas (including the - extended DEC Ada 83 compatibility pragmas such as - `Export_Procedure'), cannot be applied to a subprogram body. If - necessary, a separate subprogram declaration must be introduced to - which the pragma can be applied. - - Optional bodies for library packages - In Ada 83, a package that did not require a package body was - nevertheless allowed to have one. This lead to certain surprises - in compiling large systems (situations in which the body could be - unexpectedly ignored). In Ada 95, if a package does not require a - body then it is not permitted to have a body. To fix this - problem, simply remove a redundant body if it is empty, or, if it - is non-empty, introduce a dummy declaration into the spec that - makes the body required. One approach is to add a private part to - the package declaration (if necessary), and define a parameterless - procedure called Requires_Body, which must then be given a dummy - procedure body in the package body, which then becomes required. - - `Numeric_Error' is now the same as `Constraint_Error' - In Ada 95, the exception `Numeric_Error' is a renaming of - `Constraint_Error'. This means that it is illegal to have - separate exception handlers for the two exceptions. The fix is - simply to remove the handler for the `Numeric_Error' case (since - even in Ada 83, a compiler was free to raise `Constraint_Error' in - place of `Numeric_Error' in all cases). - - Indefinite subtypes in generics - In Ada 83, it was permissible to pass an indefinite type (e.g. - `String') as the actual for a generic formal private type, but - then the instantiation would be illegal if there were any - instances of declarations of variables of this type in the generic - body. In Ada 95, to avoid this clear violation of the contract - model, the generic declaration clearly indicates whether or not - such instantiations are permitted. If a generic formal parameter - has explicit unknown discriminants, indicated by using `(<>)' - after the type name, then it can be instantiated with indefinite - types, but no variables can be declared of this type. Any attempt - to declare a variable will result in an illegality at the time the - generic is declared. If the `(<>)' notation is not used, then it - is illegal to instantiate the generic with an indefinite type. - This will show up as a compile time error, and the fix is usually - simply to add the `(<>)' to the generic declaration. - - All implementations of GNAT provide a switch that causes GNAT to - operate in Ada 83 mode. In this mode, some but not all compatibility - problems of the type described above are handled automatically. For - example, the new Ada 95 protected keywords are not recognized in this - mode. However, in practice, it is usually advisable to make the - necessary modifications to the program to remove the need for using - this switch. - -  - File: gnat_rm.info, Node: Compatibility with Other Ada 95 Systems, Next: Representation Clauses, Prev: Compatibility with DEC Ada 83, Up: Compatibility Guide - - Compatibility with Other Ada 95 Systems - ======================================= - - Providing that programs avoid the use of implementation dependent and - implementation defined features of Ada 95, as documented in the Ada 95 - reference manual, there should be a high degree of portability between - GNAT and other Ada 95 systems. The following are specific items which - have proved troublesome in moving GNAT programs to other Ada 95 - compilers, but do not affect porting code to GNAT. - - Ada 83 Pragmas and Attributes - Ada 95 compilers are allowed, but not required, to implement the - missing Ada 83 pragmas and attributes that are no longer defined - in Ada 95. GNAT implements all such pragmas and attributes, - eliminating this as a compatibility concern, but some other Ada 95 - compilers reject these pragmas and attributes. - - Special-needs Annexes - GNAT implements the full set of special needs annexes. At the - current time, it is the only Ada 95 compiler to do so. This means - that programs making use of these features may not be portable to - other Ada 95 compilation systems. - - Representation Clauses - Some other Ada 95 compilers implement only the minimal set of - representation clauses required by the Ada 95 reference manual. - GNAT goes far beyond this minimal set, as described in the next - section. - -  - File: gnat_rm.info, Node: Representation Clauses, Prev: Compatibility with Other Ada 95 Systems, Up: Compatibility Guide - - Representation Clauses - ====================== - - The Ada 83 reference manual was quite vague in describing both the - minimal required implementation of representation clauses, and also - their precise effects. The Ada 95 reference manual is much more - explicit, but the minimal set of capabilities required in Ada 95 is - quite limited. - - GNAT implements the full required set of capabilities described in - the Ada 95 reference manual, but also goes much beyond this, and in - particular an effort has been made to be compatible with existing Ada - 83 usage to the greatest extent possible. - - A few cases exist in which Ada 83 compiler behavior is incompatible - with requirements in the Ada 95 reference manual. These are instances - of intentional or accidental dependence on specific implementation - dependent characteristics of these Ada 83 compilers. The following is - a list of the cases most likely to arise in existing legacy Ada 83 code. - - Implicit Packing - Some Ada 83 compilers allowed a Size specification to cause - implicit packing of an array or record. This could cause - expensive implicit conversions for change of representation in the - presence of derived types, and the Ada design intends to avoid - this possibility. Subsequent AI's were issued to make it clear - that such implicit change of representation in response to a Size - clause is inadvisable, and this recommendation is represented - explicitly in the Ada 95 RM as implementation advice that is - followed by GNAT. The problem will show up as an error message - rejecting the size clause. The fix is simply to provide the - explicit pragma `Pack', or for more fine tuned control, provide a - Component_Size clause. - - Meaning of Size Attribute - The Size attribute in Ada 95 for discrete types is defined as - being the minimal number of bits required to hold values of the - type. For example, on a 32-bit machine, the size of Natural will - typically be 31 and not 32 (since no sign bit is required). Some - Ada 83 compilers gave 31, and some 32 in this situation. This - problem will usually show up as a compile time error, but not - always. It is a good idea to check all uses of the 'Size - attribute when porting Ada 83 code. The GNAT specific attribute - Object_Size can provide a useful way of duplicating the behavior of - some Ada 83 compiler systems. - - Size of Access Types - A common assumption in Ada 83 code is that an access type is in - fact a pointer, and that therefore it will be the same size as a - System.Address value. This assumption is true for GNAT in most - cases with one exception. For the case of a pointer to an - unconstrained array type (where the bounds may vary from one value - of the access type to another), the default is to use a "fat - pointer", which is represented as two separate pointers, one to - the bounds, and one to the array. This representation has a - number of advantages, including improved efficiency. However, it - may cause some difficulties in porting existing Ada 83 code which - makes the assumption that, for example, pointers fit in 32 bits on - a machine with 32-bit addressing. - - To get around this problem, GNAT also permits the use of "thin - pointers" for access types in this case (where the designated type - is an unconstrained array type). These thin pointers are indeed - the same size as a System.Address value. To specify a thin - pointer, use a size clause for the type, for example: - - type X is access all String; - for X'Size use Standard'Address_Size; - - which will cause the type X to be represented using a single - pointer. When using this representation, the bounds are right - behind the array. This representation is slightly less efficient, - and does not allow quite such flexibility in the use of foreign - pointers or in using the Unrestricted_Access attribute to create - pointers to non-aliased objects. But for any standard portable - use of the access type it will work in a functionally correct - manner and allow porting of existing code. Note that another way - of forcing a thin pointer representation is to use a component - size clause for the element size in an array, or a record - representation clause for an access field in a record. - -  - File: gnat_rm.info, Node: Compatibility with DEC Ada 83, Next: Compatibility with Other Ada 95 Systems, Prev: Compatibility with Ada 83, Up: Compatibility Guide - - Compatibility with DEC Ada 83 - ============================= - - The VMS version of GNAT fully implements all the pragmas and attributes - provided by DEC Ada 83, as well as providing the standard DEC Ada 83 - libraries, including Starlet. In addition, data layouts and parameter - passing conventions are highly compatible. This means that porting - existing DEC Ada 83 code to GNAT in VMS systems should be easier than - most other porting efforts. The following are some of the most - significant differences between GNAT and DEC Ada 83. - - Default floating-point representation - In GNAT, the default floating-point format is IEEE, whereas in DEC - Ada 83, it is VMS format. GNAT does implement the necessary - pragmas (Long_Float, Float_Representation) for changing this - default. - - System - The package System in GNAT exactly corresponds to the definition - in the Ada 95 reference manual, which means that it excludes many - of the DEC Ada 83 extensions. However, a separate package Aux_DEC - is provided that contains the additional definitions, and a - special pragma, Extend_System allows this package to be treated - transparently as an extension of package System. - - To_Address - The definitions provided by Aux_DEC are exactly compatible with - those in the DEC Ada 83 version of System, with one exception. - DEC Ada provides the following declarations: - - TO_ADDRESS(INTEGER) - TO_ADDRESS(UNSIGNED_LONGWORD) - TO_ADDRESS(universal_integer) - - The version of TO_ADDRESS taking a universal integer argument is - in fact an extension to Ada 83 not strictly compatible with the - reference manual. In GNAT, we are constrained to be exactly - compatible with the standard, and this means we cannot provide - this capability. In DEC Ada 83, the point of this definition is - to deal with a call like: - - TO_ADDRESS (16#12777#); - - Normally, according to the Ada 83 standard, one would expect this - to be ambiguous, since it matches both the INTEGER and - UNSIGNED_LONGWORD forms of TO_ADDRESS. However, in DEC Ada 83, - there is no ambiguity, since the definition using - universal_integer takes precedence. - - In GNAT, since the version with universal_integer cannot be - supplied, it is not possible to be 100% compatible. Since there - are many programs using numeric constants for the argument to - TO_ADDRESS, the decision in GNAT was to change the name of the - function in the UNSIGNED_LONGWORD case, so the declarations - provided in the GNAT version of AUX_Dec are: - - function To_Address (X : Integer) return Address; - pragma Pure_Function (To_Address); - - function To_Address_Long (X : Unsigned_Longword) - return Address; - pragma Pure_Function (To_Address_Long); - - This means that programs using TO_ADDRESS for UNSIGNED_LONGWORD - must change the name to TO_ADDRESS_LONG. - - Task_Id values - The Task_Id values assigned will be different in the two systems, - and GNAT does not provide a specified value for the Task_Id of the - environment task, which in GNAT is treated like any other declared - task. - - For full details on these and other less significant compatibility - issues, see appendix E of the Digital publication entitled `DEC Ada, - Technical Overview and Comparison on DIGITAL Platforms'. - - For GNAT running on other than VMS systems, all the DEC Ada 83 - pragmas and attributes are recognized, although only a subset of them - can sensibly be implemented. The description of pragmas in this - reference manual indicates whether or not they are applicable to - non-VMS systems. - -  - File: gnat_rm.info, Node: GNU Free Documentation License, Next: Index, Prev: Compatibility Guide, Up: Top - - GNU Free Documentation License - ****************************** - - Version 1.2, November 2002 - Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA - - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - 0. PREAMBLE - - The purpose of this License is to make a manual, textbook, or other - functional and useful document "free" in the sense of freedom: to - assure everyone the effective freedom to copy and redistribute it, - with or without modifying it, either commercially or - noncommercially. Secondarily, this License preserves for the - author and publisher a way to get credit for their work, while not - being considered responsible for modifications made by others. - - This License is a kind of "copyleft", which means that derivative - works of the document must themselves be free in the same sense. - It complements the GNU General Public License, which is a copyleft - license designed for free software. - - We have designed this License in order to use it for manuals for - free software, because free software needs free documentation: a - free program should come with manuals providing the same freedoms - that the software does. But this License is not limited to - software manuals; it can be used for any textual work, regardless - of subject matter or whether it is published as a printed book. - We recommend this License principally for works whose purpose is - instruction or reference. - - 1. APPLICABILITY AND DEFINITIONS - - This License applies to any manual or other work, in any medium, - that contains a notice placed by the copyright holder saying it - can be distributed under the terms of this License. Such a notice - grants a world-wide, royalty-free license, unlimited in duration, - to use that work under the conditions stated herein. The - "Document", below, refers to any such manual or work. Any member - of the public is a licensee, and is addressed as "you". You - accept the license if you copy, modify or distribute the work in a - way requiring permission under copyright law. - - A "Modified Version" of the Document means any work containing the - Document or a portion of it, either copied verbatim, or with - modifications and/or translated into another language. - - A "Secondary Section" is a named appendix or a front-matter section - of the Document that deals exclusively with the relationship of the - publishers or authors of the Document to the Document's overall - subject (or to related matters) and contains nothing that could - fall directly within that overall subject. (Thus, if the Document - is in part a textbook of mathematics, a Secondary Section may not - explain any mathematics.) The relationship could be a matter of - historical connection with the subject or with related matters, or - of legal, commercial, philosophical, ethical or political position - regarding them. - - The "Invariant Sections" are certain Secondary Sections whose - titles are designated, as being those of Invariant Sections, in - the notice that says that the Document is released under this - License. If a section does not fit the above definition of - Secondary then it is not allowed to be designated as Invariant. - The Document may contain zero Invariant Sections. If the Document - does not identify any Invariant Sections then there are none. - - The "Cover Texts" are certain short passages of text that are - listed, as Front-Cover Texts or Back-Cover Texts, in the notice - that says that the Document is released under this License. A - Front-Cover Text may be at most 5 words, and a Back-Cover Text may - be at most 25 words. - - A "Transparent" copy of the Document means a machine-readable copy, - represented in a format whose specification is available to the - general public, that is suitable for revising the document - straightforwardly with generic text editors or (for images - composed of pixels) generic paint programs or (for drawings) some - widely available drawing editor, and that is suitable for input to - text formatters or for automatic translation to a variety of - formats suitable for input to text formatters. A copy made in an - otherwise Transparent file format whose markup, or absence of - markup, has been arranged to thwart or discourage subsequent - modification by readers is not Transparent. An image format is - not Transparent if used for any substantial amount of text. A - copy that is not "Transparent" is called "Opaque". - - Examples of suitable formats for Transparent copies include plain - ASCII without markup, Texinfo input format, LaTeX input format, - SGML or XML using a publicly available DTD, and - standard-conforming simple HTML, PostScript or PDF designed for - human modification. Examples of transparent image formats include - PNG, XCF and JPG. Opaque formats include proprietary formats that - can be read and edited only by proprietary word processors, SGML or - XML for which the DTD and/or processing tools are not generally - available, and the machine-generated HTML, PostScript or PDF - produced by some word processors for output purposes only. - - The "Title Page" means, for a printed book, the title page itself, - plus such following pages as are needed to hold, legibly, the - material this License requires to appear in the title page. For - works in formats which do not have any title page as such, "Title - Page" means the text near the most prominent appearance of the - work's title, preceding the beginning of the body of the text. - - A section "Entitled XYZ" means a named subunit of the Document - whose title either is precisely XYZ or contains XYZ in parentheses - following text that translates XYZ in another language. (Here XYZ - stands for a specific section name mentioned below, such as - "Acknowledgements", "Dedications", "Endorsements", or "History".) - To "Preserve the Title" of such a section when you modify the - Document means that it remains a section "Entitled XYZ" according - to this definition. - - The Document may include Warranty Disclaimers next to the notice - which states that this License applies to the Document. These - Warranty Disclaimers are considered to be included by reference in - this License, but only as regards disclaiming warranties: any other - implication that these Warranty Disclaimers may have is void and - has no effect on the meaning of this License. - - 2. VERBATIM COPYING - - You may copy and distribute the Document in any medium, either - commercially or noncommercially, provided that this License, the - copyright notices, and the license notice saying this License - applies to the Document are reproduced in all copies, and that you - add no other conditions whatsoever to those of this License. You - may not use technical measures to obstruct or control the reading - or further copying of the copies you make or distribute. However, - you may accept compensation in exchange for copies. If you - distribute a large enough number of copies you must also follow - the conditions in section 3. - - You may also lend copies, under the same conditions stated above, - and you may publicly display copies. - - 3. COPYING IN QUANTITY - - If you publish printed copies (or copies in media that commonly - have printed covers) of the Document, numbering more than 100, and - the Document's license notice requires Cover Texts, you must - enclose the copies in covers that carry, clearly and legibly, all - these Cover Texts: Front-Cover Texts on the front cover, and - Back-Cover Texts on the back cover. Both covers must also clearly - and legibly identify you as the publisher of these copies. The - front cover must present the full title with all words of the - title equally prominent and visible. You may add other material - on the covers in addition. Copying with changes limited to the - covers, as long as they preserve the title of the Document and - satisfy these conditions, can be treated as verbatim copying in - other respects. - - If the required texts for either cover are too voluminous to fit - legibly, you should put the first ones listed (as many as fit - reasonably) on the actual cover, and continue the rest onto - adjacent pages. - - If you publish or distribute Opaque copies of the Document - numbering more than 100, you must either include a - machine-readable Transparent copy along with each Opaque copy, or - state in or with each Opaque copy a computer-network location from - which the general network-using public has access to download - using public-standard network protocols a complete Transparent - copy of the Document, free of added material. If you use the - latter option, you must take reasonably prudent steps, when you - begin distribution of Opaque copies in quantity, to ensure that - this Transparent copy will remain thus accessible at the stated - location until at least one year after the last time you - distribute an Opaque copy (directly or through your agents or - retailers) of that edition to the public. - - It is requested, but not required, that you contact the authors of - the Document well before redistributing any large number of - copies, to give them a chance to provide you with an updated - version of the Document. - - 4. MODIFICATIONS - - You may copy and distribute a Modified Version of the Document - under the conditions of sections 2 and 3 above, provided that you - release the Modified Version under precisely this License, with - the Modified Version filling the role of the Document, thus - licensing distribution and modification of the Modified Version to - whoever possesses a copy of it. In addition, you must do these - things in the Modified Version: - - A. Use in the Title Page (and on the covers, if any) a title - distinct from that of the Document, and from those of - previous versions (which should, if there were any, be listed - in the History section of the Document). You may use the - same title as a previous version if the original publisher of - that version gives permission. - - B. List on the Title Page, as authors, one or more persons or - entities responsible for authorship of the modifications in - the Modified Version, together with at least five of the - principal authors of the Document (all of its principal - authors, if it has fewer than five), unless they release you - from this requirement. - - C. State on the Title page the name of the publisher of the - Modified Version, as the publisher. - - D. Preserve all the copyright notices of the Document. - - E. Add an appropriate copyright notice for your modifications - adjacent to the other copyright notices. - - F. Include, immediately after the copyright notices, a license - notice giving the public permission to use the Modified - Version under the terms of this License, in the form shown in - the Addendum below. - - G. Preserve in that license notice the full lists of Invariant - Sections and required Cover Texts given in the Document's - license notice. - - H. Include an unaltered copy of this License. - - I. Preserve the section Entitled "History", Preserve its Title, - and add to it an item stating at least the title, year, new - authors, and publisher of the Modified Version as given on - the Title Page. If there is no section Entitled "History" in - the Document, create one stating the title, year, authors, - and publisher of the Document as given on its Title Page, - then add an item describing the Modified Version as stated in - the previous sentence. - - J. Preserve the network location, if any, given in the Document - for public access to a Transparent copy of the Document, and - likewise the network locations given in the Document for - previous versions it was based on. These may be placed in - the "History" section. You may omit a network location for a - work that was published at least four years before the - Document itself, or if the original publisher of the version - it refers to gives permission. - - K. For any section Entitled "Acknowledgements" or "Dedications", - Preserve the Title of the section, and preserve in the - section all the substance and tone of each of the contributor - acknowledgements and/or dedications given therein. - - L. Preserve all the Invariant Sections of the Document, - unaltered in their text and in their titles. Section numbers - or the equivalent are not considered part of the section - titles. - - M. Delete any section Entitled "Endorsements". Such a section - may not be included in the Modified Version. - - N. Do not retitle any existing section to be Entitled - "Endorsements" or to conflict in title with any Invariant - Section. - - O. Preserve any Warranty Disclaimers. - - If the Modified Version includes new front-matter sections or - appendices that qualify as Secondary Sections and contain no - material copied from the Document, you may at your option - designate some or all of these sections as invariant. To do this, - add their titles to the list of Invariant Sections in the Modified - Version's license notice. These titles must be distinct from any - other section titles. - - You may add a section Entitled "Endorsements", provided it contains - nothing but endorsements of your Modified Version by various - parties--for example, statements of peer review or that the text - has been approved by an organization as the authoritative - definition of a standard. - - You may add a passage of up to five words as a Front-Cover Text, - and a passage of up to 25 words as a Back-Cover Text, to the end - of the list of Cover Texts in the Modified Version. Only one - passage of Front-Cover Text and one of Back-Cover Text may be - added by (or through arrangements made by) any one entity. If the - Document already includes a cover text for the same cover, - previously added by you or by arrangement made by the same entity - you are acting on behalf of, you may not add another; but you may - replace the old one, on explicit permission from the previous - publisher that added the old one. - - The author(s) and publisher(s) of the Document do not by this - License give permission to use their names for publicity for or to - assert or imply endorsement of any Modified Version. - - 5. COMBINING DOCUMENTS - - You may combine the Document with other documents released under - this License, under the terms defined in section 4 above for - modified versions, provided that you include in the combination - all of the Invariant Sections of all of the original documents, - unmodified, and list them all as Invariant Sections of your - combined work in its license notice, and that you preserve all - their Warranty Disclaimers. - - The combined work need only contain one copy of this License, and - multiple identical Invariant Sections may be replaced with a single - copy. If there are multiple Invariant Sections with the same name - but different contents, make the title of each such section unique - by adding at the end of it, in parentheses, the name of the - original author or publisher of that section if known, or else a - unique number. Make the same adjustment to the section titles in - the list of Invariant Sections in the license notice of the - combined work. - - In the combination, you must combine any sections Entitled - "History" in the various original documents, forming one section - Entitled "History"; likewise combine any sections Entitled - "Acknowledgements", and any sections Entitled "Dedications". You - must delete all sections Entitled "Endorsements." - - 6. COLLECTIONS OF DOCUMENTS - - You may make a collection consisting of the Document and other - documents released under this License, and replace the individual - copies of this License in the various documents with a single copy - that is included in the collection, provided that you follow the - rules of this License for verbatim copying of each of the - documents in all other respects. - - You may extract a single document from such a collection, and - distribute it individually under this License, provided you insert - a copy of this License into the extracted document, and follow - this License in all other respects regarding verbatim copying of - that document. - - 7. AGGREGATION WITH INDEPENDENT WORKS - - A compilation of the Document or its derivatives with other - separate and independent documents or works, in or on a volume of - a storage or distribution medium, is called an "aggregate" if the - copyright resulting from the compilation is not used to limit the - legal rights of the compilation's users beyond what the individual - works permit. When the Document is included an aggregate, this - License does not apply to the other works in the aggregate which - are not themselves derivative works of the Document. - - If the Cover Text requirement of section 3 is applicable to these - copies of the Document, then if the Document is less than one half - of the entire aggregate, the Document's Cover Texts may be placed - on covers that bracket the Document within the aggregate, or the - electronic equivalent of covers if the Document is in electronic - form. Otherwise they must appear on printed covers that bracket - the whole aggregate. - - 8. TRANSLATION - - Translation is considered a kind of modification, so you may - distribute translations of the Document under the terms of section - 4. Replacing Invariant Sections with translations requires special - permission from their copyright holders, but you may include - translations of some or all Invariant Sections in addition to the - original versions of these Invariant Sections. You may include a - translation of this License, and all the license notices in the - Document, and any Warrany Disclaimers, provided that you also - include the original English version of this License and the - original versions of those notices and disclaimers. In case of a - disagreement between the translation and the original version of - this License or a notice or disclaimer, the original version will - prevail. - - If a section in the Document is Entitled "Acknowledgements", - "Dedications", or "History", the requirement (section 4) to - Preserve its Title (section 1) will typically require changing the - actual title. - - 9. TERMINATION - - You may not copy, modify, sublicense, or distribute the Document - except as expressly provided for under this License. Any other - attempt to copy, modify, sublicense or distribute the Document is - void, and will automatically terminate your rights under this - License. However, parties who have received copies, or rights, - from you under this License will not have their licenses - terminated so long as such parties remain in full compliance. - - 10. FUTURE REVISIONS OF THIS LICENSE - - The Free Software Foundation may publish new, revised versions of - the GNU Free Documentation License from time to time. Such new - versions will be similar in spirit to the present version, but may - differ in detail to address new problems or concerns. See - `http://www.gnu.org/copyleft/'. - - Each version of the License is given a distinguishing version - number. If the Document specifies that a particular numbered - version of this License "or any later version" applies to it, you - have the option of following the terms and conditions either of - that specified version or of any later version that has been - published (not as a draft) by the Free Software Foundation. If - the Document does not specify a version number of this License, - you may choose any version ever published (not as a draft) by the - Free Software Foundation. - - ADDENDUM: How to use this License for your documents - ==================================================== - - To use this License in a document you have written, include a copy of - the License in the document and put the following copyright and license - notices just after the title page: - - Copyright (C) YEAR YOUR NAME. - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.2 - or any later version published by the Free Software Foundation; - with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. - A copy of the license is included in the section entitled ``GNU - Free Documentation License''. - - If you have Invariant Sections, Front-Cover Texts and Back-Cover - Texts, replace the "with...Texts." line with this: - - with the Invariant Sections being LIST THEIR TITLES, with - the Front-Cover Texts being LIST, and with the Back-Cover Texts - being LIST. - - If you have Invariant Sections without Cover Texts, or some other - combination of the three, merge those two alternatives to suit the - situation. - - If your document contains nontrivial examples of program code, we - recommend releasing these examples in parallel under your choice of - free software license, such as the GNU General Public License, to - permit their use in free software. - -  - File: gnat_rm.info, Node: Index, Prev: GNU Free Documentation License, Up: Top - - Index - ***** - - * Menu: - - * -gnatR switch: Determining the Representations chosen by GNAT. - * Abort_Defer: Implementation Defined Pragmas. - * Abort_Signal: Implementation Defined Attributes. - * Access, unrestricted: Implementation Defined Attributes. - * Accuracy requirements: Implementation Advice. - * Accuracy, complex arithmetic: Implementation Advice. - * Ada 83 attributes: Implementation Defined Attributes. - * Ada 95 ISO/ANSI Standard: What This Reference Manual Contains. - * Ada.Characters.Handling: Implementation Advice. - * Ada.Characters.Latin_9 (a-chlat9.ads): Ada.Characters.Latin_9 (a-chlat9.ads). - * Ada.Characters.Wide_Latin_1 (a-cwila1.ads): Ada.Characters.Wide_Latin_1 (a-cwila1.ads). - * Ada.Characters.Wide_Latin_9 (a-cwila1.ads): Ada.Characters.Wide_Latin_9 (a-cwila9.ads). - * Ada.Command_Line.Remove (a-colire.ads): Ada.Command_Line.Remove (a-colire.ads). - * Ada.Direct_IO.C_Streams (a-diocst.ads): Ada.Direct_IO.C_Streams (a-diocst.ads). - * Ada.Exceptions.Is_Null_Occurrence (a-einuoc.ads): Ada.Exceptions.Is_Null_Occurrence (a-einuoc.ads). - * Ada.Sequential_IO.C_Streams (a-siocst.ads): Ada.Sequential_IO.C_Streams (a-siocst.ads). - * Ada.Streams.Stream_IO.C_Streams (a-ssicst.ads): Ada.Streams.Stream_IO.C_Streams (a-ssicst.ads). - * Ada.Strings.Unbounded.Text_IO (a-suteio.ads): Ada.Strings.Unbounded.Text_IO (a-suteio.ads). - * Ada.Strings.Wide_Unbounded.Wide_Text_IO (a-swuwti.ads): Ada.Strings.Wide_Unbounded.Wide_Text_IO (a-swuwti.ads). - * Ada.Text_IO.C_Streams (a-tiocst.ads): Ada.Text_IO.C_Streams (a-tiocst.ads). - * Ada.Wide_Text_IO.C_Streams (a-wtcstr.ads): Ada.Wide_Text_IO.C_Streams (a-wtcstr.ads). - * Ada_83: Implementation Defined Pragmas. - * Ada_95: Implementation Defined Pragmas. - * Address Clause: Address Clauses. - * Address clauses: Implementation Advice. - * Address image: System.Address_Image (s-addima.ads). - * Address of subprogram code: Implementation Defined Attributes. - * Address, as private type: Implementation Advice. - * Address, operations of: Implementation Advice. - * Address_Size: Implementation Defined Attributes. - * Alignment Clause: Alignment Clauses. - * Alignment clauses: Implementation Advice. - * Alignment, default: Alignment Clauses. - * Alignment, maximum: Implementation Defined Attributes. - * Alignments of components: Implementation Defined Pragmas. - * Alternative Character Sets: Implementation Advice. - * Annotate: Implementation Defined Pragmas. - * Argument passing mechanisms: Implementation Defined Pragmas. - * Arrays, extendable <1>: GNAT.Table (g-table.ads). - * Arrays, extendable: GNAT.Dynamic_Tables (g-dyntab.ads). - * Arrays, multidimensional: Implementation Advice. - * Asm_Input: Implementation Defined Attributes. - * Asm_Output: Implementation Defined Attributes. - * Assert: Implementation Defined Pragmas. - * Assert_Failure, exception: System.Assertions (s-assert.ads). - * Assertions: System.Assertions (s-assert.ads). - * AST_Entry: Implementation Defined Attributes. - * Ast_Entry: Implementation Defined Pragmas. - * Attribute: Address Clauses. - * AWK: GNAT.AWK (g-awk.ads). - * Biased representation: Biased Representation. - * Big endian: Implementation Defined Attributes. - * Bit: Implementation Defined Attributes. - * bit ordering: Bit_Order Clauses. - * Bit ordering: Implementation Advice. - * Bit_Order Clause: Bit_Order Clauses. - * Bit_Position: Implementation Defined Attributes. - * Boolean_Entry_Barriers: Implementation Defined Characteristics. - * Bounded errors: Implementation Advice. - * Bounded-length strings: Implementation Advice. - * Bubble sort <1>: GNAT.Bubble_Sort_G (g-busorg.ads). - * Bubble sort: GNAT.Bubble_Sort_A (g-busora.ads). - * byte ordering: Effect of Bit_Order on Byte Ordering. - * C streams, interfacing: Interfaces.C.Streams (i-cstrea.ads). - * C Streams, Interfacing with Direct_IO: Ada.Direct_IO.C_Streams (a-diocst.ads). - * C Streams, Interfacing with Sequential_IO: Ada.Sequential_IO.C_Streams (a-siocst.ads). - * C Streams, Interfacing with Stream_IO: Ada.Streams.Stream_IO.C_Streams (a-ssicst.ads). - * C Streams, Interfacing with Text_IO: Ada.Text_IO.C_Streams (a-tiocst.ads). - * C Streams, Interfacing with Wide_Text_IO: Ada.Wide_Text_IO.C_Streams (a-wtcstr.ads). - * C++ interfacing: Interfaces.CPP (i-cpp.ads). - * C, interfacing with: Implementation Advice. - * C_Pass_By_Copy: Implementation Defined Pragmas. - * Calendar <1>: GNAT.Calendar.Time_IO (g-catiio.ads). - * Calendar: GNAT.Calendar (g-calend.ads). - * Casing of External names: Implementation Defined Pragmas. - * Casing utilities: GNAT.Case_Util (g-casuti.ads). - * CGI (Common Gateway Interface): GNAT.CGI (g-cgi.ads). - * CGI (Common Gateway Interface) cookie support: GNAT.CGI.Cookie (g-cgicoo.ads). - * CGI (Common Gateway Interface) debugging: GNAT.CGI.Debug (g-cgideb.ads). - * Character handling (GNAT.Case_Util): GNAT.Case_Util (g-casuti.ads). - * Character Sets: Implementation Advice. - * Checks, suppression of: Implementation Advice. - * Child Units: Implementation Advice. - * COBOL support: Implementation Advice. - * COBOL, interfacing with: Implementation Advice. - * Code_Address: Implementation Defined Attributes. - * Command line: GNAT.Command_Line (g-comlin.ads). - * Command line, argument removal: Ada.Command_Line.Remove (a-colire.ads). - * Comment: Implementation Defined Pragmas. - * Common_Object: Implementation Defined Pragmas. - * Compatibility (between Ada 83 and Ada 95): Compatibility with Ada 83. - * Complex arithmetic accuracy: Implementation Advice. - * Complex elementary functions: Implementation Advice. - * Complex types: Implementation Advice. - * Complex_Representation: Implementation Defined Pragmas. - * Component Clause: Record Representation Clauses. - * Component_Alignment: Implementation Defined Pragmas. - * Component_Size: Implementation Defined Pragmas. - * Component_Size Clause: Component_Size Clauses. - * Component_Size clauses: Implementation Advice. - * Component_Size_4: Implementation Defined Pragmas. - * Convention, effect on representation: Effect of Convention on Representation. - * Convention_Identifier: Implementation Defined Pragmas. - * Conventions, synonyms: Implementation Defined Pragmas. - * Conventions, typographical: Conventions. - * Cookie support in CGI: GNAT.CGI.Cookie (g-cgicoo.ads). - * CPP_Class: Implementation Defined Pragmas. - * CPP_Constructor: Implementation Defined Pragmas. - * CPP_Virtual: Implementation Defined Pragmas. - * CPP_Vtable: Implementation Defined Pragmas. - * CRC32: GNAT.CRC32 (g-crc32.ads). - * Current exception: GNAT.Current_Exception (g-curexc.ads). - * Cyclic Redundancy Check: GNAT.CRC32 (g-crc32.ads). - * Debug: Implementation Defined Pragmas. - * Debug pools: GNAT.Debug_Pools (g-debpoo.ads). - * Debugging <1>: GNAT.Exception_Traces (g-exctra.ads). - * Debugging <2>: GNAT.Debug_Utilities (g-debuti.ads). - * Debugging: GNAT.Debug_Pools (g-debpoo.ads). - * debugging with Initialize_Scalars: Implementation Defined Pragmas. - * Dec Ada 83: Implementation Defined Pragmas. - * Dec Ada 83 casing compatibility: Implementation Defined Pragmas. - * Decimal radix support: Implementation Advice. - * Default_Bit_Order: Implementation Defined Attributes. - * Deferring aborts: Implementation Defined Pragmas. - * Directory operations: GNAT.Directory_Operations (g-dirope.ads). - * Discriminants, testing for: Implementation Defined Attributes. - * Duration'Small: Implementation Advice. - * Elab_Body: Implementation Defined Attributes. - * Elab_Spec: Implementation Defined Attributes. - * Elaborated: Implementation Defined Attributes. - * Elaboration control: Implementation Defined Pragmas. - * Elaboration_Checks: Implementation Defined Pragmas. - * Eliminate: Implementation Defined Pragmas. - * Elimination of unused subprograms: Implementation Defined Pragmas. - * Emax: Implementation Defined Attributes. - * Enclosing_Entity: Enclosing_Entity. - * Entry queuing policies: Implementation Advice. - * Enum_Rep: Implementation Defined Attributes. - * Enumeration representation clauses: Implementation Advice. - * Enumeration values: Implementation Advice. - * Epsilon: Implementation Defined Attributes. - * Error detection: Implementation Advice. - * Exception information: Implementation Advice. - * Exception retrieval: GNAT.Current_Exception (g-curexc.ads). - * Exception traces: GNAT.Exception_Traces (g-exctra.ads). - * Exception, obtaining most recent: GNAT.Most_Recent_Exception (g-moreex.ads). - * Exception_Information': Exception_Information. - * Exception_Message: Exception_Message. - * Exception_Name: Exception_Name. - * Export <1>: Address Clauses. - * Export: Implementation Advice. - * Export_Exception: Implementation Defined Pragmas. - * Export_Function: Implementation Defined Pragmas. - * Export_Object: Implementation Defined Pragmas. - * Export_Procedure: Implementation Defined Pragmas. - * Export_Valued_Procedure: Implementation Defined Pragmas. - * Extend_System: Implementation Defined Pragmas. - * External: Implementation Defined Pragmas. - * External Names, casing: Implementation Defined Pragmas. - * External_Name_Casing: Implementation Defined Pragmas. - * FDL, GNU Free Documentation License: GNU Free Documentation License. - * File: File. - * File locking: GNAT.Lock_Files (g-locfil.ads). - * Finalize_Storage_Only: Implementation Defined Pragmas. - * Fixed_Value: Implementation Defined Attributes. - * Float types: Implementation Advice. - * Float_Representation: Implementation Defined Pragmas. - * Floating-Point Processor: GNAT.Float_Control (g-flocon.ads). - * Foreign threads: GNAT.Threads (g-thread.ads). - * Fortran, interfacing with: Implementation Advice. - * Get_Immediate <1>: Get_Immediate. - * Get_Immediate: Implementation Advice. - * GNAT.AWK (g-awk.ads): GNAT.AWK (g-awk.ads). - * GNAT.Bubble_Sort_A (g-busora.ads): GNAT.Bubble_Sort_A (g-busora.ads). - * GNAT.Bubble_Sort_G (g-busorg.ads): GNAT.Bubble_Sort_G (g-busorg.ads). - * GNAT.Calendar (g-calend.ads): GNAT.Calendar (g-calend.ads). - * GNAT.Calendar.Time_IO (g-catiio.ads): GNAT.Calendar.Time_IO (g-catiio.ads). - * GNAT.Case_Util (g-casuti.ads): GNAT.Case_Util (g-casuti.ads). - * GNAT.CGI (g-cgi.ads): GNAT.CGI (g-cgi.ads). - * GNAT.CGI.Cookie (g-cgicoo.ads): GNAT.CGI.Cookie (g-cgicoo.ads). - * GNAT.CGI.Debug (g-cgideb.ads): GNAT.CGI.Debug (g-cgideb.ads). - * GNAT.Command_Line (g-comlin.ads): GNAT.Command_Line (g-comlin.ads). - * GNAT.CRC32 (g-crc32.ads): GNAT.CRC32 (g-crc32.ads). - * GNAT.Current_Exception (g-curexc.ads): GNAT.Current_Exception (g-curexc.ads). - * GNAT.Debug_Pools (g-debpoo.ads): GNAT.Debug_Pools (g-debpoo.ads). - * GNAT.Debug_Utilities (g-debuti.ads): GNAT.Debug_Utilities (g-debuti.ads). - * GNAT.Directory_Operations (g-dirope.ads): GNAT.Directory_Operations (g-dirope.ads). - * GNAT.Dynamic_Tables (g-dyntab.ads): GNAT.Dynamic_Tables (g-dyntab.ads). - * GNAT.Exception_Traces (g-exctra.ads): GNAT.Exception_Traces (g-exctra.ads). - * GNAT.Expect (g-expect.ads): GNAT.Expect (g-expect.ads). - * GNAT.Float_Control (g-flocon.ads): GNAT.Float_Control (g-flocon.ads). - * GNAT.Heap_Sort_A (g-hesora.ads): GNAT.Heap_Sort_A (g-hesora.ads). - * GNAT.Heap_Sort_G (g-hesorg.ads): GNAT.Heap_Sort_G (g-hesorg.ads). - * GNAT.HTable (g-htable.ads): GNAT.HTable (g-htable.ads). - * GNAT.IO (g-io.ads): GNAT.IO (g-io.ads). - * GNAT.IO_Aux (g-io_aux.ads): GNAT.IO_Aux (g-io_aux.ads). - * GNAT.Lock_Files (g-locfil.ads): GNAT.Lock_Files (g-locfil.ads). - * GNAT.MD5 (g-md5.ads): GNAT.MD5 (g-md5.ads). - * GNAT.Most_Recent_Exception (g-moreex.ads): GNAT.Most_Recent_Exception (g-moreex.ads). - * GNAT.OS_Lib (g-os_lib.ads): GNAT.OS_Lib (g-os_lib.ads). - * GNAT.Regexp (g-regexp.ads): GNAT.Regexp (g-regexp.ads). - * GNAT.Registry (g-regist.ads): GNAT.Registry (g-regist.ads). - * GNAT.Regpat (g-regpat.ads): GNAT.Regpat (g-regpat.ads). - * GNAT.Sockets (g-socket.ads): GNAT.Sockets (g-socket.ads). - * GNAT.Source_Info (g-souinf.ads): GNAT.Source_Info (g-souinf.ads). - * GNAT.Spell_Checker (g-speche.ads): GNAT.Spell_Checker (g-speche.ads). - * GNAT.Spitbol (g-spitbo.ads): GNAT.Spitbol (g-spitbo.ads). - * GNAT.Spitbol.Patterns (g-spipat.ads): GNAT.Spitbol.Patterns (g-spipat.ads). - * GNAT.Spitbol.Table_Boolean (g-sptabo.ads): GNAT.Spitbol.Table_Boolean (g-sptabo.ads). - * GNAT.Spitbol.Table_Integer (g-sptain.ads): GNAT.Spitbol.Table_Integer (g-sptain.ads). - * GNAT.Spitbol.Table_VString (g-sptavs.ads): GNAT.Spitbol.Table_VString (g-sptavs.ads). - * GNAT.Table (g-table.ads): GNAT.Table (g-table.ads). - * GNAT.Task_Lock (g-tasloc.ads): GNAT.Task_Lock (g-tasloc.ads). - * GNAT.Threads (g-thread.ads): GNAT.Threads (g-thread.ads). - * GNAT.Traceback (g-traceb.ads): GNAT.Traceback (g-traceb.ads). - * GNAT.Traceback.Symbolic (g-trasym.ads): GNAT.Traceback.Symbolic (g-trasym.ads). - * Has_Discriminants: Implementation Defined Attributes. - * Hash tables: GNAT.HTable (g-htable.ads). - * Heap usage, implicit: Implementation Advice. - * IBM Packed Format: Interfaces.Packed_Decimal (i-pacdec.ads). - * Ident: Implementation Defined Pragmas. - * Image, of an address: System.Address_Image (s-addima.ads). - * Img: Implementation Defined Attributes. - * Implementation-dependent features: About This Guide. - * Import: Address Clauses. - * Import_Exception: Implementation Defined Pragmas. - * Import_Function: Implementation Defined Pragmas. - * Import_Object: Implementation Defined Pragmas. - * Import_Procedure: Implementation Defined Pragmas. - * Import_Valued_Procedure: Implementation Defined Pragmas. - * Initialization, suppression of: Implementation Defined Pragmas. - * Initialize_Scalars: Implementation Defined Pragmas. - * Inline_Always: Implementation Defined Pragmas. - * Inline_Generic: Implementation Defined Pragmas. - * Input/Output facilities <1>: GNAT.IO_Aux (g-io_aux.ads). - * Input/Output facilities: GNAT.IO (g-io.ads). - * Integer maps: GNAT.Spitbol.Table_Integer (g-sptain.ads). - * Integer types: Implementation Advice. - * Integer_Value: Implementation Defined Attributes. - * Interface: Implementation Defined Pragmas. - * Interface_Name: Implementation Defined Pragmas. - * Interfaces: Implementation Advice. - * Interfaces.C.Extensions (i-cexten.ads): Interfaces.C.Extensions (i-cexten.ads). - * Interfaces.C.Streams (i-cstrea.ads): Interfaces.C.Streams (i-cstrea.ads). - * Interfaces.CPP (i-cpp.ads): Interfaces.CPP (i-cpp.ads). - * Interfaces.Os2lib (i-os2lib.ads): Interfaces.Os2lib (i-os2lib.ads). - * Interfaces.Os2lib.Errors (i-os2err.ads): Interfaces.Os2lib.Errors (i-os2err.ads). - * Interfaces.Os2lib.Synchronization (i-os2syn.ads): Interfaces.Os2lib.Synchronization (i-os2syn.ads). - * Interfaces.Os2lib.Threads (i-os2thr.ads): Interfaces.Os2lib.Threads (i-os2thr.ads). - * Interfaces.Packed_Decimal (i-pacdec.ads): Interfaces.Packed_Decimal (i-pacdec.ads). - * Interfaces.VxWorks (i-vxwork.ads): Interfaces.VxWorks (i-vxwork.ads). - * Interfaces.VxWorks.IO (i-vxwoio.ads): Interfaces.VxWorks.IO (i-vxwoio.ads). - * Interfacing to C++: Implementation Defined Pragmas. - * Interfacing to VxWorks: Interfaces.VxWorks (i-vxwork.ads). - * Interfacing to VxWorks' I/O: Interfaces.VxWorks.IO (i-vxwoio.ads). - * Interfacing with C++: Implementation Defined Pragmas. - * Interfacing, to C++: Interfaces.CPP (i-cpp.ads). - * Interfacing, to OS/2 <1>: Interfaces.Os2lib.Threads (i-os2thr.ads). - * Interfacing, to OS/2 <2>: Interfaces.Os2lib.Synchronization (i-os2syn.ads). - * Interfacing, to OS/2 <3>: Interfaces.Os2lib.Errors (i-os2err.ads). - * Interfacing, to OS/2: Interfaces.Os2lib (i-os2lib.ads). - * Interrupt priority, maximum: Implementation Defined Attributes. - * Interrupt support: Implementation Advice. - * Interrupts: Implementation Advice. - * Intrinsic operator: Intrinsic Operators. - * Intrinsic Subprograms: Intrinsic Subprograms. - * Large: Implementation Defined Attributes. - * Latin-1: Compatibility with Ada 83. - * Latin_1 constants for Wide_Character: Ada.Characters.Wide_Latin_1 (a-cwila1.ads). - * Latin_9 constants for Character: Ada.Characters.Latin_9 (a-chlat9.ads). - * Latin_9 constants for Wide_Character: Ada.Characters.Wide_Latin_9 (a-cwila9.ads). - * License: Implementation Defined Pragmas. - * License checking: Implementation Defined Pragmas. - * Line: Line. - * Link_With: Implementation Defined Pragmas. - * Linker_Alias: Implementation Defined Pragmas. - * Linker_Section: Implementation Defined Pragmas. - * Little endian: Implementation Defined Attributes. - * Locking: GNAT.Task_Lock (g-tasloc.ads). - * Locking Policies: Implementation Advice. - * Locking using files: GNAT.Lock_Files (g-locfil.ads). - * Long_Float: Implementation Defined Pragmas. - * Machine operations: Implementation Advice. - * Machine_Attribute: Implementation Defined Pragmas. - * Machine_Size: Implementation Defined Attributes. - * Main_Storage: Implementation Defined Pragmas. - * Mantissa: Implementation Defined Attributes. - * Maps <1>: GNAT.Spitbol.Table_VString (g-sptavs.ads). - * Maps: GNAT.Spitbol.Table_Integer (g-sptain.ads). - * Max_Entry_Queue_Depth: Implementation Defined Characteristics. - * Max_Interrupt_Priority: Implementation Defined Attributes. - * Max_Priority: Implementation Defined Attributes. - * Maximum_Alignment: Implementation Defined Attributes. - * Mechanism_Code: Implementation Defined Attributes. - * Memory corruption debugging: GNAT.Debug_Pools (g-debpoo.ads). - * Message Digest MD5: GNAT.MD5 (g-md5.ads). - * Multidimensional arrays: Implementation Advice. - * Named numbers, representation of: Implementation Defined Attributes. - * No_Calendar: Implementation Defined Characteristics. - * No_Dynamic_Interrupts: Implementation Defined Characteristics. - * No_Elaboration_Code: Implementation Defined Characteristics. - * No_Entry_Calls_In_Elaboration_Code: Implementation Defined Characteristics. - * No_Entry_Queue: Implementation Defined Characteristics. - * No_Enumeration_Maps: Implementation Defined Characteristics. - * No_Exception_Handlers: Implementation Defined Characteristics. - * No_Implementation_Attributes: Implementation Defined Characteristics. - * No_Implementation_Pragmas: Implementation Defined Characteristics. - * No_Implementation_Restrictions: Implementation Defined Characteristics. - * No_Implicit_Conditionals: Implementation Defined Characteristics. - * No_Implicit_Loops: Implementation Defined Characteristics. - * No_Local_Protected_Objects: Implementation Defined Characteristics. - * No_Protected_Type_Allocators: Implementation Defined Characteristics. - * No_Return: Implementation Defined Pragmas. - * No_Run_Time: Implementation Defined Pragmas. - * No_Secondary_Stack: Implementation Defined Characteristics. - * No_Select_Statements: Implementation Defined Characteristics. - * No_Standard_Storage_Pools: Implementation Defined Characteristics. - * No_Streams: Implementation Defined Characteristics. - * No_Task_Attributes: Implementation Defined Characteristics. - * No_Task_Termination: Implementation Defined Characteristics. - * No_Tasking: Implementation Defined Characteristics. - * No_Wide_Characters: Implementation Defined Characteristics. - * Normalize_Scalars: Implementation Defined Pragmas. - * Null_Occurrence, testing for: Ada.Exceptions.Is_Null_Occurrence (a-einuoc.ads). - * Null_Parameter: Implementation Defined Attributes. - * Numerics: Implementation Advice. - * Object_Size <1>: Value_Size and Object_Size Clauses. - * Object_Size: Implementation Defined Attributes. - * OpenVMS <1>: Implementation Defined Attributes. - * OpenVMS: Implementation Defined Pragmas. - * Operating System interface: GNAT.OS_Lib (g-os_lib.ads). - * Operations, on Address: Implementation Advice. - * ordering, of bits: Bit_Order Clauses. - * ordering, of bytes: Effect of Bit_Order on Byte Ordering. - * OS/2 Error codes: Interfaces.Os2lib.Errors (i-os2err.ads). - * OS/2 interfacing <1>: Interfaces.Os2lib.Errors (i-os2err.ads). - * OS/2 interfacing: Interfaces.Os2lib (i-os2lib.ads). - * OS/2 synchronization primitives: Interfaces.Os2lib.Synchronization (i-os2syn.ads). - * OS/2 thread interfacing: Interfaces.Os2lib.Threads (i-os2thr.ads). - * Package Interfaces: Implementation Advice. - * Package Interrupts: Implementation Advice. - * Package Task_Attributes: Implementation Advice. - * Packed Decimal: Interfaces.Packed_Decimal (i-pacdec.ads). - * Packed types: Implementation Advice. - * Parameters, passing mechanism: Implementation Defined Attributes. - * Parameters, when passed by reference: Implementation Defined Attributes. - * Parsing: GNAT.AWK (g-awk.ads). - * Partition communication subsystem: Implementation Advice. - * Partition intefacing functions: System.Partition_Interface (s-parint.ads). - * Passed_By_Reference: Implementation Defined Attributes. - * Passing by copy: Implementation Defined Pragmas. - * Passing by descriptor: Implementation Defined Pragmas. - * Passive: Implementation Defined Pragmas. - * Pattern matching <1>: GNAT.Spitbol.Patterns (g-spipat.ads). - * Pattern matching <2>: GNAT.Regpat (g-regpat.ads). - * Pattern matching: GNAT.Regexp (g-regexp.ads). - * PCS: Implementation Advice. - * Polling: Implementation Defined Pragmas. - * Portability: About This Guide. - * Pragma Pack (for arrays): Pragma Pack for Arrays. - * Pragma Pack (for records): Pragma Pack for Records. - * Pragma, representation: Representation Clauses and Pragmas. - * Pragmas: Implementation Advice. - * Pre-elaboration requirements: Implementation Advice. - * Preemptive abort: Implementation Advice. - * Priority, maximum: Implementation Defined Attributes. - * Propagate_Exceptions: Implementation Defined Pragmas. - * Protected procedure handlers: Implementation Advice. - * Psect_Object: Implementation Defined Pragmas. - * Pure: Implementation Defined Pragmas. - * Pure_Function: Implementation Defined Pragmas. - * Random number generation: Implementation Advice. - * Range_Length: Implementation Defined Attributes. - * Ravenscar: Implementation Defined Pragmas. - * Record Representation Clause: Record Representation Clauses. - * Record representation clauses: Implementation Advice. - * Regular expressions <1>: GNAT.Regpat (g-regpat.ads). - * Regular expressions: GNAT.Regexp (g-regexp.ads). - * Removing command line arguments: Ada.Command_Line.Remove (a-colire.ads). - * Representation Clause: Representation Clauses and Pragmas. - * Representation Clauses: Representation Clauses and Pragmas. - * Representation clauses: Implementation Advice. - * Representation clauses, enumeration: Implementation Advice. - * Representation clauses, records: Implementation Advice. - * Representation of enums: Implementation Defined Attributes. - * Representation of wide characters: System.Wch_Cnv (s-wchcnv.ads). - * Representation Pragma: Representation Clauses and Pragmas. - * Representation, determination of: Determining the Representations chosen by GNAT. - * Restricted_Run_Time: Implementation Defined Pragmas. - * Return values, passing mechanism: Implementation Defined Attributes. - * Rotate_Left: Rotate_Left. - * Rotate_Right: Rotate_Right. - * Safe_Emax: Implementation Defined Attributes. - * Safe_Large: Implementation Defined Attributes. - * Sets of strings: GNAT.Spitbol.Table_Boolean (g-sptabo.ads). - * Share_Generic: Implementation Defined Pragmas. - * Shift_Left: Shift_Left. - * Shift_Right: Shift_Right. - * Shift_Right_Arithmetic: Shift_Right_Arithmetic. - * Simple I/O: GNAT.IO (g-io.ads). - * Size Clause: Size Clauses. - * Size clauses: Implementation Advice. - * Size for biased representation: Biased Representation. - * Size of Address: Implementation Defined Attributes. - * Size, of objects: Value_Size and Object_Size Clauses. - * Size, setting for not-first subtype: Implementation Defined Attributes. - * Size, used for objects: Implementation Defined Attributes. - * Size, VADS compatibility <1>: Implementation Defined Attributes. - * Size, VADS compatibility: Implementation Defined Pragmas. - * Size, variant record objects: Size of Variant Record Objects. - * Small: Implementation Defined Attributes. - * Sockets: GNAT.Sockets (g-socket.ads). - * Sorting <1>: GNAT.Heap_Sort_G (g-hesorg.ads). - * Sorting <2>: GNAT.Heap_Sort_A (g-hesora.ads). - * Sorting <3>: GNAT.Bubble_Sort_G (g-busorg.ads). - * Sorting: GNAT.Bubble_Sort_A (g-busora.ads). - * Source Information: GNAT.Source_Info (g-souinf.ads). - * Source_File_Name: Implementation Defined Pragmas. - * Source_Location: Source_Location. - * Source_Reference: Implementation Defined Pragmas. - * Spawn capability: GNAT.OS_Lib (g-os_lib.ads). - * Spell checking: GNAT.Spell_Checker (g-speche.ads). - * SPITBOL interface: GNAT.Spitbol (g-spitbo.ads). - * SPITBOL pattern matching: GNAT.Spitbol.Patterns (g-spipat.ads). - * SPITBOL Tables <1>: GNAT.Spitbol.Table_VString (g-sptavs.ads). - * SPITBOL Tables <2>: GNAT.Spitbol.Table_Integer (g-sptain.ads). - * SPITBOL Tables: GNAT.Spitbol.Table_Boolean (g-sptabo.ads). - * Static_Priorities: Implementation Defined Characteristics. - * Static_Storage_Size: Implementation Defined Characteristics. - * Storage place attributes: Implementation Advice. - * Storage_Size Clause: Storage_Size Clauses. - * Storage_Unit <1>: Implementation Defined Attributes. - * Storage_Unit: Implementation Defined Pragmas. - * Stream files: Treating Text_IO Files as Streams. - * Stream oriented attributes: Implementation Advice. - * Stream_Convert: Implementation Defined Pragmas. - * String maps: GNAT.Spitbol.Table_VString (g-sptavs.ads). - * Style_Checks: Implementation Defined Pragmas. - * Subprogram address: Implementation Defined Attributes. - * Subtitle: Implementation Defined Pragmas. - * Suppress_All: Implementation Defined Pragmas. - * Suppress_Initialization: Implementation Defined Pragmas. - * Suppressing initialization: Implementation Defined Pragmas. - * Suppression of checks: Implementation Advice. - * Synchronization, OS/2: Interfaces.Os2lib.Synchronization (i-os2syn.ads). - * system, extending: Implementation Defined Pragmas. - * System.Address_Image (s-addima.ads): System.Address_Image (s-addima.ads). - * System.Assertions (s-assert.ads): System.Assertions (s-assert.ads). - * System.Partition_Interface (s-parint.ads): System.Partition_Interface (s-parint.ads). - * System.Task_Info (s-tasinf.ads): System.Task_Info (s-tasinf.ads). - * System.Wch_Cnv (s-wchcnv.ads): System.Wch_Cnv (s-wchcnv.ads). - * System.Wch_Con (s-wchcon.ads): System.Wch_Con (s-wchcon.ads). - * Table implementation <1>: GNAT.Table (g-table.ads). - * Table implementation: GNAT.Dynamic_Tables (g-dyntab.ads). - * Task locking: GNAT.Task_Lock (g-tasloc.ads). - * Task synchronization: GNAT.Task_Lock (g-tasloc.ads). - * Task_Attributes: Implementation Advice. - * Task_Info: Implementation Defined Pragmas. - * Task_Info pragma: System.Task_Info (s-tasinf.ads). - * Task_Name: Implementation Defined Pragmas. - * Task_Storage: Implementation Defined Pragmas. - * Tasking restrictions: Implementation Advice. - * Text_IO: GNAT.IO_Aux (g-io_aux.ads). - * Text_IO extensions: Text_IO Extensions. - * Text_IO for unbounded strings: Text_IO Facilities for Unbounded Strings. - * Text_IO, extensions for unbounded strings: Ada.Strings.Unbounded.Text_IO (a-suteio.ads). - * Text_IO, extensions for unbounded wide strings: Ada.Strings.Wide_Unbounded.Wide_Text_IO (a-swuwti.ads). - * Thread control, OS/2: Interfaces.Os2lib.Threads (i-os2thr.ads). - * Threads, foreign: GNAT.Threads (g-thread.ads). - * Tick: Implementation Defined Attributes. - * Time: GNAT.Calendar.Time_IO (g-catiio.ads). - * Time, monotonic: Implementation Advice. - * Time_Slice: Implementation Defined Pragmas. - * Title: Implementation Defined Pragmas. - * To_Address <1>: Address Clauses. - * To_Address: Implementation Defined Attributes. - * Trace back facilities <1>: GNAT.Traceback.Symbolic (g-trasym.ads). - * Trace back facilities: GNAT.Traceback (g-traceb.ads). - * Type_Class: Implementation Defined Attributes. - * Typographical conventions: Conventions. - * UET_Address: Implementation Defined Attributes. - * Unbounded_String, IO support: Ada.Strings.Unbounded.Text_IO (a-suteio.ads). - * Unbounded_String, Text_IO operations: Text_IO Facilities for Unbounded Strings. - * Unbounded_Wide_String, IO support: Ada.Strings.Wide_Unbounded.Wide_Text_IO (a-swuwti.ads). - * Unchecked conversion: Implementation Advice. - * Unchecked deallocation: Implementation Advice. - * Unchecked_Union: Implementation Defined Pragmas. - * Unimplemented_Unit: Implementation Defined Pragmas. - * Unions in C: Implementation Defined Pragmas. - * Universal_Literal_String: Implementation Defined Attributes. - * Unreferenced: Implementation Defined Pragmas. - * Unreserve_All_Interrupts: Implementation Defined Pragmas. - * Unrestricted_Access: Implementation Defined Attributes. - * Unsuppress: Implementation Defined Pragmas. - * Use_VADS_Size: Implementation Defined Pragmas. - * VADS_Size: Implementation Defined Attributes. - * Validity_Checks: Implementation Defined Pragmas. - * Value_Size <1>: Value_Size and Object_Size Clauses. - * Value_Size: Implementation Defined Attributes. - * Variant record objects, size: Size of Variant Record Objects. - * Volatile: Implementation Defined Pragmas. - * VxWorks, Get_Immediate: Interfaces.VxWorks.IO (i-vxwoio.ads). - * VxWorks, I/O interfacing: Interfaces.VxWorks.IO (i-vxwoio.ads). - * VxWorks, interfacing: Interfaces.VxWorks (i-vxwork.ads). - * Warnings: Implementation Defined Pragmas. - * Warnings, unreferenced: Implementation Defined Pragmas. - * Wchar_T_Size: Implementation Defined Attributes. - * Weak_External: Implementation Defined Pragmas. - * Wide Character, Representation: System.Wch_Cnv (s-wchcnv.ads). - * Wide String, Conversion: System.Wch_Cnv (s-wchcnv.ads). - * Windows Registry: GNAT.Registry (g-regist.ads). - * Word_Size: Implementation Defined Attributes. - * Zero address, passing: Implementation Defined Attributes. - * Zero Cost Exceptions: Implementation Defined Pragmas. - - -  - Tag Table: - Node: Top228 - Node: About This Guide5850 - Node: What This Reference Manual Contains6923 - Node: Conventions9219 - Node: Related Information10155 - Node: Implementation Defined Pragmas11183 - Node: Implementation Defined Attributes109042 - Node: Implementation Advice133113 - Node: Implementation Defined Characteristics177748 - Node: Intrinsic Subprograms220488 - Node: Intrinsic Operators221623 - Node: Enclosing_Entity222713 - Node: Exception_Information223251 - Node: Exception_Message223796 - Node: Exception_Name224313 - Node: File224788 - Node: Line225203 - Node: Rotate_Left225624 - Node: Rotate_Right226503 - Node: Shift_Left226794 - Node: Shift_Right227079 - Node: Shift_Right_Arithmetic227377 - Node: Source_Location227713 - Node: Representation Clauses and Pragmas228171 - Node: Alignment Clauses229369 - Node: Size Clauses232853 - Node: Storage_Size Clauses235409 - Node: Size of Variant Record Objects238109 - Node: Biased Representation241393 - Node: Value_Size and Object_Size Clauses242609 - Node: Component_Size Clauses249320 - Node: Bit_Order Clauses250456 - Node: Effect of Bit_Order on Byte Ordering254163 - Node: Pragma Pack for Arrays264112 - Node: Pragma Pack for Records266194 - Node: Record Representation Clauses268703 - Node: Enumeration Clauses270512 - Node: Address Clauses272099 - Node: Effect of Convention on Representation278801 - Node: Determining the Representations chosen by GNAT281532 - Node: Standard Library Routines286347 - Node: The Implementation of Standard I/O303855 - Node: Standard I/O Packages305956 - Node: FORM Strings306836 - Node: Direct_IO307375 - Node: Sequential_IO308256 - Node: Text_IO310194 - Node: Text_IO Stream Pointer Positioning312729 - Node: Text_IO Reading and Writing Non-Regular Files314266 - Node: Get_Immediate316138 - Node: Treating Text_IO Files as Streams316971 - Node: Text_IO Extensions317636 - Node: Text_IO Facilities for Unbounded Strings318475 - Node: Wide_Text_IO319881 - Node: Wide_Text_IO Stream Pointer Positioning324738 - Node: Wide_Text_IO Reading and Writing Non-Regular Files325764 - Node: Stream_IO326299 - Node: Shared Files326920 - Node: Open Modes329756 - Node: Operations on C Streams331067 - Node: Interfacing to C Streams338032 - Node: The GNAT Library341121 - Node: Ada.Characters.Latin_9 (a-chlat9.ads)345796 - Node: Ada.Characters.Wide_Latin_1 (a-cwila1.ads)346314 - Node: Ada.Characters.Wide_Latin_9 (a-cwila9.ads)346923 - Node: Ada.Command_Line.Remove (a-colire.ads)347535 - Node: Ada.Direct_IO.C_Streams (a-diocst.ads)348059 - Node: Ada.Exceptions.Is_Null_Occurrence (a-einuoc.ads)348582 - Node: Ada.Sequential_IO.C_Streams (a-siocst.ads)349022 - Node: Ada.Streams.Stream_IO.C_Streams (a-ssicst.ads)349569 - Node: Ada.Strings.Unbounded.Text_IO (a-suteio.ads)350116 - Node: Ada.Strings.Wide_Unbounded.Wide_Text_IO (a-swuwti.ads)350577 - Node: Ada.Text_IO.C_Streams (a-tiocst.ads)351058 - Node: Ada.Wide_Text_IO.C_Streams (a-wtcstr.ads)351582 - Node: GNAT.AWK (g-awk.ads)352087 - Node: GNAT.Bubble_Sort_A (g-busora.ads)352528 - Node: GNAT.Bubble_Sort_G (g-busorg.ads)352938 - Node: GNAT.Calendar (g-calend.ads)353424 - Node: GNAT.Calendar.Time_IO (g-catiio.ads)353889 - Node: GNAT.CRC32 (g-crc32.ads)354132 - Node: GNAT.Case_Util (g-casuti.ads)354763 - Node: GNAT.CGI (g-cgi.ads)355127 - Node: GNAT.CGI.Cookie (g-cgicoo.ads)355641 - Node: GNAT.CGI.Debug (g-cgideb.ads)356070 - Node: GNAT.Command_Line (g-comlin.ads)356395 - Node: GNAT.Current_Exception (g-curexc.ads)356830 - Node: GNAT.Debug_Pools (g-debpoo.ads)357387 - Node: GNAT.Debug_Utilities (g-debuti.ads)357806 - Node: GNAT.Directory_Operations (g-dirope.ads)358188 - Node: GNAT.Dynamic_Tables (g-dyntab.ads)358619 - Node: GNAT.Exception_Traces (g-exctra.ads)359252 - Node: GNAT.Expect (g-expect.ads)359591 - Node: GNAT.Float_Control (g-flocon.ads)360283 - Node: GNAT.Heap_Sort_A (g-hesora.ads)360804 - Node: GNAT.Heap_Sort_G (g-hesorg.ads)361329 - Node: GNAT.HTable (g-htable.ads)361803 - Node: GNAT.IO (g-io.ads)362205 - Node: GNAT.IO_Aux (g-io_aux.ads)362636 - Node: GNAT.Lock_Files (g-locfil.ads)362991 - Node: GNAT.MD5 (g-md5.ads)363324 - Node: GNAT.Most_Recent_Exception (g-moreex.ads)363610 - Node: GNAT.OS_Lib (g-os_lib.ads)364049 - Node: GNAT.Regexp (g-regexp.ads)364525 - Node: GNAT.Registry (g-regist.ads)365008 - Node: GNAT.Regpat (g-regpat.ads)365494 - Node: GNAT.Sockets (g-socket.ads)365916 - Node: GNAT.Source_Info (g-souinf.ads)366426 - Node: GNAT.Spell_Checker (g-speche.ads)366798 - Node: GNAT.Spitbol.Patterns (g-spipat.ads)367154 - Node: GNAT.Spitbol (g-spitbo.ads)367707 - Node: GNAT.Spitbol.Table_Boolean (g-sptabo.ads)368271 - Node: GNAT.Spitbol.Table_Integer (g-sptain.ads)368692 - Node: GNAT.Spitbol.Table_VString (g-sptavs.ads)369140 - Node: GNAT.Table (g-table.ads)369577 - Node: GNAT.Task_Lock (g-tasloc.ads)370192 - Node: GNAT.Threads (g-thread.ads)370604 - Node: GNAT.Traceback (g-traceb.ads)371197 - Node: GNAT.Traceback.Symbolic (g-trasym.ads)371543 - Node: Interfaces.C.Extensions (i-cexten.ads)371911 - Node: Interfaces.C.Streams (i-cstrea.ads)372328 - Node: Interfaces.CPP (i-cpp.ads)372659 - Node: Interfaces.Os2lib (i-os2lib.ads)373062 - Node: Interfaces.Os2lib.Errors (i-os2err.ads)373456 - Node: Interfaces.Os2lib.Synchronization (i-os2syn.ads)373796 - Node: Interfaces.Os2lib.Threads (i-os2thr.ads)374211 - Node: Interfaces.Packed_Decimal (i-pacdec.ads)374602 - Node: Interfaces.VxWorks (i-vxwork.ads)375016 - Node: Interfaces.VxWorks.IO (i-vxwoio.ads)375413 - Node: System.Address_Image (s-addima.ads)375829 - Node: System.Assertions (s-assert.ads)376214 - Node: System.Partition_Interface (s-parint.ads)376638 - Node: System.Task_Info (s-tasinf.ads)377049 - Node: System.Wch_Cnv (s-wchcnv.ads)377396 - Node: System.Wch_Con (s-wchcon.ads)377856 - Node: Interfacing to Other Languages378237 - Node: Interfacing to C378714 - Node: Interfacing to C++380546 - Node: Interfacing to COBOL381896 - Node: Interfacing to Fortran382179 - Node: Interfacing to non-GNAT Ada code382647 - Node: Machine Code Insertions383782 - Node: GNAT Implementation of Tasking390378 - Node: Mapping Ada Tasks onto the Underlying Kernel Threads390705 - Node: Ensuring Compliance with the Real-Time Annex392823 - Node: Code generation for array aggregates394943 - Node: Static constant aggregates with static bounds396527 - Node: Constant aggregates with an unconstrained nominal types398122 - Node: Aggregates with static bounds398842 - Node: Aggregates with non-static bounds399728 - Node: Aggregates in assignments statements400318 - Node: Specialized Needs Annexes401754 - Node: Compatibility Guide402847 - Node: Compatibility with Ada 83403363 - Node: Compatibility with Other Ada 95 Systems408299 - Node: Representation Clauses409821 - Node: Compatibility with DEC Ada 83414345 - Node: GNU Free Documentation License418206 - Node: Index440624 -  - End Tag Table --- 0 ---- diff -Nrc3pad gcc-3.3.2/gcc/ada/gnat_ug_unx.info gcc-3.3.3/gcc/ada/gnat_ug_unx.info *** gcc-3.3.2/gcc/ada/gnat_ug_unx.info Thu Oct 16 20:24:00 2003 --- gcc-3.3.3/gcc/ada/gnat_ug_unx.info Thu Jan 1 00:00:00 1970 *************** *** 1,17759 **** - This is ada/gnat_ug_unx.info, produced by makeinfo version 4.2 from - ada/gnat_ug_unx.texi. - - Copyright (C) 1995-2002, Free Software Foundation - - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.2 or - any later version published by the Free Software Foundation; with the - Invariant Sections being "GNU Free Documentation License", with the - Front-Cover Texts being "GNAT User's Guide for Unix Platforms", and - with no Back-Cover Texts. A copy of the license is included in the - section entitled "GNU Free Documentation License". -  - File: gnat_ug_unx.info, Node: Top, Next: About This Guide, Prev: (dir), Up: (dir) - - GNAT User's Guide - ***************** - - GNAT User's Guide for Unix Platforms - - GNAT, The GNU Ada 95 Compiler - - GNAT Version for GCC 3.3.2 - - Ada Core Technologies, Inc. - - Copyright (C) 1995-2002, Free Software Foundation - - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.2 or - any later version published by the Free Software Foundation; with the - Invariant Sections being "GNU Free Documentation License", with the - Front-Cover Texts being "GNAT User's Guide for Unix Platforms", and - with no Back-Cover Texts. A copy of the license is included in the - section entitled "GNU Free Documentation License". - * Menu: - - * About This Guide:: - * Getting Started with GNAT:: - * The GNAT Compilation Model:: - * Compiling Using gcc:: - * Binding Using gnatbind:: - * Linking Using gnatlink:: - * The GNAT Make Program gnatmake:: - * Renaming Files Using gnatchop:: - * Configuration Pragmas:: - * Handling Arbitrary File Naming Conventions Using gnatname:: - * GNAT Project Manager:: - * Elaboration Order Handling in GNAT:: - * The Cross-Referencing Tools gnatxref and gnatfind:: - * File Name Krunching Using gnatkr:: - * Preprocessing Using gnatprep:: - * The GNAT Library Browser gnatls:: - * GNAT and Libraries:: - * Using the GNU make Utility:: - * Finding Memory Problems with gnatmem:: - * Finding Memory Problems with GNAT Debug Pool:: - * Creating Sample Bodies Using gnatstub:: - * Reducing the Size of Ada Executables with gnatelim:: - * Other Utility Programs:: - * Running and Debugging Ada Programs:: - * Inline Assembler:: - * Performance Considerations:: - * GNU Free Documentation License:: - * Index:: - - --- The Detailed Node Listing --- - - About This Guide - - * What This Guide Contains:: - * What You Should Know before Reading This Guide:: - * Related Information:: - * Conventions:: - - - Getting Started with GNAT - - * Running GNAT:: - * Running a Simple Ada Program:: - * Running a Program with Multiple Units:: - * Using the gnatmake Utility:: - - The GNAT Compilation Model - - * Source Representation:: - * Foreign Language Representation:: - * File Naming Rules:: - * Using Other File Names:: - * Alternative File Naming Schemes:: - * Generating Object Files:: - * Source Dependencies:: - * The Ada Library Information Files:: - * Binding an Ada Program:: - * Mixed Language Programming:: - * Building Mixed Ada & C++ Programs:: - * Comparison between GNAT and C/C++ Compilation Models:: - * Comparison between GNAT and Conventional Ada Library Models:: - - Foreign Language Representation - - * Latin-1:: - * Other 8-Bit Codes:: - * Wide Character Encodings:: - - Compiling Ada Programs With gcc - - * Compiling Programs:: - * Switches for gcc:: - * Search Paths and the Run-Time Library (RTL):: - * Order of Compilation Issues:: - * Examples:: - - Switches for gcc - - * Output and Error Message Control:: - * Debugging and Assertion Control:: - * Run-Time Checks:: - * Stack Overflow Checking:: - * Run-Time Control:: - * Validity Checking:: - * Style Checking:: - * Using gcc for Syntax Checking:: - * Using gcc for Semantic Checking:: - * Compiling Ada 83 Programs:: - * Character Set Control:: - * File Naming Control:: - * Subprogram Inlining Control:: - * Auxiliary Output Control:: - * Debugging Control:: - * Units to Sources Mapping Files:: - - Binding Ada Programs With gnatbind - - * Running gnatbind:: - * Generating the Binder Program in C:: - * Consistency-Checking Modes:: - * Binder Error Message Control:: - * Elaboration Control:: - * Output Control:: - * Binding with Non-Ada Main Programs:: - * Binding Programs with No Main Subprogram:: - * Summary of Binder Switches:: - * Command-Line Access:: - * Search Paths for gnatbind:: - * Examples of gnatbind Usage:: - - Linking Using gnatlink - - * Running gnatlink:: - * Switches for gnatlink:: - * Setting Stack Size from gnatlink:: - * Setting Heap Size from gnatlink:: - - The GNAT Make Program gnatmake - - * Running gnatmake:: - * Switches for gnatmake:: - * Mode Switches for gnatmake:: - * Notes on the Command Line:: - * How gnatmake Works:: - * Examples of gnatmake Usage:: - - Renaming Files Using gnatchop - - * Handling Files with Multiple Units:: - * Operating gnatchop in Compilation Mode:: - * Command Line for gnatchop:: - * Switches for gnatchop:: - * Examples of gnatchop Usage:: - - Configuration Pragmas - - * Handling of Configuration Pragmas:: - * The Configuration Pragmas Files:: - - Handling Arbitrary File Naming Conventions Using gnatname - - * Arbitrary File Naming Conventions:: - * Running gnatname:: - * Switches for gnatname:: - * Examples of gnatname Usage:: - - GNAT Project Manager - - * Introduction:: - * Examples of Project Files:: - * Project File Syntax:: - * Objects and Sources in Project Files:: - * Importing Projects:: - * Project Extension:: - * External References in Project Files:: - * Packages in Project Files:: - * Variables from Imported Projects:: - * Naming Schemes:: - * Library Projects:: - * Switches Related to Project Files:: - * Tools Supporting Project Files:: - * An Extended Example:: - * Project File Complete Syntax:: - - Elaboration Order Handling in GNAT - - * Elaboration Code in Ada 95:: - * Checking the Elaboration Order in Ada 95:: - * Controlling the Elaboration Order in Ada 95:: - * Controlling Elaboration in GNAT - Internal Calls:: - * Controlling Elaboration in GNAT - External Calls:: - * Default Behavior in GNAT - Ensuring Safety:: - * Elaboration Issues for Library Tasks:: - * Mixing Elaboration Models:: - * What to Do If the Default Elaboration Behavior Fails:: - * Elaboration for Access-to-Subprogram Values:: - * Summary of Procedures for Elaboration Control:: - * Other Elaboration Order Considerations:: - - The Cross-Referencing Tools gnatxref and gnatfind - - * gnatxref Switches:: - * gnatfind Switches:: - * Project Files for gnatxref and gnatfind:: - * Regular Expressions in gnatfind and gnatxref:: - * Examples of gnatxref Usage:: - * Examples of gnatfind Usage:: - - File Name Krunching Using gnatkr - - * About gnatkr:: - * Using gnatkr:: - * Krunching Method:: - * Examples of gnatkr Usage:: - - Preprocessing Using gnatprep - - * Using gnatprep:: - * Switches for gnatprep:: - * Form of Definitions File:: - * Form of Input Text for gnatprep:: - - - The GNAT Library Browser gnatls - - * Running gnatls:: - * Switches for gnatls:: - * Examples of gnatls Usage:: - - - GNAT and Libraries - - * Creating an Ada Library:: - * Installing an Ada Library:: - * Using an Ada Library:: - * Creating an Ada Library to be Used in a Non-Ada Context:: - * Rebuilding the GNAT Run-Time Library:: - - Using the GNU make Utility - - * Using gnatmake in a Makefile:: - * Automatically Creating a List of Directories:: - * Generating the Command Line Switches:: - * Overcoming Command Line Length Limits:: - - Finding Memory Problems with gnatmem - - * Running gnatmem (GDB Mode):: - * Running gnatmem (GMEM Mode):: - * Switches for gnatmem:: - * Examples of gnatmem Usage:: - * GDB and GMEM Modes:: - * Implementation Note:: - - - Finding Memory Problems with GNAT Debug Pool - - Creating Sample Bodies Using gnatstub - - * Running gnatstub:: - * Switches for gnatstub:: - - Reducing the Size of Ada Executables with gnatelim - - * About gnatelim:: - * Eliminate Pragma:: - * Tree Files:: - * Preparing Tree and Bind Files for gnatelim:: - * Running gnatelim:: - * Correcting the List of Eliminate Pragmas:: - * Making Your Executables Smaller:: - * Summary of the gnatelim Usage Cycle:: - - Other Utility Programs - - * Using Other Utility Programs with GNAT:: - * The gnatpsta Utility Program:: - * The External Symbol Naming Scheme of GNAT:: - * Ada Mode for Glide:: - * Converting Ada Files to html with gnathtml:: - - - Running and Debugging Ada Programs - - * The GNAT Debugger GDB:: - * Running GDB:: - * Introduction to GDB Commands:: - * Using Ada Expressions:: - * Calling User-Defined Subprograms:: - * Using the Next Command in a Function:: - * Ada Exceptions:: - * Ada Tasks:: - * Debugging Generic Units:: - * GNAT Abnormal Termination or Failure to Terminate:: - * Naming Conventions for GNAT Source Files:: - * Getting Internal Debugging Information:: - * Stack Traceback:: - - Inline Assembler - - * Basic Assembler Syntax:: - * A Simple Example of Inline Assembler:: - * Output Variables in Inline Assembler:: - * Input Variables in Inline Assembler:: - * Inlining Inline Assembler Code:: - * Other Asm Functionality:: - * A Complete Example:: - - - - Performance Considerations - - * Controlling Run-Time Checks:: - * Optimization Levels:: - * Debugging Optimized Code:: - * Inlining of Subprograms:: - - * Index:: - -  - File: gnat_ug_unx.info, Node: About This Guide, Next: Getting Started with GNAT, Prev: Top, Up: Top - - About This Guide - **************** - - This guide describes the use of GNAT, a compiler and software - development toolset for the full Ada 95 programming language. It - describes the features of the compiler and tools, and details how to - use them to build Ada 95 applications. - - * Menu: - - * What This Guide Contains:: - * What You Should Know before Reading This Guide:: - * Related Information:: - * Conventions:: - -  - File: gnat_ug_unx.info, Node: What This Guide Contains, Next: What You Should Know before Reading This Guide, Up: About This Guide - - What This Guide Contains - ======================== - - This guide contains the following chapters: - * *Note Getting Started with GNAT::, describes how to get started - compiling and running Ada programs with the GNAT Ada programming - environment. - - * *Note The GNAT Compilation Model::, describes the compilation - model used by GNAT. - - * *Note Compiling Using gcc::, describes how to compile Ada programs - with `gcc', the Ada compiler. - - * *Note Binding Using gnatbind::, describes how to perform binding - of Ada programs with `gnatbind', the GNAT binding utility. - - * *Note Linking Using gnatlink::, describes `gnatlink', a program - that provides for linking using the GNAT run-time library to - construct a program. `gnatlink' can also incorporate foreign - language object units into the executable. - - * *Note The GNAT Make Program gnatmake::, describes `gnatmake', a - utility that automatically determines the set of sources needed by - an Ada compilation unit, and executes the necessary compilations - binding and link. - - * *Note Renaming Files Using gnatchop::, describes `gnatchop', a - utility that allows you to preprocess a file that contains Ada - source code, and split it into one or more new files, one for each - compilation unit. - - * *Note Configuration Pragmas::, describes the configuration pragmas - handled by GNAT. - - * *Note Handling Arbitrary File Naming Conventions Using gnatname::, - shows how to override the default GNAT file naming conventions, - either for an individual unit or globally. - - * *Note GNAT Project Manager::, describes how to use project files - to organize large projects. - - * *Note Elaboration Order Handling in GNAT::, describes how GNAT - helps you deal with elaboration order issues. - - * *Note The Cross-Referencing Tools gnatxref and gnatfind::, - discusses `gnatxref' and `gnatfind', two tools that provide an easy - way to navigate through sources. - - * *Note File Name Krunching Using gnatkr::, describes the `gnatkr' - file name krunching utility, used to handle shortened file names - on operating systems with a limit on the length of names. - - * *Note Preprocessing Using gnatprep::, describes `gnatprep', a - preprocessor utility that allows a single source file to be used to - generate multiple or parameterized source files, by means of macro - substitution. - - * *Note The GNAT Library Browser gnatls::, describes `gnatls', a - utility that displays information about compiled units, including - dependences on the corresponding sources files, and consistency of - compilations. - - * *Note GNAT and Libraries::, describes the process of creating and - using Libraries with GNAT. It also describes how to recompile the - GNAT run-time library. - - * *Note Using the GNU make Utility::, describes some techniques for - using the GNAT toolset in Makefiles. - - * *Note Finding Memory Problems with gnatmem::, describes `gnatmem', - a utility that monitors dynamic allocation and deallocation - activity in a program, and displays information about incorrect - deallocations and sources of possible memory leaks. - - * *Note Finding Memory Problems with GNAT Debug Pool::, describes - how to use the GNAT-specific Debug Pool in order to detect as - early as possible the use of incorrect memory references. - - * *Note Creating Sample Bodies Using gnatstub::, discusses - `gnatstub', a utility that generates empty but compilable bodies - for library units. - - * *Note Reducing the Size of Ada Executables with gnatelim::, - describes `gnatelim', a tool which detects unused subprograms and - helps the compiler to create a smaller executable for the program. - - * *Note Other Utility Programs::, discusses several other GNAT - utilities, including `gnatpsta'. - - * *Note Running and Debugging Ada Programs::, describes how to run - and debug Ada programs. - - * *Note Inline Assembler::, shows how to use the inline assembly - facility in an Ada program. - - * *Note Performance Considerations::, reviews the trade offs between - using defaults or options in program development. - -  - File: gnat_ug_unx.info, Node: What You Should Know before Reading This Guide, Next: Related Information, Prev: What This Guide Contains, Up: About This Guide - - What You Should Know before Reading This Guide - ============================================== - - This user's guide assumes that you are familiar with Ada 95 language, as - described in the International Standard ANSI/ISO/IEC-8652:1995, Jan - 1995. - -  - File: gnat_ug_unx.info, Node: Related Information, Next: Conventions, Prev: What You Should Know before Reading This Guide, Up: About This Guide - - Related Information - =================== - - For further information about related tools, refer to the following - documents: - - * `GNAT Reference Manual', which contains all reference material for - the GNAT implementation of Ada 95. - - * `Ada 95 Language Reference Manual', which contains all reference - material for the Ada 95 programming language. - - * `Debugging with GDB' contains all details on the use of the GNU - source-level debugger. - - * `GNU Emacs Manual' contains full information on the extensible - editor and programming environment Emacs. - - -  - File: gnat_ug_unx.info, Node: Conventions, Prev: Related Information, Up: About This Guide - - Conventions - =========== - - Following are examples of the typographical and graphic conventions used - in this guide: - - * `Functions', `utility program names', `standard names', and - `classes'. - - * `Option flags' - - * `File Names', `button names', and `field names'. - - * VARIABLES. - - * _Emphasis_. - - * [optional information or parameters] - - * Examples are described by text - and then shown this way. - - Commands that are entered by the user are preceded in this manual by the - characters "`$ '" (dollar sign followed by space). If your system uses - this sequence as a prompt, then the commands will appear exactly as you - see them in the manual. If your system uses some other prompt, then the - command will appear with the `$' replaced by whatever prompt character - you are using. - -  - File: gnat_ug_unx.info, Node: Getting Started with GNAT, Next: The GNAT Compilation Model, Prev: About This Guide, Up: Top - - Getting Started with GNAT - ************************* - - This chapter describes some simple ways of using GNAT to build - executable Ada programs. - - * Menu: - - * Running GNAT:: - * Running a Simple Ada Program:: - - * Running a Program with Multiple Units:: - - * Using the gnatmake Utility:: - * Introduction to Glide and GVD:: - -  - File: gnat_ug_unx.info, Node: Running GNAT, Next: Running a Simple Ada Program, Up: Getting Started with GNAT - - Running GNAT - ============ - - Three steps are needed to create an executable file from an Ada source - file: - - 1. The source file(s) must be compiled. - - 2. The file(s) must be bound using the GNAT binder. - - 3. All appropriate object files must be linked to produce an - executable. - - All three steps are most commonly handled by using the `gnatmake' - utility program that, given the name of the main program, automatically - performs the necessary compilation, binding and linking steps. - -  - File: gnat_ug_unx.info, Node: Running a Simple Ada Program, Next: Running a Program with Multiple Units, Prev: Running GNAT, Up: Getting Started with GNAT - - Running a Simple Ada Program - ============================ - - Any text editor may be used to prepare an Ada program. If `Glide' is - used, the optional Ada mode may be helpful in laying out the program. - The program text is a normal text file. We will suppose in our initial - example that you have used your editor to prepare the following - standard format text file: - - with Ada.Text_IO; use Ada.Text_IO; - procedure Hello is - begin - Put_Line ("Hello WORLD!"); - end Hello; - - This file should be named `hello.adb'. With the normal default file - naming conventions, GNAT requires that each file contain a single - compilation unit whose file name is the unit name, with periods - replaced by hyphens; the extension is `ads' for a spec and `adb' for a - body. You can override this default file naming convention by use of - the special pragma `Source_File_Name' (*note Using Other File Names::). - Alternatively, if you want to rename your files according to this - default convention, which is probably more convenient if you will be - using GNAT for all your compilations, then the `gnatchop' utility can - be used to generate correctly-named source files (*note Renaming Files - Using gnatchop::). - - You can compile the program using the following command (`$' is used - as the command prompt in the examples in this document): - - $ gcc -c hello.adb - - `gcc' is the command used to run the compiler. This compiler is capable - of compiling programs in several languages, including Ada 95 and C. It - assumes that you have given it an Ada program if the file extension is - either `.ads' or `.adb', and it will then call the GNAT compiler to - compile the specified file. - - The `-c' switch is required. It tells `gcc' to only do a - compilation. (For C programs, `gcc' can also do linking, but this - capability is not used directly for Ada programs, so the `-c' switch - must always be present.) - - This compile command generates a file `hello.o', which is the object - file corresponding to your Ada program. It also generates an "Ada - Library Information" file `hello.ali', which contains additional - information used to check that an Ada program is consistent. To build - an executable file, use `gnatbind' to bind the program and `gnatlink' - to link it. The argument to both `gnatbind' and `gnatlink' is the name - of the `ali' file, but the default extension of `.ali' can be omitted. - This means that in the most common case, the argument is simply the - name of the main program: - - $ gnatbind hello - $ gnatlink hello - - A simpler method of carrying out these steps is to use `gnatmake', a - master program that invokes all the required compilation, binding and - linking tools in the correct order. In particular, `gnatmake' - automatically recompiles any sources that have been modified since they - were last compiled, or sources that depend on such modified sources, so - that "version skew" is avoided. - - $ gnatmake hello.adb - - The result is an executable program called `hello', which can be run by - entering: - - $ hello - - assuming that the current directory is on the search path for - executable programs. - - and, if all has gone well, you will see - - Hello WORLD! - - appear in response to this command. - -  - File: gnat_ug_unx.info, Node: Running a Program with Multiple Units, Next: Using the gnatmake Utility, Prev: Running a Simple Ada Program, Up: Getting Started with GNAT - - Running a Program with Multiple Units - ===================================== - - Consider a slightly more complicated example that has three files: a - main program, and the spec and body of a package: - - package Greetings is - procedure Hello; - procedure Goodbye; - end Greetings; - - with Ada.Text_IO; use Ada.Text_IO; - package body Greetings is - procedure Hello is - begin - Put_Line ("Hello WORLD!"); - end Hello; - - procedure Goodbye is - begin - Put_Line ("Goodbye WORLD!"); - end Goodbye; - end Greetings; - - with Greetings; - procedure Gmain is - begin - Greetings.Hello; - Greetings.Goodbye; - end Gmain; - - Following the one-unit-per-file rule, place this program in the - following three separate files: - - `greetings.ads' - spec of package `Greetings' - - `greetings.adb' - body of package `Greetings' - - `gmain.adb' - body of main program - - To build an executable version of this program, we could use four - separate steps to compile, bind, and link the program, as follows: - - $ gcc -c gmain.adb - $ gcc -c greetings.adb - $ gnatbind gmain - $ gnatlink gmain - - Note that there is no required order of compilation when using GNAT. - In particular it is perfectly fine to compile the main program first. - Also, it is not necessary to compile package specs in the case where - there is an accompanying body; you only need to compile the body. If - you want to submit these files to the compiler for semantic checking - and not code generation, then use the `-gnatc' switch: - - $ gcc -c greetings.ads -gnatc - - Although the compilation can be done in separate steps as in the above - example, in practice it is almost always more convenient to use the - `gnatmake' tool. All you need to know in this case is the name of the - main program's source file. The effect of the above four commands can - be achieved with a single one: - - $ gnatmake gmain.adb - - In the next section we discuss the advantages of using `gnatmake' in - more detail. - -  - File: gnat_ug_unx.info, Node: Using the gnatmake Utility, Next: Introduction to Glide and GVD, Prev: Running a Program with Multiple Units, Up: Getting Started with GNAT - - Using the `gnatmake' Utility - ============================ - - If you work on a program by compiling single components at a time using - `gcc', you typically keep track of the units you modify. In order to - build a consistent system, you compile not only these units, but also - any units that depend on the units you have modified. For example, in - the preceding case, if you edit `gmain.adb', you only need to recompile - that file. But if you edit `greetings.ads', you must recompile both - `greetings.adb' and `gmain.adb', because both files contain units that - depend on `greetings.ads'. - - `gnatbind' will warn you if you forget one of these compilation - steps, so that it is impossible to generate an inconsistent program as a - result of forgetting to do a compilation. Nevertheless it is tedious and - error-prone to keep track of dependencies among units. One approach to - handle the dependency-bookkeeping is to use a makefile. However, - makefiles present maintenance problems of their own: if the - dependencies change as you change the program, you must make sure that - the makefile is kept up-to-date manually, which is also an error-prone - process. - - The `gnatmake' utility takes care of these details automatically. - Invoke it using either one of the following forms: - - $ gnatmake gmain.adb - $ gnatmake gmain - - The argument is the name of the file containing the main program; you - may omit the extension. `gnatmake' examines the environment, - automatically recompiles any files that need recompiling, and binds and - links the resulting set of object files, generating the executable - file, `gmain'. In a large program, it can be extremely helpful to use - `gnatmake', because working out by hand what needs to be recompiled can - be difficult. - - Note that `gnatmake' takes into account all the Ada 95 rules that - establish dependencies among units. These include dependencies that - result from inlining subprogram bodies, and from generic instantiation. - Unlike some other Ada make tools, `gnatmake' does not rely on the - dependencies that were found by the compiler on a previous compilation, - which may possibly be wrong when sources change. `gnatmake' determines - the exact set of dependencies from scratch each time it is run. - -  - File: gnat_ug_unx.info, Node: Introduction to Glide and GVD, Prev: Using the gnatmake Utility, Up: Getting Started with GNAT - - Introduction to Glide and GVD - ============================= - - Although it is possible to develop programs using only the command line - interface (`gnatmake', etc.) a graphical Interactive Development - Environment can make it easier for you to compose, navigate, and debug - programs. This section describes the main features of Glide, the GNAT - graphical IDE, and also shows how to use the basic commands in GVD, the - GNU Visual Debugger. Additional information may be found in the - on-line help for these tools. - - * Menu: - - * Building a New Program with Glide:: - * Simple Debugging with GVD:: - * Other Glide Features:: - -  - File: gnat_ug_unx.info, Node: Building a New Program with Glide, Next: Simple Debugging with GVD, Up: Introduction to Glide and GVD - - Building a New Program with Glide - --------------------------------- - - The simplest way to invoke Glide is to enter `glide' at the command - prompt. It will generally be useful to issue this as a background - command, thus allowing you to continue using your command window for - other purposes while Glide is running: - - $ glide& - - Glide will start up with an initial screen displaying the top-level - menu items as well as some other information. The menu selections are - as follows - * `Buffers' - - * `Files' - - * `Tools' - - * `Edit' - - * `Search' - - * `Mule' - - * `Glide' - - * `Help' - - For this introductory example, you will need to create a new Ada source - file. First, select the `Files' menu. This will pop open a menu with - around a dozen or so items. To create a file, select the `Open - file...' choice. Depending on the platform, you may see a pop-up - window where you can browse to an appropriate directory and then enter - the file name, or else simply see a line at the bottom of the Glide - window where you can likewise enter the file name. Note that in Glide, - when you attempt to open a non-existent file, the effect is to create a - file with that name. For this example enter `hello.adb' as the name of - the file. - - A new buffer will now appear, occupying the entire Glide window, - with the file name at the top. The menu selections are slightly - different from the ones you saw on the opening screen; there is an - `Entities' item, and in place of `Glide' there is now an `Ada' item. - Glide uses the file extension to identify the source language, so `adb' - indicates an Ada source file. - - You will enter some of the source program lines explicitly, and use - the syntax-oriented template mechanism to enter other lines. First, - type the following text: - with Ada.Text_IO; use Ada.Text_IO; - procedure Hello is - begin - - Observe that Glide uses different colors to distinguish reserved words - from identifiers. Also, after the `procedure Hello is' line, the - cursor is automatically indented in anticipation of declarations. When - you enter `begin', Glide recognizes that there are no declarations and - thus places `begin' flush left. But after the `begin' line the cursor - is again indented, where the statement(s) will be placed. - - The main part of the program will be a `for' loop. Instead of - entering the text explicitly, however, use a statement template. - Select the `Ada' item on the top menu bar, move the mouse to the - `Statements' item, and you will see a large selection of alternatives. - Choose `for loop'. You will be prompted (at the bottom of the buffer) - for a loop name; simply press the key since a loop name is not - needed. You should see the beginning of a `for' loop appear in the - source program window. You will now be prompted for the name of the - loop variable; enter a line with the identifier `ind' (lower case). - Note that, by default, Glide capitalizes the name (you can override - such behavior if you wish, although this is outside the scope of this - introduction). Next, Glide prompts you for the loop range; enter a - line containing `1..5' and you will see this also appear in the source - program, together with the remaining elements of the `for' loop syntax. - - Next enter the statement (with an intentional error, a missing - semicolon) that will form the body of the loop: - Put_Line("Hello, World" & Integer'Image(I)) - - Finally, type `end Hello;' as the last line in the program. Now save - the file: choose the `File' menu item, and then the `Save buffer' - selection. You will see a message at the bottom of the buffer - confirming that the file has been saved. - - You are now ready to attempt to build the program. Select the `Ada' - item from the top menu bar. Although we could choose simply to compile - the file, we will instead attempt to do a build (which invokes - `gnatmake') since, if the compile is successful, we want to build an - executable. Thus select `Ada build'. This will fail because of the - compilation error, and you will notice that the Glide window has been - split: the top window contains the source file, and the bottom window - contains the output from the GNAT tools. Glide allows you to navigate - from a compilation error to the source file position corresponding to - the error: click the middle mouse button (or simultaneously press the - left and right buttons, on a two-button mouse) on the diagnostic line - in the tool window. The focus will shift to the source window, and the - cursor will be positioned on the character at which the error was - detected. - - Correct the error: type in a semicolon to terminate the statement. - Although you can again save the file explicitly, you can also simply - invoke `Ada' => `Build' and you will be prompted to save the file. - This time the build will succeed; the tool output window shows you the - options that are supplied by default. The GNAT tools' output (e.g., - object and ALI files, executable) will go in the directory from which - Glide was launched. - - To execute the program, choose `Ada' and then `Run'. You should see - the program's output displayed in the bottom window: - - Hello, world 1 - Hello, world 2 - Hello, world 3 - Hello, world 4 - Hello, world 5 - -  - File: gnat_ug_unx.info, Node: Simple Debugging with GVD, Next: Other Glide Features, Prev: Building a New Program with Glide, Up: Introduction to Glide and GVD - - Simple Debugging with GVD - ------------------------- - - This section describes how to set breakpoints, examine/modify - variables, and step through execution. - - In order to enable debugging, you need to pass the `-g' switch to - both the compiler and to `gnatlink'. If you are using the command - line, passing `-g' to `gnatmake' will have this effect. You can then - launch GVD, e.g. on the `hello' program, by issuing the command: - - $ gvd hello - - If you are using Glide, then `-g' is passed to the relevant tools by - default when you do a build. Start the debugger by selecting the `Ada' - menu item, and then `Debug'. - - GVD comes up in a multi-part window. One pane shows the names of - files comprising your executable; another pane shows the source code of - the current unit (initially your main subprogram), another pane shows - the debugger output and user interactions, and the fourth pane (the - data canvas at the top of the window) displays data objects that you - have selected. - - To the left of the source file pane, you will notice green dots - adjacent to some lines. These are lines for which object code exists - and where breakpoints can thus be set. You set/reset a breakpoint by - clicking the green dot. When a breakpoint is set, the dot is replaced - by an `X' in a red circle. Clicking the circle toggles the breakpoint - off, and the red circle is replaced by the green dot. - - For this example, set a breakpoint at the statement where `Put_Line' - is invoked. - - Start program execution by selecting the `Run' button on the top - menu bar. (The `Start' button will also start your program, but it - will cause program execution to break at the entry to your main - subprogram.) Evidence of reaching the breakpoint will appear: the - source file line will be highlighted, and the debugger interactions - pane will display a relevant message. - - You can examine the values of variables in several ways. Move the - mouse over an occurrence of `Ind' in the `for' loop, and you will see - the value (now `1') displayed. Alternatively, right-click on `Ind' and - select `Display Ind'; a box showing the variable's name and value will - appear in the data canvas. - - Although a loop index is a constant with respect to Ada semantics, - you can change its value in the debugger. Right-click in the box for - `Ind', and select the `Set Value of Ind' item. Enter `2' as the new - value, and press `OK'. The box for `Ind' shows the update. - - Press the `Step' button on the top menu bar; this will step through - one line of program text (the invocation of `Put_Line'), and you can - observe the effect of having modified `Ind' since the value displayed - is `2'. - - Remove the breakpoint, and resume execution by selecting the `Cont' - button. You will see the remaining output lines displayed in the - debugger interaction window, along with a message confirming normal - program termination. - -  - File: gnat_ug_unx.info, Node: Other Glide Features, Prev: Simple Debugging with GVD, Up: Introduction to Glide and GVD - - Other Glide Features - -------------------- - - You may have observed that some of the menu selections contain - abbreviations; e.g., `(C-x C-f)' for `Open file...' in the `Files' - menu. These are _shortcut keys_ that you can use instead of selecting - menu items. The stands for ; thus `(C-x C-f)' means - followed by , and this sequence can be used instead of - selecting `Files' and then `Open file...'. - - To abort a Glide command, type . - - If you want Glide to start with an existing source file, you can - either launch Glide as above and then open the file via `Files' => - `Open file...', or else simply pass the name of the source file on the - command line: - - $ glide hello.adb& - - While you are using Glide, a number of _buffers_ exist. You create - some explicitly; e.g., when you open/create a file. Others arise as an - effect of the commands that you issue; e.g., the buffer containing the - output of the tools invoked during a build. If a buffer is hidden, you - can bring it into a visible window by first opening the `Buffers' menu - and then selecting the desired entry. - - If a buffer occupies only part of the Glide screen and you want to - expand it to fill the entire screen, then click in the buffer and then - select `Files' => `One Window'. - - If a window is occupied by one buffer and you want to split the - window to bring up a second buffer, perform the following steps: - * Select `Files' => `Split Window'; this will produce two windows - each of which holds the original buffer (these are not copies, but - rather different views of the same buffer contents) - - * With the focus in one of the windows, select the desired buffer - from the `Buffers' menu - - To exit from Glide, choose `Files' => `Exit'. - -  - File: gnat_ug_unx.info, Node: The GNAT Compilation Model, Next: Compiling Using gcc, Prev: Getting Started with GNAT, Up: Top - - The GNAT Compilation Model - ************************** - - * Menu: - - * Source Representation:: - * Foreign Language Representation:: - * File Naming Rules:: - * Using Other File Names:: - * Alternative File Naming Schemes:: - * Generating Object Files:: - * Source Dependencies:: - * The Ada Library Information Files:: - * Binding an Ada Program:: - * Mixed Language Programming:: - * Building Mixed Ada & C++ Programs:: - * Comparison between GNAT and C/C++ Compilation Models:: - * Comparison between GNAT and Conventional Ada Library Models:: - - This chapter describes the compilation model used by GNAT. Although - similar to that used by other languages, such as C and C++, this model - is substantially different from the traditional Ada compilation models, - which are based on a library. The model is initially described without - reference to the library-based model. If you have not previously used an - Ada compiler, you need only read the first part of this chapter. The - last section describes and discusses the differences between the GNAT - model and the traditional Ada compiler models. If you have used other - Ada compilers, this section will help you to understand those - differences, and the advantages of the GNAT model. - -  - File: gnat_ug_unx.info, Node: Source Representation, Next: Foreign Language Representation, Up: The GNAT Compilation Model - - Source Representation - ===================== - - Ada source programs are represented in standard text files, using - Latin-1 coding. Latin-1 is an 8-bit code that includes the familiar - 7-bit ASCII set, plus additional characters used for representing - foreign languages (*note Foreign Language Representation:: for support - of non-USA character sets). The format effector characters are - represented using their standard ASCII encodings, as follows: - - `VT' - Vertical tab, `16#0B#' - - `HT' - Horizontal tab, `16#09#' - - `CR' - Carriage return, `16#0D#' - - `LF' - Line feed, `16#0A#' - - `FF' - Form feed, `16#0C#' - - Source files are in standard text file format. In addition, GNAT will - recognize a wide variety of stream formats, in which the end of physical - physical lines is marked by any of the following sequences: `LF', `CR', - `CR-LF', or `LF-CR'. This is useful in accommodating files that are - imported from other operating systems. - - The end of a source file is normally represented by the physical end - of file. However, the control character `16#1A#' (`SUB') is also - recognized as signalling the end of the source file. Again, this is - provided for compatibility with other operating systems where this code - is used to represent the end of file. - - Each file contains a single Ada compilation unit, including any - pragmas associated with the unit. For example, this means you must - place a package declaration (a package "spec") and the corresponding - body in separate files. An Ada "compilation" (which is a sequence of - compilation units) is represented using a sequence of files. Similarly, - you will place each subunit or child unit in a separate file. - -  - File: gnat_ug_unx.info, Node: Foreign Language Representation, Next: File Naming Rules, Prev: Source Representation, Up: The GNAT Compilation Model - - Foreign Language Representation - =============================== - - GNAT supports the standard character sets defined in Ada 95 as well as - several other non-standard character sets for use in localized versions - of the compiler (*note Character Set Control::). - - * Menu: - - * Latin-1:: - * Other 8-Bit Codes:: - * Wide Character Encodings:: - -  - File: gnat_ug_unx.info, Node: Latin-1, Next: Other 8-Bit Codes, Up: Foreign Language Representation - - Latin-1 - ------- - - The basic character set is Latin-1. This character set is defined by ISO - standard 8859, part 1. The lower half (character codes `16#00#' ... - `16#7F#)' is identical to standard ASCII coding, but the upper half is - used to represent additional characters. These include extended letters - used by European languages, such as French accents, the vowels with - umlauts used in German, and the extra letter A-ring used in Swedish. - - For a complete list of Latin-1 codes and their encodings, see the - source file of library unit `Ada.Characters.Latin_1' in file - `a-chlat1.ads'. You may use any of these extended characters freely in - character or string literals. In addition, the extended characters that - represent letters can be used in identifiers. - -  - File: gnat_ug_unx.info, Node: Other 8-Bit Codes, Next: Wide Character Encodings, Prev: Latin-1, Up: Foreign Language Representation - - Other 8-Bit Codes - ----------------- - - GNAT also supports several other 8-bit coding schemes: - - Latin-2 - Latin-2 letters allowed in identifiers, with uppercase and - lowercase equivalence. - - Latin-3 - Latin-3 letters allowed in identifiers, with uppercase and - lowercase equivalence. - - Latin-4 - Latin-4 letters allowed in identifiers, with uppercase and - lowercase equivalence. - - Latin-5 - Latin-4 letters (Cyrillic) allowed in identifiers, with uppercase - and lowercase equivalence. - - IBM PC (code page 437) - This code page is the normal default for PCs in the U.S. It - corresponds to the original IBM PC character set. This set has - some, but not all, of the extended Latin-1 letters, but these - letters do not have the same encoding as Latin-1. In this mode, - these letters are allowed in identifiers with uppercase and - lowercase equivalence. - - IBM PC (code page 850) - This code page is a modification of 437 extended to include all the - Latin-1 letters, but still not with the usual Latin-1 encoding. In - this mode, all these letters are allowed in identifiers with - uppercase and lowercase equivalence. - - Full Upper 8-bit - Any character in the range 80-FF allowed in identifiers, and all - are considered distinct. In other words, there are no uppercase - and lowercase equivalences in this range. This is useful in - conjunction with certain encoding schemes used for some foreign - character sets (e.g. the typical method of representing Chinese - characters on the PC). - - No Upper-Half - No upper-half characters in the range 80-FF are allowed in - identifiers. This gives Ada 83 compatibility for identifier names. - - For precise data on the encodings permitted, and the uppercase and - lowercase equivalences that are recognized, see the file `csets.adb' in - the GNAT compiler sources. You will need to obtain a full source release - of GNAT to obtain this file. - -  - File: gnat_ug_unx.info, Node: Wide Character Encodings, Prev: Other 8-Bit Codes, Up: Foreign Language Representation - - Wide Character Encodings - ------------------------ - - GNAT allows wide character codes to appear in character and string - literals, and also optionally in identifiers, by means of the following - possible encoding schemes: - - Hex Coding - In this encoding, a wide character is represented by the following - five character sequence: - - ESC a b c d - - Where `a', `b', `c', `d' are the four hexadecimal characters - (using uppercase letters) of the wide character code. For example, - ESC A345 is used to represent the wide character with code - `16#A345#'. This scheme is compatible with use of the full - Wide_Character set. - - Upper-Half Coding - The wide character with encoding `16#abcd#' where the upper bit is - on (in other words, "a" is in the range 8-F) is represented as two - bytes, `16#ab#' and `16#cd#'. The second byte cannot be a format - control character, but is not required to be in the upper half. - This method can be also used for shift-JIS or EUC, where the - internal coding matches the external coding. - - Shift JIS Coding - A wide character is represented by a two-character sequence, - `16#ab#' and `16#cd#', with the restrictions described for - upper-half encoding as described above. The internal character - code is the corresponding JIS character according to the standard - algorithm for Shift-JIS conversion. Only characters defined in the - JIS code set table can be used with this encoding method. - - EUC Coding - A wide character is represented by a two-character sequence - `16#ab#' and `16#cd#', with both characters being in the upper - half. The internal character code is the corresponding JIS - character according to the EUC encoding algorithm. Only characters - defined in the JIS code set table can be used with this encoding - method. - - UTF-8 Coding - A wide character is represented using UCS Transformation Format 8 - (UTF-8) as defined in Annex R of ISO 10646-1/Am.2. Depending on - the character value, the representation is a one, two, or three - byte sequence: - 16#0000#-16#007f#: 2#0xxxxxxx# - 16#0080#-16#07ff#: 2#110xxxxx# 2#10xxxxxx# - 16#0800#-16#ffff#: 2#1110xxxx# 2#10xxxxxx# 2#10xxxxxx# - - where the xxx bits correspond to the left-padded bits of the - 16-bit character value. Note that all lower half ASCII characters - are represented as ASCII bytes and all upper half characters and - other wide characters are represented as sequences of upper-half - (The full UTF-8 scheme allows for encoding 31-bit characters as - 6-byte sequences, but in this implementation, all UTF-8 sequences - of four or more bytes length will be treated as illegal). - - Brackets Coding - In this encoding, a wide character is represented by the following - eight character sequence: - - [ " a b c d " ] - - Where `a', `b', `c', `d' are the four hexadecimal characters - (using uppercase letters) of the wide character code. For example, - ["A345"] is used to represent the wide character with code - `16#A345#'. It is also possible (though not required) to use the - Brackets coding for upper half characters. For example, the code - `16#A3#' can be represented as `["A3"]'. - - This scheme is compatible with use of the full Wide_Character set, - and is also the method used for wide character encoding in the - standard ACVC (Ada Compiler Validation Capability) test suite - distributions. - - Note: Some of these coding schemes do not permit the full use of the - Ada 95 character set. For example, neither Shift JIS, nor EUC allow the - use of the upper half of the Latin-1 set. - -  - File: gnat_ug_unx.info, Node: File Naming Rules, Next: Using Other File Names, Prev: Foreign Language Representation, Up: The GNAT Compilation Model - - File Naming Rules - ================= - - The default file name is determined by the name of the unit that the - file contains. The name is formed by taking the full expanded name of - the unit and replacing the separating dots with hyphens and using - lowercase for all letters. - - An exception arises if the file name generated by the above rules - starts with one of the characters a,g,i, or s, and the second character - is a minus. In this case, the character tilde is used in place of the - minus. The reason for this special rule is to avoid clashes with the - standard names for child units of the packages System, Ada, Interfaces, - and GNAT, which use the prefixes s- a- i- and g- respectively. - - The file extension is `.ads' for a spec and `.adb' for a body. The - following list shows some examples of these rules. - - `main.ads' - Main (spec) - - `main.adb' - Main (body) - - `arith_functions.ads' - Arith_Functions (package spec) - - `arith_functions.adb' - Arith_Functions (package body) - - `func-spec.ads' - Func.Spec (child package spec) - - `func-spec.adb' - Func.Spec (child package body) - - `main-sub.adb' - Sub (subunit of Main) - - `a~bad.adb' - A.Bad (child package body) - - Following these rules can result in excessively long file names if - corresponding unit names are long (for example, if child units or - subunits are heavily nested). An option is available to shorten such - long file names (called file name "krunching"). This may be - particularly useful when programs being developed with GNAT are to be - used on operating systems with limited file name lengths. *Note Using - gnatkr::. - - Of course, no file shortening algorithm can guarantee uniqueness over - all possible unit names; if file name krunching is used, it is your - responsibility to ensure no name clashes occur. Alternatively you can - specify the exact file names that you want used, as described in the - next section. Finally, if your Ada programs are migrating from a - compiler with a different naming convention, you can use the gnatchop - utility to produce source files that follow the GNAT naming conventions. - (For details *note Renaming Files Using gnatchop::.) - -  - File: gnat_ug_unx.info, Node: Using Other File Names, Next: Alternative File Naming Schemes, Prev: File Naming Rules, Up: The GNAT Compilation Model - - Using Other File Names - ====================== - - In the previous section, we have described the default rules used by - GNAT to determine the file name in which a given unit resides. It is - often convenient to follow these default rules, and if you follow them, - the compiler knows without being explicitly told where to find all the - files it needs. - - However, in some cases, particularly when a program is imported from - another Ada compiler environment, it may be more convenient for the - programmer to specify which file names contain which units. GNAT allows - arbitrary file names to be used by means of the Source_File_Name pragma. - The form of this pragma is as shown in the following examples: - - pragma Source_File_Name (My_Utilities.Stacks, - Spec_File_Name => "myutilst_a.ada"); - pragma Source_File_name (My_Utilities.Stacks, - Body_File_Name => "myutilst.ada"); - - As shown in this example, the first argument for the pragma is the unit - name (in this example a child unit). The second argument has the form - of a named association. The identifier indicates whether the file name - is for a spec or a body; the file name itself is given by a string - literal. - - The source file name pragma is a configuration pragma, which means - that normally it will be placed in the `gnat.adc' file used to hold - configuration pragmas that apply to a complete compilation environment. - For more details on how the `gnat.adc' file is created and used *note - Handling of Configuration Pragmas:: - - GNAT allows completely arbitrary file names to be specified using the - source file name pragma. However, if the file name specified has an - extension other than `.ads' or `.adb' it is necessary to use a special - syntax when compiling the file. The name in this case must be preceded - by the special sequence `-x' followed by a space and the name of the - language, here `ada', as in: - - $ gcc -c -x ada peculiar_file_name.sim - - `gnatmake' handles non-standard file names in the usual manner (the - non-standard file name for the main program is simply used as the - argument to gnatmake). Note that if the extension is also non-standard, - then it must be included in the gnatmake command, it may not be omitted. - -  - File: gnat_ug_unx.info, Node: Alternative File Naming Schemes, Next: Generating Object Files, Prev: Using Other File Names, Up: The GNAT Compilation Model - - Alternative File Naming Schemes - =============================== - - In the previous section, we described the use of the - `Source_File_Name' pragma to allow arbitrary names to be assigned to - individual source files. However, this approach requires one pragma - for each file, and especially in large systems can result in very long - `gnat.adc' files, and also create a maintenance problem. - - GNAT also provides a facility for specifying systematic file naming - schemes other than the standard default naming scheme previously - described. An alternative scheme for naming is specified by the use of - `Source_File_Name' pragmas having the following format: - - pragma Source_File_Name ( - Spec_File_Name => FILE_NAME_PATTERN - [,Casing => CASING_SPEC] - [,Dot_Replacement => STRING_LITERAL]); - - pragma Source_File_Name ( - Body_File_Name => FILE_NAME_PATTERN - [,Casing => CASING_SPEC] - [,Dot_Replacement => STRING_LITERAL]); - - pragma Source_File_Name ( - Subunit_File_Name => FILE_NAME_PATTERN - [,Casing => CASING_SPEC] - [,Dot_Replacement => STRING_LITERAL]); - - FILE_NAME_PATTERN ::= STRING_LITERAL - CASING_SPEC ::= Lowercase | Uppercase | Mixedcase - - The `FILE_NAME_PATTERN' string shows how the file name is constructed. - It contains a single asterisk character, and the unit name is - substituted systematically for this asterisk. The optional parameter - `Casing' indicates whether the unit name is to be all upper-case - letters, all lower-case letters, or mixed-case. If no `Casing' - parameter is used, then the default is all lower-case. - - The optional `Dot_Replacement' string is used to replace any periods - that occur in subunit or child unit names. If no `Dot_Replacement' - argument is used then separating dots appear unchanged in the resulting - file name. Although the above syntax indicates that the `Casing' - argument must appear before the `Dot_Replacement' argument, but it is - also permissible to write these arguments in the opposite order. - - As indicated, it is possible to specify different naming schemes for - bodies, specs, and subunits. Quite often the rule for subunits is the - same as the rule for bodies, in which case, there is no need to give a - separate `Subunit_File_Name' rule, and in this case the - `Body_File_name' rule is used for subunits as well. - - The separate rule for subunits can also be used to implement the - rather unusual case of a compilation environment (e.g. a single - directory) which contains a subunit and a child unit with the same unit - name. Although both units cannot appear in the same partition, the Ada - Reference Manual allows (but does not require) the possibility of the - two units coexisting in the same environment. - - The file name translation works in the following steps: - - * If there is a specific `Source_File_Name' pragma for the given - unit, then this is always used, and any general pattern rules are - ignored. - - * If there is a pattern type `Source_File_Name' pragma that applies - to the unit, then the resulting file name will be used if the file - exists. If more than one pattern matches, the latest one will be - tried first, and the first attempt resulting in a reference to a - file that exists will be used. - - * If no pattern type `Source_File_Name' pragma that applies to the - unit for which the corresponding file exists, then the standard - GNAT default naming rules are used. - - - As an example of the use of this mechanism, consider a commonly used - scheme in which file names are all lower case, with separating periods - copied unchanged to the resulting file name, and specs end with - ".1.ada", and bodies end with ".2.ada". GNAT will follow this scheme if - the following two pragmas appear: - - pragma Source_File_Name - (Spec_File_Name => "*.1.ada"); - pragma Source_File_Name - (Body_File_Name => "*.2.ada"); - - The default GNAT scheme is actually implemented by providing the - following default pragmas internally: - - pragma Source_File_Name - (Spec_File_Name => "*.ads", Dot_Replacement => "-"); - pragma Source_File_Name - (Body_File_Name => "*.adb", Dot_Replacement => "-"); - - Our final example implements a scheme typically used with one of the - Ada 83 compilers, where the separator character for subunits was "__" - (two underscores), specs were identified by adding `_.ADA', bodies by - adding `.ADA', and subunits by adding `.SEP'. All file names were upper - case. Child units were not present of course since this was an Ada 83 - compiler, but it seems reasonable to extend this scheme to use the same - double underscore separator for child units. - - pragma Source_File_Name - (Spec_File_Name => "*_.ADA", - Dot_Replacement => "__", - Casing = Uppercase); - pragma Source_File_Name - (Body_File_Name => "*.ADA", - Dot_Replacement => "__", - Casing = Uppercase); - pragma Source_File_Name - (Subunit_File_Name => "*.SEP", - Dot_Replacement => "__", - Casing = Uppercase); - -  - File: gnat_ug_unx.info, Node: Generating Object Files, Next: Source Dependencies, Prev: Alternative File Naming Schemes, Up: The GNAT Compilation Model - - Generating Object Files - ======================= - - An Ada program consists of a set of source files, and the first step in - compiling the program is to generate the corresponding object files. - These are generated by compiling a subset of these source files. The - files you need to compile are the following: - - * If a package spec has no body, compile the package spec to produce - the object file for the package. - - * If a package has both a spec and a body, compile the body to - produce the object file for the package. The source file for the - package spec need not be compiled in this case because there is - only one object file, which contains the code for both the spec - and body of the package. - - * For a subprogram, compile the subprogram body to produce the - object file for the subprogram. The spec, if one is present, is as - usual in a separate file, and need not be compiled. - - * In the case of subunits, only compile the parent unit. A single - object file is generated for the entire subunit tree, which - includes all the subunits. - - * Compile child units independently of their parent units (though, - of course, the spec of all the ancestor unit must be present in - order to compile a child unit). - - * Compile generic units in the same manner as any other units. The - object files in this case are small dummy files that contain at - most the flag used for elaboration checking. This is because GNAT - always handles generic instantiation by means of macro expansion. - However, it is still necessary to compile generic units, for - dependency checking and elaboration purposes. - - The preceding rules describe the set of files that must be compiled to - generate the object files for a program. Each object file has the same - name as the corresponding source file, except that the extension is - `.o' as usual. - - You may wish to compile other files for the purpose of checking their - syntactic and semantic correctness. For example, in the case where a - package has a separate spec and body, you would not normally compile the - spec. However, it is convenient in practice to compile the spec to make - sure it is error-free before compiling clients of this spec, because - such compilations will fail if there is an error in the spec. - - GNAT provides an option for compiling such files purely for the - purposes of checking correctness; such compilations are not required as - part of the process of building a program. To compile a file in this - checking mode, use the `-gnatc' switch. - -  - File: gnat_ug_unx.info, Node: Source Dependencies, Next: The Ada Library Information Files, Prev: Generating Object Files, Up: The GNAT Compilation Model - - Source Dependencies - =================== - - A given object file clearly depends on the source file which is compiled - to produce it. Here we are using "depends" in the sense of a typical - `make' utility; in other words, an object file depends on a source file - if changes to the source file require the object file to be recompiled. - In addition to this basic dependency, a given object may depend on - additional source files as follows: - - * If a file being compiled `with''s a unit X, the object file - depends on the file containing the spec of unit X. This includes - files that are `with''ed implicitly either because they are parents - of `with''ed child units or they are run-time units required by the - language constructs used in a particular unit. - - * If a file being compiled instantiates a library level generic - unit, the object file depends on both the spec and body files for - this generic unit. - - * If a file being compiled instantiates a generic unit defined - within a package, the object file depends on the body file for the - package as well as the spec file. - - * If a file being compiled contains a call to a subprogram for which - pragma `Inline' applies and inlining is activated with the - `-gnatn' switch, the object file depends on the file containing the - body of this subprogram as well as on the file containing the - spec. Note that for inlining to actually occur as a result of the - use of this switch, it is necessary to compile in optimizing mode. - - The use of `-gnatN' activates a more extensive inlining - optimization that is performed by the front end of the compiler. - This inlining does not require that the code generation be - optimized. Like `-gnatn', the use of this switch generates - additional dependencies. - - * If an object file O depends on the proper body of a subunit - through inlining or instantiation, it depends on the parent unit - of the subunit. This means that any modification of the parent - unit or one of its subunits affects the compilation of O. - - * The object file for a parent unit depends on all its subunit body - files. - - * The previous two rules meant that for purposes of computing - dependencies and recompilation, a body and all its subunits are - treated as an indivisible whole. - - These rules are applied transitively: if unit `A' `with''s unit - `B', whose elaboration calls an inlined procedure in package `C', - the object file for unit `A' will depend on the body of `C', in - file `c.adb'. - - The set of dependent files described by these rules includes all - the files on which the unit is semantically dependent, as - described in the Ada 95 Language Reference Manual. However, it is - a superset of what the ARM describes, because it includes generic, - inline, and subunit dependencies. - - An object file must be recreated by recompiling the corresponding - source file if any of the source files on which it depends are - modified. For example, if the `make' utility is used to control - compilation, the rule for an Ada object file must mention all the - source files on which the object file depends, according to the - above definition. The determination of the necessary - recompilations is done automatically when one uses `gnatmake'. - -  - File: gnat_ug_unx.info, Node: The Ada Library Information Files, Next: Binding an Ada Program, Prev: Source Dependencies, Up: The GNAT Compilation Model - - The Ada Library Information Files - ================================= - - Each compilation actually generates two output files. The first of these - is the normal object file that has a `.o' extension. The second is a - text file containing full dependency information. It has the same name - as the source file, but an `.ali' extension. This file is known as the - Ada Library Information (`ali') file. The following information is - contained in the `ali' file. - - * Version information (indicates which version of GNAT was used to - compile the unit(s) in question) - - * Main program information (including priority and time slice - settings, as well as the wide character encoding used during - compilation). - - * List of arguments used in the `gcc' command for the compilation - - * Attributes of the unit, including configuration pragmas used, an - indication of whether the compilation was successful, exception - model used etc. - - * A list of relevant restrictions applying to the unit (used for - consistency) checking. - - * Categorization information (e.g. use of pragma `Pure'). - - * Information on all `with''ed units, including presence of - `Elaborate' or `Elaborate_All' pragmas. - - * Information from any `Linker_Options' pragmas used in the unit - - * Information on the use of `Body_Version' or `Version' attributes - in the unit. - - * Dependency information. This is a list of files, together with - time stamp and checksum information. These are files on which the - unit depends in the sense that recompilation is required if any of - these units are modified. - - * Cross-reference data. Contains information on all entities - referenced in the unit. Used by tools like `gnatxref' and - `gnatfind' to provide cross-reference information. - - - For a full detailed description of the format of the `ali' file, see - the source of the body of unit `Lib.Writ', contained in file - `lib-writ.adb' in the GNAT compiler sources. - -  - File: gnat_ug_unx.info, Node: Binding an Ada Program, Next: Mixed Language Programming, Prev: The Ada Library Information Files, Up: The GNAT Compilation Model - - Binding an Ada Program - ====================== - - When using languages such as C and C++, once the source files have been - compiled the only remaining step in building an executable program is - linking the object modules together. This means that it is possible to - link an inconsistent version of a program, in which two units have - included different versions of the same header. - - The rules of Ada do not permit such an inconsistent program to be - built. For example, if two clients have different versions of the same - package, it is illegal to build a program containing these two clients. - These rules are enforced by the GNAT binder, which also determines an - elaboration order consistent with the Ada rules. - - The GNAT binder is run after all the object files for a program have - been created. It is given the name of the main program unit, and from - this it determines the set of units required by the program, by reading - the corresponding ALI files. It generates error messages if the program - is inconsistent or if no valid order of elaboration exists. - - If no errors are detected, the binder produces a main program, in - Ada by default, that contains calls to the elaboration procedures of - those compilation unit that require them, followed by a call to the - main program. This Ada program is compiled to generate the object file - for the main program. The name of the Ada file is `b~XXX.adb' (with the - corresponding spec `b~XXX.ads') where XXX is the name of the main - program unit. - - Finally, the linker is used to build the resulting executable - program, using the object from the main program from the bind step as - well as the object files for the Ada units of the program. - -  - File: gnat_ug_unx.info, Node: Mixed Language Programming, Next: Building Mixed Ada & C++ Programs, Prev: Binding an Ada Program, Up: The GNAT Compilation Model - - Mixed Language Programming - ========================== - - * Menu: - - * Interfacing to C:: - * Calling Conventions:: - -  - File: gnat_ug_unx.info, Node: Interfacing to C, Next: Calling Conventions, Up: Mixed Language Programming - - Interfacing to C - ---------------- - - There are two ways to build a program that contains some Ada files and - some other language files depending on whether the main program is in - Ada or not. If the main program is in Ada, you should proceed as - follows: - - 1. Compile the other language files to generate object files. For - instance: - gcc -c file1.c - gcc -c file2.c - - 2. Compile the Ada units to produce a set of object files and ALI - files. For instance: - gnatmake -c my_main.adb - - 3. Run the Ada binder on the Ada main program. For instance: - gnatbind my_main.ali - - 4. Link the Ada main program, the Ada objects and the other language - objects. For instance: - gnatlink my_main.ali file1.o file2.o - - The three last steps can be grouped in a single command: - gnatmake my_main.adb -largs file1.o file2.o - - If the main program is in some language other than Ada, Then you may - have more than one entry point in the Ada subsystem. You must use a - special option of the binder to generate callable routines to initialize - and finalize the Ada units (*note Binding with Non-Ada Main Programs::). - Calls to the initialization and finalization routines must be inserted - in the main program, or some other appropriate point in the code. The - call to initialize the Ada units must occur before the first Ada - subprogram is called, and the call to finalize the Ada units must occur - after the last Ada subprogram returns. You use the same procedure for - building the program as described previously. In this case, however, - the binder only places the initialization and finalization subprograms - into file `b~XXX.adb' instead of the main program. So, if the main - program is not in Ada, you should proceed as follows: - - 1. Compile the other language files to generate object files. For - instance: - gcc -c file1.c - gcc -c file2.c - - 2. Compile the Ada units to produce a set of object files and ALI - files. For instance: - gnatmake -c entry_point1.adb - gnatmake -c entry_point2.adb - - 3. Run the Ada binder on the Ada main program. For instance: - gnatbind -n entry_point1.ali entry_point2.ali - - 4. Link the Ada main program, the Ada objects and the other language - objects. You only need to give the last entry point here. For - instance: - gnatlink entry_point2.ali file1.o file2.o - -  - File: gnat_ug_unx.info, Node: Calling Conventions, Prev: Interfacing to C, Up: Mixed Language Programming - - Calling Conventions - ------------------- - - GNAT follows standard calling sequence conventions and will thus - interface to any other language that also follows these conventions. - The following Convention identifiers are recognized by GNAT: - - * Ada. This indicates that the standard Ada calling sequence will be - used and all Ada data items may be passed without any limitations - in the case where GNAT is used to generate both the caller and - callee. It is also possible to mix GNAT generated code and code - generated by another Ada compiler. In this case, the data types - should be restricted to simple cases, including primitive types. - Whether complex data types can be passed depends on the situation. - Probably it is safe to pass simple arrays, such as arrays of - integers or floats. Records may or may not work, depending on - whether both compilers lay them out identically. Complex structures - involving variant records, access parameters, tasks, or protected - types, are unlikely to be able to be passed. - - Note that in the case of GNAT running on a platform that supports - DEC Ada 83, a higher degree of compatibility can be guaranteed, - and in particular records are layed out in an identical manner in - the two compilers. Note also that if output from two different - compilers is mixed, the program is responsible for dealing with - elaboration issues. Probably the safest approach is to write the - main program in the version of Ada other than GNAT, so that it - takes care of its own elaboration requirements, and then call the - GNAT-generated adainit procedure to ensure elaboration of the GNAT - components. Consult the documentation of the other Ada compiler - for further details on elaboration. - - However, it is not possible to mix the tasking run time of GNAT and - DEC Ada 83, All the tasking operations must either be entirely - within GNAT compiled sections of the program, or entirely within - DEC Ada 83 compiled sections of the program. - - * Assembler. Specifies assembler as the convention. In practice this - has the same effect as convention Ada (but is not equivalent in - the sense of being considered the same convention). - - * Asm. Equivalent to Assembler. - - * Asm. Equivalent to Assembly. - - * COBOL. Data will be passed according to the conventions described - in section B.4 of the Ada 95 Reference Manual. - - * C. Data will be passed according to the conventions described in - section B.3 of the Ada 95 Reference Manual. - - * Default. Equivalent to C. - - * External. Equivalent to C. - - * CPP. This stands for C++. For most purposes this is identical to C. - See the separate description of the specialized GNAT pragmas - relating to C++ interfacing for further details. - - * Fortran. Data will be passed according to the conventions described - in section B.5 of the Ada 95 Reference Manual. - - * Intrinsic. This applies to an intrinsic operation, as defined in - the Ada 95 Reference Manual. If a a pragma Import (Intrinsic) - applies to a subprogram, this means that the body of the - subprogram is provided by the compiler itself, usually by means of - an efficient code sequence, and that the user does not supply an - explicit body for it. In an application program, the pragma can - only be applied to the following two sets of names, which the GNAT - compiler recognizes. - * Rotate_Left, Rotate_Right, Shift_Left, Shift_Right, - Shift_Right_- Arithmetic. The corresponding subprogram - declaration must have two formal parameters. The first one - must be a signed integer type or a modular type with a binary - modulus, and the second parameter must be of type Natural. - The return type must be the same as the type of the first - argument. The size of this type can only be 8, 16, 32, or 64. - - * binary arithmetic operators: "+", "-", "*", "/" The - corresponding operator declaration must have parameters and - result type that have the same root numeric type (for - example, all three are long_float types). This simplifies the - definition of operations that use type checking to perform - dimensional checks: - type Distance is new Long_Float; - type Time is new Long_Float; - type Velocity is new Long_Float; - function "/" (D : Distance; T : Time) - return Velocity; - pragma Import (Intrinsic, "/"); - - This common idiom is often programmed with a generic - definition and an explicit body. The pragma makes it simpler - to introduce such declarations. It incurs no overhead in - compilation time or code size, because it is implemented as a - single machine instruction. - - * Stdcall. This is relevant only to NT/Win95 implementations of GNAT, - and specifies that the Stdcall calling sequence will be used, as - defined by the NT API. - - * DLL. This is equivalent to Stdcall. - - * Win32. This is equivalent to Stdcall. - - * Stubbed. This is a special convention that indicates that the - compiler should provide a stub body that raises `Program_Error'. - - GNAT additionally provides a useful pragma `Convention_Identifier' that - can be used to parametrize conventions and allow additional synonyms to - be specified. For example if you have legacy code in which the - convention identifier Fortran77 was used for Fortran, you can use the - configuration pragma: - - pragma Convention_Identifier (Fortran77, Fortran); - - And from now on the identifier Fortran77 may be used as a convention - identifier (for example in an `Import' pragma) with the same meaning as - Fortran. - -  - File: gnat_ug_unx.info, Node: Building Mixed Ada & C++ Programs, Next: Comparison between GNAT and C/C++ Compilation Models, Prev: Mixed Language Programming, Up: The GNAT Compilation Model - - Building Mixed Ada & C++ Programs - ================================= - - Building a mixed application containing both Ada and C++ code may be a - challenge for the unaware programmer. As a matter of fact, this - interfacing has not been standardized in the Ada 95 reference manual due - to the immaturity and lack of standard of C++ at the time. This section - gives a few hints that should make this task easier. In particular the - first section addresses the differences with interfacing with C. The - second section looks into the delicate problem of linking the complete - application from its Ada and C++ parts. The last section give some - hints on how the GNAT run time can be adapted in order to allow - inter-language dispatching with a new C++ compiler. - - * Menu: - - * Interfacing to C++:: - * Linking a Mixed C++ & Ada Program:: - * A Simple Example:: - * Adapting the Run Time to a New C++ Compiler:: - -  - File: gnat_ug_unx.info, Node: Interfacing to C++, Next: Linking a Mixed C++ & Ada Program, Up: Building Mixed Ada & C++ Programs - - Interfacing to C++ - ------------------ - - GNAT supports interfacing with C++ compilers generating code that is - compatible with the standard Application Binary Interface of the given - platform. - - Interfacing can be done at 3 levels: simple data, subprograms and - classes. In the first 2 cases, GNAT offer a specific CONVENTION CPP - that behaves exactly like CONVENTION C. Usually C++ mangle names of - subprograms and currently GNAT does not provide any help to solve the - demangling problem. This problem can be addressed in 2 ways: - * by modifying the C++ code in order to force a C convention using - the EXTERN "C" syntax. - - * by figuring out the mangled name and use it as the Link_Name - argument of the pragma import. - - Interfacing at the class level can be achieved by using the GNAT - specific pragmas such as `CPP_Class' and `CPP_Virtual'. See the GNAT - Reference Manual for additional information. - -  - File: gnat_ug_unx.info, Node: Linking a Mixed C++ & Ada Program, Next: A Simple Example, Prev: Interfacing to C++, Up: Building Mixed Ada & C++ Programs - - Linking a Mixed C++ & Ada Program - --------------------------------- - - Usually the linker of the C++ development system must be used to link - mixed applications because most C++ systems will resolve elaboration - issues (such as calling constructors on global class instances) - transparently during the link phase. GNAT has been adapted to ease the - use of a foreign linker for the last phase. Three cases can be - considered: - 1. Using GNAT and G++ (GNU C++ compiler) from the same GCC - installation. The c++ linker can simply be called by using the c++ - specific driver called `c++'. Note that this setup is not very - common because it may request recompiling the whole GCC tree from - sources and it does not allow to upgrade easily to a new version - of one compiler for one of the two languages without taking the - risk of destabilizing the other. - - $ c++ -c file1.C - $ c++ -c file2.C - $ gnatmake ada_unit -largs file1.o file2.o --LINK=c++ - - 2. Using GNAT and G++ from 2 different GCC installations. If both - compilers are on the PATH, the same method can be used. It is - important to be aware that environment variables such as - C_INCLUDE_PATH, GCC_EXEC_PREFIX, BINUTILS_ROOT or GCC_ROOT will - affect both compilers at the same time and thus may make one of - the 2 compilers operate improperly if they are set for the other. - In particular it is important that the link command has access to - the proper gcc library `libgcc.a', that is to say the one that is - part of the C++ compiler installation. The implicit link command - as suggested in the gnatmake command from the former example can - be replaced by an explicit link command with full verbosity in - order to verify which library is used: - $ gnatbind ada_unit - $ gnatlink -v -v ada_unit file1.o file2.o --LINK=c++ - If there is a problem due to interfering environment variables, it - can be workaround by using an intermediate script. The following - example shows the proper script to use when GNAT has not been - installed at its default location and g++ has been installed at - its default location: - - $ gnatlink -v -v ada_unit file1.o file2.o --LINK=./my_script - $ cat ./my_script - #!/bin/sh - unset BINUTILS_ROOT - unset GCC_ROOT - c++ $* - - 3. Using a non GNU C++ compiler. The same set of command as previously - described can be used to insure that the c++ linker is used. - Nonetheless, you need to add the path to libgcc explicitely, since - some libraries needed by GNAT are located in this directory: - - - $ gnatlink ada_unit file1.o file2.o --LINK=./my_script - $ cat ./my_script - #!/bin/sh - CC $* `gcc -print-libgcc-file-name` - - Where CC is the name of the non GNU C++ compiler. - - -  - File: gnat_ug_unx.info, Node: A Simple Example, Next: Adapting the Run Time to a New C++ Compiler, Prev: Linking a Mixed C++ & Ada Program, Up: Building Mixed Ada & C++ Programs - - A Simple Example - ---------------- - - The following example, provided as part of the GNAT examples, show how - to achieve procedural interfacing between Ada and C++ in both - directions. The C++ class A has 2 methods. The first method is exported - to Ada by the means of an extern C wrapper function. The second method - calls an Ada subprogram. On the Ada side, The C++ calls is modelized by - a limited record with a layout comparable to the C++ class. The Ada - subprogram, in turn, calls the c++ method. So from the C++ main program - the code goes back and forth between the 2 languages. - - Here are the compilation commands for native configurations: - $ gnatmake -c simple_cpp_interface - $ c++ -c cpp_main.C - $ c++ -c ex7.C - $ gnatbind -n simple_cpp_interface - $ gnatlink simple_cpp_interface -o cpp_main --LINK=$(CPLUSPLUS) - -lstdc++ ex7.o cpp_main.o - - Here are the corresponding sources: - - //cpp_main.C - - #include "ex7.h" - - extern "C" { - void adainit (void); - void adafinal (void); - void method1 (A *t); - } - - void method1 (A *t) - { - t->method1 (); - } - - int main () - { - A obj; - adainit (); - obj.method2 (3030); - adafinal (); - } - - //ex7.h - - class Origin { - public: - int o_value; - }; - class A : public Origin { - public: - void method1 (void); - virtual void method2 (int v); - A(); - int a_value; - }; - - //ex7.C - - #include "ex7.h" - #include - - extern "C" { void ada_method2 (A *t, int v);} - - void A::method1 (void) - { - a_value = 2020; - printf ("in A::method1, a_value = %d \n",a_value); - - } - - void A::method2 (int v) - { - ada_method2 (this, v); - printf ("in A::method2, a_value = %d \n",a_value); - - } - - A::A(void) - { - a_value = 1010; - printf ("in A::A, a_value = %d \n",a_value); - } - - -- Ada sources - package body Simple_Cpp_Interface is - - procedure Ada_Method2 (This : in out A; V : Integer) is - begin - Method1 (This); - This.A_Value := V; - end Ada_Method2; - - end Simple_Cpp_Interface; - - package Simple_Cpp_Interface is - type A is limited - record - O_Value : Integer; - A_Value : Integer; - end record; - pragma Convention (C, A); - - procedure Method1 (This : in out A); - pragma Import (C, Method1); - - procedure Ada_Method2 (This : in out A; V : Integer); - pragma Export (C, Ada_Method2); - - end Simple_Cpp_Interface; - -  - File: gnat_ug_unx.info, Node: Adapting the Run Time to a New C++ Compiler, Prev: A Simple Example, Up: Building Mixed Ada & C++ Programs - - Adapting the Run Time to a New C++ Compiler - ------------------------------------------- - - GNAT offers the capability to derive Ada 95 tagged types directly from - preexisting C++ classes and . See "Interfacing with C++" in the GNAT - reference manual. The mechanism used by GNAT for achieving such a goal - has been made user configurable through a GNAT library unit - `Interfaces.CPP'. The default version of this file is adapted to the - GNU c++ compiler. Internal knowledge of the virtual table layout used - by the new C++ compiler is needed to configure properly this unit. The - Interface of this unit is known by the compiler and cannot be changed - except for the value of the constants defining the characteristics of - the virtual table: CPP_DT_Prologue_Size, CPP_DT_Entry_Size, - CPP_TSD_Prologue_Size, CPP_TSD_Entry_Size. Read comments in the source - of this unit for more details. - -  - File: gnat_ug_unx.info, Node: Comparison between GNAT and C/C++ Compilation Models, Next: Comparison between GNAT and Conventional Ada Library Models, Prev: Building Mixed Ada & C++ Programs, Up: The GNAT Compilation Model - - Comparison between GNAT and C/C++ Compilation Models - ==================================================== - - The GNAT model of compilation is close to the C and C++ models. You can - think of Ada specs as corresponding to header files in C. As in C, you - don't need to compile specs; they are compiled when they are used. The - Ada `with' is similar in effect to the `#include' of a C header. - - One notable difference is that, in Ada, you may compile specs - separately to check them for semantic and syntactic accuracy. This is - not always possible with C headers because they are fragments of - programs that have less specific syntactic or semantic rules. - - The other major difference is the requirement for running the binder, - which performs two important functions. First, it checks for - consistency. In C or C++, the only defense against assembling - inconsistent programs lies outside the compiler, in a makefile, for - example. The binder satisfies the Ada requirement that it be impossible - to construct an inconsistent program when the compiler is used in normal - mode. - - The other important function of the binder is to deal with - elaboration issues. There are also elaboration issues in C++ that are - handled automatically. This automatic handling has the advantage of - being simpler to use, but the C++ programmer has no control over - elaboration. Where `gnatbind' might complain there was no valid order - of elaboration, a C++ compiler would simply construct a program that - malfunctioned at run time. - -  - File: gnat_ug_unx.info, Node: Comparison between GNAT and Conventional Ada Library Models, Prev: Comparison between GNAT and C/C++ Compilation Models, Up: The GNAT Compilation Model - - Comparison between GNAT and Conventional Ada Library Models - =========================================================== - - This section is intended to be useful to Ada programmers who have - previously used an Ada compiler implementing the traditional Ada library - model, as described in the Ada 95 Language Reference Manual. If you - have not used such a system, please go on to the next section. - - In GNAT, there is no "library" in the normal sense. Instead, the set - of source files themselves acts as the library. Compiling Ada programs - does not generate any centralized information, but rather an object - file and a ALI file, which are of interest only to the binder and - linker. In a traditional system, the compiler reads information not - only from the source file being compiled, but also from the centralized - library. This means that the effect of a compilation depends on what - has been previously compiled. In particular: - - * When a unit is `with''ed, the unit seen by the compiler corresponds - to the version of the unit most recently compiled into the library. - - * Inlining is effective only if the necessary body has already been - compiled into the library. - - * Compiling a unit may obsolete other units in the library. - - In GNAT, compiling one unit never affects the compilation of any other - units because the compiler reads only source files. Only changes to - source files can affect the results of a compilation. In particular: - - * When a unit is `with''ed, the unit seen by the compiler corresponds - to the source version of the unit that is currently accessible to - the compiler. - - * Inlining requires the appropriate source files for the package or - subprogram bodies to be available to the compiler. Inlining is - always effective, independent of the order in which units are - complied. - - * Compiling a unit never affects any other compilations. The editing - of sources may cause previous compilations to be out of date if - they depended on the source file being modified. - - The most important result of these differences is that order of - compilation is never significant in GNAT. There is no situation in - which one is required to do one compilation before another. What shows - up as order of compilation requirements in the traditional Ada library - becomes, in GNAT, simple source dependencies; in other words, there is - only a set of rules saying what source files must be present when a - file is compiled. - -  - File: gnat_ug_unx.info, Node: Compiling Using gcc, Next: Binding Using gnatbind, Prev: The GNAT Compilation Model, Up: Top - - Compiling Using `gcc' - ********************* - - This chapter discusses how to compile Ada programs using the `gcc' - command. It also describes the set of switches that can be used to - control the behavior of the compiler. - - * Menu: - - * Compiling Programs:: - * Switches for gcc:: - * Search Paths and the Run-Time Library (RTL):: - * Order of Compilation Issues:: - * Examples:: - -  - File: gnat_ug_unx.info, Node: Compiling Programs, Next: Switches for gcc, Up: Compiling Using gcc - - Compiling Programs - ================== - - The first step in creating an executable program is to compile the units - of the program using the `gcc' command. You must compile the following - files: - - * the body file (`.adb') for a library level subprogram or generic - subprogram - - * the spec file (`.ads') for a library level package or generic - package that has no body - - * the body file (`.adb') for a library level package or generic - package that has a body - - - You need _not_ compile the following files - - * the spec of a library unit which has a body - - * subunits - - because they are compiled as part of compiling related units. GNAT - package specs when the corresponding body is compiled, and subunits - when the parent is compiled. If you attempt to compile any of these - files, you will get one of the following error messages (where fff is - the name of the file you compiled): - - No code generated for file FFF (PACKAGE SPEC) - No code generated for file FFF (SUBUNIT) - - The basic command for compiling a file containing an Ada unit is - - $ gcc -c [SWITCHES] `file name' - - where FILE NAME is the name of the Ada file (usually having an extension - `.ads' for a spec or `.adb' for a body). You specify the `-c' switch - to tell `gcc' to compile, but not link, the file. The result of a - successful compilation is an object file, which has the same name as - the source file but an extension of `.o' and an Ada Library Information - (ALI) file, which also has the same name as the source file, but with - `.ali' as the extension. GNAT creates these two output files in the - current directory, but you may specify a source file in any directory - using an absolute or relative path specification containing the - directory information. - - `gcc' is actually a driver program that looks at the extensions of - the file arguments and loads the appropriate compiler. For example, the - GNU C compiler is `cc1', and the Ada compiler is `gnat1'. These - programs are in directories known to the driver program (in some - configurations via environment variables you set), but need not be in - your path. The `gcc' driver also calls the assembler and any other - utilities needed to complete the generation of the required object - files. - - It is possible to supply several file names on the same `gcc' - command. This causes `gcc' to call the appropriate compiler for each - file. For example, the following command lists three separate files to - be compiled: - - $ gcc -c x.adb y.adb z.c - - calls `gnat1' (the Ada compiler) twice to compile `x.adb' and `y.adb', - and `cc1' (the C compiler) once to compile `z.c'. The compiler - generates three object files `x.o', `y.o' and `z.o' and the two ALI - files `x.ali' and `y.ali' from the Ada compilations. Any switches apply - to all the files listed, except for `-gnatX' switches, which apply only - to Ada compilations. - -  - File: gnat_ug_unx.info, Node: Switches for gcc, Next: Search Paths and the Run-Time Library (RTL), Prev: Compiling Programs, Up: Compiling Using gcc - - Switches for `gcc' - ================== - - The `gcc' command accepts switches that control the compilation - process. These switches are fully described in this section. First we - briefly list all the switches, in alphabetical order, then we describe - the switches in more detail in functionally grouped sections. - - * Menu: - - * Output and Error Message Control:: - * Debugging and Assertion Control:: - * Run-Time Checks:: - * Stack Overflow Checking:: - * Run-Time Control:: - * Validity Checking:: - * Style Checking:: - * Using gcc for Syntax Checking:: - * Using gcc for Semantic Checking:: - * Compiling Ada 83 Programs:: - * Character Set Control:: - * File Naming Control:: - * Subprogram Inlining Control:: - * Auxiliary Output Control:: - * Debugging Control:: - * Units to Sources Mapping Files:: - - `-b TARGET' - Compile your program to run on TARGET, which is the name of a - system configuration. You must have a GNAT cross-compiler built if - TARGET is not the same as your host system. - - `-BDIR' - Load compiler executables (for example, `gnat1', the Ada compiler) - from DIR instead of the default location. Only use this switch - when multiple versions of the GNAT compiler are available. See the - `gcc' manual page for further details. You would normally use the - `-b' or `-V' switch instead. - - `-c' - Compile. Always use this switch when compiling Ada programs. - - Note: for some other languages when using `gcc', notably in the - case of C and C++, it is possible to use use `gcc' without a `-c' - switch to compile and link in one step. In the case of GNAT, you - cannot use this approach, because the binder must be run and `gcc' - cannot be used to run the GNAT binder. - - `-g' - Generate debugging information. This information is stored in the - object file and copied from there to the final executable file by - the linker, where it can be read by the debugger. You must use the - `-g' switch if you plan on using the debugger. - - `-IDIR' - Direct GNAT to search the DIR directory for source files needed by - the current compilation (*note Search Paths and the Run-Time - Library (RTL)::). - - `-I-' - Except for the source file named in the command line, do not look - for source files in the directory containing the source file named - in the command line (*note Search Paths and the Run-Time Library - (RTL)::). - - `-o FILE' - This switch is used in `gcc' to redirect the generated object file - and its associated ALI file. Beware of this switch with GNAT, - because it may cause the object file and ALI file to have - different names which in turn may confuse the binder and the - linker. - - `-O[N]' - N controls the optimization level. - - n = 0 - No optimization, the default setting if no `-O' appears - - n = 1 - Normal optimization, the default if you specify `-O' without - an operand. - - n = 2 - Extensive optimization - - n = 3 - Extensive optimization with automatic inlining. This applies - only to inlining within a unit. For details on control of - inter-unit inlining see *Note Subprogram Inlining Control::. - - `--RTS=RTS-PATH' - Specifies the default location of the runtime library. Same - meaning as the equivalent `gnatmake' flag (see *Note Switches for - gnatmake::). - - `-S' - Used in place of `-c' to cause the assembler source file to be - generated, using `.s' as the extension, instead of the object file. - This may be useful if you need to examine the generated assembly - code. - - `-v' - Show commands generated by the `gcc' driver. Normally used only for - debugging purposes or if you need to be sure what version of the - compiler you are executing. - - `-V VER' - Execute VER version of the compiler. This is the `gcc' version, - not the GNAT version. - - `-gnata' - Assertions enabled. `Pragma Assert' and `pragma Debug' to be - activated. - - `-gnatA' - Avoid processing `gnat.adc'. If a gnat.adc file is present, it - will be ignored. - - `-gnatb' - Generate brief messages to `stderr' even if verbose mode set. - - `-gnatc' - Check syntax and semantics only (no code generation attempted). - - `-gnatC' - Compress debug information and external symbol name table entries. - - `-gnatD' - Output expanded source files for source level debugging. This - switch also suppress generation of cross-reference information - (see -gnatx). - - `-gnatecPATH' - Specify a configuration pragma file. (see *Note The Configuration - Pragmas Files::) - - `-gnatemPATH' - Specify a mapping file. (see *Note Units to Sources Mapping - Files::) - - `-gnatE' - Full dynamic elaboration checks. - - `-gnatf' - Full errors. Multiple errors per line, all undefined references. - - `-gnatF' - Externals names are folded to all uppercase. - - `-gnatg' - Internal GNAT implementation mode. This should not be used for - applications programs, it is intended only for use by the compiler - and its run-time library. For documentation, see the GNAT sources. - - `-gnatG' - List generated expanded code in source form. - - `-gnatiC' - Identifier character set (C=1/2/3/4/8/9/p/f/n/w). - - `-gnath' - Output usage information. The output is written to `stdout'. - - `-gnatkN' - Limit file names to N (1-999) characters (`k' = krunch). - - `-gnatl' - Output full source listing with embedded error messages. - - `-gnatmN' - Limit number of detected errors to N (1-999). - - `-gnatn' - Activate inlining across unit boundaries for subprograms for which - pragma `inline' is specified. - - `-gnatN' - Activate front end inlining. - - `-fno-inline' - Suppresses all inlining, even if other optimization or inlining - switches are set. - - `-fstack-check' - Activates stack checking. See separate section on stack checking - for details of the use of this option. - - `-gnato' - Enable numeric overflow checking (which is not normally enabled by - default). Not that division by zero is a separate check that is not - controlled by this switch (division by zero checking is on by - default). - - `-gnatp' - Suppress all checks. - - `-gnatq' - Don't quit; try semantics, even if parse errors. - - `-gnatQ' - Don't quit; generate `ali' and tree files even if illegalities. - - `-gnatP' - Enable polling. This is required on some systems (notably Windows - NT) to obtain asynchronous abort and asynchronous transfer of - control capability. See the description of pragma Polling in the - GNAT Reference Manual for full details. - - `-gnatR[0/1/2/3][s]' - Output representation information for declared types and objects. - - `-gnats' - Syntax check only. - - `-gnatt' - Tree output file to be generated. - - `-gnatT nnn' - Set time slice to specified number of microseconds - - `-gnatu' - List units for this compilation. - - `-gnatU' - Tag all error messages with the unique string "error:" - - `-gnatv' - Verbose mode. Full error output with source lines to `stdout'. - - `-gnatV' - Control level of validity checking. See separate section describing - this feature. - - `-gnatwxxxXXX' - Warning mode where XXX is a string of options describing the exact - warnings that are enabled or disabled. See separate section on - warning control. - - `-gnatWE' - Wide character encoding method (E=n/h/u/s/e/8). - - `-gnatx' - Suppress generation of cross-reference information. - - `-gnaty' - Enable built-in style checks. See separate section describing this - feature. - - `-gnatzM' - Distribution stub generation and compilation (M=r/c for - receiver/caller stubs). - - `-gnat83' - Enforce Ada 83 restrictions. - - `-pass-exit-codes' - Catch exit codes from the compiler and use the most meaningful as - exit status. - - You may combine a sequence of GNAT switches into a single switch. For - example, the combined switch - - -gnatofi3 - - is equivalent to specifying the following sequence of switches: - - -gnato -gnatf -gnati3 - - The following restrictions apply to the combination of switches in this - manner: - - * The switch `-gnatc' if combined with other switches must come - first in the string. - - * The switch `-gnats' if combined with other switches must come - first in the string. - - * Once a "y" appears in the string (that is a use of the `-gnaty' - switch), then all further characters in the switch are interpreted - as style modifiers (see description of `-gnaty'). - - * Once a "d" appears in the string (that is a use of the `-gnatd' - switch), then all further characters in the switch are interpreted - as debug flags (see description of `-gnatd'). - - * Once a "w" appears in the string (that is a use of the `-gnatw' - switch), then all further characters in the switch are interpreted - as warning mode modifiers (see description of `-gnatw'). - - * Once a "V" appears in the string (that is a use of the `-gnatV' - switch), then all further characters in the switch are interpreted - as validity checking options (see description of `-gnatV'). - - -  - File: gnat_ug_unx.info, Node: Output and Error Message Control, Next: Debugging and Assertion Control, Up: Switches for gcc - - Output and Error Message Control - -------------------------------- - - The standard default format for error messages is called "brief format." - Brief format messages are written to `stderr' (the standard error file) - and have the following form: - - e.adb:3:04: Incorrect spelling of keyword "function" - e.adb:4:20: ";" should be "is" - - The first integer after the file name is the line number in the file, - and the second integer is the column number within the line. `glide' - can parse the error messages and point to the referenced character. - The following switches provide control over the error message format: - - `-gnatv' - The v stands for verbose. The effect of this setting is to write - long-format error messages to `stdout' (the standard output file. - The same program compiled with the `-gnatv' switch would generate: - - 3. funcion X (Q : Integer) - | - >>> Incorrect spelling of keyword "function" - 4. return Integer; - | - >>> ";" should be "is" - - The vertical bar indicates the location of the error, and the `>>>' - prefix can be used to search for error messages. When this switch - is used the only source lines output are those with errors. - - `-gnatl' - The `l' stands for list. This switch causes a full listing of the - file to be generated. The output might look as follows: - - 1. procedure E is - 2. V : Integer; - 3. funcion X (Q : Integer) - | - >>> Incorrect spelling of keyword "function" - 4. return Integer; - | - >>> ";" should be "is" - 5. begin - 6. return Q + Q; - 7. end; - 8. begin - 9. V := X + X; - 10.end E; - - When you specify the `-gnatv' or `-gnatl' switches and standard - output is redirected, a brief summary is written to `stderr' - (standard error) giving the number of error messages and warning - messages generated. - - `-gnatU' - This switch forces all error messages to be preceded by the unique - string "error:". This means that error messages take a few more - characters in space, but allows easy searching for and - identification of error messages. - - `-gnatb' - The `b' stands for brief. This switch causes GNAT to generate the - brief format error messages to `stderr' (the standard error file) - as well as the verbose format message or full listing (which as - usual is written to `stdout' (the standard output file). - - `-gnatmN' - The `m' stands for maximum. N is a decimal integer in the range - of 1 to 999 and limits the number of error messages to be - generated. For example, using `-gnatm2' might yield - - e.adb:3:04: Incorrect spelling of keyword "function" - e.adb:5:35: missing ".." - fatal error: maximum errors reached - compilation abandoned - - `-gnatf' - The `f' stands for full. Normally, the compiler suppresses error - messages that are likely to be redundant. This switch causes all - error messages to be generated. In particular, in the case of - references to undefined variables. If a given variable is - referenced several times, the normal format of messages is - e.adb:7:07: "V" is undefined (more references follow) - - where the parenthetical comment warns that there are additional - references to the variable `V'. Compiling the same program with the - `-gnatf' switch yields - - e.adb:7:07: "V" is undefined - e.adb:8:07: "V" is undefined - e.adb:8:12: "V" is undefined - e.adb:8:16: "V" is undefined - e.adb:9:07: "V" is undefined - e.adb:9:12: "V" is undefined - - `-gnatq' - The `q' stands for quit (really "don't quit"). In normal - operation mode, the compiler first parses the program and - determines if there are any syntax errors. If there are, - appropriate error messages are generated and compilation is - immediately terminated. This switch tells GNAT to continue with - semantic analysis even if syntax errors have been found. This may - enable the detection of more errors in a single run. On the other - hand, the semantic analyzer is more likely to encounter some - internal fatal error when given a syntactically invalid tree. - - `-gnatQ' - In normal operation mode, the `ali' file is not generated if any - illegalities are detected in the program. The use of `-gnatQ' - forces generation of the `ali' file. This file is marked as being - in error, so it cannot be used for binding purposes, but it does - contain reasonably complete cross-reference information, and thus - may be useful for use by tools (e.g. semantic browsing tools or - integrated development environments) that are driven from the - `ali' file. - - In addition, if `-gnatt' is also specified, then the tree file is - generated even if there are illegalities. It may be useful in this - case to also specify `-gnatq' to ensure that full semantic - processing occurs. The resulting tree file can be processed by - ASIS, for the purpose of providing partial information about - illegal units, but if the error causes the tree to be badly - malformed, then ASIS may crash during the analysis. - - In addition to error messages, which correspond to illegalities as - defined in the Ada 95 Reference Manual, the compiler detects two kinds - of warning situations. - - First, the compiler considers some constructs suspicious and - generates a warning message to alert you to a possible error. Second, - if the compiler detects a situation that is sure to raise an exception - at run time, it generates a warning message. The following shows an - example of warning messages: - e.adb:4:24: warning: creation of object may raise Storage_Error - e.adb:10:17: warning: static value out of range - e.adb:10:17: warning: "Constraint_Error" will be raised at run time - - GNAT considers a large number of situations as appropriate for the - generation of warning messages. As always, warnings are not definite - indications of errors. For example, if you do an out-of-range - assignment with the deliberate intention of raising a - `Constraint_Error' exception, then the warning that may be issued does - not indicate an error. Some of the situations for which GNAT issues - warnings (at least some of the time) are given in the following list, - which is not necessarily complete. - - * Possible infinitely recursive calls - - * Out-of-range values being assigned - - * Possible order of elaboration problems - - * Unreachable code - - * Fixed-point type declarations with a null range - - * Variables that are never assigned a value - - * Variables that are referenced before being initialized - - * Task entries with no corresponding accept statement - - * Duplicate accepts for the same task entry in a select - - * Objects that take too much storage - - * Unchecked conversion between types of differing sizes - - * Missing return statements along some execution paths in a function - - * Incorrect (unrecognized) pragmas - - * Incorrect external names - - * Allocation from empty storage pool - - * Potentially blocking operations in protected types - - * Suspicious parenthesization of expressions - - * Mismatching bounds in an aggregate - - * Attempt to return local value by reference - - * Unrecognized pragmas - - * Premature instantiation of a generic body - - * Attempt to pack aliased components - - * Out of bounds array subscripts - - * Wrong length on string assignment - - * Violations of style rules if style checking is enabled - - * Unused with clauses - - * Bit_Order usage that does not have any effect - - * Compile time biased rounding of floating-point constant - - * Standard.Duration used to resolve universal fixed expression - - * Dereference of possibly null value - - * Declaration that is likely to cause storage error - - * Internal GNAT unit with'ed by application unit - - * Values known to be out of range at compile time - - * Unreferenced labels and variables - - * Address overlays that could clobber memory - - * Unexpected initialization when address clause present - - * Bad alignment for address clause - - * Useless type conversions - - * Redundant assignment statements - - * Accidental hiding of name by child unit - - * Unreachable code - - * Access before elaboration detected at compile time - - * A range in a `for' loop that is known to be null or might be null - - - The following switches are available to control the handling of warning - messages: - - `-gnatwa (activate all optional errors)' - This switch activates most optional warning messages, see - remaining list in this section for details on optional warning - messages that can be individually controlled. The warnings that - are not turned on by this switch are `-gnatwb' (biased rounding), - `-gnatwd' (implicit dereferencing), and `-gnatwh' (hiding). All - other optional warnings are turned on. - - `-gnatwA (suppress all optional errors)' - This switch suppresses all optional warning messages, see - remaining list in this section for details on optional warning - messages that can be individually controlled. - - `-gnatwb (activate warnings on biased rounding)' - If a static floating-point expression has a value that is exactly - half way between two adjacent machine numbers, then the rules of - Ada (Ada Reference Manual, section 4.9(38)) require that this - rounding be done away from zero, even if the normal unbiased - rounding rules at run time would require rounding towards zero. - This warning message alerts you to such instances where - compile-time rounding and run-time rounding are not equivalent. If - it is important to get proper run-time rounding, then you can - force this by making one of the operands into a variable. The - default is that such warnings are not generated. Note that - `-gnatwa' does not affect the setting of this warning option. - - `-gnatwB (suppress warnings on biased rounding)' - This switch disables warnings on biased rounding. - - `-gnatwc (activate warnings on conditionals)' - This switch activates warnings for conditional expressions used in - tests that are known to be True or False at compile time. The - default is that such warnings are not generated. This warning can - also be turned on using `-gnatwa'. - - `-gnatwC (suppress warnings on conditionals)' - This switch suppresses warnings for conditional expressions used in - tests that are known to be True or False at compile time. - - `-gnatwd (activate warnings on implicit dereferencing)' - If this switch is set, then the use of a prefix of an access type - in an indexed component, slice, or selected component without an - explicit `.all' will generate a warning. With this warning - enabled, access checks occur only at points where an explicit - `.all' appears in the source code (assuming no warnings are - generated as a result of this switch). The default is that such - warnings are not generated. Note that `-gnatwa' does not affect - the setting of this warning option. - - `-gnatwD (suppress warnings on implicit dereferencing)' - This switch suppresses warnings for implicit deferences in indexed - components, slices, and selected components. - - `-gnatwe (treat warnings as errors)' - This switch causes warning messages to be treated as errors. The - warning string still appears, but the warning messages are counted - as errors, and prevent the generation of an object file. - - `-gnatwf (activate warnings on unreferenced formals)' - This switch causes a warning to be generated if a formal parameter - is not referenced in the body of the subprogram. This warning can - also be turned on using `-gnatwa' or `-gnatwu'. - - `-gnatwF (suppress warnings on unreferenced formals)' - This switch suppresses warnings for unreferenced formal - parameters. Note that the combination `-gnatwu' followed by - `-gnatwF' has the effect of warning on unreferenced entities other - than subprogram formals. - - `-gnatwh (activate warnings on hiding)' - This switch activates warnings on hiding declarations. A - declaration is considered hiding if it is for a non-overloadable - entity, and it declares an entity with the same name as some other - entity that is directly or use-visible. The default is that such - warnings are not generated. Note that `-gnatwa' does not affect - the setting of this warning option. - - `-gnatwH (suppress warnings on hiding)' - This switch suppresses warnings on hiding declarations. - - `-gnatwi (activate warnings on implementation units).' - This switch activates warnings for a `with' of an internal GNAT - implementation unit, defined as any unit from the `Ada', - `Interfaces', `GNAT', or `System' hierarchies that is not - documented in either the Ada Reference Manual or the GNAT - Programmer's Reference Manual. Such units are intended only for - internal implementation purposes and should not be `with''ed by - user programs. The default is that such warnings are generated - This warning can also be turned on using `-gnatwa'. - - `-gnatwI (disable warnings on implementation units).' - This switch disables warnings for a `with' of an internal GNAT - implementation unit. - - `-gnatwl (activate warnings on elaboration pragmas)' - This switch activates warnings on missing pragma Elaborate_All - statements. See the section in this guide on elaboration checking - for details on when such pragma should be used. The default is - that such warnings are not generated. This warning can also be - turned on using `-gnatwa'. - - `-gnatwL (suppress warnings on elaboration pragmas)' - This switch suppresses warnings on missing pragma Elaborate_All - statements. See the section in this guide on elaboration checking - for details on when such pragma should be used. - - `-gnatwo (activate warnings on address clause overlays)' - This switch activates warnings for possibly unintended - initialization effects of defining address clauses that cause one - variable to overlap another. The default is that such warnings are - generated. This warning can also be turned on using `-gnatwa'. - - `-gnatwO (suppress warnings on address clause overlays)' - This switch suppresses warnings on possibly unintended - initialization effects of defining address clauses that cause one - variable to overlap another. - - `-gnatwp (activate warnings on ineffective pragma Inlines)' - This switch activates warnings for failure of front end inlining - (activated by `-gnatN') to inline a particular call. There are - many reasons for not being able to inline a call, including most - commonly that the call is too complex to inline. This warning can - also be turned on using `-gnatwa'. - - `-gnatwP (suppress warnings on ineffective pragma Inlines)' - This switch suppresses warnings on ineffective pragma Inlines. If - the inlining mechanism cannot inline a call, it will simply ignore - the request silently. - - `-gnatwr (activate warnings on redundant constructs)' - This switch activates warnings for redundant constructs. The - following is the current list of constructs regarded as redundant: - This warning can also be turned on using `-gnatwa'. - - * Assignment of an item to itself. - - * Type conversion that converts an expression to its own type. - - * Use of the attribute `Base' where `typ'Base' is the same as - `typ'. - - * Use of pragma `Pack' when all components are placed by a - record representation clause. - - `-gnatwR (suppress warnings on redundant constructs)' - This switch suppresses warnings for redundant constructs. - - `-gnatws (suppress all warnings)' - This switch completely suppresses the output of all warning - messages from the GNAT front end. Note that it does not suppress - warnings from the `gcc' back end. To suppress these back end - warnings as well, use the switch `-w' in addition to `-gnatws'. - - `-gnatwu (activate warnings on unused entities)' - This switch activates warnings to be generated for entities that - are defined but not referenced, and for units that are `with''ed - and not referenced. In the case of packages, a warning is also - generated if no entities in the package are referenced. This means - that if the package is referenced but the only references are in - `use' clauses or `renames' declarations, a warning is still - generated. A warning is also generated for a generic package that - is `with''ed but never instantiated. In the case where a package - or subprogram body is compiled, and there is a `with' on the - corresponding spec that is only referenced in the body, a warning - is also generated, noting that the `with' can be moved to the - body. The default is that such warnings are not generated. This - switch also activates warnings on unreferenced formals (it is - includes the effect of `-gnatwf'). This warning can also be - turned on using `-gnatwa'. - - `-gnatwU (suppress warnings on unused entities)' - This switch suppresses warnings for unused entities and packages. - It also turns off warnings on unreferenced formals (and thus - includes the effect of `-gnatwF'). - - A string of warning parameters can be used in the same parameter. - For example: - - -gnatwaLe - - Would turn on all optional warnings except for elaboration pragma - warnings, and also specify that warnings should be treated as - errors. - - `-w' - This switch suppresses warnings from the `gcc' backend. It may be - used in conjunction with `-gnatws' to ensure that all warnings are - suppressed during the entire compilation process. - -  - File: gnat_ug_unx.info, Node: Debugging and Assertion Control, Next: Run-Time Checks, Prev: Output and Error Message Control, Up: Switches for gcc - - Debugging and Assertion Control - ------------------------------- - - `-gnata' - The pragmas `Assert' and `Debug' normally have no effect and are - ignored. This switch, where `a' stands for assert, causes `Assert' - and `Debug' pragmas to be activated. - - The pragmas have the form: - - pragma Assert (BOOLEAN-EXPRESSION [, - STATIC-STRING-EXPRESSION]) - pragma Debug (PROCEDURE CALL) - - The `Assert' pragma causes BOOLEAN-EXPRESSION to be tested. If - the result is `True', the pragma has no effect (other than - possible side effects from evaluating the expression). If the - result is `False', the exception `Assert_Failure' declared in the - package `System.Assertions' is raised (passing - STATIC-STRING-EXPRESSION, if present, as the message associated - with the exception). If no string expression is given the default - is a string giving the file name and line number of the pragma. - - The `Debug' pragma causes PROCEDURE to be called. Note that - `pragma Debug' may appear within a declaration sequence, allowing - debugging procedures to be called between declarations. - -  - File: gnat_ug_unx.info, Node: Validity Checking, Next: Style Checking, Prev: Run-Time Control, Up: Switches for gcc - - Validity Checking - ----------------- - - The Ada 95 Reference Manual has specific requirements for checking for - invalid values. In particular, RM 13.9.1 requires that the evaluation - of invalid values (for example from unchecked conversions), not result - in erroneous execution. In GNAT, the result of such an evaluation in - normal default mode is to either use the value unmodified, or to raise - Constraint_Error in those cases where use of the unmodified value would - cause erroneous execution. The cases where unmodified values might lead - to erroneous execution are case statements (where a wild jump might - result from an invalid value), and subscripts on the left hand side - (where memory corruption could occur as a result of an invalid value). - - The `-gnatVx' switch allows more control over the validity checking - mode. The `x' argument here is a string of letters which control which - validity checks are performed in addition to the default checks - described above. - - * `-gnatVc' Validity checks for copies - - The right hand side of assignments, and the initializing values of - object declarations are validity checked. - - * `-gnatVd' Default (RM) validity checks - - Some validity checks are done by default following normal Ada - semantics (RM 13.9.1 (9-11)). A check is done in case statements - that the expression is within the range of the subtype. If it is - not, Constraint_Error is raised. For assignments to array - components, a check is done that the expression used as index is - within the range. If it is not, Constraint_Error is raised. Both - these validity checks may be turned off using switch `-gnatVD'. - They are turned on by default. If `-gnatVD' is specified, a - subsequent switch `-gnatVd' will leave the checks turned on. - Switch `-gnatVD' should be used only if you are sure that all such - expressions have valid values. If you use this switch and invalid - values are present, then the program is erroneous, and wild jumps - or memory overwriting may occur. - - * `-gnatVi' Validity checks for `in' mode parameters - - Arguments for parameters of mode `in' are validity checked in - function and procedure calls at the point of call. - - * `-gnatVm' Validity checks for `in out' mode parameters - - Arguments for parameters of mode `in out' are validity checked in - procedure calls at the point of call. The `'m'' here stands for - modify, since this concerns parameters that can be modified by the - call. Note that there is no specific option to test `out' - parameters, but any reference within the subprogram will be tested - in the usual manner, and if an invalid value is copied back, any - reference to it will be subject to validity checking. - - * `-gnatVo' Validity checks for operator and attribute operands - - Arguments for predefined operators and attributes are validity - checked. This includes all operators in package `Standard', the - shift operators defined as intrinsic in package `Interfaces' and - operands for attributes such as `Pos'. - - * `-gnatVr' Validity checks for function returns - - The expression in `return' statements in functions is validity - checked. - - * `-gnatVs' Validity checks for subscripts - - All subscripts expressions are checked for validity, whether they - appear on the right side or left side (in default mode only left - side subscripts are validity checked). - - * `-gnatVt' Validity checks for tests - - Expressions used as conditions in `if', `while' or `exit' - statements are checked, as well as guard expressions in entry - calls. - - * `-gnatVf' Validity checks for floating-point values - - In the absence of this switch, validity checking occurs only for - discrete values. If `-gnatVf' is specified, then validity checking - also applies for floating-point values, and NaN's and infinities - are considered invalid, as well as out of range values for - constrained types. Note that this means that standard `IEEE' - infinity mode is not allowed. The exact contexts in which - floating-point values are checked depends on the setting of other - options. For example `-gnatVif' or `-gnatVfi' (the order does not - matter) specifies that floating-point parameters of mode `in' - should be validity checked. - - * `-gnatVa' All validity checks - - All the above validity checks are turned on. That is `-gnatVa' is - equivalent to `gnatVcdfimorst'. - - * `-gnatVn' No validity checks - - This switch turns off all validity checking, including the default - checking for case statements and left hand side subscripts. Note - that the use of the switch `-gnatp' supresses all run-time checks, - including validity checks, and thus implies `-gnatVn'. - - - The `-gnatV' switch may be followed by a string of letters to turn on - a series of validity checking options. For example, `-gnatVcr' specifies - that in addition to the default validity checking, copies and function - return expressions be validity checked. In order to make it easier to - specify a set of options, the upper case letters `CDFIMORST' may be - used to turn off the corresponding lower case option, so for example - `-gnatVaM' turns on all validity checking options except for checking - of `in out' procedure arguments. - - The specification of additional validity checking generates extra - code (and in the case of `-gnatva' the code expansion can be - substantial. However, these additional checks can be very useful in - smoking out cases of uninitialized variables, incorrect use of - unchecked conversion, and other errors leading to invalid values. The - use of pragma `Initialize_Scalars' is useful in conjunction with the - extra validity checking, since this ensures that wherever possible - uninitialized variables have invalid values. - - See also the pragma `Validity_Checks' which allows modification of - the validity checking mode at the program source level, and also allows - for temporary disabling of validity checks. - -  - File: gnat_ug_unx.info, Node: Style Checking, Next: Using gcc for Syntax Checking, Prev: Validity Checking, Up: Switches for gcc - - Style Checking - -------------- - - The -gnatyX switch causes the compiler to enforce specified style - rules. A limited set of style rules has been used in writing the GNAT - sources themselves. This switch allows user programs to activate all or - some of these checks. If the source program fails a specified style - check, an appropriate warning message is given, preceded by the - character sequence "(style)". The string X is a sequence of letters or - digits indicating the particular style checks to be performed. The - following checks are defined: - - `1-9 (specify indentation level)' - If a digit from 1-9 appears in the string after `-gnaty' then - proper indentation is checked, with the digit indicating the - indentation level required. The general style of required - indentation is as specified by the examples in the Ada Reference - Manual. Full line comments must be aligned with the `--' starting - on a column that is a multiple of the alignment level. - - `a (check attribute casing)' - If the letter a appears in the string after `-gnaty' then - attribute names, including the case of keywords such as `digits' - used as attributes names, must be written in mixed case, that is, - the initial letter and any letter following an underscore must be - uppercase. All other letters must be lowercase. - - `b (blanks not allowed at statement end)' - If the letter b appears in the string after `-gnaty' then trailing - blanks are not allowed at the end of statements. The purpose of - this rule, together with h (no horizontal tabs), is to enforce a - canonical format for the use of blanks to separate source tokens. - - `c (check comments)' - If the letter c appears in the string after `-gnaty' then comments - must meet the following set of rules: - - * The "-" that starts the column must either start in column - one, or else at least one blank must precede this sequence. - - * Comments that follow other tokens on a line must have at - least one blank following the "-" at the start of the comment. - - * Full line comments must have two blanks following the "-" - that starts the comment, with the following exceptions. - - * A line consisting only of the "-" characters, possibly - preceded by blanks is permitted. - - * A comment starting with "-x" where x is a special character - is permitted. This alows proper processing of the output - generated by specialized tools including `gnatprep' (where -! - is used) and the SPARK annnotation language (where -# is - used). For the purposes of this rule, a special character is - defined as being in one of the ASCII ranges 16#21#..16#2F# or - 16#3A#..16#3F#. - - * A line consisting entirely of minus signs, possibly preceded - by blanks, is permitted. This allows the construction of box - comments where lines of minus signs are used to form the top - and bottom of the box. - - * If a comment starts and ends with "-" is permitted as long as - at least one blank follows the initial "-". Together with the - preceding rule, this allows the construction of box comments, - as shown in the following example: - --------------------------- - -- This is a box comment -- - -- with two text lines. -- - --------------------------- - - `e (check end/exit labels)' - If the letter e appears in the string after `-gnaty' then optional - labels on `end' statements ending subprograms and on `exit' - statements exiting named loops, are required to be present. - - `f (no form feeds or vertical tabs)' - If the letter f appears in the string after `-gnaty' then neither - form feeds nor vertical tab characters are not permitted in the - source text. - - `h (no horizontal tabs)' - If the letter h appears in the string after `-gnaty' then - horizontal tab characters are not permitted in the source text. - Together with the b (no blanks at end of line) check, this - enforces a canonical form for the use of blanks to separate source - tokens. - - `i (check if-then layout)' - If the letter i appears in the string after `-gnaty', then the - keyword `then' must appear either on the same line as - corresponding `if', or on a line on its own, lined up under the - `if' with at least one non-blank line in between containing all or - part of the condition to be tested. - - `k (check keyword casing)' - If the letter k appears in the string after `-gnaty' then all - keywords must be in lower case (with the exception of keywords - such as `digits' used as attribute names to which this check does - not apply). - - `l (check layout)' - If the letter l appears in the string after `-gnaty' then layout - of statement and declaration constructs must follow the - recommendations in the Ada Reference Manual, as indicated by the - form of the syntax rules. For example an `else' keyword must be - lined up with the corresponding `if' keyword. - - There are two respects in which the style rule enforced by this - check option are more liberal than those in the Ada Reference - Manual. First in the case of record declarations, it is - permissible to put the `record' keyword on the same line as the - `type' keyword, and then the `end' in `end record' must line up - under `type'. For example, either of the following two layouts is - acceptable: - - type q is record - a : integer; - b : integer; - end record; - - type q is - record - a : integer; - b : integer; - end record; - - Second, in the case of a block statement, a permitted alternative - is to put the block label on the same line as the `declare' or - `begin' keyword, and then line the `end' keyword up under the - block label. For example both the following are permitted: - - Block : declare - A : Integer := 3; - begin - Proc (A, A); - end Block; - - Block : - declare - A : Integer := 3; - begin - Proc (A, A); - end Block; - - The same alternative format is allowed for loops. For example, - both of the following are permitted: - - Clear : while J < 10 loop - A (J) := 0; - end loop Clear; - - Clear : - while J < 10 loop - A (J) := 0; - end loop Clear; - - `m (check maximum line length)' - If the letter m appears in the string after `-gnaty' then the - length of source lines must not exceed 79 characters, including - any trailing blanks. The value of 79 allows convenient display on - an 80 character wide device or window, allowing for possible - special treatment of 80 character lines. - - `Mnnn (set maximum line length)' - If the sequence Mnnn, where nnn is a decimal number, appears in - the string after `-gnaty' then the length of lines must not exceed - the given value. - - `n (check casing of entities in Standard)' - If the letter n appears in the string after `-gnaty' then any - identifier from Standard must be cased to match the presentation - in the Ada Reference Manual (for example, `Integer' and - `ASCII.NUL'). - - `o (check order of subprogram bodies)' - If the letter o appears in the string after `-gnaty' then all - subprogram bodies in a given scope (e.g. a package body) must be - in alphabetical order. The ordering rule uses normal Ada rules for - comparing strings, ignoring casing of letters, except that if - there is a trailing numeric suffix, then the value of this suffix - is used in the ordering (e.g. Junk2 comes before Junk10). - - `p (check pragma casing)' - If the letter p appears in the string after `-gnaty' then pragma - names must be written in mixed case, that is, the initial letter - and any letter following an underscore must be uppercase. All - other letters must be lowercase. - - `r (check references)' - If the letter r appears in the string after `-gnaty' then all - identifier references must be cased in the same way as the - corresponding declaration. No specific casing style is imposed on - identifiers. The only requirement is for consistency of references - with declarations. - - `s (check separate specs)' - If the letter s appears in the string after `-gnaty' then separate - declarations ("specs") are required for subprograms (a body is not - allowed to serve as its own declaration). The only exception is - that parameterless library level procedures are not required to - have a separate declaration. This exception covers the most - frequent form of main program procedures. - - `t (check token spacing)' - If the letter t appears in the string after `-gnaty' then the - following token spacing rules are enforced: - - * The keywords `abs' and `not' must be followed by a space. - - * The token `=>' must be surrounded by spaces. - - * The token `<>' must be preceded by a space or a left - parenthesis. - - * Binary operators other than `**' must be surrounded by spaces. - There is no restriction on the layout of the `**' binary - operator. - - * Colon must be surrounded by spaces. - - * Colon-equal (assignment) must be surrounded by spaces. - - * Comma must be the first non-blank character on the line, or be - immediately preceded by a non-blank character, and must be - followed by a space. - - * If the token preceding a left paren ends with a letter or - digit, then a space must separate the two tokens. - - * A right parenthesis must either be the first non-blank - character on a line, or it must be preceded by a non-blank - character. - - * A semicolon must not be preceded by a space, and must not be - followed by a non-blank character. - - * A unary plus or minus may not be followed by a space. - - * A vertical bar must be surrounded by spaces. - - In the above rules, appearing in column one is always permitted, - that is, counts as meeting either a requirement for a required - preceding space, or as meeting a requirement for no preceding - space. - - Appearing at the end of a line is also always permitted, that is, - counts as meeting either a requirement for a following space, or - as meeting a requirement for no following space. - - If any of these style rules is violated, a message is generated giving - details on the violation. The initial characters of such messages are - always "(style)". Note that these messages are treated as warning - messages, so they normally do not prevent the generation of an object - file. The `-gnatwe' switch can be used to treat warning messages, - including style messages, as fatal errors. - - The switch `-gnaty' on its own (that is not followed by any letters or - digits), is equivalent to `gnaty3abcefhiklmprst', that is all checking - options are enabled with the exception of -gnatyo, with an indentation - level of 3. This is the standard checking option that is used for the - GNAT sources. - -  - File: gnat_ug_unx.info, Node: Run-Time Checks, Next: Stack Overflow Checking, Prev: Debugging and Assertion Control, Up: Switches for gcc - - Run-Time Checks - --------------- - - If you compile with the default options, GNAT will insert many run-time - checks into the compiled code, including code that performs range - checking against constraints, but not arithmetic overflow checking for - integer operations (including division by zero) or checks for access - before elaboration on subprogram calls. All other run-time checks, as - required by the Ada 95 Reference Manual, are generated by default. The - following `gcc' switches refine this default behavior: - - `-gnatp' - Suppress all run-time checks as though `pragma Suppress - (all_checks') had been present in the source. Validity checks are - also suppressed (in other words `-gnatp' also implies `-gnatVn'. - Use this switch to improve the performance of the code at the - expense of safety in the presence of invalid data or program bugs. - - `-gnato' - Enables overflow checking for integer operations. This causes - GNAT to generate slower and larger executable programs by adding - code to check for overflow (resulting in raising - `Constraint_Error' as required by standard Ada semantics). These - overflow checks correspond to situations in which the true value - of the result of an operation may be outside the base range of the - result type. The following example shows the distinction: - - X1 : Integer := Integer'Last; - X2 : Integer range 1 .. 5 := 5; - ... - X1 := X1 + 1; -- `-gnato' required to catch the Constraint_Error - X2 := X2 + 1; -- range check, `-gnato' has no effect here - - Here the first addition results in a value that is outside the - base range of Integer, and hence requires an overflow check for - detection of the constraint error. The second increment operation - results in a violation of the explicit range constraint, and such - range checks are always performed. Basically the compiler can - assume that in the absence of the `-gnato' switch that any value - of type `xxx' is in range of the base type of `xxx'. - - Note that the `-gnato' switch does not affect the code generated - for any floating-point operations; it applies only to integer - semantics). For floating-point, GNAT has the `Machine_Overflows' - attribute set to `False' and the normal mode of operation is to - generate IEEE NaN and infinite values on overflow or invalid - operations (such as dividing 0.0 by 0.0). - - The reason that we distinguish overflow checking from other kinds - of range constraint checking is that a failure of an overflow - check can generate an incorrect value, but cannot cause erroneous - behavior. This is unlike the situation with a constraint check on - an array subscript, where failure to perform the check can result - in random memory description, or the range check on a case - statement, where failure to perform the check can cause a wild - jump. - - Note again that `-gnato' is off by default, so overflow checking is - not performed in default mode. This means that out of the box, - with the default settings, GNAT does not do all the checks - expected from the language description in the Ada Reference - Manual. If you want all constraint checks to be performed, as - described in this Manual, then you must explicitly use the -gnato - switch either on the `gnatmake' or `gcc' command. - - `-gnatE' - Enables dynamic checks for access-before-elaboration on subprogram - calls and generic instantiations. For full details of the effect - and use of this switch, *Note Compiling Using gcc::. - - The setting of these switches only controls the default setting of the - checks. You may modify them using either `Suppress' (to remove checks) - or `Unsuppress' (to add back suppressed checks) pragmas in the program - source. - -  - File: gnat_ug_unx.info, Node: Stack Overflow Checking, Next: Run-Time Control, Prev: Run-Time Checks, Up: Switches for gcc - - Stack Overflow Checking - ----------------------- - - For most operating systems, `gcc' does not perform stack overflow - checking by default. This means that if the main environment task or - some other task exceeds the available stack space, then unpredictable - behavior will occur. - - To activate stack checking, compile all units with the gcc option - `-fstack-check'. For example: - - gcc -c -fstack-check package1.adb - - Units compiled with this option will generate extra instructions to - check that any use of the stack (for procedure calls or for declaring - local variables in declare blocks) do not exceed the available stack - space. If the space is exceeded, then a `Storage_Error' exception is - raised. - - For declared tasks, the stack size is always controlled by the size - given in an applicable `Storage_Size' pragma (or is set to the default - size if no pragma is used. - - For the environment task, the stack size depends on system defaults - and is unknown to the compiler. The stack may even dynamically grow on - some systems, precluding the normal Ada semantics for stack overflow. - In the worst case, unbounded stack usage, causes unbounded stack - expansion resulting in the system running out of virtual memory. - - The stack checking may still work correctly if a fixed size stack is - allocated, but this cannot be guaranteed. To ensure that a clean - exception is signalled for stack overflow, set the environment variable - `GNAT_STACK_LIMIT' to indicate the maximum stack area that can be used, - as in: - - SET GNAT_STACK_LIMIT 1600 - - The limit is given in kilobytes, so the above declaration would set the - stack limit of the environment task to 1.6 megabytes. Note that the - only purpose of this usage is to limit the amount of stack used by the - environment task. If it is necessary to increase the amount of stack - for the environment task, then this is an operating systems issue, and - must be addressed with the appropriate operating systems commands. - -  - File: gnat_ug_unx.info, Node: Run-Time Control, Next: Validity Checking, Prev: Stack Overflow Checking, Up: Switches for gcc - - Run-Time Control - ---------------- - - `-gnatT nnn' - The `gnatT' switch can be used to specify the time-slicing value - to be used for task switching between equal priority tasks. The - value `nnn' is given in microseconds as a decimal integer. - - Setting the time-slicing value is only effective if the underlying - thread control system can accommodate time slicing. Check the - documentation of your operating system for details. Note that the - time-slicing value can also be set by use of pragma `Time_Slice' - or by use of the `t' switch in the gnatbind step. The pragma - overrides a command line argument if both are present, and the `t' - switch for gnatbind overrides both the pragma and the `gcc' - command line switch. - -  - File: gnat_ug_unx.info, Node: Using gcc for Syntax Checking, Next: Using gcc for Semantic Checking, Prev: Style Checking, Up: Switches for gcc - - Using `gcc' for Syntax Checking - ------------------------------- - - `-gnats' - The `s' stands for syntax. - - Run GNAT in syntax checking only mode. For example, the command - - $ gcc -c -gnats x.adb - - compiles file `x.adb' in syntax-check-only mode. You can check a - series of files in a single command , and can use wild cards to - specify such a group of files. Note that you must specify the - `-c' (compile only) flag in addition to the `-gnats' flag. . - - You may use other switches in conjunction with `-gnats'. In - particular, `-gnatl' and `-gnatv' are useful to control the format - of any generated error messages. - - The output is simply the error messages, if any. No object file or - ALI file is generated by a syntax-only compilation. Also, no units - other than the one specified are accessed. For example, if a unit - `X' `with''s a unit `Y', compiling unit `X' in syntax check only - mode does not access the source file containing unit `Y'. - - Normally, GNAT allows only a single unit in a source file. - However, this restriction does not apply in syntax-check-only - mode, and it is possible to check a file containing multiple - compilation units concatenated together. This is primarily used by - the `gnatchop' utility (*note Renaming Files Using gnatchop::). - -  - File: gnat_ug_unx.info, Node: Using gcc for Semantic Checking, Next: Compiling Ada 83 Programs, Prev: Using gcc for Syntax Checking, Up: Switches for gcc - - Using `gcc' for Semantic Checking - --------------------------------- - - `-gnatc' - The `c' stands for check. Causes the compiler to operate in - semantic check mode, with full checking for all illegalities - specified in the Ada 95 Reference Manual, but without generation - of any object code (no object file is generated). - - Because dependent files must be accessed, you must follow the GNAT - semantic restrictions on file structuring to operate in this mode: - - * The needed source files must be accessible (*note Search - Paths and the Run-Time Library (RTL)::). - - * Each file must contain only one compilation unit. - - * The file name and unit name must match (*note File Naming - Rules::). - - The output consists of error messages as appropriate. No object - file is generated. An `ALI' file is generated for use in the - context of cross-reference tools, but this file is marked as not - being suitable for binding (since no object file is generated). - The checking corresponds exactly to the notion of legality in the - Ada 95 Reference Manual. - - Any unit can be compiled in semantics-checking-only mode, including - units that would not normally be compiled (subunits, and - specifications where a separate body is present). - -  - File: gnat_ug_unx.info, Node: Compiling Ada 83 Programs, Next: Character Set Control, Prev: Using gcc for Semantic Checking, Up: Switches for gcc - - Compiling Ada 83 Programs - ------------------------- - - `-gnat83' - Although GNAT is primarily an Ada 95 compiler, it accepts this - switch to specify that an Ada 83 program is to be compiled in - Ada83 mode. If you specify this switch, GNAT rejects most Ada 95 - extensions and applies Ada 83 semantics where this can be done - easily. It is not possible to guarantee this switch does a perfect - job; for example, some subtle tests, such as are found in earlier - ACVC tests (that have been removed from the ACVC suite for Ada - 95), may not compile correctly. However, for most purposes, using - this switch should help to ensure that programs that compile - correctly under the `-gnat83' switch can be ported easily to an - Ada 83 compiler. This is the main use of the switch. - - With few exceptions (most notably the need to use `<>' on - unconstrained generic formal parameters, the use of the new Ada 95 - keywords, and the use of packages with optional bodies), it is not - necessary to use the `-gnat83' switch when compiling Ada 83 - programs, because, with rare exceptions, Ada 95 is upwardly - compatible with Ada 83. This means that a correct Ada 83 program - is usually also a correct Ada 95 program. - -  - File: gnat_ug_unx.info, Node: Character Set Control, Next: File Naming Control, Prev: Compiling Ada 83 Programs, Up: Switches for gcc - - Character Set Control - --------------------- - - `-gnatiC' - Normally GNAT recognizes the Latin-1 character set in source - program identifiers, as described in the Ada 95 Reference Manual. - This switch causes GNAT to recognize alternate character sets in - identifiers. C is a single character indicating the character - set, as follows: - - `1' - Latin-1 identifiers - - `2' - Latin-2 letters allowed in identifiers - - `3' - Latin-3 letters allowed in identifiers - - `4' - Latin-4 letters allowed in identifiers - - `5' - Latin-5 (Cyrillic) letters allowed in identifiers - - `9' - Latin-9 letters allowed in identifiers - - `p' - IBM PC letters (code page 437) allowed in identifiers - - `8' - IBM PC letters (code page 850) allowed in identifiers - - `f' - Full upper-half codes allowed in identifiers - - `n' - No upper-half codes allowed in identifiers - - `w' - Wide-character codes (that is, codes greater than 255) - allowed in identifiers - - *Note Foreign Language Representation::, for full details on the - implementation of these character sets. - - `-gnatWE' - Specify the method of encoding for wide characters. E is one of - the following: - - `h' - Hex encoding (brackets coding also recognized) - - `u' - Upper half encoding (brackets encoding also recognized) - - `s' - Shift/JIS encoding (brackets encoding also recognized) - - `e' - EUC encoding (brackets encoding also recognized) - - `8' - UTF-8 encoding (brackets encoding also recognized) - - `b' - Brackets encoding only (default value) For full details on - the these encoding methods see *Note Wide Character Encodings::. - Note that brackets coding is always accepted, even if one of the - other options is specified, so for example `-gnatW8' specifies - that both brackets and `UTF-8' encodings will be recognized. The - units that are with'ed directly or indirectly will be scanned - using the specified representation scheme, and so if one of the - non-brackets scheme is used, it must be used consistently - throughout the program. However, since brackets encoding is always - recognized, it may be conveniently used in standard libraries, - allowing these libraries to be used with any of the available - coding schemes. scheme. If no `-gnatW?' parameter is present, - then the default representation is Brackets encoding only. - - Note that the wide character representation that is specified - (explicitly or by default) for the main program also acts as the - default encoding used for Wide_Text_IO files if not specifically - overridden by a WCEM form parameter. - -  - File: gnat_ug_unx.info, Node: File Naming Control, Next: Subprogram Inlining Control, Prev: Character Set Control, Up: Switches for gcc - - File Naming Control - ------------------- - - `-gnatkN' - Activates file name "krunching". N, a decimal integer in the range - 1-999, indicates the maximum allowable length of a file name (not - including the `.ads' or `.adb' extension). The default is not to - enable file name krunching. - - For the source file naming rules, *Note File Naming Rules::. - -  - File: gnat_ug_unx.info, Node: Subprogram Inlining Control, Next: Auxiliary Output Control, Prev: File Naming Control, Up: Switches for gcc - - Subprogram Inlining Control - --------------------------- - - `-gnatn' - The `n' here is intended to suggest the first syllable of the word - "inline". GNAT recognizes and processes `Inline' pragmas. - However, for the inlining to actually occur, optimization must be - enabled. To enable inlining across unit boundaries, this is, - inlining a call in one unit of a subprogram declared in a - `with''ed unit, you must also specify this switch. In the absence - of this switch, GNAT does not attempt inlining across units and - does not need to access the bodies of subprograms for which - `pragma Inline' is specified if they are not in the current unit. - - If you specify this switch the compiler will access these bodies, - creating an extra source dependency for the resulting object file, - and where possible, the call will be inlined. For further details - on when inlining is possible see *Note Inlining of Subprograms::. - - `-gnatN' - The front end inlining activated by this switch is generally more - extensive, and quite often more effective than the standard - `-gnatn' inlining mode. It will also generate additional - dependencies. - -  - File: gnat_ug_unx.info, Node: Auxiliary Output Control, Next: Debugging Control, Prev: Subprogram Inlining Control, Up: Switches for gcc - - Auxiliary Output Control - ------------------------ - - `-gnatt' - Causes GNAT to write the internal tree for a unit to a file (with - the extension `.adt'. This not normally required, but is used by - separate analysis tools. Typically these tools do the necessary - compilations automatically, so you should not have to specify this - switch in normal operation. - - `-gnatu' - Print a list of units required by this compilation on `stdout'. - The listing includes all units on which the unit being compiled - depends either directly or indirectly. - - `-pass-exit-codes' - If this switch is not used, the exit code returned by `gcc' when - compiling multiple files indicates whether all source files have - been successfully used to generate object files or not. - - When `-pass-exit-codes' is used, `gcc' exits with an extended exit - status and allows an integrated development environment to better - react to a compilation failure. Those exit status are: - - 5 - There was an error in at least one source file. - - 3 - At least one source file did not generate an object file. - - 2 - The compiler died unexpectedly (internal error for example). - - 0 - An object file has been generated for every source file. - -  - File: gnat_ug_unx.info, Node: Debugging Control, Next: Units to Sources Mapping Files, Prev: Auxiliary Output Control, Up: Switches for gcc - - Debugging Control - ----------------- - - `-gnatdX' - Activate internal debugging switches. X is a letter or digit, or - string of letters or digits, which specifies the type of debugging - outputs desired. Normally these are used only for internal - development or system debugging purposes. You can find full - documentation for these switches in the body of the `Debug' unit - in the compiler source file `debug.adb'. - - `-gnatG' - This switch causes the compiler to generate auxiliary output - containing a pseudo-source listing of the generated expanded code. - Like most Ada compilers, GNAT works by first transforming the high - level Ada code into lower level constructs. For example, tasking - operations are transformed into calls to the tasking run-time - routines. A unique capability of GNAT is to list this expanded - code in a form very close to normal Ada source. This is very - useful in understanding the implications of various Ada usage on - the efficiency of the generated code. There are many cases in Ada - (e.g. the use of controlled types), where simple Ada statements can - generate a lot of run-time code. By using `-gnatG' you can identify - these cases, and consider whether it may be desirable to modify - the coding approach to improve efficiency. - - The format of the output is very similar to standard Ada source, - and is easily understood by an Ada programmer. The following - special syntactic additions correspond to low level features used - in the generated code that do not have any exact analogies in pure - Ada source form. The following is a partial list of these special - constructions. See the specification of package `Sprint' in file - `sprint.ads' for a full list. - - `new XXX [storage_pool = YYY]' - Shows the storage pool being used for an allocator. - - `at end PROCEDURE-NAME;' - Shows the finalization (cleanup) procedure for a scope. - - `(if EXPR then EXPR else EXPR)' - Conditional expression equivalent to the `x?y:z' construction - in C. - - `TARGET^(SOURCE)' - A conversion with floating-point truncation instead of - rounding. - - `TARGET?(SOURCE)' - A conversion that bypasses normal Ada semantic checking. In - particular enumeration types and fixed-point types are - treated simply as integers. - - `TARGET?^(SOURCE)' - Combines the above two cases. - - `X #/ Y' - `X #mod Y' - `X #* Y' - `X #rem Y' - A division or multiplication of fixed-point values which are - treated as integers without any kind of scaling. - - `free EXPR [storage_pool = XXX]' - Shows the storage pool associated with a `free' statement. - - `freeze TYPENAME [ACTIONS]' - Shows the point at which TYPENAME is frozen, with possible - associated actions to be performed at the freeze point. - - `reference ITYPE' - Reference (and hence definition) to internal type ITYPE. - - `FUNCTION-NAME! (ARG, ARG, ARG)' - Intrinsic function call. - - `LABELNAME : label' - Declaration of label LABELNAME. - - `EXPR && EXPR && EXPR ... && EXPR' - A multiple concatenation (same effect as EXPR & EXPR & EXPR, - but handled more efficiently). - - `[constraint_error]' - Raise the `Constraint_Error' exception. - - `EXPRESSION'reference' - A pointer to the result of evaluating EXPRESSION. - - `TARGET-TYPE!(SOURCE-EXPRESSION)' - An unchecked conversion of SOURCE-EXPRESSION to TARGET-TYPE. - - `[NUMERATOR/DENOMINATOR]' - Used to represent internal real literals (that) have no exact - representation in base 2-16 (for example, the result of - compile time evaluation of the expression 1.0/27.0). - - `-gnatD' - This switch is used in conjunction with `-gnatG' to cause the - expanded source, as described above to be written to files - with names `xxx.dg', where `xxx' is the normal file name, for - example, if the source file name is `hello.adb', then a file - `hello.adb.dg' will be written. The debugging information - generated by the `gcc' `-g' switch will refer to the generated - `xxx.dg' file. This allows you to do source level debugging - using the generated code which is sometimes useful for - complex code, for example to find out exactly which part of a - complex construction raised an exception. This switch also - suppress generation of cross-reference information (see - -gnatx). - - `-gnatC' - In the generated debugging information, and also in the case - of long external names, the compiler uses a compression - mechanism if the name is very long. This compression method - uses a checksum, and avoids trouble on some operating systems - which have difficulty with very long names. The `-gnatC' - switch forces this compression approach to be used on all - external names and names in the debugging information tables. - This reduces the size of the generated executable, at the - expense of making the naming scheme more complex. The - compression only affects the qualification of the name. Thus - a name in the source: - - Very_Long_Package.Very_Long_Inner_Package.Var - - would normally appear in these tables as: - - very_long_package__very_long_inner_package__var - - but if the `-gnatC' switch is used, then the name appears as - - XCb7e0c705__var - - Here b7e0c705 is a compressed encoding of the qualification - prefix. The GNAT Ada aware version of GDB understands these - encoded prefixes, so if this debugger is used, the encoding - is largely hidden from the user of the compiler. - - `-gnatR[0|1|2|3][s]' - This switch controls output from the compiler of a listing showing - representation information for declared types and objects. For - `-gnatR0', no information is output (equivalent to omitting the - `-gnatR' switch). For `-gnatR1' (which is the default, so `-gnatR' - with no parameter has the same effect), size and alignment - information is listed for declared array and record types. For - `-gnatR2', size and alignment information is listed for all - expression information for values that are computed at run time for - variant records. These symbolic expressions have a mostly obvious - format with #n being used to represent the value of the n'th - discriminant. See source files `repinfo.ads/adb' in the `GNAT' - sources for full detalis on the format of `-gnatR3' output. If the - switch is followed by an s (e.g. `-gnatR2s'), then the output is - to a file with the name `file.rep' where file is the name of the - corresponding source file. - - `-gnatx' - Normally the compiler generates full cross-referencing information - in the `ALI' file. This information is used by a number of tools, - including `gnatfind' and `gnatxref'. The -gnatx switch suppresses - this information. This saves some space and may slightly speed up - compilation, but means that these tools cannot be used. - -  - File: gnat_ug_unx.info, Node: Units to Sources Mapping Files, Prev: Debugging Control, Up: Switches for gcc - - Units to Sources Mapping Files - ------------------------------ - - `-gnatemPATH' - A mapping file is a way to communicate to the compiler two - mappings: from unit names to file names (without any directory - information) and from file names to path names (with full - directory information). These mappings are used by the compiler to - short-circuit the path search. - - A mapping file is a sequence of sets of three lines. In each set, - the first line is the unit name, in lower case, with "%s" appended - for specifications and "%b" appended for bodies; the second line - is the file name; and the third line is the path name. - - Example: - main%b - main.2.ada - /gnat/project1/sources/main.2.ada - - When the switch `-gnatem' is specified, the compiler will create - in memory the two mappings from the specified file. If there is - any problem (non existent file, truncated file or duplicate - entries), no mapping will be created. - - Several `-gnatem' switches may be specified; however, only the last - one on the command line will be taken into account. - - When using a project file, `gnatmake' create a temporary mapping - file and communicates it to the compiler using this switch. - -  - File: gnat_ug_unx.info, Node: Search Paths and the Run-Time Library (RTL), Next: Order of Compilation Issues, Prev: Switches for gcc, Up: Compiling Using gcc - - Search Paths and the Run-Time Library (RTL) - =========================================== - - With the GNAT source-based library system, the compiler must be able to - find source files for units that are needed by the unit being compiled. - Search paths are used to guide this process. - - The compiler compiles one source file whose name must be given - explicitly on the command line. In other words, no searching is done - for this file. To find all other source files that are needed (the most - common being the specs of units), the compiler examines the following - directories, in the following order: - - 1. The directory containing the source file of the main unit being - compiled (the file name on the command line). - - 2. Each directory named by an `-I' switch given on the `gcc' command - line, in the order given. - - 3. Each of the directories listed in the value of the - `ADA_INCLUDE_PATH' environment variable. Construct this value - exactly as the `PATH' environment variable: a list of directory - names separated by colons (semicolons when working with the NT - version). - - 4. The content of the "ada_source_path" file which is part of the GNAT - installation tree and is used to store standard libraries such as - the GNAT Run Time Library (RTL) source files. *Note Installing an - Ada Library:: - - Specifying the switch `-I-' inhibits the use of the directory - containing the source file named in the command line. You can still - have this directory on your search path, but in this case it must be - explicitly requested with a `-I' switch. - - Specifying the switch `-nostdinc' inhibits the search of the default - location for the GNAT Run Time Library (RTL) source files. - - The compiler outputs its object files and ALI files in the current - working directory. Caution: The object file can be redirected with the - `-o' switch; however, `gcc' and `gnat1' have not been coordinated on - this so the ALI file will not go to the right place. Therefore, you - should avoid using the `-o' switch. - - The packages `Ada', `System', and `Interfaces' and their children - make up the GNAT RTL, together with the simple `System.IO' package used - in the "Hello World" example. The sources for these units are needed by - the compiler and are kept together in one directory. Not all of the - bodies are needed, but all of the sources are kept together anyway. In - a normal installation, you need not specify these directory names when - compiling or binding. Either the environment variables or the built-in - defaults cause these files to be found. - - In addition to the language-defined hierarchies (System, Ada and - Interfaces), the GNAT distribution provides a fourth hierarchy, - consisting of child units of GNAT. This is a collection of generally - useful routines. See the GNAT Reference Manual for further details. - - Besides simplifying access to the RTL, a major use of search paths is - in compiling sources from multiple directories. This can make - development environments much more flexible. - -  - File: gnat_ug_unx.info, Node: Order of Compilation Issues, Next: Examples, Prev: Search Paths and the Run-Time Library (RTL), Up: Compiling Using gcc - - Order of Compilation Issues - =========================== - - If, in our earlier example, there was a spec for the `hello' procedure, - it would be contained in the file `hello.ads'; yet this file would not - have to be explicitly compiled. This is the result of the model we - chose to implement library management. Some of the consequences of this - model are as follows: - - * There is no point in compiling specs (except for package specs - with no bodies) because these are compiled as needed by clients. If - you attempt a useless compilation, you will receive an error - message. It is also useless to compile subunits because they are - compiled as needed by the parent. - - * There are no order of compilation requirements: performing a - compilation never obsoletes anything. The only way you can obsolete - something and require recompilations is to modify one of the - source files on which it depends. - - * There is no library as such, apart from the ALI files (*note The - Ada Library Information Files::, for information on the format of - these files). For now we find it convenient to create separate ALI - files, but eventually the information therein may be incorporated - into the object file directly. - - * When you compile a unit, the source files for the specs of all - units that it `with''s, all its subunits, and the bodies of any - generics it instantiates must be available (reachable by the - search-paths mechanism described above), or you will receive a - fatal error message. - -  - File: gnat_ug_unx.info, Node: Examples, Prev: Order of Compilation Issues, Up: Compiling Using gcc - - Examples - ======== - - The following are some typical Ada compilation command line examples: - - `$ gcc -c xyz.adb' - Compile body in file `xyz.adb' with all default options. - - `$ gcc -c -O2 -gnata xyz-def.adb' - Compile the child unit package in file `xyz-def.adb' with extensive - optimizations, and pragma `Assert'/`Debug' statements enabled. - - `$ gcc -c -gnatc abc-def.adb' - Compile the subunit in file `abc-def.adb' in semantic-checking-only - mode. - -  - File: gnat_ug_unx.info, Node: Binding Using gnatbind, Next: Linking Using gnatlink, Prev: Compiling Using gcc, Up: Top - - Binding Using `gnatbind' - ************************ - - * Menu: - - * Running gnatbind:: - * Generating the Binder Program in C:: - * Consistency-Checking Modes:: - * Binder Error Message Control:: - * Elaboration Control:: - * Output Control:: - * Binding with Non-Ada Main Programs:: - * Binding Programs with No Main Subprogram:: - * Summary of Binder Switches:: - * Command-Line Access:: - * Search Paths for gnatbind:: - * Examples of gnatbind Usage:: - - This chapter describes the GNAT binder, `gnatbind', which is used to - bind compiled GNAT objects. The `gnatbind' program performs four - separate functions: - - 1. Checks that a program is consistent, in accordance with the rules - in Chapter 10 of the Ada 95 Reference Manual. In particular, error - messages are generated if a program uses inconsistent versions of a - given unit. - - 2. Checks that an acceptable order of elaboration exists for the - program and issues an error message if it cannot find an order of - elaboration that satisfies the rules in Chapter 10 of the Ada 95 - Language Manual. - - 3. Generates a main program incorporating the given elaboration order. - This program is a small Ada package (body and spec) that must be - subsequently compiled using the GNAT compiler. The necessary - compilation step is usually performed automatically by `gnatlink'. - The two most important functions of this program are to call the - elaboration routines of units in an appropriate order and to call - the main program. - - 4. Determines the set of object files required by the given main - program. This information is output in the forms of comments in - the generated program, to be read by the `gnatlink' utility used - to link the Ada application. - -  - File: gnat_ug_unx.info, Node: Running gnatbind, Next: Generating the Binder Program in C, Up: Binding Using gnatbind - - Running `gnatbind' - ================== - - The form of the `gnatbind' command is - - $ gnatbind [SWITCHES] MAINPROG[.ali] [SWITCHES] - - where MAINPROG.adb is the Ada file containing the main program unit - body. If no switches are specified, `gnatbind' constructs an Ada - package in two files which names are `b~ADA_MAIN.ads', and - `b~ADA_MAIN.adb'. For example, if given the parameter `hello.ali', for - a main program contained in file `hello.adb', the binder output files - would be `b~hello.ads' and `b~hello.adb'. - - When doing consistency checking, the binder takes into consideration - any source files it can locate. For example, if the binder determines - that the given main program requires the package `Pack', whose `.ali' - file is `pack.ali' and whose corresponding source spec file is - `pack.ads', it attempts to locate the source file `pack.ads' (using the - same search path conventions as previously described for the `gcc' - command). If it can locate this source file, it checks that the time - stamps or source checksums of the source and its references to in `ali' - files match. In other words, any `ali' files that mentions this spec - must have resulted from compiling this version of the source file (or - in the case where the source checksums match, a version close enough - that the difference does not matter). - - The effect of this consistency checking, which includes source - files, is that the binder ensures that the program is consistent with - the latest version of the source files that can be located at bind - time. Editing a source file without compiling files that depend on the - source file cause error messages to be generated by the binder. - - For example, suppose you have a main program `hello.adb' and a - package `P', from file `p.ads' and you perform the following steps: - - 1. Enter `gcc -c hello.adb' to compile the main program. - - 2. Enter `gcc -c p.ads' to compile package `P'. - - 3. Edit file `p.ads'. - - 4. Enter `gnatbind hello'. - - At this point, the file `p.ali' contains an out-of-date time stamp - because the file `p.ads' has been edited. The attempt at binding fails, - and the binder generates the following error messages: - - error: "hello.adb" must be recompiled ("p.ads" has been modified) - error: "p.ads" has been modified and must be recompiled - - Now both files must be recompiled as indicated, and then the bind can - succeed, generating a main program. You need not normally be concerned - with the contents of this file, but it is similar to the following which - is the binder file generated for a simple "hello world" program. - - -- The package is called Ada_Main unless this name is actually used - -- as a unit name in the partition, in which case some other unique - -- name is used. - - with System; - package ada_main is - - Elab_Final_Code : Integer; - pragma Import (C, Elab_Final_Code, "__gnat_inside_elab_final_code"); - - -- The main program saves the parameters (argument count, - -- argument values, environment pointer) in global variables - -- for later access by other units including - -- Ada.Command_Line. - - gnat_argc : Integer; - gnat_argv : System.Address; - gnat_envp : System.Address; - - -- The actual variables are stored in a library routine. This - -- is useful for some shared library situations, where there - -- are problems if variables are not in the library. - - pragma Import (C, gnat_argc); - pragma Import (C, gnat_argv); - pragma Import (C, gnat_envp); - - -- The exit status is similarly an external location - - gnat_exit_status : Integer; - pragma Import (C, gnat_exit_status); - - GNAT_Version : constant String := - "GNAT Version: 3.15w (20010315)"; - pragma Export (C, GNAT_Version, "__gnat_version"); - - -- This is the generated adafinal routine that performs - -- finalization at the end of execution. In the case where - -- Ada is the main program, this main program makes a call - -- to adafinal at program termination. - - procedure adafinal; - pragma Export (C, adafinal, "adafinal"); - - -- This is the generated adainit routine that performs - -- initialization at the start of execution. In the case - -- where Ada is the main program, this main program makes - -- a call to adainit at program startup. - - procedure adainit; - pragma Export (C, adainit, "adainit"); - - -- This routine is called at the start of execution. It is - -- a dummy routine that is used by the debugger to breakpoint - -- at the start of execution. - - procedure Break_Start; - pragma Import (C, Break_Start, "__gnat_break_start"); - - -- This is the actual generated main program (it would be - -- suppressed if the no main program switch were used). As - -- required by standard system conventions, this program has - -- the external name main. - - function main - (argc : Integer; - argv : System.Address; - envp : System.Address) - return Integer; - pragma Export (C, main, "main"); - - -- The following set of constants give the version - -- identification values for every unit in the bound - -- partition. This identification is computed from all - -- dependent semantic units, and corresponds to the - -- string that would be returned by use of the - -- Body_Version or Version attributes. - - type Version_32 is mod 2 ** 32; - u00001 : constant Version_32 := 16#7880BEB3#; - u00002 : constant Version_32 := 16#0D24CBD0#; - u00003 : constant Version_32 := 16#3283DBEB#; - u00004 : constant Version_32 := 16#2359F9ED#; - u00005 : constant Version_32 := 16#664FB847#; - u00006 : constant Version_32 := 16#68E803DF#; - u00007 : constant Version_32 := 16#5572E604#; - u00008 : constant Version_32 := 16#46B173D8#; - u00009 : constant Version_32 := 16#156A40CF#; - u00010 : constant Version_32 := 16#033DABE0#; - u00011 : constant Version_32 := 16#6AB38FEA#; - u00012 : constant Version_32 := 16#22B6217D#; - u00013 : constant Version_32 := 16#68A22947#; - u00014 : constant Version_32 := 16#18CC4A56#; - u00015 : constant Version_32 := 16#08258E1B#; - u00016 : constant Version_32 := 16#367D5222#; - u00017 : constant Version_32 := 16#20C9ECA4#; - u00018 : constant Version_32 := 16#50D32CB6#; - u00019 : constant Version_32 := 16#39A8BB77#; - u00020 : constant Version_32 := 16#5CF8FA2B#; - u00021 : constant Version_32 := 16#2F1EB794#; - u00022 : constant Version_32 := 16#31AB6444#; - u00023 : constant Version_32 := 16#1574B6E9#; - u00024 : constant Version_32 := 16#5109C189#; - u00025 : constant Version_32 := 16#56D770CD#; - u00026 : constant Version_32 := 16#02F9DE3D#; - u00027 : constant Version_32 := 16#08AB6B2C#; - u00028 : constant Version_32 := 16#3FA37670#; - u00029 : constant Version_32 := 16#476457A0#; - u00030 : constant Version_32 := 16#731E1B6E#; - u00031 : constant Version_32 := 16#23C2E789#; - u00032 : constant Version_32 := 16#0F1BD6A1#; - u00033 : constant Version_32 := 16#7C25DE96#; - u00034 : constant Version_32 := 16#39ADFFA2#; - u00035 : constant Version_32 := 16#571DE3E7#; - u00036 : constant Version_32 := 16#5EB646AB#; - u00037 : constant Version_32 := 16#4249379B#; - u00038 : constant Version_32 := 16#0357E00A#; - u00039 : constant Version_32 := 16#3784FB72#; - u00040 : constant Version_32 := 16#2E723019#; - u00041 : constant Version_32 := 16#623358EA#; - u00042 : constant Version_32 := 16#107F9465#; - u00043 : constant Version_32 := 16#6843F68A#; - u00044 : constant Version_32 := 16#63305874#; - u00045 : constant Version_32 := 16#31E56CE1#; - u00046 : constant Version_32 := 16#02917970#; - u00047 : constant Version_32 := 16#6CCBA70E#; - u00048 : constant Version_32 := 16#41CD4204#; - u00049 : constant Version_32 := 16#572E3F58#; - u00050 : constant Version_32 := 16#20729FF5#; - u00051 : constant Version_32 := 16#1D4F93E8#; - u00052 : constant Version_32 := 16#30B2EC3D#; - u00053 : constant Version_32 := 16#34054F96#; - u00054 : constant Version_32 := 16#5A199860#; - u00055 : constant Version_32 := 16#0E7F912B#; - u00056 : constant Version_32 := 16#5760634A#; - u00057 : constant Version_32 := 16#5D851835#; - - -- The following Export pragmas export the version numbers - -- with symbolic names ending in B (for body) or S - -- (for spec) so that they can be located in a link. The - -- information provided here is sufficient to track down - -- the exact versions of units used in a given build. - - pragma Export (C, u00001, "helloB"); - pragma Export (C, u00002, "system__standard_libraryB"); - pragma Export (C, u00003, "system__standard_libraryS"); - pragma Export (C, u00004, "adaS"); - pragma Export (C, u00005, "ada__text_ioB"); - pragma Export (C, u00006, "ada__text_ioS"); - pragma Export (C, u00007, "ada__exceptionsB"); - pragma Export (C, u00008, "ada__exceptionsS"); - pragma Export (C, u00009, "gnatS"); - pragma Export (C, u00010, "gnat__heap_sort_aB"); - pragma Export (C, u00011, "gnat__heap_sort_aS"); - pragma Export (C, u00012, "systemS"); - pragma Export (C, u00013, "system__exception_tableB"); - pragma Export (C, u00014, "system__exception_tableS"); - pragma Export (C, u00015, "gnat__htableB"); - pragma Export (C, u00016, "gnat__htableS"); - pragma Export (C, u00017, "system__exceptionsS"); - pragma Export (C, u00018, "system__machine_state_operationsB"); - pragma Export (C, u00019, "system__machine_state_operationsS"); - pragma Export (C, u00020, "system__machine_codeS"); - pragma Export (C, u00021, "system__storage_elementsB"); - pragma Export (C, u00022, "system__storage_elementsS"); - pragma Export (C, u00023, "system__secondary_stackB"); - pragma Export (C, u00024, "system__secondary_stackS"); - pragma Export (C, u00025, "system__parametersB"); - pragma Export (C, u00026, "system__parametersS"); - pragma Export (C, u00027, "system__soft_linksB"); - pragma Export (C, u00028, "system__soft_linksS"); - pragma Export (C, u00029, "system__stack_checkingB"); - pragma Export (C, u00030, "system__stack_checkingS"); - pragma Export (C, u00031, "system__tracebackB"); - pragma Export (C, u00032, "system__tracebackS"); - pragma Export (C, u00033, "ada__streamsS"); - pragma Export (C, u00034, "ada__tagsB"); - pragma Export (C, u00035, "ada__tagsS"); - pragma Export (C, u00036, "system__string_opsB"); - pragma Export (C, u00037, "system__string_opsS"); - pragma Export (C, u00038, "interfacesS"); - pragma Export (C, u00039, "interfaces__c_streamsB"); - pragma Export (C, u00040, "interfaces__c_streamsS"); - pragma Export (C, u00041, "system__file_ioB"); - pragma Export (C, u00042, "system__file_ioS"); - pragma Export (C, u00043, "ada__finalizationB"); - pragma Export (C, u00044, "ada__finalizationS"); - pragma Export (C, u00045, "system__finalization_rootB"); - pragma Export (C, u00046, "system__finalization_rootS"); - pragma Export (C, u00047, "system__finalization_implementationB"); - pragma Export (C, u00048, "system__finalization_implementationS"); - pragma Export (C, u00049, "system__string_ops_concat_3B"); - pragma Export (C, u00050, "system__string_ops_concat_3S"); - pragma Export (C, u00051, "system__stream_attributesB"); - pragma Export (C, u00052, "system__stream_attributesS"); - pragma Export (C, u00053, "ada__io_exceptionsS"); - pragma Export (C, u00054, "system__unsigned_typesS"); - pragma Export (C, u00055, "system__file_control_blockS"); - pragma Export (C, u00056, "ada__finalization__list_controllerB"); - pragma Export (C, u00057, "ada__finalization__list_controllerS"); - - -- BEGIN ELABORATION ORDER - -- ada (spec) - -- gnat (spec) - -- gnat.heap_sort_a (spec) - -- gnat.heap_sort_a (body) - -- gnat.htable (spec) - -- gnat.htable (body) - -- interfaces (spec) - -- system (spec) - -- system.machine_code (spec) - -- system.parameters (spec) - -- system.parameters (body) - -- interfaces.c_streams (spec) - -- interfaces.c_streams (body) - -- system.standard_library (spec) - -- ada.exceptions (spec) - -- system.exception_table (spec) - -- system.exception_table (body) - -- ada.io_exceptions (spec) - -- system.exceptions (spec) - -- system.storage_elements (spec) - -- system.storage_elements (body) - -- system.machine_state_operations (spec) - -- system.machine_state_operations (body) - -- system.secondary_stack (spec) - -- system.stack_checking (spec) - -- system.soft_links (spec) - -- system.soft_links (body) - -- system.stack_checking (body) - -- system.secondary_stack (body) - -- system.standard_library (body) - -- system.string_ops (spec) - -- system.string_ops (body) - -- ada.tags (spec) - -- ada.tags (body) - -- ada.streams (spec) - -- system.finalization_root (spec) - -- system.finalization_root (body) - -- system.string_ops_concat_3 (spec) - -- system.string_ops_concat_3 (body) - -- system.traceback (spec) - -- system.traceback (body) - -- ada.exceptions (body) - -- system.unsigned_types (spec) - -- system.stream_attributes (spec) - -- system.stream_attributes (body) - -- system.finalization_implementation (spec) - -- system.finalization_implementation (body) - -- ada.finalization (spec) - -- ada.finalization (body) - -- ada.finalization.list_controller (spec) - -- ada.finalization.list_controller (body) - -- system.file_control_block (spec) - -- system.file_io (spec) - -- system.file_io (body) - -- ada.text_io (spec) - -- ada.text_io (body) - -- hello (body) - -- END ELABORATION ORDER - - end ada_main; - - -- The following source file name pragmas allow the generated file - -- names to be unique for different main programs. They are needed - -- since the package name will always be Ada_Main. - - pragma Source_File_Name (ada_main, Spec_File_Name => "b~hello.ads"); - pragma Source_File_Name (ada_main, Body_File_Name => "b~hello.adb"); - - -- Generated package body for Ada_Main starts here - - package body ada_main is - - -- The actual finalization is performed by calling the - -- library routine in System.Standard_Library.Adafinal - - procedure Do_Finalize; - pragma Import (C, Do_Finalize, "system__standard_library__adafinal"); - - ------------- - -- adainit -- - ------------- - - procedure adainit is - - -- These booleans are set to True once the associated unit has - -- been elaborated. It is also used to avoid elaborating the - -- same unit twice. - - E040 : Boolean; pragma Import (Ada, E040, "interfaces__c_streams_E"); - E008 : Boolean; pragma Import (Ada, E008, "ada__exceptions_E"); - E014 : Boolean; pragma Import (Ada, E014, "system__exception_table_E"); - E053 : Boolean; pragma Import (Ada, E053, "ada__io_exceptions_E"); - E017 : Boolean; pragma Import (Ada, E017, "system__exceptions_E"); - E024 : Boolean; pragma Import (Ada, E024, "system__secondary_stack_E"); - E030 : Boolean; pragma Import (Ada, E030, "system__stack_checking_E"); - E028 : Boolean; pragma Import (Ada, E028, "system__soft_links_E"); - E035 : Boolean; pragma Import (Ada, E035, "ada__tags_E"); - E033 : Boolean; pragma Import (Ada, E033, "ada__streams_E"); - E046 : Boolean; pragma Import (Ada, E046, "system__finalization_root_E"); - E048 : Boolean; pragma Import (Ada, E048, "system__finalization_implementation_E"); - E044 : Boolean; pragma Import (Ada, E044, "ada__finalization_E"); - E057 : Boolean; pragma Import (Ada, E057, "ada__finalization__list_controller_E"); - E055 : Boolean; pragma Import (Ada, E055, "system__file_control_block_E"); - E042 : Boolean; pragma Import (Ada, E042, "system__file_io_E"); - E006 : Boolean; pragma Import (Ada, E006, "ada__text_io_E"); - - -- Set_Globals is a library routine that stores away the - -- value of the indicated set of global values in global - -- variables within the library. - - procedure Set_Globals - (Main_Priority : Integer; - Time_Slice_Value : Integer; - WC_Encoding : Character; - Locking_Policy : Character; - Queuing_Policy : Character; - Task_Dispatching_Policy : Character; - Adafinal : System.Address; - Unreserve_All_Interrupts : Integer; - Exception_Tracebacks : Integer); - pragma Import (C, Set_Globals, "__gnat_set_globals"); - - -- SDP_Table_Build is a library routine used to build the - -- exception tables. See unit Ada.Exceptions in files - -- a-except.ads/adb for full details of how zero cost - -- exception handling works. This procedure, the call to - -- it, and the two following tables are all omitted if the - -- build is in longjmp/setjump exception mode. - - procedure SDP_Table_Build - (SDP_Addresses : System.Address; - SDP_Count : Natural; - Elab_Addresses : System.Address; - Elab_Addr_Count : Natural); - pragma Import (C, SDP_Table_Build, "__gnat_SDP_Table_Build"); - - -- Table of Unit_Exception_Table addresses. Used for zero - -- cost exception handling to build the top level table. - - ST : aliased constant array (1 .. 23) of System.Address := ( - Hello'UET_Address, - Ada.Text_Io'UET_Address, - Ada.Exceptions'UET_Address, - Gnat.Heap_Sort_A'UET_Address, - System.Exception_Table'UET_Address, - System.Machine_State_Operations'UET_Address, - System.Secondary_Stack'UET_Address, - System.Parameters'UET_Address, - System.Soft_Links'UET_Address, - System.Stack_Checking'UET_Address, - System.Traceback'UET_Address, - Ada.Streams'UET_Address, - Ada.Tags'UET_Address, - System.String_Ops'UET_Address, - Interfaces.C_Streams'UET_Address, - System.File_Io'UET_Address, - Ada.Finalization'UET_Address, - System.Finalization_Root'UET_Address, - System.Finalization_Implementation'UET_Address, - System.String_Ops_Concat_3'UET_Address, - System.Stream_Attributes'UET_Address, - System.File_Control_Block'UET_Address, - Ada.Finalization.List_Controller'UET_Address); - - -- Table of addresses of elaboration routines. Used for - -- zero cost exception handling to make sure these - -- addresses are included in the top level procedure - -- address table. - - EA : aliased constant array (1 .. 23) of System.Address := ( - adainit'Code_Address, - Do_Finalize'Code_Address, - Ada.Exceptions'Elab_Spec'Address, - System.Exceptions'Elab_Spec'Address, - Interfaces.C_Streams'Elab_Spec'Address, - System.Exception_Table'Elab_Body'Address, - Ada.Io_Exceptions'Elab_Spec'Address, - System.Stack_Checking'Elab_Spec'Address, - System.Soft_Links'Elab_Body'Address, - System.Secondary_Stack'Elab_Body'Address, - Ada.Tags'Elab_Spec'Address, - Ada.Tags'Elab_Body'Address, - Ada.Streams'Elab_Spec'Address, - System.Finalization_Root'Elab_Spec'Address, - Ada.Exceptions'Elab_Body'Address, - System.Finalization_Implementation'Elab_Spec'Address, - System.Finalization_Implementation'Elab_Body'Address, - Ada.Finalization'Elab_Spec'Address, - Ada.Finalization.List_Controller'Elab_Spec'Address, - System.File_Control_Block'Elab_Spec'Address, - System.File_Io'Elab_Body'Address, - Ada.Text_Io'Elab_Spec'Address, - Ada.Text_Io'Elab_Body'Address); - - -- Start of processing for adainit - - begin - - -- Call SDP_Table_Build to build the top level procedure - -- table for zero cost exception handling (omitted in - -- longjmp/setjump mode). - - SDP_Table_Build (ST'Address, 23, EA'Address, 23); - - -- Call Set_Globals to record various information for - -- this partition. The values are derived by the binder - -- from information stored in the ali files by the compiler. - - Set_Globals - (Main_Priority => -1, - -- Priority of main program, -1 if no pragma Priority used - - Time_Slice_Value => -1, - -- Time slice from Time_Slice pragma, -1 if none used - - WC_Encoding => 'b', - -- Wide_Character encoding used, default is brackets - - Locking_Policy => ' ', - -- Locking_Policy used, default of space means not - -- specified, otherwise it is the first character of - -- the policy name. - - Queuing_Policy => ' ', - -- Queuing_Policy used, default of space means not - -- specified, otherwise it is the first character of - -- the policy name. - - Task_Dispatching_Policy => ' ', - -- Task_Dispatching_Policy used, default of space means - -- not specified, otherwise first character of the - -- policy name. - - Adafinal => System.Null_Address, - -- Address of Adafinal routine, not used anymore - - Unreserve_All_Interrupts => 0, - -- Set true if pragma Unreserve_All_Interrupts was used - - Exception_Tracebacks => 0); - -- Indicates if exception tracebacks are enabled - - Elab_Final_Code := 1; - - -- Now we have the elaboration calls for all units in the partition. - -- The Elab_Spec and Elab_Body attributes generate references to the - -- implicit elaboration procedures generated by the compiler for - -- each unit that requires elaboration. - - if not E040 then - Interfaces.C_Streams'Elab_Spec; - end if; - E040 := True; - if not E008 then - Ada.Exceptions'Elab_Spec; - end if; - if not E014 then - System.Exception_Table'Elab_Body; - E014 := True; - end if; - if not E053 then - Ada.Io_Exceptions'Elab_Spec; - E053 := True; - end if; - if not E017 then - System.Exceptions'Elab_Spec; - E017 := True; - end if; - if not E030 then - System.Stack_Checking'Elab_Spec; - end if; - if not E028 then - System.Soft_Links'Elab_Body; - E028 := True; - end if; - E030 := True; - if not E024 then - System.Secondary_Stack'Elab_Body; - E024 := True; - end if; - if not E035 then - Ada.Tags'Elab_Spec; - end if; - if not E035 then - Ada.Tags'Elab_Body; - E035 := True; - end if; - if not E033 then - Ada.Streams'Elab_Spec; - E033 := True; - end if; - if not E046 then - System.Finalization_Root'Elab_Spec; - end if; - E046 := True; - if not E008 then - Ada.Exceptions'Elab_Body; - E008 := True; - end if; - if not E048 then - System.Finalization_Implementation'Elab_Spec; - end if; - if not E048 then - System.Finalization_Implementation'Elab_Body; - E048 := True; - end if; - if not E044 then - Ada.Finalization'Elab_Spec; - end if; - E044 := True; - if not E057 then - Ada.Finalization.List_Controller'Elab_Spec; - end if; - E057 := True; - if not E055 then - System.File_Control_Block'Elab_Spec; - E055 := True; - end if; - if not E042 then - System.File_Io'Elab_Body; - E042 := True; - end if; - if not E006 then - Ada.Text_Io'Elab_Spec; - end if; - if not E006 then - Ada.Text_Io'Elab_Body; - E006 := True; - end if; - - Elab_Final_Code := 0; - end adainit; - - -------------- - -- adafinal -- - -------------- - - procedure adafinal is - begin - Do_Finalize; - end adafinal; - - ---------- - -- main -- - ---------- - - -- main is actually a function, as in the ANSI C standard, - -- defined to return the exit status. The three parameters - -- are the argument count, argument values and environment - -- pointer. - - function main - (argc : Integer; - argv : System.Address; - envp : System.Address) - return Integer - is - -- The initialize routine performs low level system - -- initialization using a standard library routine which - -- sets up signal handling and performs any other - -- required setup. The routine can be found in file - -- a-init.c. - - procedure initialize; - pragma Import (C, initialize, "__gnat_initialize"); - - -- The finalize routine performs low level system - -- finalization using a standard library routine. The - -- routine is found in file a-final.c and in the standard - -- distribution is a dummy routine that does nothing, so - -- really this is a hook for special user finalization. - - procedure finalize; - pragma Import (C, finalize, "__gnat_finalize"); - - -- We get to the main program of the partition by using - -- pragma Import because if we try to with the unit and - -- call it Ada style, then not only do we waste time - -- recompiling it, but also, we don't really know the right - -- switches (e.g. identifier character set) to be used - -- to compile it. - - procedure Ada_Main_Program; - pragma Import (Ada, Ada_Main_Program, "_ada_hello"); - - -- Start of processing for main - - begin - -- Save global variables - - gnat_argc := argc; - gnat_argv := argv; - gnat_envp := envp; - - -- Call low level system initialization - - Initialize; - - -- Call our generated Ada initialization routine - - adainit; - - -- This is the point at which we want the debugger to get - -- control - - Break_Start; - - -- Now we call the main program of the partition - - Ada_Main_Program; - - -- Perform Ada finalization - - adafinal; - - -- Perform low level system finalization - - Finalize; - - -- Return the proper exit status - return (gnat_exit_status); - end; - - -- This section is entirely comments, so it has no effect on the - -- compilation of the Ada_Main package. It provides the list of - -- object files and linker options, as well as some standard - -- libraries needed for the link. The gnatlink utility parses - -- this b~hello.adb file to read these comment lines to generate - -- the appropriate command line arguments for the call to the - -- system linker. The BEGIN/END lines are used for sentinels for - -- this parsing operation. - - -- The exact file names will of course depend on the environment, - -- host/target and location of files on the host system. - - -- BEGIN Object file/option list - -- ./hello.o - -- -L./ - -- -L/usr/local/gnat/lib/gcc-lib/i686-pc-linux-gnu/2.8.1/adalib/ - -- /usr/local/gnat/lib/gcc-lib/i686-pc-linux-gnu/2.8.1/adalib/libgnat.a - -- END Object file/option list - - end ada_main; - - The Ada code in the above example is exactly what is generated by the - binder. We have added comments to more clearly indicate the function of - each part of the generated `Ada_Main' package. - - The code is standard Ada in all respects, and can be processed by any - tools that handle Ada. In particular, it is possible to use the debugger - in Ada mode to debug the generated Ada_Main package. For example, - suppose that for reasons that you do not understand, your program is - blowing up during elaboration of the body of `Ada.Text_IO'. To chase - this bug down, you can place a breakpoint on the call: - - Ada.Text_Io'Elab_Body; - - and trace the elaboration routine for this package to find out where - the problem might be (more usually of course you would be debugging - elaboration code in your own application). - -  - File: gnat_ug_unx.info, Node: Generating the Binder Program in C, Next: Consistency-Checking Modes, Prev: Running gnatbind, Up: Binding Using gnatbind - - Generating the Binder Program in C - ================================== - - In most normal usage, the default mode of `gnatbind' which is to - generate the main package in Ada, as described in the previous section. - In particular, this means that any Ada programmer can read and - understand the generated main program. It can also be debugged just - like any other Ada code provided the `-g' switch is used for `gnatbind' - and `gnatlink'. - - However for some purposes it may be convenient to generate the main - program in C rather than Ada. This may for example be helpful when you - are generating a mixed language program with the main program in C. The - GNAT compiler itself is an example. The use of the `-C' switch for both - `gnatbind' and `gnatlink' will cause the program to be generated in C - (and compiled using the gnu C compiler). The following shows the C code - generated for the same "Hello World" program: - - - #ifdef __STDC__ - #define PARAMS(paramlist) paramlist - #else - #define PARAMS(paramlist) () - #endif - - extern void __gnat_set_globals - PARAMS ((int, int, int, int, int, int, - void (*) PARAMS ((void)), int, int)); - extern void adafinal PARAMS ((void)); - extern void adainit PARAMS ((void)); - extern void system__standard_library__adafinal PARAMS ((void)); - extern int main PARAMS ((int, char **, char **)); - extern void exit PARAMS ((int)); - extern void __gnat_break_start PARAMS ((void)); - extern void _ada_hello PARAMS ((void)); - extern void __gnat_initialize PARAMS ((void)); - extern void __gnat_finalize PARAMS ((void)); - - extern void ada__exceptions___elabs PARAMS ((void)); - extern void system__exceptions___elabs PARAMS ((void)); - extern void interfaces__c_streams___elabs PARAMS ((void)); - extern void system__exception_table___elabb PARAMS ((void)); - extern void ada__io_exceptions___elabs PARAMS ((void)); - extern void system__stack_checking___elabs PARAMS ((void)); - extern void system__soft_links___elabb PARAMS ((void)); - extern void system__secondary_stack___elabb PARAMS ((void)); - extern void ada__tags___elabs PARAMS ((void)); - extern void ada__tags___elabb PARAMS ((void)); - extern void ada__streams___elabs PARAMS ((void)); - extern void system__finalization_root___elabs PARAMS ((void)); - extern void ada__exceptions___elabb PARAMS ((void)); - extern void system__finalization_implementation___elabs PARAMS ((void)); - extern void system__finalization_implementation___elabb PARAMS ((void)); - extern void ada__finalization___elabs PARAMS ((void)); - extern void ada__finalization__list_controller___elabs PARAMS ((void)); - extern void system__file_control_block___elabs PARAMS ((void)); - extern void system__file_io___elabb PARAMS ((void)); - extern void ada__text_io___elabs PARAMS ((void)); - extern void ada__text_io___elabb PARAMS ((void)); - - extern int __gnat_inside_elab_final_code; - - extern int gnat_argc; - extern char **gnat_argv; - extern char **gnat_envp; - extern int gnat_exit_status; - - char __gnat_version[] = "GNAT Version: 3.15w (20010315)"; - void adafinal () { - system__standard_library__adafinal (); - } - - void adainit () - { - extern char ada__exceptions_E; - extern char system__exceptions_E; - extern char interfaces__c_streams_E; - extern char system__exception_table_E; - extern char ada__io_exceptions_E; - extern char system__secondary_stack_E; - extern char system__stack_checking_E; - extern char system__soft_links_E; - extern char ada__tags_E; - extern char ada__streams_E; - extern char system__finalization_root_E; - extern char system__finalization_implementation_E; - extern char ada__finalization_E; - extern char ada__finalization__list_controller_E; - extern char system__file_control_block_E; - extern char system__file_io_E; - extern char ada__text_io_E; - - extern void *__gnat_hello__SDP; - extern void *__gnat_ada__text_io__SDP; - extern void *__gnat_ada__exceptions__SDP; - extern void *__gnat_gnat__heap_sort_a__SDP; - extern void *__gnat_system__exception_table__SDP; - extern void *__gnat_system__machine_state_operations__SDP; - extern void *__gnat_system__secondary_stack__SDP; - extern void *__gnat_system__parameters__SDP; - extern void *__gnat_system__soft_links__SDP; - extern void *__gnat_system__stack_checking__SDP; - extern void *__gnat_system__traceback__SDP; - extern void *__gnat_ada__streams__SDP; - extern void *__gnat_ada__tags__SDP; - extern void *__gnat_system__string_ops__SDP; - extern void *__gnat_interfaces__c_streams__SDP; - extern void *__gnat_system__file_io__SDP; - extern void *__gnat_ada__finalization__SDP; - extern void *__gnat_system__finalization_root__SDP; - extern void *__gnat_system__finalization_implementation__SDP; - extern void *__gnat_system__string_ops_concat_3__SDP; - extern void *__gnat_system__stream_attributes__SDP; - extern void *__gnat_system__file_control_block__SDP; - extern void *__gnat_ada__finalization__list_controller__SDP; - - void **st[23] = { - &__gnat_hello__SDP, - &__gnat_ada__text_io__SDP, - &__gnat_ada__exceptions__SDP, - &__gnat_gnat__heap_sort_a__SDP, - &__gnat_system__exception_table__SDP, - &__gnat_system__machine_state_operations__SDP, - &__gnat_system__secondary_stack__SDP, - &__gnat_system__parameters__SDP, - &__gnat_system__soft_links__SDP, - &__gnat_system__stack_checking__SDP, - &__gnat_system__traceback__SDP, - &__gnat_ada__streams__SDP, - &__gnat_ada__tags__SDP, - &__gnat_system__string_ops__SDP, - &__gnat_interfaces__c_streams__SDP, - &__gnat_system__file_io__SDP, - &__gnat_ada__finalization__SDP, - &__gnat_system__finalization_root__SDP, - &__gnat_system__finalization_implementation__SDP, - &__gnat_system__string_ops_concat_3__SDP, - &__gnat_system__stream_attributes__SDP, - &__gnat_system__file_control_block__SDP, - &__gnat_ada__finalization__list_controller__SDP}; - - extern void ada__exceptions___elabs (); - extern void system__exceptions___elabs (); - extern void interfaces__c_streams___elabs (); - extern void system__exception_table___elabb (); - extern void ada__io_exceptions___elabs (); - extern void system__stack_checking___elabs (); - extern void system__soft_links___elabb (); - extern void system__secondary_stack___elabb (); - extern void ada__tags___elabs (); - extern void ada__tags___elabb (); - extern void ada__streams___elabs (); - extern void system__finalization_root___elabs (); - extern void ada__exceptions___elabb (); - extern void system__finalization_implementation___elabs (); - extern void system__finalization_implementation___elabb (); - extern void ada__finalization___elabs (); - extern void ada__finalization__list_controller___elabs (); - extern void system__file_control_block___elabs (); - extern void system__file_io___elabb (); - extern void ada__text_io___elabs (); - extern void ada__text_io___elabb (); - - void (*ea[23]) () = { - adainit, - system__standard_library__adafinal, - ada__exceptions___elabs, - system__exceptions___elabs, - interfaces__c_streams___elabs, - system__exception_table___elabb, - ada__io_exceptions___elabs, - system__stack_checking___elabs, - system__soft_links___elabb, - system__secondary_stack___elabb, - ada__tags___elabs, - ada__tags___elabb, - ada__streams___elabs, - system__finalization_root___elabs, - ada__exceptions___elabb, - system__finalization_implementation___elabs, - system__finalization_implementation___elabb, - ada__finalization___elabs, - ada__finalization__list_controller___elabs, - system__file_control_block___elabs, - system__file_io___elabb, - ada__text_io___elabs, - ada__text_io___elabb}; - - __gnat_SDP_Table_Build (&st, 23, ea, 23); - __gnat_set_globals ( - -1, /* Main_Priority */ - -1, /* Time_Slice_Value */ - 'b', /* WC_Encoding */ - ' ', /* Locking_Policy */ - ' ', /* Queuing_Policy */ - ' ', /* Tasking_Dispatching_Policy */ - 0, /* Finalization routine address, not used anymore */ - 0, /* Unreserve_All_Interrupts */ - 0); /* Exception_Tracebacks */ - - __gnat_inside_elab_final_code = 1; - - if (ada__exceptions_E == 0) { - ada__exceptions___elabs (); - } - if (system__exceptions_E == 0) { - system__exceptions___elabs (); - system__exceptions_E++; - } - if (interfaces__c_streams_E == 0) { - interfaces__c_streams___elabs (); - } - interfaces__c_streams_E = 1; - if (system__exception_table_E == 0) { - system__exception_table___elabb (); - system__exception_table_E++; - } - if (ada__io_exceptions_E == 0) { - ada__io_exceptions___elabs (); - ada__io_exceptions_E++; - } - if (system__stack_checking_E == 0) { - system__stack_checking___elabs (); - } - if (system__soft_links_E == 0) { - system__soft_links___elabb (); - system__soft_links_E++; - } - system__stack_checking_E = 1; - if (system__secondary_stack_E == 0) { - system__secondary_stack___elabb (); - system__secondary_stack_E++; - } - if (ada__tags_E == 0) { - ada__tags___elabs (); - } - if (ada__tags_E == 0) { - ada__tags___elabb (); - ada__tags_E++; - } - if (ada__streams_E == 0) { - ada__streams___elabs (); - ada__streams_E++; - } - if (system__finalization_root_E == 0) { - system__finalization_root___elabs (); - } - system__finalization_root_E = 1; - if (ada__exceptions_E == 0) { - ada__exceptions___elabb (); - ada__exceptions_E++; - } - if (system__finalization_implementation_E == 0) { - system__finalization_implementation___elabs (); - } - if (system__finalization_implementation_E == 0) { - system__finalization_implementation___elabb (); - system__finalization_implementation_E++; - } - if (ada__finalization_E == 0) { - ada__finalization___elabs (); - } - ada__finalization_E = 1; - if (ada__finalization__list_controller_E == 0) { - ada__finalization__list_controller___elabs (); - } - ada__finalization__list_controller_E = 1; - if (system__file_control_block_E == 0) { - system__file_control_block___elabs (); - system__file_control_block_E++; - } - if (system__file_io_E == 0) { - system__file_io___elabb (); - system__file_io_E++; - } - if (ada__text_io_E == 0) { - ada__text_io___elabs (); - } - if (ada__text_io_E == 0) { - ada__text_io___elabb (); - ada__text_io_E++; - } - - __gnat_inside_elab_final_code = 0; - } - int main (argc, argv, envp) - int argc; - char **argv; - char **envp; - { - gnat_argc = argc; - gnat_argv = argv; - gnat_envp = envp; - - __gnat_initialize (); - adainit (); - __gnat_break_start (); - - _ada_hello (); - - system__standard_library__adafinal (); - __gnat_finalize (); - exit (gnat_exit_status); - } - unsigned helloB = 0x7880BEB3; - unsigned system__standard_libraryB = 0x0D24CBD0; - unsigned system__standard_libraryS = 0x3283DBEB; - unsigned adaS = 0x2359F9ED; - unsigned ada__text_ioB = 0x47C85FC4; - unsigned ada__text_ioS = 0x496FE45C; - unsigned ada__exceptionsB = 0x74F50187; - unsigned ada__exceptionsS = 0x6736945B; - unsigned gnatS = 0x156A40CF; - unsigned gnat__heap_sort_aB = 0x033DABE0; - unsigned gnat__heap_sort_aS = 0x6AB38FEA; - unsigned systemS = 0x0331C6FE; - unsigned system__exceptionsS = 0x20C9ECA4; - unsigned system__exception_tableB = 0x68A22947; - unsigned system__exception_tableS = 0x394BADD5; - unsigned gnat__htableB = 0x08258E1B; - unsigned gnat__htableS = 0x367D5222; - unsigned system__machine_state_operationsB = 0x4F3B7492; - unsigned system__machine_state_operationsS = 0x182F5CF4; - unsigned system__storage_elementsB = 0x2F1EB794; - unsigned system__storage_elementsS = 0x102C83C7; - unsigned system__secondary_stackB = 0x1574B6E9; - unsigned system__secondary_stackS = 0x708E260A; - unsigned system__parametersB = 0x56D770CD; - unsigned system__parametersS = 0x237E39BE; - unsigned system__soft_linksB = 0x08AB6B2C; - unsigned system__soft_linksS = 0x1E2491F3; - unsigned system__stack_checkingB = 0x476457A0; - unsigned system__stack_checkingS = 0x5299FCED; - unsigned system__tracebackB = 0x2971EBDE; - unsigned system__tracebackS = 0x2E9C3122; - unsigned ada__streamsS = 0x7C25DE96; - unsigned ada__tagsB = 0x39ADFFA2; - unsigned ada__tagsS = 0x769A0464; - unsigned system__string_opsB = 0x5EB646AB; - unsigned system__string_opsS = 0x63CED018; - unsigned interfacesS = 0x0357E00A; - unsigned interfaces__c_streamsB = 0x3784FB72; - unsigned interfaces__c_streamsS = 0x2E723019; - unsigned system__file_ioB = 0x623358EA; - unsigned system__file_ioS = 0x31F873E6; - unsigned ada__finalizationB = 0x6843F68A; - unsigned ada__finalizationS = 0x63305874; - unsigned system__finalization_rootB = 0x31E56CE1; - unsigned system__finalization_rootS = 0x23169EF3; - unsigned system__finalization_implementationB = 0x6CCBA70E; - unsigned system__finalization_implementationS = 0x604AA587; - unsigned system__string_ops_concat_3B = 0x572E3F58; - unsigned system__string_ops_concat_3S = 0x01F57876; - unsigned system__stream_attributesB = 0x1D4F93E8; - unsigned system__stream_attributesS = 0x30B2EC3D; - unsigned ada__io_exceptionsS = 0x34054F96; - unsigned system__unsigned_typesS = 0x7B9E7FE3; - unsigned system__file_control_blockS = 0x2FF876A8; - unsigned ada__finalization__list_controllerB = 0x5760634A; - unsigned ada__finalization__list_controllerS = 0x5D851835; - - /* BEGIN ELABORATION ORDER - ada (spec) - gnat (spec) - gnat.heap_sort_a (spec) - gnat.htable (spec) - gnat.htable (body) - interfaces (spec) - system (spec) - system.parameters (spec) - system.standard_library (spec) - ada.exceptions (spec) - system.exceptions (spec) - system.parameters (body) - gnat.heap_sort_a (body) - interfaces.c_streams (spec) - interfaces.c_streams (body) - system.exception_table (spec) - system.exception_table (body) - ada.io_exceptions (spec) - system.storage_elements (spec) - system.storage_elements (body) - system.machine_state_operations (spec) - system.machine_state_operations (body) - system.secondary_stack (spec) - system.stack_checking (spec) - system.soft_links (spec) - system.soft_links (body) - system.stack_checking (body) - system.secondary_stack (body) - system.standard_library (body) - system.string_ops (spec) - system.string_ops (body) - ada.tags (spec) - ada.tags (body) - ada.streams (spec) - system.finalization_root (spec) - system.finalization_root (body) - system.string_ops_concat_3 (spec) - system.string_ops_concat_3 (body) - system.traceback (spec) - system.traceback (body) - ada.exceptions (body) - system.unsigned_types (spec) - system.stream_attributes (spec) - system.stream_attributes (body) - system.finalization_implementation (spec) - system.finalization_implementation (body) - ada.finalization (spec) - ada.finalization (body) - ada.finalization.list_controller (spec) - ada.finalization.list_controller (body) - system.file_control_block (spec) - system.file_io (spec) - system.file_io (body) - ada.text_io (spec) - ada.text_io (body) - hello (body) - END ELABORATION ORDER */ - - /* BEGIN Object file/option list - ./hello.o - -L./ - -L/usr/local/gnat/lib/gcc-lib/alpha-dec-osf5.1/2.8.1/adalib/ - /usr/local/gnat/lib/gcc-lib/alpha-dec-osf5.1/2.8.1/adalib/libgnat.a - -lexc - END Object file/option list */ - - Here again, the C code is exactly what is generated by the binder. The - functions of the various parts of this code correspond in an obvious - manner with the commented Ada code shown in the example in the previous - section. - -  - File: gnat_ug_unx.info, Node: Consistency-Checking Modes, Next: Binder Error Message Control, Prev: Generating the Binder Program in C, Up: Binding Using gnatbind - - Consistency-Checking Modes - ========================== - - As described in the previous section, by default `gnatbind' checks that - object files are consistent with one another and are consistent with - any source files it can locate. The following switches control binder - access to sources. - - `-s' - Require source files to be present. In this mode, the binder must - be able to locate all source files that are referenced, in order - to check their consistency. In normal mode, if a source file - cannot be located it is simply ignored. If you specify this - switch, a missing source file is an error. - - `-x' - Exclude source files. In this mode, the binder only checks that ALI - files are consistent with one another. Source files are not - accessed. The binder runs faster in this mode, and there is still - a guarantee that the resulting program is self-consistent. If a - source file has been edited since it was last compiled, and you - specify this switch, the binder will not detect that the object - file is out of date with respect to the source file. Note that - this is the mode that is automatically used by `gnatmake' because - in this case the checking against sources has already been - performed by `gnatmake' in the course of compilation (i.e. before - binding). - -  - File: gnat_ug_unx.info, Node: Binder Error Message Control, Next: Elaboration Control, Prev: Consistency-Checking Modes, Up: Binding Using gnatbind - - Binder Error Message Control - ============================ - - The following switches provide control over the generation of error - messages from the binder: - - `-v' - Verbose mode. In the normal mode, brief error messages are - generated to `stderr'. If this switch is present, a header is - written to `stdout' and any error messages are directed to - `stdout'. All that is written to `stderr' is a brief summary - message. - - `-b' - Generate brief error messages to `stderr' even if verbose mode is - specified. This is relevant only when used with the `-v' switch. - - `-mN' - Limits the number of error messages to N, a decimal integer in the - range 1-999. The binder terminates immediately if this limit is - reached. - - `-MXXX' - Renames the generated main program from `main' to `xxx'. This is - useful in the case of some cross-building environments, where the - actual main program is separate from the one generated by - `gnatbind'. - - `-ws' - Suppress all warning messages. - - `-we' - Treat any warning messages as fatal errors. - - `-t' - The binder performs a number of consistency checks including: - - * Check that time stamps of a given source unit are consistent - - * Check that checksums of a given source unit are consistent - - * Check that consistent versions of `GNAT' were used for - compilation - - * Check consistency of configuration pragmas as required - - Normally failure of such checks, in accordance with the consistency - requirements of the Ada Reference Manual, causes error messages to - be generated which abort the binder and prevent the output of a - binder file and subsequent link to obtain an executable. - - The `-t' switch converts these error messages into warnings, so - that binding and linking can continue to completion even in the - presence of such errors. The result may be a failed link (due to - missing symbols), or a non-functional executable which has - undefined semantics. _This means that `-t' should be used only in - unusual situations, with extreme care._ - -  - File: gnat_ug_unx.info, Node: Elaboration Control, Next: Output Control, Prev: Binder Error Message Control, Up: Binding Using gnatbind - - Elaboration Control - =================== - - The following switches provide additional control over the elaboration - order. For full details see *Note Elaboration Order Handling in GNAT::. - - `-p' - Normally the binder attempts to choose an elaboration order that is - likely to minimize the likelihood of an elaboration order error - resulting in raising a `Program_Error' exception. This switch - reverses the action of the binder, and requests that it - deliberately choose an order that is likely to maximize the - likelihood of an elaboration error. This is useful in ensuring - portability and avoiding dependence on accidental fortuitous - elaboration ordering. - - Normally it only makes sense to use the `-p' switch if dynamic - elaboration checking is used (`-gnatE' switch used for - compilation). This is because in the default static elaboration - mode, all necessary `Elaborate_All' pragmas are implicitly - inserted. These implicit pragmas are still respected by the binder - in `-p' mode, so a safe elaboration order is assured. - -  - File: gnat_ug_unx.info, Node: Output Control, Next: Binding with Non-Ada Main Programs, Prev: Elaboration Control, Up: Binding Using gnatbind - - Output Control - ============== - - The following switches allow additional control over the output - generated by the binder. - - `-A' - Generate binder program in Ada (default). The binder program is - named `b~MAINPROG.adb' by default. This can be changed with `-o' - `gnatbind' option. - - `-c' - Check only. Do not generate the binder output file. In this mode - the binder performs all error checks but does not generate an - output file. - - `-C' - Generate binder program in C. The binder program is named - `b_MAINPROG.c'. This can be changed with `-o' `gnatbind' option. - - `-e' - Output complete list of elaboration-order dependencies, showing the - reason for each dependency. This output can be rather extensive - but may be useful in diagnosing problems with elaboration order. - The output is written to `stdout'. - - `-h' - Output usage information. The output is written to `stdout'. - - `-K' - Output linker options to `stdout'. Includes library search paths, - contents of pragmas Ident and Linker_Options, and libraries added - by `gnatbind'. - - `-l' - Output chosen elaboration order. The output is written to `stdout'. - - `-O' - Output full names of all the object files that must be linked to - provide the Ada component of the program. The output is written to - `stdout'. This list includes the files explicitly supplied and - referenced by the user as well as implicitly referenced run-time - unit files. The latter are omitted if the corresponding units - reside in shared libraries. The directory names for the run-time - units depend on the system configuration. - - `-o FILE' - Set name of output file to FILE instead of the normal - `b~MAINPROG.adb' default. Note that FILE denote the Ada binder - generated body filename. In C mode you would normally give FILE an - extension of `.c' because it will be a C source program. Note - that if this option is used, then linking must be done manually. - It is not possible to use gnatlink in this case, since it cannot - locate the binder file. - - `-r' - Generate list of `pragma Rerstrictions' that could be applied to - the current unit. This is useful for code audit purposes, and also - may be used to improve code generation in some cases. - -  - File: gnat_ug_unx.info, Node: Binding with Non-Ada Main Programs, Next: Binding Programs with No Main Subprogram, Prev: Output Control, Up: Binding Using gnatbind - - Binding with Non-Ada Main Programs - ================================== - - In our description so far we have assumed that the main program is in - Ada, and that the task of the binder is to generate a corresponding - function `main' that invokes this Ada main program. GNAT also supports - the building of executable programs where the main program is not in - Ada, but some of the called routines are written in Ada and compiled - using GNAT (*note Mixed Language Programming::). The following switch - is used in this situation: - - `-n' - No main program. The main program is not in Ada. - - In this case, most of the functions of the binder are still required, - but instead of generating a main program, the binder generates a file - containing the following callable routines: - - `adainit' - You must call this routine to initialize the Ada part of the - program by calling the necessary elaboration routines. A call to - `adainit' is required before the first call to an Ada subprogram. - - Note that it is assumed that the basic execution environment must - be setup to be appropriate for Ada execution at the point where - the first Ada subprogram is called. In particular, if the Ada code - will do any floating-point operations, then the FPU must be setup - in an appropriate manner. For the case of the x86, for example, - full precision mode is required. The procedure - GNAT.Float_Control.Reset may be used to ensure that the FPU is in - the right state. - - `adafinal' - You must call this routine to perform any library-level - finalization required by the Ada subprograms. A call to `adafinal' - is required after the last call to an Ada subprogram, and before - the program terminates. - - If the `-n' switch is given, more than one ALI file may appear on the - command line for `gnatbind'. The normal "closure" calculation is - performed for each of the specified units. Calculating the closure - means finding out the set of units involved by tracing `with' - references. The reason it is necessary to be able to specify more than - one ALI file is that a given program may invoke two or more quite - separate groups of Ada units. - - The binder takes the name of its output file from the last specified - ALI file, unless overridden by the use of the `-o file'. The output is - an Ada unit in source form that can be compiled with GNAT unless the -C - switch is used in which case the output is a C source file, which must - be compiled using the C compiler. This compilation occurs - automatically as part of the `gnatlink' processing. - - Currently the GNAT run time requires a FPU using 80 bits mode - precision. Under targets where this is not the default it is required to - call GNAT.Float_Control.Reset before using floating point numbers (this - include float computation, float input and output) in the Ada code. A - side effect is that this could be the wrong mode for the foreign code - where floating point computation could be broken after this call. - -  - File: gnat_ug_unx.info, Node: Binding Programs with No Main Subprogram, Next: Summary of Binder Switches, Prev: Binding with Non-Ada Main Programs, Up: Binding Using gnatbind - - Binding Programs with No Main Subprogram - ======================================== - - It is possible to have an Ada program which does not have a main - subprogram. This program will call the elaboration routines of all the - packages, then the finalization routines. - - The following switch is used to bind programs organized in this - manner: - - `-z' - Normally the binder checks that the unit name given on the command - line corresponds to a suitable main subprogram. When this switch - is used, a list of ALI files can be given, and the execution of - the program consists of elaboration of these units in an - appropriate order. - -  - File: gnat_ug_unx.info, Node: Summary of Binder Switches, Next: Command-Line Access, Prev: Binding Programs with No Main Subprogram, Up: Binding Using gnatbind - - Summary of Binder Switches - ========================== - - The following are the switches available with `gnatbind': - - `-aO' - Specify directory to be searched for ALI files. - - `-aI' - Specify directory to be searched for source file. - - `-A' - Generate binder program in Ada (default) - - `-b' - Generate brief messages to `stderr' even if verbose mode set. - - `-c' - Check only, no generation of binder output file. - - `-C' - Generate binder program in C - - `-e' - Output complete list of elaboration-order dependencies. - - `-E' - Store tracebacks in exception occurrences when the target supports - it. This is the default with the zero cost exception mechanism. - This option is currently supported on the following targets: all - x86 ports, Solaris, Windows, HP-UX, AIX, PowerPC VxWorks and Alpha - VxWorks. See also the packages `GNAT.Traceback' and - `GNAT.Traceback.Symbolic' for more information. Note that on x86 - ports, you must not use `-fomit-frame-pointer' `gcc' option. - - `-h' - Output usage (help) information - - `-I' - Specify directory to be searched for source and ALI files. - - `-I-' - Do not look for sources in the current directory where `gnatbind' - was invoked, and do not look for ALI files in the directory - containing the ALI file named in the `gnatbind' command line. - - `-l' - Output chosen elaboration order. - - `-Lxxx' - Binds the units for library building. In this case the adainit and - adafinal procedures (See *note Binding with Non-Ada Main - Programs::) are renamed to xxxinit and xxxfinal. Implies -n. See - *note GNAT and Libraries:: for more details. - - `-Mxyz' - Rename generated main program from main to xyz - - `-mN' - Limit number of detected errors to N (1-999). - - `-n' - No main program. - - `-nostdinc' - Do not look for sources in the system default directory. - - `-nostdlib' - Do not look for library files in the system default directory. - - `--RTS=RTS-PATH' - Specifies the default location of the runtime library. Same - meaning as the equivalent `gnatmake' flag (see *Note Switches for - gnatmake::). - - `-o FILE' - Name the output file FILE (default is `b~XXX.adb'). Note that if - this option is used, then linking must be done manually, gnatlink - cannot be used. - - `-O' - Output object list. - - `-p' - Pessimistic (worst-case) elaboration order - - `-s' - Require all source files to be present. - - `-static' - Link against a static GNAT run time. - - `-shared' - Link against a shared GNAT run time when available. - - `-t' - Tolerate time stamp and other consistency errors - - `-TN' - Set the time slice value to n microseconds. A value of zero means - no time slicing and also indicates to the tasking run time to - match as close as possible to the annex D requirements of the RM. - - `-v' - Verbose mode. Write error messages, header, summary output to - `stdout'. - - `-wX' - Warning mode (X=s/e for suppress/treat as error) - - `-x' - Exclude source files (check object consistency only). - - `-z' - No main subprogram. - - You may obtain this listing by running the program `gnatbind' with - no arguments. - -  - File: gnat_ug_unx.info, Node: Command-Line Access, Next: Search Paths for gnatbind, Prev: Summary of Binder Switches, Up: Binding Using gnatbind - - Command-Line Access - =================== - - The package `Ada.Command_Line' provides access to the command-line - arguments and program name. In order for this interface to operate - correctly, the two variables - - int gnat_argc; - char **gnat_argv; - - are declared in one of the GNAT library routines. These variables must - be set from the actual `argc' and `argv' values passed to the main - program. With no `n' present, `gnatbind' generates the C main program - to automatically set these variables. If the `n' switch is used, there - is no automatic way to set these variables. If they are not set, the - procedures in `Ada.Command_Line' will not be available, and any attempt - to use them will raise `Constraint_Error'. If command line access is - required, your main program must set `gnat_argc' and `gnat_argv' from - the `argc' and `argv' values passed to it. - -  - File: gnat_ug_unx.info, Node: Search Paths for gnatbind, Next: Examples of gnatbind Usage, Prev: Command-Line Access, Up: Binding Using gnatbind - - Search Paths for `gnatbind' - =========================== - - The binder takes the name of an ALI file as its argument and needs to - locate source files as well as other ALI files to verify object - consistency. - - For source files, it follows exactly the same search rules as `gcc' - (*note Search Paths and the Run-Time Library (RTL)::). For ALI files the - directories searched are: - - 1. The directory containing the ALI file named in the command line, - unless the switch `-I-' is specified. - - 2. All directories specified by `-I' switches on the `gnatbind' - command line, in the order given. - - 3. Each of the directories listed in the value of the - `ADA_OBJECTS_PATH' environment variable. Construct this value - exactly as the `PATH' environment variable: a list of directory - names separated by colons (semicolons when working with the NT - version of GNAT). - - 4. The content of the "ada_object_path" file which is part of the GNAT - installation tree and is used to store standard libraries such as - the GNAT Run Time Library (RTL) unless the switch `-nostdlib' is - specified. *Note Installing an Ada Library:: - - In the binder the switch `-I' is used to specify both source and - library file paths. Use `-aI' instead if you want to specify source - paths only, and `-aO' if you want to specify library paths only. This - means that for the binder `-I'DIR is equivalent to `-aI'DIR `-aO'DIR. - The binder generates the bind file (a C language source file) in the - current working directory. - - The packages `Ada', `System', and `Interfaces' and their children - make up the GNAT Run-Time Library, together with the package GNAT and - its children, which contain a set of useful additional library - functions provided by GNAT. The sources for these units are needed by - the compiler and are kept together in one directory. The ALI files and - object files generated by compiling the RTL are needed by the binder - and the linker and are kept together in one directory, typically - different from the directory containing the sources. In a normal - installation, you need not specify these directory names when compiling - or binding. Either the environment variables or the built-in defaults - cause these files to be found. - - Besides simplifying access to the RTL, a major use of search paths is - in compiling sources from multiple directories. This can make - development environments much more flexible. - -  - File: gnat_ug_unx.info, Node: Examples of gnatbind Usage, Prev: Search Paths for gnatbind, Up: Binding Using gnatbind - - Examples of `gnatbind' Usage - ============================ - - This section contains a number of examples of using the GNAT binding - utility `gnatbind'. - - `gnatbind hello' - The main program `Hello' (source program in `hello.adb') is bound - using the standard switch settings. The generated main program is - `b~hello.adb'. This is the normal, default use of the binder. - - `gnatbind hello -o mainprog.adb' - The main program `Hello' (source program in `hello.adb') is bound - using the standard switch settings. The generated main program is - `mainprog.adb' with the associated spec in `mainprog.ads'. Note - that you must specify the body here not the spec, in the case - where the output is in Ada. Note that if this option is used, then - linking must be done manually, since gnatlink will not be able to - find the generated file. - - `gnatbind main -C -o mainprog.c -x' - The main program `Main' (source program in `main.adb') is bound, - excluding source files from the consistency checking, generating - the file `mainprog.c'. - - `gnatbind -x main_program -C -o mainprog.c' - This command is exactly the same as the previous example. Switches - may appear anywhere in the command line, and single letter - switches may be combined into a single switch. - - `gnatbind -n math dbase -C -o ada-control.c' - The main program is in a language other than Ada, but calls to - subprograms in packages `Math' and `Dbase' appear. This call to - `gnatbind' generates the file `ada-control.c' containing the - `adainit' and `adafinal' routines to be called before and after - accessing the Ada units. - -  - File: gnat_ug_unx.info, Node: Linking Using gnatlink, Next: The GNAT Make Program gnatmake, Prev: Binding Using gnatbind, Up: Top - - Linking Using `gnatlink' - ************************ - - This chapter discusses `gnatlink', a utility program used to link Ada - programs and build an executable file. This is a simple program that - invokes the Unix linker (via the `gcc' command) with a correct list of - object files and library references. `gnatlink' automatically - determines the list of files and references for the Ada part of a - program. It uses the binder file generated by the binder to determine - this list. - - * Menu: - - * Running gnatlink:: - * Switches for gnatlink:: - * Setting Stack Size from gnatlink:: - * Setting Heap Size from gnatlink:: - -  - File: gnat_ug_unx.info, Node: Running gnatlink, Next: Switches for gnatlink, Up: Linking Using gnatlink - - Running `gnatlink' - ================== - - The form of the `gnatlink' command is - - $ gnatlink [SWITCHES] MAINPROG[.ali] [NON-ADA OBJECTS] - [LINKER OPTIONS] - - `MAINPROG.ali' references the ALI file of the main program. The `.ali' - extension of this file can be omitted. From this reference, `gnatlink' - locates the corresponding binder file `b~MAINPROG.adb' and, using the - information in this file along with the list of non-Ada objects and - linker options, constructs a Unix linker command file to create the - executable. - - The arguments following `MAINPROG.ali' are passed to the linker - uninterpreted. They typically include the names of object files for - units written in other languages than Ada and any library references - required to resolve references in any of these foreign language units, - or in `pragma Import' statements in any Ada units. - - LINKER OPTIONS is an optional list of linker specific switches. The - default linker called by gnatlink is GCC which in turn calls the - appropriate system linker usually called LD. Standard options for the - linker such as `-lmy_lib' or `-Ldir' can be added as is. For options - that are not recognized by GCC as linker options, the GCC switches - `-Xlinker' or `-Wl,' shall be used. Refer to the GCC documentation for - details. Here is an example showing how to generate a linker map - assuming that the underlying linker is GNU ld: - - $ gnatlink my_prog -Wl,-Map,MAPFILE - - Using LINKER OPTIONS it is possible to set the program stack and - heap size. See *note Setting Stack Size from gnatlink:: and *note - Setting Heap Size from gnatlink::. - - `gnatlink' determines the list of objects required by the Ada - program and prepends them to the list of objects passed to the linker. - `gnatlink' also gathers any arguments set by the use of `pragma - Linker_Options' and adds them to the list of arguments presented to the - linker. - -  - File: gnat_ug_unx.info, Node: Switches for gnatlink, Next: Setting Stack Size from gnatlink, Prev: Running gnatlink, Up: Linking Using gnatlink - - Switches for `gnatlink' - ======================= - - The following switches are available with the `gnatlink' utility: - - `-A' - The binder has generated code in Ada. This is the default. - - `-C' - If instead of generating a file in Ada, the binder has generated - one in C, then the linker needs to know about it. Use this switch - to signal to `gnatlink' that the binder has generated C code - rather than Ada code. - - `-f' - On some targets, the command line length is limited, and `gnatlink' - will generate a separate file for the linker if the list of object - files is too long. The `-f' flag forces this file to be generated - even if the limit is not exceeded. This is useful in some cases to - deal with special situations where the command line length is - exceeded. - - `-g' - The option to include debugging information causes the Ada bind - file (in other words, `b~MAINPROG.adb') to be compiled with `-g'. - In addition, the binder does not delete the `b~MAINPROG.adb', - `b~MAINPROG.o' and `b~MAINPROG.ali' files. Without `-g', the - binder removes these files by default. The same procedure apply if - a C bind file was generated using `-C' `gnatbind' option, in this - case the filenames are `b_MAINPROG.c' and `b_MAINPROG.o'. - - `-n' - Do not compile the file generated by the binder. This may be used - when a link is rerun with different options, but there is no need - to recompile the binder file. - - `-v' - Causes additional information to be output, including a full list - of the included object files. This switch option is most useful - when you want to see what set of object files are being used in - the link step. - - `-v -v' - Very verbose mode. Requests that the compiler operate in verbose - mode when it compiles the binder file, and that the system linker - run in verbose mode. - - `-o EXEC-NAME' - EXEC-NAME specifies an alternate name for the generated executable - program. If this switch is omitted, the executable has the same - name as the main unit. For example, `gnatlink try.ali' creates an - executable called `try'. - - `-b TARGET' - Compile your program to run on TARGET, which is the name of a - system configuration. You must have a GNAT cross-compiler built if - TARGET is not the same as your host system. - - `-BDIR' - Load compiler executables (for example, `gnat1', the Ada compiler) - from DIR instead of the default location. Only use this switch - when multiple versions of the GNAT compiler are available. See the - `gcc' manual page for further details. You would normally use the - `-b' or `-V' switch instead. - - `--GCC=COMPILER_NAME' - Program used for compiling the binder file. The default is - ``gcc''. You need to use quotes around COMPILER_NAME if - `compiler_name' contains spaces or other separator characters. As - an example `--GCC="foo -x -y"' will instruct `gnatlink' to use - `foo -x -y' as your compiler. Note that switch `-c' is always - inserted after your command name. Thus in the above example the - compiler command that will be used by `gnatlink' will be `foo -c - -x -y'. If several `--GCC=compiler_name' are used, only the last - COMPILER_NAME is taken into account. However, all the additional - switches are also taken into account. Thus, `--GCC="foo -x -y" - --GCC="bar -z -t"' is equivalent to `--GCC="bar -x -y -z -t"'. - - `--LINK=NAME' - NAME is the name of the linker to be invoked. This is especially - useful in mixed language programs since languages such as c++ - require their own linker to be used. When this switch is omitted, - the default name for the linker is (`gcc'). When this switch is - used, the specified linker is called instead of (`gcc') with - exactly the same parameters that would have been passed to (`gcc') - so if the desired linker requires different parameters it is - necessary to use a wrapper script that massages the parameters - before invoking the real linker. It may be useful to control the - exact invocation by using the verbose switch. - -  - File: gnat_ug_unx.info, Node: Setting Stack Size from gnatlink, Next: Setting Heap Size from gnatlink, Prev: Switches for gnatlink, Up: Linking Using gnatlink - - Setting Stack Size from `gnatlink' - ================================== - - It is possible to specify the program stack size from `gnatlink'. - Assuming that the underlying linker is GNU ld there is two ways to do - so: - - * using `-Xlinker' linker option - - $ gnatlink hello -Xlinker --stack=0x10000,0x1000 - - This set the stack reserve size to 0x10000 bytes and the stack - commit size to 0x1000 bytes. - - * using `-Wl' linker option - - $ gnatlink hello -Wl,--stack=0x1000000 - - This set the stack reserve size to 0x1000000 bytes. Note that with - `-Wl' option it is not possible to set the stack commit size - because the coma is a separator for this option. - - -  - File: gnat_ug_unx.info, Node: Setting Heap Size from gnatlink, Prev: Setting Stack Size from gnatlink, Up: Linking Using gnatlink - - Setting Heap Size from `gnatlink' - ================================= - - It is possible to specify the program heap size from `gnatlink'. - Assuming that the underlying linker is GNU ld there is two ways to do - so: - - * using `-Xlinker' linker option - - $ gnatlink hello -Xlinker --heap=0x10000,0x1000 - - This set the heap reserve size to 0x10000 bytes and the heap commit - size to 0x1000 bytes. - - * using `-Wl' linker option - - $ gnatlink hello -Wl,--heap=0x1000000 - - This set the heap reserve size to 0x1000000 bytes. Note that with - `-Wl' option it is not possible to set the heap commit size - because the coma is a separator for this option. - - -  - File: gnat_ug_unx.info, Node: The GNAT Make Program gnatmake, Next: Renaming Files Using gnatchop, Prev: Linking Using gnatlink, Up: Top - - The GNAT Make Program `gnatmake' - ******************************** - - * Menu: - - * Running gnatmake:: - * Switches for gnatmake:: - * Mode Switches for gnatmake:: - * Notes on the Command Line:: - * How gnatmake Works:: - * Examples of gnatmake Usage:: - - A typical development cycle when working on an Ada program consists of - the following steps: - - 1. Edit some sources to fix bugs. - - 2. Add enhancements. - - 3. Compile all sources affected. - - 4. Rebind and relink. - - 5. Test. - - The third step can be tricky, because not only do the modified files - have to be compiled, but any files depending on these files must also be - recompiled. The dependency rules in Ada can be quite complex, especially - in the presence of overloading, `use' clauses, generics and inlined - subprograms. - - `gnatmake' automatically takes care of the third and fourth steps of - this process. It determines which sources need to be compiled, compiles - them, and binds and links the resulting object files. - - Unlike some other Ada make programs, the dependencies are always - accurately recomputed from the new sources. The source based approach of - the GNAT compilation model makes this possible. This means that if - changes to the source program cause corresponding changes in - dependencies, they will always be tracked exactly correctly by - `gnatmake'. - -  - File: gnat_ug_unx.info, Node: Running gnatmake, Next: Switches for gnatmake, Up: The GNAT Make Program gnatmake - - Running `gnatmake' - ================== - - The usual form of the `gnatmake' command is - - $ gnatmake [SWITCHES] FILE_NAME [FILE_NAMES] [MODE_SWITCHES] - - The only required argument is one FILE_NAME, which specifies a - compilation unit that is a main program. Several FILE_NAMES can be - specified: this will result in several executables being built. If - `switches' are present, they can be placed before the first FILE_NAME, - between FILE_NAMES or after the last FILE_NAME. If MODE_SWITCHES are - present, they must always be placed after the last FILE_NAME and all - `switches'. - - If you are using standard file extensions (.adb and .ads), then the - extension may be omitted from the FILE_NAME arguments. However, if you - are using non-standard extensions, then it is required that the - extension be given. A relative or absolute directory path can be - specified in a FILE_NAME, in which case, the input source file will be - searched for in the specified directory only. Otherwise, the input - source file will first be searched in the directory where `gnatmake' - was invoked and if it is not found, it will be search on the source - path of the compiler as described in *Note Search Paths and the - Run-Time Library (RTL)::. - - When several FILE_NAMES are specified, if an executable needs to be - rebuilt and relinked, all subsequent executables will be rebuilt and - relinked, even if this would not be absolutely necessary. - - All `gnatmake' output (except when you specify `-M') is to `stderr'. - The output produced by the `-M' switch is send to `stdout'. - -  - File: gnat_ug_unx.info, Node: Switches for gnatmake, Next: Mode Switches for gnatmake, Prev: Running gnatmake, Up: The GNAT Make Program gnatmake - - Switches for `gnatmake' - ======================= - - You may specify any of the following switches to `gnatmake': - - `--GCC=COMPILER_NAME' - Program used for compiling. The default is ``gcc''. You need to use - quotes around COMPILER_NAME if `compiler_name' contains spaces or - other separator characters. As an example `--GCC="foo -x -y"' will - instruct `gnatmake' to use `foo -x -y' as your compiler. Note that - switch `-c' is always inserted after your command name. Thus in - the above example the compiler command that will be used by - `gnatmake' will be `foo -c -x -y'. If several - `--GCC=compiler_name' are used, only the last COMPILER_NAME is - taken into account. However, all the additional switches are also - taken into account. Thus, `--GCC="foo -x -y" --GCC="bar -z -t"' is - equivalent to `--GCC="bar -x -y -z -t"'. - - `--GNATBIND=BINDER_NAME' - Program used for binding. The default is ``gnatbind''. You need to - use quotes around BINDER_NAME if BINDER_NAME contains spaces or - other separator characters. As an example `--GNATBIND="bar -x -y"' - will instruct `gnatmake' to use `bar -x -y' as your binder. Binder - switches that are normally appended by `gnatmake' to ``gnatbind'' - are now appended to the end of `bar -x -y'. - - `--GNATLINK=LINKER_NAME' - Program used for linking. The default is ``gnatlink''. You need to - use quotes around LINKER_NAME if LINKER_NAME contains spaces or - other separator characters. As an example `--GNATLINK="lan -x -y"' - will instruct `gnatmake' to use `lan -x -y' as your linker. Linker - switches that are normally appended by `gnatmake' to ``gnatlink'' - are now appended to the end of `lan -x -y'. - - `-a' - Consider all files in the make process, even the GNAT internal - system files (for example, the predefined Ada library files), as - well as any locked files. Locked files are files whose ALI file is - write-protected. By default, `gnatmake' does not check these - files, because the assumption is that the GNAT internal files are - properly up to date, and also that any write protected ALI files - have been properly installed. Note that if there is an - installation problem, such that one of these files is not up to - date, it will be properly caught by the binder. You may have to - specify this switch if you are working on GNAT itself. `-a' is - also useful in conjunction with `-f' if you need to recompile an - entire application, including run-time files, using special - configuration pragma settings, such as a non-standard - `Float_Representation' pragma. By default `gnatmake -a' compiles - all GNAT internal files with `gcc -c -gnatpg' rather than `gcc -c'. - - `-b' - Bind only. Can be combined with `-c' to do compilation and - binding, but no link. Can be combined with `-l' to do binding and - linking. When not combined with `-c' all the units in the closure - of the main program must have been previously compiled and must be - up to date. The root unit specified by FILE_NAME may be given - without extension, with the source extension or, if no GNAT - Project File is specified, with the ALI file extension. - - `-c' - Compile only. Do not perform binding, except when `-b' is also - specified. Do not perform linking, except if both `-b' and `-l' - are also specified. If the root unit specified by FILE_NAME is - not a main unit, this is the default. Otherwise `gnatmake' will - attempt binding and linking unless all objects are up to date and - the executable is more recent than the objects. - - `-C' - Use a mapping file. A mapping file is a way to communicate to the - compiler two mappings: from unit names to file names (without any - directory information) and from file names to path names (with - full directory information). These mappings are used by the - compiler to short-circuit the path search. When `gnatmake' is - invoked with this switch, it will create a mapping file, initially - populated by the project manager, if `-P' is used, otherwise - initially empty. Each invocation of the compiler will add the newly - accessed sources to the mapping file. This will improve the source - search during the next invocation of the compiler. - - `-f' - Force recompilations. Recompile all sources, even though some - object files may be up to date, but don't recompile predefined or - GNAT internal files or locked files (files with a write-protected - ALI file), unless the `-a' switch is also specified. - - `' - - `-i' - In normal mode, `gnatmake' compiles all object files and ALI files - into the current directory. If the `-i' switch is used, then - instead object files and ALI files that already exist are - overwritten in place. This means that once a large project is - organized into separate directories in the desired manner, then - `gnatmake' will automatically maintain and update this - organization. If no ALI files are found on the Ada object path - (*Note Search Paths and the Run-Time Library (RTL)::), the new - object and ALI files are created in the directory containing the - source being compiled. If another organization is desired, where - objects and sources are kept in different directories, a useful - technique is to create dummy ALI files in the desired directories. - When detecting such a dummy file, `gnatmake' will be forced to - recompile the corresponding source file, and it will be put the - resulting object and ALI files in the directory where it found the - dummy file. - - `-jN' - Use N processes to carry out the (re)compilations. On a - multiprocessor machine compilations will occur in parallel. In the - event of compilation errors, messages from various compilations - might get interspersed (but `gnatmake' will give you the full - ordered list of failing compiles at the end). If this is - problematic, rerun the make process with n set to 1 to get a clean - list of messages. - - `-k' - Keep going. Continue as much as possible after a compilation - error. To ease the programmer's task in case of compilation - errors, the list of sources for which the compile fails is given - when `gnatmake' terminates. - - If `gnatmake' is invoked with several `file_names' and with this - switch, if there are compilation errors when building an - executable, `gnatmake' will not attempt to build the following - executables. - - `-l' - Link only. Can be combined with `-b' to binding and linking. - Linking will not be performed if combined with `-c' but not with - `-b'. When not combined with `-b' all the units in the closure of - the main program must have been previously compiled and must be up - to date, and the main program need to have been bound. The root - unit specified by FILE_NAME may be given without extension, with - the source extension or, if no GNAT Project File is specified, - with the ALI file extension. - - `-m' - Specifies that the minimum necessary amount of recompilations be - performed. In this mode `gnatmake' ignores time stamp differences - when the only modifications to a source file consist in - adding/removing comments, empty lines, spaces or tabs. This means - that if you have changed the comments in a source file or have - simply reformatted it, using this switch will tell gnatmake not to - recompile files that depend on it (provided other sources on which - these files depend have undergone no semantic modifications). Note - that the debugging information may be out of date with respect to - the sources if the `-m' switch causes a compilation to be - switched, so the use of this switch represents a trade-off between - compilation time and accurate debugging information. - - `-M' - Check if all objects are up to date. If they are, output the object - dependences to `stdout' in a form that can be directly exploited in - a `Makefile'. By default, each source file is prefixed with its - (relative or absolute) directory name. This name is whatever you - specified in the various `-aI' and `-I' switches. If you use - `gnatmake -M' `-q' (see below), only the source file names, - without relative paths, are output. If you just specify the `-M' - switch, dependencies of the GNAT internal system files are - omitted. This is typically what you want. If you also specify the - `-a' switch, dependencies of the GNAT internal files are also - listed. Note that dependencies of the objects in external Ada - libraries (see switch `-aL'DIR in the following list) are never - reported. - - `-n' - Don't compile, bind, or link. Checks if all objects are up to date. - If they are not, the full name of the first file that needs to be - recompiled is printed. Repeated use of this option, followed by - compiling the indicated source file, will eventually result in - recompiling all required units. - - `-o EXEC_NAME' - Output executable name. The name of the final executable program - will be EXEC_NAME. If the `-o' switch is omitted the default name - for the executable will be the name of the input file in - appropriate form for an executable file on the host system. - - This switch cannot be used when invoking `gnatmake' with several - `file_names'. - - `-q' - Quiet. When this flag is not set, the commands carried out by - `gnatmake' are displayed. - - `-s' - Recompile if compiler switches have changed since last compilation. - All compiler switches but -I and -o are taken into account in the - following way: orders between different "first letter" switches - are ignored, but orders between same switches are taken into - account. For example, `-O -O2' is different than `-O2 -O', but `-g - -O' is equivalent to `-O -g'. - - `-u' - Unique. Recompile at most the main file. It implies -c. Combined - with -f, it is equivalent to calling the compiler directly. - - `-v' - Verbose. Displays the reason for all recompilations `gnatmake' - decides are necessary. - - `-z' - No main subprogram. Bind and link the program even if the unit name - given on the command line is a package name. The resulting - executable will execute the elaboration routines of the package - and its closure, then the finalization routines. - - ``gcc' switches' - The switch `-g' or any uppercase switch (other than `-A', `-L' or - `-S') or any switch that is more than one character is passed to - `gcc' (e.g. `-O', `-gnato,' etc.) - - Source and library search path switches: - - `-aIDIR' - When looking for source files also look in directory DIR. The - order in which source files search is undertaken is described in - *Note Search Paths and the Run-Time Library (RTL)::. - - `-aLDIR' - Consider DIR as being an externally provided Ada library. - Instructs `gnatmake' to skip compilation units whose `.ali' files - have been located in directory DIR. This allows you to have - missing bodies for the units in DIR and to ignore out of date - bodies for the same units. You still need to specify the location - of the specs for these units by using the switches `-aIDIR' or - `-IDIR'. Note: this switch is provided for compatibility with - previous versions of `gnatmake'. The easier method of causing - standard libraries to be excluded from consideration is to - write-protect the corresponding ALI files. - - `-aODIR' - When searching for library and object files, look in directory - DIR. The order in which library files are searched is described in - *Note Search Paths for gnatbind::. - - `-ADIR' - Equivalent to `-aLDIR -aIDIR'. - - `-IDIR' - Equivalent to `-aODIR -aIDIR'. - - `-I-' - Do not look for source files in the directory containing the source - file named in the command line. Do not look for ALI or object - files in the directory where `gnatmake' was invoked. - - `-LDIR' - Add directory DIR to the list of directories in which the linker - will search for libraries. This is equivalent to `-largs -L'DIR. - - `-nostdinc' - Do not look for source files in the system default directory. - - `-nostdlib' - Do not look for library files in the system default directory. - - `--RTS=RTS-PATH' - Specifies the default location of the runtime library. We look for - the runtime in the following directories, and stop as soon as a - valid runtime is found ("adainclude" or "ada_source_path", and - "adalib" or "ada_object_path" present): - - * /$rts_path - - * /$rts_path - - * /rts-$rts_path - - The selected path is handled like a normal RTS path. - -  - File: gnat_ug_unx.info, Node: Mode Switches for gnatmake, Next: Notes on the Command Line, Prev: Switches for gnatmake, Up: The GNAT Make Program gnatmake - - Mode Switches for `gnatmake' - ============================ - - The mode switches (referred to as `mode_switches') allow the inclusion - of switches that are to be passed to the compiler itself, the binder or - the linker. The effect of a mode switch is to cause all subsequent - switches up to the end of the switch list, or up to the next mode - switch, to be interpreted as switches to be passed on to the designated - component of GNAT. - - `-cargs SWITCHES' - Compiler switches. Here SWITCHES is a list of switches that are - valid switches for `gcc'. They will be passed on to all compile - steps performed by `gnatmake'. - - `-bargs SWITCHES' - Binder switches. Here SWITCHES is a list of switches that are - valid switches for `gcc'. They will be passed on to all bind steps - performed by `gnatmake'. - - `-largs SWITCHES' - Linker switches. Here SWITCHES is a list of switches that are - valid switches for `gcc'. They will be passed on to all link steps - performed by `gnatmake'. - -  - File: gnat_ug_unx.info, Node: Notes on the Command Line, Next: How gnatmake Works, Prev: Mode Switches for gnatmake, Up: The GNAT Make Program gnatmake - - Notes on the Command Line - ========================= - - This section contains some additional useful notes on the operation of - the `gnatmake' command. - - * If `gnatmake' finds no ALI files, it recompiles the main program - and all other units required by the main program. This means that - `gnatmake' can be used for the initial compile, as well as during - subsequent steps of the development cycle. - - * If you enter `gnatmake FILE.adb', where `FILE.adb' is a subunit or - body of a generic unit, `gnatmake' recompiles `FILE.adb' (because - it finds no ALI) and stops, issuing a warning. - - * In `gnatmake' the switch `-I' is used to specify both source and - library file paths. Use `-aI' instead if you just want to specify - source paths only and `-aO' if you want to specify library paths - only. - - * `gnatmake' examines both an ALI file and its corresponding object - file for consistency. If an ALI is more recent than its - corresponding object, or if the object file is missing, the - corresponding source will be recompiled. Note that `gnatmake' - expects an ALI and the corresponding object file to be in the same - directory. - - * `gnatmake' will ignore any files whose ALI file is write-protected. - This may conveniently be used to exclude standard libraries from - consideration and in particular it means that the use of the `-f' - switch will not recompile these files unless `-a' is also - specified. - - * `gnatmake' has been designed to make the use of Ada libraries - particularly convenient. Assume you have an Ada library organized - as follows: OBJ-DIR contains the objects and ALI files for of your - Ada compilation units, whereas INCLUDE-DIR contains the specs of - these units, but no bodies. Then to compile a unit stored in - `main.adb', which uses this Ada library you would just type - - $ gnatmake -aIINCLUDE-DIR -aLOBJ-DIR main - - * Using `gnatmake' along with the `-m (minimal recompilation)' - switch provides a mechanism for avoiding unnecessary - rcompilations. Using this switch, you can update the - comments/format of your source files without having to recompile - everything. Note, however, that adding or deleting lines in a - source files may render its debugging info obsolete. If the file - in question is a spec, the impact is rather limited, as that - debugging info will only be useful during the elaboration phase of - your program. For bodies the impact can be more significant. In - all events, your debugger will warn you if a source file is more - recent than the corresponding object, and alert you to the fact - that the debugging information may be out of date. - -  - File: gnat_ug_unx.info, Node: How gnatmake Works, Next: Examples of gnatmake Usage, Prev: Notes on the Command Line, Up: The GNAT Make Program gnatmake - - How `gnatmake' Works - ==================== - - Generally `gnatmake' automatically performs all necessary - recompilations and you don't need to worry about how it works. However, - it may be useful to have some basic understanding of the `gnatmake' - approach and in particular to understand how it uses the results of - previous compilations without incorrectly depending on them. - - First a definition: an object file is considered "up to date" if the - corresponding ALI file exists and its time stamp predates that of the - object file and if all the source files listed in the dependency - section of this ALI file have time stamps matching those in the ALI - file. This means that neither the source file itself nor any files that - it depends on have been modified, and hence there is no need to - recompile this file. - - `gnatmake' works by first checking if the specified main unit is up - to date. If so, no compilations are required for the main unit. If not, - `gnatmake' compiles the main program to build a new ALI file that - reflects the latest sources. Then the ALI file of the main unit is - examined to find all the source files on which the main program depends, - and `gnatmake' recursively applies the above procedure on all these - files. - - This process ensures that `gnatmake' only trusts the dependencies in - an existing ALI file if they are known to be correct. Otherwise it - always recompiles to determine a new, guaranteed accurate set of - dependencies. As a result the program is compiled "upside down" from - what may be more familiar as the required order of compilation in some - other Ada systems. In particular, clients are compiled before the units - on which they depend. The ability of GNAT to compile in any order is - critical in allowing an order of compilation to be chosen that - guarantees that `gnatmake' will recompute a correct set of new - dependencies if necessary. - - When invoking `gnatmake' with several FILE_NAMES, if a unit is - imported by several of the executables, it will be recompiled at most - once. - -  - File: gnat_ug_unx.info, Node: Examples of gnatmake Usage, Prev: How gnatmake Works, Up: The GNAT Make Program gnatmake - - Examples of `gnatmake' Usage - ============================ - - `gnatmake hello.adb' - Compile all files necessary to bind and link the main program - `hello.adb' (containing unit `Hello') and bind and link the - resulting object files to generate an executable file `hello'. - - `gnatmake main1 main2 main3' - Compile all files necessary to bind and link the main programs - `main1.adb' (containing unit `Main1'), `main2.adb' (containing - unit `Main2') and `main3.adb' (containing unit `Main3') and bind - and link the resulting object files to generate three executable - files `main1', `main2' and `main3'. - - `gnatmake -q Main_Unit -cargs -O2 -bargs -l' - Compile all files necessary to bind and link the main program unit - `Main_Unit' (from file `main_unit.adb'). All compilations will be - done with optimization level 2 and the order of elaboration will be - listed by the binder. `gnatmake' will operate in quiet mode, not - displaying commands it is executing. - -  - File: gnat_ug_unx.info, Node: Renaming Files Using gnatchop, Next: Configuration Pragmas, Prev: The GNAT Make Program gnatmake, Up: Top - - Renaming Files Using `gnatchop' - ******************************* - - This chapter discusses how to handle files with multiple units by using - the `gnatchop' utility. This utility is also useful in renaming files - to meet the standard GNAT default file naming conventions. - - * Menu: - - * Handling Files with Multiple Units:: - * Operating gnatchop in Compilation Mode:: - * Command Line for gnatchop:: - * Switches for gnatchop:: - * Examples of gnatchop Usage:: - -  - File: gnat_ug_unx.info, Node: Handling Files with Multiple Units, Next: Operating gnatchop in Compilation Mode, Up: Renaming Files Using gnatchop - - Handling Files with Multiple Units - ================================== - - The basic compilation model of GNAT requires that a file submitted to - the compiler have only one unit and there be a strict correspondence - between the file name and the unit name. - - The `gnatchop' utility allows both of these rules to be relaxed, - allowing GNAT to process files which contain multiple compilation units - and files with arbitrary file names. `gnatchop' reads the specified - file and generates one or more output files, containing one unit per - file. The unit and the file name correspond, as required by GNAT. - - If you want to permanently restructure a set of "foreign" files so - that they match the GNAT rules, and do the remaining development using - the GNAT structure, you can simply use `gnatchop' once, generate the - new set of files and work with them from that point on. - - Alternatively, if you want to keep your files in the "foreign" - format, perhaps to maintain compatibility with some other Ada - compilation system, you can set up a procedure where you use `gnatchop' - each time you compile, regarding the source files that it writes as - temporary files that you throw away. - -  - File: gnat_ug_unx.info, Node: Operating gnatchop in Compilation Mode, Next: Command Line for gnatchop, Prev: Handling Files with Multiple Units, Up: Renaming Files Using gnatchop - - Operating gnatchop in Compilation Mode - ====================================== - - The basic function of `gnatchop' is to take a file with multiple units - and split it into separate files. The boundary between files is - reasonably clear, except for the issue of comments and pragmas. In - default mode, the rule is that any pragmas between units belong to the - previous unit, except that configuration pragmas always belong to the - following unit. Any comments belong to the following unit. These rules - almost always result in the right choice of the split point without - needing to mark it explicitly and most users will find this default to - be what they want. In this default mode it is incorrect to submit a - file containing only configuration pragmas, or one that ends in - configuration pragmas, to `gnatchop'. - - However, using a special option to activate "compilation mode", - `gnatchop' can perform another function, which is to provide exactly - the semantics required by the RM for handling of configuration pragmas - in a compilation. In the absence of configuration pragmas (at the main - file level), this option has no effect, but it causes such - configuration pragmas to be handled in a quite different manner. - - First, in compilation mode, if `gnatchop' is given a file that - consists of only configuration pragmas, then this file is appended to - the `gnat.adc' file in the current directory. This behavior provides - the required behavior described in the RM for the actions to be taken - on submitting such a file to the compiler, namely that these pragmas - should apply to all subsequent compilations in the same compilation - environment. Using GNAT, the current directory, possibly containing a - `gnat.adc' file is the representation of a compilation environment. For - more information on the `gnat.adc' file, see the section on handling of - configuration pragmas *note Handling of Configuration Pragmas::. - - Second, in compilation mode, if `gnatchop' is given a file that - starts with configuration pragmas, and contains one or more units, then - these configuration pragmas are prepended to each of the chopped files. - This behavior provides the required behavior described in the RM for the - actions to be taken on compiling such a file, namely that the pragmas - apply to all units in the compilation, but not to subsequently compiled - units. - - Finally, if configuration pragmas appear between units, they are - appended to the previous unit. This results in the previous unit being - illegal, since the compiler does not accept configuration pragmas that - follow a unit. This provides the required RM behavior that forbids - configuration pragmas other than those preceding the first compilation - unit of a compilation. - - For most purposes, `gnatchop' will be used in default mode. The - compilation mode described above is used only if you need exactly - accurate behavior with respect to compilations, and you have files that - contain multiple units and configuration pragmas. In this circumstance - the use of `gnatchop' with the compilation mode switch provides the - required behavior, and is for example the mode in which GNAT processes - the ACVC tests. - -  - File: gnat_ug_unx.info, Node: Command Line for gnatchop, Next: Switches for gnatchop, Prev: Operating gnatchop in Compilation Mode, Up: Renaming Files Using gnatchop - - Command Line for `gnatchop' - =========================== - - The `gnatchop' command has the form: - - $ gnatchop switches FILE NAME [FILE NAME FILE NAME ...] - [DIRECTORY] - - The only required argument is the file name of the file to be chopped. - There are no restrictions on the form of this file name. The file itself - contains one or more Ada units, in normal GNAT format, concatenated - together. As shown, more than one file may be presented to be chopped. - - When run in default mode, `gnatchop' generates one output file in - the current directory for each unit in each of the files. - - DIRECTORY, if specified, gives the name of the directory to which - the output files will be written. If it is not specified, all files are - written to the current directory. - - For example, given a file called `hellofiles' containing - - procedure hello; - - with Text_IO; use Text_IO; - procedure hello is - begin - Put_Line ("Hello"); - end hello; - - the command - - $ gnatchop hellofiles - - generates two files in the current directory, one called `hello.ads' - containing the single line that is the procedure spec, and the other - called `hello.adb' containing the remaining text. The original file is - not affected. The generated files can be compiled in the normal manner. - -  - File: gnat_ug_unx.info, Node: Switches for gnatchop, Next: Examples of gnatchop Usage, Prev: Command Line for gnatchop, Up: Renaming Files Using gnatchop - - Switches for `gnatchop' - ======================= - - `gnatchop' recognizes the following switches: - - `-c' - Causes `gnatchop' to operate in compilation mode, in which - configuration pragmas are handled according to strict RM rules. See - previous section for a full description of this mode. - - `-gnatxxx' - This passes the given `-gnatxxx' switch to `gnat' which is used to - parse the given file. Not all `xxx' options make sense, but for - example, the use of `-gnati2' allows `gnatchop' to process a - source file that uses Latin-2 coding for identifiers. - - `-h' - Causes `gnatchop' to generate a brief help summary to the standard - output file showing usage information. - - `-kMM' - Limit generated file names to the specified number `mm' of - characters. This is useful if the resulting set of files is - required to be interoperable with systems which limit the length - of file names. No space is allowed between the `-k' and the - numeric value. The numeric value may be omitted in which case a - default of `-k8', suitable for use with DOS-like file systems, is - used. If no `-k' switch is present then there is no limit on the - length of file names. - - `-p' - Causes the file modification time stamp of the input file to be - preserved and used for the time stamp of the output file(s). This - may be useful for preserving coherency of time stamps in an - enviroment where `gnatchop' is used as part of a standard build - process. - - `-q' - Causes output of informational messages indicating the set of - generated files to be suppressed. Warnings and error messages are - unaffected. - - `-r' - Generate `Source_Reference' pragmas. Use this switch if the output - files are regarded as temporary and development is to be done in - terms of the original unchopped file. This switch causes - `Source_Reference' pragmas to be inserted into each of the - generated files to refers back to the original file name and line - number. The result is that all error messages refer back to the - original unchopped file. In addition, the debugging information - placed into the object file (when the `-g' switch of `gcc' or - `gnatmake' is specified) also refers back to this original file so - that tools like profilers and debuggers will give information in - terms of the original unchopped file. - - If the original file to be chopped itself contains a - `Source_Reference' pragma referencing a third file, then gnatchop - respects this pragma, and the generated `Source_Reference' pragmas - in the chopped file refer to the original file, with appropriate - line numbers. This is particularly useful when `gnatchop' is used - in conjunction with `gnatprep' to compile files that contain - preprocessing statements and multiple units. - - `-v' - Causes `gnatchop' to operate in verbose mode. The version number - and copyright notice are output, as well as exact copies of the - gnat1 commands spawned to obtain the chop control information. - - `-w' - Overwrite existing file names. Normally `gnatchop' regards it as a - fatal error if there is already a file with the same name as a - file it would otherwise output, in other words if the files to be - chopped contain duplicated units. This switch bypasses this check, - and causes all but the last instance of such duplicated units to - be skipped. - - `--GCC=xxxx' - Specify the path of the GNAT parser to be used. When this switch - is used, no attempt is made to add the prefix to the GNAT parser - executable. - -  - File: gnat_ug_unx.info, Node: Examples of gnatchop Usage, Prev: Switches for gnatchop, Up: Renaming Files Using gnatchop - - Examples of `gnatchop' Usage - ============================ - - `gnatchop -w hello_s.ada ichbiah/files' - Chops the source file `hello_s.ada'. The output files will be - placed in the directory `ichbiah/files', overwriting any files - with matching names in that directory (no files in the current - directory are modified). - - `gnatchop archive' - Chops the source file `archive' into the current directory. One - useful application of `gnatchop' is in sending sets of sources - around, for example in email messages. The required sources are - simply concatenated (for example, using a Unix `cat' command), and - then `gnatchop' is used at the other end to reconstitute the - original file names. - - `gnatchop file1 file2 file3 direc' - Chops all units in files `file1', `file2', `file3', placing the - resulting files in the directory `direc'. Note that if any units - occur more than once anywhere within this set of files, an error - message is generated, and no files are written. To override this - check, use the `-w' switch, in which case the last occurrence in - the last file will be the one that is output, and earlier - duplicate occurrences for a given unit will be skipped. - -  - File: gnat_ug_unx.info, Node: Configuration Pragmas, Next: Handling Arbitrary File Naming Conventions Using gnatname, Prev: Renaming Files Using gnatchop, Up: Top - - Configuration Pragmas - ********************* - - In Ada 95, configuration pragmas include those pragmas described as - such in the Ada 95 Reference Manual, as well as - implementation-dependent pragmas that are configuration pragmas. See the - individual descriptions of pragmas in the GNAT Reference Manual for - details on these additional GNAT-specific configuration pragmas. Most - notably, the pragma `Source_File_Name', which allows specifying - non-default names for source files, is a configuration pragma. The - following is a complete list of configuration pragmas recognized by - `GNAT': - - Ada_83 - Ada_95 - C_Pass_By_Copy - Component_Alignment - Discard_Names - Elaboration_Checks - Eliminate - Extend_System - Extensions_Allowed - External_Name_Casing - Float_Representation - Initialize_Scalars - License - Locking_Policy - Long_Float - No_Run_Time - Normalize_Scalars - Polling - Propagate_Exceptions - Queuing_Policy - Ravenscar - Restricted_Run_Time - Restrictions - Reviewable - Source_File_Name - Style_Checks - Suppress - Task_Dispatching_Policy - Unsuppress - Use_VADS_Size - Warnings - Validity_Checks - - * Menu: - - * Handling of Configuration Pragmas:: - * The Configuration Pragmas Files:: - -  - File: gnat_ug_unx.info, Node: Handling of Configuration Pragmas, Next: The Configuration Pragmas Files, Up: Configuration Pragmas - - Handling of Configuration Pragmas - ================================= - - Configuration pragmas may either appear at the start of a compilation - unit, in which case they apply only to that unit, or they may apply to - all compilations performed in a given compilation environment. - - GNAT also provides the `gnatchop' utility to provide an automatic - way to handle configuration pragmas following the semantics for - compilations (that is, files with multiple units), described in the RM. - See section *note Operating gnatchop in Compilation Mode:: for details. - However, for most purposes, it will be more convenient to edit the - `gnat.adc' file that contains configuration pragmas directly, as - described in the following section. - -  - File: gnat_ug_unx.info, Node: The Configuration Pragmas Files, Prev: Handling of Configuration Pragmas, Up: Configuration Pragmas - - The Configuration Pragmas Files - =============================== - - In GNAT a compilation environment is defined by the current directory - at the time that a compile command is given. This current directory is - searched for a file whose name is `gnat.adc'. If this file is present, - it is expected to contain one or more configuration pragmas that will - be applied to the current compilation. However, if the switch `-gnatA' - is used, `gnat.adc' is not considered. - - Configuration pragmas may be entered into the `gnat.adc' file either - by running `gnatchop' on a source file that consists only of - configuration pragmas, or more conveniently by direct editing of the - `gnat.adc' file, which is a standard format source file. - - In addition to `gnat.adc', one additional file containing - configuration pragmas may be applied to the current compilation using - the switch `-gnatec'PATH. PATH must designate an existing file that - contains only configuration pragmas. These configuration pragmas are in - addition to those found in `gnat.adc' (provided `gnat.adc' is present - and switch `-gnatA' is not used). - - It is allowed to specify several switches `-gnatec', however only - the last one on the command line will be taken into account. - -  - File: gnat_ug_unx.info, Node: Handling Arbitrary File Naming Conventions Using gnatname, Next: GNAT Project Manager, Prev: Configuration Pragmas, Up: Top - - Handling Arbitrary File Naming Conventions Using `gnatname' - *********************************************************** - - * Menu: - - * Arbitrary File Naming Conventions:: - * Running gnatname:: - * Switches for gnatname:: - * Examples of gnatname Usage:: - -  - File: gnat_ug_unx.info, Node: Arbitrary File Naming Conventions, Next: Running gnatname, Up: Handling Arbitrary File Naming Conventions Using gnatname - - Arbitrary File Naming Conventions - ================================= - - The GNAT compiler must be able to know the source file name of a - compilation unit. When using the standard GNAT default file naming - conventions (`.ads' for specs, `.adb' for bodies), the GNAT compiler - does not need additional information. - - When the source file names do not follow the standard GNAT default file - naming conventions, the GNAT compiler must be given additional - information through a configuration pragmas file (see *Note - Configuration Pragmas::) or a project file. When the non standard file - naming conventions are well-defined, a small number of pragmas - `Source_File_Name' specifying a naming pattern (see *Note Alternative - File Naming Schemes::) may be sufficient. However, if the file naming - conventions are irregular or arbitrary, a number of pragma - `Source_File_Name' for individual compilation units must be defined. - To help maintain the correspondence between compilation unit names and - source file names within the compiler, GNAT provides a tool `gnatname' - to generate the required pragmas for a set of files. - -  - File: gnat_ug_unx.info, Node: Running gnatname, Next: Switches for gnatname, Prev: Arbitrary File Naming Conventions, Up: Handling Arbitrary File Naming Conventions Using gnatname - - Running `gnatname' - ================== - - The usual form of the `gnatname' command is - - $ gnatname [SWITCHES] NAMING_PATTERN [NAMING_PATTERNS] - - All of the arguments are optional. If invoked without any argument, - `gnatname' will display its usage. - - When used with at least one naming pattern, `gnatname' will attempt to - find all the compilation units in files that follow at least one of the - naming patterns. To find these compilation units, `gnatname' will use - the GNAT compiler in syntax-check-only mode on all regular files. - - One or several Naming Patterns may be given as arguments to `gnatname'. - Each Naming Pattern is enclosed between double quotes. A Naming - Pattern is a regular expression similar to the wildcard patterns used - in file names by the Unix shells or the DOS prompt. - - Examples of Naming Patterns are - - "*.[12].ada" - "*.ad[sb]*" - "body_*" "spec_*" - - For a more complete description of the syntax of Naming Patterns, see - the second kind of regular expressions described in `g-regexp.ads' (the - "Glob" regular expressions). - - When invoked with no switches, `gnatname' will create a configuration - pragmas file `gnat.adc' in the current working directory, with pragmas - `Source_File_Name' for each file that contains a valid Ada unit. - -  - File: gnat_ug_unx.info, Node: Switches for gnatname, Next: Examples of gnatname Usage, Prev: Running gnatname, Up: Handling Arbitrary File Naming Conventions Using gnatname - - Switches for `gnatname' - ======================= - - Switches for `gnatname' must precede any specified Naming Pattern. - - You may specify any of the following switches to `gnatname': - - `-c`file'' - Create a configuration pragmas file `file' (instead of the default - `gnat.adc'). There may be zero, one or more space between `-c' and - `file'. `file' may include directory information. `file' must be - writeable. There may be only one switch `-c'. When a switch `-c' is - specified, no switch `-P' may be specified (see below). - - `-d`dir'' - Look for source files in directory `dir'. There may be zero, one - or more spaces between `-d' and `dir'. When a switch `-d' is - specified, the current working directory will not be searched for - source files, unless it is explictly specified with a `-d' or `-D' - switch. Several switches `-d' may be specified. If `dir' is a - relative path, it is relative to the directory of the - configuration pragmas file specified with switch `-c', or to the - directory of the project file specified with switch `-P' or, if - neither switch `-c' nor switch `-P' are specified, it is relative - to the current working directory. The directory specified with - switch `-c' must exist and be readable. - - `-D`file'' - Look for source files in all directories listed in text file - `file'. There may be zero, one or more spaces between `-d' and - `dir'. `file' must be an existing, readable text file. Each non - empty line in `file' must be a directory. Specifying switch `-D' - is equivalent to specifying as many switches `-d' as there are non - empty lines in `file'. - - `-h' - Output usage (help) information. The output is written to `stdout'. - - `-P`proj'' - Create or update project file `proj'. There may be zero, one or - more space between `-P' and `proj'. `proj' may include directory - information. `proj' must be writeable. There may be only one - switch `-P'. When a switch `-P' is specified, no switch `-c' may - be specified. - - `-v' - Verbose mode. Output detailed explanation of behavior to `stdout'. - This includes name of the file written, the name of the - directories to search and, for each file in those directories - whose name matches at least one of the Naming Patterns, an - indication of whether the file contains a unit, and if so the name - of the unit. - - `-v -v' - Very Verbose mode. In addition to the output produced in verbose - mode, for each file in the searched directories whose name matches - none of the Naming Patterns, an indication is given that there is - no match. - - `-x`pattern'' - Excluded patterns. Using this switch, it is possible to exclude - some files that would match the name patterns. For example, - `"gnatname -x "*_nt.ada" "*.ada"' will look for Ada units in all - files with the `.ada' extension, except those whose names end with - `_nt.ada'. - -  - File: gnat_ug_unx.info, Node: Examples of gnatname Usage, Prev: Switches for gnatname, Up: Handling Arbitrary File Naming Conventions Using gnatname - - Examples of `gnatname' Usage - ============================ - - $ gnatname -c /home/me/names.adc -d sources "[a-z]*.ada*" - - In this example, the directory `/home/me' must already exist and be - writeable. In addition, the directory `/home/me/sources' (specified by - `-d sources') must exist and be readable. Note the optional spaces after - `-c' and `-d'. - - $ gnatname -P/home/me/proj -x "*_nt_body.ada" -dsources -dsources/plus -Dcommon_dirs.txt "body_*" "spec_*" - - Note that several switches `-d' may be used, even in conjunction - with one or several switches `-D'. Several Naming Patterns and one - excluded pattern are used in this example. - -  - File: gnat_ug_unx.info, Node: GNAT Project Manager, Next: Elaboration Order Handling in GNAT, Prev: Handling Arbitrary File Naming Conventions Using gnatname, Up: Top - - GNAT Project Manager - ******************** - - * Menu: - - * Introduction:: - * Examples of Project Files:: - * Project File Syntax:: - * Objects and Sources in Project Files:: - * Importing Projects:: - * Project Extension:: - * External References in Project Files:: - * Packages in Project Files:: - * Variables from Imported Projects:: - * Naming Schemes:: - * Library Projects:: - * Switches Related to Project Files:: - * Tools Supporting Project Files:: - * An Extended Example:: - * Project File Complete Syntax:: - -  - File: gnat_ug_unx.info, Node: Introduction, Next: Examples of Project Files, Up: GNAT Project Manager - - Introduction - ============ - - This chapter describes GNAT's _Project Manager_, a facility that lets - you configure various properties for a collection of source files. In - particular, you can specify: - * The directory or set of directories containing the source files, - and/or the names of the specific source files themselves - - * The directory in which the compiler's output (`ALI' files, object - files, tree files) will be placed - - * The directory in which the executable programs will be placed - - * Switch settings for any of the project-enabled tools (`gnatmake', - compiler, binder, linker, `gnatls', `gnatxref', `gnatfind'); you - can apply these settings either globally or to individual units - - * The source files containing the main subprogram(s) to be built - - * The source programming language(s) (currently Ada and/or C) - - * Source file naming conventions; you can specify these either - globally or for individual units - - * Menu: - - * Project Files:: - -  - File: gnat_ug_unx.info, Node: Project Files, Up: Introduction - - Project Files - ------------- - - A "project" is a specific set of values for these properties. You can - define a project's settings in a "project file", a text file with an - Ada-like syntax; a property value is either a string or a list of - strings. Properties that are not explicitly set receive default - values. A project file may interrogate the values of "external - variables" (user-defined command-line switches or environment - variables), and it may specify property settings conditionally, based - on the value of such variables. - - In simple cases, a project's source files depend only on other - source files in the same project, or on the predefined libraries. - ("Dependence" is in the technical sense; for example, one Ada unit - "with"ing another.) However, the Project Manager also allows much more - sophisticated arrangements, with the source files in one project - depending on source files in other projects: - * One project can _import_ other projects containing needed source - files. - - * You can organize GNAT projects in a hierarchy: a _child_ project - can extend a _parent_ project, inheriting the parent's source - files and optionally overriding any of them with alternative - versions - - More generally, the Project Manager lets you structure large development - efforts into hierarchical subsystems, with build decisions deferred to - the subsystem level and thus different compilation environments (switch - settings) used for different subsystems. - - The Project Manager is invoked through the `-P_projectfile_' switch - to `gnatmake' or to the `gnat' front driver. If you want to define (on - the command line) an external variable that is queried by the project - file, additionally use the `-X_vbl_=_value_' switch. The Project - Manager parses and interprets the project file, and drives the invoked - tool based on the project settings. - - The Project Manager supports a wide range of development strategies, - for systems of all sizes. Some typical practices that are easily - handled: - * Using a common set of source files, but generating object files in - different directories via different switch settings - - * Using a mostly-shared set of source files, but with different - versions of some unit or units - - The destination of an executable can be controlled inside a project file - using the `-o' switch. In the absence of such a switch either inside - the project file or on the command line, any executable files generated - by `gnatmake' will be placed in the directory `Exec_Dir' specified in - the project file. If no `Exec_Dir' is specified, they will be placed in - the object directory of the project. - - You can use project files to achieve some of the effects of a source - versioning system (for example, defining separate projects for the - different sets of sources that comprise different releases) but the - Project Manager is independent of any source configuration management - tools that might be used by the developers. - - The next section introduces the main features of GNAT's project - facility through a sequence of examples; subsequent sections will - present the syntax and semantics in more detail. - -  - File: gnat_ug_unx.info, Node: Examples of Project Files, Next: Project File Syntax, Prev: Introduction, Up: GNAT Project Manager - - Examples of Project Files - ========================= - - This section illustrates some of the typical uses of project files and - explains their basic structure and behavior. - - * Menu: - - * Common Sources with Different Switches and Different Output Directories:: - * Using External Variables:: - * Importing Other Projects:: - * Extending a Project:: - -  - File: gnat_ug_unx.info, Node: Common Sources with Different Switches and Different Output Directories, Next: Using External Variables, Up: Examples of Project Files - - Common Sources with Different Switches and Different Output Directories - ----------------------------------------------------------------------- - - * Menu: - - * Source Files:: - * Specifying the Object Directory:: - * Specifying the Exec Directory:: - * Project File Packages:: - * Specifying Switch Settings:: - * Main Subprograms:: - * Source File Naming Conventions:: - * Source Language(s):: - - Assume that the Ada source files `pack.ads', `pack.adb', and `proc.adb' - are in the `/common' directory. The file `proc.adb' contains an Ada - main subprogram `Proc' that "with"s package `Pack'. We want to compile - these source files under two sets of switches: - * When debugging, we want to pass the `-g' switch to `gnatmake', and - the `-gnata', `-gnato', and `-gnatE' switches to the compiler; the - compiler's output is to appear in `/common/debug' - - * When preparing a release version, we want to pass the `-O2' switch - to the compiler; the compiler's output is to appear in - `/common/release' - - The GNAT project files shown below, respectively `debug.gpr' and - `release.gpr' in the `/common' directory, achieve these effects. - - Diagrammatically: - /common - debug.gpr - release.gpr - pack.ads - pack.adb - proc.adb - /common/debug {-g, -gnata, -gnato, -gnatE} - proc.ali, proc.o - pack.ali, pack.o - /common/release {-O2} - proc.ali, proc.o - pack.ali, pack.o - Here are the project files: - project Debug is - for Object_Dir use "debug"; - for Main use ("proc"); - - package Builder is - for Default_Switches ("Ada") use ("-g"); - end Builder; - - package Compiler is - for Default_Switches ("Ada") - use ("-fstack-check", "-gnata", "-gnato", "-gnatE"); - end Compiler; - end Debug; - - project Release is - for Object_Dir use "release"; - for Exec_Dir use "."; - for Main use ("proc"); - - package Compiler is - for Default_Switches ("Ada") use ("-O2"); - end Compiler; - end Release; - - The name of the project defined by `debug.gpr' is `"Debug"' (case - insensitive), and analogously the project defined by `release.gpr' is - `"Release"'. For consistency the file should have the same name as the - project, and the project file's extension should be `"gpr"'. These - conventions are not required, but a warning is issued if they are not - followed. - - If the current directory is `/temp', then the command - gnatmake -P/common/debug.gpr - - generates object and ALI files in `/common/debug', and the `proc' - executable also in `/common/debug', using the switch settings defined in - the project file. - - Likewise, the command - gnatmake -P/common/release.gpr - - generates object and ALI files in `/common/release', and the `proc' - executable in `/common', using the switch settings from the project - file. - -  - File: gnat_ug_unx.info, Node: Source Files, Next: Specifying the Object Directory, Up: Common Sources with Different Switches and Different Output Directories - - Source Files - ............ - - If a project file does not explicitly specify a set of source - directories or a set of source files, then by default the project's - source files are the Ada source files in the project file directory. - Thus `pack.ads', `pack.adb', and `proc.adb' are the source files for - both projects. - -  - File: gnat_ug_unx.info, Node: Specifying the Object Directory, Next: Specifying the Exec Directory, Prev: Source Files, Up: Common Sources with Different Switches and Different Output Directories - - Specifying the Object Directory - ............................... - - Several project properties are modeled by Ada-style _attributes_; you - define the property by supplying the equivalent of an Ada attribute - definition clause in the project file. A project's object directory is - such a property; the corresponding attribute is `Object_Dir', and its - value is a string expression. A directory may be specified either as - absolute or as relative; in the latter case, it is relative to the - project file directory. Thus the compiler's output is directed to - `/common/debug' (for the `Debug' project) and to `/common/release' (for - the `Release' project). If `Object_Dir' is not specified, then the - default is the project file directory. - -  - File: gnat_ug_unx.info, Node: Specifying the Exec Directory, Next: Project File Packages, Prev: Specifying the Object Directory, Up: Common Sources with Different Switches and Different Output Directories - - Specifying the Exec Directory - ............................. - - A project's exec directory is another property; the corresponding - attribute is `Exec_Dir', and its value is also a string expression, - either specified as relative or absolute. If `Exec_Dir' is not - specified, then the default is the object directory (which may also be - the project file directory if attribute `Object_Dir' is not specified). - Thus the executable is placed in `/common/debug' for the `Debug' - project (attribute `Exec_Dir' not specified) and in `/common' for the - `Release' project. - -  - File: gnat_ug_unx.info, Node: Project File Packages, Next: Specifying Switch Settings, Prev: Specifying the Exec Directory, Up: Common Sources with Different Switches and Different Output Directories - - Project File Packages - ..................... - - A GNAT tool integrated with the Project Manager is modeled by a - corresponding package in the project file. The `Debug' project defines - the packages `Builder' (for `gnatmake') and `Compiler'; the `Release' - project defines only the `Compiler' package. - - The Ada package syntax is not to be taken literally. Although - packages in project files bear a surface resemblance to packages in Ada - source code, the notation is simply a way to convey a grouping of - properties for a named entity. Indeed, the package names permitted in - project files are restricted to a predefined set, corresponding to the - project-aware tools, and the contents of packages are limited to a - small set of constructs. The packages in the example above contain - attribute definitions. - -  - File: gnat_ug_unx.info, Node: Specifying Switch Settings, Next: Main Subprograms, Prev: Project File Packages, Up: Common Sources with Different Switches and Different Output Directories - - Specifying Switch Settings - .......................... - - Switch settings for a project-aware tool can be specified through - attributes in the package corresponding to the tool. The example above - illustrates one of the relevant attributes, `Default_Switches', defined - in the packages in both project files. Unlike simple attributes like - `Source_Dirs', `Default_Switches' is known as an _associative array_. - When you define this attribute, you must supply an "index" (a literal - string), and the effect of the attribute definition is to set the value - of the "array" at the specified "index". For the `Default_Switches' - attribute, the index is a programming language (in our case, Ada) , and - the value specified (after `use') must be a list of string expressions. - - The attributes permitted in project files are restricted to a - predefined set. Some may appear at project level, others in packages. - For any attribute that is an associate array, the index must always be a - literal string, but the restrictions on this string (e.g., a file name - or a language name) depend on the individual attribute. Also depending - on the attribute, its specified value will need to be either a string - or a string list. - - In the `Debug' project, we set the switches for two tools, - `gnatmake' and the compiler, and thus we include corresponding - packages, with each package defining the `Default_Switches' attribute - with index `"Ada"'. Note that the package corresponding to `gnatmake' - is named `Builder'. The `Release' project is similar, but with just - the `Compiler' package. - - In project `Debug' above the switches starting with `-gnat' that are - specified in package `Compiler' could have been placed in package - `Builder', since `gnatmake' transmits all such switches to the compiler. - -  - File: gnat_ug_unx.info, Node: Main Subprograms, Next: Source File Naming Conventions, Prev: Specifying Switch Settings, Up: Common Sources with Different Switches and Different Output Directories - - Main Subprograms - ................ - - One of the properties of a project is its list of main subprograms - (actually a list of names of source files containing main subprograms, - with the file extension optional. This property is captured in the - `Main' attribute, whose value is a list of strings. If a project - defines the `Main' attribute, then you do not need to identify the main - subprogram(s) when invoking `gnatmake' (see *Note gnatmake and Project - Files::). - -  - File: gnat_ug_unx.info, Node: Source File Naming Conventions, Next: Source Language(s), Prev: Main Subprograms, Up: Common Sources with Different Switches and Different Output Directories - - Source File Naming Conventions - .............................. - - Since the project files do not specify any source file naming - conventions, the GNAT defaults are used. The mechanism for defining - source file naming conventions - a package named `Naming' - will be - described below (*note Naming Schemes::). - -  - File: gnat_ug_unx.info, Node: Source Language(s), Prev: Source File Naming Conventions, Up: Common Sources with Different Switches and Different Output Directories - - Source Language(s) - .................. - - Since the project files do not specify a `Languages' attribute, by - default the GNAT tools assume that the language of the project file is - Ada. More generally, a project can comprise source files in Ada, C, - and/or other languages. - -  - File: gnat_ug_unx.info, Node: Using External Variables, Next: Importing Other Projects, Prev: Common Sources with Different Switches and Different Output Directories, Up: Examples of Project Files - - Using External Variables - ------------------------ - - Instead of supplying different project files for debug and release, we - can define a single project file that queries an external variable (set - either on the command line or via an environment variable) in order to - conditionally define the appropriate settings. Again, assume that the - source files `pack.ads', `pack.adb', and `proc.adb' are located in - directory `/common'. The following project file, `build.gpr', queries - the external variable named `STYLE' and defines an object directory and - switch settings based on whether the value is `"deb"' (debug) or - `"rel"' (release), where the default is `"deb"'. - - project Build is - for Main use ("proc"); - - type Style_Type is ("deb", "rel"); - Style : Style_Type := external ("STYLE", "deb"); - - case Style is - when "deb" => - for Object_Dir use "debug"; - - when "rel" => - for Object_Dir use "release"; - for Exec_Dir use "."; - end case; - - package Builder is - - case Style is - when "deb" => - for Default_Switches ("Ada") use ("-g"); - end case; - - end Builder; - - package Compiler is - - case Style is - when "deb" => - for Default_Switches ("Ada") use ("-gnata", "-gnato", "-gnatE"); - - when "rel" => - for Default_Switches ("Ada") use ("-O2"); - end case; - - end Compiler; - - end Build; - - `Style_Type' is an example of a _string type_, which is the project - file analog of an Ada enumeration type but containing string literals - rather than identifiers. `Style' is declared as a variable of this - type. - - The form `external("STYLE", "deb")' is known as an _external - reference_; its first argument is the name of an _external variable_, - and the second argument is a default value to be used if the external - variable doesn't exist. You can define an external variable on the - command line via the `-X' switch, or you can use an environment - variable as an external variable. - - Each `case' construct is expanded by the Project Manager based on the - value of `Style'. Thus the command - gnatmake -P/common/build.gpr -XSTYLE=deb - - is equivalent to the `gnatmake' invocation using the project file - `debug.gpr' in the earlier example. So is the command - gnatmake -P/common/build.gpr - - since `"deb"' is the default for `STYLE'. - - Analogously, - gnatmake -P/common/build.gpr -XSTYLE=rel - - is equivalent to the `gnatmake' invocation using the project file - `release.gpr' in the earlier example. - -  - File: gnat_ug_unx.info, Node: Importing Other Projects, Next: Extending a Project, Prev: Using External Variables, Up: Examples of Project Files - - Importing Other Projects - ------------------------ - - A compilation unit in a source file in one project may depend on - compilation units in source files in other projects. To obtain this - behavior, the dependent project must _import_ the projects containing - the needed source files. This effect is embodied in syntax similar to - an Ada `with' clause, but the "with"ed entities are strings denoting - project files. - - As an example, suppose that the two projects `GUI_Proj' and - `Comm_Proj' are defined in the project files `gui_proj.gpr' and - `comm_proj.gpr' in directories `/gui' and `/comm', respectively. - Assume that the source files for `GUI_Proj' are `gui.ads' and - `gui.adb', and that the source files for `Comm_Proj' are `comm.ads' and - `comm.adb', with each set of files located in its respective project - file directory. Diagrammatically: - - /gui - gui_proj.gpr - gui.ads - gui.adb - - /comm - comm_proj.gpr - comm.ads - comm.adb - - We want to develop an application in directory `/app' that "with"s the - packages `GUI' and `Comm', using the properties of the corresponding - project files (e.g. the switch settings and object directory). - Skeletal code for a main procedure might be something like the - following: - - with GUI, Comm; - procedure App_Main is - ... - begin - ... - end App_Main; - - Here is a project file, `app_proj.gpr', that achieves the desired - effect: - - with "/gui/gui_proj", "/comm/comm_proj"; - project App_Proj is - for Main use ("app_main"); - end App_Proj; - - Building an executable is achieved through the command: - gnatmake -P/app/app_proj - - which will generate the `app_main' executable in the directory where - `app_proj.gpr' resides. - - If an imported project file uses the standard extension (`gpr') then - (as illustrated above) the `with' clause can omit the extension. - - Our example specified an absolute path for each imported project - file. Alternatively, you can omit the directory if either - * The imported project file is in the same directory as the - importing project file, or - - * You have defined an environment variable `ADA_PROJECT_PATH' that - includes the directory containing the needed project file. - - Thus, if we define `ADA_PROJECT_PATH' to include `/gui' and `/comm', - then our project file `app_proj.gpr' could be written as follows: - - with "gui_proj", "comm_proj"; - project App_Proj is - for Main use ("app_main"); - end App_Proj; - - Importing other projects raises the possibility of ambiguities. For - example, the same unit might be present in different imported projects, - or it might be present in both the importing project and an imported - project. Both of these conditions are errors. Note that in the - current version of the Project Manager, it is illegal to have an - ambiguous unit even if the unit is never referenced by the importing - project. This restriction may be relaxed in a future release. - -  - File: gnat_ug_unx.info, Node: Extending a Project, Prev: Importing Other Projects, Up: Examples of Project Files - - Extending a Project - ------------------- - - A common situation in large software systems is to have multiple - implementations for a common interface; in Ada terms, multiple versions - of a package body for the same specification. For example, one - implementation might be safe for use in tasking programs, while another - might only be used in sequential applications. This can be modeled in - GNAT using the concept of _project extension_. If one project (the - "child") _extends_ another project (the "parent") then by default all - source files of the parent project are inherited by the child, but the - child project can override any of the parent's source files with new - versions, and can also add new files. This facility is the project - analog of extension in Object-Oriented Programming. Project - hierarchies are permitted (a child project may be the parent of yet - another project), and a project that inherits one project can also - import other projects. - - As an example, suppose that directory `/seq' contains the project - file `seq_proj.gpr' and the source files `pack.ads', `pack.adb', and - `proc.adb': - - /seq - pack.ads - pack.adb - proc.adb - seq_proj.gpr - - Note that the project file can simply be empty (that is, no attribute or - package is defined): - - project Seq_Proj is - end Seq_Proj; - - implying that its source files are all the Ada source files in the - project directory. - - Suppose we want to supply an alternate version of `pack.adb', in - directory `/tasking', but use the existing versions of `pack.ads' and - `proc.adb'. We can define a project `Tasking_Proj' that inherits - `Seq_Proj': - - /tasking - pack.adb - tasking_proj.gpr - - project Tasking_Proj extends "/seq/seq_proj" is - end Tasking_Proj; - - The version of `pack.adb' used in a build depends on which project file - is specified. - - Note that we could have designed this using project import rather - than project inheritance; a `base' project would contain the sources for - `pack.ads' and `proc.adb', a sequential project would import `base' and - add `pack.adb', and likewise a tasking project would import `base' and - add a different version of `pack.adb'. The choice depends on whether - other sources in the original project need to be overridden. If they - do, then project extension is necessary, otherwise, importing is - sufficient. - -  - File: gnat_ug_unx.info, Node: Project File Syntax, Next: Objects and Sources in Project Files, Prev: Examples of Project Files, Up: GNAT Project Manager - - Project File Syntax - =================== - - * Menu: - - * Basic Syntax:: - * Packages:: - * Expressions:: - * String Types:: - * Variables:: - * Attributes:: - * Associative Array Attributes:: - * case Constructions:: - - This section describes the structure of project files. - - A project may be an _independent project_, entirely defined by a - single project file. Any Ada source file in an independent project - depends only on the predefined library and other Ada source files in - the same project. - - A project may also "depend on" other projects, in either or both of the - following ways: - * It may import any number of projects - - * It may extend at most one other project - - The dependence relation is a directed acyclic graph (the subgraph - reflecting the "extends" relation is a tree). - - A project's "immediate sources" are the source files directly - defined by that project, either implicitly by residing in the project - file's directory, or explicitly through any of the source-related - attributes described below. More generally, a project PROJ's "sources" - are the immediate sources of PROJ together with the immediate sources - (unless overridden) of any project on which PROJ depends (either - directly or indirectly). - -  - File: gnat_ug_unx.info, Node: Basic Syntax, Next: Packages, Up: Project File Syntax - - Basic Syntax - ------------ - - As seen in the earlier examples, project files have an Ada-like syntax. - The minimal project file is: - project Empty is - - end Empty; - - The identifier `Empty' is the name of the project. This project name - must be present after the reserved word `end' at the end of the project - file, followed by a semi-colon. - - Any name in a project file, such as the project name or a variable - name, has the same syntax as an Ada identifier. - - The reserved words of project files are the Ada reserved words plus - `extends', `external', and `project'. Note that the only Ada reserved - words currently used in project file syntax are: - - * `case' - - * `end' - - * `for' - - * `is' - - * `others' - - * `package' - - * `renames' - - * `type' - - * `use' - - * `when' - - * `with' - - Comments in project files have the same syntax as in Ada, two - consecutives hyphens through the end of the line. - -  - File: gnat_ug_unx.info, Node: Packages, Next: Expressions, Prev: Basic Syntax, Up: Project File Syntax - - Packages - -------- - - A project file may contain _packages_. The name of a package must be one - of the identifiers (case insensitive) from a predefined list, and a - package with a given name may only appear once in a project file. The - predefined list includes the following packages: - - * `Naming' - - * `Builder' - - * `Compiler' - - * `Binder' - - * `Linker' - - * `Finder' - - * `Cross_Reference' - - * `gnatls' - - (The complete list of the package names and their attributes can be - found in file `prj-attr.adb'). - - In its simplest form, a package may be empty: - - project Simple is - package Builder is - end Builder; - end Simple; - - A package may contain _attribute declarations_, _variable declarations_ - and _case constructions_, as will be described below. - - When there is ambiguity between a project name and a package name, - the name always designates the project. To avoid possible confusion, it - is always a good idea to avoid naming a project with one of the names - allowed for packages or any name that starts with `gnat'. - -  - File: gnat_ug_unx.info, Node: Expressions, Next: String Types, Prev: Packages, Up: Project File Syntax - - Expressions - ----------- - - An _expression_ is either a _string expression_ or a _string list - expression_. - - A _string expression_ is either a _simple string expression_ or a - _compound string expression_. - - A _simple string expression_ is one of the following: - * A literal string; e.g.`"comm/my_proj.gpr"' - - * A string-valued variable reference (see *Note Variables::) - - * A string-valued attribute reference (see *Note Attributes::) - - * An external reference (see *Note External References in Project - Files::) - - A _compound string expression_ is a concatenation of string expressions, - using `"&"' - Path & "/" & File_Name & ".ads" - - A _string list expression_ is either a _simple string list expression_ - or a _compound string list expression_. - - A _simple string list expression_ is one of the following: - * A parenthesized list of zero or more string expressions, separated - by commas - File_Names := (File_Name, "gnat.adc", File_Name & ".orig"); - Empty_List := (); - - * A string list-valued variable reference - - * A string list-valued attribute reference - - A _compound string list expression_ is the concatenation (using `"&"') - of a simple string list expression and an expression. Note that each - term in a compound string list expression, except the first, may be - either a string expression or a string list expression. - - File_Name_List := () & File_Name; -- One string in this list - Extended_File_Name_List := File_Name_List & (File_Name & ".orig"); - -- Two strings - Big_List := File_Name_List & Extended_File_Name_List; - -- Concatenation of two string lists: three strings - Illegal_List := "gnat.adc" & Extended_File_Name_List; - -- Illegal: must start with a string list - -  - File: gnat_ug_unx.info, Node: String Types, Next: Variables, Prev: Expressions, Up: Project File Syntax - - String Types - ------------ - - The value of a variable may be restricted to a list of string literals. - The restricted list of string literals is given in a _string type - declaration_. - - Here is an example of a string type declaration: - - type OS is ("NT, "nt", "Unix", "Linux", "other OS"); - - Variables of a string type are called _typed variables_; all other - variables are called _untyped variables_. Typed variables are - particularly useful in `case' constructions (see *Note case - Constructions::). - - A string type declaration starts with the reserved word `type', - followed by the name of the string type (case-insensitive), followed by - the reserved word `is', followed by a parenthesized list of one or more - string literals separated by commas, followed by a semicolon. - - The string literals in the list are case sensitive and must all be - different. They may include any graphic characters allowed in Ada, - including spaces. - - A string type may only be declared at the project level, not inside - a package. - - A string type may be referenced by its name if it has been declared - in the same project file, or by its project name, followed by a dot, - followed by the string type name. - -  - File: gnat_ug_unx.info, Node: Variables, Next: Attributes, Prev: String Types, Up: Project File Syntax - - Variables - --------- - - A variable may be declared at the project file level, or in a package. - Here are some examples of variable declarations: - - This_OS : OS := external ("OS"); -- a typed variable declaration - That_OS := "Linux"; -- an untyped variable declaration - - A _typed variable declaration_ includes the variable name, followed by - a colon, followed by the name of a string type, followed by `:=', - followed by a simple string expression. - - An _untyped variable declaration_ includes the variable name, - followed by `:=', followed by an expression. Note that, despite the - terminology, this form of "declaration" resembles more an assignment - than a declaration in Ada. It is a declaration in several senses: - * The variable name does not need to be defined previously - - * The declaration establishes the _kind_ (string versus string list) - of the variable, and later declarations of the same variable need - to be consistent with this - - A string variable declaration (typed or untyped) declares a variable - whose value is a string. This variable may be used as a string - expression. - File_Name := "readme.txt"; - Saved_File_Name := File_Name & ".saved"; - - A string list variable declaration declares a variable whose value is a - list of strings. The list may contain any number (zero or more) of - strings. - - Empty_List := (); - List_With_One_Element := ("-gnaty"); - List_With_Two_Elements := List_With_One_Element & "-gnatg"; - Long_List := ("main.ada", "pack1_.ada", "pack1.ada", "pack2_.ada" - "pack2.ada", "util_.ada", "util.ada"); - - The same typed variable may not be declared more than once at project - level, and it may not be declared more than once in any package; it is - in effect a constant or a readonly variable. - - The same untyped variable may be declared several times. In this - case, the new value replaces the old one, and any subsequent reference - to the variable uses the new value. However, as noted above, if a - variable has been declared as a string, all subsequent declarations - must give it a string value. Similarly, if a variable has been declared - as a string list, all subsequent declarations must give it a string - list value. - - A _variable reference_ may take several forms: - - * The simple variable name, for a variable in the current package - (if any) or in the current project - - * A context name, followed by a dot, followed by the variable name. - - A _context_ may be one of the following: - - * The name of an existing package in the current project - - * The name of an imported project of the current project - - * The name of an ancestor project (i.e., a project extended by the - current project, either directly or indirectly) - - * An imported/parent project name, followed by a dot, followed by a - package name - - A variable reference may be used in an expression. - -  - File: gnat_ug_unx.info, Node: Attributes, Next: Associative Array Attributes, Prev: Variables, Up: Project File Syntax - - Attributes - ---------- - - A project (and its packages) may have _attributes_ that define the - project's properties. Some attributes have values that are strings; - others have values that are string lists. - - There are two categories of attributes: _simple attributes_ and - _associative arrays_ (see *Note Associative Array Attributes::). - - The names of the attributes are restricted; there is a list of - project attributes, and a list of package attributes for each package. - The names are not case sensitive. - - The project attributes are as follows (all are simple attributes): - - _Attribute Name_ _Value_ - `Source_Files' string list - `Source_Dirs' string list - `Source_List_File' string - `Object_Dir' string - `Exec_Dir' string - `Main' string list - `Languages' string list - `Library_Dir' string - `Library_Name' string - `Library_Kind' string - `Library_Elaboration' string - `Library_Version' string - - The attributes for package `Naming' are as follows (see *Note Naming - Schemes::): - - Attribute Name Category Index Value - `Specification_Suffix' associative language name string - array - `Implementation_Suffix' associative language name string - array - `Separate_Suffix' simple n/a string - attribute - `Casing' simple n/a string - attribute - `Dot_Replacement' simple n/a string - attribute - `Specification' associative Ada unit name string - array - `Implementation' associative Ada unit name string - array - `Specification_Exceptions' associative language name string list - array - `Implementation_Exceptions' associative language name string list - array - - The attributes for package `Builder', `Compiler', `Binder', `Linker', - `Cross_Reference', and `Finder' are as follows (see *Note Switches and - Project Files::). - - Attribute Name Category Index Value - `Default_Switches' associative language name string list - array - `Switches' associative file name string list - array - - In addition, package `Builder' has a single string attribute - `Local_Configuration_Pragmas' and package `Builder' has a single string - attribute `Global_Configuration_Pragmas'. - - The attribute for package `Glide' are not documented: they are for - internal use only. - - Each simple attribute has a default value: the empty string (for - string-valued attributes) and the empty list (for string list-valued - attributes). - - Similar to variable declarations, an attribute declaration defines a - new value for an attribute. - - Examples of simple attribute declarations: - - for Object_Dir use "objects"; - for Source_Dirs use ("units", "test/drivers"); - - A "simple attribute declaration" starts with the reserved word `for', - followed by the name of the attribute, followed by the reserved word - `use', followed by an expression (whose kind depends on the attribute), - followed by a semicolon. - - Attributes may be referenced in expressions. The general form for - such a reference is `'': the entity for which the - attribute is defined, followed by an apostrophe, followed by the name - of the attribute. For associative array attributes, a litteral string - between parentheses need to be supplied as index. - - Examples are: - - project'Object_Dir - Naming'Dot_Replacement - Imported_Project'Source_Dirs - Imported_Project.Naming'Casing - Builder'Default_Switches("Ada") - - The entity may be: - * `project' for an attribute of the current project - - * The name of an existing package of the current project - - * The name of an imported project - - * The name of a parent project (extended by the current project) - - * An imported/parent project name, followed by a dot, followed - by a package name - - Example: - project Prj is - for Source_Dirs use project'Source_Dirs & "units"; - for Source_Dirs use project'Source_Dirs & "test/drivers" - end Prj; - - In the first attribute declaration, initially the attribute - `Source_Dirs' has the default value: an empty string list. After this - declaration, `Source_Dirs' is a string list of one element: "units". - After the second attribute declaration `Source_Dirs' is a string list of - two elements: "units" and "test/drivers". - - Note: this example is for illustration only. In practice, the - project file would contain only one attribute declaration: - - for Source_Dirs use ("units", "test/drivers"); - -  - File: gnat_ug_unx.info, Node: Associative Array Attributes, Next: case Constructions, Prev: Attributes, Up: Project File Syntax - - Associative Array Attributes - ---------------------------- - - Some attributes are defined as _associative arrays_. An associative - array may be regarded as a function that takes a string as a parameter - and delivers a string or string list value as its result. - - Here are some examples of associative array attribute declarations: - - for Implementation ("main") use "Main.ada"; - for Switches ("main.ada") use ("-v", "-gnatv"); - for Switches ("main.ada") use Builder'Switches ("main.ada") & "-g"; - - Like untyped variables and simple attributes, associative array - attributes may be declared several times. Each declaration supplies a - new value for the attribute, replacing the previous setting. - -  - File: gnat_ug_unx.info, Node: case Constructions, Prev: Associative Array Attributes, Up: Project File Syntax - - `case' Constructions - -------------------- - - A `case' construction is used in a project file to effect conditional - behavior. Here is a typical example: - - project MyProj is - type OS_Type is ("Linux", "Unix", "NT", "VMS"); - - OS : OS_Type := external ("OS", "Linux"); - - package Compiler is - case OS is - when "Linux" | "Unix" => - for Default_Switches ("Ada") use ("-gnath"); - when "NT" => - for Default_Switches ("Ada") use ("-gnatP"); - when others => - end case; - end Compiler; - end MyProj; - - The syntax of a `case' construction is based on the Ada case statement - (although there is no `null' construction for empty alternatives). - - Following the reserved word `case' there is the case variable (a - typed string variable), the reserved word `is', and then a sequence of - one or more alternatives. Each alternative comprises the reserved word - `when', either a list of literal strings separated by the `"|"' - character or the reserved word `others', and the `"=>"' token. Each - literal string must belong to the string type that is the type of the - case variable. An `others' alternative, if present, must occur last. - The `end case;' sequence terminates the case construction. - - After each `=>', there are zero or more constructions. The only - constructions allowed in a case construction are other case - constructions and attribute declarations. String type declarations, - variable declarations and package declarations are not allowed. - - The value of the case variable is often given by an external - reference (see *Note External References in Project Files::). - -  - File: gnat_ug_unx.info, Node: Objects and Sources in Project Files, Next: Importing Projects, Prev: Project File Syntax, Up: GNAT Project Manager - - Objects and Sources in Project Files - ==================================== - - * Menu: - - * Object Directory:: - * Exec Directory:: - * Source Directories:: - * Source File Names:: - - Each project has exactly one object directory and one or more source - directories. The source directories must contain at least one source - file, unless the project file explicitly specifies that no source - files are present (see *Note Source File Names::). - -  - File: gnat_ug_unx.info, Node: Object Directory, Next: Exec Directory, Up: Objects and Sources in Project Files - - Object Directory - ---------------- - - The object directory for a project is the directory containing the - compiler's output (such as `ALI' files and object files) for the - project's immediate sources. Note that for inherited sources (when - extending a parent project) the parent project's object directory is - used. - - The object directory is given by the value of the attribute - `Object_Dir' in the project file. - - for Object_Dir use "objects"; - - The attribute OBJECT_DIR has a string value, the path name of the object - directory. The path name may be absolute or relative to the directory - of the project file. This directory must already exist, and be readable - and writable. - - By default, when the attribute `Object_Dir' is not given an explicit - value or when its value is the empty string, the object directory is - the same as the directory containing the project file. - -  - File: gnat_ug_unx.info, Node: Exec Directory, Next: Source Directories, Prev: Object Directory, Up: Objects and Sources in Project Files - - Exec Directory - -------------- - - The exec directory for a project is the directory containing the - executables for the project's main subprograms. - - The exec directory is given by the value of the attribute `Exec_Dir' - in the project file. - - for Exec_Dir use "executables"; - - The attribute EXEC_DIR has a string value, the path name of the exec - directory. The path name may be absolute or relative to the directory - of the project file. This directory must already exist, and be writable. - - By default, when the attribute `Exec_Dir' is not given an explicit - value or when its value is the empty string, the exec directory is the - same as the object directory of the project file. - -  - File: gnat_ug_unx.info, Node: Source Directories, Next: Source File Names, Prev: Exec Directory, Up: Objects and Sources in Project Files - - Source Directories - ------------------ - - The source directories of a project are specified by the project file - attribute `Source_Dirs'. - - This attribute's value is a string list. If the attribute is not - given an explicit value, then there is only one source directory, the - one where the project file resides. - - A `Source_Dirs' attribute that is explicitly defined to be the empty - list, as in - - for Source_Dirs use (); - - indicates that the project contains no source files. - - Otherwise, each string in the string list designates one or more - source directories. - - for Source_Dirs use ("sources", "test/drivers"); - - If a string in the list ends with `"/**"', then the directory whose - path name precedes the two asterisks, as well as all its subdirectories - (recursively), are source directories. - - for Source_Dirs use ("/system/sources/**"); - - Here the directory `/system/sources' and all of its subdirectories - (recursively) are source directories. - - To specify that the source directories are the directory of the - project file and all of its subdirectories, you can declare - `Source_Dirs' as follows: - for Source_Dirs use ("./**"); - - Each of the source directories must exist and be readable. - -  - File: gnat_ug_unx.info, Node: Source File Names, Prev: Source Directories, Up: Objects and Sources in Project Files - - Source File Names - ----------------- - - In a project that contains source files, their names may be specified - by the attributes `Source_Files' (a string list) or `Source_List_File' - (a string). Source file names never include any directory information. - - If the attribute `Source_Files' is given an explicit value, then each - element of the list is a source file name. - - for Source_Files use ("main.adb"); - for Source_Files use ("main.adb", "pack1.ads", "pack2.adb"); - - If the attribute `Source_Files' is not given an explicit value, but the - attribute `Source_List_File' is given a string value, then the source - file names are contained in the text file whose path name (absolute or - relative to the directory of the project file) is the value of the - attribute `Source_List_File'. - - Each line in the file that is not empty or is not a comment contains - a source file name. A comment line starts with two hyphens. - - for Source_List_File use "source_list.txt"; - - By default, if neither the attribute `Source_Files' nor the attribute - `Source_List_File' is given an explicit value, then each file in the - source directories that conforms to the project's naming scheme (see - *Note Naming Schemes::) is an immediate source of the project. - - A warning is issued if both attributes `Source_Files' and - `Source_List_File' are given explicit values. In this case, the - attribute `Source_Files' prevails. - - Each source file name must be the name of one and only one existing - source file in one of the source directories. - - A `Source_Files' attribute defined with an empty list as its value - indicates that there are no source files in the project. - - Except for projects that are clearly specified as containing no Ada - source files (`Source_Dirs' or `Source_Files' specified as an empty - list, or `Languages' specified without `"Ada"' in the list) - for Source_Dirs use (); - for Source_Files use (); - for Languages use ("C", "C++"); - - a project must contain at least one immediate source. - - Projects with no source files are useful as template packages (see - *Note Packages in Project Files::) for other projects; in particular to - define a package `Naming' (see *Note Naming Schemes::). - -  - File: gnat_ug_unx.info, Node: Importing Projects, Next: Project Extension, Prev: Objects and Sources in Project Files, Up: GNAT Project Manager - - Importing Projects - ================== - - An immediate source of a project P may depend on source files that are - neither immediate sources of P nor in the predefined library. To get - this effect, P must _import_ the projects that contain the needed - source files. - - with "project1", "utilities.gpr"; - with "/namings/apex.gpr"; - project Main is - ... - - As can be seen in this example, the syntax for importing projects is - similar to the syntax for importing compilation units in Ada. However, - project files use literal strings instead of names, and the `with' - clause identifies project files rather than packages. - - Each literal string is the file name or path name (absolute or - relative) of a project file. If a string is simply a file name, with no - path, then its location is determined by the _project path_: - - * If the environment variable `ADA_PROJECT_PATH' exists, then the - project path includes all the directories in this environment - variable, plus the directory of the project file. - - * If the environment variable `ADA_PROJECT_PATH' does not exist, - then the project path contains only one directory, namely the one - where the project file is located. - - If a relative pathname is used as in - - with "tests/proj"; - - then the path is relative to the directory where the importing project - file is located. Any symbolic link will be fully resolved in the - directory of the importing project file before the imported project - file is looked up. - - When the `with''ed project file name does not have an extension, the - default is `.gpr'. If a file with this extension is not found, then the - file name as specified in the `with' clause (no extension) will be - used. In the above example, if a file `project1.gpr' is found, then it - will be used; otherwise, if a file `project1' exists then it will be - used; if neither file exists, this is an error. - - A warning is issued if the name of the project file does not match - the name of the project; this check is case insensitive. - - Any source file that is an immediate source of the imported project - can be used by the immediate sources of the importing project, and - recursively. Thus if `A' imports `B', and `B' imports `C', the immediate - sources of `A' may depend on the immediate sources of `C', even if `A' - does not import `C' explicitly. However, this is not recommended, - because if and when `B' ceases to import `C', some sources in `A' will - no longer compile. - - A side effect of this capability is that cyclic dependences are not - permitted: if `A' imports `B' (directly or indirectly) then `B' is not - allowed to import `A'. - -  - File: gnat_ug_unx.info, Node: Project Extension, Next: External References in Project Files, Prev: Importing Projects, Up: GNAT Project Manager - - Project Extension - ================= - - During development of a large system, it is sometimes necessary to use - modified versions of some of the source files without changing the - original sources. This can be achieved through a facility known as - _project extension_. - - project Modified_Utilities extends "/baseline/utilities.gpr" is ... - - The project file for the project being extended (the _parent_) is - identified by the literal string that follows the reserved word - `extends', which itself follows the name of the extending project (the - _child_). - - By default, a child project inherits all the sources of its parent. - However, inherited sources can be overridden: a unit with the same name - as one in the parent will hide the original unit. Inherited sources - are considered to be sources (but not immediate sources) of the child - project; see *Note Project File Syntax::. - - An inherited source file retains any switches specified in the - parent project. - - For example if the project `Utilities' contains the specification - and the body of an Ada package `Util_IO', then the project - `Modified_Utilities' can contain a new body for package `Util_IO'. The - original body of `Util_IO' will not be considered in program builds. - However, the package specification will still be found in the project - `Utilities'. - - A child project can have only one parent but it may import any - number of other projects. - - A project is not allowed to import directly or indirectly at the - same time a child project and any of its ancestors. - -  - File: gnat_ug_unx.info, Node: External References in Project Files, Next: Packages in Project Files, Prev: Project Extension, Up: GNAT Project Manager - - External References in Project Files - ==================================== - - A project file may contain references to external variables; such - references are called _external references_. - - An external variable is either defined as part of the environment (an - environment variable in Unix, for example) or else specified on the - command line via the `-X_vbl_=_value_' switch. If both, then the - command line value is used. - - An external reference is denoted by the built-in function - `external', which returns a string value. This function has two forms: - * `external (external_variable_name)' - - * `external (external_variable_name, default_value)' - - Each parameter must be a string literal. For example: - - external ("USER") - external ("OS", "Linux") - - In the form with one parameter, the function returns the value of the - external variable given as parameter. If this name is not present in the - environment, then the returned value is an empty string. - - In the form with two string parameters, the second parameter is the - value returned when the variable given as the first parameter is not - present in the environment. In the example above, if `"OS"' is not the - name of an environment variable and is not passed on the command line, - then the returned value will be `"Linux"'. - - An external reference may be part of a string expression or of a - string list expression, to define variables or attributes. - - type Mode_Type is ("Debug", "Release"); - Mode : Mode_Type := external ("MODE"); - case Mode is - when "Debug" => - ... - -  - File: gnat_ug_unx.info, Node: Packages in Project Files, Next: Variables from Imported Projects, Prev: External References in Project Files, Up: GNAT Project Manager - - Packages in Project Files - ========================= - - The _package_ is the project file feature that defines the settings for - project-aware tools. For each such tool you can declare a - corresponding package; the names for these packages are preset (see - *Note Packages::) but are not case sensitive. A package may contain - variable declarations, attribute declarations, and case constructions. - - project Proj is - package Builder is -- used by gnatmake - for Default_Switches ("Ada") use ("-v", "-g"); - end Builder; - end Proj; - - A package declaration starts with the reserved word `package', followed - by the package name (case insensitive), followed by the reserved word - `is'. It ends with the reserved word `end', followed by the package - name, finally followed by a semi-colon. - - Most of the packages have an attribute `Default_Switches'. This - attribute is an associative array, and its value is a string list. The - index of the associative array is the name of a programming language - (case insensitive). This attribute indicates the switch or switches to - be used with the corresponding tool. - - Some packages also have another attribute, `Switches', an associative - array whose value is a string list. The index is the name of a source - file. This attribute indicates the switch or switches to be used by - the corresponding tool when dealing with this specific file. - - Further information on these switch-related attributes is found in - *Note Switches and Project Files::. - - A package may be declared as a _renaming_ of another package; e.g., - from the project file for an imported project. - - with "/global/apex.gpr"; - project Example is - package Naming renames Apex.Naming; - ... - end Example; - - Packages that are renamed in other project files often come from - project files that have no sources: they are just used as templates. - Any modification in the template will be reflected automatically in all - the project files that rename a package from the template. - - In addition to the tool-oriented packages, you can also declare a - package named `Naming' to establish specialized source file naming - conventions (see *Note Naming Schemes::). - -  - File: gnat_ug_unx.info, Node: Variables from Imported Projects, Next: Naming Schemes, Prev: Packages in Project Files, Up: GNAT Project Manager - - Variables from Imported Projects - ================================ - - An attribute or variable defined in an imported or parent project can - be used in expressions in the importing / extending project. Such an - attribute or variable is prefixed with the name of the project and (if - relevant) the name of package where it is defined. - - with "imported"; - project Main extends "base" is - Var1 := Imported.Var; - Var2 := Base.Var & ".new"; - - package Builder is - for Default_Switches ("Ada") use Imported.Builder.Ada_Switches & - "-gnatg" & "-v"; - end Builder; - - package Compiler is - for Default_Switches ("Ada") use Base.Compiler.Ada_Switches; - end Compiler; - end Main; - - In this example: - - * `Var1' is a copy of the variable `Var' defined in the project file - `"imported.gpr"' - - * the value of `Var2' is a copy of the value of variable `Var' - defined in the project file `base.gpr', concatenated with `".new"' - - * attribute `Default_Switches ("Ada")' in package `Builder' is a - string list that includes in its value a copy of variable - `Ada_Switches' defined in the `Builder' package in project file - `imported.gpr' plus two new elements: `"-gnatg"' and `"-v"'; - - * attribute `Default_Switches ("Ada")' in package `Compiler' is a - copy of the variable `Ada_Switches' defined in the `Compiler' - package in project file `base.gpr', the project being extended. - -  - File: gnat_ug_unx.info, Node: Naming Schemes, Next: Library Projects, Prev: Variables from Imported Projects, Up: GNAT Project Manager - - Naming Schemes - ============== - - Sometimes an Ada software system is ported from a foreign compilation - environment to GNAT, with file names that do not use the default GNAT - conventions. Instead of changing all the file names (which for a - variety of reasons might not be possible), you can define the relevant - file naming scheme in the `Naming' package in your project file. For - example, the following package models the Apex file naming rules: - - package Naming is - for Casing use "lowercase"; - for Dot_Replacement use "."; - for Specification_Suffix ("Ada") use ".1.ada"; - for Implementation_Suffix ("Ada") use ".2.ada"; - end Naming; - - You can define the following attributes in package `Naming': - - `CASING' - This must be a string with one of the three values `"lowercase"', - `"uppercase"' or `"mixedcase"'; these strings are case insensitive. - - If CASING is not specified, then the default is `"lowercase"'. - - `DOT_REPLACEMENT' - This must be a string whose value satisfies the following - conditions: - - * It must not be empty - - * It cannot start or end with an alphanumeric character - - * It cannot be a single underscore - - * It cannot start with an underscore followed by an alphanumeric - - * It cannot contain a dot `'.'' except if it the entire string - is `"."' - - If `Dot_Replacement' is not specified, then the default is `"-"'. - - `SPECIFICATION_SUFFIX' - This is an associative array (indexed by the programming language - name, case insensitive) whose value is a string that must satisfy - the following conditions: - - * It must not be empty - - * It cannot start with an alphanumeric character - - * It cannot start with an underscore followed by an - alphanumeric character - - If `Specification_Suffix ("Ada")' is not specified, then the - default is `".ads"'. - - `IMPLEMENTATION_SUFFIX' - This is an associative array (indexed by the programming language - name, case insensitive) whose value is a string that must satisfy - the following conditions: - - * It must not be empty - - * It cannot start with an alphanumeric character - - * It cannot start with an underscore followed by an - alphanumeric character - - * It cannot be a suffix of `Specification_Suffix' - - If `Implementation_Suffix ("Ada")' is not specified, then the - default is `".adb"'. - - `SEPARATE_SUFFIX' - This must be a string whose value satisfies the same conditions as - `Implementation_Suffix'. - - If `Separate_Suffix ("Ada")' is not specified, then it defaults to - same value as `Implementation_Suffix ("Ada")'. - - `SPECIFICATION' - You can use the `Specification' attribute, an associative array, - to define the source file name for an individual Ada compilation - unit's spec. The array index must be a string literal that - identifies the Ada unit (case insensitive). The value of this - attribute must be a string that identifies the file that contains - this unit's spec (case sensitive or insensitive depending on the - operating system). - - for Specification ("MyPack.MyChild") use "mypack.mychild.spec"; - - `IMPLEMENTATION' - You can use the `Implementation' attribute, an associative array, - to define the source file name for an individual Ada compilation - unit's body (possibly a subunit). The array index must be a - string literal that identifies the Ada unit (case insensitive). - The value of this attribute must be a string that identifies the - file that contains this unit's body or subunit (case sensitive or - insensitive depending on the operating system). - - for Implementation ("MyPack.MyChild") use "mypack.mychild.body"; - -  - File: gnat_ug_unx.info, Node: Library Projects, Next: Switches Related to Project Files, Prev: Naming Schemes, Up: GNAT Project Manager - - Library Projects - ================ - - _Library projects_ are projects whose object code is placed in a - library. (Note that this facility is not yet supported on all - platforms) - - To create a library project, you need to define in its project file - two project-level attributes: `Library_Name' and `Library_Dir'. - Additionally, you may define the library-related attributes - `Library_Kind', `Library_Version' and `Library_Elaboration'. - - The `Library_Name' attribute has a string value that must start with - a letter and include only letters and digits. - - The `Library_Dir' attribute has a string value that designates the - path (absolute or relative) of the directory where the library will - reside. It must designate an existing directory, and this directory - needs to be different from the project's object directory. It also - needs to be writable. - - If both `Library_Name' and `Library_Dir' are specified and are - legal, then the project file defines a library project. The optional - library-related attributes are checked only for such project files. - - The `Library_Kind' attribute has a string value that must be one of - the following (case insensitive): `"static"', `"dynamic"' or - `"relocatable"'. If this attribute is not specified, the library is a - static library. Otherwise, the library may be dynamic or relocatable. - Depending on the operating system, there may or may not be a distinction - between dynamic and relocatable libraries. For example, on Unix there - is no such distinction. - - The `Library_Version' attribute has a string value whose - interpretation is platform dependent. On Unix, it is used only for - dynamic/relocatable libraries as the internal name of the library (the - `"soname"'). If the library file name (built from the `Library_Name') - is different from the `Library_Version', then the library file will be - a symbolic link to the actual file whose name will be `Library_Version'. - - Example (on Unix): - - project Plib is - - Version := "1"; - - for Library_Dir use "lib_dir"; - for Library_Name use "dummy"; - for Library_Kind use "relocatable"; - for Library_Version use "libdummy.so." & Version; - - end Plib; - - Directory `lib_dir' will contain the internal library file whose name - will be `libdummy.so.1', and `libdummy.so' will be a symbolic link to - `libdummy.so.1'. - - When `gnatmake' detects that a project file (not the main project - file) is a library project file, it will check all immediate sources of - the project and rebuild the library if any of the sources have been - recompiled. All `ALI' files will also be copied from the object - directory to the library directory. To build executables, `gnatmake' - will use the library rather than the individual object files. - -  - File: gnat_ug_unx.info, Node: Switches Related to Project Files, Next: Tools Supporting Project Files, Prev: Library Projects, Up: GNAT Project Manager - - Switches Related to Project Files - ================================= - - The following switches are used by GNAT tools that support project - files: - - ``-PPROJECT'' - Indicates the name of a project file. This project file will be - parsed with the verbosity indicated by `-vP_x_', if any, and using - the external references indicated by `-X' switches, if any. - - There must be only one `-P' switch on the command line. - - Since the Project Manager parses the project file only after all - the switches on the command line are checked, the order of the - switches `-P', `-Vp_x_' or `-X' is not significant. - - ``-XNAME=VALUE'' - Indicates that external variable NAME has the value VALUE. The - Project Manager will use this value for occurrences of - `external(name)' when parsing the project file. - - If NAME or VALUE includes a space, then NAME=VALUE should be put - between quotes. - -XOS=NT - -X"user=John Doe" - - Several `-X' switches can be used simultaneously. If several `-X' - switches specify the same NAME, only the last one is used. - - An external variable specified with a `-X' switch takes precedence - over the value of the same name in the environment. - - ``-vP_x_'' - Indicates the verbosity of the parsing of GNAT project files. - `-vP0' means Default (no output for syntactically correct project - files); `-vP1' means Medium; `-vP2' means High. - - The default is Default. - - If several `-vP_x_' switches are present, only the last one is - used. - -  - File: gnat_ug_unx.info, Node: Tools Supporting Project Files, Next: An Extended Example, Prev: Switches Related to Project Files, Up: GNAT Project Manager - - Tools Supporting Project Files - ============================== - - * Menu: - - * gnatmake and Project Files:: - * The GNAT Driver and Project Files:: - * Glide and Project Files:: - -  - File: gnat_ug_unx.info, Node: gnatmake and Project Files, Next: The GNAT Driver and Project Files, Up: Tools Supporting Project Files - - gnatmake and Project Files - -------------------------- - - This section covers two topics related to `gnatmake' and project files: - defining switches for `gnatmake' and for the tools that it invokes; and - the use of the `Main' attribute. - - * Menu: - - * Switches and Project Files:: - * Project Files and Main Subprograms:: - -  - File: gnat_ug_unx.info, Node: Switches and Project Files, Next: Project Files and Main Subprograms, Up: gnatmake and Project Files - - Switches and Project Files - .......................... - - For each of the packages `Builder', `Compiler', `Binder', and `Linker', - you can specify a `Default_Switches' attribute, a `Switches' attribute, - or both; as their names imply, these switch-related attributes affect - which switches are used for which files when `gnatmake' is invoked. As - will be explained below, these package-contributed switches precede the - switches passed on the `gnatmake' command line. - - The `Default_Switches' attribute is an associative array indexed by - language name (case insensitive) and returning a string list. For - example: - - package Compiler is - for Default_Switches ("Ada") use ("-gnaty", "-v"); - end Compiler; - - The `Switches' attribute is also an associative array, indexed by a file - name (which may or may not be case sensitive, depending on the operating - system) and returning a string list. For example: - - package Builder is - for Switches ("main1.adb") use ("-O2"); - for Switches ("main2.adb") use ("-g"); - end Builder; - - For the `Builder' package, the file names should designate source files - for main subprograms. For the `Binder' and `Linker' packages, the file - names should designate `ALI' or source files for main subprograms. In - each case just the file name (without explicit extension) is acceptable. - - For each tool used in a program build (`gnatmake', the compiler, the - binder, and the linker), its corresponding package "contributes" a set - of switches for each file on which the tool is invoked, based on the - switch-related attributes defined in the package. In particular, the - switches that each of these packages contributes for a given file F - comprise: - - * the value of attribute `Switches (F)', if it is specified in the - package for the given file, - - * otherwise, the value of `Default_Switches ("Ada")', if it is - specified in the package. - - If neither of these attributes is defined in the package, then the - package does not contribute any switches for the given file. - - When `gnatmake' is invoked on a file, the switches comprise two sets, - in the following order: those contributed for the file by the `Builder' - package; and the switches passed on the command line. - - When `gnatmake' invokes a tool (compiler, binder, linker) on a file, - the switches passed to the tool comprise three sets, in the following - order: - - 1. the applicable switches contributed for the file by the `Builder' - package in the project file supplied on the command line; - - 2. those contributed for the file by the package (in the relevant - project file - see below) corresponding to the tool; and - - 3. the applicable switches passed on the command line. - - The term _applicable switches_ reflects the fact that `gnatmake' - switches may or may not be passed to individual tools, depending on the - individual switch. - - `gnatmake' may invoke the compiler on source files from different - projects. The Project Manager will use the appropriate project file to - determine the `Compiler' package for each source file being compiled. - Likewise for the `Binder' and `Linker' packages. - - As an example, consider the following package in a project file: - - project Proj1 is - package Compiler is - for Default_Switches ("Ada") use ("-g"); - for Switches ("a.adb") use ("-O1"); - for Switches ("b.adb") use ("-O2", "-gnaty"); - end Compiler; - end Proj1; - - If `gnatmake' is invoked with this project file, and it needs to - compile, say, the files `a.adb', `b.adb', and `c.adb', then `a.adb' - will be compiled with the switch `-O1', `b.adb' with switches `-O2' and - `-gnaty', and `c.adb' with `-g'. - - Another example illustrates the ordering of the switches contributed - by different packages: - - project Proj2 is - package Builder is - for Switches ("main.adb") use ("-g", "-O1", "-f"); - end Builder; - - package Compiler is - for Switches ("main.adb") use ("-O2"); - end Compiler; - end Proj2; - - If you issue the command: - - gnatmake -PProj2 -O0 main - - then the compiler will be invoked on `main.adb' with the following - sequence of switches - - -g -O1 -O2 -O0 - - with the last `-O' switch having precedence over the earlier ones; - several other switches (such as `-c') are added implicitly. - - The switches `-g' and `-O1' are contributed by package `Builder', - `-O2' is contributed by the package `Compiler' and `-O0' comes from the - command line. - - The `-g' switch will also be passed in the invocation of `gnatlink.' - - A final example illustrates switch contributions from packages in - different project files: - - project Proj3 is - for Source_Files use ("pack.ads", "pack.adb"); - package Compiler is - for Default_Switches ("Ada") use ("-gnata"); - end Compiler; - end Proj3; - - with "Proj3"; - project Proj4 is - for Source_Files use ("foo_main.adb", "bar_main.adb"); - package Builder is - for Switches ("foo_main.adb") use ("-s", "-g"); - end Builder; - end Proj4; - - -- Ada source file: - with Pack; - procedure Foo_Main is - ... - end Foo_Main; - - If the command is - gnatmake -PProj4 foo_main.adb -cargs -gnato - - then the switches passed to the compiler for `foo_main.adb' are `-g' - (contributed by the package `Proj4.Builder') and `-gnato' (passed on - the command line). When the imported package `Pack' is compiled, the - switches used are `-g' from `Proj4.Builder', `-gnata' (contributed from - package `Proj3.Compiler', and `-gnato' from the command line. - -  - File: gnat_ug_unx.info, Node: Project Files and Main Subprograms, Prev: Switches and Project Files, Up: gnatmake and Project Files - - Project Files and Main Subprograms - .................................. - - When using a project file, you can invoke `gnatmake' with several main - subprograms, by specifying their source files on the command line. - Each of these needs to be an immediate source file of the project. - - gnatmake -Pprj main1 main2 main3 - - When using a project file, you can also invoke `gnatmake' without - explicitly specifying any main, and the effect depends on whether you - have defined the `Main' attribute. This attribute has a string list - value, where each element in the list is the name of a source file (the - file extension is optional) containing a main subprogram. - - If the `Main' attribute is defined in a project file as a non-empty - string list and the switch `-u' is not used on the command line, then - invoking `gnatmake' with this project file but without any main on the - command line is equivalent to invoking `gnatmake' with all the file - names in the `Main' attribute on the command line. - - Example: - project Prj is - for Main use ("main1", "main2", "main3"); - end Prj; - - With this project file, `"gnatmake -Pprj"' is equivalent to `"gnatmake - -Pprj main1 main2 main3"'. - - When the project attribute `Main' is not specified, or is specified - as an empty string list, or when the switch `-u' is used on the command - line, then invoking `gnatmake' with no main on the command line will - result in all immediate sources of the project file being checked, and - potentially recompiled. Depending on the presence of the switch `-u', - sources from other project files on which the immediate sources of the - main project file depend are also checked and potentially recompiled. - In other words, the `-u' switch is applied to all of the immediate - sources of themain project file. - -  - File: gnat_ug_unx.info, Node: The GNAT Driver and Project Files, Next: Glide and Project Files, Prev: gnatmake and Project Files, Up: Tools Supporting Project Files - - The GNAT Driver and Project Files - --------------------------------- - - A number of GNAT tools, other than `gnatmake' are project-aware: - `gnatbind', `gnatfind', `gnatlink', `gnatls' and `gnatxref'. However, - none of these tools can be invoked directly with a project file switch - (`-P'). They need to be invoke through the `gnat' driver. - - The `gnat' driver is a front-end that accepts a number of commands - and call the corresponding tool. It has been designed initially for VMS - to convert VMS style qualifiers to Unix style switches, but it is now - available to all the GNAT supported platforms. - - On non VMS platforms, the `gnat' driver accepts the following - commands (case insensitive): - - * BIND to invoke `gnatbind' - - * CHOP to invoke `gnatchop' - - * COMP or COMPILE to invoke the compiler - - * ELIM to invoke `gnatelim' - - * FIND to invoke `gnatfind' - - * KR or KRUNCH to invoke `gnatkr' - - * LINK to invoke `gnatlink' - - * LS or LIST to invoke `gnatls' - - * MAKE to invoke `gnatmake' - - * NAME to invoke `gnatname' - - * PREP or PREPROCESS to invoke `gnatprep' - - * PSTA or STANDARD to invoke `gnatpsta' - - * STUB to invoke `gnatstub' - - * XREF to invoke `gnatxref' - - Note that the compiler is invoked using the command `gnatmake -f -u'. - - Following the command, you may put switches and arguments for the - invoked tool. - - gnat bind -C main.ali - gnat ls -a main - gnat chop foo.txt - - In addition, for command BIND, FIND, LS or LIST, LINK and XREF, the - project file related switches (`-P', `-X' and `-vPx') may be used in - addition to the switches of the invoking tool. - - For each of these command, there is possibly a package in the main - project that corresponds to the invoked tool. - - * package `Binder' for command BIND (invoking `gnatbind') - - * package `Finder' for command FIND (invoking `gnatfind') - - * package `Gnatls' for command LS or LIST (invoking `gnatls') - - * package `Linker' for command LINK (invoking `gnatlink') - - * package `Cross_Reference' for command XREF (invoking `gnatlink') - - - Package `Gnatls' has a unique attribute `Switches', a simple variable - with a string list value. It contains switches for the invocation of - `gnatls'. - - project Proj1 is - package gnatls is - for Switches use ("-a", "-v"); - end gnatls; - end Proj1; - - All other packages contains a switch `Default_Switches', an associative - array, indexed by the programming language (case insensitive) and - having a string list value. `Default_Switches ("Ada")' contains the - switches for the invocation of the tool corresponding to the package. - - project Proj is - - for Source_Dirs use ("./**"); - - package gnatls is - for Switches use ("-a", "-v"); - end gnatls; - - package Binder is - for Default_Switches ("Ada") use ("-C", "-e"); - end Binder; - - package Linker is - for Default_Switches ("Ada") use ("-C"); - end Linker; - - package Finder is - for Default_Switches ("Ada") use ("-a", "-f"); - end Finder; - - package Cross_Reference is - for Default_Switches ("Ada") use ("-a", "-f", "-d", "-u"); - end Cross_Reference; - end Proj; - - With the above project file, commands such as - - gnat ls -Pproj main - gnat xref -Pproj main - gnat bind -Pproj main.ali - - will set up the environment properly and invoke the tool with the - switches found in the package corresponding to the tool. - -  - File: gnat_ug_unx.info, Node: Glide and Project Files, Prev: The GNAT Driver and Project Files, Up: Tools Supporting Project Files - - Glide and Project Files - ----------------------- - - Glide will automatically recognize the `.gpr' extension for project - files, and will convert them to its own internal format automatically. - However, it doesn't provide a syntax-oriented editor for modifying these - files. The project file will be loaded as text when you select the - menu item `Ada' => `Project' => `Edit'. You can edit this text and - save the `gpr' file; when you next select this project file in Glide it - will be automatically reloaded. - -  - File: gnat_ug_unx.info, Node: An Extended Example, Next: Project File Complete Syntax, Prev: Tools Supporting Project Files, Up: GNAT Project Manager - - An Extended Example - =================== - - Suppose that we have two programs, PROG1 and PROG2, with the sources in - the respective directories. We would like to build them with a single - `gnatmake' command, and we would like to place their object files into - `.build' subdirectories of the source directories. Furthermore, we would - like to have to have two separate subdirectories in `.build' - - `release' and `debug' - which will contain the object files compiled - with different set of compilation flags. - - In other words, we have the following structure: - - main - |- prog1 - | |- .build - | | debug - | | release - |- prog2 - |- .build - | debug - | release - - Here are the project files that we need to create in a directory `main' - to maintain this structure: - - 1. We create a `Common' project with a package `Compiler' that - specifies the compilation switches: - - File "common.gpr": - project Common is - - for Source_Dirs use (); -- No source files - - type Build_Type is ("release", "debug"); - Build : Build_Type := External ("BUILD", "debug"); - package Compiler is - case Build is - when "release" => - for Default_Switches ("Ada") use ("-O2"); - when "debug" => - for Default_Switches ("Ada") use ("-g"); - end case; - end Compiler; - - end Common; - - 2. We create separate projects for the two programs: - - File "prog1.gpr": - - with "common"; - project Prog1 is - - for Source_Dirs use ("prog1"); - for Object_Dir use "prog1/.build/" & Common.Build; - - package Compiler renames Common.Compiler; - - end Prog1; - - File "prog2.gpr": - - with "common"; - project Prog2 is - - for Source_Dirs use ("prog2"); - for Object_Dir use "prog2/.build/" & Common.Build; - - package Compiler renames Common.Compiler; - end Prog2; - - 3. We create a wrapping project MAIN: - - File "main.gpr": - - with "common"; - with "prog1"; - with "prog2"; - project Main is - - package Compiler renames Common.Compiler; - - end Main; - - 4. Finally we need to create a dummy procedure that `with's (either - explicitly or implicitly) all the sources of our two programs. - - - Now we can build the programs using the command - - gnatmake -Pmain dummy - - for the Debug mode, or - - gnatmake -Pmain -XBUILD=release - - for the Release mode. - -  - File: gnat_ug_unx.info, Node: Project File Complete Syntax, Prev: An Extended Example, Up: GNAT Project Manager - - Project File Complete Syntax - ============================ - - project ::= - context_clause project_declaration - - context_clause ::= - {with_clause} - - with_clause ::= - with literal_string { , literal_string } ; - - project_declaration ::= - project simple_name [ extends literal_string ] is - {declarative_item} - end simple_name; - - declarative_item ::= - package_declaration | - typed_string_declaration | - other_declarative_item - - package_declaration ::= - package simple_name package_completion - - package_completion ::= - package_body | package_renaming - - package body ::= - is - {other_declarative_item} - end simple_name ; - - package_renaming ::== - renames simple_name.simple_name ; - - typed_string_declaration ::= - type _simple_name is - ( literal_string {, literal_string} ); - - other_declarative_item ::= - attribute_declaration | - typed_variable_declaration | - variable_declaration | - case_construction - - attribute_declaration ::= - for attribute use expression ; - - attribute ::= - simple_name | - simple_name ( literal_string ) - - typed_variable_declaration ::= - simple_name : name := string_expression ; - - variable_declaration ::= - simple_name := expression; - - expression ::= - term {& term} - - term ::= - literal_string | - string_list | - name | - external_value | - attribute_reference - - literal_string ::= - (same as Ada) - - string_list ::= - ( expression { , expression } ) - - external_value ::= - external ( literal_string [, literal_string] ) - - attribute_reference ::= - attribute_parent ' simple_name [ ( literal_string ) ] - - attribute_parent ::= - project | - simple_name | - simple_name . simple_name - - case_construction ::= - case name is - {case_item} - end case ; - - case_item ::= - when discrete_choice_list => {case_construction | attribute_declaration} - - discrete_choice_list ::= - literal_string {| literal_string} - - name ::= - simple_name {. simple_name} - - simple_name ::= - identifier (same as Ada) - -  - File: gnat_ug_unx.info, Node: Elaboration Order Handling in GNAT, Next: The Cross-Referencing Tools gnatxref and gnatfind, Prev: GNAT Project Manager, Up: Top - - Elaboration Order Handling in GNAT - ********************************** - - * Menu: - - * Elaboration Code in Ada 95:: - * Checking the Elaboration Order in Ada 95:: - * Controlling the Elaboration Order in Ada 95:: - * Controlling Elaboration in GNAT - Internal Calls:: - * Controlling Elaboration in GNAT - External Calls:: - * Default Behavior in GNAT - Ensuring Safety:: - * Elaboration Issues for Library Tasks:: - * Mixing Elaboration Models:: - * What to Do If the Default Elaboration Behavior Fails:: - * Elaboration for Access-to-Subprogram Values:: - * Summary of Procedures for Elaboration Control:: - * Other Elaboration Order Considerations:: - - This chapter describes the handling of elaboration code in Ada 95 and - in GNAT, and discusses how the order of elaboration of program units can - be controlled in GNAT, either automatically or with explicit programming - features. - -  - File: gnat_ug_unx.info, Node: Elaboration Code in Ada 95, Next: Checking the Elaboration Order in Ada 95, Up: Elaboration Order Handling in GNAT - - Elaboration Code in Ada 95 - ========================== - - Ada 95 provides rather general mechanisms for executing code at - elaboration time, that is to say before the main program starts - executing. Such code arises in three contexts: - - Initializers for variables. - Variables declared at the library level, in package specs or - bodies, can require initialization that is performed at - elaboration time, as in: - Sqrt_Half : Float := Sqrt (0.5); - - Package initialization code - Code in a `BEGIN-END' section at the outer level of a package body - is executed as part of the package body elaboration code. - - Library level task allocators - Tasks that are declared using task allocators at the library level - start executing immediately and hence can execute at elaboration - time. - - Subprogram calls are possible in any of these contexts, which means that - any arbitrary part of the program may be executed as part of the - elaboration code. It is even possible to write a program which does all - its work at elaboration time, with a null main program, although - stylistically this would usually be considered an inappropriate way to - structure a program. - - An important concern arises in the context of elaboration code: we - have to be sure that it is executed in an appropriate order. What we - have is a series of elaboration code sections, potentially one section - for each unit in the program. It is important that these execute in the - correct order. Correctness here means that, taking the above example of - the declaration of `Sqrt_Half', if some other piece of elaboration code - references `Sqrt_Half', then it must run after the section of - elaboration code that contains the declaration of `Sqrt_Half'. - - There would never be any order of elaboration problem if we made a - rule that whenever you `with' a unit, you must elaborate both the spec - and body of that unit before elaborating the unit doing the `with''ing: - - with Unit_1; - package Unit_2 is ... - - would require that both the body and spec of `Unit_1' be elaborated - before the spec of `Unit_2'. However, a rule like that would be far too - restrictive. In particular, it would make it impossible to have routines - in separate packages that were mutually recursive. - - You might think that a clever enough compiler could look at the - actual elaboration code and determine an appropriate correct order of - elaboration, but in the general case, this is not possible. Consider - the following example. - - In the body of `Unit_1', we have a procedure `Func_1' that references - the variable `Sqrt_1', which is declared in the elaboration code of the - body of `Unit_1': - - Sqrt_1 : Float := Sqrt (0.1); - - The elaboration code of the body of `Unit_1' also contains: - - if expression_1 = 1 then - Q := Unit_2.Func_2; - end if; - - `Unit_2' is exactly parallel, it has a procedure `Func_2' that - references the variable `Sqrt_2', which is declared in the elaboration - code of the body `Unit_2': - - Sqrt_2 : Float := Sqrt (0.1); - - The elaboration code of the body of `Unit_2' also contains: - - if expression_2 = 2 then - Q := Unit_1.Func_1; - end if; - - Now the question is, which of the following orders of elaboration is - acceptable: - - Spec of Unit_1 - Spec of Unit_2 - Body of Unit_1 - Body of Unit_2 - - or - - Spec of Unit_2 - Spec of Unit_1 - Body of Unit_2 - Body of Unit_1 - - If you carefully analyze the flow here, you will see that you cannot - tell at compile time the answer to this question. If `expression_1' is - not equal to 1, and `expression_2' is not equal to 2, then either order - is acceptable, because neither of the function calls is executed. If - both tests evaluate to true, then neither order is acceptable and in - fact there is no correct order. - - If one of the two expressions is true, and the other is false, then - one of the above orders is correct, and the other is incorrect. For - example, if `expression_1' = 1 and `expression_2' /= 2, then the call - to `Func_2' will occur, but not the call to `Func_1.' This means that - it is essential to elaborate the body of `Unit_1' before the body of - `Unit_2', so the first order of elaboration is correct and the second - is wrong. - - By making `expression_1' and `expression_2' depend on input data, or - perhaps the time of day, we can make it impossible for the compiler or - binder to figure out which of these expressions will be true, and hence - it is impossible to guarantee a safe order of elaboration at run time. - -  - File: gnat_ug_unx.info, Node: Checking the Elaboration Order in Ada 95, Next: Controlling the Elaboration Order in Ada 95, Prev: Elaboration Code in Ada 95, Up: Elaboration Order Handling in GNAT - - Checking the Elaboration Order in Ada 95 - ======================================== - - In some languages that involve the same kind of elaboration problems, - e.g. Java and C++, the programmer is expected to worry about these - ordering problems himself, and it is common to write a program in which - an incorrect elaboration order gives surprising results, because it - references variables before they are initialized. Ada 95 is designed - to be a safe language, and a programmer-beware approach is clearly not - sufficient. Consequently, the language provides three lines of defense: - - Standard rules - Some standard rules restrict the possible choice of elaboration - order. In particular, if you `with' a unit, then its spec is always - elaborated before the unit doing the `with'. Similarly, a parent - spec is always elaborated before the child spec, and finally a - spec is always elaborated before its corresponding body. - - Dynamic elaboration checks - Dynamic checks are made at run time, so that if some entity is - accessed before it is elaborated (typically by means of a - subprogram call) then the exception (`Program_Error') is raised. - - Elaboration control - Facilities are provided for the programmer to specify the desired - order of elaboration. - - Let's look at these facilities in more detail. First, the rules for - dynamic checking. One possible rule would be simply to say that the - exception is raised if you access a variable which has not yet been - elaborated. The trouble with this approach is that it could require - expensive checks on every variable reference. Instead Ada 95 has two - rules which are a little more restrictive, but easier to check, and - easier to state: - - Restrictions on calls - A subprogram can only be called at elaboration time if its body - has been elaborated. The rules for elaboration given above - guarantee that the spec of the subprogram has been elaborated - before the call, but not the body. If this rule is violated, then - the exception `Program_Error' is raised. - - Restrictions on instantiations - A generic unit can only be instantiated if the body of the generic - unit has been elaborated. Again, the rules for elaboration given - above guarantee that the spec of the generic unit has been - elaborated before the instantiation, but not the body. If this - rule is violated, then the exception `Program_Error' is raised. - - The idea is that if the body has been elaborated, then any variables it - references must have been elaborated; by checking for the body being - elaborated we guarantee that none of its references causes any trouble. - As we noted above, this is a little too restrictive, because a - subprogram that has no non-local references in its body may in fact be - safe to call. However, it really would be unsafe to rely on this, - because it would mean that the caller was aware of details of the - implementation in the body. This goes against the basic tenets of Ada. - - A plausible implementation can be described as follows. A Boolean - variable is associated with each subprogram and each generic unit. This - variable is initialized to False, and is set to True at the point body - is elaborated. Every call or instantiation checks the variable, and - raises `Program_Error' if the variable is False. - - Note that one might think that it would be good enough to have one - Boolean variable for each package, but that would not deal with cases - of trying to call a body in the same package as the call that has not - been elaborated yet. Of course a compiler may be able to do enough - analysis to optimize away some of the Boolean variables as unnecessary, - and `GNAT' indeed does such optimizations, but still the easiest - conceptual model is to think of there being one variable per subprogram. - -  - File: gnat_ug_unx.info, Node: Controlling the Elaboration Order in Ada 95, Next: Controlling Elaboration in GNAT - Internal Calls, Prev: Checking the Elaboration Order in Ada 95, Up: Elaboration Order Handling in GNAT - - Controlling the Elaboration Order in Ada 95 - =========================================== - - In the previous section we discussed the rules in Ada 95 which ensure - that `Program_Error' is raised if an incorrect elaboration order is - chosen. This prevents erroneous executions, but we need mechanisms to - specify a correct execution and avoid the exception altogether. To - achieve this, Ada 95 provides a number of features for controlling the - order of elaboration. We discuss these features in this section. - - First, there are several ways of indicating to the compiler that a - given unit has no elaboration problems: - - packages that do not require a body - In Ada 95, a library package that does not require a body does not - permit a body. This means that if we have a such a package, as in: - - package Definitions is - generic - type m is new integer; - package Subp is - type a is array (1 .. 10) of m; - type b is array (1 .. 20) of m; - end Subp; - end Definitions; - - A package that `with''s `Definitions' may safely instantiate - `Definitions.Subp' because the compiler can determine that there - definitely is no package body to worry about in this case - - pragma Pure - Places sufficient restrictions on a unit to guarantee that no call - to any subprogram in the unit can result in an elaboration - problem. This means that the compiler does not need to worry about - the point of elaboration of such units, and in particular, does - not need to check any calls to any subprograms in this unit. - - pragma Preelaborate - This pragma places slightly less stringent restrictions on a unit - than does pragma Pure, but these restrictions are still sufficient - to ensure that there are no elaboration problems with any calls to - the unit. - - pragma Elaborate_Body - This pragma requires that the body of a unit be elaborated - immediately after its spec. Suppose a unit `A' has such a pragma, - and unit `B' does a `with' of unit `A'. Recall that the standard - rules require the spec of unit `A' to be elaborated before the - `with''ing unit; given the pragma in `A', we also know that the - body of `A' will be elaborated before `B', so that calls to `A' - are safe and do not need a check. - - Note that, unlike pragma `Pure' and pragma `Preelaborate', the use of - `Elaborate_Body' does not guarantee that the program is free of - elaboration problems, because it may not be possible to satisfy the - requested elaboration order. Let's go back to the example with - `Unit_1' and `Unit_2'. If a programmer marks `Unit_1' as - `Elaborate_Body', and not `Unit_2,' then the order of elaboration will - be: - - Spec of Unit_2 - Spec of Unit_1 - Body of Unit_1 - Body of Unit_2 - - Now that means that the call to `Func_1' in `Unit_2' need not be - checked, it must be safe. But the call to `Func_2' in `Unit_1' may - still fail if `Expression_1' is equal to 1, and the programmer must - still take responsibility for this not being the case. - - If all units carry a pragma `Elaborate_Body', then all problems are - eliminated, except for calls entirely within a body, which are in any - case fully under programmer control. However, using the pragma - everywhere is not always possible. In particular, for our - `Unit_1'/`Unit_2' example, if we marked both of them as having pragma - `Elaborate_Body', then clearly there would be no possible elaboration - order. - - The above pragmas allow a server to guarantee safe use by clients, - and clearly this is the preferable approach. Consequently a good rule in - Ada 95 is to mark units as `Pure' or `Preelaborate' if possible, and if - this is not possible, mark them as `Elaborate_Body' if possible. As we - have seen, there are situations where neither of these three pragmas - can be used. So we also provide methods for clients to control the - order of elaboration of the servers on which they depend: - - pragma Elaborate (unit) - This pragma is placed in the context clause, after a `with' clause, - and it requires that the body of the named unit be elaborated - before the unit in which the pragma occurs. The idea is to use - this pragma if the current unit calls at elaboration time, - directly or indirectly, some subprogram in the named unit. - - pragma Elaborate_All (unit) - This is a stronger version of the Elaborate pragma. Consider the - following example: - - Unit A `with''s unit B and calls B.Func in elab code - Unit B `with''s unit C, and B.Func calls C.Func - - Now if we put a pragma `Elaborate (B)' in unit `A', this ensures - that the body of `B' is elaborated before the call, but not the - body of `C', so the call to `C.Func' could still cause - `Program_Error' to be raised. - - The effect of a pragma `Elaborate_All' is stronger, it requires - not only that the body of the named unit be elaborated before the - unit doing the `with', but also the bodies of all units that the - named unit uses, following `with' links transitively. For example, - if we put a pragma `Elaborate_All (B)' in unit `A', then it - requires not only that the body of `B' be elaborated before `A', - but also the body of `C', because `B' `with''s `C'. - - We are now in a position to give a usage rule in Ada 95 for avoiding - elaboration problems, at least if dynamic dispatching and access to - subprogram values are not used. We will handle these cases separately - later. - - The rule is simple. If a unit has elaboration code that can directly - or indirectly make a call to a subprogram in a `with''ed unit, or - instantiate a generic unit in a `with''ed unit, then if the `with''ed - unit does not have pragma `Pure' or `Preelaborate', then the client - should have a pragma `Elaborate_All' for the `with''ed unit. By - following this rule a client is assured that calls can be made without - risk of an exception. If this rule is not followed, then a program may - be in one of four states: - - No order exists - No order of elaboration exists which follows the rules, taking into - account any `Elaborate', `Elaborate_All', or `Elaborate_Body' - pragmas. In this case, an Ada 95 compiler must diagnose the - situation at bind time, and refuse to build an executable program. - - One or more orders exist, all incorrect - One or more acceptable elaboration orders exists, and all of them - generate an elaboration order problem. In this case, the binder - can build an executable program, but `Program_Error' will be raised - when the program is run. - - Several orders exist, some right, some incorrect - One or more acceptable elaboration orders exists, and some of them - work, and some do not. The programmer has not controlled the order - of elaboration, so the binder may or may not pick one of the - correct orders, and the program may or may not raise an exception - when it is run. This is the worst case, because it means that the - program may fail when moved to another compiler, or even another - version of the same compiler. - - One or more orders exists, all correct - One ore more acceptable elaboration orders exist, and all of them - work. In this case the program runs successfully. This state of - affairs can be guaranteed by following the rule we gave above, but - may be true even if the rule is not followed. - - Note that one additional advantage of following our Elaborate_All rule - is that the program continues to stay in the ideal (all orders OK) state - even if maintenance changes some bodies of some subprograms. - Conversely, if a program that does not follow this rule happens to be - safe at some point, this state of affairs may deteriorate silently as a - result of maintenance changes. - - You may have noticed that the above discussion did not mention the - use of `Elaborate_Body'. This was a deliberate omission. If you `with' - an `Elaborate_Body' unit, it still may be the case that code in the - body makes calls to some other unit, so it is still necessary to use - `Elaborate_All' on such units. - -  - File: gnat_ug_unx.info, Node: Controlling Elaboration in GNAT - Internal Calls, Next: Controlling Elaboration in GNAT - External Calls, Prev: Controlling the Elaboration Order in Ada 95, Up: Elaboration Order Handling in GNAT - - Controlling Elaboration in GNAT - Internal Calls - ================================================ - - In the case of internal calls, i.e. calls within a single package, the - programmer has full control over the order of elaboration, and it is up - to the programmer to elaborate declarations in an appropriate order. For - example writing: - - function One return Float; - - Q : Float := One; - - function One return Float is - begin - return 1.0; - end One; - - will obviously raise `Program_Error' at run time, because function One - will be called before its body is elaborated. In this case GNAT will - generate a warning that the call will raise `Program_Error': - - 1. procedure y is - 2. function One return Float; - 3. - 4. Q : Float := One; - | - >>> warning: cannot call "One" before body is elaborated - >>> warning: Program_Error will be raised at run time - - 5. - 6. function One return Float is - 7. begin - 8. return 1.0; - 9. end One; - 10. - 11. begin - 12. null; - 13. end; - - Note that in this particular case, it is likely that the call is safe, - because the function `One' does not access any global variables. - Nevertheless in Ada 95, we do not want the validity of the check to - depend on the contents of the body (think about the separate - compilation case), so this is still wrong, as we discussed in the - previous sections. - - The error is easily corrected by rearranging the declarations so - that the body of One appears before the declaration containing the call - (note that in Ada 95, declarations can appear in any order, so there is - no restriction that would prevent this reordering, and if we write: - - function One return Float; - - function One return Float is - begin - return 1.0; - end One; - - Q : Float := One; - - then all is well, no warning is generated, and no `Program_Error' - exception will be raised. Things are more complicated when a chain of - subprograms is executed: - - function A return Integer; - function B return Integer; - function C return Integer; - - function B return Integer is begin return A; end; - function C return Integer is begin return B; end; - - X : Integer := C; - - function A return Integer is begin return 1; end; - - Now the call to `C' at elaboration time in the declaration of `X' is - correct, because the body of `C' is already elaborated, and the call to - `B' within the body of `C' is correct, but the call to `A' within the - body of `B' is incorrect, because the body of `A' has not been - elaborated, so `Program_Error' will be raised on the call to `A'. In - this case GNAT will generate a warning that `Program_Error' may be - raised at the point of the call. Let's look at the warning: - - 1. procedure x is - 2. function A return Integer; - 3. function B return Integer; - 4. function C return Integer; - 5. - 6. function B return Integer is begin return A; end; - | - >>> warning: call to "A" before body is elaborated may - raise Program_Error - >>> warning: "B" called at line 7 - >>> warning: "C" called at line 9 - - 7. function C return Integer is begin return B; end; - 8. - 9. X : Integer := C; - 10. - 11. function A return Integer is begin return 1; end; - 12. - 13. begin - 14. null; - 15. end; - - Note that the message here says "may raise", instead of the direct case, - where the message says "will be raised". That's because whether `A' is - actually called depends in general on run-time flow of control. For - example, if the body of `B' said - - function B return Integer is - begin - if some-condition-depending-on-input-data then - return A; - else - return 1; - end if; - end B; - - then we could not know until run time whether the incorrect call to A - would actually occur, so `Program_Error' might or might not be raised. - It is possible for a compiler to do a better job of analyzing bodies, to - determine whether or not `Program_Error' might be raised, but it - certainly couldn't do a perfect job (that would require solving the - halting problem and is provably impossible), and because this is a - warning anyway, it does not seem worth the effort to do the analysis. - Cases in which it would be relevant are rare. - - In practice, warnings of either of the forms given above will - usually correspond to real errors, and should be examined carefully and - eliminated. In the rare case where a warning is bogus, it can be - suppressed by any of the following methods: - - * Compile with the `-gnatws' switch set - - * Suppress `Elaboration_Checks' for the called subprogram - - * Use pragma `Warnings_Off' to turn warnings off for the call - - For the internal elaboration check case, GNAT by default generates the - necessary run-time checks to ensure that `Program_Error' is raised if - any call fails an elaboration check. Of course this can only happen if a - warning has been issued as described above. The use of pragma `Suppress - (Elaboration_Checks)' may (but is not guaranteed to) suppress some of - these checks, meaning that it may be possible (but is not guaranteed) - for a program to be able to call a subprogram whose body is not yet - elaborated, without raising a `Program_Error' exception. - -  - File: gnat_ug_unx.info, Node: Controlling Elaboration in GNAT - External Calls, Next: Default Behavior in GNAT - Ensuring Safety, Prev: Controlling Elaboration in GNAT - Internal Calls, Up: Elaboration Order Handling in GNAT - - Controlling Elaboration in GNAT - External Calls - ================================================ - - The previous section discussed the case in which the execution of a - particular thread of elaboration code occurred entirely within a single - unit. This is the easy case to handle, because a programmer has direct - and total control over the order of elaboration, and furthermore, - checks need only be generated in cases which are rare and which the - compiler can easily detect. The situation is more complex when - separate compilation is taken into account. Consider the following: - - package Math is - function Sqrt (Arg : Float) return Float; - end Math; - - package body Math is - function Sqrt (Arg : Float) return Float is - begin - ... - end Sqrt; - end Math; - - with Math; - package Stuff is - X : Float := Math.Sqrt (0.5); - end Stuff; - - with Stuff; - procedure Main is - begin - ... - end Main; - - where `Main' is the main program. When this program is executed, the - elaboration code must first be executed, and one of the jobs of the - binder is to determine the order in which the units of a program are to - be elaborated. In this case we have four units: the spec and body of - `Math', the spec of `Stuff' and the body of `Main'). In what order - should the four separate sections of elaboration code be executed? - - There are some restrictions in the order of elaboration that the - binder can choose. In particular, if unit U has a `with' for a package - `X', then you are assured that the spec of `X' is elaborated before U , - but you are not assured that the body of `X' is elaborated before U. - This means that in the above case, the binder is allowed to choose the - order: - - spec of Math - spec of Stuff - body of Math - body of Main - - but that's not good, because now the call to `Math.Sqrt' that happens - during the elaboration of the `Stuff' spec happens before the body of - `Math.Sqrt' is elaborated, and hence causes `Program_Error' exception - to be raised. At first glance, one might say that the binder is - misbehaving, because obviously you want to elaborate the body of - something you `with' first, but that is not a general rule that can be - followed in all cases. Consider - - package X is ... - - package Y is ... - - with X; - package body Y is ... - - with Y; - package body X is ... - - This is a common arrangement, and, apart from the order of elaboration - problems that might arise in connection with elaboration code, this - works fine. A rule that says that you must first elaborate the body of - anything you `with' cannot work in this case: the body of `X' `with''s - `Y', which means you would have to elaborate the body of `Y' first, but - that `with''s `X', which means you have to elaborate the body of `X' - first, but ... and we have a loop that cannot be broken. - - It is true that the binder can in many cases guess an order of - elaboration that is unlikely to cause a `Program_Error' exception to be - raised, and it tries to do so (in the above example of - `Math/Stuff/Spec', the GNAT binder will by default elaborate the body - of `Math' right after its spec, so all will be well). - - However, a program that blindly relies on the binder to be helpful - can get into trouble, as we discussed in the previous sections, so GNAT - provides a number of facilities for assisting the programmer in - developing programs that are robust with respect to elaboration order. - -  - File: gnat_ug_unx.info, Node: Default Behavior in GNAT - Ensuring Safety, Next: Elaboration Issues for Library Tasks, Prev: Controlling Elaboration in GNAT - External Calls, Up: Elaboration Order Handling in GNAT - - Default Behavior in GNAT - Ensuring Safety - ========================================== - - The default behavior in GNAT ensures elaboration safety. In its default - mode GNAT implements the rule we previously described as the right - approach. Let's restate it: - - * _If a unit has elaboration code that can directly or indirectly - make a call to a subprogram in a `with''ed unit, or instantiate a - generic unit in a `with''ed unit, then if the `with''ed unit does - not have pragma `Pure' or `Preelaborate', then the client should - have an `Elaborate_All' for the `with''ed unit._ - - By following this rule a client is assured that calls and - instantiations can be made without risk of an exception. - - In this mode GNAT traces all calls that are potentially made from - elaboration code, and puts in any missing implicit `Elaborate_All' - pragmas. The advantage of this approach is that no elaboration problems - are possible if the binder can find an elaboration order that is - consistent with these implicit `Elaborate_All' pragmas. The - disadvantage of this approach is that no such order may exist. - - If the binder does not generate any diagnostics, then it means that - it has found an elaboration order that is guaranteed to be safe. - However, the binder may still be relying on implicitly generated - `Elaborate_All' pragmas so portability to other compilers than GNAT is - not guaranteed. - - If it is important to guarantee portability, then the compilations - should use the `-gnatwl' (warn on elaboration problems) switch. This - will cause warning messages to be generated indicating the missing - `Elaborate_All' pragmas. Consider the following source program: - - with k; - package j is - m : integer := k.r; - end; - - where it is clear that there should be a pragma `Elaborate_All' for - unit `k'. An implicit pragma will be generated, and it is likely that - the binder will be able to honor it. However, it is safer to include - the pragma explicitly in the source. If this unit is compiled with the - `-gnatwl' switch, then the compiler outputs a warning: - - 1. with k; - 2. package j is - 3. m : integer := k.r; - | - >>> warning: call to "r" may raise Program_Error - >>> warning: missing pragma Elaborate_All for "k" - - 4. end; - - and these warnings can be used as a guide for supplying manually the - missing pragmas. - - This default mode is more restrictive than the Ada Reference Manual, - and it is possible to construct programs which will compile using the - dynamic model described there, but will run into a circularity using - the safer static model we have described. - - Of course any Ada compiler must be able to operate in a mode - consistent with the requirements of the Ada Reference Manual, and in - particular must have the capability of implementing the standard - dynamic model of elaboration with run-time checks. - - In GNAT, this standard mode can be achieved either by the use of the - `-gnatE' switch on the compiler (`gcc' or `gnatmake') command, or by - the use of the configuration pragma: - - pragma Elaboration_Checks (RM); - - Either approach will cause the unit affected to be compiled using the - standard dynamic run-time elaboration checks described in the Ada - Reference Manual. The static model is generally preferable, since it is - clearly safer to rely on compile and link time checks rather than - run-time checks. However, in the case of legacy code, it may be - difficult to meet the requirements of the static model. This issue is - further discussed in *Note What to Do If the Default Elaboration - Behavior Fails::. - - Note that the static model provides a strict subset of the allowed - behavior and programs of the Ada Reference Manual, so if you do adhere - to the static model and no circularities exist, then you are assured - that your program will work using the dynamic model. - -  - File: gnat_ug_unx.info, Node: Elaboration Issues for Library Tasks, Next: Mixing Elaboration Models, Prev: Default Behavior in GNAT - Ensuring Safety, Up: Elaboration Order Handling in GNAT - - Elaboration Issues for Library Tasks - ==================================== - - In this section we examine special elaboration issues that arise for - programs that declare library level tasks. - - Generally the model of execution of an Ada program is that all units - are elaborated, and then execution of the program starts. However, the - declaration of library tasks definitely does not fit this model. The - reason for this is that library tasks start as soon as they are declared - (more precisely, as soon as the statement part of the enclosing package - body is reached), that is to say before elaboration of the program is - complete. This means that if such a task calls a subprogram, or an - entry in another task, the callee may or may not be elaborated yet, and - in the standard Reference Manual model of dynamic elaboration checks, - you can even get timing dependent Program_Error exceptions, since there - can be a race between the elaboration code and the task code. - - The static model of elaboration in GNAT seeks to avoid all such - dynamic behavior, by being conservative, and the conservative approach - in this particular case is to assume that all the code in a task body - is potentially executed at elaboration time if a task is declared at - the library level. - - This can definitely result in unexpected circularities. Consider the - following example - - package Decls is - task Lib_Task is - entry Start; - end Lib_Task; - - type My_Int is new Integer; - - function Ident (M : My_Int) return My_Int; - end Decls; - - with Utils; - package body Decls is - task body Lib_Task is - begin - accept Start; - Utils.Put_Val (2); - end Lib_Task; - - function Ident (M : My_Int) return My_Int is - begin - return M; - end Ident; - end Decls; - - with Decls; - package Utils is - procedure Put_Val (Arg : Decls.My_Int); - end Utils; - - with Text_IO; - package body Utils is - procedure Put_Val (Arg : Decls.My_Int) is - begin - Text_IO.Put_Line (Decls.My_Int'Image (Decls.Ident (Arg))); - end Put_Val; - end Utils; - - with Decls; - procedure Main is - begin - Decls.Lib_Task.Start; - end; - - If the above example is compiled in the default static elaboration - mode, then a circularity occurs. The circularity comes from the call - `Utils.Put_Val' in the task body of `Decls.Lib_Task'. Since this call - occurs in elaboration code, we need an implicit pragma `Elaborate_All' - for `Utils'. This means that not only must the spec and body of `Utils' - be elaborated before the body of `Decls', but also the spec and body of - any unit that is `with'ed' by the body of `Utils' must also be - elaborated before the body of `Decls'. This is the transitive - implication of pragma `Elaborate_All' and it makes sense, because in - general the body of `Put_Val' might have a call to something in a - `with'ed' unit. - - In this case, the body of Utils (actually its spec) `with's' - `Decls'. Unfortunately this means that the body of `Decls' must be - elaborated before itself, in case there is a call from the body of - `Utils'. - - Here is the exact chain of events we are worrying about: - - 1. In the body of `Decls' a call is made from within the body of a - library task to a subprogram in the package `Utils'. Since this - call may occur at elaboration time (given that the task is - activated at elaboration time), we have to assume the worst, i.e. - that the call does happen at elaboration time. - - 2. This means that the body and spec of `Util' must be elaborated - before the body of `Decls' so that this call does not cause an - access before elaboration. - - 3. Within the body of `Util', specifically within the body of - `Util.Put_Val' there may be calls to any unit `with''ed by this - package. - - 4. One such `with''ed package is package `Decls', so there might be a - call to a subprogram in `Decls' in `Put_Val'. In fact there is - such a call in this example, but we would have to assume that - there was such a call even if it were not there, since we are not - supposed to write the body of `Decls' knowing what is in the body - of `Utils'; certainly in the case of the static elaboration model, - the compiler does not know what is in other bodies and must assume - the worst. - - 5. This means that the spec and body of `Decls' must also be - elaborated before we elaborate the unit containing the call, but - that unit is `Decls'! This means that the body of `Decls' must be - elaborated before itself, and that's a circularity. - - Indeed, if you add an explicit pragma Elaborate_All for `Utils' in the - body of `Decls' you will get a true Ada Reference Manual circularity - that makes the program illegal. - - In practice, we have found that problems with the static model of - elaboration in existing code often arise from library tasks, so we must - address this particular situation. - - Note that if we compile and run the program above, using the dynamic - model of elaboration (that is to say use the `-gnatE' switch), then it - compiles, binds, links, and runs, printing the expected result of 2. - Therefore in some sense the circularity here is only apparent, and we - need to capture the properties of this program that distinguish it - from other library-level tasks that have real elaboration problems. - - We have four possible answers to this question: - - * Use the dynamic model of elaboration. - - If we use the `-gnatE' switch, then as noted above, the program - works. Why is this? If we examine the task body, it is apparent - that the task cannot proceed past the `accept' statement until - after elaboration has been completed, because the corresponding - entry call comes from the main program, not earlier. This is why - the dynamic model works here. But that's really giving up on a - precise analysis, and we prefer to take this approach only if we - cannot solve the problem in any other manner. So let us examine - two ways to reorganize the program to avoid the potential - elaboration problem. - - * Split library tasks into separate packages. - - Write separate packages, so that library tasks are isolated from - other declarations as much as possible. Let us look at a variation - on the above program. - - package Decls1 is - task Lib_Task is - entry Start; - end Lib_Task; - end Decls1; - - with Utils; - package body Decls1 is - task body Lib_Task is - begin - accept Start; - Utils.Put_Val (2); - end Lib_Task; - end Decls1; - - package Decls2 is - type My_Int is new Integer; - function Ident (M : My_Int) return My_Int; - end Decls2; - - with Utils; - package body Decls2 is - function Ident (M : My_Int) return My_Int is - begin - return M; - end Ident; - end Decls2; - - with Decls2; - package Utils is - procedure Put_Val (Arg : Decls2.My_Int); - end Utils; - - with Text_IO; - package body Utils is - procedure Put_Val (Arg : Decls2.My_Int) is - begin - Text_IO.Put_Line (Decls2.My_Int'Image (Decls2.Ident (Arg))); - end Put_Val; - end Utils; - - with Decls1; - procedure Main is - begin - Decls1.Lib_Task.Start; - end; - - All we have done is to split `Decls' into two packages, one - containing the library task, and one containing everything else. - Now there is no cycle, and the program compiles, binds, links and - executes using the default static model of elaboration. - - * Declare separate task types. - - A significant part of the problem arises because of the use of the - single task declaration form. This means that the elaboration of - the task type, and the elaboration of the task itself (i.e. the - creation of the task) happen at the same time. A good rule of - style in Ada 95 is to always create explicit task types. By - following the additional step of placing task objects in separate - packages from the task type declaration, many elaboration problems - are avoided. Here is another modified example of the example - program: - - package Decls is - task type Lib_Task_Type is - entry Start; - end Lib_Task_Type; - - type My_Int is new Integer; - - function Ident (M : My_Int) return My_Int; - end Decls; - - with Utils; - package body Decls is - task body Lib_Task_Type is - begin - accept Start; - Utils.Put_Val (2); - end Lib_Task_Type; - - function Ident (M : My_Int) return My_Int is - begin - return M; - end Ident; - end Decls; - - with Decls; - package Utils is - procedure Put_Val (Arg : Decls.My_Int); - end Utils; - - with Text_IO; - package body Utils is - procedure Put_Val (Arg : Decls.My_Int) is - begin - Text_IO.Put_Line (Decls.My_Int'Image (Decls.Ident (Arg))); - end Put_Val; - end Utils; - - with Decls; - package Declst is - Lib_Task : Decls.Lib_Task_Type; - end Declst; - - with Declst; - procedure Main is - begin - Declst.Lib_Task.Start; - end; - - What we have done here is to replace the `task' declaration in - package `Decls' with a `task type' declaration. Then we introduce - a separate package `Declst' to contain the actual task object. - This separates the elaboration issues for the `task type' - declaration, which causes no trouble, from the elaboration issues - of the task object, which is also unproblematic, since it is now - independent of the elaboration of `Utils'. This separation of - concerns also corresponds to a generally sound engineering - principle of separating declarations from instances. This version - of the program also compiles, binds, links, and executes, - generating the expected output. - - * Use No_Entry_Calls_In_Elaboration_Code restriction. - - The previous two approaches described how a program can be - restructured to avoid the special problems caused by library task - bodies. in practice, however, such restructuring may be difficult - to apply to existing legacy code, so we must consider solutions - that do not require massive rewriting. - - Let us consider more carefully why our original sample program - works under the dynamic model of elaboration. The reason is that - the code in the task body blocks immediately on the `accept' - statement. Now of course there is nothing to prohibit elaboration - code from making entry calls (for example from another library - level task), so we cannot tell in isolation that the task will not - execute the accept statement during elaboration. - - However, in practice it is very unusual to see elaboration code - make any entry calls, and the pattern of tasks starting at - elaboration time and then immediately blocking on `accept' or - `select' statements is very common. What this means is that the - compiler is being too pessimistic when it analyzes the whole - package body as though it might be executed at elaboration time. - - If we know that the elaboration code contains no entry calls, (a - very safe assumption most of the time, that could almost be made - the default behavior), then we can compile all units of the - program under control of the following configuration pragma: - - pragma Restrictions (No_Entry_Calls_In_Elaboration_Code); - - This pragma can be placed in the `gnat.adc' file in the usual - manner. If we take our original unmodified program and compile it - in the presence of a `gnat.adc' containing the above pragma, then - once again, we can compile, bind, link, and execute, obtaining the - expected result. In the presence of this pragma, the compiler does - not trace calls in a task body, that appear after the first - `accept' or `select' statement, and therefore does not report a - potential circularity in the original program. - - The compiler will check to the extent it can that the above - restriction is not violated, but it is not always possible to do a - complete check at compile time, so it is important to use this - pragma only if the stated restriction is in fact met, that is to - say no task receives an entry call before elaboration of all units - is completed. - - -  - File: gnat_ug_unx.info, Node: Mixing Elaboration Models, Next: What to Do If the Default Elaboration Behavior Fails, Prev: Elaboration Issues for Library Tasks, Up: Elaboration Order Handling in GNAT - - Mixing Elaboration Models - ========================= - - So far, we have assumed that the entire program is either compiled - using the dynamic model or static model, ensuring consistency. It is - possible to mix the two models, but rules have to be followed if this - mixing is done to ensure that elaboration checks are not omitted. - - The basic rule is that _a unit compiled with the static model cannot - be `with'ed' by a unit compiled with the dynamic model_. The reason for - this is that in the static model, a unit assumes that its clients - guarantee to use (the equivalent of) pragma `Elaborate_All' so that no - elaboration checks are required in inner subprograms, and this - assumption is violated if the client is compiled with dynamic checks. - - The precise rule is as follows. A unit that is compiled with dynamic - checks can only `with' a unit that meets at least one of the following - criteria: - - * The `with'ed' unit is itself compiled with dynamic elaboration - checks (that is with the `-gnatE' switch. - - * The `with'ed' unit is an internal GNAT implementation unit from - the System, Interfaces, Ada, or GNAT hierarchies. - - * The `with'ed' unit has pragma Preelaborate or pragma Pure. - - * The `with'ing' unit (that is the client) has an explicit pragma - `Elaborate_All' for the `with'ed' unit. - - - If this rule is violated, that is if a unit with dynamic elaboration - checks `with's' a unit that does not meet one of the above four - criteria, then the binder (`gnatbind') will issue a warning similar to - that in the following example: - - warning: "x.ads" has dynamic elaboration checks and with's - warning: "y.ads" which has static elaboration checks - - These warnings indicate that the rule has been violated, and that as a - result elaboration checks may be missed in the resulting executable - file. This warning may be suppressed using the `-ws' binder switch in - the usual manner. - - One useful application of this mixing rule is in the case of a - subsystem which does not itself `with' units from the remainder of the - application. In this case, the entire subsystem can be compiled with - dynamic checks to resolve a circularity in the subsystem, while - allowing the main application that uses this subsystem to be compiled - using the more reliable default static model. - -  - File: gnat_ug_unx.info, Node: What to Do If the Default Elaboration Behavior Fails, Next: Elaboration for Access-to-Subprogram Values, Prev: Mixing Elaboration Models, Up: Elaboration Order Handling in GNAT - - What to Do If the Default Elaboration Behavior Fails - ==================================================== - - If the binder cannot find an acceptable order, it outputs detailed - diagnostics. For example: - error: elaboration circularity detected - info: "proc (body)" must be elaborated before "pack (body)" - info: reason: Elaborate_All probably needed in unit "pack (body)" - info: recompile "pack (body)" with -gnatwl - info: for full details - info: "proc (body)" - info: is needed by its spec: - info: "proc (spec)" - info: which is withed by: - info: "pack (body)" - info: "pack (body)" must be elaborated before "proc (body)" - info: reason: pragma Elaborate in unit "proc (body)" - - - In this case we have a cycle that the binder cannot break. On the one - hand, there is an explicit pragma Elaborate in `proc' for `pack'. This - means that the body of `pack' must be elaborated before the body of - `proc'. On the other hand, there is elaboration code in `pack' that - calls a subprogram in `proc'. This means that for maximum safety, there - should really be a pragma Elaborate_All in `pack' for `proc' which - would require that the body of `proc' be elaborated before the body of - `pack'. Clearly both requirements cannot be satisfied. Faced with a - circularity of this kind, you have three different options. - - Fix the program - The most desirable option from the point of view of long-term - maintenance is to rearrange the program so that the elaboration - problems are avoided. One useful technique is to place the - elaboration code into separate child packages. Another is to move - some of the initialization code to explicitly called subprograms, - where the program controls the order of initialization explicitly. - Although this is the most desirable option, it may be impractical - and involve too much modification, especially in the case of - complex legacy code. - - Perform dynamic checks - If the compilations are done using the `-gnatE' (dynamic - elaboration check) switch, then GNAT behaves in a quite different - manner. Dynamic checks are generated for all calls that could - possibly result in raising an exception. With this switch, the - compiler does not generate implicit `Elaborate_All' pragmas. The - behavior then is exactly as specified in the Ada 95 Reference - Manual. The binder will generate an executable program that may - or may not raise `Program_Error', and then it is the programmer's - job to ensure that it does not raise an exception. Note that it is - important to compile all units with the switch, it cannot be used - selectively. - - Suppress checks - The drawback of dynamic checks is that they generate a significant - overhead at run time, both in space and time. If you are - absolutely sure that your program cannot raise any elaboration - exceptions, and you still want to use the dynamic elaboration - model, then you can use the configuration pragma `Suppress - (Elaboration_Checks)' to suppress all such checks. For example - this pragma could be placed in the `gnat.adc' file. - - Suppress checks selectively - When you know that certain calls in elaboration code cannot - possibly lead to an elaboration error, and the binder nevertheless - generates warnings on those calls and inserts Elaborate_All - pragmas that lead to elaboration circularities, it is possible to - remove those warnings locally and obtain a program that will bind. - Clearly this can be unsafe, and it is the responsibility of the - programmer to make sure that the resulting program has no - elaboration anomalies. The pragma `Suppress (Elaboration_Check)' - can be used with different granularity to suppress warnings and - break elaboration circularities: - - * Place the pragma that names the called subprogram in the - declarative part that contains the call. - - * Place the pragma in the declarative part, without naming an - entity. This disables warnings on all calls in the - corresponding declarative region. - - * Place the pragma in the package spec that declares the called - subprogram, and name the subprogram. This disables warnings - on all elaboration calls to that subprogram. - - * Place the pragma in the package spec that declares the called - subprogram, without naming any entity. This disables warnings - on all elaboration calls to all subprograms declared in this - spec. - - These four cases are listed in order of decreasing safety, and - therefore require increasing programmer care in their application. - Consider the following program: - - package Pack1 is - function F1 return Integer; - X1 : Integer; - end Pack1; - - package Pack2 is - function F2 return Integer; - function Pure (x : integer) return integer; - -- pragma Suppress (Elaboration_Check, On => Pure); -- (3) - -- pragma Suppress (Elaboration_Check); -- (4) - end Pack2; - - with Pack2; - package body Pack1 is - function F1 return Integer is - begin - return 100; - end F1; - Val : integer := Pack2.Pure (11); -- Elab. call (1) - begin - declare - -- pragma Suppress(Elaboration_Check, Pack2.F2); -- (1) - -- pragma Suppress(Elaboration_Check); -- (2) - begin - X1 := Pack2.F2 + 1; -- Elab. call (2) - end; - end Pack1; - - with Pack1; - package body Pack2 is - function F2 return Integer is - begin - return Pack1.F1; - end F2; - function Pure (x : integer) return integer is - begin - return x ** 3 - 3 * x; - end; - end Pack2; - - with Pack1, Ada.Text_IO; - procedure Proc3 is - begin - Ada.Text_IO.Put_Line(Pack1.X1'Img); -- 101 - end Proc3; - In the absence of any pragmas, an attempt to bind this program - produces the following diagnostics: - error: elaboration circularity detected - info: "pack1 (body)" must be elaborated before "pack1 (body)" - info: reason: Elaborate_All probably needed in unit "pack1 (body)" - info: recompile "pack1 (body)" with -gnatwl for full details - info: "pack1 (body)" - info: must be elaborated along with its spec: - info: "pack1 (spec)" - info: which is withed by: - info: "pack2 (body)" - info: which must be elaborated along with its spec: - info: "pack2 (spec)" - info: which is withed by: - info: "pack1 (body)" - The sources of the circularity are the two calls to - `Pack2.Pure' and `Pack2.F2' in the body of `Pack1'. We can see - that the call to F2 is safe, even though F2 calls F1, because the - call appears after the elaboration of the body of F1. Therefore - the pragma (1) is safe, and will remove the warning on the call. - It is also possible to use pragma (2) because there are no other - potentially unsafe calls in the block. - - The call to `Pure' is safe because this function does not depend - on the state of `Pack2'. Therefore any call to this function is - safe, and it is correct to place pragma (3) in the corresponding - package spec. - - Finally, we could place pragma (4) in the spec of `Pack2' to - disable warnings on all calls to functions declared therein. Note - that this is not necessarily safe, and requires more detailed - examination of the subprogram bodies involved. In particular, a - call to `F2' requires that `F1' be already elaborated. - - It is hard to generalize on which of these four approaches should be - taken. Obviously if it is possible to fix the program so that the - default treatment works, this is preferable, but this may not always be - practical. It is certainly simple enough to use `-gnatE' but the - danger in this case is that, even if the GNAT binder finds a correct - elaboration order, it may not always do so, and certainly a binder from - another Ada compiler might not. A combination of testing and analysis - (for which the warnings generated with the `-gnatwl' switch can be - useful) must be used to ensure that the program is free of errors. One - switch that is useful in this testing is the `-p (pessimistic - elaboration order)' switch for `gnatbind'. Normally the binder tries - to find an order that has the best chance of of avoiding elaboration - problems. With this switch, the binder plays a devil's advocate role, - and tries to choose the order that has the best chance of failing. If - your program works even with this switch, then it has a better chance - of being error free, but this is still not a guarantee. - - For an example of this approach in action, consider the C-tests - (executable tests) from the ACVC suite. If these are compiled and run - with the default treatment, then all but one of them succeed without - generating any error diagnostics from the binder. However, there is one - test that fails, and this is not surprising, because the whole point of - this test is to ensure that the compiler can handle cases where it is - impossible to determine a correct order statically, and it checks that - an exception is indeed raised at run time. - - This one test must be compiled and run using the `-gnatE' switch, - and then it passes. Alternatively, the entire suite can be run using - this switch. It is never wrong to run with the dynamic elaboration - switch if your code is correct, and we assume that the C-tests are - indeed correct (it is less efficient, but efficiency is not a factor in - running the ACVC tests.) - -  - File: gnat_ug_unx.info, Node: Elaboration for Access-to-Subprogram Values, Next: Summary of Procedures for Elaboration Control, Prev: What to Do If the Default Elaboration Behavior Fails, Up: Elaboration Order Handling in GNAT - - Elaboration for Access-to-Subprogram Values - =========================================== - - The introduction of access-to-subprogram types in Ada 95 complicates - the handling of elaboration. The trouble is that it becomes impossible - to tell at compile time which procedure is being called. This means - that it is not possible for the binder to analyze the elaboration - requirements in this case. - - If at the point at which the access value is created (i.e., the - evaluation of `P'Access' for a subprogram `P'), the body of the - subprogram is known to have been elaborated, then the access value is - safe, and its use does not require a check. This may be achieved by - appropriate arrangement of the order of declarations if the subprogram - is in the current unit, or, if the subprogram is in another unit, by - using pragma `Pure', `Preelaborate', or `Elaborate_Body' on the - referenced unit. - - If the referenced body is not known to have been elaborated at the - point the access value is created, then any use of the access value - must do a dynamic check, and this dynamic check will fail and raise a - `Program_Error' exception if the body has not been elaborated yet. - GNAT will generate the necessary checks, and in addition, if the - `-gnatwl' switch is set, will generate warnings that such checks are - required. - - The use of dynamic dispatching for tagged types similarly generates - a requirement for dynamic checks, and premature calls to any primitive - operation of a tagged type before the body of the operation has been - elaborated, will result in the raising of `Program_Error'. - -  - File: gnat_ug_unx.info, Node: Summary of Procedures for Elaboration Control, Next: Other Elaboration Order Considerations, Prev: Elaboration for Access-to-Subprogram Values, Up: Elaboration Order Handling in GNAT - - Summary of Procedures for Elaboration Control - ============================================= - - First, compile your program with the default options, using none of the - special elaboration control switches. If the binder successfully binds - your program, then you can be confident that, apart from issues raised - by the use of access-to-subprogram types and dynamic dispatching, the - program is free of elaboration errors. If it is important that the - program be portable, then use the `-gnatwl' switch to generate warnings - about missing `Elaborate_All' pragmas, and supply the missing pragmas. - - If the program fails to bind using the default static elaboration - handling, then you can fix the program to eliminate the binder message, - or recompile the entire program with the `-gnatE' switch to generate - dynamic elaboration checks, and, if you are sure there really are no - elaboration problems, use a global pragma `Suppress - (Elaboration_Checks)'. - -  - File: gnat_ug_unx.info, Node: Other Elaboration Order Considerations, Prev: Summary of Procedures for Elaboration Control, Up: Elaboration Order Handling in GNAT - - Other Elaboration Order Considerations - ====================================== - - This section has been entirely concerned with the issue of finding a - valid elaboration order, as defined by the Ada Reference Manual. In a - case where several elaboration orders are valid, the task is to find one - of the possible valid elaboration orders (and the static model in GNAT - will ensure that this is achieved). - - The purpose of the elaboration rules in the Ada Reference Manual is - to make sure that no entity is accessed before it has been elaborated. - For a subprogram, this means that the spec and body must have been - elaborated before the subprogram is called. For an object, this means - that the object must have been elaborated before its value is read or - written. A violation of either of these two requirements is an access - before elaboration order, and this section has been all about avoiding - such errors. - - In the case where more than one order of elaboration is possible, in - the sense that access before elaboration errors are avoided, then any - one of the orders is "correct" in the sense that it meets the - requirements of the Ada Reference Manual, and no such error occurs. - - However, it may be the case for a given program, that there are - constraints on the order of elaboration that come not from consideration - of avoiding elaboration errors, but rather from extra-lingual logic - requirements. Consider this example: - - with Init_Constants; - package Constants is - X : Integer := 0; - Y : Integer := 0; - end Constants; - - package Init_Constants is - procedure Calc; - end Init_Constants; - - with Constants; - package body Init_Constants is - procedure Calc is begin null; end; - begin - Constants.X := 3; - Constants.Y := 4; - end Init_Constants; - - with Constants; - package Calc is - Z : Integer := Constants.X + Constants.Y; - end Calc; - - with Calc; - with Text_IO; use Text_IO; - procedure Main is - begin - Put_Line (Calc.Z'Img); - end Main; - - In this example, there is more than one valid order of elaboration. For - example both the following are correct orders: - - Init_Constants spec - Constants spec - Calc spec - Main body - Init_Constants body - - and - - Init_Constants spec - Init_Constants body - Constants spec - Calc spec - Main body - - There is no language rule to prefer one or the other, both are correct - from an order of elaboration point of view. But the programmatic effects - of the two orders are very different. In the first, the elaboration - routine of `Calc' initializes `Z' to zero, and then the main program - runs with this value of zero. But in the second order, the elaboration - routine of `Calc' runs after the body of Init_Constants has set `X' and - `Y' and thus `Z' is set to 7 before `Main' runs. - - One could perhaps by applying pretty clever non-artificial - intelligence to the situation guess that it is more likely that the - second order of elaboration is the one desired, but there is no formal - linguistic reason to prefer one over the other. In fact in this - particular case, GNAT will prefer the second order, because of the rule - that bodies are elaborated as soon as possible, but it's just luck that - this is what was wanted (if indeed the second order was preferred). - - If the program cares about the order of elaboration routines in a - case like this, it is important to specify the order required. In this - particular case, that could have been achieved by adding to the spec of - Calc: - - pragma Elaborate_All (Constants); - - which requires that the body (if any) and spec of `Constants', as well - as the body and spec of any unit `with''ed by `Constants' be elaborated - before `Calc' is elaborated. - - Clearly no automatic method can always guess which alternative you - require, and if you are working with legacy code that had constraints - of this kind which were not properly specified by adding `Elaborate' or - `Elaborate_All' pragmas, then indeed it is possible that two different - compilers can choose different orders. - - The `gnatbind' `-p' switch may be useful in smoking out problems. - This switch causes bodies to be elaborated as late as possible instead - of as early as possible. In the example above, it would have forced the - choice of the first elaboration order. If you get different results - when using this switch, and particularly if one set of results is right, - and one is wrong as far as you are concerned, it shows that you have - some missing `Elaborate' pragmas. For the example above, we have the - following output: - - gnatmake -f -q main - main - 7 - gnatmake -f -q main -bargs -p - main - 0 - - It is of course quite unlikely that both these results are correct, so - it is up to you in a case like this to investigate the source of the - difference, by looking at the two elaboration orders that are chosen, - and figuring out which is correct, and then adding the necessary - `Elaborate_All' pragmas to ensure the desired order. - -  - File: gnat_ug_unx.info, Node: The Cross-Referencing Tools gnatxref and gnatfind, Next: File Name Krunching Using gnatkr, Prev: Elaboration Order Handling in GNAT, Up: Top - - The Cross-Referencing Tools `gnatxref' and `gnatfind' - ***************************************************** - - The compiler generates cross-referencing information (unless you set - the `-gnatx' switch), which are saved in the `.ali' files. This - information indicates where in the source each entity is declared and - referenced. Note that entities in package Standard are not included, but - entities in all other predefined units are included in the output. - - Before using any of these two tools, you need to compile - successfully your application, so that GNAT gets a chance to generate - the cross-referencing information. - - The two tools `gnatxref' and `gnatfind' take advantage of this - information to provide the user with the capability to easily locate the - declaration and references to an entity. These tools are quite similar, - the difference being that `gnatfind' is intended for locating - definitions and/or references to a specified entity or entities, whereas - `gnatxref' is oriented to generating a full report of all - cross-references. - - To use these tools, you must not compile your application using the - `-gnatx' switch on the `gnatmake' command line (*note (gnat_ug)The GNAT - Make Program gnatmake::). Otherwise, cross-referencing information will - not be generated. - - * Menu: - - * gnatxref Switches:: - * gnatfind Switches:: - * Project Files for gnatxref and gnatfind:: - * Regular Expressions in gnatfind and gnatxref:: - * Examples of gnatxref Usage:: - * Examples of gnatfind Usage:: - -  - File: gnat_ug_unx.info, Node: gnatxref Switches, Next: gnatfind Switches, Up: The Cross-Referencing Tools gnatxref and gnatfind - - `gnatxref' Switches - =================== - - The command lines for `gnatxref' is: - $ gnatxref [switches] sourcefile1 [sourcefile2 ...] - - where - - `sourcefile1, sourcefile2' - identifies the source files for which a report is to be generated. - The 'with'ed units will be processed too. You must provide at - least one file. - - These file names are considered to be regular expressions, so for - instance specifying 'source*.adb' is the same as giving every file - in the current directory whose name starts with 'source' and whose - extension is 'adb'. - - The switches can be : - `-a' - If this switch is present, `gnatfind' and `gnatxref' will parse - the read-only files found in the library search path. Otherwise, - these files will be ignored. This option can be used to protect - Gnat sources or your own libraries from being parsed, thus making - `gnatfind' and `gnatxref' much faster, and their output much - smaller. - - `-aIDIR' - When looking for source files also look in directory DIR. The - order in which source file search is undertaken is the same as for - `gnatmake'. - - `-aODIR' - When searching for library and object files, look in directory - DIR. The order in which library files are searched is the same as - for `gnatmake'. - - `-nostdinc' - Do not look for sources in the system default directory. - - `-nostdlib' - Do not look for library files in the system default directory. - - `--RTS=RTS-PATH' - Specifies the default location of the runtime library. Same - meaning as the equivalent `gnatmake' flag (see *Note Switches for - gnatmake::). - - `-d' - If this switch is set `gnatxref' will output the parent type - reference for each matching derived types. - - `-f' - If this switch is set, the output file names will be preceded by - their directory (if the file was found in the search path). If - this switch is not set, the directory will not be printed. - - `-g' - If this switch is set, information is output only for library-level - entities, ignoring local entities. The use of this switch may - accelerate `gnatfind' and `gnatxref'. - - `-IDIR' - Equivalent to `-aODIR -aIDIR'. - - `-pFILE' - Specify a project file to use *Note Project Files::. By default, - `gnatxref' and `gnatfind' will try to locate a project file in the - current directory. - - If a project file is either specified or found by the tools, then - the content of the source directory and object directory lines are - added as if they had been specified respectively by `-aI' and - `-aO'. - - `-u' - Output only unused symbols. This may be really useful if you give - your main compilation unit on the command line, as `gnatxref' will - then display every unused entity and 'with'ed package. - - `-v' - Instead of producing the default output, `gnatxref' will generate a - `tags' file that can be used by vi. For examples how to use this - feature, see *Note Examples of gnatxref Usage::. The tags file is - output to the standard output, thus you will have to redirect it - to a file. - - All these switches may be in any order on the command line, and may - even appear after the file names. They need not be separated by spaces, - thus you can say `gnatxref -ag' instead of `gnatxref -a -g'. - -  - File: gnat_ug_unx.info, Node: gnatfind Switches, Next: Project Files for gnatxref and gnatfind, Prev: gnatxref Switches, Up: The Cross-Referencing Tools gnatxref and gnatfind - - `gnatfind' Switches - =================== - - The command line for `gnatfind' is: - - $ gnatfind [switches] pattern[:sourcefile[:line[:column]]] - [file1 file2 ...] - - where - - `pattern' - An entity will be output only if it matches the regular expression - found in `pattern', see *Note Regular Expressions in gnatfind and - gnatxref::. - - Omitting the pattern is equivalent to specifying `*', which will - match any entity. Note that if you do not provide a pattern, you - have to provide both a sourcefile and a line. - - Entity names are given in Latin-1, with uppercase/lowercase - equivalence for matching purposes. At the current time there is no - support for 8-bit codes other than Latin-1, or for wide characters - in identifiers. - - `sourcefile' - `gnatfind' will look for references, bodies or declarations of - symbols referenced in `sourcefile', at line `line' and column - `column'. See *note Examples of gnatfind Usage:: for syntax - examples. - - `line' - is a decimal integer identifying the line number containing the - reference to the entity (or entities) to be located. - - `column' - is a decimal integer identifying the exact location on the line of - the first character of the identifier for the entity reference. - Columns are numbered from 1. - - `file1 file2 ...' - The search will be restricted to these files. If none are given, - then the search will be done for every library file in the search - path. These file must appear only after the pattern or sourcefile. - - These file names are considered to be regular expressions, so for - instance specifying 'source*.adb' is the same as giving every file - in the current directory whose name starts with 'source' and whose - extension is 'adb'. - - Not that if you specify at least one file in this part, `gnatfind' - may sometimes not be able to find the body of the subprograms... - - At least one of 'sourcefile' or 'pattern' has to be present on the - command line. - - The following switches are available: - `-a' - If this switch is present, `gnatfind' and `gnatxref' will parse - the read-only files found in the library search path. Otherwise, - these files will be ignored. This option can be used to protect - Gnat sources or your own libraries from being parsed, thus making - `gnatfind' and `gnatxref' much faster, and their output much - smaller. - - `-aIDIR' - When looking for source files also look in directory DIR. The - order in which source file search is undertaken is the same as for - `gnatmake'. - - `-aODIR' - When searching for library and object files, look in directory - DIR. The order in which library files are searched is the same as - for `gnatmake'. - - `-nostdinc' - Do not look for sources in the system default directory. - - `-nostdlib' - Do not look for library files in the system default directory. - - `--RTS=RTS-PATH' - Specifies the default location of the runtime library. Same - meaning as the equivalent `gnatmake' flag (see *Note Switches for - gnatmake::). - - `-d' - If this switch is set, then `gnatfind' will output the parent type - reference for each matching derived types. - - `-e' - By default, `gnatfind' accept the simple regular expression set for - `pattern'. If this switch is set, then the pattern will be - considered as full Unix-style regular expression. - - `-f' - If this switch is set, the output file names will be preceded by - their directory (if the file was found in the search path). If - this switch is not set, the directory will not be printed. - - `-g' - If this switch is set, information is output only for library-level - entities, ignoring local entities. The use of this switch may - accelerate `gnatfind' and `gnatxref'. - - `-IDIR' - Equivalent to `-aODIR -aIDIR'. - - `-pFILE' - Specify a project file (*note Project Files::) to use. By - default, `gnatxref' and `gnatfind' will try to locate a project - file in the current directory. - - If a project file is either specified or found by the tools, then - the content of the source directory and object directory lines are - added as if they had been specified respectively by `-aI' and - `-aO'. - - `-r' - By default, `gnatfind' will output only the information about the - declaration, body or type completion of the entities. If this - switch is set, the `gnatfind' will locate every reference to the - entities in the files specified on the command line (or in every - file in the search path if no file is given on the command line). - - `-s' - If this switch is set, then `gnatfind' will output the content of - the Ada source file lines were the entity was found. - - `-t' - If this switch is set, then `gnatfind' will output the type - hierarchy for the specified type. It act like -d option but - recursively from parent type to parent type. When this switch is - set it is not possible to specify more than one file. - - All these switches may be in any order on the command line, and may - even appear after the file names. They need not be separated by spaces, - thus you can say `gnatxref -ag' instead of `gnatxref -a -g'. - - As stated previously, gnatfind will search in every directory in the - search path. You can force it to look only in the current directory if - you specify `*' at the end of the command line. - -  - File: gnat_ug_unx.info, Node: Project Files for gnatxref and gnatfind, Next: Regular Expressions in gnatfind and gnatxref, Prev: gnatfind Switches, Up: The Cross-Referencing Tools gnatxref and gnatfind - - Project Files for `gnatxref' and `gnatfind' - =========================================== - - Project files allow a programmer to specify how to compile its - application, where to find sources,... These files are used primarily by - the Glide Ada mode, but they can also be used by the two tools - `gnatxref' and `gnatfind'. - - A project file name must end with `.adp'. If a single one is present - in the current directory, then `gnatxref' and `gnatfind' will extract - the information from it. If multiple project files are found, none of - them is read, and you have to use the `-p' switch to specify the one - you want to use. - - The following lines can be included, even though most of them have - default values which can be used in most cases. The lines can be - entered in any order in the file. Except for `src_dir' and `obj_dir', - you can only have one instance of each line. If you have multiple - instances, only the last one is taken into account. - - `src_dir=DIR [default: "./"]' - specifies a directory where to look for source files. Multiple - src_dir lines can be specified and they will be searched in the - order they are specified. - - `obj_dir=DIR [default: "./"]' - specifies a directory where to look for object and library files. - Multiple obj_dir lines can be specified and they will be searched - in the order they are specified - - `comp_opt=SWITCHES [default: ""]' - creates a variable which can be referred to subsequently by using - the `${comp_opt}' notation. This is intended to store the default - switches given to `gnatmake' and `gcc'. - - `bind_opt=SWITCHES [default: ""]' - creates a variable which can be referred to subsequently by using - the `${bind_opt}' notation. This is intended to store the default - switches given to `gnatbind'. - - `link_opt=SWITCHES [default: ""]' - creates a variable which can be referred to subsequently by using - the `${link_opt}' notation. This is intended to store the default - switches given to `gnatlink'. - - `main=EXECUTABLE [default: ""]' - specifies the name of the executable for the application. This - variable can be referred to in the following lines by using the - `${main}' notation. - - `comp_cmd=COMMAND [default: "gcc -c -I${src_dir} -g -gnatq"]' - specifies the command used to compile a single file in the - application. - - `make_cmd=COMMAND [default: "gnatmake ${main} -aI${src_dir} -aO${obj_dir} -g -gnatq -cargs ${comp_opt} -bargs ${bind_opt} -largs ${link_opt}"]' - specifies the command used to recompile the whole application. - - `run_cmd=COMMAND [default: "${main}"]' - specifies the command used to run the application. - - `debug_cmd=COMMAND [default: "gdb ${main}"]' - specifies the command used to debug the application - - `gnatxref' and `gnatfind' only take into account the `src_dir' and - `obj_dir' lines, and ignore the others. - -  - File: gnat_ug_unx.info, Node: Regular Expressions in gnatfind and gnatxref, Next: Examples of gnatxref Usage, Prev: Project Files for gnatxref and gnatfind, Up: The Cross-Referencing Tools gnatxref and gnatfind - - Regular Expressions in `gnatfind' and `gnatxref' - ================================================ - - As specified in the section about `gnatfind', the pattern can be a - regular expression. Actually, there are to set of regular expressions - which are recognized by the program : - - `globbing patterns' - These are the most usual regular expression. They are the same - that you generally used in a Unix shell command line, or in a DOS - session. - - Here is a more formal grammar : - regexp ::= term - term ::= elmt -- matches elmt - term ::= elmt elmt -- concatenation (elmt then elmt) - term ::= * -- any string of 0 or more characters - term ::= ? -- matches any character - term ::= [char {char}] -- matches any character listed - term ::= [char - char] -- matches any character in range - - `full regular expression' - The second set of regular expressions is much more powerful. This - is the type of regular expressions recognized by utilities such a - `grep'. - - The following is the form of a regular expression, expressed in Ada - reference manual style BNF is as follows - - regexp ::= term {| term} -- alternation (term or term ...) - - term ::= item {item} -- concatenation (item then item) - - item ::= elmt -- match elmt - item ::= elmt * -- zero or more elmt's - item ::= elmt + -- one or more elmt's - item ::= elmt ? -- matches elmt or nothing - elmt ::= nschar -- matches given character - elmt ::= [nschar {nschar}] -- matches any character listed - elmt ::= [^ nschar {nschar}] -- matches any character not listed - elmt ::= [char - char] -- matches chars in given range - elmt ::= \ char -- matches given character - elmt ::= . -- matches any single character - elmt ::= ( regexp ) -- parens used for grouping - - char ::= any character, including special characters - nschar ::= any character except ()[].*+?^ - - Following are a few examples : - - `abcde|fghi' - will match any of the two strings 'abcde' and 'fghi'. - - `abc*d' - will match any string like 'abd', 'abcd', 'abccd', 'abcccd', - and so on - - `[a-z]+' - will match any string which has only lowercase characters in - it (and at least one character - -  - File: gnat_ug_unx.info, Node: Examples of gnatxref Usage, Next: Examples of gnatfind Usage, Prev: Regular Expressions in gnatfind and gnatxref, Up: The Cross-Referencing Tools gnatxref and gnatfind - - Examples of `gnatxref' Usage - ============================ - - General Usage - ------------- - - For the following examples, we will consider the following units : - - main.ads: - 1: with Bar; - 2: package Main is - 3: procedure Foo (B : in Integer); - 4: C : Integer; - 5: private - 6: D : Integer; - 7: end Main; - - main.adb: - 1: package body Main is - 2: procedure Foo (B : in Integer) is - 3: begin - 4: C := B; - 5: D := B; - 6: Bar.Print (B); - 7: Bar.Print (C); - 8: end Foo; - 9: end Main; - - bar.ads: - 1: package Bar is - 2: procedure Print (B : Integer); - 3: end bar; - - The first thing to do is to recompile your application (for - instance, in that case just by doing a `gnatmake main', so that - GNAT generates the cross-referencing information. You can then - issue any of the following commands: - - `gnatxref main.adb' - `gnatxref' generates cross-reference information for main.adb and - every unit 'with'ed by main.adb. - - The output would be: - B Type: Integer - Decl: bar.ads 2:22 - B Type: Integer - Decl: main.ads 3:20 - Body: main.adb 2:20 - Ref: main.adb 4:13 5:13 6:19 - Bar Type: Unit - Decl: bar.ads 1:9 - Ref: main.adb 6:8 7:8 - main.ads 1:6 - C Type: Integer - Decl: main.ads 4:5 - Modi: main.adb 4:8 - Ref: main.adb 7:19 - D Type: Integer - Decl: main.ads 6:5 - Modi: main.adb 5:8 - Foo Type: Unit - Decl: main.ads 3:15 - Body: main.adb 2:15 - Main Type: Unit - Decl: main.ads 2:9 - Body: main.adb 1:14 - Print Type: Unit - Decl: bar.ads 2:15 - Ref: main.adb 6:12 7:12 - - that is the entity `Main' is declared in main.ads, line 2, column - 9, its body is in main.adb, line 1, column 14 and is not - referenced any where. - - The entity `Print' is declared in bar.ads, line 2, column 15 and it - it referenced in main.adb, line 6 column 12 and line 7 column 12. - - `gnatxref package1.adb package2.ads' - `gnatxref' will generates cross-reference information for - package1.adb, package2.ads and any other package 'with'ed by any - of these. - - Using gnatxref with vi - ---------------------- - - `gnatxref' can generate a tags file output, which can be used - directly from `vi'. Note that the standard version of `vi' will not - work properly with overloaded symbols. Consider using another free - implementation of `vi', such as `vim'. - - $ gnatxref -v gnatfind.adb > tags - - will generate the tags file for `gnatfind' itself (if the sources are - in the search path!). - - From `vi', you can then use the command `:tag entity' (replacing - entity by whatever you are looking for), and vi will display a new file - with the corresponding declaration of entity. - -  - File: gnat_ug_unx.info, Node: Examples of gnatfind Usage, Prev: Examples of gnatxref Usage, Up: The Cross-Referencing Tools gnatxref and gnatfind - - Examples of `gnatfind' Usage - ============================ - - `gnatfind -f xyz:main.adb' - Find declarations for all entities xyz referenced at least once in - main.adb. The references are search in every library file in the - search path. - - The directories will be printed as well (as the `-f' switch is set) - - The output will look like: - directory/main.ads:106:14: xyz <= declaration - directory/main.adb:24:10: xyz <= body - directory/foo.ads:45:23: xyz <= declaration - - that is to say, one of the entities xyz found in main.adb is - declared at line 12 of main.ads (and its body is in main.adb), and - another one is declared at line 45 of foo.ads - - `gnatfind -fs xyz:main.adb' - This is the same command as the previous one, instead `gnatfind' - will display the content of the Ada source file lines. - - The output will look like: - - directory/main.ads:106:14: xyz <= declaration - procedure xyz; - directory/main.adb:24:10: xyz <= body - procedure xyz is - directory/foo.ads:45:23: xyz <= declaration - xyz : Integer; - - This can make it easier to find exactly the location your are - looking for. - - `gnatfind -r "*x*":main.ads:123 foo.adb' - Find references to all entities containing an x that are - referenced on line 123 of main.ads. The references will be - searched only in main.adb and foo.adb. - - `gnatfind main.ads:123' - Find declarations and bodies for all entities that are referenced - on line 123 of main.ads. - - This is the same as `gnatfind "*":main.adb:123'. - - `gnatfind mydir/main.adb:123:45' - Find the declaration for the entity referenced at column 45 in - line 123 of file main.adb in directory mydir. Note that it is - usual to omit the identifier name when the column is given, since - the column position identifies a unique reference. - - The column has to be the beginning of the identifier, and should - not point to any character in the middle of the identifier. - -  - File: gnat_ug_unx.info, Node: File Name Krunching Using gnatkr, Next: Preprocessing Using gnatprep, Prev: The Cross-Referencing Tools gnatxref and gnatfind, Up: Top - - File Name Krunching Using `gnatkr' - ********************************** - - This chapter discusses the method used by the compiler to shorten the - default file names chosen for Ada units so that they do not exceed the - maximum length permitted. It also describes the `gnatkr' utility that - can be used to determine the result of applying this shortening. - - * Menu: - - * About gnatkr:: - * Using gnatkr:: - * Krunching Method:: - * Examples of gnatkr Usage:: - -  - File: gnat_ug_unx.info, Node: About gnatkr, Next: Using gnatkr, Up: File Name Krunching Using gnatkr - - About `gnatkr' - ============== - - The default file naming rule in GNAT is that the file name must be - derived from the unit name. The exact default rule is as follows: - * Take the unit name and replace all dots by hyphens. - - * If such a replacement occurs in the second character position of a - name, and the first character is a, g, s, or i then replace the - dot by the character ~ (tilde) instead of a minus. - The reason for this exception is to avoid clashes with the standard - names for children of System, Ada, Interfaces, and GNAT, which use the - prefixes s- a- i- and g- respectively. - - The `-gnatkNN' switch of the compiler activates a "krunching" - circuit that limits file names to nn characters (where nn is a decimal - integer). For example, using OpenVMS, where the maximum file name - length is 39, the value of nn is usually set to 39, but if you want to - generate a set of files that would be usable if ported to a system with - some different maximum file length, then a different value can be - specified. The default value of 39 for OpenVMS need not be specified. - - The `gnatkr' utility can be used to determine the krunched name for - a given file, when krunched to a specified maximum length. - -  - File: gnat_ug_unx.info, Node: Using gnatkr, Next: Krunching Method, Prev: About gnatkr, Up: File Name Krunching Using gnatkr - - Using `gnatkr' - ============== - - The `gnatkr' command has the form - - $ gnatkr NAME [LENGTH] - - NAME can be an Ada name with dots or the GNAT name of the unit, where - the dots representing child units or subunit are replaced by hyphens. - The only confusion arises if a name ends in `.ads' or `.adb'. `gnatkr' - takes this to be an extension if there are no other dots in the name - and the whole name is in lowercase. - - LENGTH represents the length of the krunched name. The default when - no argument is given is 8 characters. A length of zero stands for - unlimited, in other words do not chop except for system files which are - always 8. - - The output is the krunched name. The output has an extension only if the - original argument was a file name with an extension. - -  - File: gnat_ug_unx.info, Node: Krunching Method, Next: Examples of gnatkr Usage, Prev: Using gnatkr, Up: File Name Krunching Using gnatkr - - Krunching Method - ================ - - The initial file name is determined by the name of the unit that the - file contains. The name is formed by taking the full expanded name of - the unit and replacing the separating dots with hyphens and using - lowercase for all letters, except that a hyphen in the second character - position is replaced by a tilde if the first character is a, i, g, or s. - The extension is `.ads' for a specification and `.adb' for a body. - Krunching does not affect the extension, but the file name is shortened - to the specified length by following these rules: - - * The name is divided into segments separated by hyphens, tildes or - underscores and all hyphens, tildes, and underscores are - eliminated. If this leaves the name short enough, we are done. - - * If the name is too long, the longest segment is located (left-most - if there are two of equal length), and shortened by dropping its - last character. This is repeated until the name is short enough. - - As an example, consider the krunching of - `our-strings-wide_fixed.adb' to fit the name into 8 characters as - required by some operating systems. - - our-strings-wide_fixed 22 - our strings wide fixed 19 - our string wide fixed 18 - our strin wide fixed 17 - our stri wide fixed 16 - our stri wide fixe 15 - our str wide fixe 14 - our str wid fixe 13 - our str wid fix 12 - ou str wid fix 11 - ou st wid fix 10 - ou st wi fix 9 - ou st wi fi 8 - Final file name: oustwifi.adb - - * The file names for all predefined units are always krunched to - eight characters. The krunching of these predefined units uses the - following special prefix replacements: - - `ada-' - replaced by `a-' - - `gnat-' - replaced by `g-' - - `interfaces-' - replaced by `i-' - - `system-' - replaced by `s-' - - These system files have a hyphen in the second character position. - That is why normal user files replace such a character with a - tilde, to avoid confusion with system file names. - - As an example of this special rule, consider - `ada-strings-wide_fixed.adb', which gets krunched as follows: - - ada-strings-wide_fixed 22 - a- strings wide fixed 18 - a- string wide fixed 17 - a- strin wide fixed 16 - a- stri wide fixed 15 - a- stri wide fixe 14 - a- str wide fixe 13 - a- str wid fixe 12 - a- str wid fix 11 - a- st wid fix 10 - a- st wi fix 9 - a- st wi fi 8 - Final file name: a-stwifi.adb - - Of course no file shortening algorithm can guarantee uniqueness over - all possible unit names, and if file name krunching is used then it is - your responsibility to ensure that no name clashes occur. The utility - program `gnatkr' is supplied for conveniently determining the krunched - name of a file. - -  - File: gnat_ug_unx.info, Node: Examples of gnatkr Usage, Prev: Krunching Method, Up: File Name Krunching Using gnatkr - - Examples of `gnatkr' Usage - ========================== - - $ gnatkr very_long_unit_name.ads --> velounna.ads - $ gnatkr grandparent-parent-child.ads --> grparchi.ads - $ gnatkr Grandparent.Parent.Child --> grparchi - $ gnatkr very_long_unit_name.ads/count=6 --> vlunna.ads - $ gnatkr very_long_unit_name.ads/count=0 --> very_long_unit_name.ads - -  - File: gnat_ug_unx.info, Node: Preprocessing Using gnatprep, Next: The GNAT Library Browser gnatls, Prev: File Name Krunching Using gnatkr, Up: Top - - Preprocessing Using `gnatprep' - ****************************** - - The `gnatprep' utility provides a simple preprocessing capability for - Ada programs. It is designed for use with GNAT, but is not dependent - on any special features of GNAT. - - * Menu: - - * Using gnatprep:: - * Switches for gnatprep:: - * Form of Definitions File:: - * Form of Input Text for gnatprep:: - -  - File: gnat_ug_unx.info, Node: Using gnatprep, Next: Switches for gnatprep, Up: Preprocessing Using gnatprep - - Using `gnatprep' - ================ - - To call `gnatprep' use - - $ gnatprep [-bcrsu] [-Dsymbol=value] infile outfile [deffile] - - where - `infile' - is the full name of the input file, which is an Ada source file - containing preprocessor directives. - - `outfile' - is the full name of the output file, which is an Ada source in - standard Ada form. When used with GNAT, this file name will - normally have an ads or adb suffix. - - `deffile' - is the full name of a text file containing definitions of symbols - to be referenced by the preprocessor. This argument is optional, - and can be replaced by the use of the `-D' switch. - - `switches' - is an optional sequence of switches as described in the next - section. - -  - File: gnat_ug_unx.info, Node: Switches for gnatprep, Next: Form of Definitions File, Prev: Using gnatprep, Up: Preprocessing Using gnatprep - - Switches for `gnatprep' - ======================= - - `-b' - Causes both preprocessor lines and the lines deleted by - preprocessing to be replaced by blank lines in the output source - file, preserving line numbers in the output file. - - `-c' - Causes both preprocessor lines and the lines deleted by - preprocessing to be retained in the output source as comments - marked with the special string "-! ". This option will result in - line numbers being preserved in the output file. - - `-Dsymbol=value' - Defines a new symbol, associated with value. If no value is given - on the command line, then symbol is considered to be `True'. This - switch can be used in place of a definition file. - - `-r' - Causes a `Source_Reference' pragma to be generated that references - the original input file, so that error messages will use the file - name of this original file. The use of this switch implies that - preprocessor lines are not to be removed from the file, so its use - will force `-b' mode if `-c' has not been specified explicitly. - - Note that if the file to be preprocessed contains multiple units, - then it will be necessary to `gnatchop' the output file from - `gnatprep'. If a `Source_Reference' pragma is present in the - preprocessed file, it will be respected by `gnatchop -r' so that - the final chopped files will correctly refer to the original input - source file for `gnatprep'. - - `-s' - Causes a sorted list of symbol names and values to be listed on - the standard output file. - - `-u' - Causes undefined symbols to be treated as having the value FALSE - in the context of a preprocessor test. In the absence of this - option, an undefined symbol in a `#if' or `#elsif' test will be - treated as an error. - - Note: if neither `-b' nor `-c' is present, then preprocessor lines and - deleted lines are completely removed from the output, unless -r is - specified, in which case -b is assumed. - -  - File: gnat_ug_unx.info, Node: Form of Definitions File, Next: Form of Input Text for gnatprep, Prev: Switches for gnatprep, Up: Preprocessing Using gnatprep - - Form of Definitions File - ======================== - - The definitions file contains lines of the form - - symbol := value - - where symbol is an identifier, following normal Ada (case-insensitive) - rules for its syntax, and value is one of the following: - - * Empty, corresponding to a null substitution - - * A string literal using normal Ada syntax - - * Any sequence of characters from the set (letters, digits, period, - underline). - - Comment lines may also appear in the definitions file, starting with - the usual `--', and comments may be added to the definitions lines. - -  - File: gnat_ug_unx.info, Node: Form of Input Text for gnatprep, Prev: Form of Definitions File, Up: Preprocessing Using gnatprep - - Form of Input Text for `gnatprep' - ================================= - - The input text may contain preprocessor conditional inclusion lines, as - well as general symbol substitution sequences. - - The preprocessor conditional inclusion commands have the form - - #if expression [then] - lines - #elsif expression [then] - lines - #elsif expression [then] - lines - ... - #else - lines - #end if; - - In this example, expression is defined by the following grammar: - expression ::= - expression ::= = "" - expression ::= = - expression ::= 'Defined - expression ::= not expression - expression ::= expression and expression - expression ::= expression or expression - expression ::= expression and then expression - expression ::= expression or else expression - expression ::= ( expression ) - - For the first test (expression ::= ) the symbol must have - either the value true or false, that is to say the right-hand of the - symbol definition must be one of the (case-insensitive) literals `True' - or `False'. If the value is true, then the corresponding lines are - included, and if the value is false, they are excluded. - - The test (expression ::= `'Defined') is true only if the - symbol has been defined in the definition file or by a `-D' switch on - the command line. Otherwise, the test is false. - - The equality tests are case insensitive, as are all the preprocessor - lines. - - If the symbol referenced is not defined in the symbol definitions - file, then the effect depends on whether or not switch `-u' is - specified. If so, then the symbol is treated as if it had the value - false and the test fails. If this switch is not specified, then it is - an error to reference an undefined symbol. It is also an error to - reference a symbol that is defined with a value other than `True' or - `False'. - - The use of the `not' operator inverts the sense of this logical - test, so that the lines are included only if the symbol is not defined. - The `then' keyword is optional as shown - - The `#' must be the first non-blank character on a line, but - otherwise the format is free form. Spaces or tabs may appear between - the `#' and the keyword. The keywords and the symbols are case - insensitive as in normal Ada code. Comments may be used on a - preprocessor line, but other than that, no other tokens may appear on a - preprocessor line. Any number of `elsif' clauses can be present, - including none at all. The `else' is optional, as in Ada. - - The `#' marking the start of a preprocessor line must be the first - non-blank character on the line, i.e. it must be preceded only by - spaces or horizontal tabs. - - Symbol substitution outside of preprocessor lines is obtained by - using the sequence - - $symbol - - anywhere within a source line, except in a comment or within a string - literal. The identifier following the `$' must match one of the symbols - defined in the symbol definition file, and the result is to substitute - the value of the symbol in place of `$symbol' in the output file. - - Note that although the substitution of strings within a string - literal is not possible, it is possible to have a symbol whose defined - value is a string literal. So instead of setting XYZ to `hello' and - writing: - - Header : String := "$XYZ"; - - you should set XYZ to `"hello"' and write: - - Header : String := $XYZ; - - and then the substitution will occur as desired. - -  - File: gnat_ug_unx.info, Node: The GNAT Library Browser gnatls, Next: GNAT and Libraries, Prev: Preprocessing Using gnatprep, Up: Top - - The GNAT Library Browser `gnatls' - ********************************* - - `gnatls' is a tool that outputs information about compiled units. It - gives the relationship between objects, unit names and source files. It - can also be used to check the source dependencies of a unit as well as - various characteristics. - - * Menu: - - * Running gnatls:: - * Switches for gnatls:: - * Examples of gnatls Usage:: - -  - File: gnat_ug_unx.info, Node: Running gnatls, Next: Switches for gnatls, Up: The GNAT Library Browser gnatls - - Running `gnatls' - ================ - - The `gnatls' command has the form - - $ gnatls switches OBJECT_OR_ALI_FILE - - The main argument is the list of object or `ali' files (*note The Ada - Library Information Files::) for which information is requested. - - In normal mode, without additional option, `gnatls' produces a - four-column listing. Each line represents information for a specific - object. The first column gives the full path of the object, the second - column gives the name of the principal unit in this object, the third - column gives the status of the source and the fourth column gives the - full path of the source representing this unit. Here is a simple - example of use: - - $ gnatls *.o - ./demo1.o demo1 DIF demo1.adb - ./demo2.o demo2 OK demo2.adb - ./hello.o h1 OK hello.adb - ./instr-child.o instr.child MOK instr-child.adb - ./instr.o instr OK instr.adb - ./tef.o tef DIF tef.adb - ./text_io_example.o text_io_example OK text_io_example.adb - ./tgef.o tgef DIF tgef.adb - - The first line can be interpreted as follows: the main unit which is - contained in object file `demo1.o' is demo1, whose main source is in - `demo1.adb'. Furthermore, the version of the source used for the - compilation of demo1 has been modified (DIF). Each source file has a - status qualifier which can be: - - `OK (unchanged)' - The version of the source file used for the compilation of the - specified unit corresponds exactly to the actual source file. - - `MOK (slightly modified)' - The version of the source file used for the compilation of the - specified unit differs from the actual source file but not enough - to require recompilation. If you use gnatmake with the qualifier - `-m (minimal recompilation)', a file marked MOK will not be - recompiled. - - `DIF (modified)' - No version of the source found on the path corresponds to the - source used to build this object. - - `??? (file not found)' - No source file was found for this unit. - - `HID (hidden, unchanged version not first on PATH)' - The version of the source that corresponds exactly to the source - used for compilation has been found on the path but it is hidden - by another version of the same source that has been modified. - -  - File: gnat_ug_unx.info, Node: Switches for gnatls, Next: Examples of gnatls Usage, Prev: Running gnatls, Up: The GNAT Library Browser gnatls - - Switches for `gnatls' - ===================== - - `gnatls' recognizes the following switches: - - `-a' - Consider all units, including those of the predefined Ada library. - Especially useful with `-d'. - - `-d' - List sources from which specified units depend on. - - `-h' - Output the list of options. - - `-o' - Only output information about object files. - - `-s' - Only output information about source files. - - `-u' - Only output information about compilation units. - - `-aODIR' - `-aIDIR' - `-IDIR' - `-I-' - `-nostdinc' - Source path manipulation. Same meaning as the equivalent - `gnatmake' flags (see *Note Switches for gnatmake::). - - `--RTS=RTS-PATH' - Specifies the default location of the runtime library. Same - meaning as the equivalent `gnatmake' flag (see *Note Switches for - gnatmake::). - - `-v' - Verbose mode. Output the complete source and object paths. Do not - use the default column layout but instead use long format giving - as much as information possible on each requested units, including - special characteristics such as: - - `Preelaborable' - The unit is preelaborable in the Ada 95 sense. - - `No_Elab_Code' - No elaboration code has been produced by the compiler for - this unit. - - `Pure' - The unit is pure in the Ada 95 sense. - - `Elaborate_Body' - The unit contains a pragma Elaborate_Body. - - `Remote_Types' - The unit contains a pragma Remote_Types. - - `Shared_Passive' - The unit contains a pragma Shared_Passive. - - `Predefined' - This unit is part of the predefined environment and cannot be - modified by the user. - - `Remote_Call_Interface' - The unit contains a pragma Remote_Call_Interface. - -  - File: gnat_ug_unx.info, Node: Examples of gnatls Usage, Prev: Switches for gnatls, Up: The GNAT Library Browser gnatls - - Example of `gnatls' Usage - ========================= - - Example of using the verbose switch. Note how the source and object - paths are affected by the -I switch. - - $ gnatls -v -I.. demo1.o - - GNATLS 3.10w (970212) Copyright 1999 Free Software Foundation, Inc. - - Source Search Path: - - ../ - /home/comar/local/adainclude/ - - Object Search Path: - - ../ - /home/comar/local/lib/gcc-lib/mips-sni-sysv4/2.7.2/adalib/ - - ./demo1.o - Unit => - Name => demo1 - Kind => subprogram body - Flags => No_Elab_Code - Source => demo1.adb modified - - The following is an example of use of the dependency list. Note the - use of the -s switch which gives a straight list of source files. This - can be useful for building specialized scripts. - - $ gnatls -d demo2.o - ./demo2.o demo2 OK demo2.adb - OK gen_list.ads - OK gen_list.adb - OK instr.ads - OK instr-child.ads - - $ gnatls -d -s -a demo1.o - demo1.adb - /home/comar/local/adainclude/ada.ads - /home/comar/local/adainclude/a-finali.ads - /home/comar/local/adainclude/a-filico.ads - /home/comar/local/adainclude/a-stream.ads - /home/comar/local/adainclude/a-tags.ads - gen_list.ads - gen_list.adb - /home/comar/local/adainclude/gnat.ads - /home/comar/local/adainclude/g-io.ads - instr.ads - /home/comar/local/adainclude/system.ads - /home/comar/local/adainclude/s-exctab.ads - /home/comar/local/adainclude/s-finimp.ads - /home/comar/local/adainclude/s-finroo.ads - /home/comar/local/adainclude/s-secsta.ads - /home/comar/local/adainclude/s-stalib.ads - /home/comar/local/adainclude/s-stoele.ads - /home/comar/local/adainclude/s-stratt.ads - /home/comar/local/adainclude/s-tasoli.ads - /home/comar/local/adainclude/s-unstyp.ads - /home/comar/local/adainclude/unchconv.ads - -  - File: gnat_ug_unx.info, Node: GNAT and Libraries, Next: Using the GNU make Utility, Prev: The GNAT Library Browser gnatls, Up: Top - - GNAT and Libraries - ****************** - - This chapter addresses some of the issues related to building and using - a library with GNAT. It also shows how the GNAT run-time library can be - recompiled. - - * Menu: - - * Creating an Ada Library:: - * Installing an Ada Library:: - * Using an Ada Library:: - * Creating an Ada Library to be Used in a Non-Ada Context:: - * Rebuilding the GNAT Run-Time Library:: - -  - File: gnat_ug_unx.info, Node: Creating an Ada Library, Next: Installing an Ada Library, Up: GNAT and Libraries - - Creating an Ada Library - ======================= - - In the GNAT environment, a library has two components: - * Source files. - - * Compiled code and Ali files. See *Note The Ada Library Information - Files::. - - In order to use other packages *Note The GNAT Compilation Model:: - requires a certain number of sources to be available to the compiler. - The minimal set of sources required includes the specs of all the - packages that make up the visible part of the library as well as all - the sources upon which they depend. The bodies of all visible generic - units must also be provided. - - Although it is not strictly mandatory, it is recommended that all - sources needed to recompile the library be provided, so that the user - can make full use of inter-unit inlining and source-level debugging. - This can also make the situation easier for users that need to upgrade - their compilation toolchain and thus need to recompile the library from - sources. - - The compiled code can be provided in different ways. The simplest way is - to provide directly the set of objects produced by the compiler during - the compilation of the library. It is also possible to group the objects - into an archive using whatever commands are provided by the operating - system. Finally, it is also possible to create a shared library (see - option -shared in the GCC manual). - - There are various possibilities for compiling the units that make up the - library: for example with a Makefile *Note Using the GNU make Utility::, - or with a conventional script. For simple libraries, it is also - possible to create a dummy main program which depends upon all the - packages that comprise the interface of the library. This dummy main - program can then be given to gnatmake, in order to build all the - necessary objects. Here is an example of such a dummy program and the - generic commands used to build an archive or a shared library. - - with My_Lib.Service1; - with My_Lib.Service2; - with My_Lib.Service3; - procedure My_Lib_Dummy is - begin - null; - end; - - # compiling the library - $ gnatmake -c my_lib_dummy.adb - - # we don't need the dummy object itself - $ rm my_lib_dummy.o my_lib_dummy.ali - - # create an archive with the remaining objects - $ ar rc libmy_lib.a *.o - # some systems may require "ranlib" to be run as well - - # or create a shared library - $ gcc -shared -o libmy_lib.so *.o - # some systems may require the code to have been compiled with -fPIC - - When the objects are grouped in an archive or a shared library, the user - needs to specify the desired library at link time, unless a pragma - linker_options has been used in one of the sources: - pragma Linker_Options ("-lmy_lib"); - -  - File: gnat_ug_unx.info, Node: Installing an Ada Library, Next: Using an Ada Library, Prev: Creating an Ada Library, Up: GNAT and Libraries - - Installing an Ada Library - ========================= - - In the GNAT model, installing a library consists in copying into a - specific location the files that make up this library. It is possible - to install the sources in a different directory from the other files - (ALI, objects, archives) since the source path and the object path can - easily be specified separately. - - For general purpose libraries, it is possible for the system - administrator to put those libraries in the default compiler paths. To - achieve this, he must specify their location in the configuration files - "ada_source_path" and "ada_object_path" that must be located in the GNAT - installation tree at the same place as the gcc spec file. The location - of the gcc spec file can be determined as follows: - $ gcc -v - - The configuration files mentioned above have simple format: each line - in them must contain one unique directory name. Those names are added - to the corresponding path in their order of appearance in the file. The - names can be either absolute or relative, in the latter case, they are - relative to where theses files are located. - - "ada_source_path" and "ada_object_path" might actually not be present - in a GNAT installation, in which case, GNAT will look for its run-time - library in the directories "adainclude" for the sources and "adalib" - for the objects and ALI files. When the files exist, the compiler does - not look in "adainclude" and "adalib" at all, and thus the - "ada_source_path" file must contain the location for the GNAT run-time - sources (which can simply be "adainclude"). In the same way, the - "ada_object_path" file must contain the location for the GNAT run-time - objects (which can simply be "adalib"). - - You can also specify a new default path to the runtime library at - compilation time with the switch "-RTS=RTS-PATH". You can easily choose - and change the runtime you want your program to be compiled with. This - switch is recognized by gcc, gnatmake, gnatbind, gnatls, gnatfind and - gnatxref. - - It is possible to install a library before or after the standard GNAT - library, by reordering the lines in the configuration files. In - general, a library must be installed before the GNAT library if it - redefines any part of it. - -  - File: gnat_ug_unx.info, Node: Using an Ada Library, Next: Creating an Ada Library to be Used in a Non-Ada Context, Prev: Installing an Ada Library, Up: GNAT and Libraries - - Using an Ada Library - ==================== - - In order to use a Ada library, you need to make sure that this library - is on both your source and object path *Note Search Paths and the - Run-Time Library (RTL):: and *Note Search Paths for gnatbind::. For - instance, you can use the library "mylib" installed in "/dir/my_lib_src" - and "/dir/my_lib_obj" with the following commands: - - $ gnatmake -aI/dir/my_lib_src -aO/dir/my_lib_obj my_appl \ - -largs -lmy_lib - - This can be simplified down to the following: - $ gnatmake my_appl - when the following conditions are met: - * "/dir/my_lib_src" has been added by the user to the environment - variable "ADA_INCLUDE_PATH", or by the administrator to the file - "ada_source_path" - - * "/dir/my_lib_obj" has been added by the user to the environment - variable "ADA_OBJECTS_PATH", or by the administrator to the file - "ada_object_path" - - * a pragma linker_options, as mentioned in *Note Creating an Ada - Library:: as been added to the sources. - -  - File: gnat_ug_unx.info, Node: Creating an Ada Library to be Used in a Non-Ada Context, Next: Rebuilding the GNAT Run-Time Library, Prev: Using an Ada Library, Up: GNAT and Libraries - - Creating an Ada Library to be Used in a Non-Ada Context - ======================================================= - - The previous sections detailed how to create and install a library that - was usable from an Ada main program. Using this library in a non-Ada - context is not possible, because the elaboration of the library is - automatically done as part of the main program elaboration. - - GNAT also provides the ability to build libraries that can be used - both in an Ada and non-Ada context. This section describes how to - build such a library, and then how to use it from a C program. The - method for interfacing with the library from other languages such as - Fortran for instance remains the same. - - Creating the Library - -------------------- - - * Identify the units representing the interface of the library. - - Here is an example of simple library interface: - - package Interface is - - procedure Do_Something; - - procedure Do_Something_Else; - - end Interface; - - * Use `pragma Export' or `pragma Convention' for the exported - entities. - - Our package `Interface' is then updated as follow: - package Interface is - - procedure Do_Something; - pragma Export (C, Do_Something, "do_something"); - - procedure Do_Something_Else; - pragma Export (C, Do_Something_Else, "do_something_else"); - - end Interface; - - * Compile all the units composing the library. - - * Bind the library objects. - - This step is performed by invoking gnatbind with the `-L' - switch. `gnatbind' will then generate the library elaboration - procedure (named `init') and the run-time finalization - procedure (named `final'). - - # generate the binder file in Ada - $ gnatbind -Lmylib interface - - # generate the binder file in C - $ gnatbind -C -Lmylib interface - - * Compile the files generated by the binder - - $ gcc -c b~interface.adb - - * Create the library; - - The procedure is identical to the procedure explained in *Note - Creating an Ada Library::, except that `b~interface.o' needs to be - added to the list of objects. - - # create an archive file - $ ar cr libmylib.a b~interface.o - - # create a shared library - $ gcc -shared -o libmylib.so b~interface.o - - * Provide a "foreign" view of the library interface; - - The example below shows the content of `mylib_interface.h' (note - that there is no rule for the naming of this file, any name can be - used) - /* the library elaboration procedure */ - extern void mylibinit (void); - - /* the library finalization procedure */ - extern void mylibfinal (void); - - /* the interface exported by the library */ - extern void do_something (void); - extern void do_something_else (void); - - Using the Library - ----------------- - - Libraries built as explained above can be used from any program, - provided that the elaboration procedures (named `mylibinit' in the - previous example) are called before the library services are used. Any - number of libraries can be used simultaneously, as long as the - elaboration procedure of each library is called. - - Below is an example of C program that uses our `mylib' library. - - #include "mylib_interface.h" - - int - main (void) - { - /* First, elaborate the library before using it */ - mylibinit (); - - /* Main program, using the library exported entities */ - do_something (); - do_something_else (); - - /* Library finalization at the end of the program */ - mylibfinal (); - return 0; - } - - Note that this same library can be used from an equivalent Ada main - program. In addition, if the libraries are installed as detailed in - *Note Installing an Ada Library::, it is not necessary to invoke the - library elaboration and finalization routines. The binder will ensure - that this is done as part of the main program elaboration and - finalization phases. - - The Finalization Phase - ---------------------- - - Invoking any library finalization procedure generated by `gnatbind' - shuts down the Ada run time permanently. Consequently, the finalization - of all Ada libraries must be performed at the end of the program. No - call to these libraries nor the Ada run time should be made past the - finalization phase. - - Restrictions in Libraries - ------------------------- - - The pragmas listed below should be used with caution inside libraries, - as they can create incompatibilities with other Ada libraries: - * pragma `Locking_Policy' - - * pragma `Queuing_Policy' - - * pragma `Task_Dispatching_Policy' - - * pragma `Unreserve_All_Interrupts' - When using a library that contains such pragmas, the user must make - sure that all libraries use the same pragmas with the same values. - Otherwise, a `Program_Error' will be raised during the elaboration of - the conflicting libraries. The usage of these pragmas and its - consequences for the user should therefore be well documented. - - Similarly, the traceback in exception occurrences mechanism should be - enabled or disabled in a consistent manner across all libraries. - Otherwise, a Program_Error will be raised during the elaboration of the - conflicting libraries. - - If the `'Version' and `'Body_Version' attributes are used inside a - library, then it is necessary to perform a `gnatbind' step that - mentions all ali files in all libraries, so that version identifiers - can be properly computed. In practice these attributes are rarely - used, so this is unlikely to be a consideration. - -  - File: gnat_ug_unx.info, Node: Rebuilding the GNAT Run-Time Library, Prev: Creating an Ada Library to be Used in a Non-Ada Context, Up: GNAT and Libraries - - Rebuilding the GNAT Run-Time Library - ==================================== - - It may be useful to recompile the GNAT library in various contexts, the - most important one being the use of partition-wide configuration pragmas - such as Normalize_Scalar. A special Makefile called `Makefile.adalib' - is provided to that effect and can be found in the directory containing - the GNAT library. The location of this directory depends on the way the - GNAT environment has been installed and can be determined by means of - the command: - - $ gnatls -v - - The last entry in the object search path usually contains the gnat - library. This Makefile contains its own documentation and in particular - the set of instructions needed to rebuild a new library and to use it. - -  - File: gnat_ug_unx.info, Node: Using the GNU make Utility, Next: Finding Memory Problems with gnatmem, Prev: GNAT and Libraries, Up: Top - - Using the GNU `make' Utility - **************************** - - This chapter offers some examples of makefiles that solve specific - problems. It does not explain how to write a makefile (see the GNU make - documentation), nor does it try to replace the `gnatmake' utility - (*note The GNAT Make Program gnatmake::). - - All the examples in this section are specific to the GNU version of - make. Although `make' is a standard utility, and the basic language is - the same, these examples use some advanced features found only in `GNU - make'. - - * Menu: - - * Using gnatmake in a Makefile:: - * Automatically Creating a List of Directories:: - * Generating the Command Line Switches:: - * Overcoming Command Line Length Limits:: - -  - File: gnat_ug_unx.info, Node: Using gnatmake in a Makefile, Next: Automatically Creating a List of Directories, Up: Using the GNU make Utility - - Using gnatmake in a Makefile - ============================ - - Complex project organizations can be handled in a very powerful way by - using GNU make combined with gnatmake. For instance, here is a Makefile - which allows you to build each subsystem of a big project into a - separate shared library. Such a makefile allows you to significantly - reduce the link time of very big applications while maintaining full - coherence at each step of the build process. - - The list of dependencies are handled automatically by `gnatmake'. - The Makefile is simply used to call gnatmake in each of the appropriate - directories. - - Note that you should also read the example on how to automatically - create the list of directories (*note Automatically Creating a List of - Directories::) which might help you in case your project has a lot of - subdirectories. - - ## This Makefile is intended to be used with the following directory - ## configuration: - ## - The sources are split into a series of csc (computer software components) - ## Each of these csc is put in its own directory. - ## Their name are referenced by the directory names. - ## They will be compiled into shared library (although this would also work - ## with static libraries - ## - The main program (and possibly other packages that do not belong to any - ## csc is put in the top level directory (where the Makefile is). - ## toplevel_dir __ first_csc (sources) __ lib (will contain the library) - ## \_ second_csc (sources) __ lib (will contain the library) - ## \_ ... - ## Although this Makefile is build for shared library, it is easy to modify - ## to build partial link objects instead (modify the lines with -shared and - ## gnatlink below) - ## - ## With this makefile, you can change any file in the system or add any new - ## file, and everything will be recompiled correctly (only the relevant shared - ## objects will be recompiled, and the main program will be re-linked). - - # The list of computer software component for your project. This might be - # generated automatically. - CSC_LIST=aa bb cc - - # Name of the main program (no extension) - MAIN=main - - # If we need to build objects with -fPIC, uncomment the following line - #NEED_FPIC=-fPIC - - # The following variable should give the directory containing libgnat.so - # You can get this directory through 'gnatls -v'. This is usually the last - # directory in the Object_Path. - GLIB=... - - # The directories for the libraries - # (This macro expands the list of CSC to the list of shared libraries, you - # could simply use the expanded form : - # LIB_DIR=aa/lib/libaa.so bb/lib/libbb.so cc/lib/libcc.so - LIB_DIR=${foreach dir,${CSC_LIST},${dir}/lib/lib${dir}.so} - - ${MAIN}: objects ${LIB_DIR} - gnatbind ${MAIN} ${CSC_LIST:%=-aO%/lib} -shared - gnatlink ${MAIN} ${CSC_LIST:%=-l%} - - objects:: - # recompile the sources - gnatmake -c -i ${MAIN}.adb ${NEED_FPIC} ${CSC_LIST:%=-I%} - - # Note: In a future version of GNAT, the following commands will be simplified - # by a new tool, gnatmlib - ${LIB_DIR}: - mkdir -p ${dir $@ } - cd ${dir $@ }; gcc -shared -o ${notdir $@ } ../*.o -L${GLIB} -lgnat - cd ${dir $@ }; cp -f ../*.ali . - - # The dependencies for the modules - # Note that we have to force the expansion of *.o, since in some cases make won't - # be able to do it itself. - aa/lib/libaa.so: ${wildcard aa/*.o} - bb/lib/libbb.so: ${wildcard bb/*.o} - cc/lib/libcc.so: ${wildcard cc/*.o} - - # Make sure all of the shared libraries are in the path before starting the - # program - run:: - LD_LIBRARY_PATH=`pwd`/aa/lib:`pwd`/bb/lib:`pwd`/cc/lib ./${MAIN} - - clean:: - ${RM} -rf ${CSC_LIST:%=%/lib} - ${RM} ${CSC_LIST:%=%/*.ali} - ${RM} ${CSC_LIST:%=%/*.o} - ${RM} *.o *.ali ${MAIN} - -  - File: gnat_ug_unx.info, Node: Automatically Creating a List of Directories, Next: Generating the Command Line Switches, Prev: Using gnatmake in a Makefile, Up: Using the GNU make Utility - - Automatically Creating a List of Directories - ============================================ - - In most makefiles, you will have to specify a list of directories, and - store it in a variable. For small projects, it is often easier to - specify each of them by hand, since you then have full control over what - is the proper order for these directories, which ones should be - included... - - However, in larger projects, which might involve hundreds of - subdirectories, it might be more convenient to generate this list - automatically. - - The example below presents two methods. The first one, although less - general, gives you more control over the list. It involves wildcard - characters, that are automatically expanded by `make'. Its shortcoming - is that you need to explicitly specify some of the organization of your - project, such as for instance the directory tree depth, whether some - directories are found in a separate tree,... - - The second method is the most general one. It requires an external - program, called `find', which is standard on all Unix systems. All the - directories found under a given root directory will be added to the - list. - - # The examples below are based on the following directory hierarchy: - # All the directories can contain any number of files - # ROOT_DIRECTORY -> a -> aa -> aaa - # -> ab - # -> ac - # -> b -> ba -> baa - # -> bb - # -> bc - # This Makefile creates a variable called DIRS, that can be reused any time - # you need this list (see the other examples in this section) - - # The root of your project's directory hierarchy - ROOT_DIRECTORY=. - - #### - # First method: specify explicitly the list of directories - # This allows you to specify any subset of all the directories you need. - #### - - DIRS := a/aa/ a/ab/ b/ba/ - - #### - # Second method: use wildcards - # Note that the argument(s) to wildcard below should end with a '/'. - # Since wildcards also return file names, we have to filter them out - # to avoid duplicate directory names. - # We thus use make's `dir' and `sort' functions. - # It sets DIRs to the following value (note that the directories aaa and baa - # are not given, unless you change the arguments to wildcard). - # DIRS= ./a/a/ ./b/ ./a/aa/ ./a/ab/ ./a/ac/ ./b/ba/ ./b/bb/ ./b/bc/ - #### - - DIRS := ${sort ${dir ${wildcard ${ROOT_DIRECTORY}/*/ ${ROOT_DIRECTORY}/*/*/}}} - - #### - # Third method: use an external program - # This command is much faster if run on local disks, avoiding NFS slowdowns. - # This is the most complete command: it sets DIRs to the following value: - # DIRS= ./a ./a/aa ./a/aa/aaa ./a/ab ./a/ac ./b ./b/ba ./b/ba/baa ./b/bb ./b/bc - #### - - DIRS := ${shell find ${ROOT_DIRECTORY} -type d -print} - -  - File: gnat_ug_unx.info, Node: Generating the Command Line Switches, Next: Overcoming Command Line Length Limits, Prev: Automatically Creating a List of Directories, Up: Using the GNU make Utility - - Generating the Command Line Switches - ==================================== - - Once you have created the list of directories as explained in the - previous section (*note Automatically Creating a List of Directories::), - you can easily generate the command line arguments to pass to gnatmake. - - For the sake of completeness, this example assumes that the source - path is not the same as the object path, and that you have two separate - lists of directories. - - # see "Automatically creating a list of directories" to create - # these variables - SOURCE_DIRS= - OBJECT_DIRS= - - GNATMAKE_SWITCHES := ${patsubst %,-aI%,${SOURCE_DIRS}} - GNATMAKE_SWITCHES += ${patsubst %,-aO%,${OBJECT_DIRS}} - - all: - gnatmake ${GNATMAKE_SWITCHES} main_unit - -  - File: gnat_ug_unx.info, Node: Overcoming Command Line Length Limits, Prev: Generating the Command Line Switches, Up: Using the GNU make Utility - - Overcoming Command Line Length Limits - ===================================== - - One problem that might be encountered on big projects is that many - operating systems limit the length of the command line. It is thus hard - to give gnatmake the list of source and object directories. - - This example shows how you can set up environment variables, which - will make `gnatmake' behave exactly as if the directories had been - specified on the command line, but have a much higher length limit (or - even none on most systems). - - It assumes that you have created a list of directories in your - Makefile, using one of the methods presented in *Note Automatically - Creating a List of Directories::. For the sake of completeness, we - assume that the object path (where the ALI files are found) is - different from the sources patch. - - Note a small trick in the Makefile below: for efficiency reasons, we - create two temporary variables (SOURCE_LIST and OBJECT_LIST), that are - expanded immediately by `make'. This way we overcome the standard make - behavior which is to expand the variables only when they are actually - used. - - # In this example, we create both ADA_INCLUDE_PATH and ADA_OBJECT_PATH. - # This is the same thing as putting the -I arguments on the command line. - # (the equivalent of using -aI on the command line would be to define - # only ADA_INCLUDE_PATH, the equivalent of -aO is ADA_OBJECT_PATH). - # You can of course have different values for these variables. - # - # Note also that we need to keep the previous values of these variables, since - # they might have been set before running 'make' to specify where the GNAT - # library is installed. - - # see "Automatically creating a list of directories" to create these - # variables - SOURCE_DIRS= - OBJECT_DIRS= - - empty:= - space:=${empty} ${empty} - SOURCE_LIST := ${subst ${space},:,${SOURCE_DIRS}} - OBJECT_LIST := ${subst ${space},:,${OBJECT_DIRS}} - ADA_INCLUDE_PATH += ${SOURCE_LIST} - ADA_OBJECT_PATH += ${OBJECT_LIST} - export ADA_INCLUDE_PATH - export ADA_OBJECT_PATH - - all: - gnatmake main_unit - -  - File: gnat_ug_unx.info, Node: Finding Memory Problems with gnatmem, Next: Finding Memory Problems with GNAT Debug Pool, Prev: Using the GNU make Utility, Up: Top - - Finding Memory Problems with `gnatmem' - ************************************** - - `gnatmem', is a tool that monitors dynamic allocation and deallocation - activity in a program, and displays information about incorrect - deallocations and possible sources of memory leaks. Gnatmem provides - three type of information: - * General information concerning memory management, such as the total - number of allocations and deallocations, the amount of allocated - memory and the high water mark, i.e. the largest amount of - allocated memory in the course of program execution. - - * Backtraces for all incorrect deallocations, that is to say - deallocations which do not correspond to a valid allocation. - - * Information on each allocation that is potentially the origin of a - memory leak. - - The `gnatmem' command has two modes. It can be used with `gdb' or - with instrumented allocation and deallocation routines. The later mode - is called the `GMEM' mode. Both modes produce the very same output. - - * Menu: - - * Running gnatmem (GDB Mode):: - * Running gnatmem (GMEM Mode):: - * Switches for gnatmem:: - * Examples of gnatmem Usage:: - * GDB and GMEM Modes:: - * Implementation Note:: - -  - File: gnat_ug_unx.info, Node: Running gnatmem (GDB Mode), Next: Running gnatmem (GMEM Mode), Up: Finding Memory Problems with gnatmem - - Running `gnatmem' (GDB Mode) - ============================ - - The `gnatmem' command has the form - - $ gnatmem [-q] [n] [-o file] user_program [program_arg]* - or - $ gnatmem [-q] [n] -i file - - Gnatmem must be supplied with the executable to examine, followed by its - run-time inputs. For example, if a program is executed with the command: - $ my_program arg1 arg2 - then it can be run under `gnatmem' control using the command: - $ gnatmem my_program arg1 arg2 - - The program is transparently executed under the control of the - debugger *Note The GNAT Debugger GDB::. This does not affect the - behavior of the program, except for sensitive real-time programs. When - the program has completed execution, `gnatmem' outputs a report - containing general allocation/deallocation information and potential - memory leak. For better results, the user program should be compiled - with debugging options *Note Switches for gcc::. - - Here is a simple example of use: - - *************** debut cc - $ gnatmem test_gm - - Global information - ------------------ - Total number of allocations : 45 - Total number of deallocations : 6 - Final Water Mark (non freed mem) : 11.29 Kilobytes - High Water Mark : 11.40 Kilobytes - - . - . - . - Allocation Root # 2 - ------------------- - Number of non freed allocations : 11 - Final Water Mark (non freed mem) : 1.16 Kilobytes - High Water Mark : 1.27 Kilobytes - Backtrace : - test_gm.adb:23 test_gm.alloc - . - . - . - - The first block of output give general information. In this case, the - Ada construct "new" was executed 45 times, and only 6 calls to an - unchecked deallocation routine occurred. - - Subsequent paragraphs display information on all allocation roots. - An allocation root is a specific point in the execution of the program - that generates some dynamic allocation, such as a "new" construct. This - root is represented by an execution backtrace (or subprogram call - stack). By default the backtrace depth for allocations roots is 1, so - that a root corresponds exactly to a source location. The backtrace can - be made deeper, to make the root more specific. - -  - File: gnat_ug_unx.info, Node: Running gnatmem (GMEM Mode), Next: Switches for gnatmem, Prev: Running gnatmem (GDB Mode), Up: Finding Memory Problems with gnatmem - - Running `gnatmem' (GMEM Mode) - ============================= - - The `gnatmem' command has the form - - $ gnatmem [-q] [n] -i gmem.out user_program [program_arg]* - - The program must have been linked with the instrumented version of - the allocation and deallocation routines. This is done with linking - with the `libgmem.a' library. For better results, the user program - should be compiled with debugging options *Note Switches for gcc::. For - example to build `my_program': - - $ gnatmake -g my_program -largs -lgmem - - When running `my_program' the file `gmem.out' is produced. This file - contains information about all allocations and deallocations done by the - program. It is produced by the instrumented allocations and - deallocations routines and will be used by `gnatmem'. - - Gnatmem must be supplied with the `gmem.out' file and the executable to - examine followed by its run-time inputs. For example, if a program is - executed with the command: - $ my_program arg1 arg2 - then `gmem.out' can be analysed by `gnatmem' using the command: - $ gnatmem -i gmem.out my_program arg1 arg2 - -  - File: gnat_ug_unx.info, Node: Switches for gnatmem, Next: Examples of gnatmem Usage, Prev: Running gnatmem (GMEM Mode), Up: Finding Memory Problems with gnatmem - - Switches for `gnatmem' - ====================== - - `gnatmem' recognizes the following switches: - - ``-q'' - Quiet. Gives the minimum output needed to identify the origin of - the memory leaks. Omit statistical information. - - ``n'' - N is an integer literal (usually between 1 and 10) which controls - the depth of the backtraces defining allocation root. The default - value for N is 1. The deeper the backtrace, the more precise the - localization of the root. Note that the total number of roots can - depend on this parameter. - - ``-o file'' - Direct the gdb output to the specified file. The `gdb' script used - to generate this output is also saved in the file `gnatmem.tmp'. - - ``-i file'' - Do the `gnatmem' processing starting from `file' which has been - generated by a previous call to `gnatmem' with the -o switch or - `gmem.out' produced by `GMEM' mode. This is useful for post mortem - processing. - -  - File: gnat_ug_unx.info, Node: Examples of gnatmem Usage, Next: GDB and GMEM Modes, Prev: Switches for gnatmem, Up: Finding Memory Problems with gnatmem - - Example of `gnatmem' Usage - ========================== - - This section is based on the `GDB' mode of `gnatmem'. The same results - can be achieved using `GMEM' mode. See section *Note Running gnatmem - (GMEM Mode)::. - - The first example shows the use of `gnatmem' on a simple leaking - program. Suppose that we have the following Ada program: - - with Unchecked_Deallocation; - procedure Test_Gm is - - type T is array (1..1000) of Integer; - type Ptr is access T; - procedure Free is new Unchecked_Deallocation (T, Ptr); - A : Ptr; - - procedure My_Alloc is - begin - A := new T; - end My_Alloc; - - procedure My_DeAlloc is - B : Ptr := A; - begin - Free (B); - end My_DeAlloc; - - begin - My_Alloc; - for I in 1 .. 5 loop - for J in I .. 5 loop - My_Alloc; - end loop; - My_Dealloc; - end loop; - end; - - The program needs to be compiled with debugging option: - - $ gnatmake -g test_gm - - `gnatmem' is invoked simply with - $ gnatmem test_gm - - which produces the following output: - - Global information - ------------------ - Total number of allocations : 18 - Total number of deallocations : 5 - Final Water Mark (non freed mem) : 53.00 Kilobytes - High Water Mark : 56.90 Kilobytes - - Allocation Root # 1 - ------------------- - Number of non freed allocations : 11 - Final Water Mark (non freed mem) : 42.97 Kilobytes - High Water Mark : 46.88 Kilobytes - Backtrace : - test_gm.adb:11 test_gm.my_alloc - - Allocation Root # 2 - ------------------- - Number of non freed allocations : 1 - Final Water Mark (non freed mem) : 10.02 Kilobytes - High Water Mark : 10.02 Kilobytes - Backtrace : - s-secsta.adb:81 system.secondary_stack.ss_init - - Allocation Root # 3 - ------------------- - Number of non freed allocations : 1 - Final Water Mark (non freed mem) : 12 Bytes - High Water Mark : 12 Bytes - Backtrace : - s-secsta.adb:181 system.secondary_stack.ss_init - - Note that the GNAT run time contains itself a certain number of - allocations that have no corresponding deallocation, as shown here for - root #2 and root #1. This is a normal behavior when the number of non - freed allocations is one, it locates dynamic data structures that the - run time needs for the complete lifetime of the program. Note also that - there is only one allocation root in the user program with a single - line back trace: test_gm.adb:11 test_gm.my_alloc, whereas a careful - analysis of the program shows that 'My_Alloc' is called at 2 different - points in the source (line 21 and line 24). If those two allocation - roots need to be distinguished, the backtrace depth parameter can be - used: - - $ gnatmem 3 test_gm - - which will give the following output: - - Global information - ------------------ - Total number of allocations : 18 - Total number of deallocations : 5 - Final Water Mark (non freed mem) : 53.00 Kilobytes - High Water Mark : 56.90 Kilobytes - - Allocation Root # 1 - ------------------- - Number of non freed allocations : 10 - Final Water Mark (non freed mem) : 39.06 Kilobytes - High Water Mark : 42.97 Kilobytes - Backtrace : - test_gm.adb:11 test_gm.my_alloc - test_gm.adb:24 test_gm - b_test_gm.c:52 main - - Allocation Root # 2 - ------------------- - Number of non freed allocations : 1 - Final Water Mark (non freed mem) : 10.02 Kilobytes - High Water Mark : 10.02 Kilobytes - Backtrace : - s-secsta.adb:81 system.secondary_stack.ss_init - s-secsta.adb:283 - b_test_gm.c:33 adainit - - Allocation Root # 3 - ------------------- - Number of non freed allocations : 1 - Final Water Mark (non freed mem) : 3.91 Kilobytes - High Water Mark : 3.91 Kilobytes - Backtrace : - test_gm.adb:11 test_gm.my_alloc - test_gm.adb:21 test_gm - b_test_gm.c:52 main - - Allocation Root # 4 - ------------------- - Number of non freed allocations : 1 - Final Water Mark (non freed mem) : 12 Bytes - High Water Mark : 12 Bytes - Backtrace : - s-secsta.adb:181 system.secondary_stack.ss_init - s-secsta.adb:283 - b_test_gm.c:33 adainit - - The allocation root #1 of the first example has been split in 2 roots #1 - and #3 thanks to the more precise associated backtrace. - -  - File: gnat_ug_unx.info, Node: GDB and GMEM Modes, Next: Implementation Note, Prev: Examples of gnatmem Usage, Up: Finding Memory Problems with gnatmem - - GDB and GMEM Modes - ================== - - The main advantage of the `GMEM' mode is that it is a lot faster than - the `GDB' mode where the application must be monitored by a `GDB' - script. But the `GMEM' mode is available only for DEC Unix, Linux x86, - Solaris (sparc and x86) and Windows 95/98/NT/2000 (x86). - - The main advantage of the `GDB' mode is that it is available on all - supported platforms. But it can be very slow if the application does a - lot of allocations and deallocations. - -  - File: gnat_ug_unx.info, Node: Implementation Note, Prev: GDB and GMEM Modes, Up: Finding Memory Problems with gnatmem - - Implementation Note - =================== - - * Menu: - - * gnatmem Using GDB Mode:: - * gnatmem Using GMEM Mode:: - -  - File: gnat_ug_unx.info, Node: gnatmem Using GDB Mode, Next: gnatmem Using GMEM Mode, Up: Implementation Note - - `gnatmem' Using `GDB' Mode - -------------------------- - - `gnatmem' executes the user program under the control of `GDB' using a - script that sets breakpoints and gathers information on each dynamic - allocation and deallocation. The output of the script is then analyzed - by `gnatmem' in order to locate memory leaks and their origin in the - program. Gnatmem works by recording each address returned by the - allocation procedure (`__gnat_malloc') along with the backtrace at the - allocation point. On each deallocation, the deallocated address is - matched with the corresponding allocation. At the end of the processing, - the unmatched allocations are considered potential leaks. All the - allocations associated with the same backtrace are grouped together and - form an allocation root. The allocation roots are then sorted so that - those with the biggest number of unmatched allocation are printed - first. A delicate aspect of this technique is to distinguish between the - data produced by the user program and the data produced by the gdb - script. Currently, on systems that allow probing the terminal, the gdb - command "tty" is used to force the program output to be redirected to - the current terminal while the `gdb' output is directed to a file or to - a pipe in order to be processed subsequently by `gnatmem'. - -  - File: gnat_ug_unx.info, Node: gnatmem Using GMEM Mode, Prev: gnatmem Using GDB Mode, Up: Implementation Note - - `gnatmem' Using `GMEM' Mode - --------------------------- - - This mode use the same algorithm to detect memory leak as the `GDB' - mode of `gnatmem', the only difference is in the way data are gathered. - In `GMEM' mode the program is linked with instrumented version of - `__gnat_malloc' and `__gnat_free' routines. Information needed to find - memory leak are recorded by these routines in file `gmem.out'. This - mode also require that the stack traceback be available, this is only - implemented on some platforms *Note GDB and GMEM Modes::. - -  - File: gnat_ug_unx.info, Node: Finding Memory Problems with GNAT Debug Pool, Next: Creating Sample Bodies Using gnatstub, Prev: Finding Memory Problems with gnatmem, Up: Top - - Finding Memory Problems with GNAT Debug Pool - ******************************************** - - The use of unchecked deallocation and unchecked conversion can easily - lead to incorrect memory references. The problems generated by such - references are usually difficult to tackle because the symptoms can be - very remote from the origin of the problem. In such cases, it is very - helpful to detect the problem as early as possible. This is the purpose - of the Storage Pool provided by `GNAT.Debug_Pools'. - - In order to use the GNAT specific debugging pool, the user must - associate a debug pool object with each of the access types that may be - related to suspected memory problems. See Ada Reference Manual 13.11. - type Ptr is access Some_Type; - Pool : GNAT.Debug_Pools.Debug_Pool; - for Ptr'Storage_Pool use Pool; - - `GNAT.Debug_Pools' is derived from of a GNAT-specific kind of pool: - the Checked_Pool. Such pools, like standard Ada storage pools, allow - the user to redefine allocation and deallocation strategies. They also - provide a checkpoint for each dereference, through the use of the - primitive operation `Dereference' which is implicitly called at each - dereference of an access value. - - Once an access type has been associated with a debug pool, - operations on values of the type may raise four distinct exceptions, - which correspond to four potential kinds of memory corruption: - * `GNAT.Debug_Pools.Accessing_Not_Allocated_Storage' - - * `GNAT.Debug_Pools.Accessing_Deallocated_Storage' - - * `GNAT.Debug_Pools.Freeing_Not_Allocated_Storage' - - * `GNAT.Debug_Pools.Freeing_Deallocated_Storage ' - - For types associated with a Debug_Pool, dynamic allocation is performed - using the standard GNAT allocation routine. References to all allocated - chunks of memory are kept in an internal dictionary. The deallocation - strategy consists in not releasing the memory to the underlying system - but rather to fill it with a memory pattern easily recognizable during - debugging sessions: The memory pattern is the old IBM hexadecimal - convention: 16#DEADBEEF#. Upon each dereference, a check is made that - the access value denotes a properly allocated memory location. Here is - a complete example of use of `Debug_Pools', that includes typical - instances of memory corruption: - with Gnat.Io; use Gnat.Io; - with Unchecked_Deallocation; - with Unchecked_Conversion; - with GNAT.Debug_Pools; - with System.Storage_Elements; - with Ada.Exceptions; use Ada.Exceptions; - procedure Debug_Pool_Test is - - type T is access Integer; - type U is access all T; - - P : GNAT.Debug_Pools.Debug_Pool; - for T'Storage_Pool use P; - - procedure Free is new Unchecked_Deallocation (Integer, T); - function UC is new Unchecked_Conversion (U, T); - A, B : aliased T; - - procedure Info is new GNAT.Debug_Pools.Print_Info(Put_Line); - - begin - Info (P); - A := new Integer; - B := new Integer; - B := A; - Info (P); - Free (A); - begin - Put_Line (Integer'Image(B.all)); - exception - when E : others => Put_Line ("raised: " & Exception_Name (E)); - end; - begin - Free (B); - exception - when E : others => Put_Line ("raised: " & Exception_Name (E)); - end; - B := UC(A'Access); - begin - Put_Line (Integer'Image(B.all)); - exception - when E : others => Put_Line ("raised: " & Exception_Name (E)); - end; - begin - Free (B); - exception - when E : others => Put_Line ("raised: " & Exception_Name (E)); - end; - Info (P); - end Debug_Pool_Test; - - The debug pool mechanism provides the following precise diagnostics on - the execution of this erroneous program: - Debug Pool info: - Total allocated bytes : 0 - Total deallocated bytes : 0 - Current Water Mark: 0 - High Water Mark: 0 - - Debug Pool info: - Total allocated bytes : 8 - Total deallocated bytes : 0 - Current Water Mark: 8 - High Water Mark: 8 - - raised: GNAT.DEBUG_POOLS.ACCESSING_DEALLOCATED_STORAGE - raised: GNAT.DEBUG_POOLS.FREEING_DEALLOCATED_STORAGE - raised: GNAT.DEBUG_POOLS.ACCESSING_NOT_ALLOCATED_STORAGE - raised: GNAT.DEBUG_POOLS.FREEING_NOT_ALLOCATED_STORAGE - Debug Pool info: - Total allocated bytes : 8 - Total deallocated bytes : 4 - Current Water Mark: 4 - High Water Mark: 8 - -  - File: gnat_ug_unx.info, Node: Creating Sample Bodies Using gnatstub, Next: Reducing the Size of Ada Executables with gnatelim, Prev: Finding Memory Problems with GNAT Debug Pool, Up: Top - - Creating Sample Bodies Using `gnatstub' - *************************************** - - `gnatstub' creates body stubs, that is, empty but compilable bodies for - library unit declarations. - - To create a body stub, `gnatstub' has to compile the library unit - declaration. Therefore, bodies can be created only for legal library - units. Moreover, if a library unit depends semantically upon units - located outside the current directory, you have to provide the source - search path when calling `gnatstub', see the description of `gnatstub' - switches below. - - * Menu: - - * Running gnatstub:: - * Switches for gnatstub:: - -  - File: gnat_ug_unx.info, Node: Running gnatstub, Next: Switches for gnatstub, Up: Creating Sample Bodies Using gnatstub - - Running `gnatstub' - ================== - - `gnatstub' has the command-line interface of the form - - $ gnatstub [switches] filename [directory] - - where - `filename' - is the name of the source file that contains a library unit - declaration for which a body must be created. This name should - follow the GNAT file name conventions. No crunching is allowed for - this file name. The file name may contain the path information. - - `directory' - indicates the directory to place a body stub (default is the - current directory) - - `switches' - is an optional sequence of switches as described in the next - section - -  - File: gnat_ug_unx.info, Node: Switches for gnatstub, Prev: Running gnatstub, Up: Creating Sample Bodies Using gnatstub - - Switches for `gnatstub' - ======================= - - `-f' - If the destination directory already contains a file with a name - of the body file for the argument spec file, replace it with the - generated body stub. - - `-hs' - Put the comment header (i.e. all the comments preceding the - compilation unit) from the source of the library unit declaration - into the body stub. - - `-hg' - Put a sample comment header into the body stub. - - `-IDIR' - `-I-' - These switches have the same meaning as in calls to gcc. They - define the source search path in the call to gcc issued by - `gnatstub' to compile an argument source file. - - `-iN' - (N is a decimal natural number). Set the indentation level in the - generated body sample to n, '-i0' means "no indentation", the - default indentation is 3. - - `-k' - Do not remove the tree file (i.e. the snapshot of the compiler - internal structures used by `gnatstub') after creating the body - stub. - - `-lN' - (N is a decimal positive number) Set the maximum line length in the - body stub to n, the default is 78. - - `-q' - Quiet mode: do not generate a confirmation when a body is - successfully created or a message when a body is not required for - an argument unit. - - `-r' - Reuse the tree file (if it exists) instead of creating it: instead - of creating the tree file for the library unit declaration, - gnatstub tries to find it in the current directory and use it for - creating a body. If the tree file is not found, no body is - created. `-r' also implies `-k', whether or not `-k' is set - explicitly. - - `-t' - Overwrite the existing tree file: if the current directory already - contains the file which, according to the GNAT file name rules - should be considered as a tree file for the argument source file, - gnatstub will refuse to create the tree file needed to create a - body sampler, unless `-t' option is set - - `-v' - Verbose mode: generate version information. - -  - File: gnat_ug_unx.info, Node: Reducing the Size of Ada Executables with gnatelim, Next: Other Utility Programs, Prev: Creating Sample Bodies Using gnatstub, Up: Top - - Reducing the Size of Ada Executables with `gnatelim' - **************************************************** - - * Menu: - - * About gnatelim:: - * Eliminate Pragma:: - * Tree Files:: - * Preparing Tree and Bind Files for gnatelim:: - * Running gnatelim:: - * Correcting the List of Eliminate Pragmas:: - * Making Your Executables Smaller:: - * Summary of the gnatelim Usage Cycle:: - -  - File: gnat_ug_unx.info, Node: About gnatelim, Next: Eliminate Pragma, Up: Reducing the Size of Ada Executables with gnatelim - - About `gnatelim' - ================ - - When a program shares a set of Ada packages with other programs, it may - happen that this program uses only a fraction of the subprograms - defined in these packages. The code created for these unused - subprograms increases the size of the executable. - - `gnatelim' tracks unused subprograms in an Ada program and outputs a - list of GNAT-specific `Eliminate' pragmas (see next section) marking - all the subprograms that are declared but never called. By placing the - list of `Eliminate' pragmas in the GNAT configuration file `gnat.adc' - and recompiling your program, you may decrease the size of its - executable, because the compiler will not generate the code for - 'eliminated' subprograms. - - `gnatelim' needs as its input data a set of tree files (see *Note - Tree Files::) representing all the components of a program to process - and a bind file for a main subprogram (see *Note Preparing Tree and - Bind Files for gnatelim::). - -  - File: gnat_ug_unx.info, Node: Eliminate Pragma, Next: Tree Files, Prev: About gnatelim, Up: Reducing the Size of Ada Executables with gnatelim - - `Eliminate' Pragma - ================== - - The simplified syntax of the Eliminate pragma used by `gnatelim' is: - - pragma Eliminate (Library_Unit_Name, Subprogram_Name); - - where - `Library_Unit_Name' - full expanded Ada name of a library unit - - `Subprogram_Name' - a simple or expanded name of a subprogram declared within this - compilation unit - - The effect of an `Eliminate' pragma placed in the GNAT configuration - file `gnat.adc' is: - - * If the subprogram `Subprogram_Name' is declared within the library - unit `Library_Unit_Name', the compiler will not generate code for - this subprogram. This applies to all overloaded subprograms denoted - by `Subprogram_Name'. - - * If a subprogram marked by the pragma `Eliminate' is used (called) - in a program, the compiler will produce an error message in the - place where it is called. - -  - File: gnat_ug_unx.info, Node: Tree Files, Next: Preparing Tree and Bind Files for gnatelim, Prev: Eliminate Pragma, Up: Reducing the Size of Ada Executables with gnatelim - - Tree Files - ========== - - A tree file stores a snapshot of the compiler internal data structures - at the very end of a successful compilation. It contains all the - syntactic and semantic information for the compiled unit and all the - units upon which it depends semantically. To use tools that make use - of tree files, you need to first produce the right set of tree files. - - GNAT produces correct tree files when -gnatt -gnatc options are set - in a gcc call. The tree files have an .adt extension. Therefore, to - produce a tree file for the compilation unit contained in a file named - `foo.adb', you must use the command - - $ gcc -c -gnatc -gnatt foo.adb - - and you will get the tree file `foo.adt'. compilation. - -  - File: gnat_ug_unx.info, Node: Preparing Tree and Bind Files for gnatelim, Next: Running gnatelim, Prev: Tree Files, Up: Reducing the Size of Ada Executables with gnatelim - - Preparing Tree and Bind Files for `gnatelim' - ============================================ - - A set of tree files covering the program to be analyzed with `gnatelim' - and the bind file for the main subprogram does not have to be in the - current directory. '-T' gnatelim option may be used to provide the - search path for tree files, and '-b' option may be used to point to the - bind file to process (see *Note Running gnatelim::) - - If you do not have the appropriate set of tree files and the right - bind file, you may create them in the current directory using the - following procedure. - - Let `Main_Prog' be the name of a main subprogram, and suppose this - subprogram is in a file named `main_prog.adb'. - - To create a bind file for `gnatelim', run `gnatbind' for the main - subprogram. `gnatelim' can work with both Ada and C bind files; when - both are present, it uses the Ada bind file. The following commands - will build the program and create the bind file: - - $ gnatmake -c Main_Prog - $ gnatbind main_prog - - To create a minimal set of tree files covering the whole program, call - `gnatmake' for this program as follows: - - $ gnatmake -f -c -gnatc -gnatt Main_Prog - - The `-c' gnatmake option turns off the bind and link steps, that are - useless anyway because the sources are compiled with `-gnatc' option - which turns off code generation. - - The `-f' gnatmake option forces recompilation of all the needed - sources. - - This sequence of actions will create all the data needed by - `gnatelim' from scratch and therefore guarantee its consistency. If you - would like to use some existing set of files as `gnatelim' output, you - must make sure that the set of files is complete and consistent. You - can use the `-m' switch to check if there are missed tree files - - Note, that `gnatelim' needs neither object nor ALI files. - -  - File: gnat_ug_unx.info, Node: Running gnatelim, Next: Correcting the List of Eliminate Pragmas, Prev: Preparing Tree and Bind Files for gnatelim, Up: Reducing the Size of Ada Executables with gnatelim - - Running `gnatelim' - ================== - - `gnatelim' has the following command-line interface: - - $ gnatelim [options] name - - `name' should be a full expanded Ada name of a main subprogram of a - program (partition). - - `gnatelim' options: - - `-q' - Quiet mode: by default `gnatelim' generates to the standard error - stream a trace of the source file names of the compilation units - being processed. This option turns this trace off. - - `-v' - Verbose mode: `gnatelim' version information is printed as Ada - comments to the standard output stream. - - `-a' - Also look for subprograms from the GNAT run time that can be - eliminated. - - `-m' - Check if any tree files are missing for an accurate result. - - `-TDIR' - When looking for tree files also look in directory DIR - - `-bBIND_FILE' - Specifies BIND_FILE as the bind file to process. If not set, the - name of the bind file is computed from the full expanded Ada name - of a main subprogram. - - `-dX' - Activate internal debugging switches. X is a letter or digit, or - string of letters or digits, which specifies the type of debugging - mode desired. Normally these are used only for internal - development or system debugging purposes. You can find full - documentation for these switches in the body of the - `Gnatelim.Options' unit in the compiler source file - `gnatelim-options.adb'. - - `gnatelim' sends its output to the standard output stream, and all the - tracing and debug information is sent to the standard error stream. In - order to produce a proper GNAT configuration file `gnat.adc', - redirection must be used: - - $ gnatelim Main_Prog > gnat.adc - - or - - $ gnatelim Main_Prog >> gnat.adc - - In order to append the `gnatelim' output to the existing contents of - `gnat.adc'. - -  - File: gnat_ug_unx.info, Node: Correcting the List of Eliminate Pragmas, Next: Making Your Executables Smaller, Prev: Running gnatelim, Up: Reducing the Size of Ada Executables with gnatelim - - Correcting the List of Eliminate Pragmas - ======================================== - - In some rare cases it may happen that `gnatelim' will try to eliminate - subprograms which are actually called in the program. In this case, the - compiler will generate an error message of the form: - - file.adb:106:07: cannot call eliminated subprogram "My_Prog" - - You will need to manually remove the wrong `Eliminate' pragmas from the - `gnat.adc' file. It is advised that you recompile your program from - scratch after that because you need a consistent `gnat.adc' file during - the entire compilation. - -  - File: gnat_ug_unx.info, Node: Making Your Executables Smaller, Next: Summary of the gnatelim Usage Cycle, Prev: Correcting the List of Eliminate Pragmas, Up: Reducing the Size of Ada Executables with gnatelim - - Making Your Executables Smaller - =============================== - - In order to get a smaller executable for your program you now have to - recompile the program completely with the new `gnat.adc' file created - by `gnatelim' in your current directory: - - $ gnatmake -f Main_Prog - - (you will need `-f' option for gnatmake to recompile everything with - the set of pragmas `Eliminate' you have obtained with `gnatelim'). - - Be aware that the set of `Eliminate' pragmas is specific to each - program. It is not recommended to merge sets of `Eliminate' pragmas - created for different programs in one `gnat.adc' file. - -  - File: gnat_ug_unx.info, Node: Summary of the gnatelim Usage Cycle, Prev: Making Your Executables Smaller, Up: Reducing the Size of Ada Executables with gnatelim - - Summary of the gnatelim Usage Cycle - =================================== - - Here is a quick summary of the steps to be taken in order to reduce the - size of your executables with `gnatelim'. You may use other GNAT - options to control the optimization level, to produce the debugging - information, to set search path, etc. - - 1. Produce a bind file and a set of tree files - - $ gnatmake -c Main_Prog - $ gnatbind main_prog - $ gnatmake -f -c -gnatc -gnatt Main_Prog - - 2. Generate a list of `Eliminate' pragmas - $ gnatelim Main_Prog >[>] gnat.adc - - 3. Recompile the application - - $ gnatmake -f Main_Prog - - -  - File: gnat_ug_unx.info, Node: Other Utility Programs, Next: Running and Debugging Ada Programs, Prev: Reducing the Size of Ada Executables with gnatelim, Up: Top - - Other Utility Programs - ********************** - - This chapter discusses some other utility programs available in the Ada - environment. - - * Menu: - - * Using Other Utility Programs with GNAT:: - * The gnatpsta Utility Program:: - * The External Symbol Naming Scheme of GNAT:: - * Ada Mode for Glide:: - * Converting Ada Files to html with gnathtml:: - * Installing gnathtml:: - -  - File: gnat_ug_unx.info, Node: Using Other Utility Programs with GNAT, Next: The gnatpsta Utility Program, Up: Other Utility Programs - - Using Other Utility Programs with GNAT - ====================================== - - The object files generated by GNAT are in standard system format and in - particular the debugging information uses this format. This means - programs generated by GNAT can be used with existing utilities that - depend on these formats. - - In general, any utility program that works with C will also often - work with Ada programs generated by GNAT. This includes software - utilities such as gprof (a profiling program), `gdb' (the FSF - debugger), and utilities such as Purify. - -  - File: gnat_ug_unx.info, Node: The gnatpsta Utility Program, Next: The External Symbol Naming Scheme of GNAT, Prev: Using Other Utility Programs with GNAT, Up: Other Utility Programs - - The `gnatpsta' Utility Program - ============================== - - Many of the definitions in package Standard are - implementation-dependent. However, the source of this package does not - exist as an Ada source file, so these values cannot be determined by - inspecting the source. They can be determined by examining in detail - the coding of `cstand.adb' which creates the image of Standard in the - compiler, but this is awkward and requires a great deal of internal - knowledge about the system. - - The `gnatpsta' utility is designed to deal with this situation. It - is an Ada program that dynamically determines the values of all the - relevant parameters in Standard, and prints them out in the form of an - Ada source listing for Standard, displaying all the values of interest. - This output is generated to `stdout'. - - To determine the value of any parameter in package Standard, simply - run `gnatpsta' with no qualifiers or arguments, and examine the output. - This is preferable to consulting documentation, because you know that - the values you are getting are the actual ones provided by the - executing system. - -  - File: gnat_ug_unx.info, Node: The External Symbol Naming Scheme of GNAT, Next: Ada Mode for Glide, Prev: The gnatpsta Utility Program, Up: Other Utility Programs - - The External Symbol Naming Scheme of GNAT - ========================================= - - In order to interpret the output from GNAT, when using tools that are - originally intended for use with other languages, it is useful to - understand the conventions used to generate link names from the Ada - entity names. - - All link names are in all lowercase letters. With the exception of - library procedure names, the mechanism used is simply to use the full - expanded Ada name with dots replaced by double underscores. For - example, suppose we have the following package spec: - - package QRS is - MN : Integer; - end QRS; - - The variable `MN' has a full expanded Ada name of `QRS.MN', so the - corresponding link name is `qrs__mn'. Of course if a `pragma Export' - is used this may be overridden: - - package Exports is - Var1 : Integer; - pragma Export (Var1, C, External_Name => "var1_name"); - Var2 : Integer; - pragma Export (Var2, C, Link_Name => "var2_link_name"); - end Exports; - - In this case, the link name for VAR1 is whatever link name the C - compiler would assign for the C function VAR1_NAME. This typically - would be either VAR1_NAME or _VAR1_NAME, depending on operating system - conventions, but other possibilities exist. The link name for VAR2 is - VAR2_LINK_NAME, and this is not operating system dependent. - - One exception occurs for library level procedures. A potential - ambiguity arises between the required name `_main' for the C main - program, and the name we would otherwise assign to an Ada library level - procedure called `Main' (which might well not be the main program). - - To avoid this ambiguity, we attach the prefix `_ada_' to such names. - So if we have a library level procedure such as - - procedure Hello (S : String); - - the external name of this procedure will be _ADA_HELLO. - -  - File: gnat_ug_unx.info, Node: Ada Mode for Glide, Next: Converting Ada Files to html with gnathtml, Prev: The External Symbol Naming Scheme of GNAT, Up: Other Utility Programs - - Ada Mode for `Glide' - ==================== - - The Glide mode for programming in Ada (both, Ada83 and Ada95) helps the - user in understanding existing code and facilitates writing new code. It - furthermore provides some utility functions for easier integration of - standard Emacs features when programming in Ada. - - General Features: - ----------------- - - * Full Integrated Development Environment : - - * support of 'project files' for the configuration (directories, - compilation options,...) - - * compiling and stepping through error messages. - - * running and debugging your applications within Glide. - - * easy to use for beginners by pull-down menus, - - * user configurable by many user-option variables. - - Ada Mode Features That Help Understanding Code: - ----------------------------------------------- - - * functions for easy and quick stepping through Ada code, - - * getting cross reference information for identifiers (e.g. find the - defining place by a keystroke), - - * displaying an index menu of types and subprograms and move point to - the chosen one, - - * automatic color highlighting of the various entities in Ada code. - - Glide Support for Writing Ada Code: - ----------------------------------- - - * switching between spec and body files with possible autogeneration - of body files, - - * automatic formating of subprograms parameter lists. - - * automatic smart indentation according to Ada syntax, - - * automatic completion of identifiers, - - * automatic casing of identifiers, keywords, and attributes, - - * insertion of statement templates, - - * filling comment paragraphs like filling normal text, - - For more information, please refer to the online Glide documentation - available in the Glide -> Help Menu. - -  - File: gnat_ug_unx.info, Node: Converting Ada Files to html with gnathtml, Next: Installing gnathtml, Prev: Ada Mode for Glide, Up: Other Utility Programs - - Converting Ada Files to html with `gnathtml' - ============================================ - - This `Perl' script allows Ada source files to be browsed using standard - Web browsers. For installation procedure, see the section *Note - Installing gnathtml::. - - Ada reserved keywords are highlighted in a bold font and Ada - comments in a blue font. Unless your program was compiled with the gcc - `-gnatx' switch to suppress the generation of cross-referencing - information, user defined variables and types will appear in a - different color; you will be able to click on any identifier and go to - its declaration. - - The command line is as follow: - $ perl gnathtml.pl [switches] ada-files - - You can pass it as many Ada files as you want. `gnathtml' will - generate an html file for every ada file, and a global file called - `index.htm'. This file is an index of every identifier defined in the - files. - - The available switches are the following ones : - - `-83' - Only the subset on the Ada 83 keywords will be highlighted, not - the full Ada 95 keywords set. - - `-cc COLOR' - This option allows you to change the color used for comments. The - default value is green. The color argument can be any name - accepted by html. - - `-d' - If the ada files depend on some other files (using for instance the - `with' command, the latter will also be converted to html. Only - the files in the user project will be converted to html, not the - files in the run-time library itself. - - `-D' - This command is the same as -d above, but `gnathtml' will also look - for files in the run-time library, and generate html files for - them. - - `-f' - By default, gnathtml will generate html links only for global - entities ('with'ed units, global variables and types,...). If you - specify the `-f' on the command line, then links will be generated - for local entities too. - - `-l NUMBER' - If this switch is provided and NUMBER is not 0, then `gnathtml' - will number the html files every NUMBER line. - - `-I DIR' - Specify a directory to search for library files (`.ali' files) and - source files. You can provide several -I switches on the command - line, and the directories will be parsed in the order of the - command line. - - `-o DIR' - Specify the output directory for html files. By default, gnathtml - will saved the generated html files in a subdirectory named - `html/'. - - `-p FILE' - If you are using Emacs and the most recent Emacs Ada mode, which - provides a full Integrated Development Environment for compiling, - checking, running and debugging applications, you may be using - `.adp' files to give the directories where Emacs can find sources - and object files. - - Using this switch, you can tell gnathtml to use these files. This - allows you to get an html version of your application, even if it - is spread over multiple directories. - - `-sc COLOR' - This option allows you to change the color used for symbol - definitions. The default value is red. The color argument can be - any name accepted by html. - - `-t FILE' - This switch provides the name of a file. This file contains a list - of file names to be converted, and the effect is exactly as though - they had appeared explicitly on the command line. This is the - recommended way to work around the command line length limit on - some systems. - -  - File: gnat_ug_unx.info, Node: Installing gnathtml, Prev: Converting Ada Files to html with gnathtml, Up: Other Utility Programs - - Installing `gnathtml' - ===================== - - `Perl' needs to be installed on your machine to run this script. - `Perl' is freely available for almost every architecture and Operating - System via the Internet. - - On Unix systems, you may want to modify the first line of the - script `gnathtml', to explicitly tell the Operating system where - Perl is. The syntax of this line is : - #!full_path_name_to_perl - - Alternatively, you may run the script using the following command line: - - $ perl gnathtml.pl [switches] files - -  - File: gnat_ug_unx.info, Node: Running and Debugging Ada Programs, Next: Inline Assembler, Prev: Other Utility Programs, Up: Top - - Running and Debugging Ada Programs - ********************************** - - This chapter discusses how to debug Ada programs. An incorrect Ada - program may be handled in three ways by the GNAT compiler: - - 1. The illegality may be a violation of the static semantics of Ada. - In that case GNAT diagnoses the constructs in the program that are - illegal. It is then a straightforward matter for the user to - modify those parts of the program. - - 2. The illegality may be a violation of the dynamic semantics of Ada. - In that case the program compiles and executes, but may generate - incorrect results, or may terminate abnormally with some exception. - - 3. When presented with a program that contains convoluted errors, GNAT - itself may terminate abnormally without providing full diagnostics - on the incorrect user program. - - * Menu: - - * The GNAT Debugger GDB:: - * Running GDB:: - * Introduction to GDB Commands:: - * Using Ada Expressions:: - * Calling User-Defined Subprograms:: - * Using the Next Command in a Function:: - * Ada Exceptions:: - * Ada Tasks:: - * Debugging Generic Units:: - * GNAT Abnormal Termination or Failure to Terminate:: - * Naming Conventions for GNAT Source Files:: - * Getting Internal Debugging Information:: - * Stack Traceback:: - -  - File: gnat_ug_unx.info, Node: The GNAT Debugger GDB, Next: Running GDB, Up: Running and Debugging Ada Programs - - The GNAT Debugger GDB - ===================== - - `GDB' is a general purpose, platform-independent debugger that can be - used to debug mixed-language programs compiled with `GCC', and in - particular is capable of debugging Ada programs compiled with GNAT. The - latest versions of `GDB' are Ada-aware and can handle complex Ada data - structures. - - The manual `Debugging with GDB' contains full details on the usage - of `GDB', including a section on its usage on programs. This manual - should be consulted for full details. The section that follows is a - brief introduction to the philosophy and use of `GDB'. - - When GNAT programs are compiled, the compiler optionally writes - debugging information into the generated object file, including - information on line numbers, and on declared types and variables. This - information is separate from the generated code. It makes the object - files considerably larger, but it does not add to the size of the - actual executable that will be loaded into memory, and has no impact on - run-time performance. The generation of debug information is triggered - by the use of the -g switch in the gcc or gnatmake command used to - carry out the compilations. It is important to emphasize that the use - of these options does not change the generated code. - - The debugging information is written in standard system formats that - are used by many tools, including debuggers and profilers. The format - of the information is typically designed to describe C types and - semantics, but GNAT implements a translation scheme which allows full - details about Ada types and variables to be encoded into these standard - C formats. Details of this encoding scheme may be found in the file - exp_dbug.ads in the GNAT source distribution. However, the details of - this encoding are, in general, of no interest to a user, since `GDB' - automatically performs the necessary decoding. - - When a program is bound and linked, the debugging information is - collected from the object files, and stored in the executable image of - the program. Again, this process significantly increases the size of - the generated executable file, but it does not increase the size of the - executable program itself. Furthermore, if this program is run in the - normal manner, it runs exactly as if the debug information were not - present, and takes no more actual memory. - - However, if the program is run under control of `GDB', the debugger - is activated. The image of the program is loaded, at which point it is - ready to run. If a run command is given, then the program will run - exactly as it would have if `GDB' were not present. This is a crucial - part of the `GDB' design philosophy. `GDB' is entirely non-intrusive - until a breakpoint is encountered. If no breakpoint is ever hit, the - program will run exactly as it would if no debugger were present. When - a breakpoint is hit, `GDB' accesses the debugging information and can - respond to user commands to inspect variables, and more generally to - report on the state of execution. - -  - File: gnat_ug_unx.info, Node: Running GDB, Next: Introduction to GDB Commands, Prev: The GNAT Debugger GDB, Up: Running and Debugging Ada Programs - - Running GDB - =========== - - The debugger can be launched directly and simply from `glide' or - through its graphical interface: `gvd'. It can also be used directly in - text mode. Here is described the basic use of `GDB' in text mode. All - the commands described below can be used in the `gvd' console window - eventhough there is usually other more graphical ways to achieve the - same goals. - - The command to run de graphical interface of the debugger is - $ gvd program - - The command to run `GDB' in text mode is - - $ gdb program - - where `program' is the name of the executable file. This activates the - debugger and results in a prompt for debugger commands. The simplest - command is simply `run', which causes the program to run exactly as if - the debugger were not present. The following section describes some of - the additional commands that can be given to `GDB'. - -  - File: gnat_ug_unx.info, Node: Introduction to GDB Commands, Next: Using Ada Expressions, Prev: Running GDB, Up: Running and Debugging Ada Programs - - Introduction to GDB Commands - ============================ - - `GDB' contains a large repertoire of commands. The manual `Debugging - with GDB' includes extensive documentation on the use of these - commands, together with examples of their use. Furthermore, the command - HELP invoked from within `GDB' activates a simple help facility which - summarizes the available commands and their options. In this section - we summarize a few of the most commonly used commands to give an idea - of what `GDB' is about. You should create a simple program with - debugging information and experiment with the use of these `GDB' - commands on the program as you read through the following section. - - `set args ARGUMENTS' - The ARGUMENTS list above is a list of arguments to be passed to - the program on a subsequent run command, just as though the - arguments had been entered on a normal invocation of the program. - The `set args' command is not needed if the program does not - require arguments. - - `run' - The `run' command causes execution of the program to start from - the beginning. If the program is already running, that is to say if - you are currently positioned at a breakpoint, then a prompt will - ask for confirmation that you want to abandon the current - execution and restart. - - `breakpoint LOCATION' - The breakpoint command sets a breakpoint, that is to say a point - at which execution will halt and `GDB' will await further - commands. LOCATION is either a line number within a file, given in - the format `file:linenumber', or it is the name of a subprogram. - If you request that a breakpoint be set on a subprogram that is - overloaded, a prompt will ask you to specify on which of those - subprograms you want to breakpoint. You can also specify that all - of them should be breakpointed. If the program is run and - execution encounters the breakpoint, then the program stops and - `GDB' signals that the breakpoint was encountered by printing the - line of code before which the program is halted. - - `breakpoint exception NAME' - A special form of the breakpoint command which breakpoints whenever - exception NAME is raised. If NAME is omitted, then a breakpoint - will occur when any exception is raised. - - `print EXPRESSION' - This will print the value of the given expression. Most simple Ada - expression formats are properly handled by `GDB', so the expression - can contain function calls, variables, operators, and attribute - references. - - `continue' - Continues execution following a breakpoint, until the next - breakpoint or the termination of the program. - - `step' - Executes a single line after a breakpoint. If the next statement - is a subprogram call, execution continues into (the first - statement of) the called subprogram. - - `next' - Executes a single line. If this line is a subprogram call, - executes and returns from the call. - - `list' - Lists a few lines around the current source location. In practice, - it is usually more convenient to have a separate edit window open - with the relevant source file displayed. Successive applications - of this command print subsequent lines. The command can be given - an argument which is a line number, in which case it displays a - few lines around the specified one. - - `backtrace' - Displays a backtrace of the call chain. This command is typically - used after a breakpoint has occurred, to examine the sequence of - calls that leads to the current breakpoint. The display includes - one line for each activation record (frame) corresponding to an - active subprogram. - - `up' - At a breakpoint, `GDB' can display the values of variables local - to the current frame. The command `up' can be used to examine the - contents of other active frames, by moving the focus up the stack, - that is to say from callee to caller, one frame at a time. - - `down' - Moves the focus of `GDB' down from the frame currently being - examined to the frame of its callee (the reverse of the previous - command), - - `frame N' - Inspect the frame with the given number. The value 0 denotes the - frame of the current breakpoint, that is to say the top of the - call stack. - - The above list is a very short introduction to the commands that - `GDB' provides. Important additional capabilities, including conditional - breakpoints, the ability to execute command sequences on a breakpoint, - the ability to debug at the machine instruction level and many other - features are described in detail in `Debugging with GDB'. Note that - most commands can be abbreviated (for example, c for continue, bt for - backtrace). - -  - File: gnat_ug_unx.info, Node: Using Ada Expressions, Next: Calling User-Defined Subprograms, Prev: Introduction to GDB Commands, Up: Running and Debugging Ada Programs - - Using Ada Expressions - ===================== - - `GDB' supports a fairly large subset of Ada expression syntax, with some - extensions. The philosophy behind the design of this subset is - - * That `GDB' should provide basic literals and access to operations - for arithmetic, dereferencing, field selection, indexing, and - subprogram calls, leaving more sophisticated computations to - subprograms written into the program (which therefore may be - called from `GDB'). - - * That type safety and strict adherence to Ada language restrictions - are not particularly important to the `GDB' user. - - * That brevity is important to the `GDB' user. - - Thus, for brevity, the debugger acts as if there were implicit - `with' and `use' clauses in effect for all user-written packages, thus - making it unnecessary to fully qualify most names with their packages, - regardless of context. Where this causes ambiguity, `GDB' asks the - user's intent. - - For details on the supported Ada syntax, see `Debugging with GDB'. - -  - File: gnat_ug_unx.info, Node: Calling User-Defined Subprograms, Next: Using the Next Command in a Function, Prev: Using Ada Expressions, Up: Running and Debugging Ada Programs - - Calling User-Defined Subprograms - ================================ - - An important capability of `GDB' is the ability to call user-defined - subprograms while debugging. This is achieved simply by entering a - subprogram call statement in the form: - - call subprogram-name (parameters) - - The keyword `call' can be omitted in the normal case where the - `subprogram-name' does not coincide with any of the predefined `GDB' - commands. - - The effect is to invoke the given subprogram, passing it the list of - parameters that is supplied. The parameters can be expressions and can - include variables from the program being debugged. The subprogram must - be defined at the library level within your program, and `GDB' will - call the subprogram within the environment of your program execution - (which means that the subprogram is free to access or even modify - variables within your program). - - The most important use of this facility is in allowing the inclusion - of debugging routines that are tailored to particular data structures - in your program. Such debugging routines can be written to provide a - suitably high-level description of an abstract type, rather than a - low-level dump of its physical layout. After all, the standard `GDB - print' command only knows the physical layout of your types, not their - abstract meaning. Debugging routines can provide information at the - desired semantic level and are thus enormously useful. - - For example, when debugging GNAT itself, it is crucial to have - access to the contents of the tree nodes used to represent the program - internally. But tree nodes are represented simply by an integer value - (which in turn is an index into a table of nodes). Using the `print' - command on a tree node would simply print this integer value, which is - not very useful. But the PN routine (defined in file treepr.adb in the - GNAT sources) takes a tree node as input, and displays a useful high - level representation of the tree node, which includes the syntactic - category of the node, its position in the source, the integers that - denote descendant nodes and parent node, as well as varied semantic - information. To study this example in more detail, you might want to - look at the body of the PN procedure in the stated file. - -  - File: gnat_ug_unx.info, Node: Using the Next Command in a Function, Next: Ada Exceptions, Prev: Calling User-Defined Subprograms, Up: Running and Debugging Ada Programs - - Using the Next Command in a Function - ==================================== - - When you use the `next' command in a function, the current source - location will advance to the next statement as usual. A special case - arises in the case of a `return' statement. - - Part of the code for a return statement is the "epilog" of the - function. This is the code that returns to the caller. There is only - one copy of this epilog code, and it is typically associated with the - last return statement in the function if there is more than one return. - In some implementations, this epilog is associated with the first - statement of the function. - - The result is that if you use the `next' command from a return - statement that is not the last return statement of the function you may - see a strange apparent jump to the last return statement or to the - start of the function. You should simply ignore this odd jump. The - value returned is always that from the first return statement that was - stepped through. - -  - File: gnat_ug_unx.info, Node: Ada Exceptions, Next: Ada Tasks, Prev: Using the Next Command in a Function, Up: Running and Debugging Ada Programs - - Breaking on Ada Exceptions - ========================== - - You can set breakpoints that trip when your program raises selected - exceptions. - - `break exception' - Set a breakpoint that trips whenever (any task in the) program - raises any exception. - - `break exception NAME' - Set a breakpoint that trips whenever (any task in the) program - raises the exception NAME. - - `break exception unhandled' - Set a breakpoint that trips whenever (any task in the) program - raises an exception for which there is no handler. - - `info exceptions' - `info exceptions REGEXP' - The `info exceptions' command permits the user to examine all - defined exceptions within Ada programs. With a regular expression, - REGEXP, as argument, prints out only those exceptions whose name - matches REGEXP. - -  - File: gnat_ug_unx.info, Node: Ada Tasks, Next: Debugging Generic Units, Prev: Ada Exceptions, Up: Running and Debugging Ada Programs - - Ada Tasks - ========= - - `GDB' allows the following task-related commands: - - `info tasks' - This command shows a list of current Ada tasks, as in the - following example: - - (gdb) info tasks - ID TID P-ID Thread Pri State Name - 1 8088000 0 807e000 15 Child Activation Wait main_task - 2 80a4000 1 80ae000 15 Accept/Select Wait b - 3 809a800 1 80a4800 15 Child Activation Wait a - * 4 80ae800 3 80b8000 15 Running c - - In this listing, the asterisk before the first task indicates it - to be the currently running task. The first column lists the task - ID that is used to refer to tasks in the following commands. - - `break LINESPEC task TASKID' - `break LINESPEC task TASKID if ...' - These commands are like the `break ... thread ...'. LINESPEC - specifies source lines. - - Use the qualifier `task TASKID' with a breakpoint command to - specify that you only want `GDB' to stop the program when a - particular Ada task reaches this breakpoint. TASKID is one of the - numeric task identifiers assigned by `GDB', shown in the first - column of the `info tasks' display. - - If you do not specify `task TASKID' when you set a breakpoint, the - breakpoint applies to _all_ tasks of your program. - - You can use the `task' qualifier on conditional breakpoints as - well; in this case, place `task TASKID' before the breakpoint - condition (before the `if'). - - `task TASKNO' - This command allows to switch to the task referred by TASKNO. In - particular, This allows to browse the backtrace of the specified - task. It is advised to switch back to the original task before - continuing execution otherwise the scheduling of the program may be - perturbated. - - For more detailed information on the tasking support, see `Debugging - with GDB'. - -  - File: gnat_ug_unx.info, Node: Debugging Generic Units, Next: GNAT Abnormal Termination or Failure to Terminate, Prev: Ada Tasks, Up: Running and Debugging Ada Programs - - Debugging Generic Units - ======================= - - GNAT always uses code expansion for generic instantiation. This means - that each time an instantiation occurs, a complete copy of the original - code is made, with appropriate substitutions of formals by actuals. - - It is not possible to refer to the original generic entities in - `GDB', but it is always possible to debug a particular instance of a - generic, by using the appropriate expanded names. For example, if we - have - - procedure g is - - generic package k is - procedure kp (v1 : in out integer); - end k; - - package body k is - procedure kp (v1 : in out integer) is - begin - v1 := v1 + 1; - end kp; - end k; - - package k1 is new k; - package k2 is new k; - - var : integer := 1; - - begin - k1.kp (var); - k2.kp (var); - k1.kp (var); - k2.kp (var); - end; - - Then to break on a call to procedure kp in the k2 instance, simply use - the command: - - (gdb) break g.k2.kp - - When the breakpoint occurs, you can step through the code of the - instance in the normal manner and examine the values of local - variables, as for other units. - -  - File: gnat_ug_unx.info, Node: GNAT Abnormal Termination or Failure to Terminate, Next: Naming Conventions for GNAT Source Files, Prev: Debugging Generic Units, Up: Running and Debugging Ada Programs - - GNAT Abnormal Termination or Failure to Terminate - ================================================= - - When presented with programs that contain serious errors in syntax or - semantics, GNAT may on rare occasions experience problems in - operation, such as aborting with a segmentation fault or illegal memory - access, raising an internal exception, terminating abnormally, or - failing to terminate at all. In such cases, you can activate various - features of GNAT that can help you pinpoint the construct in your - program that is the likely source of the problem. - - The following strategies are presented in increasing order of - difficulty, corresponding to your experience in using GNAT and your - familiarity with compiler internals. - - 1. Run `gcc' with the `-gnatf'. This first switch causes all errors - on a given line to be reported. In its absence, only the first - error on a line is displayed. - - The `-gnatdO' switch causes errors to be displayed as soon as they - are encountered, rather than after compilation is terminated. If - GNAT terminates prematurely or goes into an infinite loop, the - last error message displayed may help to pinpoint the culprit. - - 2. Run `gcc' with the `-v (verbose)' switch. In this mode, `gcc' - produces ongoing information about the progress of the compilation - and provides the name of each procedure as code is generated. This - switch allows you to find which Ada procedure was being compiled - when it encountered a code generation problem. - - 3. Run `gcc' with the `-gnatdc' switch. This is a GNAT specific - switch that does for the front-end what `-v' does for the back end. - The system prints the name of each unit, either a compilation unit - or nested unit, as it is being analyzed. - - 4. Finally, you can start `gdb' directly on the `gnat1' executable. - `gnat1' is the front-end of GNAT, and can be run independently - (normally it is just called from `gcc'). You can use `gdb' on - `gnat1' as you would on a C program (but *note The GNAT Debugger - GDB:: for caveats). The `where' command is the first line of - attack; the variable `lineno' (seen by `print lineno'), used by - the second phase of `gnat1' and by the `gcc' backend, indicates - the source line at which the execution stopped, and `input_file - name' indicates the name of the source file. - -  - File: gnat_ug_unx.info, Node: Naming Conventions for GNAT Source Files, Next: Getting Internal Debugging Information, Prev: GNAT Abnormal Termination or Failure to Terminate, Up: Running and Debugging Ada Programs - - Naming Conventions for GNAT Source Files - ======================================== - - In order to examine the workings of the GNAT system, the following - brief description of its organization may be helpful: - - * Files with prefix `sc' contain the lexical scanner. - - * All files prefixed with `par' are components of the parser. The - numbers correspond to chapters of the Ada 95 Reference Manual. For - example, parsing of select statements can be found in - `par-ch9.adb'. - - * All files prefixed with `sem' perform semantic analysis. The - numbers correspond to chapters of the Ada standard. For example, - all issues involving context clauses can be found in - `sem_ch10.adb'. In addition, some features of the language require - sufficient special processing to justify their own semantic files: - sem_aggr for aggregates, sem_disp for dynamic dispatching, etc. - - * All files prefixed with `exp' perform normalization and expansion - of the intermediate representation (abstract syntax tree, or AST). - these files use the same numbering scheme as the parser and - semantics files. For example, the construction of record - initialization procedures is done in `exp_ch3.adb'. - - * The files prefixed with `bind' implement the binder, which - verifies the consistency of the compilation, determines an order of - elaboration, and generates the bind file. - - * The files `atree.ads' and `atree.adb' detail the low-level data - structures used by the front-end. - - * The files `sinfo.ads' and `sinfo.adb' detail the structure of the - abstract syntax tree as produced by the parser. - - * The files `einfo.ads' and `einfo.adb' detail the attributes of all - entities, computed during semantic analysis. - - * Library management issues are dealt with in files with prefix - `lib'. - - * Ada files with the prefix `a-' are children of `Ada', as defined - in Annex A. - - * Files with prefix `i-' are children of `Interfaces', as defined in - Annex B. - - * Files with prefix `s-' are children of `System'. This includes - both language-defined children and GNAT run-time routines. - - * Files with prefix `g-' are children of `GNAT'. These are useful - general-purpose packages, fully documented in their - specifications. All the other `.c' files are modifications of - common `gcc' files. - -  - File: gnat_ug_unx.info, Node: Getting Internal Debugging Information, Next: Stack Traceback, Prev: Naming Conventions for GNAT Source Files, Up: Running and Debugging Ada Programs - - Getting Internal Debugging Information - ====================================== - - Most compilers have internal debugging switches and modes. GNAT does - also, except GNAT internal debugging switches and modes are not secret. - A summary and full description of all the compiler and binder debug - flags are in the file `debug.adb'. You must obtain the sources of the - compiler to see the full detailed effects of these flags. - - The switches that print the source of the program (reconstructed from - the internal tree) are of general interest for user programs, as are the - options to print the full internal tree, and the entity table (the - symbol table information). The reconstructed source provides a readable - version of the program after the front-end has completed analysis and - expansion, and is useful when studying the performance of specific - constructs. For example, constraint checks are indicated, complex - aggregates are replaced with loops and assignments, and tasking - primitives are replaced with run-time calls. - -  - File: gnat_ug_unx.info, Node: Stack Traceback, Prev: Getting Internal Debugging Information, Up: Running and Debugging Ada Programs - - Stack Traceback - =============== - - Traceback is a mechanism to display the sequence of subprogram calls - that leads to a specified execution point in a program. Often (but not - always) the execution point is an instruction at which an exception has - been raised. This mechanism is also known as stack unwinding because - it obtains its information by scanning the run-time stack and - recovering the activation records of all active subprograms. Stack - unwinding is one of the most important tools for program debugging. - - The first entry stored in traceback corresponds to the deepest calling - level, that is to say the subprogram currently executing the instruction - from which we want to obtain the traceback. - - Note that there is no runtime performance penalty when stack traceback - is enabled and no exception are raised during program execution. - - * Menu: - - * Non-Symbolic Traceback:: - * Symbolic Traceback:: - -  - File: gnat_ug_unx.info, Node: Non-Symbolic Traceback, Next: Symbolic Traceback, Up: Stack Traceback - - Non-Symbolic Traceback - ---------------------- - - Note: this feature is not supported on all platforms. See - `GNAT.Traceback spec in g-traceb.ads' for a complete list of supported - platforms. - - * Menu: - - * Tracebacks From an Unhandled Exception:: - * Tracebacks From Exception Occurrences (non-symbolic):: - * Tracebacks From Anywhere in a Program (non-symbolic):: - -  - File: gnat_ug_unx.info, Node: Tracebacks From an Unhandled Exception, Next: Tracebacks From Exception Occurrences (non-symbolic), Up: Non-Symbolic Traceback - - Tracebacks From an Unhandled Exception - ...................................... - - A runtime non-symbolic traceback is a list of addresses of call - instructions. To enable this feature you must use the `-E' - `gnatbind''s option. With this option a stack traceback is stored as - part of exception information. It is possible to retrieve this - information using the standard `Ada.Exception.Exception_Information' - routine. - - Let's have a look at a simple example: - - procedure STB is - - procedure P1 is - begin - raise Constraint_Error; - end P1; - - procedure P2 is - begin - P1; - end P2; - - begin - P2; - end STB; - - $ gnatmake stb -bargs -E - $ stb - - Execution terminated by unhandled exception - Exception name: CONSTRAINT_ERROR - Message: stb.adb:5 - Call stack traceback locations: - 0x401373 0x40138b 0x40139c 0x401335 0x4011c4 0x4011f1 0x77e892a4 - - As we see the traceback lists a sequence of addresses for the unhandled - exception `CONSTAINT_ERROR' raised in procedure P1. It is easy to guess - that this exception come from procedure P1. To translate these - addresses into the source lines where the calls appear, the `addr2line' - tool, described below, is invaluable. The use of this tool requires the - program to be compiled with debug information. - - $ gnatmake -g stb -bargs -E - $ stb - - Execution terminated by unhandled exception - Exception name: CONSTRAINT_ERROR - Message: stb.adb:5 - Call stack traceback locations: - 0x401373 0x40138b 0x40139c 0x401335 0x4011c4 0x4011f1 0x77e892a4 - - $ addr2line --exe=stb 0x401373 0x40138b 0x40139c 0x401335 0x4011c4 - 0x4011f1 0x77e892a4 - - 00401373 at d:/stb/stb.adb:5 - 0040138B at d:/stb/stb.adb:10 - 0040139C at d:/stb/stb.adb:14 - 00401335 at d:/stb/b~stb.adb:104 - 004011C4 at /build/.../crt1.c:200 - 004011F1 at /build/.../crt1.c:222 - 77E892A4 in ?? at ??:0 - - `addr2line' has a number of other useful options: - - `--functions' - to get the function name corresponding to any location - - `--demangle=gnat' - to use the gnat decoding mode for the function names. Note that - for binutils version 2.9.x the option is simply `--demangle'. - - $ addr2line --exe=stb --functions --demangle=gnat 0x401373 0x40138b - 0x40139c 0x401335 0x4011c4 0x4011f1 - - 00401373 in stb.p1 at d:/stb/stb.adb:5 - 0040138B in stb.p2 at d:/stb/stb.adb:10 - 0040139C in stb at d:/stb/stb.adb:14 - 00401335 in main at d:/stb/b~stb.adb:104 - 004011C4 in <__mingw_CRTStartup> at /build/.../crt1.c:200 - 004011F1 in at /build/.../crt1.c:222 - - From this traceback we can see that the exception was raised in - `stb.adb' at line 5, which was reached from a procedure call in - `stb.adb' at line 10, and so on. The `b~std.adb' is the binder file, - which contains the call to the main program. *note Running gnatbind::. - The remaining entries are assorted runtime routines, and the output - will vary from platform to platform. - - It is also possible to use `GDB' with these traceback addresses to debug - the program. For example, we can break at a given code location, as - reported in the stack traceback: - - $ gdb -nw stb - - (gdb) break *0x401373 - Breakpoint 1 at 0x401373: file stb.adb, line 5. - - It is important to note that the stack traceback addresses do not - change when debug information is included. This is particularly useful - because it makes it possible to release software without debug - information (to minimize object size), get a field report that includes - a stack traceback whenever an internal bug occurs, and then be able to - retrieve the sequence of calls with the same program compiled with - debug information. - -  - File: gnat_ug_unx.info, Node: Tracebacks From Exception Occurrences (non-symbolic), Next: Tracebacks From Anywhere in a Program (non-symbolic), Prev: Tracebacks From an Unhandled Exception, Up: Non-Symbolic Traceback - - Tracebacks From Exception Occurrences - ..................................... - - Non-symbolic tracebacks are obtained by using the `-E' binder argument. - The stack traceback is attached to the exception information string, - and can be retrieved in an exception handler within the Ada program, by - means of the Ada95 facilities defined in `Ada.Exceptions'. Here is a - simple example: - - with Ada.Text_IO; - with Ada.Exceptions; - - procedure STB is - - use Ada; - use Ada.Exceptions; - - procedure P1 is - K : Positive := 1; - begin - K := K - 1; - exception - when E : others => - Text_IO.Put_Line (Exception_Information (E)); - end P1; - - procedure P2 is - begin - P1; - end P2; - - begin - P2; - end STB; - - This program will output: - - $ stb - - Exception name: CONSTRAINT_ERROR - Message: stb.adb:12 - Call stack traceback locations: - 0x4015e4 0x401633 0x401644 0x401461 0x4011c4 0x4011f1 0x77e892a4 - -  - File: gnat_ug_unx.info, Node: Tracebacks From Anywhere in a Program (non-symbolic), Prev: Tracebacks From Exception Occurrences (non-symbolic), Up: Non-Symbolic Traceback - - Tracebacks From Anywhere in a Program - ..................................... - - It is also possible to retrieve a stack traceback from anywhere in a - program. For this you need to use the `GNAT.Traceback' API. This - package includes a procedure called `Call_Chain' that computes a - complete stack traceback, as well as useful display procedures - described below. It is not necessary to use the `-E gnatbind' option in - this case, because the stack traceback mechanism is invoked explicitly. - - In the following example we compute a traceback at a specific location - in the program, and we display it using `GNAT.Debug_Utilities.Image' to - convert addresses to strings: - - with Ada.Text_IO; - with GNAT.Traceback; - with GNAT.Debug_Utilities; - - procedure STB is - - use Ada; - use GNAT; - use GNAT.Traceback; - - procedure P1 is - TB : Tracebacks_Array (1 .. 10); - -- We are asking for a maximum of 10 stack frames. - Len : Natural; - -- Len will receive the actual number of stack frames returned. - begin - Call_Chain (TB, Len); - - Text_IO.Put ("In STB.P1 : "); - - for K in 1 .. Len loop - Text_IO.Put (Debug_Utilities.Image (TB (K))); - Text_IO.Put (' '); - end loop; - - Text_IO.New_Line; - end P1; - - procedure P2 is - begin - P1; - end P2; - - begin - P2; - end STB; - - $ gnatmake stb - $ stb - - In STB.P1 : 16#0040_F1E4# 16#0040_14F2# 16#0040_170B# 16#0040_171C# - 16#0040_1461# 16#0040_11C4# 16#0040_11F1# 16#77E8_92A4# - -  - File: gnat_ug_unx.info, Node: Symbolic Traceback, Prev: Non-Symbolic Traceback, Up: Stack Traceback - - Symbolic Traceback - ------------------ - - A symbolic traceback is a stack traceback in which procedure names are - associated with each code location. - - Note that this feature is not supported on all platforms. See - `GNAT.Traceback.Symbolic spec in g-trasym.ads' for a complete list of - currently supported platforms. - - Note that the symbolic traceback requires that the program be compiled - with debug information. If it is not compiled with debug information - only the non-symbolic information will be valid. - - * Menu: - - * Tracebacks From Exception Occurrences (symbolic):: - * Tracebacks From Anywhere in a Program (symbolic):: - -  - File: gnat_ug_unx.info, Node: Tracebacks From Exception Occurrences (symbolic), Next: Tracebacks From Anywhere in a Program (symbolic), Up: Symbolic Traceback - - Tracebacks From Exception Occurrences - ..................................... - - with Ada.Text_IO; - with GNAT.Traceback.Symbolic; - - procedure STB is - - procedure P1 is - begin - raise Constraint_Error; - end P1; - - procedure P2 is - begin - P1; - end P2; - - procedure P3 is - begin - P2; - end P3; - - begin - P3; - exception - when E : others => - Ada.Text_IO.Put_Line (GNAT.Traceback.Symbolic.Symbolic_Traceback (E)); - end STB; - - $ gnatmake -g stb -bargs -E -largs -lgnat -laddr2line -lintl - $ stb - - 0040149F in stb.p1 at stb.adb:8 - 004014B7 in stb.p2 at stb.adb:13 - 004014CF in stb.p3 at stb.adb:18 - 004015DD in ada.stb at stb.adb:22 - 00401461 in main at b~stb.adb:168 - 004011C4 in __mingw_CRTStartup at crt1.c:200 - 004011F1 in mainCRTStartup at crt1.c:222 - 77E892A4 in ?? at ??:0 - - The exact sequence of linker options may vary from platform to platform. - The above `-largs' section is for Windows platforms. By contrast, under - Unix there is no need for the `-largs' section. Differences across - platforms are due to details of linker implementation. - -  - File: gnat_ug_unx.info, Node: Tracebacks From Anywhere in a Program (symbolic), Prev: Tracebacks From Exception Occurrences (symbolic), Up: Symbolic Traceback - - Tracebacks From Anywhere in a Program - ..................................... - - It is possible to get a symbolic stack traceback from anywhere in a - program, just as for non-symbolic tracebacks. The first step is to - obtain a non-symbolic traceback, and then call `Symbolic_Traceback' to - compute the symbolic information. Here is an example: - - with Ada.Text_IO; - with GNAT.Traceback; - with GNAT.Traceback.Symbolic; - - procedure STB is - - use Ada; - use GNAT.Traceback; - use GNAT.Traceback.Symbolic; - - procedure P1 is - TB : Tracebacks_Array (1 .. 10); - -- We are asking for a maximum of 10 stack frames. - Len : Natural; - -- Len will receive the actual number of stack frames returned. - begin - Call_Chain (TB, Len); - Text_IO.Put_Line (Symbolic_Traceback (TB (1 .. Len))); - end P1; - - procedure P2 is - begin - P1; - end P2; - - begin - P2; - end STB; - -  - File: gnat_ug_unx.info, Node: Inline Assembler, Next: Performance Considerations, Prev: Running and Debugging Ada Programs, Up: Top - - Inline Assembler - **************** - - If you need to write low-level software that interacts directly with - the hardware, Ada provides two ways to incorporate assembly language - code into your program. First, you can import and invoke external - routines written in assembly language, an Ada feature fully supported - by GNAT. However, for small sections of code it may be simpler or more - efficient to include assembly language statements directly in your Ada - source program, using the facilities of the implementation-defined - package `System.Machine_Code', which incorporates the gcc Inline - Assembler. The Inline Assembler approach offers a number of - advantages, including the following: - - * No need to use non-Ada tools - - * Consistent interface over different targets - - * Automatic usage of the proper calling conventions - - * Access to Ada constants and variables - - * Definition of intrinsic routines - - * Possibility of inlining a subprogram comprising assembler code - - * Code optimizer can take Inline Assembler code into account - - This chapter presents a series of examples to show you how to use - the Inline Assembler. Although it focuses on the Intel x86, the - general approach applies also to other processors. It is assumed that - you are familiar with Ada and with assembly language programming. - - * Menu: - - * Basic Assembler Syntax:: - * A Simple Example of Inline Assembler:: - * Output Variables in Inline Assembler:: - * Input Variables in Inline Assembler:: - * Inlining Inline Assembler Code:: - * Other Asm Functionality:: - * A Complete Example:: - -  - File: gnat_ug_unx.info, Node: Basic Assembler Syntax, Next: A Simple Example of Inline Assembler, Up: Inline Assembler - - Basic Assembler Syntax - ====================== - - The assembler used by GNAT and gcc is based not on the Intel assembly - language, but rather on a language that descends from the AT&T Unix - assembler _as_ (and which is often referred to as "AT&T syntax"). The - following table summarizes the main features of _as_ syntax and points - out the differences from the Intel conventions. See the gcc _as_ and - _gas_ (an _as_ macro pre-processor) documentation for further - information. - - Register names - gcc / _as_: Prefix with "%"; for example `%eax' - Intel: No extra punctuation; for example `eax' - - Immediate operand - gcc / _as_: Prefix with "$"; for example `$4' - Intel: No extra punctuation; for example `4' - - Address - gcc / _as_: Prefix with "$"; for example `$loc' - Intel: No extra punctuation; for example `loc' - - Memory contents - gcc / _as_: No extra punctuation; for example `loc' - Intel: Square brackets; for example `[loc]' - - Register contents - gcc / _as_: Parentheses; for example `(%eax)' - Intel: Square brackets; for example `[eax]' - - Hexadecimal numbers - gcc / _as_: Leading "0x" (C language syntax); for example `0xA0' - Intel: Trailing "h"; for example `A0h' - - Operand size - gcc / _as_: Explicit in op code; for example `movw' to move a - 16-bit word - Intel: Implicit, deduced by assembler; for example `mov' - - Instruction repetition - gcc / _as_: Split into two lines; for example - `rep' - `stosl' - Intel: Keep on one line; for example `rep stosl' - - Order of operands - gcc / _as_: Source first; for example `movw $4, %eax' - Intel: Destination first; for example `mov eax, 4' - -  - File: gnat_ug_unx.info, Node: A Simple Example of Inline Assembler, Next: Output Variables in Inline Assembler, Prev: Basic Assembler Syntax, Up: Inline Assembler - - A Simple Example of Inline Assembler - ==================================== - - The following example will generate a single assembly language - statement, `nop', which does nothing. Despite its lack of run-time - effect, the example will be useful in illustrating the basics of the - Inline Assembler facility. - - with System.Machine_Code; use System.Machine_Code; - procedure Nothing is - begin - Asm ("nop"); - end Nothing; - - `Asm' is a procedure declared in package `System.Machine_Code'; here - it takes one parameter, a _template string_ that must be a static - expression and that will form the generated instruction. `Asm' may be - regarded as a compile-time procedure that parses the template string - and additional parameters (none here), from which it generates a - sequence of assembly language instructions. - - The examples in this chapter will illustrate several of the forms - for invoking `Asm'; a complete specification of the syntax is found in - the `GNAT Reference Manual'. - - Under the standard GNAT conventions, the `Nothing' procedure should - be in a file named `nothing.adb'. You can build the executable in the - usual way: - gnatmake nothing - However, the interesting aspect of this example is not its run-time - behavior but rather the generated assembly code. To see this output, - invoke the compiler as follows: - gcc -c -S -fomit-frame-pointer -gnatp `nothing.adb' - where the options are: - - `-c' - compile only (no bind or link) - - `-S' - generate assembler listing - - `-fomit-frame-pointer' - do not set up separate stack frames - - `-gnatp' - do not add runtime checks - - This gives a human-readable assembler version of the code. The - resulting file will have the same name as the Ada source file, but with - a `.s' extension. In our example, the file `nothing.s' has the - following contents: - - .file "nothing.adb" - gcc2_compiled.: - ___gnu_compiled_ada: - .text - .align 4 - .globl __ada_nothing - __ada_nothing: - #APP - nop - #NO_APP - jmp L1 - .align 2,0x90 - L1: - ret - - The assembly code you included is clearly indicated by the compiler, - between the `#APP' and `#NO_APP' delimiters. The character before the - 'APP' and 'NOAPP' can differ on different targets. For example, Linux - uses '#APP' while on NT you will see '/APP'. - - If you make a mistake in your assembler code (such as using the - wrong size modifier, or using a wrong operand for the instruction) GNAT - will report this error in a temporary file, which will be deleted when - the compilation is finished. Generating an assembler file will help in - such cases, since you can assemble this file separately using the _as_ - assembler that comes with gcc. - - Assembling the file using the command - - as `nothing.s' - - will give you error messages whose lines correspond to the assembler - input file, so you can easily find and correct any mistakes you made. - If there are no errors, _as_ will generate an object file `nothing.out'. - -  - File: gnat_ug_unx.info, Node: Output Variables in Inline Assembler, Next: Input Variables in Inline Assembler, Prev: A Simple Example of Inline Assembler, Up: Inline Assembler - - Output Variables in Inline Assembler - ==================================== - - The examples in this section, showing how to access the processor - flags, illustrate how to specify the destination operands for assembly - language statements. - - with Interfaces; use Interfaces; - with Ada.Text_IO; use Ada.Text_IO; - with System.Machine_Code; use System.Machine_Code; - procedure Get_Flags is - Flags : Unsigned_32; - use ASCII; - begin - Asm ("pushfl" & LF & HT & -- push flags on stack - "popl %%eax" & LF & HT & -- load eax with flags - "movl %%eax, %0", -- store flags in variable - Outputs => Unsigned_32'Asm_Output ("=g", Flags)); - Put_Line ("Flags register:" & Flags'Img); - end Get_Flags; - - In order to have a nicely aligned assembly listing, we have separated - multiple assembler statements in the Asm template string with linefeed - (ASCII.LF) and horizontal tab (ASCII.HT) characters. The resulting - section of the assembly output file is: - - #APP - pushfl - popl %eax - movl %eax, -40(%ebp) - #NO_APP - - It would have been legal to write the Asm invocation as: - - Asm ("pushfl popl %%eax movl %%eax, %0") - - but in the generated assembler file, this would come out as: - - #APP - pushfl popl %eax movl %eax, -40(%ebp) - #NO_APP - - which is not so convenient for the human reader. - - We use Ada comments at the end of each line to explain what the - assembler instructions actually do. This is a useful convention. - - When writing Inline Assembler instructions, you need to precede each - register and variable name with a percent sign. Since the assembler - already requires a percent sign at the beginning of a register name, - you need two consecutive percent signs for such names in the Asm - template string, thus `%%eax'. In the generated assembly code, one of - the percent signs will be stripped off. - - Names such as `%0', `%1', `%2', etc., denote input or output - variables: operands you later define using `Input' or `Output' - parameters to `Asm'. An output variable is illustrated in the third - statement in the Asm template string: - movl %%eax, %0 - The intent is to store the contents of the eax register in a - variable that can be accessed in Ada. Simply writing `movl %%eax, - Flags' would not necessarily work, since the compiler might optimize by - using a register to hold Flags, and the expansion of the `movl' - instruction would not be aware of this optimization. The solution is - not to store the result directly but rather to advise the compiler to - choose the correct operand form; that is the purpose of the `%0' output - variable. - - Information about the output variable is supplied in the `Outputs' - parameter to `Asm': - Outputs => Unsigned_32'Asm_Output ("=g", Flags)); - - The output is defined by the `Asm_Output' attribute of the target - type; the general format is - Type'Asm_Output (constraint_string, variable_name) - - The constraint string directs the compiler how to store/access the - associated variable. In the example - Unsigned_32'Asm_Output ("=m", Flags); - the `"m"' (memory) constraint tells the compiler that the variable - `Flags' should be stored in a memory variable, thus preventing the - optimizer from keeping it in a register. In contrast, - Unsigned_32'Asm_Output ("=r", Flags); - uses the `"r"' (register) constraint, telling the compiler to store - the variable in a register. - - If the constraint is preceded by the equal character (*=*), it tells - the compiler that the variable will be used to store data into it. - - In the `Get_Flags' example, we used the "g" (global) constraint, - allowing the optimizer to choose whatever it deems best. - - There are a fairly large number of constraints, but the ones that - are most useful (for the Intel x86 processor) are the following: - - `=' - output constraint - - `g' - global (i.e. can be stored anywhere) - - `m' - in memory - - `I' - a constant - - `a' - use eax - - `b' - use ebx - - `c' - use ecx - - `d' - use edx - - `S' - use esi - - `D' - use edi - - `r' - use one of eax, ebx, ecx or edx - - `q' - use one of eax, ebx, ecx, edx, esi or edi - - The full set of constraints is described in the gcc and _as_ - documentation; note that it is possible to combine certain constraints - in one constraint string. - - You specify the association of an output variable with an assembler - operand through the `%'_n_ notation, where _n_ is a non-negative - integer. Thus in - Asm ("pushfl" & LF & HT & -- push flags on stack - "popl %%eax" & LF & HT & -- load eax with flags - "movl %%eax, %0", -- store flags in variable - Outputs => Unsigned_32'Asm_Output ("=g", Flags)); - - `%0' will be replaced in the expanded code by the appropriate operand, - whatever the compiler decided for the `Flags' variable. - - In general, you may have any number of output variables: - * Count the operands starting at 0; thus `%0', `%1', etc. - - * Specify the `Outputs' parameter as a parenthesized comma-separated - list of `Asm_Output' attributes - - For example: - Asm ("movl %%eax, %0" & LF & HT & - "movl %%ebx, %1" & LF & HT & - "movl %%ecx, %2", - Outputs => (Unsigned_32'Asm_Output ("=g", Var_A), -- %0 = Var_A - Unsigned_32'Asm_Output ("=g", Var_B), -- %1 = Var_B - Unsigned_32'Asm_Output ("=g", Var_C))); -- %2 = Var_C - - where `Var_A', `Var_B', and `Var_C' are variables in the Ada program. - - As a variation on the `Get_Flags' example, we can use the - constraints string to direct the compiler to store the eax register - into the `Flags' variable, instead of including the store instruction - explicitly in the `Asm' template string: - - with Interfaces; use Interfaces; - with Ada.Text_IO; use Ada.Text_IO; - with System.Machine_Code; use System.Machine_Code; - procedure Get_Flags_2 is - Flags : Unsigned_32; - use ASCII; - begin - Asm ("pushfl" & LF & HT & -- push flags on stack - "popl %%eax", -- save flags in eax - Outputs => Unsigned_32'Asm_Output ("=a", Flags)); - Put_Line ("Flags register:" & Flags'Img); - end Get_Flags_2; - - The `"a"' constraint tells the compiler that the `Flags' variable will - come from the eax register. Here is the resulting code: - - #APP - pushfl - popl %eax - #NO_APP - movl %eax,-40(%ebp) - - The compiler generated the store of eax into Flags after expanding the - assembler code. - - Actually, there was no need to pop the flags into the eax register; - more simply, we could just pop the flags directly into the program - variable: - - with Interfaces; use Interfaces; - with Ada.Text_IO; use Ada.Text_IO; - with System.Machine_Code; use System.Machine_Code; - procedure Get_Flags_3 is - Flags : Unsigned_32; - use ASCII; - begin - Asm ("pushfl" & LF & HT & -- push flags on stack - "pop %0", -- save flags in Flags - Outputs => Unsigned_32'Asm_Output ("=g", Flags)); - Put_Line ("Flags register:" & Flags'Img); - end Get_Flags_3; - -  - File: gnat_ug_unx.info, Node: Input Variables in Inline Assembler, Next: Inlining Inline Assembler Code, Prev: Output Variables in Inline Assembler, Up: Inline Assembler - - Input Variables in Inline Assembler - =================================== - - The example in this section illustrates how to specify the source - operands for assembly language statements. The program simply - increments its input value by 1: - - with Interfaces; use Interfaces; - with Ada.Text_IO; use Ada.Text_IO; - with System.Machine_Code; use System.Machine_Code; - procedure Increment is - - function Incr (Value : Unsigned_32) return Unsigned_32 is - Result : Unsigned_32; - begin - Asm ("incl %0", - Inputs => Unsigned_32'Asm_Input ("a", Value), - Outputs => Unsigned_32'Asm_Output ("=a", Result)); - return Result; - end Incr; - - Value : Unsigned_32; - - begin - Value := 5; - Put_Line ("Value before is" & Value'Img); - Value := Incr (Value); - Put_Line ("Value after is" & Value'Img); - end Increment; - - The `Outputs' parameter to `Asm' specifies that the result will be - in the eax register and that it is to be stored in the `Result' - variable. - - The `Inputs' parameter looks much like the `Outputs' parameter, but - with an `Asm_Input' attribute. The `"="' constraint, indicating an - output value, is not present. - - You can have multiple input variables, in the same way that you can - have more than one output variable. - - The parameter count (%0, %1) etc, now starts at the first input - statement, and continues with the output statements. When both - parameters use the same variable, the compiler will treat them as the - same %n operand, which is the case here. - - Just as the `Outputs' parameter causes the register to be stored - into the target variable after execution of the assembler statements, - so does the `Inputs' parameter cause its variable to be loaded into the - register before execution of the assembler statements. - - Thus the effect of the `Asm' invocation is: - 1. load the 32-bit value of `Value' into eax - - 2. execute the `incl %eax' instruction - - 3. store the contents of eax into the `Result' variable - - The resulting assembler file (with `-O2' optimization) contains: - _increment__incr.1: - subl $4,%esp - movl 8(%esp),%eax - #APP - incl %eax - #NO_APP - movl %eax,%edx - movl %ecx,(%esp) - addl $4,%esp - ret - -  - File: gnat_ug_unx.info, Node: Inlining Inline Assembler Code, Next: Other Asm Functionality, Prev: Input Variables in Inline Assembler, Up: Inline Assembler - - Inlining Inline Assembler Code - ============================== - - For a short subprogram such as the `Incr' function in the previous - section, the overhead of the call and return (creating / deleting the - stack frame) can be significant, compared to the amount of code in the - subprogram body. A solution is to apply Ada's `Inline' pragma to the - subprogram, which directs the compiler to expand invocations of the - subprogram at the point(s) of call, instead of setting up a stack frame - for out-of-line calls. Here is the resulting program: - - with Interfaces; use Interfaces; - with Ada.Text_IO; use Ada.Text_IO; - with System.Machine_Code; use System.Machine_Code; - procedure Increment_2 is - - function Incr (Value : Unsigned_32) return Unsigned_32 is - Result : Unsigned_32; - begin - Asm ("incl %0", - Inputs => Unsigned_32'Asm_Input ("a", Value), - Outputs => Unsigned_32'Asm_Output ("=a", Result)); - return Result; - end Incr; - pragma Inline (Increment); - - Value : Unsigned_32; - - begin - Value := 5; - Put_Line ("Value before is" & Value'Img); - Value := Increment (Value); - Put_Line ("Value after is" & Value'Img); - end Increment_2; - - Compile the program with both optimization (`-O2') and inlining - enabled (`-gnatpn' instead of `-gnatp'). - - The `Incr' function is still compiled as usual, but at the point in - `Increment' where our function used to be called: - - pushl %edi - call _increment__incr.1 - - the code for the function body directly appears: - - movl %esi,%eax - #APP - incl %eax - #NO_APP - movl %eax,%edx - - thus saving the overhead of stack frame setup and an out-of-line call. - -  - File: gnat_ug_unx.info, Node: Other Asm Functionality, Next: A Complete Example, Prev: Inlining Inline Assembler Code, Up: Inline Assembler - - Other `Asm' Functionality - ========================= - - This section describes two important parameters to the `Asm' procedure: - `Clobber', which identifies register usage; and `Volatile', which - inhibits unwanted optimizations. - - * Menu: - - * The Clobber Parameter:: - * The Volatile Parameter:: - -  - File: gnat_ug_unx.info, Node: The Clobber Parameter, Next: The Volatile Parameter, Up: Other Asm Functionality - - The `Clobber' Parameter - ----------------------- - - One of the dangers of intermixing assembly language and a compiled - language such as Ada is that the compiler needs to be aware of which - registers are being used by the assembly code. In some cases, such as - the earlier examples, the constraint string is sufficient to indicate - register usage (e.g. "a" for the eax register). But more generally, the - compiler needs an explicit identification of the registers that are - used by the Inline Assembly statements. - - Using a register that the compiler doesn't know about could be a - side effect of an instruction (like `mull' storing its result in both - eax and edx). It can also arise from explicit register usage in your - assembly code; for example: - Asm ("movl %0, %%ebx" & LF & HT & - "movl %%ebx, %1", - Inputs => Unsigned_32'Asm_Input ("g", Var_In), - Outputs => Unsigned_32'Asm_Output ("=g", Var_Out)); - - where the compiler (since it does not analyze the `Asm' template string) - does not know you are using the ebx register. - - In such cases you need to supply the `Clobber' parameter to `Asm', - to identify the registers that will be used by your assembly code: - - Asm ("movl %0, %%ebx" & LF & HT & - "movl %%ebx, %1", - Inputs => Unsigned_32'Asm_Input ("g", Var_In), - Outputs => Unsigned_32'Asm_Output ("=g", Var_Out), - Clobber => "ebx"); - - The Clobber parameter is a static string expression specifying the - register(s) you are using. Note that register names are _not_ prefixed - by a percent sign. Also, if more than one register is used then their - names are separated by commas; e.g., `"eax, ebx"' - - The `Clobber' parameter has several additional uses: - 1. Use the "register" name `cc' to indicate that flags might have - changed - - 2. Use the "register" name `memory' if you changed a memory location - -  - File: gnat_ug_unx.info, Node: The Volatile Parameter, Prev: The Clobber Parameter, Up: Other Asm Functionality - - The `Volatile' Parameter - ------------------------ - - Compiler optimizations in the presence of Inline Assembler may - sometimes have unwanted effects. For example, when an `Asm' invocation - with an input variable is inside a loop, the compiler might move the - loading of the input variable outside the loop, regarding it as a - one-time initialization. - - If this effect is not desired, you can disable such optimizations by - setting the `Volatile' parameter to `True'; for example: - - Asm ("movl %0, %%ebx" & LF & HT & - "movl %%ebx, %1", - Inputs => Unsigned_32'Asm_Input ("g", Var_In), - Outputs => Unsigned_32'Asm_Output ("=g", Var_Out), - Clobber => "ebx", - Volatile => True); - - By default, `Volatile' is set to `False' unless there is no `Outputs' - parameter. - - Although setting `Volatile' to `True' prevents unwanted - optimizations, it will also disable other optimizations that might be - important for efficiency. In general, you should set `Volatile' to - `True' only if the compiler's optimizations have created problems. - -  - File: gnat_ug_unx.info, Node: A Complete Example, Prev: Other Asm Functionality, Up: Inline Assembler - - A Complete Example - ================== - - This section contains a complete program illustrating a realistic usage - of GNAT's Inline Assembler capabilities. It comprises a main procedure - `Check_CPU' and a package `Intel_CPU'. The package declares a - collection of functions that detect the properties of the 32-bit x86 - processor that is running the program. The main procedure invokes - these functions and displays the information. - - The Intel_CPU package could be enhanced by adding functions to - detect the type of x386 co-processor, the processor caching options and - special operations such as the SIMD extensions. - - Although the Intel_CPU package has been written for 32-bit Intel - compatible CPUs, it is OS neutral. It has been tested on DOS, - Windows/NT and Linux. - - * Menu: - - * Check_CPU Procedure:: - * Intel_CPU Package Specification:: - * Intel_CPU Package Body:: - -  - File: gnat_ug_unx.info, Node: Check_CPU Procedure, Next: Intel_CPU Package Specification, Up: A Complete Example - - `Check_CPU' Procedure - --------------------- - - --------------------------------------------------------------------- - -- -- - -- Uses the Intel_CPU package to identify the CPU the program is -- - -- running on, and some of the features it supports. -- - -- -- - --------------------------------------------------------------------- - - with Intel_CPU; -- Intel CPU detection functions - with Ada.Text_IO; -- Standard text I/O - with Ada.Command_Line; -- To set the exit status - - procedure Check_CPU is - - Type_Found : Boolean := False; - -- Flag to indicate that processor was identified - - Features : Intel_CPU.Processor_Features; - -- The processor features - - Signature : Intel_CPU.Processor_Signature; - -- The processor type signature - - begin - - ----------------------------------- - -- Display the program banner. -- - ----------------------------------- - - Ada.Text_IO.Put_Line (Ada.Command_Line.Command_Name & - ": check Intel CPU version and features, v1.0"); - Ada.Text_IO.Put_Line ("distribute freely, but no warranty whatsoever"); - Ada.Text_IO.New_Line; - - ----------------------------------------------------------------------- - -- We can safely start with the assumption that we are on at least -- - -- a x386 processor. If the CPUID instruction is present, then we -- - -- have a later processor type. -- - ----------------------------------------------------------------------- - - if Intel_CPU.Has_CPUID = False then - - -- No CPUID instruction, so we assume this is indeed a x386 - -- processor. We can still check if it has a FP co-processor. - if Intel_CPU.Has_FPU then - Ada.Text_IO.Put_Line - ("x386-type processor with a FP co-processor"); - else - Ada.Text_IO.Put_Line - ("x386-type processor without a FP co-processor"); - end if; -- check for FPU - - -- Program done - Ada.Command_Line.Set_Exit_Status (Ada.Command_Line.Success); - return; - - end if; -- check for CPUID - - ----------------------------------------------------------------------- - -- If CPUID is supported, check if this is a true Intel processor, -- - -- if it is not, display a warning. -- - ----------------------------------------------------------------------- - - if Intel_CPU.Vendor_ID /= Intel_CPU.Intel_Processor then - Ada.Text_IO.Put_Line ("*** This is a Intel compatible processor"); - Ada.Text_IO.Put_Line ("*** Some information may be incorrect"); - end if; -- check if Intel - - ---------------------------------------------------------------------- - -- With the CPUID instruction present, we can assume at least a -- - -- x486 processor. If the CPUID support level is < 1 then we have -- - -- to leave it at that. -- - ---------------------------------------------------------------------- - - if Intel_CPU.CPUID_Level < 1 then - - -- Ok, this is a x486 processor. we still can get the Vendor ID - Ada.Text_IO.Put_Line ("x486-type processor"); - Ada.Text_IO.Put_Line ("Vendor ID is " & Intel_CPU.Vendor_ID); - - -- We can also check if there is a FPU present - if Intel_CPU.Has_FPU then - Ada.Text_IO.Put_Line ("Floating-Point support"); - else - Ada.Text_IO.Put_Line ("No Floating-Point support"); - end if; -- check for FPU - - -- Program done - Ada.Command_Line.Set_Exit_Status (Ada.Command_Line.Success); - return; - - end if; -- check CPUID level - - --------------------------------------------------------------------- - -- With a CPUID level of 1 we can use the processor signature to -- - -- determine it's exact type. -- - --------------------------------------------------------------------- - - Signature := Intel_CPU.Signature; - - ---------------------------------------------------------------------- - -- Ok, now we go into a lot of messy comparisons to get the -- - -- processor type. For clarity, no attememt to try to optimize the -- - -- comparisons has been made. Note that since Intel_CPU does not -- - -- support getting cache info, we cannot distinguish between P5 -- - -- and Celeron types yet. -- - ---------------------------------------------------------------------- - - -- x486SL - if Signature.Processor_Type = 2#00# and - Signature.Family = 2#0100# and - Signature.Model = 2#0100# then - Type_Found := True; - Ada.Text_IO.Put_Line ("x486SL processor"); - end if; - - -- x486DX2 Write-Back - if Signature.Processor_Type = 2#00# and - Signature.Family = 2#0100# and - Signature.Model = 2#0111# then - Type_Found := True; - Ada.Text_IO.Put_Line ("Write-Back Enhanced x486DX2 processor"); - end if; - - -- x486DX4 - if Signature.Processor_Type = 2#00# and - Signature.Family = 2#0100# and - Signature.Model = 2#1000# then - Type_Found := True; - Ada.Text_IO.Put_Line ("x486DX4 processor"); - end if; - - -- x486DX4 Overdrive - if Signature.Processor_Type = 2#01# and - Signature.Family = 2#0100# and - Signature.Model = 2#1000# then - Type_Found := True; - Ada.Text_IO.Put_Line ("x486DX4 OverDrive processor"); - end if; - - -- Pentium (60, 66) - if Signature.Processor_Type = 2#00# and - Signature.Family = 2#0101# and - Signature.Model = 2#0001# then - Type_Found := True; - Ada.Text_IO.Put_Line ("Pentium processor (60, 66)"); - end if; - - -- Pentium (75, 90, 100, 120, 133, 150, 166, 200) - if Signature.Processor_Type = 2#00# and - Signature.Family = 2#0101# and - Signature.Model = 2#0010# then - Type_Found := True; - Ada.Text_IO.Put_Line - ("Pentium processor (75, 90, 100, 120, 133, 150, 166, 200)"); - end if; - - -- Pentium OverDrive (60, 66) - if Signature.Processor_Type = 2#01# and - Signature.Family = 2#0101# and - Signature.Model = 2#0001# then - Type_Found := True; - Ada.Text_IO.Put_Line ("Pentium OverDrive processor (60, 66)"); - end if; - - -- Pentium OverDrive (75, 90, 100, 120, 133, 150, 166, 200) - if Signature.Processor_Type = 2#01# and - Signature.Family = 2#0101# and - Signature.Model = 2#0010# then - Type_Found := True; - Ada.Text_IO.Put_Line - ("Pentium OverDrive cpu (75, 90, 100, 120, 133, 150, 166, 200)"); - end if; - - -- Pentium OverDrive processor for x486 processor-based systems - if Signature.Processor_Type = 2#01# and - Signature.Family = 2#0101# and - Signature.Model = 2#0011# then - Type_Found := True; - Ada.Text_IO.Put_Line - ("Pentium OverDrive processor for x486 processor-based systems"); - end if; - - -- Pentium processor with MMX technology (166, 200) - if Signature.Processor_Type = 2#00# and - Signature.Family = 2#0101# and - Signature.Model = 2#0100# then - Type_Found := True; - Ada.Text_IO.Put_Line - ("Pentium processor with MMX technology (166, 200)"); - end if; - - -- Pentium OverDrive with MMX for Pentium (75, 90, 100, 120, 133) - if Signature.Processor_Type = 2#01# and - Signature.Family = 2#0101# and - Signature.Model = 2#0100# then - Type_Found := True; - Ada.Text_IO.Put_Line - ("Pentium OverDrive processor with MMX " & - "technology for Pentium processor (75, 90, 100, 120, 133)"); - end if; - - -- Pentium Pro processor - if Signature.Processor_Type = 2#00# and - Signature.Family = 2#0110# and - Signature.Model = 2#0001# then - Type_Found := True; - Ada.Text_IO.Put_Line ("Pentium Pro processor"); - end if; - - -- Pentium II processor, model 3 - if Signature.Processor_Type = 2#00# and - Signature.Family = 2#0110# and - Signature.Model = 2#0011# then - Type_Found := True; - Ada.Text_IO.Put_Line ("Pentium II processor, model 3"); - end if; - - -- Pentium II processor, model 5 or Celeron processor - if Signature.Processor_Type = 2#00# and - Signature.Family = 2#0110# and - Signature.Model = 2#0101# then - Type_Found := True; - Ada.Text_IO.Put_Line - ("Pentium II processor, model 5 or Celeron processor"); - end if; - - -- Pentium Pro OverDrive processor - if Signature.Processor_Type = 2#01# and - Signature.Family = 2#0110# and - Signature.Model = 2#0011# then - Type_Found := True; - Ada.Text_IO.Put_Line ("Pentium Pro OverDrive processor"); - end if; - - -- If no type recognized, we have an unknown. Display what - -- we _do_ know - if Type_Found = False then - Ada.Text_IO.Put_Line ("Unknown processor"); - end if; - - ----------------------------------------- - -- Display processor stepping level. -- - ----------------------------------------- - - Ada.Text_IO.Put_Line ("Stepping level:" & Signature.Stepping'Img); - - --------------------------------- - -- Display vendor ID string. -- - --------------------------------- - - Ada.Text_IO.Put_Line ("Vendor ID: " & Intel_CPU.Vendor_ID); - - ------------------------------------ - -- Get the processors features. -- - ------------------------------------ - - Features := Intel_CPU.Features; - - ----------------------------- - -- Check for a FPU unit. -- - ----------------------------- - - if Features.FPU = True then - Ada.Text_IO.Put_Line ("Floating-Point unit available"); - else - Ada.Text_IO.Put_Line ("no Floating-Point unit"); - end if; -- check for FPU - - -------------------------------- - -- List processor features. -- - -------------------------------- - - Ada.Text_IO.Put_Line ("Supported features: "); - - -- Virtual Mode Extension - if Features.VME = True then - Ada.Text_IO.Put_Line (" VME - Virtual Mode Extension"); - end if; - - -- Debugging Extension - if Features.DE = True then - Ada.Text_IO.Put_Line (" DE - Debugging Extension"); - end if; - - -- Page Size Extension - if Features.PSE = True then - Ada.Text_IO.Put_Line (" PSE - Page Size Extension"); - end if; - - -- Time Stamp Counter - if Features.TSC = True then - Ada.Text_IO.Put_Line (" TSC - Time Stamp Counter"); - end if; - - -- Model Specific Registers - if Features.MSR = True then - Ada.Text_IO.Put_Line (" MSR - Model Specific Registers"); - end if; - - -- Physical Address Extension - if Features.PAE = True then - Ada.Text_IO.Put_Line (" PAE - Physical Address Extension"); - end if; - - -- Machine Check Extension - if Features.MCE = True then - Ada.Text_IO.Put_Line (" MCE - Machine Check Extension"); - end if; - - -- CMPXCHG8 instruction supported - if Features.CX8 = True then - Ada.Text_IO.Put_Line (" CX8 - CMPXCHG8 instruction"); - end if; - - -- on-chip APIC hardware support - if Features.APIC = True then - Ada.Text_IO.Put_Line (" APIC - on-chip APIC hardware support"); - end if; - - -- Fast System Call - if Features.SEP = True then - Ada.Text_IO.Put_Line (" SEP - Fast System Call"); - end if; - - -- Memory Type Range Registers - if Features.MTRR = True then - Ada.Text_IO.Put_Line (" MTTR - Memory Type Range Registers"); - end if; - - -- Page Global Enable - if Features.PGE = True then - Ada.Text_IO.Put_Line (" PGE - Page Global Enable"); - end if; - - -- Machine Check Architecture - if Features.MCA = True then - Ada.Text_IO.Put_Line (" MCA - Machine Check Architecture"); - end if; - - -- Conditional Move Instruction Supported - if Features.CMOV = True then - Ada.Text_IO.Put_Line - (" CMOV - Conditional Move Instruction Supported"); - end if; - - -- Page Attribute Table - if Features.PAT = True then - Ada.Text_IO.Put_Line (" PAT - Page Attribute Table"); - end if; - - -- 36-bit Page Size Extension - if Features.PSE_36 = True then - Ada.Text_IO.Put_Line (" PSE_36 - 36-bit Page Size Extension"); - end if; - - -- MMX technology supported - if Features.MMX = True then - Ada.Text_IO.Put_Line (" MMX - MMX technology supported"); - end if; - - -- Fast FP Save and Restore - if Features.FXSR = True then - Ada.Text_IO.Put_Line (" FXSR - Fast FP Save and Restore"); - end if; - - --------------------- - -- Program done. -- - --------------------- - - Ada.Command_Line.Set_Exit_Status (Ada.Command_Line.Success); - - exception - - when others => - Ada.Command_Line.Set_Exit_Status (Ada.Command_Line.Failure); - raise; - - end Check_CPU; - -  - File: gnat_ug_unx.info, Node: Intel_CPU Package Specification, Next: Intel_CPU Package Body, Prev: Check_CPU Procedure, Up: A Complete Example - - `Intel_CPU' Package Specification - --------------------------------- - - ------------------------------------------------------------------------- - -- -- - -- file: intel_cpu.ads -- - -- -- - -- ********************************************* -- - -- * WARNING: for 32-bit Intel processors only * -- - -- ********************************************* -- - -- -- - -- This package contains a number of subprograms that are useful in -- - -- determining the Intel x86 CPU (and the features it supports) on -- - -- which the program is running. -- - -- -- - -- The package is based upon the information given in the Intel -- - -- Application Note AP-485: "Intel Processor Identification and the -- - -- CPUID Instruction" as of April 1998. This application note can be -- - -- found on www.intel.com. -- - -- -- - -- It currently deals with 32-bit processors only, will not detect -- - -- features added after april 1998, and does not guarantee proper -- - -- results on Intel-compatible processors. -- - -- -- - -- Cache info and x386 fpu type detection are not supported. -- - -- -- - -- This package does not use any privileged instructions, so should -- - -- work on any OS running on a 32-bit Intel processor. -- - -- -- - ------------------------------------------------------------------------- - - with Interfaces; use Interfaces; - -- for using unsigned types - - with System.Machine_Code; use System.Machine_Code; - -- for using inline assembler code - - with Ada.Characters.Latin_1; use Ada.Characters.Latin_1; - -- for inserting control characters - - package Intel_CPU is - - ---------------------- - -- Processor bits -- - ---------------------- - - subtype Num_Bits is Natural range 0 .. 31; - -- the number of processor bits (32) - - -------------------------- - -- Processor register -- - -------------------------- - - -- define a processor register type for easy access to - -- the individual bits - - type Processor_Register is array (Num_Bits) of Boolean; - pragma Pack (Processor_Register); - for Processor_Register'Size use 32; - - ------------------------- - -- Unsigned register -- - ------------------------- - - -- define a processor register type for easy access to - -- the individual bytes - - type Unsigned_Register is - record - L1 : Unsigned_8; - H1 : Unsigned_8; - L2 : Unsigned_8; - H2 : Unsigned_8; - end record; - - for Unsigned_Register use - record - L1 at 0 range 0 .. 7; - H1 at 0 range 8 .. 15; - L2 at 0 range 16 .. 23; - H2 at 0 range 24 .. 31; - end record; - - for Unsigned_Register'Size use 32; - - --------------------------------- - -- Intel processor vendor ID -- - --------------------------------- - - Intel_Processor : constant String (1 .. 12) := "GenuineIntel"; - -- indicates an Intel manufactured processor - - ------------------------------------ - -- Processor signature register -- - ------------------------------------ - - -- a register type to hold the processor signature - - type Processor_Signature is - record - Stepping : Natural range 0 .. 15; - Model : Natural range 0 .. 15; - Family : Natural range 0 .. 15; - Processor_Type : Natural range 0 .. 3; - Reserved : Natural range 0 .. 262143; - end record; - - for Processor_Signature use - record - Stepping at 0 range 0 .. 3; - Model at 0 range 4 .. 7; - Family at 0 range 8 .. 11; - Processor_Type at 0 range 12 .. 13; - Reserved at 0 range 14 .. 31; - end record; - - for Processor_Signature'Size use 32; - - ----------------------------------- - -- Processor features register -- - ----------------------------------- - - -- a processor register to hold the processor feature flags - - type Processor_Features is - record - FPU : Boolean; -- floating point unit on chip - VME : Boolean; -- virtual mode extension - DE : Boolean; -- debugging extension - PSE : Boolean; -- page size extension - TSC : Boolean; -- time stamp counter - MSR : Boolean; -- model specific registers - PAE : Boolean; -- physical address extension - MCE : Boolean; -- machine check extension - CX8 : Boolean; -- cmpxchg8 instruction - APIC : Boolean; -- on-chip apic hardware - Res_1 : Boolean; -- reserved for extensions - SEP : Boolean; -- fast system call - MTRR : Boolean; -- memory type range registers - PGE : Boolean; -- page global enable - MCA : Boolean; -- machine check architecture - CMOV : Boolean; -- conditional move supported - PAT : Boolean; -- page attribute table - PSE_36 : Boolean; -- 36-bit page size extension - Res_2 : Natural range 0 .. 31; -- reserved for extensions - MMX : Boolean; -- MMX technology supported - FXSR : Boolean; -- fast FP save and restore - Res_3 : Natural range 0 .. 127; -- reserved for extensions - end record; - - for Processor_Features use - record - FPU at 0 range 0 .. 0; - VME at 0 range 1 .. 1; - DE at 0 range 2 .. 2; - PSE at 0 range 3 .. 3; - TSC at 0 range 4 .. 4; - MSR at 0 range 5 .. 5; - PAE at 0 range 6 .. 6; - MCE at 0 range 7 .. 7; - CX8 at 0 range 8 .. 8; - APIC at 0 range 9 .. 9; - Res_1 at 0 range 10 .. 10; - SEP at 0 range 11 .. 11; - MTRR at 0 range 12 .. 12; - PGE at 0 range 13 .. 13; - MCA at 0 range 14 .. 14; - CMOV at 0 range 15 .. 15; - PAT at 0 range 16 .. 16; - PSE_36 at 0 range 17 .. 17; - Res_2 at 0 range 18 .. 22; - MMX at 0 range 23 .. 23; - FXSR at 0 range 24 .. 24; - Res_3 at 0 range 25 .. 31; - end record; - - for Processor_Features'Size use 32; - - ------------------- - -- Subprograms -- - ------------------- - - function Has_FPU return Boolean; - -- return True if a FPU is found - -- use only if CPUID is not supported - - function Has_CPUID return Boolean; - -- return True if the processor supports the CPUID instruction - - function CPUID_Level return Natural; - -- return the CPUID support level (0, 1 or 2) - -- can only be called if the CPUID instruction is supported - - function Vendor_ID return String; - -- return the processor vendor identification string - -- can only be called if the CPUID instruction is supported - - function Signature return Processor_Signature; - -- return the processor signature - -- can only be called if the CPUID instruction is supported - - function Features return Processor_Features; - -- return the processors features - -- can only be called if the CPUID instruction is supported - - private - - ------------------------ - -- EFLAGS bit names -- - ------------------------ - - ID_Flag : constant Num_Bits := 21; - -- ID flag bit - - end Intel_CPU; - -  - File: gnat_ug_unx.info, Node: Intel_CPU Package Body, Prev: Intel_CPU Package Specification, Up: A Complete Example - - `Intel_CPU' Package Body - ------------------------ - - package body Intel_CPU is - - --------------------------- - -- Detect FPU presence -- - --------------------------- - - -- There is a FPU present if we can set values to the FPU Status - -- and Control Words. - - function Has_FPU return Boolean is - - Register : Unsigned_16; - -- processor register to store a word - - begin - - -- check if we can change the status word - Asm ( - - -- the assembler code - "finit" & LF & HT & -- reset status word - "movw $0x5A5A, %%ax" & LF & HT & -- set value status word - "fnstsw %0" & LF & HT & -- save status word - "movw %%ax, %0", -- store status word - - -- output stored in Register - -- register must be a memory location - Outputs => Unsigned_16'Asm_output ("=m", Register), - - -- tell compiler that we used eax - Clobber => "eax"); - - -- if the status word is zero, there is no FPU - if Register = 0 then - return False; -- no status word - end if; -- check status word value - - -- check if we can get the control word - Asm ( - - -- the assembler code - "fnstcw %0", -- save the control word - - -- output into Register - -- register must be a memory location - Outputs => Unsigned_16'Asm_output ("=m", Register)); - - -- check the relevant bits - if (Register and 16#103F#) /= 16#003F# then - return False; -- no control word - end if; -- check control word value - - -- FPU found - return True; - - end Has_FPU; - - -------------------------------- - -- Detect CPUID instruction -- - -------------------------------- - - -- The processor supports the CPUID instruction if it is possible - -- to change the value of ID flag bit in the EFLAGS register. - - function Has_CPUID return Boolean is - - Original_Flags, Modified_Flags : Processor_Register; - -- EFLAG contents before and after changing the ID flag - - begin - - -- try flipping the ID flag in the EFLAGS register - Asm ( - - -- the assembler code - "pushfl" & LF & HT & -- push EFLAGS on stack - "pop %%eax" & LF & HT & -- pop EFLAGS into eax - "movl %%eax, %0" & LF & HT & -- save EFLAGS content - "xor $0x200000, %%eax" & LF & HT & -- flip ID flag - "push %%eax" & LF & HT & -- push EFLAGS on stack - "popfl" & LF & HT & -- load EFLAGS register - "pushfl" & LF & HT & -- push EFLAGS on stack - "pop %1", -- save EFLAGS content - - -- output values, may be anything - -- Original_Flags is %0 - -- Modified_Flags is %1 - Outputs => - (Processor_Register'Asm_output ("=g", Original_Flags), - Processor_Register'Asm_output ("=g", Modified_Flags)), - - -- tell compiler eax is destroyed - Clobber => "eax"); - - -- check if CPUID is supported - if Original_Flags(ID_Flag) /= Modified_Flags(ID_Flag) then - return True; -- ID flag was modified - else - return False; -- ID flag unchanged - end if; -- check for CPUID - - end Has_CPUID; - - ------------------------------- - -- Get CPUID support level -- - ------------------------------- - - function CPUID_Level return Natural is - - Level : Unsigned_32; - -- returned support level - - begin - - -- execute CPUID, storing the results in the Level register - Asm ( - - -- the assembler code - "cpuid", -- execute CPUID - - -- zero is stored in eax - -- returning the support level in eax - Inputs => Unsigned_32'Asm_input ("a", 0), - - -- eax is stored in Level - Outputs => Unsigned_32'Asm_output ("=a", Level), - - -- tell compiler ebx, ecx and edx registers are destroyed - Clobber => "ebx, ecx, edx"); - - -- return the support level - return Natural (Level); - - end CPUID_Level; - - -------------------------------- - -- Get CPU Vendor ID String -- - -------------------------------- - - -- The vendor ID string is returned in the ebx, ecx and edx register - -- after executing the CPUID instruction with eax set to zero. - -- In case of a true Intel processor the string returned is - -- "GenuineIntel" - - function Vendor_ID return String is - - Ebx, Ecx, Edx : Unsigned_Register; - -- registers containing the vendor ID string - - Vendor_ID : String (1 .. 12); - -- the vendor ID string - - begin - - -- execute CPUID, storing the results in the processor registers - Asm ( - - -- the assembler code - "cpuid", -- execute CPUID - - -- zero stored in eax - -- vendor ID string returned in ebx, ecx and edx - Inputs => Unsigned_32'Asm_input ("a", 0), - - -- ebx is stored in Ebx - -- ecx is stored in Ecx - -- edx is stored in Edx - Outputs => (Unsigned_Register'Asm_output ("=b", Ebx), - Unsigned_Register'Asm_output ("=c", Ecx), - Unsigned_Register'Asm_output ("=d", Edx))); - - -- now build the vendor ID string - Vendor_ID( 1) := Character'Val (Ebx.L1); - Vendor_ID( 2) := Character'Val (Ebx.H1); - Vendor_ID( 3) := Character'Val (Ebx.L2); - Vendor_ID( 4) := Character'Val (Ebx.H2); - Vendor_ID( 5) := Character'Val (Edx.L1); - Vendor_ID( 6) := Character'Val (Edx.H1); - Vendor_ID( 7) := Character'Val (Edx.L2); - Vendor_ID( 8) := Character'Val (Edx.H2); - Vendor_ID( 9) := Character'Val (Ecx.L1); - Vendor_ID(10) := Character'Val (Ecx.H1); - Vendor_ID(11) := Character'Val (Ecx.L2); - Vendor_ID(12) := Character'Val (Ecx.H2); - - -- return string - return Vendor_ID; - - end Vendor_ID; - - ------------------------------- - -- Get processor signature -- - ------------------------------- - - function Signature return Processor_Signature is - - Result : Processor_Signature; - -- processor signature returned - - begin - - -- execute CPUID, storing the results in the Result variable - Asm ( - - -- the assembler code - "cpuid", -- execute CPUID - - -- one is stored in eax - -- processor signature returned in eax - Inputs => Unsigned_32'Asm_input ("a", 1), - - -- eax is stored in Result - Outputs => Processor_Signature'Asm_output ("=a", Result), - - -- tell compiler that ebx, ecx and edx are also destroyed - Clobber => "ebx, ecx, edx"); - - -- return processor signature - return Result; - - end Signature; - - ------------------------------ - -- Get processor features -- - ------------------------------ - - function Features return Processor_Features is - - Result : Processor_Features; - -- processor features returned - - begin - - -- execute CPUID, storing the results in the Result variable - Asm ( - - -- the assembler code - "cpuid", -- execute CPUID - - -- one stored in eax - -- processor features returned in edx - Inputs => Unsigned_32'Asm_input ("a", 1), - - -- edx is stored in Result - Outputs => Processor_Features'Asm_output ("=d", Result), - - -- tell compiler that ebx and ecx are also destroyed - Clobber => "ebx, ecx"); - - -- return processor signature - return Result; - - end Features; - - end Intel_CPU; - -  - File: gnat_ug_unx.info, Node: Performance Considerations, Next: GNU Free Documentation License, Prev: Inline Assembler, Up: Top - - Performance Considerations - ************************** - - The GNAT system provides a number of options that allow a trade-off - between - - * performance of the generated code - - * speed of compilation - - * minimization of dependences and recompilation - - * the degree of run-time checking. - - The defaults (if no options are selected) aim at improving the speed of - compilation and minimizing dependences, at the expense of performance - of the generated code: - - * no optimization - - * no inlining of subprogram calls - - * all run-time checks enabled except overflow and elaboration checks - - These options are suitable for most program development purposes. This - chapter describes how you can modify these choices, and also provides - some guidelines on debugging optimized code. - - * Menu: - - * Controlling Run-Time Checks:: - * Optimization Levels:: - * Debugging Optimized Code:: - * Inlining of Subprograms:: - -  - File: gnat_ug_unx.info, Node: Controlling Run-Time Checks, Next: Optimization Levels, Up: Performance Considerations - - Controlling Run-Time Checks - =========================== - - By default, GNAT generates all run-time checks, except arithmetic - overflow checking for integer operations and checks for access before - elaboration on subprogram calls. The latter are not required in default - mode, because all necessary checking is done at compile time. Two gnat - switches, `-gnatp' and `-gnato' allow this default to be modified. - *Note Run-Time Checks::. - - Our experience is that the default is suitable for most development - purposes. - - We treat integer overflow specially because these are quite - expensive and in our experience are not as important as other run-time - checks in the development process. Note that division by zero is not - considered an overflow check, and divide by zero checks are generated - where required by default. - - Elaboration checks are off by default, and also not needed by - default, since GNAT uses a static elaboration analysis approach that - avoids the need for run-time checking. This manual contains a full - chapter discussing the issue of elaboration checks, and if the default - is not satisfactory for your use, you should read this chapter. - - For validity checks, the minimal checks required by the Ada Reference - Manual (for case statements and assignments to array elements) are on - by default. These can be suppressed by use of the `-gnatVn' switch. - Note that in Ada 83, there were no validity checks, so if the Ada 83 - mode is acceptable (or when comparing GNAT performance with an Ada 83 - compiler), it may be reasonable to routinely use `-gnatVn'. Validity - checks are also suppressed entirely if `-gnatp' is used. - - Note that the setting of the switches controls the default setting of - the checks. They may be modified using either `pragma Suppress' (to - remove checks) or `pragma Unsuppress' (to add back suppressed checks) - in the program source. - -  - File: gnat_ug_unx.info, Node: Optimization Levels, Next: Debugging Optimized Code, Prev: Controlling Run-Time Checks, Up: Performance Considerations - - Optimization Levels - =================== - - The default is optimization off. This results in the fastest compile - times, but GNAT makes absolutely no attempt to optimize, and the - generated programs are considerably larger and slower than when - optimization is enabled. You can use the `-ON' switch, where N is an - integer from 0 to 3, on the `gcc' command line to control the - optimization level: - - `-O0' - no optimization (the default) - - `-O1' - medium level optimization - - `-O2' - full optimization - - `-O3' - full optimization, and also attempt automatic inlining of small - subprograms within a unit (*note Inlining of Subprograms::). - - Higher optimization levels perform more global transformations on the - program and apply more expensive analysis algorithms in order to - generate faster and more compact code. The price in compilation time, - and the resulting improvement in execution time, both depend on the - particular application and the hardware environment. You should - experiment to find the best level for your application. - - Note: Unlike some other compilation systems, `gcc' has been tested - extensively at all optimization levels. There are some bugs which - appear only with optimization turned on, but there have also been bugs - which show up only in _unoptimized_ code. Selecting a lower level of - optimization does not improve the reliability of the code generator, - which in practice is highly reliable at all optimization levels. - - Note regarding the use of `-O3': The use of this optimization level - is generally discouraged with GNAT, since it often results in larger - executables which run more slowly. See further discussion of this point - in *note Inlining of Subprograms::. - -  - File: gnat_ug_unx.info, Node: Debugging Optimized Code, Next: Inlining of Subprograms, Prev: Optimization Levels, Up: Performance Considerations - - Debugging Optimized Code - ======================== - - Since the compiler generates debugging tables for a compilation unit - before it performs optimizations, the optimizing transformations may - invalidate some of the debugging data. You therefore need to - anticipate certain anomalous situations that may arise while debugging - optimized code. This section describes the most common cases. - - 1. The "hopping Program Counter": Repeated 'step' or 'next' commands - show the PC bouncing back and forth in the code. This may result - from any of the following optimizations: - - * Common subexpression elimination: using a single instance of - code for a quantity that the source computes several times. - As a result you may not be able to stop on what looks like a - statement. - - * Invariant code motion: moving an expression that does not - change within a loop, to the beginning of the loop. - - * Instruction scheduling: moving instructions so as to overlap - loads and stores (typically) with other code, or in general - to move computations of values closer to their uses. Often - this causes you to pass an assignment statement without the - assignment happening and then later bounce back to the - statement when the value is actually needed. Placing a - breakpoint on a line of code and then stepping over it may, - therefore, not always cause all the expected side-effects. - - 2. The "big leap": More commonly known as cross-jumping, in which two - identical pieces of code are merged and the program counter - suddenly jumps to a statement that is not supposed to be executed, - simply because it (and the code following) translates to the same - thing as the code that _was_ supposed to be executed. This effect - is typically seen in sequences that end in a jump, such as a - `goto', a `return', or a `break' in a C `switch' statement. - - 3. The "roving variable": The symptom is an unexpected value in a - variable. There are various reasons for this effect: - - * In a subprogram prologue, a parameter may not yet have been - moved to its "home". - - * A variable may be dead, and its register re-used. This is - probably the most common cause. - - * As mentioned above, the assignment of a value to a variable - may have been moved. - - * A variable may be eliminated entirely by value propagation or - other means. In this case, GCC may incorrectly generate - debugging information for the variable - - In general, when an unexpected value appears for a local variable - or parameter you should first ascertain if that value was actually - computed by your program, as opposed to being incorrectly reported - by the debugger. Record fields or array elements in an object - designated by an access value are generally less of a problem, - once you have ascertained that the access value is sensible. - Typically, this means checking variables in the preceding code and - in the calling subprogram to verify that the value observed is - explainable from other values (one must apply the procedure - recursively to those other values); or re-running the code and - stopping a little earlier (perhaps before the call) and stepping - to better see how the variable obtained the value in question; or - continuing to step _from_ the point of the strange value to see if - code motion had simply moved the variable's assignments later. - -  - File: gnat_ug_unx.info, Node: Inlining of Subprograms, Prev: Debugging Optimized Code, Up: Performance Considerations - - Inlining of Subprograms - ======================= - - A call to a subprogram in the current unit is inlined if all the - following conditions are met: - - * The optimization level is at least `-O1'. - - * The called subprogram is suitable for inlining: It must be small - enough and not contain nested subprograms or anything else that - `gcc' cannot support in inlined subprograms. - - * The call occurs after the definition of the body of the subprogram. - - * Either `pragma Inline' applies to the subprogram or it is small - and automatic inlining (optimization level `-O3') is specified. - - Calls to subprograms in `with''ed units are normally not inlined. To - achieve this level of inlining, the following conditions must all be - true: - - * The optimization level is at least `-O1'. - - * The called subprogram is suitable for inlining: It must be small - enough and not contain nested subprograms or anything else `gcc' - cannot support in inlined subprograms. - - * The call appears in a body (not in a package spec). - - * There is a `pragma Inline' for the subprogram. - - * The `-gnatn' switch is used in the `gcc' command line - - Note that specifying the `-gnatn' switch causes additional - compilation dependencies. Consider the following: - - package R is - procedure Q; - pragma Inline (Q); - end R; - package body R is - ... - end R; - - with R; - procedure Main is - begin - ... - R.Q; - end Main; - - With the default behavior (no `-gnatn' switch specified), the - compilation of the `Main' procedure depends only on its own source, - `main.adb', and the spec of the package in file `r.ads'. This means - that editing the body of `R' does not require recompiling `Main'. - - On the other hand, the call `R.Q' is not inlined under these - circumstances. If the `-gnatn' switch is present when `Main' is - compiled, the call will be inlined if the body of `Q' is small enough, - but now `Main' depends on the body of `R' in `r.adb' as well as on the - spec. This means that if this body is edited, the main program must be - recompiled. Note that this extra dependency occurs whether or not the - call is in fact inlined by `gcc'. - - The use of front end inlining with `-gnatN' generates similar - additional dependencies. - - Note: The `-fno-inline' switch can be used to prevent all inlining. - This switch overrides all other conditions and ensures that no inlining - occurs. The extra dependences resulting from `-gnatn' will still be - active, even if this switch is used to suppress the resulting inlining - actions. - - Note regarding the use of `-O3': There is no difference in inlining - behavior between `-O2' and `-O3' for subprograms with an explicit - pragma `Inline' assuming the use of `-gnatn' or `-gnatN' (the switches - that activate inlining). If you have used pragma `Inline' in - appropriate cases, then it is usually much better to use `-O2' and - `-gnatn' and avoid the use of `-O3' which in this case only has the - effect of inlining subprograms you did not think should be inlined. We - often find that the use of `-O3' slows down code by performing - excessive inlining, leading to increased instruction cache pressure - from the increased code size. So the bottom line here is that you - should not automatically assume that `-O3' is better than `-O2', and - indeed you should use `-O3' only if tests show that it actually - improves performance. - -  - File: gnat_ug_unx.info, Node: GNU Free Documentation License, Next: Index, Prev: Performance Considerations, Up: Top - - GNU Free Documentation License - ****************************** - - Version 1.2, November 2002 - Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA - - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - 0. PREAMBLE - - The purpose of this License is to make a manual, textbook, or other - functional and useful document "free" in the sense of freedom: to - assure everyone the effective freedom to copy and redistribute it, - with or without modifying it, either commercially or - noncommercially. Secondarily, this License preserves for the - author and publisher a way to get credit for their work, while not - being considered responsible for modifications made by others. - - This License is a kind of "copyleft", which means that derivative - works of the document must themselves be free in the same sense. - It complements the GNU General Public License, which is a copyleft - license designed for free software. - - We have designed this License in order to use it for manuals for - free software, because free software needs free documentation: a - free program should come with manuals providing the same freedoms - that the software does. But this License is not limited to - software manuals; it can be used for any textual work, regardless - of subject matter or whether it is published as a printed book. - We recommend this License principally for works whose purpose is - instruction or reference. - - 1. APPLICABILITY AND DEFINITIONS - - This License applies to any manual or other work, in any medium, - that contains a notice placed by the copyright holder saying it - can be distributed under the terms of this License. Such a notice - grants a world-wide, royalty-free license, unlimited in duration, - to use that work under the conditions stated herein. The - "Document", below, refers to any such manual or work. Any member - of the public is a licensee, and is addressed as "you". You - accept the license if you copy, modify or distribute the work in a - way requiring permission under copyright law. - - A "Modified Version" of the Document means any work containing the - Document or a portion of it, either copied verbatim, or with - modifications and/or translated into another language. - - A "Secondary Section" is a named appendix or a front-matter section - of the Document that deals exclusively with the relationship of the - publishers or authors of the Document to the Document's overall - subject (or to related matters) and contains nothing that could - fall directly within that overall subject. (Thus, if the Document - is in part a textbook of mathematics, a Secondary Section may not - explain any mathematics.) The relationship could be a matter of - historical connection with the subject or with related matters, or - of legal, commercial, philosophical, ethical or political position - regarding them. - - The "Invariant Sections" are certain Secondary Sections whose - titles are designated, as being those of Invariant Sections, in - the notice that says that the Document is released under this - License. If a section does not fit the above definition of - Secondary then it is not allowed to be designated as Invariant. - The Document may contain zero Invariant Sections. If the Document - does not identify any Invariant Sections then there are none. - - The "Cover Texts" are certain short passages of text that are - listed, as Front-Cover Texts or Back-Cover Texts, in the notice - that says that the Document is released under this License. A - Front-Cover Text may be at most 5 words, and a Back-Cover Text may - be at most 25 words. - - A "Transparent" copy of the Document means a machine-readable copy, - represented in a format whose specification is available to the - general public, that is suitable for revising the document - straightforwardly with generic text editors or (for images - composed of pixels) generic paint programs or (for drawings) some - widely available drawing editor, and that is suitable for input to - text formatters or for automatic translation to a variety of - formats suitable for input to text formatters. A copy made in an - otherwise Transparent file format whose markup, or absence of - markup, has been arranged to thwart or discourage subsequent - modification by readers is not Transparent. An image format is - not Transparent if used for any substantial amount of text. A - copy that is not "Transparent" is called "Opaque". - - Examples of suitable formats for Transparent copies include plain - ASCII without markup, Texinfo input format, LaTeX input format, - SGML or XML using a publicly available DTD, and - standard-conforming simple HTML, PostScript or PDF designed for - human modification. Examples of transparent image formats include - PNG, XCF and JPG. Opaque formats include proprietary formats that - can be read and edited only by proprietary word processors, SGML or - XML for which the DTD and/or processing tools are not generally - available, and the machine-generated HTML, PostScript or PDF - produced by some word processors for output purposes only. - - The "Title Page" means, for a printed book, the title page itself, - plus such following pages as are needed to hold, legibly, the - material this License requires to appear in the title page. For - works in formats which do not have any title page as such, "Title - Page" means the text near the most prominent appearance of the - work's title, preceding the beginning of the body of the text. - - A section "Entitled XYZ" means a named subunit of the Document - whose title either is precisely XYZ or contains XYZ in parentheses - following text that translates XYZ in another language. (Here XYZ - stands for a specific section name mentioned below, such as - "Acknowledgements", "Dedications", "Endorsements", or "History".) - To "Preserve the Title" of such a section when you modify the - Document means that it remains a section "Entitled XYZ" according - to this definition. - - The Document may include Warranty Disclaimers next to the notice - which states that this License applies to the Document. These - Warranty Disclaimers are considered to be included by reference in - this License, but only as regards disclaiming warranties: any other - implication that these Warranty Disclaimers may have is void and - has no effect on the meaning of this License. - - 2. VERBATIM COPYING - - You may copy and distribute the Document in any medium, either - commercially or noncommercially, provided that this License, the - copyright notices, and the license notice saying this License - applies to the Document are reproduced in all copies, and that you - add no other conditions whatsoever to those of this License. You - may not use technical measures to obstruct or control the reading - or further copying of the copies you make or distribute. However, - you may accept compensation in exchange for copies. If you - distribute a large enough number of copies you must also follow - the conditions in section 3. - - You may also lend copies, under the same conditions stated above, - and you may publicly display copies. - - 3. COPYING IN QUANTITY - - If you publish printed copies (or copies in media that commonly - have printed covers) of the Document, numbering more than 100, and - the Document's license notice requires Cover Texts, you must - enclose the copies in covers that carry, clearly and legibly, all - these Cover Texts: Front-Cover Texts on the front cover, and - Back-Cover Texts on the back cover. Both covers must also clearly - and legibly identify you as the publisher of these copies. The - front cover must present the full title with all words of the - title equally prominent and visible. You may add other material - on the covers in addition. Copying with changes limited to the - covers, as long as they preserve the title of the Document and - satisfy these conditions, can be treated as verbatim copying in - other respects. - - If the required texts for either cover are too voluminous to fit - legibly, you should put the first ones listed (as many as fit - reasonably) on the actual cover, and continue the rest onto - adjacent pages. - - If you publish or distribute Opaque copies of the Document - numbering more than 100, you must either include a - machine-readable Transparent copy along with each Opaque copy, or - state in or with each Opaque copy a computer-network location from - which the general network-using public has access to download - using public-standard network protocols a complete Transparent - copy of the Document, free of added material. If you use the - latter option, you must take reasonably prudent steps, when you - begin distribution of Opaque copies in quantity, to ensure that - this Transparent copy will remain thus accessible at the stated - location until at least one year after the last time you - distribute an Opaque copy (directly or through your agents or - retailers) of that edition to the public. - - It is requested, but not required, that you contact the authors of - the Document well before redistributing any large number of - copies, to give them a chance to provide you with an updated - version of the Document. - - 4. MODIFICATIONS - - You may copy and distribute a Modified Version of the Document - under the conditions of sections 2 and 3 above, provided that you - release the Modified Version under precisely this License, with - the Modified Version filling the role of the Document, thus - licensing distribution and modification of the Modified Version to - whoever possesses a copy of it. In addition, you must do these - things in the Modified Version: - - A. Use in the Title Page (and on the covers, if any) a title - distinct from that of the Document, and from those of - previous versions (which should, if there were any, be listed - in the History section of the Document). You may use the - same title as a previous version if the original publisher of - that version gives permission. - - B. List on the Title Page, as authors, one or more persons or - entities responsible for authorship of the modifications in - the Modified Version, together with at least five of the - principal authors of the Document (all of its principal - authors, if it has fewer than five), unless they release you - from this requirement. - - C. State on the Title page the name of the publisher of the - Modified Version, as the publisher. - - D. Preserve all the copyright notices of the Document. - - E. Add an appropriate copyright notice for your modifications - adjacent to the other copyright notices. - - F. Include, immediately after the copyright notices, a license - notice giving the public permission to use the Modified - Version under the terms of this License, in the form shown in - the Addendum below. - - G. Preserve in that license notice the full lists of Invariant - Sections and required Cover Texts given in the Document's - license notice. - - H. Include an unaltered copy of this License. - - I. Preserve the section Entitled "History", Preserve its Title, - and add to it an item stating at least the title, year, new - authors, and publisher of the Modified Version as given on - the Title Page. If there is no section Entitled "History" in - the Document, create one stating the title, year, authors, - and publisher of the Document as given on its Title Page, - then add an item describing the Modified Version as stated in - the previous sentence. - - J. Preserve the network location, if any, given in the Document - for public access to a Transparent copy of the Document, and - likewise the network locations given in the Document for - previous versions it was based on. These may be placed in - the "History" section. You may omit a network location for a - work that was published at least four years before the - Document itself, or if the original publisher of the version - it refers to gives permission. - - K. For any section Entitled "Acknowledgements" or "Dedications", - Preserve the Title of the section, and preserve in the - section all the substance and tone of each of the contributor - acknowledgements and/or dedications given therein. - - L. Preserve all the Invariant Sections of the Document, - unaltered in their text and in their titles. Section numbers - or the equivalent are not considered part of the section - titles. - - M. Delete any section Entitled "Endorsements". Such a section - may not be included in the Modified Version. - - N. Do not retitle any existing section to be Entitled - "Endorsements" or to conflict in title with any Invariant - Section. - - O. Preserve any Warranty Disclaimers. - - If the Modified Version includes new front-matter sections or - appendices that qualify as Secondary Sections and contain no - material copied from the Document, you may at your option - designate some or all of these sections as invariant. To do this, - add their titles to the list of Invariant Sections in the Modified - Version's license notice. These titles must be distinct from any - other section titles. - - You may add a section Entitled "Endorsements", provided it contains - nothing but endorsements of your Modified Version by various - parties--for example, statements of peer review or that the text - has been approved by an organization as the authoritative - definition of a standard. - - You may add a passage of up to five words as a Front-Cover Text, - and a passage of up to 25 words as a Back-Cover Text, to the end - of the list of Cover Texts in the Modified Version. Only one - passage of Front-Cover Text and one of Back-Cover Text may be - added by (or through arrangements made by) any one entity. If the - Document already includes a cover text for the same cover, - previously added by you or by arrangement made by the same entity - you are acting on behalf of, you may not add another; but you may - replace the old one, on explicit permission from the previous - publisher that added the old one. - - The author(s) and publisher(s) of the Document do not by this - License give permission to use their names for publicity for or to - assert or imply endorsement of any Modified Version. - - 5. COMBINING DOCUMENTS - - You may combine the Document with other documents released under - this License, under the terms defined in section 4 above for - modified versions, provided that you include in the combination - all of the Invariant Sections of all of the original documents, - unmodified, and list them all as Invariant Sections of your - combined work in its license notice, and that you preserve all - their Warranty Disclaimers. - - The combined work need only contain one copy of this License, and - multiple identical Invariant Sections may be replaced with a single - copy. If there are multiple Invariant Sections with the same name - but different contents, make the title of each such section unique - by adding at the end of it, in parentheses, the name of the - original author or publisher of that section if known, or else a - unique number. Make the same adjustment to the section titles in - the list of Invariant Sections in the license notice of the - combined work. - - In the combination, you must combine any sections Entitled - "History" in the various original documents, forming one section - Entitled "History"; likewise combine any sections Entitled - "Acknowledgements", and any sections Entitled "Dedications". You - must delete all sections Entitled "Endorsements." - - 6. COLLECTIONS OF DOCUMENTS - - You may make a collection consisting of the Document and other - documents released under this License, and replace the individual - copies of this License in the various documents with a single copy - that is included in the collection, provided that you follow the - rules of this License for verbatim copying of each of the - documents in all other respects. - - You may extract a single document from such a collection, and - distribute it individually under this License, provided you insert - a copy of this License into the extracted document, and follow - this License in all other respects regarding verbatim copying of - that document. - - 7. AGGREGATION WITH INDEPENDENT WORKS - - A compilation of the Document or its derivatives with other - separate and independent documents or works, in or on a volume of - a storage or distribution medium, is called an "aggregate" if the - copyright resulting from the compilation is not used to limit the - legal rights of the compilation's users beyond what the individual - works permit. When the Document is included an aggregate, this - License does not apply to the other works in the aggregate which - are not themselves derivative works of the Document. - - If the Cover Text requirement of section 3 is applicable to these - copies of the Document, then if the Document is less than one half - of the entire aggregate, the Document's Cover Texts may be placed - on covers that bracket the Document within the aggregate, or the - electronic equivalent of covers if the Document is in electronic - form. Otherwise they must appear on printed covers that bracket - the whole aggregate. - - 8. TRANSLATION - - Translation is considered a kind of modification, so you may - distribute translations of the Document under the terms of section - 4. Replacing Invariant Sections with translations requires special - permission from their copyright holders, but you may include - translations of some or all Invariant Sections in addition to the - original versions of these Invariant Sections. You may include a - translation of this License, and all the license notices in the - Document, and any Warrany Disclaimers, provided that you also - include the original English version of this License and the - original versions of those notices and disclaimers. In case of a - disagreement between the translation and the original version of - this License or a notice or disclaimer, the original version will - prevail. - - If a section in the Document is Entitled "Acknowledgements", - "Dedications", or "History", the requirement (section 4) to - Preserve its Title (section 1) will typically require changing the - actual title. - - 9. TERMINATION - - You may not copy, modify, sublicense, or distribute the Document - except as expressly provided for under this License. Any other - attempt to copy, modify, sublicense or distribute the Document is - void, and will automatically terminate your rights under this - License. However, parties who have received copies, or rights, - from you under this License will not have their licenses - terminated so long as such parties remain in full compliance. - - 10. FUTURE REVISIONS OF THIS LICENSE - - The Free Software Foundation may publish new, revised versions of - the GNU Free Documentation License from time to time. Such new - versions will be similar in spirit to the present version, but may - differ in detail to address new problems or concerns. See - `http://www.gnu.org/copyleft/'. - - Each version of the License is given a distinguishing version - number. If the Document specifies that a particular numbered - version of this License "or any later version" applies to it, you - have the option of following the terms and conditions either of - that specified version or of any later version that has been - published (not as a draft) by the Free Software Foundation. If - the Document does not specify a version number of this License, - you may choose any version ever published (not as a draft) by the - Free Software Foundation. - - ADDENDUM: How to use this License for your documents - ==================================================== - - To use this License in a document you have written, include a copy of - the License in the document and put the following copyright and license - notices just after the title page: - - Copyright (C) YEAR YOUR NAME. - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.2 - or any later version published by the Free Software Foundation; - with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. - A copy of the license is included in the section entitled ``GNU - Free Documentation License''. - - If you have Invariant Sections, Front-Cover Texts and Back-Cover - Texts, replace the "with...Texts." line with this: - - with the Invariant Sections being LIST THEIR TITLES, with - the Front-Cover Texts being LIST, and with the Back-Cover Texts - being LIST. - - If you have Invariant Sections without Cover Texts, or some other - combination of the three, merge those two alternatives to suit the - situation. - - If your document contains nontrivial examples of program code, we - recommend releasing these examples in parallel under your choice of - free software license, such as the GNU General Public License, to - permit their use in free software. - -  - File: gnat_ug_unx.info, Node: Index, Prev: GNU Free Documentation License, Up: Top - - Index - ***** - - * Menu: - - * --GCC= (gnatchop): Switches for gnatchop. - * --GCC=compiler_name (gnatlink): Switches for gnatlink. - * --GCC=compiler_name (gnatmake): Switches for gnatmake. - * --GNATBIND=binder_name (gnatmake): Switches for gnatmake. - * --GNATLINK=linker_name (gnatmake): Switches for gnatmake. - * --LINK= (gnatlink): Switches for gnatlink. - * --RTS (gcc): Switches for gcc. - * --RTS (gnatbind): Summary of Binder Switches. - * --RTS (gnatfind): gnatfind Switches. - * --RTS (gnatls): Switches for gnatls. - * --RTS (gnatmake): Switches for gnatmake. - * --RTS (gnatxref): gnatxref Switches. - * -83 (gnathtml): Converting Ada Files to html with gnathtml. - * -A (gnatbind): Output Control. - * -A (gnatlink): Switches for gnatlink. - * -a (gnatls): Switches for gnatls. - * -A (gnatmake): Switches for gnatmake. - * -a (gnatmake): Switches for gnatmake. - * -aI (gnatmake): Switches for gnatmake. - * -aL (gnatmake): Switches for gnatmake. - * -aO (gnatmake): Switches for gnatmake. - * -B (gcc): Switches for gcc. - * -b (gcc): Switches for gcc. - * -b (gnatbind): Binder Error Message Control. - * -B (gnatlink): Switches for gnatlink. - * -b (gnatlink): Switches for gnatlink. - * -b (gnatmake): Switches for gnatmake. - * -bargs (gnatmake): Mode Switches for gnatmake. - * -c (gcc): Switches for gcc. - * -C (gnatbind): Output Control. - * -c (gnatbind): Output Control. - * -c (gnatchop): Switches for gnatchop. - * -C (gnatlink): Switches for gnatlink. - * -C (gnatmake): Switches for gnatmake. - * -c (gnatmake): Switches for gnatmake. - * -c (gnatname): Switches for gnatname. - * -cargs (gnatmake): Mode Switches for gnatmake. - * -d (gnathtml): Converting Ada Files to html with gnathtml. - * -d (gnatls): Switches for gnatls. - * -D (gnatname): Switches for gnatname. - * -d (gnatname): Switches for gnatname. - * -e (gnatbind): Output Control. - * -f (gnathtml): Converting Ada Files to html with gnathtml. - * -f (gnatlink): Switches for gnatlink. - * -f (gnatmake): Switches for gnatmake. - * -fno-inline (gcc): Inlining of Subprograms. - * -fstack-check: Stack Overflow Checking. - * -g (gcc): Switches for gcc. - * -g (gnatlink): Switches for gnatlink. - * -gnat83 (gcc): Compiling Ada 83 Programs. - * -gnata (gcc): Debugging and Assertion Control. - * -gnatb (gcc): Output and Error Message Control. - * -gnatc (gcc): Using gcc for Semantic Checking. - * -gnatD (gcc): Debugging Control. - * -gnatdc switch: GNAT Abnormal Termination or Failure to Terminate. - * -gnatE (gcc) <1>: Debugging Control. - * -gnatE (gcc): Run-Time Checks. - * -gnatem (gcc): Units to Sources Mapping Files. - * -gnatf (gcc): Output and Error Message Control. - * -gnatG (gcc): Debugging Control. - * -gnati (gcc): Character Set Control. - * -gnatk (gcc): File Naming Control. - * -gnatl (gcc): Output and Error Message Control. - * -gnatm (gcc): Output and Error Message Control. - * -gnatn (gcc): Inlining of Subprograms. - * -gnatN (gcc): Subprogram Inlining Control. - * -gnatn (gcc): Subprogram Inlining Control. - * -gnatN switch: Source Dependencies. - * -gnatn switch: Source Dependencies. - * -gnato (gcc) <1>: Controlling Run-Time Checks. - * -gnato (gcc): Run-Time Checks. - * -gnatp (gcc) <1>: Controlling Run-Time Checks. - * -gnatp (gcc): Run-Time Checks. - * -gnatq (gcc): Output and Error Message Control. - * -gnatR (gcc): Debugging Control. - * -gnats (gcc): Using gcc for Syntax Checking. - * -gnatt (gcc): Auxiliary Output Control. - * -gnatT (gcc): Run-Time Control. - * -gnatu (gcc): Auxiliary Output Control. - * -gnatU (gcc): Output and Error Message Control. - * -gnatv (gcc): Output and Error Message Control. - * -gnatW (gcc): Character Set Control. - * -gnatwA (gcc): Output and Error Message Control. - * -gnatwa (gcc): Output and Error Message Control. - * -gnatwB (gcc): Output and Error Message Control. - * -gnatwb (gcc): Output and Error Message Control. - * -gnatwC (gcc): Output and Error Message Control. - * -gnatwc (gcc): Output and Error Message Control. - * -gnatwD (gcc): Output and Error Message Control. - * -gnatwd (gcc): Output and Error Message Control. - * -gnatwe (gcc): Output and Error Message Control. - * -gnatwF (gcc): Output and Error Message Control. - * -gnatwf (gcc): Output and Error Message Control. - * -gnatwH (gcc): Output and Error Message Control. - * -gnatwh (gcc): Output and Error Message Control. - * -gnatwI (gcc): Output and Error Message Control. - * -gnatwi (gcc): Output and Error Message Control. - * -gnatwL (gcc): Output and Error Message Control. - * -gnatwl (gcc): Output and Error Message Control. - * -gnatwO (gcc): Output and Error Message Control. - * -gnatwo (gcc): Output and Error Message Control. - * -gnatwP (gcc): Output and Error Message Control. - * -gnatwp (gcc): Output and Error Message Control. - * -gnatwR (gcc): Output and Error Message Control. - * -gnatwr (gcc): Output and Error Message Control. - * -gnatws (gcc): Output and Error Message Control. - * -gnatwU (gcc): Output and Error Message Control. - * -gnatwu (gcc): Output and Error Message Control. - * -gnatx (gcc): Debugging Control. - * -h (gnatbind) <1>: Output Control. - * -h (gnatbind): Elaboration Control. - * -h (gnatls): Switches for gnatls. - * -h (gnatname): Switches for gnatname. - * -I (gcc): Switches for gcc. - * -I (gnathtml): Converting Ada Files to html with gnathtml. - * -I (gnatmake): Switches for gnatmake. - * -i (gnatmake): Switches for gnatmake. - * -i (gnatmem): Switches for gnatmem. - * -I- (gcc): Switches for gcc. - * -I- (gnatmake): Switches for gnatmake. - * -j (gnatmake): Switches for gnatmake. - * -K (gnatbind): Output Control. - * -k (gnatchop): Switches for gnatchop. - * -k (gnatmake): Switches for gnatmake. - * -l (gnatbind): Output Control. - * -l (gnathtml): Converting Ada Files to html with gnathtml. - * -L (gnatmake): Switches for gnatmake. - * -l (gnatmake): Switches for gnatmake. - * -largs (gnatmake): Mode Switches for gnatmake. - * -M (gnatbind): Binder Error Message Control. - * -m (gnatbind): Binder Error Message Control. - * -M (gnatmake): Switches for gnatmake. - * -m (gnatmake): Switches for gnatmake. - * -n (gnatbind): Binding with Non-Ada Main Programs. - * -n (gnatlink): Switches for gnatlink. - * -n (gnatmake): Switches for gnatmake. - * -nostdinc (gnatmake): Switches for gnatmake. - * -nostdlib (gnatmake): Switches for gnatmake. - * -O (gcc) <1>: Optimization Levels. - * -O (gcc): Switches for gcc. - * -o (gcc): Switches for gcc. - * -o (gnatbind): Output Control. - * -O (gnatbind): Output Control. - * -o (gnathtml): Converting Ada Files to html with gnathtml. - * -o (gnatlink): Switches for gnatlink. - * -o (gnatls): Switches for gnatls. - * -o (gnatmake): Switches for gnatmake. - * -o (gnatmem): Switches for gnatmem. - * -p (gnatchop): Switches for gnatchop. - * -p (gnathtml): Converting Ada Files to html with gnathtml. - * -P (gnatname): Switches for gnatname. - * -pass-exit-codes (gcc): Auxiliary Output Control. - * -q (gnatchop): Switches for gnatchop. - * -q (gnatmake): Switches for gnatmake. - * -q (gnatmem): Switches for gnatmem. - * -r (gnatbind): Output Control. - * -r (gnatchop): Switches for gnatchop. - * -S (gcc): Switches for gcc. - * -s (gnatbind): Consistency-Checking Modes. - * -s (gnatls): Switches for gnatls. - * -s (gnatmake): Switches for gnatmake. - * -sc (gnathtml): Converting Ada Files to html with gnathtml. - * -t (gnatbind): Binder Error Message Control. - * -t (gnathtml): Converting Ada Files to html with gnathtml. - * -u (gnatls): Switches for gnatls. - * -u (gnatmake): Switches for gnatmake. - * -V (gcc): Switches for gcc. - * -v (gcc): Switches for gcc. - * -v (gnatbind): Binder Error Message Control. - * -v (gnatchop): Switches for gnatchop. - * -v (gnatlink): Switches for gnatlink. - * -v (gnatmake): Switches for gnatmake. - * -v (gnatname): Switches for gnatname. - * -v -v (gnatlink): Switches for gnatlink. - * -w: Output and Error Message Control. - * -w (gnatchop): Switches for gnatchop. - * -we (gnatbind): Binder Error Message Control. - * -ws (gnatbind): Binder Error Message Control. - * -x (gnatbind): Consistency-Checking Modes. - * -z (gnatbind): Binding Programs with No Main Subprogram. - * -z (gnatmake): Switches for gnatmake. - * __gnat_finalize: Running gnatbind. - * __gnat_initialize: Running gnatbind. - * __gnat_set_globals: Running gnatbind. - * _main: The External Symbol Naming Scheme of GNAT. - * Access before elaboration: Run-Time Checks. - * Access-to-subprogram: Elaboration for Access-to-Subprogram Values. - * ACVC, Ada 83 tests: Compiling Ada 83 Programs. - * Ada <1>: Naming Conventions for GNAT Source Files. - * Ada: Search Paths for gnatbind. - * Ada 83 compatibility: Compiling Ada 83 Programs. - * Ada 95 Language Reference Manual: What You Should Know before Reading This Guide. - * Ada expressions: Using Ada Expressions. - * Ada Library Information files: The Ada Library Information Files. - * Ada.Characters.Latin_1: Latin-1. - * ADA_INCLUDE_PATH: Search Paths and the Run-Time Library (RTL). - * ADA_OBJECTS_PATH: Search Paths for gnatbind. - * adafinal <1>: Binding with Non-Ada Main Programs. - * adafinal: Running gnatbind. - * adainit <1>: Binding with Non-Ada Main Programs. - * adainit: Running gnatbind. - * Address Clauses, warnings: Output and Error Message Control. - * ali files: The Ada Library Information Files. - * Annex A: Naming Conventions for GNAT Source Files. - * Annex B: Naming Conventions for GNAT Source Files. - * Arbitrary File Naming Conventions: Handling Arbitrary File Naming Conventions Using gnatname. - * Asm: Calling Conventions. - * Assert: Debugging and Assertion Control. - * Assertions: Debugging and Assertion Control. - * Biased rounding: Output and Error Message Control. - * Binder consistency checks: Binder Error Message Control. - * Binder output file: Interfacing to C. - * Binder, multiple input files: Binding with Non-Ada Main Programs. - * Breakpoints and tasks: Ada Tasks. - * C: Calling Conventions. - * C++: Calling Conventions. - * Calling Conventions: Calling Conventions. - * Check, elaboration: Run-Time Checks. - * Check, overflow: Run-Time Checks. - * Check_CPU procedure: Check_CPU Procedure. - * Checks, access before elaboration: Run-Time Checks. - * Checks, division by zero: Run-Time Checks. - * Checks, elaboration: Checking the Elaboration Order in Ada 95. - * Checks, overflow: Controlling Run-Time Checks. - * Checks, suppressing: Run-Time Checks. - * COBOL: Calling Conventions. - * code page 437: Other 8-Bit Codes. - * code page 850: Other 8-Bit Codes. - * Combining GNAT switches: Switches for gcc. - * Command line length: Switches for gnatlink. - * Compilation model: The GNAT Compilation Model. - * Conditionals, constant: Output and Error Message Control. - * Configuration pragmas: Configuration Pragmas. - * Consistency checks, in binder: Binder Error Message Control. - * Convention Ada: Calling Conventions. - * Convention Asm: Calling Conventions. - * Convention Assembler: Calling Conventions. - * Convention C: Calling Conventions. - * Convention C++: Calling Conventions. - * Convention COBOL: Calling Conventions. - * Convention Default: Calling Conventions. - * Convention DLL: Calling Conventions. - * Convention External: Calling Conventions. - * Convention Fortran: Calling Conventions. - * Convention Stdcall: Calling Conventions. - * Convention Stubbed: Calling Conventions. - * Convention Win32: Calling Conventions. - * Conventions: Conventions. - * CR: Source Representation. - * Cyrillic: Other 8-Bit Codes. - * Debug: Debugging and Assertion Control. - * Debug Pool: Finding Memory Problems with GNAT Debug Pool. - * Debugger: Running and Debugging Ada Programs. - * Debugging: Running and Debugging Ada Programs. - * Debugging Generic Units: Debugging Generic Units. - * Debugging information, including: Switches for gnatlink. - * Debugging options: Debugging Control. - * Default: Calling Conventions. - * Dependencies, producing list: Switches for gnatmake. - * Dependency rules: The GNAT Make Program gnatmake. - * Dereferencing, implicit: Output and Error Message Control. - * Division by zero: Run-Time Checks. - * DLL: Calling Conventions. - * Elaborate: Controlling the Elaboration Order in Ada 95. - * Elaborate_All: Controlling the Elaboration Order in Ada 95. - * Elaborate_Body: Controlling the Elaboration Order in Ada 95. - * Elaboration checks <1>: Checking the Elaboration Order in Ada 95. - * Elaboration checks: Run-Time Checks. - * Elaboration control <1>: Summary of Procedures for Elaboration Control. - * Elaboration control: Elaboration Order Handling in GNAT. - * Elaboration of library tasks: Elaboration Issues for Library Tasks. - * Elaboration order control: Comparison between GNAT and C/C++ Compilation Models. - * Elaboration, warnings: Output and Error Message Control. - * Eliminate: Eliminate Pragma. - * End of source file: Source Representation. - * Error messages, suppressing: Output and Error Message Control. - * EUC Coding: Wide Character Encodings. - * Exceptions: Ada Exceptions. - * Export: The External Symbol Naming Scheme of GNAT. - * External: Calling Conventions. - * FDL, GNU Free Documentation License: GNU Free Documentation License. - * FF: Source Representation. - * File names <1>: Alternative File Naming Schemes. - * File names: Using Other File Names. - * File naming schemes, alternative: Alternative File Naming Schemes. - * Foreign Languages: Calling Conventions. - * Formals, unreferenced: Output and Error Message Control. - * Fortran: Calling Conventions. - * gdb: Running and Debugging Ada Programs. - * Generic formal parameters: Compiling Ada 83 Programs. - * Generics <1>: Debugging Generic Units. - * Generics: Generating Object Files. - * Glide: Introduction to Glide and GVD. - * GMEM (gnatmem): Running gnatmem (GMEM Mode). - * GNAT <1>: Naming Conventions for GNAT Source Files. - * GNAT: Search Paths for gnatbind. - * GNAT Abnormal Termination or Failure to Terminate: GNAT Abnormal Termination or Failure to Terminate. - * GNAT compilation model: The GNAT Compilation Model. - * GNAT library: Comparison between GNAT and Conventional Ada Library Models. - * gnat.adc <1>: The Configuration Pragmas Files. - * gnat.adc: Using Other File Names. - * gnat1: Compiling Programs. - * gnat_argc: Command-Line Access. - * gnat_argv: Command-Line Access. - * GNAT_STACK_LIMIT: Stack Overflow Checking. - * gnatbind: Binding Using gnatbind. - * gnatchop: Renaming Files Using gnatchop. - * gnatelim: Reducing the Size of Ada Executables with gnatelim. - * gnatfind: The Cross-Referencing Tools gnatxref and gnatfind. - * gnatkr: File Name Krunching Using gnatkr. - * gnatlink: Linking Using gnatlink. - * gnatls: The GNAT Library Browser gnatls. - * gnatmake: The GNAT Make Program gnatmake. - * gnatmem: Finding Memory Problems with gnatmem. - * gnatprep: Preprocessing Using gnatprep. - * gnatstub: Creating Sample Bodies Using gnatstub. - * gnatxref: The Cross-Referencing Tools gnatxref and gnatfind. - * GNU make: Using gnatmake in a Makefile. - * GVD: Introduction to Glide and GVD. - * Hiding of Declarations: Output and Error Message Control. - * HT: Source Representation. - * Implicit dereferencing: Output and Error Message Control. - * Inline <1>: Inlining of Subprograms. - * Inline: Source Dependencies. - * Inlining: Comparison between GNAT and Conventional Ada Library Models. - * Inlining, warnings: Output and Error Message Control. - * Intel_CPU package body: Intel_CPU Package Body. - * Intel_CPU package specification: Intel_CPU Package Specification. - * Interfaces <1>: Naming Conventions for GNAT Source Files. - * Interfaces: Search Paths for gnatbind. - * Interfacing to Ada: Calling Conventions. - * Interfacing to Assembly: Calling Conventions. - * Interfacing to C: Calling Conventions. - * Interfacing to C++: Calling Conventions. - * Interfacing to COBOL: Calling Conventions. - * Interfacing to Fortran: Calling Conventions. - * Internal trees, writing to file: Auxiliary Output Control. - * Latin-1 <1>: Latin-1. - * Latin-1: Source Representation. - * Latin-2: Other 8-Bit Codes. - * Latin-3: Other 8-Bit Codes. - * Latin-4: Other 8-Bit Codes. - * Latin-5: Other 8-Bit Codes. - * LF: Source Representation. - * Library browser: The GNAT Library Browser gnatls. - * Library tasks, elaboration issues: Elaboration Issues for Library Tasks. - * Library, building, installing: GNAT and Libraries. - * Linker libraries: Switches for gnatmake. - * Machine_Overflows: Run-Time Checks. - * Main Program: Running gnatbind. - * make: Using the GNU make Utility. - * makefile: Using gnatmake in a Makefile. - * Mixed Language Programming: Mixed Language Programming. - * Multiple units, syntax checking: Using gcc for Syntax Checking. - * n (gnatmem): Switches for gnatmem. - * No code generated: Compiling Programs. - * No_Entry_Calls_In_Elaboration_Code: Elaboration Issues for Library Tasks. - * Object file list: Running gnatbind. - * Order of elaboration: Elaboration Order Handling in GNAT. - * Other Ada compilers: Calling Conventions. - * Overflow checks <1>: Controlling Run-Time Checks. - * Overflow checks: Run-Time Checks. - * Parallel make: Switches for gnatmake. - * Performance: Performance Considerations. - * pragma Elaborate: Controlling the Elaboration Order in Ada 95. - * pragma Elaborate_All: Controlling the Elaboration Order in Ada 95. - * pragma Elaborate_Body: Controlling the Elaboration Order in Ada 95. - * pragma Inline: Inlining of Subprograms. - * pragma Preelaborate: Controlling the Elaboration Order in Ada 95. - * pragma Pure: Controlling the Elaboration Order in Ada 95. - * pragma Suppress: Controlling Run-Time Checks. - * pragma Unsuppress: Controlling Run-Time Checks. - * Pragmas, configuration: Configuration Pragmas. - * Preelaborate: Controlling the Elaboration Order in Ada 95. - * Pure: Controlling the Elaboration Order in Ada 95. - * Recompilation, by gnatmake: Notes on the Command Line. - * Rounding, biased: Output and Error Message Control. - * RTL: Switches for gcc. - * SDP_Table_Build: Running gnatbind. - * Search paths, for gnatmake: Switches for gnatmake. - * Shift JIS Coding: Wide Character Encodings. - * Source file, end: Source Representation. - * Source files, suppressing search: Switches for gnatmake. - * Source files, use by binder: Running gnatbind. - * Source_File_Name pragma <1>: Alternative File Naming Schemes. - * Source_File_Name pragma: Using Other File Names. - * Source_Reference: Switches for gnatchop. - * Stack Overflow Checking: Stack Overflow Checking. - * stack traceback: Stack Traceback. - * stack unwinding: Stack Traceback. - * Stdcall: Calling Conventions. - * stderr: Output and Error Message Control. - * stdout: Output and Error Message Control. - * storage, pool, memory corruption: Finding Memory Problems with GNAT Debug Pool. - * Stubbed: Calling Conventions. - * Style checking: Style Checking. - * SUB: Source Representation. - * Subunits: Generating Object Files. - * Suppress <1>: Controlling Run-Time Checks. - * Suppress: Run-Time Checks. - * Suppressing checks: Run-Time Checks. - * System <1>: Naming Conventions for GNAT Source Files. - * System: Search Paths for gnatbind. - * System.IO: Search Paths and the Run-Time Library (RTL). - * Task switching: Ada Tasks. - * Tasks: Ada Tasks. - * Time Slicing: Run-Time Control. - * Time stamp checks, in binder: Binder Error Message Control. - * traceback: Stack Traceback. - * traceback, non-symbolic: Non-Symbolic Traceback. - * traceback, symbolic: Symbolic Traceback. - * Tree file: Tree Files. - * Typographical conventions: Conventions. - * Unsuppress <1>: Controlling Run-Time Checks. - * Unsuppress: Run-Time Checks. - * Upper-Half Coding: Wide Character Encodings. - * Validity Checking: Validity Checking. - * Version skew (avoided by gnatmake): Running a Simple Ada Program. - * Volatile parameter: The Volatile Parameter. - * VT: Source Representation. - * Warning messages: Output and Error Message Control. - * Warnings: Binder Error Message Control. - * Warnings, treat as error: Output and Error Message Control. - * Win32: Calling Conventions. - * Writing internal trees: Auxiliary Output Control. - * Zero Cost Exceptions: Running gnatbind. - - -  - Tag Table: - Node: Top91 - Node: About This Guide8875 - Node: What This Guide Contains9384 - Node: What You Should Know before Reading This Guide13729 - Node: Related Information14137 - Node: Conventions14860 - Node: Getting Started with GNAT15754 - Node: Running GNAT16195 - Node: Running a Simple Ada Program16797 - Node: Running a Program with Multiple Units20151 - Node: Using the gnatmake Utility22382 - Node: Introduction to Glide and GVD24782 - Node: Building a New Program with Glide25524 - Node: Simple Debugging with GVD30862 - Node: Other Glide Features33899 - Node: The GNAT Compilation Model35782 - Node: Source Representation37112 - Node: Foreign Language Representation38898 - Node: Latin-139384 - Node: Other 8-Bit Codes40250 - Node: Wide Character Encodings42343 - Node: File Naming Rules46149 - Node: Using Other File Names48438 - Node: Alternative File Naming Schemes50791 - Node: Generating Object Files56023 - Node: Source Dependencies58737 - Node: The Ada Library Information Files62260 - Node: Binding an Ada Program64393 - Node: Mixed Language Programming66241 - Node: Interfacing to C66518 - Node: Calling Conventions69024 - Node: Building Mixed Ada & C++ Programs74948 - Node: Interfacing to C++76029 - Node: Linking a Mixed C++ & Ada Program77069 - Node: A Simple Example80103 - Node: Adapting the Run Time to a New C++ Compiler83015 - Node: Comparison between GNAT and C/C++ Compilation Models84031 - Node: Comparison between GNAT and Conventional Ada Library Models85760 - Node: Compiling Using gcc88411 - Node: Compiling Programs88906 - Node: Switches for gcc91856 - Node: Output and Error Message Control101040 - Node: Debugging and Assertion Control119126 - Node: Validity Checking120456 - Node: Style Checking126603 - Node: Run-Time Checks138076 - Node: Stack Overflow Checking142060 - Node: Run-Time Control144147 - Node: Using gcc for Syntax Checking145041 - Node: Using gcc for Semantic Checking146540 - Node: Compiling Ada 83 Programs148018 - Node: Character Set Control149439 - Node: File Naming Control152366 - Node: Subprogram Inlining Control152874 - Node: Auxiliary Output Control154215 - Node: Debugging Control155646 - Node: Units to Sources Mapping Files163086 - Node: Search Paths and the Run-Time Library (RTL)164476 - Node: Order of Compilation Issues167647 - Node: Examples169348 - Node: Binding Using gnatbind169916 - Node: Running gnatbind171778 - Node: Generating the Binder Program in C202539 - Node: Consistency-Checking Modes219984 - Node: Binder Error Message Control221479 - Node: Elaboration Control223745 - Node: Output Control224970 - Node: Binding with Non-Ada Main Programs227411 - Node: Binding Programs with No Main Subprogram230551 - Node: Summary of Binder Switches231374 - Node: Command-Line Access234697 - Node: Search Paths for gnatbind235702 - Node: Examples of gnatbind Usage238268 - Node: Linking Using gnatlink240039 - Node: Running gnatlink240778 - Node: Switches for gnatlink242763 - Node: Setting Stack Size from gnatlink247036 - Node: Setting Heap Size from gnatlink247890 - Node: The GNAT Make Program gnatmake248705 - Node: Running gnatmake250156 - Node: Switches for gnatmake251815 - Node: Mode Switches for gnatmake264779 - Node: Notes on the Command Line265937 - Node: How gnatmake Works268833 - Node: Examples of gnatmake Usage271003 - Node: Renaming Files Using gnatchop272130 - Node: Handling Files with Multiple Units272719 - Node: Operating gnatchop in Compilation Mode274040 - Node: Command Line for gnatchop277363 - Node: Switches for gnatchop278828 - Node: Examples of gnatchop Usage282609 - Node: Configuration Pragmas283968 - Node: Handling of Configuration Pragmas285520 - Node: The Configuration Pragmas Files286379 - Node: Handling Arbitrary File Naming Conventions Using gnatname287742 - Node: Arbitrary File Naming Conventions288150 - Node: Running gnatname289411 - Node: Switches for gnatname290870 - Node: Examples of gnatname Usage294004 - Node: GNAT Project Manager294805 - Node: Introduction295467 - Node: Project Files296563 - Node: Examples of Project Files299766 - Node: Common Sources with Different Switches and Different Output Directories300240 - Node: Source Files303271 - Node: Specifying the Object Directory303747 - Node: Specifying the Exec Directory304679 - Node: Project File Packages305447 - Node: Specifying Switch Settings306456 - Node: Main Subprograms308424 - Node: Source File Naming Conventions309088 - Node: Source Language(s)309588 - Node: Using External Variables310029 - Node: Importing Other Projects312870 - Node: Extending a Project315978 - Node: Project File Syntax318449 - Node: Basic Syntax319811 - Node: Packages320819 - Node: Expressions321973 - Node: String Types323871 - Node: Variables325174 - Node: Attributes328202 - Node: Associative Array Attributes333635 - Node: case Constructions334480 - Node: Objects and Sources in Project Files336277 - Node: Object Directory336857 - Node: Exec Directory337848 - Node: Source Directories338677 - Node: Source File Names340044 - Node: Importing Projects342381 - Node: Project Extension345160 - Node: External References in Project Files346839 - Node: Packages in Project Files348582 - Node: Variables from Imported Projects350978 - Node: Naming Schemes352650 - Node: Library Projects356623 - Node: Switches Related to Project Files359517 - Node: Tools Supporting Project Files361221 - Node: gnatmake and Project Files361553 - Node: Switches and Project Files362006 - Node: Project Files and Main Subprograms367750 - Node: The GNAT Driver and Project Files369675 - Node: Glide and Project Files373343 - Node: An Extended Example373982 - Node: Project File Complete Syntax376977 - Node: Elaboration Order Handling in GNAT379769 - Node: Elaboration Code in Ada 95380789 - Node: Checking the Elaboration Order in Ada 95385435 - Node: Controlling the Elaboration Order in Ada 95389436 - Node: Controlling Elaboration in GNAT - Internal Calls397753 - Node: Controlling Elaboration in GNAT - External Calls403460 - Node: Default Behavior in GNAT - Ensuring Safety407194 - Node: Elaboration Issues for Library Tasks411277 - Node: Mixing Elaboration Models424482 - Node: What to Do If the Default Elaboration Behavior Fails426983 - Node: Elaboration for Access-to-Subprogram Values437298 - Node: Summary of Procedures for Elaboration Control439105 - Node: Other Elaboration Order Considerations440268 - Node: The Cross-Referencing Tools gnatxref and gnatfind445497 - Node: gnatxref Switches447161 - Node: gnatfind Switches450600 - Node: Project Files for gnatxref and gnatfind456196 - Node: Regular Expressions in gnatfind and gnatxref459302 - Node: Examples of gnatxref Usage462081 - Node: Examples of gnatfind Usage465880 - Node: File Name Krunching Using gnatkr468083 - Node: About gnatkr468697 - Node: Using gnatkr470019 - Node: Krunching Method470910 - Node: Examples of gnatkr Usage474147 - Node: Preprocessing Using gnatprep474637 - Node: Using gnatprep475148 - Node: Switches for gnatprep476000 - Node: Form of Definitions File478122 - Node: Form of Input Text for gnatprep478861 - Node: The GNAT Library Browser gnatls482480 - Node: Running gnatls483009 - Node: Switches for gnatls485519 - Node: Examples of gnatls Usage487414 - Node: GNAT and Libraries489603 - Node: Creating an Ada Library490131 - Node: Installing an Ada Library492971 - Node: Using an Ada Library495328 - Node: Creating an Ada Library to be Used in a Non-Ada Context496519 - Node: Rebuilding the GNAT Run-Time Library502487 - Node: Using the GNU make Utility503394 - Node: Using gnatmake in a Makefile504240 - Node: Automatically Creating a List of Directories508448 - Node: Generating the Command Line Switches511586 - Node: Overcoming Command Line Length Limits512564 - Node: Finding Memory Problems with gnatmem514869 - Node: Running gnatmem (GDB Mode)516220 - Node: Running gnatmem (GMEM Mode)518657 - Node: Switches for gnatmem519915 - Node: Examples of gnatmem Usage521023 - Node: GDB and GMEM Modes526247 - Node: Implementation Note526888 - Node: gnatmem Using GDB Mode527118 - Node: gnatmem Using GMEM Mode528531 - Node: Finding Memory Problems with GNAT Debug Pool529177 - Node: Creating Sample Bodies Using gnatstub533881 - Node: Running gnatstub534676 - Node: Switches for gnatstub535430 - Node: Reducing the Size of Ada Executables with gnatelim537562 - Node: About gnatelim538095 - Node: Eliminate Pragma539183 - Node: Tree Files540191 - Node: Preparing Tree and Bind Files for gnatelim541080 - Node: Running gnatelim543082 - Node: Correcting the List of Eliminate Pragmas545077 - Node: Making Your Executables Smaller545858 - Node: Summary of the gnatelim Usage Cycle546680 - Node: Other Utility Programs547489 - Node: Using Other Utility Programs with GNAT548017 - Node: The gnatpsta Utility Program548705 - Node: The External Symbol Naming Scheme of GNAT549999 - Node: Ada Mode for Glide551996 - Node: Converting Ada Files to html with gnathtml553947 - Node: Installing gnathtml557520 - Node: Running and Debugging Ada Programs558184 - Node: The GNAT Debugger GDB559578 - Node: Running GDB562696 - Node: Introduction to GDB Commands563712 - Node: Using Ada Expressions568577 - Node: Calling User-Defined Subprograms569771 - Node: Using the Next Command in a Function572191 - Node: Ada Exceptions573356 - Node: Ada Tasks574310 - Node: Debugging Generic Units576373 - Node: GNAT Abnormal Termination or Failure to Terminate577776 - Node: Naming Conventions for GNAT Source Files580355 - Node: Getting Internal Debugging Information582946 - Node: Stack Traceback584148 - Node: Non-Symbolic Traceback585185 - Node: Tracebacks From an Unhandled Exception585646 - Node: Tracebacks From Exception Occurrences (non-symbolic)589583 - Node: Tracebacks From Anywhere in a Program (non-symbolic)590866 - Node: Symbolic Traceback592709 - Node: Tracebacks From Exception Occurrences (symbolic)593432 - Node: Tracebacks From Anywhere in a Program (symbolic)594841 - Node: Inline Assembler596033 - Node: Basic Assembler Syntax597731 - Node: A Simple Example of Inline Assembler599508 - Node: Output Variables in Inline Assembler602675 - Node: Input Variables in Inline Assembler610055 - Node: Inlining Inline Assembler Code612563 - Node: Other Asm Functionality614497 - Node: The Clobber Parameter614932 - Node: The Volatile Parameter616931 - Node: A Complete Example618123 - Node: Check_CPU Procedure619097 - Node: Intel_CPU Package Specification634144 - Node: Intel_CPU Package Body643572 - Node: Performance Considerations652730 - Node: Controlling Run-Time Checks653764 - Node: Optimization Levels655749 - Node: Debugging Optimized Code657606 - Node: Inlining of Subprograms661339 - Node: GNU Free Documentation License664863 - Node: Index687292 -  - End Tag Table --- 0 ---- diff -Nrc3pad gcc-3.3.2/gcc/ada/gnat_ug_vms.info gcc-3.3.3/gcc/ada/gnat_ug_vms.info *** gcc-3.3.2/gcc/ada/gnat_ug_vms.info Thu Oct 16 20:23:57 2003 --- gcc-3.3.3/gcc/ada/gnat_ug_vms.info Thu Jan 1 00:00:00 1970 *************** *** 1,17933 **** - This is ada/gnat_ug_vms.info, produced by makeinfo version 4.2 from - ada/gnat_ug_vms.texi. - - Copyright (C) 1995-2002, Free Software Foundation - - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.2 or - any later version published by the Free Software Foundation; with the - Invariant Sections being "GNU Free Documentation License", with the - Front-Cover Texts being "GNAT User's Guide for OpenVMS Alpha", and with - no Back-Cover Texts. A copy of the license is included in the section - entitled "GNU Free Documentation License". -  - File: gnat_ug_vms.info, Node: Top, Next: About This Guide, Prev: (dir), Up: (dir) - - GNAT User's Guide - ***************** - - GNAT User's Guide for OpenVMS Alpha - - GNAT, The GNU Ada 95 Compiler - - GNAT Version for GCC 3.3.2 - - Ada Core Technologies, Inc. - - Copyright (C) 1995-2002, Free Software Foundation - - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.2 or - any later version published by the Free Software Foundation; with the - Invariant Sections being "GNU Free Documentation License", with the - Front-Cover Texts being "GNAT User's Guide for OpenVMS Alpha", and with - no Back-Cover Texts. A copy of the license is included in the section - entitled "GNU Free Documentation License". - * Menu: - - * About This Guide:: - * Getting Started with GNAT:: - * The GNAT Compilation Model:: - * Compiling Using GNAT COMPILE:: - * Binding Using GNAT BIND:: - * Linking Using GNAT LINK:: - * The GNAT Make Program GNAT MAKE:: - * Renaming Files Using GNAT CHOP:: - * Configuration Pragmas:: - * Handling Arbitrary File Naming Conventions Using gnatname:: - * GNAT Project Manager:: - * Elaboration Order Handling in GNAT:: - * The Cross-Referencing Tools GNAT XREF and GNAT FIND:: - * File Name Krunching Using GNAT KRUNCH:: - * Preprocessing Using GNAT PREPROCESS:: - * The GNAT Run-Time Library Builder GNAT LIBRARY:: - * The GNAT Library Browser GNAT LIST:: - * Finding Memory Problems with GNAT Debug Pool:: - * Creating Sample Bodies Using GNAT STUB:: - * Reducing the Size of Ada Executables with GNAT ELIM:: - * Other Utility Programs:: - * Compatibility with DEC Ada:: - * Running and Debugging Ada Programs:: - * Inline Assembler:: - * Performance Considerations:: - * GNU Free Documentation License:: - * Index:: - - --- The Detailed Node Listing --- - - About This Guide - - * What This Guide Contains:: - * What You Should Know before Reading This Guide:: - * Related Information:: - * Conventions:: - - - Getting Started with GNAT - - * Running GNAT:: - * Running a Simple Ada Program:: - * Running a Program with Multiple Units:: - * Using the GNAT MAKE Utility:: - * Editing with EMACS:: - - The GNAT Compilation Model - - * Source Representation:: - * Foreign Language Representation:: - * File Naming Rules:: - * Using Other File Names:: - * Alternative File Naming Schemes:: - * Generating Object Files:: - * Source Dependencies:: - * The Ada Library Information Files:: - * Binding an Ada Program:: - * Mixed Language Programming:: - * Building Mixed Ada & C++ Programs:: - * Comparison between GNAT and C/C++ Compilation Models:: - * Comparison between GNAT and Conventional Ada Library Models:: - - Foreign Language Representation - - * Latin-1:: - * Other 8-Bit Codes:: - * Wide Character Encodings:: - - Compiling Ada Programs With GNAT COMPILE - - * Compiling Programs:: - * Qualifiers for GNAT COMPILE:: - * Search Paths and the Run-Time Library (RTL):: - * Order of Compilation Issues:: - * Examples:: - - Qualifiers for GNAT COMPILE - - * Output and Error Message Control:: - * Debugging and Assertion Control:: - * Run-Time Checks:: - * Stack Overflow Checking:: - * Run-Time Control:: - * Validity Checking:: - * Style Checking:: - * Using GNAT COMPILE for Syntax Checking:: - * Using GNAT COMPILE for Semantic Checking:: - * Compiling Ada 83 Programs:: - * Character Set Control:: - * File Naming Control:: - * Subprogram Inlining Control:: - * Auxiliary Output Control:: - * Debugging Control:: - * Units to Sources Mapping Files:: - - Binding Ada Programs With GNAT BIND - - * Running GNAT BIND:: - * Generating the Binder Program in C:: - * Consistency-Checking Modes:: - * Binder Error Message Control:: - * Elaboration Control:: - * Output Control:: - * Binding with Non-Ada Main Programs:: - * Binding Programs with No Main Subprogram:: - * Summary of Binder Qualifiers:: - * Command-Line Access:: - * Search Paths for GNAT BIND:: - * Examples of GNAT BIND Usage:: - - Linking Using GNAT LINK - - * Running GNAT LINK:: - * Qualifiers for GNAT LINK:: - * Setting Stack Size from GNAT LINK:: - * Setting Heap Size from GNAT LINK:: - - The GNAT Make Program GNAT MAKE - - * Running GNAT MAKE:: - * Qualifiers for GNAT MAKE:: - * Mode Qualifiers for GNAT MAKE:: - * Notes on the Command Line:: - * How GNAT MAKE Works:: - * Examples of GNAT MAKE Usage:: - - Renaming Files Using GNAT CHOP - - * Handling Files with Multiple Units:: - * Operating GNAT CHOP in Compilation Mode:: - * Command Line for GNAT CHOP:: - * Qualifiers for GNAT CHOP:: - * Examples of GNAT CHOP Usage:: - - Configuration Pragmas - - * Handling of Configuration Pragmas:: - * The Configuration Pragmas Files:: - - Handling Arbitrary File Naming Conventions Using gnatname - - * Arbitrary File Naming Conventions:: - * Running gnatname:: - * Qualifiers for gnatname:: - * Examples of gnatname Usage:: - - GNAT Project Manager - - * Introduction:: - * Examples of Project Files:: - * Project File Syntax:: - * Objects and Sources in Project Files:: - * Importing Projects:: - * Project Extension:: - * External References in Project Files:: - * Packages in Project Files:: - * Variables from Imported Projects:: - * Naming Schemes:: - * Library Projects:: - * Qualifiers Related to Project Files:: - * Tools Supporting Project Files:: - * An Extended Example:: - * Project File Complete Syntax:: - - Elaboration Order Handling in GNAT - - * Elaboration Code in Ada 95:: - * Checking the Elaboration Order in Ada 95:: - * Controlling the Elaboration Order in Ada 95:: - * Controlling Elaboration in GNAT - Internal Calls:: - * Controlling Elaboration in GNAT - External Calls:: - * Default Behavior in GNAT - Ensuring Safety:: - * Elaboration Issues for Library Tasks:: - * Mixing Elaboration Models:: - * What to Do If the Default Elaboration Behavior Fails:: - * Elaboration for Access-to-Subprogram Values:: - * Summary of Procedures for Elaboration Control:: - * Other Elaboration Order Considerations:: - - The Cross-Referencing Tools GNAT XREF and GNAT FIND - - * GNAT XREF Qualifiers:: - * GNAT FIND Qualifiers:: - * Project Files for GNAT XREF and GNAT FIND:: - * Regular Expressions in GNAT FIND and GNAT XREF:: - * Examples of GNAT XREF Usage:: - * Examples of GNAT FIND Usage:: - - File Name Krunching Using GNAT KRUNCH - - * About GNAT KRUNCH:: - * Using GNAT KRUNCH:: - * Krunching Method:: - * Examples of GNAT KRUNCH Usage:: - - Preprocessing Using GNAT PREPROCESS - - * Using GNAT PREPROCESS:: - * Qualifiers for GNAT PREPROCESS:: - * Form of Definitions File:: - * Form of Input Text for GNAT PREPROCESS:: - - The GNAT Run-Time Library Builder GNAT LIBRARY - - * Running GNAT LIBRARY:: - * Qualifiers for GNAT LIBRARY:: - * Examples of GNAT LIBRARY Usage:: - - The GNAT Library Browser GNAT LIST - - * Running GNAT LIST:: - * Qualifiers for GNAT LIST:: - * Examples of GNAT LIST Usage:: - - - Finding Memory Problems with GNAT Debug Pool - - Creating Sample Bodies Using GNAT STUB - - * Running GNAT STUB:: - * Qualifiers for GNAT STUB:: - - Reducing the Size of Ada Executables with GNAT ELIM - - * About GNAT ELIM:: - * Eliminate Pragma:: - * Tree Files:: - * Preparing Tree and Bind Files for GNAT ELIM:: - * Running GNAT ELIM:: - * Correcting the List of Eliminate Pragmas:: - * Making Your Executables Smaller:: - * Summary of the GNAT ELIM Usage Cycle:: - - Other Utility Programs - - * Using Other Utility Programs with GNAT:: - * The GNAT STANDARD Utility Program:: - * The External Symbol Naming Scheme of GNAT:: - * Ada Mode for Glide:: - * Converting Ada Files to html with gnathtml:: - * LSE:: - - Compatibility with DEC Ada - - * Ada 95 Compatibility:: - * Differences in the Definition of Package System:: - * Language-Related Features:: - * The Package STANDARD:: - * The Package SYSTEM:: - * Tasking and Task-Related Features:: - * Implementation of Tasks in DEC Ada for OpenVMS Alpha Systems:: - * Pragmas and Pragma-Related Features:: - * Library of Predefined Units:: - * Bindings:: - * Main Program Definition:: - * Implementation-Defined Attributes:: - * Compiler and Run-Time Interfacing:: - * Program Compilation and Library Management:: - * Input-Output:: - * Implementation Limits:: - * Tools:: - - Language-Related Features - - * Integer Types and Representations:: - * Floating-Point Types and Representations:: - * Pragmas Float_Representation and Long_Float:: - * Fixed-Point Types and Representations:: - * Record and Array Component Alignment:: - * Address Clauses:: - * Other Representation Clauses:: - - Implementation of Tasks in DEC Ada for OpenVMS Alpha Systems - - * Assigning Task IDs:: - * Task IDs and Delays:: - * Task-Related Pragmas:: - * Scheduling and Task Priority:: - * The Task Stack:: - * External Interrupts:: - - Pragmas and Pragma-Related Features - - * Restrictions on the Pragma INLINE:: - * Restrictions on the Pragma INTERFACE:: - * Restrictions on the Pragma SYSTEM_NAME:: - - Library of Predefined Units - - * Changes to DECLIB:: - - Bindings - - * Shared Libraries and Options Files:: - * Interfaces to C:: - - Running and Debugging Ada Programs - - * The GNAT Debugger GDB:: - * Running GDB:: - * Introduction to GDB Commands:: - * Using Ada Expressions:: - * Calling User-Defined Subprograms:: - * Using the Next Command in a Function:: - * Ada Exceptions:: - * Ada Tasks:: - * Debugging Generic Units:: - * GNAT Abnormal Termination or Failure to Terminate:: - * Naming Conventions for GNAT Source Files:: - * Getting Internal Debugging Information:: - * Stack Traceback:: - - Inline Assembler - - * Basic Assembler Syntax:: - * A Simple Example of Inline Assembler:: - * Output Variables in Inline Assembler:: - * Input Variables in Inline Assembler:: - * Inlining Inline Assembler Code:: - * Other Asm Functionality:: - * A Complete Example:: - - - - Performance Considerations - - * Controlling Run-Time Checks:: - * Optimization Levels:: - * Debugging Optimized Code:: - * Inlining of Subprograms:: - * Coverage Analysis:: - - * Index:: - -  - File: gnat_ug_vms.info, Node: About This Guide, Next: Getting Started with GNAT, Prev: Top, Up: Top - - About This Guide - **************** - - This guide describes the use of of GNAT, a full language compiler for - the Ada 95 programming language, implemented on DIGITAL OpenVMS Alpha - Systems. It describes the features of the compiler and tools, and - details how to use them to build Ada 95 applications. - - * Menu: - - * What This Guide Contains:: - * What You Should Know before Reading This Guide:: - * Related Information:: - * Conventions:: - -  - File: gnat_ug_vms.info, Node: What This Guide Contains, Next: What You Should Know before Reading This Guide, Up: About This Guide - - What This Guide Contains - ======================== - - This guide contains the following chapters: - * *Note Getting Started with GNAT::, describes how to get started - compiling and running Ada programs with the GNAT Ada programming - environment. - - * *Note The GNAT Compilation Model::, describes the compilation - model used by GNAT. - - * *Note Compiling Using GNAT COMPILE::, describes how to compile Ada - programs with `GNAT COMPILE', the Ada compiler. - - * *Note Binding Using GNAT BIND::, describes how to perform binding - of Ada programs with `GNAT BIND', the GNAT binding utility. - - * *Note Linking Using GNAT LINK::, describes `GNAT LINK', a program - that provides for linking using the GNAT run-time library to - construct a program. `GNAT LINK' can also incorporate foreign - language object units into the executable. - - * *Note The GNAT Make Program GNAT MAKE::, describes `GNAT MAKE', a - utility that automatically determines the set of sources needed by - an Ada compilation unit, and executes the necessary compilations - binding and link. - - * *Note Renaming Files Using GNAT CHOP::, describes `GNAT CHOP', a - utility that allows you to preprocess a file that contains Ada - source code, and split it into one or more new files, one for each - compilation unit. - - * *Note Configuration Pragmas::, describes the configuration pragmas - handled by GNAT. - - * *Note Handling Arbitrary File Naming Conventions Using gnatname::, - shows how to override the default GNAT file naming conventions, - either for an individual unit or globally. - - * *Note GNAT Project Manager::, describes how to use project files - to organize large projects. - - * *Note Elaboration Order Handling in GNAT::, describes how GNAT - helps you deal with elaboration order issues. - - * *Note The Cross-Referencing Tools GNAT XREF and GNAT FIND::, - discusses `GNAT XREF' and `GNAT FIND', two tools that provide an - easy way to navigate through sources. - - * *Note File Name Krunching Using GNAT KRUNCH::, describes the `GNAT - KRUNCH' file name krunching utility, used to handle shortened file - names on operating systems with a limit on the length of names. - - * *Note Preprocessing Using GNAT PREPROCESS::, describes `GNAT - PREPROCESS', a preprocessor utility that allows a single source - file to be used to generate multiple or parameterized source - files, by means of macro substitution. - - * *Note The GNAT Library Browser GNAT LIST::, describes `GNAT LIST', - a utility that displays information about compiled units, - including dependences on the corresponding sources files, and - consistency of compilations. - - * *Note Finding Memory Problems with GNAT Debug Pool::, describes - how to use the GNAT-specific Debug Pool in order to detect as - early as possible the use of incorrect memory references. - - * *Note Creating Sample Bodies Using GNAT STUB::, discusses `GNAT - STUB', a utility that generates empty but compilable bodies for - library units. - - * *Note Reducing the Size of Ada Executables with GNAT ELIM::, - describes `GNAT ELIM', a tool which detects unused subprograms and - helps the compiler to create a smaller executable for the program. - - * *Note Other Utility Programs::, discusses several other GNAT - utilities, including `GNAT STANDARD'. - - * *Note Running and Debugging Ada Programs::, describes how to run - and debug Ada programs. - - * *Note Inline Assembler::, shows how to use the inline assembly - facility in an Ada program. - - * *Note Performance Considerations::, reviews the trade offs between - using defaults or options in program development. - - * *Note Compatibility with DEC Ada::, details the compatibility of - GNAT with DEC Ada 83 for OpenVMS Alpha. - -  - File: gnat_ug_vms.info, Node: What You Should Know before Reading This Guide, Next: Related Information, Prev: What This Guide Contains, Up: About This Guide - - What You Should Know before Reading This Guide - ============================================== - - This user's guide assumes that you are familiar with Ada 95 language, as - described in the International Standard ANSI/ISO/IEC-8652:1995, Jan - 1995. - -  - File: gnat_ug_vms.info, Node: Related Information, Next: Conventions, Prev: What You Should Know before Reading This Guide, Up: About This Guide - - Related Information - =================== - - For further information about related tools, refer to the following - documents: - - * `GNAT Reference Manual', which contains all reference material for - the GNAT implementation of Ada 95. - - * `Ada 95 Language Reference Manual', which contains all reference - material for the Ada 95 programming language. - - * `Debugging with GDB' , located in the GNU:[DOCS] directory, - contains all details on the use of the GNU source-level debugger. - - * `GNU EMACS Manual' , located in the GNU:[DOCS] directory if the - EMACS kit is installed, contains full information on the - extensible editor and programming environment EMACS. - - -  - File: gnat_ug_vms.info, Node: Conventions, Prev: Related Information, Up: About This Guide - - Conventions - =========== - - Following are examples of the typographical and graphic conventions used - in this guide: - - * `Functions', `utility program names', `standard names', and - `classes'. - - * `Option flags' - - * `File Names', `button names', and `field names'. - - * VARIABLES. - - * _Emphasis_. - - * [optional information or parameters] - - * Examples are described by text - and then shown this way. - - Commands that are entered by the user are preceded in this manual by the - characters "`$ '" (dollar sign followed by space). If your system uses - this sequence as a prompt, then the commands will appear exactly as you - see them in the manual. If your system uses some other prompt, then the - command will appear with the `$' replaced by whatever prompt character - you are using. - -  - File: gnat_ug_vms.info, Node: Getting Started with GNAT, Next: The GNAT Compilation Model, Prev: About This Guide, Up: Top - - Getting Started with GNAT - ************************* - - This chapter describes some simple ways of using GNAT to build - executable Ada programs. - - * Menu: - - * Running GNAT:: - * Running a Simple Ada Program:: - - * Running a Program with Multiple Units:: - - * Using the GNAT MAKE Utility:: - * Editing with EMACS:: - -  - File: gnat_ug_vms.info, Node: Running GNAT, Next: Running a Simple Ada Program, Up: Getting Started with GNAT - - Running GNAT - ============ - - Three steps are needed to create an executable file from an Ada source - file: - - 1. The source file(s) must be compiled. - - 2. The file(s) must be bound using the GNAT binder. - - 3. All appropriate object files must be linked to produce an - executable. - - All three steps are most commonly handled by using the `GNAT MAKE' - utility program that, given the name of the main program, automatically - performs the necessary compilation, binding and linking steps. - -  - File: gnat_ug_vms.info, Node: Running a Simple Ada Program, Next: Running a Program with Multiple Units, Prev: Running GNAT, Up: Getting Started with GNAT - - Running a Simple Ada Program - ============================ - - Any text editor may be used to prepare an Ada program. If `Glide' is - used, the optional Ada mode may be helpful in laying out the program. - The program text is a normal text file. We will suppose in our initial - example that you have used your editor to prepare the following - standard format text file: - - with Ada.Text_IO; use Ada.Text_IO; - procedure Hello is - begin - Put_Line ("Hello WORLD!"); - end Hello; - - This file should be named `HELLO.ADB'. With the normal default file - naming conventions, GNAT requires that each file contain a single - compilation unit whose file name is the unit name, with periods - replaced by hyphens; the extension is `ads' for a spec and `adb' for a - body. You can override this default file naming convention by use of - the special pragma `Source_File_Name' (*note Using Other File Names::). - Alternatively, if you want to rename your files according to this - default convention, which is probably more convenient if you will be - using GNAT for all your compilations, then the `GNAT CHOP' utility can - be used to generate correctly-named source files (*note Renaming Files - Using GNAT CHOP::). - - You can compile the program using the following command (`$' is used - as the command prompt in the examples in this document): - - $ GNAT COMPILE HELLO.ADB - - `GNAT COMPILE' is the command used to run the compiler. This compiler is - capable of compiling programs in several languages, including Ada 95 and - C. It assumes that you have given it an Ada program if the file - extension is either `.ADS' or `.ADB', and it will then call the GNAT - compiler to compile the specified file. - - This compile command generates a file `HELLO.OBJ', which is the - object file corresponding to your Ada program. It also generates an - "Ada Library Information" file `HELLO.ALI', which contains additional - information used to check that an Ada program is consistent. To build - an executable file, use `GNAT BIND' to bind the program and `GNAT LINK' - to link it. The argument to both `GNAT BIND' and `GNAT LINK' is the - name of the `ali' file, but the default extension of `.ALI' can be - omitted. This means that in the most common case, the argument is - simply the name of the main program: - - $ GNAT BIND hello - $ GNAT LINK hello - - A simpler method of carrying out these steps is to use `GNAT MAKE', a - master program that invokes all the required compilation, binding and - linking tools in the correct order. In particular, `GNAT MAKE' - automatically recompiles any sources that have been modified since they - were last compiled, or sources that depend on such modified sources, so - that "version skew" is avoided. - - $ GNAT MAKE HELLO.ADB - - The result is an executable program called `hello', which can be run by - entering: - - $ hello - - assuming that the current directory is on the search path for - executable programs. - - and, if all has gone well, you will see - - Hello WORLD! - - appear in response to this command. - -  - File: gnat_ug_vms.info, Node: Running a Program with Multiple Units, Next: Using the GNAT MAKE Utility, Prev: Running a Simple Ada Program, Up: Getting Started with GNAT - - Running a Program with Multiple Units - ===================================== - - Consider a slightly more complicated example that has three files: a - main program, and the spec and body of a package: - - package Greetings is - procedure Hello; - procedure Goodbye; - end Greetings; - - with Ada.Text_IO; use Ada.Text_IO; - package body Greetings is - procedure Hello is - begin - Put_Line ("Hello WORLD!"); - end Hello; - - procedure Goodbye is - begin - Put_Line ("Goodbye WORLD!"); - end Goodbye; - end Greetings; - - with Greetings; - procedure Gmain is - begin - Greetings.Hello; - Greetings.Goodbye; - end Gmain; - - Following the one-unit-per-file rule, place this program in the - following three separate files: - - `GREETINGS.ADS' - spec of package `Greetings' - - `GREETINGS.ADB' - body of package `Greetings' - - `GMAIN.ADB' - body of main program - - To build an executable version of this program, we could use four - separate steps to compile, bind, and link the program, as follows: - - $ GNAT COMPILE GMAIN.ADB - $ GNAT COMPILE GREETINGS.ADB - $ GNAT BIND gmain - $ GNAT LINK gmain - - Note that there is no required order of compilation when using GNAT. - In particular it is perfectly fine to compile the main program first. - Also, it is not necessary to compile package specs in the case where - there is an accompanying body; you only need to compile the body. If - you want to submit these files to the compiler for semantic checking - and not code generation, then use the `/NOLOAD' qualifier: - - $ GNAT COMPILE GREETINGS.ADS /NOLOAD - - Although the compilation can be done in separate steps as in the above - example, in practice it is almost always more convenient to use the - `GNAT MAKE' tool. All you need to know in this case is the name of the - main program's source file. The effect of the above four commands can - be achieved with a single one: - - $ GNAT MAKE GMAIN.ADB - - In the next section we discuss the advantages of using `GNAT MAKE' in - more detail. - -  - File: gnat_ug_vms.info, Node: Using the GNAT MAKE Utility, Next: Editing with EMACS, Prev: Running a Program with Multiple Units, Up: Getting Started with GNAT - - Using the `GNAT MAKE' Utility - ============================= - - If you work on a program by compiling single components at a time using - `GNAT COMPILE', you typically keep track of the units you modify. In - order to build a consistent system, you compile not only these units, - but also any units that depend on the units you have modified. For - example, in the preceding case, if you edit `GMAIN.ADB', you only need - to recompile that file. But if you edit `GREETINGS.ADS', you must - recompile both `GREETINGS.ADB' and `GMAIN.ADB', because both files - contain units that depend on `GREETINGS.ADS'. - - `GNAT BIND' will warn you if you forget one of these compilation - steps, so that it is impossible to generate an inconsistent program as a - result of forgetting to do a compilation. Nevertheless it is tedious and - error-prone to keep track of dependencies among units. One approach to - handle the dependency-bookkeeping is to use a makefile. However, - makefiles present maintenance problems of their own: if the - dependencies change as you change the program, you must make sure that - the makefile is kept up-to-date manually, which is also an error-prone - process. - - The `GNAT MAKE' utility takes care of these details automatically. - Invoke it using either one of the following forms: - - $ GNAT MAKE GMAIN.ADB - $ GNAT MAKE GMAIN - - The argument is the name of the file containing the main program; you - may omit the extension. `GNAT MAKE' examines the environment, - automatically recompiles any files that need recompiling, and binds and - links the resulting set of object files, generating the executable - file, `GMAIN.EXE'. In a large program, it can be extremely helpful to - use `GNAT MAKE', because working out by hand what needs to be - recompiled can be difficult. - - Note that `GNAT MAKE' takes into account all the Ada 95 rules that - establish dependencies among units. These include dependencies that - result from inlining subprogram bodies, and from generic instantiation. - Unlike some other Ada make tools, `GNAT MAKE' does not rely on the - dependencies that were found by the compiler on a previous compilation, - which may possibly be wrong when sources change. `GNAT MAKE' determines - the exact set of dependencies from scratch each time it is run. - -  - File: gnat_ug_vms.info, Node: Editing with EMACS, Prev: Using the GNAT MAKE Utility, Up: Getting Started with GNAT - - Editing with EMACS - ================== - - EMACS is an extensible self-documenting text editor that is available - in a separate VMSINSTAL kit. - - Invoke EMACS by typing "EMACS" at the command prompt. To get started, - click on the EMACS Help menu and run the EMACS Tutorial. In a - character cell terminal, EMACS help is invoked with "Ctrl-h" (also - written as "C-h"), and the tutorial by "C-h t". - - Documentation on EMACS and other tools is available in EMACS under - the pull-down menu button: Help - Info. After selecting Info, use the - middle mouse button to select a topic (e.g. EMACS). - - In a character cell terminal, do "C-h i" to invoke info, and then "m" - (stands for menu) followed by the menu item desired, as in "m EMACS", - to get to the EMACS manual. Help on EMACS is also available by typing - "HELP EMACS" at the DCL command prompt. - - The tutorial is highly recommended in order to learn the intricacies - of EMACS, which is sufficiently extensible to provide for a complete - programming environment and shell for the sophisticated user. - -  - File: gnat_ug_vms.info, Node: The GNAT Compilation Model, Next: Compiling Using GNAT COMPILE, Prev: Getting Started with GNAT, Up: Top - - The GNAT Compilation Model - ************************** - - * Menu: - - * Source Representation:: - * Foreign Language Representation:: - * File Naming Rules:: - * Using Other File Names:: - * Alternative File Naming Schemes:: - * Generating Object Files:: - * Source Dependencies:: - * The Ada Library Information Files:: - * Binding an Ada Program:: - * Mixed Language Programming:: - * Building Mixed Ada & C++ Programs:: - * Comparison between GNAT and C/C++ Compilation Models:: - * Comparison between GNAT and Conventional Ada Library Models:: - - This chapter describes the compilation model used by GNAT. Although - similar to that used by other languages, such as C and C++, this model - is substantially different from the traditional Ada compilation models, - which are based on a library. The model is initially described without - reference to the library-based model. If you have not previously used an - Ada compiler, you need only read the first part of this chapter. The - last section describes and discusses the differences between the GNAT - model and the traditional Ada compiler models. If you have used other - Ada compilers, this section will help you to understand those - differences, and the advantages of the GNAT model. - -  - File: gnat_ug_vms.info, Node: Source Representation, Next: Foreign Language Representation, Up: The GNAT Compilation Model - - Source Representation - ===================== - - Ada source programs are represented in standard text files, using - Latin-1 coding. Latin-1 is an 8-bit code that includes the familiar - 7-bit ASCII set, plus additional characters used for representing - foreign languages (*note Foreign Language Representation:: for support - of non-USA character sets). The format effector characters are - represented using their standard ASCII encodings, as follows: - - `VT' - Vertical tab, `16#0B#' - - `HT' - Horizontal tab, `16#09#' - - `CR' - Carriage return, `16#0D#' - - `LF' - Line feed, `16#0A#' - - `FF' - Form feed, `16#0C#' - - Source files are in standard text file format. In addition, GNAT will - recognize a wide variety of stream formats, in which the end of physical - physical lines is marked by any of the following sequences: `LF', `CR', - `CR-LF', or `LF-CR'. This is useful in accommodating files that are - imported from other operating systems. - - The end of a source file is normally represented by the physical end - of file. However, the control character `16#1A#' (`SUB') is also - recognized as signalling the end of the source file. Again, this is - provided for compatibility with other operating systems where this code - is used to represent the end of file. - - Each file contains a single Ada compilation unit, including any - pragmas associated with the unit. For example, this means you must - place a package declaration (a package "spec") and the corresponding - body in separate files. An Ada "compilation" (which is a sequence of - compilation units) is represented using a sequence of files. Similarly, - you will place each subunit or child unit in a separate file. - -  - File: gnat_ug_vms.info, Node: Foreign Language Representation, Next: File Naming Rules, Prev: Source Representation, Up: The GNAT Compilation Model - - Foreign Language Representation - =============================== - - GNAT supports the standard character sets defined in Ada 95 as well as - several other non-standard character sets for use in localized versions - of the compiler (*note Character Set Control::). - - * Menu: - - * Latin-1:: - * Other 8-Bit Codes:: - * Wide Character Encodings:: - -  - File: gnat_ug_vms.info, Node: Latin-1, Next: Other 8-Bit Codes, Up: Foreign Language Representation - - Latin-1 - ------- - - The basic character set is Latin-1. This character set is defined by ISO - standard 8859, part 1. The lower half (character codes `16#00#' ... - `16#7F#)' is identical to standard ASCII coding, but the upper half is - used to represent additional characters. These include extended letters - used by European languages, such as French accents, the vowels with - umlauts used in German, and the extra letter A-ring used in Swedish. - - For a complete list of Latin-1 codes and their encodings, see the - source file of library unit `Ada.Characters.Latin_1' in file - `A-CHLAT1.ADS'. You may use any of these extended characters freely in - character or string literals. In addition, the extended characters that - represent letters can be used in identifiers. - -  - File: gnat_ug_vms.info, Node: Other 8-Bit Codes, Next: Wide Character Encodings, Prev: Latin-1, Up: Foreign Language Representation - - Other 8-Bit Codes - ----------------- - - GNAT also supports several other 8-bit coding schemes: - - Latin-2 - Latin-2 letters allowed in identifiers, with uppercase and - lowercase equivalence. - - Latin-3 - Latin-3 letters allowed in identifiers, with uppercase and - lowercase equivalence. - - Latin-4 - Latin-4 letters allowed in identifiers, with uppercase and - lowercase equivalence. - - Latin-5 - Latin-4 letters (Cyrillic) allowed in identifiers, with uppercase - and lowercase equivalence. - - IBM PC (code page 437) - This code page is the normal default for PCs in the U.S. It - corresponds to the original IBM PC character set. This set has - some, but not all, of the extended Latin-1 letters, but these - letters do not have the same encoding as Latin-1. In this mode, - these letters are allowed in identifiers with uppercase and - lowercase equivalence. - - IBM PC (code page 850) - This code page is a modification of 437 extended to include all the - Latin-1 letters, but still not with the usual Latin-1 encoding. In - this mode, all these letters are allowed in identifiers with - uppercase and lowercase equivalence. - - Full Upper 8-bit - Any character in the range 80-FF allowed in identifiers, and all - are considered distinct. In other words, there are no uppercase - and lowercase equivalences in this range. This is useful in - conjunction with certain encoding schemes used for some foreign - character sets (e.g. the typical method of representing Chinese - characters on the PC). - - No Upper-Half - No upper-half characters in the range 80-FF are allowed in - identifiers. This gives Ada 83 compatibility for identifier names. - - For precise data on the encodings permitted, and the uppercase and - lowercase equivalences that are recognized, see the file `CSETS.ADB' in - the GNAT compiler sources. You will need to obtain a full source release - of GNAT to obtain this file. - -  - File: gnat_ug_vms.info, Node: Wide Character Encodings, Prev: Other 8-Bit Codes, Up: Foreign Language Representation - - Wide Character Encodings - ------------------------ - - GNAT allows wide character codes to appear in character and string - literals, and also optionally in identifiers, by means of the following - possible encoding schemes: - - Hex Coding - In this encoding, a wide character is represented by the following - five character sequence: - - ESC a b c d - - Where `a', `b', `c', `d' are the four hexadecimal characters - (using uppercase letters) of the wide character code. For example, - ESC A345 is used to represent the wide character with code - `16#A345#'. This scheme is compatible with use of the full - Wide_Character set. - - Upper-Half Coding - The wide character with encoding `16#abcd#' where the upper bit is - on (in other words, "a" is in the range 8-F) is represented as two - bytes, `16#ab#' and `16#cd#'. The second byte cannot be a format - control character, but is not required to be in the upper half. - This method can be also used for shift-JIS or EUC, where the - internal coding matches the external coding. - - Shift JIS Coding - A wide character is represented by a two-character sequence, - `16#ab#' and `16#cd#', with the restrictions described for - upper-half encoding as described above. The internal character - code is the corresponding JIS character according to the standard - algorithm for Shift-JIS conversion. Only characters defined in the - JIS code set table can be used with this encoding method. - - EUC Coding - A wide character is represented by a two-character sequence - `16#ab#' and `16#cd#', with both characters being in the upper - half. The internal character code is the corresponding JIS - character according to the EUC encoding algorithm. Only characters - defined in the JIS code set table can be used with this encoding - method. - - UTF-8 Coding - A wide character is represented using UCS Transformation Format 8 - (UTF-8) as defined in Annex R of ISO 10646-1/Am.2. Depending on - the character value, the representation is a one, two, or three - byte sequence: - 16#0000#-16#007f#: 2#0xxxxxxx# - 16#0080#-16#07ff#: 2#110xxxxx# 2#10xxxxxx# - 16#0800#-16#ffff#: 2#1110xxxx# 2#10xxxxxx# 2#10xxxxxx# - - where the xxx bits correspond to the left-padded bits of the - 16-bit character value. Note that all lower half ASCII characters - are represented as ASCII bytes and all upper half characters and - other wide characters are represented as sequences of upper-half - (The full UTF-8 scheme allows for encoding 31-bit characters as - 6-byte sequences, but in this implementation, all UTF-8 sequences - of four or more bytes length will be treated as illegal). - - Brackets Coding - In this encoding, a wide character is represented by the following - eight character sequence: - - [ " a b c d " ] - - Where `a', `b', `c', `d' are the four hexadecimal characters - (using uppercase letters) of the wide character code. For example, - ["A345"] is used to represent the wide character with code - `16#A345#'. It is also possible (though not required) to use the - Brackets coding for upper half characters. For example, the code - `16#A3#' can be represented as `["A3"]'. - - This scheme is compatible with use of the full Wide_Character set, - and is also the method used for wide character encoding in the - standard ACVC (Ada Compiler Validation Capability) test suite - distributions. - - Note: Some of these coding schemes do not permit the full use of the - Ada 95 character set. For example, neither Shift JIS, nor EUC allow the - use of the upper half of the Latin-1 set. - -  - File: gnat_ug_vms.info, Node: File Naming Rules, Next: Using Other File Names, Prev: Foreign Language Representation, Up: The GNAT Compilation Model - - File Naming Rules - ================= - - The default file name is determined by the name of the unit that the - file contains. The name is formed by taking the full expanded name of - the unit and replacing the separating dots with hyphens and using - uppercase for all letters. - - An exception arises if the file name generated by the above rules - starts with one of the characters A,G,I, or S, and the second character - is a minus. In this case, the character dollar sign is used in place of - the minus. The reason for this special rule is to avoid clashes with - the standard names for child units of the packages System, Ada, - Interfaces, and GNAT, which use the prefixes S- A- I- and G- - respectively. - - The file extension is `.ADS' for a spec and `.ADB' for a body. The - following list shows some examples of these rules. - - `MAIN.ADS' - Main (spec) - - `MAIN.ADB' - Main (body) - - `ARITH_FUNCTIONS.ADS' - Arith_Functions (package spec) - - `ARITH_FUNCTIONS.ADB' - Arith_Functions (package body) - - `FUNC-SPEC.ADS' - Func.Spec (child package spec) - - `FUNC-SPEC.ADB' - Func.Spec (child package body) - - `MAIN-SUB.ADB' - Sub (subunit of Main) - - `A$BAD.ADB' - A.Bad (child package body) - - Following these rules can result in excessively long file names if - corresponding unit names are long (for example, if child units or - subunits are heavily nested). An option is available to shorten such - long file names (called file name "krunching"). This may be - particularly useful when programs being developed with GNAT are to be - used on operating systems with limited file name lengths. *Note Using - GNAT KRUNCH::. - - Of course, no file shortening algorithm can guarantee uniqueness over - all possible unit names; if file name krunching is used, it is your - responsibility to ensure no name clashes occur. Alternatively you can - specify the exact file names that you want used, as described in the - next section. Finally, if your Ada programs are migrating from a - compiler with a different naming convention, you can use the GNAT CHOP - utility to produce source files that follow the GNAT naming conventions. - (For details *note Renaming Files Using GNAT CHOP::.) - -  - File: gnat_ug_vms.info, Node: Using Other File Names, Next: Alternative File Naming Schemes, Prev: File Naming Rules, Up: The GNAT Compilation Model - - Using Other File Names - ====================== - - In the previous section, we have described the default rules used by - GNAT to determine the file name in which a given unit resides. It is - often convenient to follow these default rules, and if you follow them, - the compiler knows without being explicitly told where to find all the - files it needs. - - However, in some cases, particularly when a program is imported from - another Ada compiler environment, it may be more convenient for the - programmer to specify which file names contain which units. GNAT allows - arbitrary file names to be used by means of the Source_File_Name pragma. - The form of this pragma is as shown in the following examples: - - pragma Source_File_Name (My_Utilities.Stacks, - Spec_File_Name => "MYUTILST_A.ADA"); - pragma Source_File_name (My_Utilities.Stacks, - Body_File_Name => "MYUTILST.ADA"); - - As shown in this example, the first argument for the pragma is the unit - name (in this example a child unit). The second argument has the form - of a named association. The identifier indicates whether the file name - is for a spec or a body; the file name itself is given by a string - literal. - - The source file name pragma is a configuration pragma, which means - that normally it will be placed in the `GNAT.ADC' file used to hold - configuration pragmas that apply to a complete compilation environment. - For more details on how the `GNAT.ADC' file is created and used *note - Handling of Configuration Pragmas:: - - `GNAT MAKE' handles non-standard file names in the usual manner (the - non-standard file name for the main program is simply used as the - argument to GNAT MAKE). Note that if the extension is also non-standard, - then it must be included in the GNAT MAKE command, it may not be - omitted. - -  - File: gnat_ug_vms.info, Node: Alternative File Naming Schemes, Next: Generating Object Files, Prev: Using Other File Names, Up: The GNAT Compilation Model - - Alternative File Naming Schemes - =============================== - - In the previous section, we described the use of the - `Source_File_Name' pragma to allow arbitrary names to be assigned to - individual source files. However, this approach requires one pragma - for each file, and especially in large systems can result in very long - `GNAT.ADC' files, and also create a maintenance problem. - - GNAT also provides a facility for specifying systematic file naming - schemes other than the standard default naming scheme previously - described. An alternative scheme for naming is specified by the use of - `Source_File_Name' pragmas having the following format: - - pragma Source_File_Name ( - Spec_File_Name => FILE_NAME_PATTERN - [,Casing => CASING_SPEC] - [,Dot_Replacement => STRING_LITERAL]); - - pragma Source_File_Name ( - Body_File_Name => FILE_NAME_PATTERN - [,Casing => CASING_SPEC] - [,Dot_Replacement => STRING_LITERAL]); - - pragma Source_File_Name ( - Subunit_File_Name => FILE_NAME_PATTERN - [,Casing => CASING_SPEC] - [,Dot_Replacement => STRING_LITERAL]); - - FILE_NAME_PATTERN ::= STRING_LITERAL - CASING_SPEC ::= Lowercase | Uppercase | Mixedcase - - The `FILE_NAME_PATTERN' string shows how the file name is constructed. - It contains a single asterisk character, and the unit name is - substituted systematically for this asterisk. The optional parameter - `Casing' indicates whether the unit name is to be all upper-case - letters, all lower-case letters, or mixed-case. If no `Casing' - parameter is used, then the default is all upper-case. - - The optional `Dot_Replacement' string is used to replace any periods - that occur in subunit or child unit names. If no `Dot_Replacement' - argument is used then separating dots appear unchanged in the resulting - file name. Although the above syntax indicates that the `Casing' - argument must appear before the `Dot_Replacement' argument, but it is - also permissible to write these arguments in the opposite order. - - As indicated, it is possible to specify different naming schemes for - bodies, specs, and subunits. Quite often the rule for subunits is the - same as the rule for bodies, in which case, there is no need to give a - separate `Subunit_File_Name' rule, and in this case the - `Body_File_name' rule is used for subunits as well. - - The separate rule for subunits can also be used to implement the - rather unusual case of a compilation environment (e.g. a single - directory) which contains a subunit and a child unit with the same unit - name. Although both units cannot appear in the same partition, the Ada - Reference Manual allows (but does not require) the possibility of the - two units coexisting in the same environment. - - The file name translation works in the following steps: - - * If there is a specific `Source_File_Name' pragma for the given - unit, then this is always used, and any general pattern rules are - ignored. - - * If there is a pattern type `Source_File_Name' pragma that applies - to the unit, then the resulting file name will be used if the file - exists. If more than one pattern matches, the latest one will be - tried first, and the first attempt resulting in a reference to a - file that exists will be used. - - * If no pattern type `Source_File_Name' pragma that applies to the - unit for which the corresponding file exists, then the standard - GNAT default naming rules are used. - - - As an example of the use of this mechanism, consider a commonly used - scheme in which file names are all lower case, with separating periods - copied unchanged to the resulting file name, and specs end with - ".1.ADA", and bodies end with ".2.ADA". GNAT will follow this scheme if - the following two pragmas appear: - - pragma Source_File_Name - (Spec_File_Name => "*.1.ADA"); - pragma Source_File_Name - (Body_File_Name => "*.2.ADA"); - - The default GNAT scheme is actually implemented by providing the - following default pragmas internally: - - pragma Source_File_Name - (Spec_File_Name => "*.ADS", Dot_Replacement => "-"); - pragma Source_File_Name - (Body_File_Name => "*.ADB", Dot_Replacement => "-"); - - Our final example implements a scheme typically used with one of the - Ada 83 compilers, where the separator character for subunits was "__" - (two underscores), specs were identified by adding `_.ADA', bodies by - adding `.ADA', and subunits by adding `.SEP'. All file names were upper - case. Child units were not present of course since this was an Ada 83 - compiler, but it seems reasonable to extend this scheme to use the same - double underscore separator for child units. - - pragma Source_File_Name - (Spec_File_Name => "*_.ADA", - Dot_Replacement => "__", - Casing = Uppercase); - pragma Source_File_Name - (Body_File_Name => "*.ADA", - Dot_Replacement => "__", - Casing = Uppercase); - pragma Source_File_Name - (Subunit_File_Name => "*.SEP", - Dot_Replacement => "__", - Casing = Uppercase); - -  - File: gnat_ug_vms.info, Node: Generating Object Files, Next: Source Dependencies, Prev: Alternative File Naming Schemes, Up: The GNAT Compilation Model - - Generating Object Files - ======================= - - An Ada program consists of a set of source files, and the first step in - compiling the program is to generate the corresponding object files. - These are generated by compiling a subset of these source files. The - files you need to compile are the following: - - * If a package spec has no body, compile the package spec to produce - the object file for the package. - - * If a package has both a spec and a body, compile the body to - produce the object file for the package. The source file for the - package spec need not be compiled in this case because there is - only one object file, which contains the code for both the spec - and body of the package. - - * For a subprogram, compile the subprogram body to produce the - object file for the subprogram. The spec, if one is present, is as - usual in a separate file, and need not be compiled. - - * In the case of subunits, only compile the parent unit. A single - object file is generated for the entire subunit tree, which - includes all the subunits. - - * Compile child units independently of their parent units (though, - of course, the spec of all the ancestor unit must be present in - order to compile a child unit). - - * Compile generic units in the same manner as any other units. The - object files in this case are small dummy files that contain at - most the flag used for elaboration checking. This is because GNAT - always handles generic instantiation by means of macro expansion. - However, it is still necessary to compile generic units, for - dependency checking and elaboration purposes. - - The preceding rules describe the set of files that must be compiled to - generate the object files for a program. Each object file has the same - name as the corresponding source file, except that the extension is - `.OBJ' as usual. - - You may wish to compile other files for the purpose of checking their - syntactic and semantic correctness. For example, in the case where a - package has a separate spec and body, you would not normally compile the - spec. However, it is convenient in practice to compile the spec to make - sure it is error-free before compiling clients of this spec, because - such compilations will fail if there is an error in the spec. - - GNAT provides an option for compiling such files purely for the - purposes of checking correctness; such compilations are not required as - part of the process of building a program. To compile a file in this - checking mode, use the `/NOLOAD' qualifier. - -  - File: gnat_ug_vms.info, Node: Source Dependencies, Next: The Ada Library Information Files, Prev: Generating Object Files, Up: The GNAT Compilation Model - - Source Dependencies - =================== - - A given object file clearly depends on the source file which is compiled - to produce it. Here we are using "depends" in the sense of a typical - `make' utility; in other words, an object file depends on a source file - if changes to the source file require the object file to be recompiled. - In addition to this basic dependency, a given object may depend on - additional source files as follows: - - * If a file being compiled `with''s a unit X, the object file - depends on the file containing the spec of unit X. This includes - files that are `with''ed implicitly either because they are parents - of `with''ed child units or they are run-time units required by the - language constructs used in a particular unit. - - * If a file being compiled instantiates a library level generic - unit, the object file depends on both the spec and body files for - this generic unit. - - * If a file being compiled instantiates a generic unit defined - within a package, the object file depends on the body file for the - package as well as the spec file. - - * If a file being compiled contains a call to a subprogram for which - pragma `Inline' applies and inlining is activated with the - `/INLINE=PRAGMA' qualifier, the object file depends on the file - containing the body of this subprogram as well as on the file - containing the spec. Note that for inlining to actually occur as a - result of the use of this qualifier, it is necessary to compile in - optimizing mode. - - The use of `-gnatN' activates a more extensive inlining - optimization that is performed by the front end of the compiler. - This inlining does not require that the code generation be - optimized. Like `/INLINE=PRAGMA', the use of this qualifier - generates additional dependencies. - - * If an object file O depends on the proper body of a subunit - through inlining or instantiation, it depends on the parent unit - of the subunit. This means that any modification of the parent - unit or one of its subunits affects the compilation of O. - - * The object file for a parent unit depends on all its subunit body - files. - - * The previous two rules meant that for purposes of computing - dependencies and recompilation, a body and all its subunits are - treated as an indivisible whole. - - These rules are applied transitively: if unit `A' `with''s unit - `B', whose elaboration calls an inlined procedure in package `C', - the object file for unit `A' will depend on the body of `C', in - file `C.ADB'. - - The set of dependent files described by these rules includes all - the files on which the unit is semantically dependent, as - described in the Ada 95 Language Reference Manual. However, it is - a superset of what the ARM describes, because it includes generic, - inline, and subunit dependencies. - - An object file must be recreated by recompiling the corresponding - source file if any of the source files on which it depends are - modified. For example, if the `make' utility is used to control - compilation, the rule for an Ada object file must mention all the - source files on which the object file depends, according to the - above definition. The determination of the necessary - recompilations is done automatically when one uses `GNAT MAKE'. - -  - File: gnat_ug_vms.info, Node: The Ada Library Information Files, Next: Binding an Ada Program, Prev: Source Dependencies, Up: The GNAT Compilation Model - - The Ada Library Information Files - ================================= - - Each compilation actually generates two output files. The first of these - is the normal object file that has a `.OBJ' extension. The second is a - text file containing full dependency information. It has the same name - as the source file, but an `.ALI' extension. This file is known as the - Ada Library Information (`ali') file. The following information is - contained in the `ali' file. - - * Version information (indicates which version of GNAT was used to - compile the unit(s) in question) - - * Main program information (including priority and time slice - settings, as well as the wide character encoding used during - compilation). - - * List of arguments used in the `GNAT COMPILE' command for the - compilation - - * Attributes of the unit, including configuration pragmas used, an - indication of whether the compilation was successful, exception - model used etc. - - * A list of relevant restrictions applying to the unit (used for - consistency) checking. - - * Categorization information (e.g. use of pragma `Pure'). - - * Information on all `with''ed units, including presence of - `Elaborate' or `Elaborate_All' pragmas. - - * Information from any `Linker_Options' pragmas used in the unit - - * Information on the use of `Body_Version' or `Version' attributes - in the unit. - - * Dependency information. This is a list of files, together with - time stamp and checksum information. These are files on which the - unit depends in the sense that recompilation is required if any of - these units are modified. - - * Cross-reference data. Contains information on all entities - referenced in the unit. Used by tools like `GNAT XREF' and `GNAT - FIND' to provide cross-reference information. - - - For a full detailed description of the format of the `ali' file, see - the source of the body of unit `Lib.Writ', contained in file - `LIB-WRIT.ADB' in the GNAT compiler sources. - -  - File: gnat_ug_vms.info, Node: Binding an Ada Program, Next: Mixed Language Programming, Prev: The Ada Library Information Files, Up: The GNAT Compilation Model - - Binding an Ada Program - ====================== - - When using languages such as C and C++, once the source files have been - compiled the only remaining step in building an executable program is - linking the object modules together. This means that it is possible to - link an inconsistent version of a program, in which two units have - included different versions of the same header. - - The rules of Ada do not permit such an inconsistent program to be - built. For example, if two clients have different versions of the same - package, it is illegal to build a program containing these two clients. - These rules are enforced by the GNAT binder, which also determines an - elaboration order consistent with the Ada rules. - - The GNAT binder is run after all the object files for a program have - been created. It is given the name of the main program unit, and from - this it determines the set of units required by the program, by reading - the corresponding ALI files. It generates error messages if the program - is inconsistent or if no valid order of elaboration exists. - - If no errors are detected, the binder produces a main program, in - Ada by default, that contains calls to the elaboration procedures of - those compilation unit that require them, followed by a call to the - main program. This Ada program is compiled to generate the object file - for the main program. The name of the Ada file is `B$XXX.ADB' (with the - corresponding spec `B$XXX.ADS') where XXX is the name of the main - program unit. - - Finally, the linker is used to build the resulting executable - program, using the object from the main program from the bind step as - well as the object files for the Ada units of the program. - -  - File: gnat_ug_vms.info, Node: Mixed Language Programming, Next: Building Mixed Ada & C++ Programs, Prev: Binding an Ada Program, Up: The GNAT Compilation Model - - Mixed Language Programming - ========================== - - * Menu: - - * Interfacing to C:: - * Calling Conventions:: - -  - File: gnat_ug_vms.info, Node: Interfacing to C, Next: Calling Conventions, Up: Mixed Language Programming - - Interfacing to C - ---------------- - - There are two ways to build a program that contains some Ada files and - some other language files depending on whether the main program is in - Ada or not. If the main program is in Ada, you should proceed as - follows: - - 1. Compile the other language files to generate object files. For - instance: - GNAT COMPILE FILE1.C - GNAT COMPILE FILE2.C - - 2. Compile the Ada units to produce a set of object files and ALI - files. For instance: - GNAT MAKE /ACTIONS=COMPILE MY_MAIN.ADB - - 3. Run the Ada binder on the Ada main program. For instance: - GNAT BIND MY_MAIN.ALI - - 4. Link the Ada main program, the Ada objects and the other language - objects. For instance: - GNAT LINK MY_MAIN.ALI FILE1.OBJ FILE2.OBJ - - The three last steps can be grouped in a single command: - GNAT MAKE MY_MAIN.ADB /LINKER_QUALIFIERS FILE1.OBJ FILE2.OBJ - - If the main program is in some language other than Ada, Then you may - have more than one entry point in the Ada subsystem. You must use a - special option of the binder to generate callable routines to initialize - and finalize the Ada units (*note Binding with Non-Ada Main Programs::). - Calls to the initialization and finalization routines must be inserted - in the main program, or some other appropriate point in the code. The - call to initialize the Ada units must occur before the first Ada - subprogram is called, and the call to finalize the Ada units must occur - after the last Ada subprogram returns. You use the same procedure for - building the program as described previously. In this case, however, - the binder only places the initialization and finalization subprograms - into file `B$XXX.ADB' instead of the main program. So, if the main - program is not in Ada, you should proceed as follows: - - 1. Compile the other language files to generate object files. For - instance: - GNAT COMPILE FILE1.C - GNAT COMPILE FILE2.C - - 2. Compile the Ada units to produce a set of object files and ALI - files. For instance: - GNAT MAKE /ACTIONS=COMPILE ENTRY_POINT1.ADB - GNAT MAKE /ACTIONS=COMPILE ENTRY_POINT2.ADB - - 3. Run the Ada binder on the Ada main program. For instance: - GNAT BIND /NOMAIN ENTRY_POINT1.ALI ENTRY_POINT2.ALI - - 4. Link the Ada main program, the Ada objects and the other language - objects. You only need to give the last entry point here. For - instance: - GNAT LINK ENTRY_POINT2.ALI FILE1.OBJ FILE2.OBJ - -  - File: gnat_ug_vms.info, Node: Calling Conventions, Prev: Interfacing to C, Up: Mixed Language Programming - - Calling Conventions - ------------------- - - GNAT follows standard calling sequence conventions and will thus - interface to any other language that also follows these conventions. - The following Convention identifiers are recognized by GNAT: - - * Ada. This indicates that the standard Ada calling sequence will be - used and all Ada data items may be passed without any limitations - in the case where GNAT is used to generate both the caller and - callee. It is also possible to mix GNAT generated code and code - generated by another Ada compiler. In this case, the data types - should be restricted to simple cases, including primitive types. - Whether complex data types can be passed depends on the situation. - Probably it is safe to pass simple arrays, such as arrays of - integers or floats. Records may or may not work, depending on - whether both compilers lay them out identically. Complex structures - involving variant records, access parameters, tasks, or protected - types, are unlikely to be able to be passed. - - Note that in the case of GNAT running on a platform that supports - DEC Ada 83, a higher degree of compatibility can be guaranteed, - and in particular records are layed out in an identical manner in - the two compilers. Note also that if output from two different - compilers is mixed, the program is responsible for dealing with - elaboration issues. Probably the safest approach is to write the - main program in the version of Ada other than GNAT, so that it - takes care of its own elaboration requirements, and then call the - GNAT-generated adainit procedure to ensure elaboration of the GNAT - components. Consult the documentation of the other Ada compiler - for further details on elaboration. - - However, it is not possible to mix the tasking run time of GNAT and - DEC Ada 83, All the tasking operations must either be entirely - within GNAT compiled sections of the program, or entirely within - DEC Ada 83 compiled sections of the program. - - * Assembler. Specifies assembler as the convention. In practice this - has the same effect as convention Ada (but is not equivalent in - the sense of being considered the same convention). - - * Asm. Equivalent to Assembler. - - * Asm. Equivalent to Assembly. - - * COBOL. Data will be passed according to the conventions described - in section B.4 of the Ada 95 Reference Manual. - - * C. Data will be passed according to the conventions described in - section B.3 of the Ada 95 Reference Manual. - - * Default. Equivalent to C. - - * External. Equivalent to C. - - * CPP. This stands for C++. For most purposes this is identical to C. - See the separate description of the specialized GNAT pragmas - relating to C++ interfacing for further details. - - * Fortran. Data will be passed according to the conventions described - in section B.5 of the Ada 95 Reference Manual. - - * Intrinsic. This applies to an intrinsic operation, as defined in - the Ada 95 Reference Manual. If a a pragma Import (Intrinsic) - applies to a subprogram, this means that the body of the - subprogram is provided by the compiler itself, usually by means of - an efficient code sequence, and that the user does not supply an - explicit body for it. In an application program, the pragma can - only be applied to the following two sets of names, which the GNAT - compiler recognizes. - * Rotate_Left, Rotate_Right, Shift_Left, Shift_Right, - Shift_Right_- Arithmetic. The corresponding subprogram - declaration must have two formal parameters. The first one - must be a signed integer type or a modular type with a binary - modulus, and the second parameter must be of type Natural. - The return type must be the same as the type of the first - argument. The size of this type can only be 8, 16, 32, or 64. - - * binary arithmetic operators: "+", "-", "*", "/" The - corresponding operator declaration must have parameters and - result type that have the same root numeric type (for - example, all three are long_float types). This simplifies the - definition of operations that use type checking to perform - dimensional checks: - type Distance is new Long_Float; - type Time is new Long_Float; - type Velocity is new Long_Float; - function "/" (D : Distance; T : Time) - return Velocity; - pragma Import (Intrinsic, "/"); - - This common idiom is often programmed with a generic - definition and an explicit body. The pragma makes it simpler - to introduce such declarations. It incurs no overhead in - compilation time or code size, because it is implemented as a - single machine instruction. - - * Stdcall. This is relevant only to NT/Win95 implementations of GNAT, - and specifies that the Stdcall calling sequence will be used, as - defined by the NT API. - - * DLL. This is equivalent to Stdcall. - - * Win32. This is equivalent to Stdcall. - - * Stubbed. This is a special convention that indicates that the - compiler should provide a stub body that raises `Program_Error'. - - GNAT additionally provides a useful pragma `Convention_Identifier' that - can be used to parametrize conventions and allow additional synonyms to - be specified. For example if you have legacy code in which the - convention identifier Fortran77 was used for Fortran, you can use the - configuration pragma: - - pragma Convention_Identifier (Fortran77, Fortran); - - And from now on the identifier Fortran77 may be used as a convention - identifier (for example in an `Import' pragma) with the same meaning as - Fortran. - -  - File: gnat_ug_vms.info, Node: Building Mixed Ada & C++ Programs, Next: Comparison between GNAT and C/C++ Compilation Models, Prev: Mixed Language Programming, Up: The GNAT Compilation Model - - Building Mixed Ada & C++ Programs - ================================= - - Building a mixed application containing both Ada and C++ code may be a - challenge for the unaware programmer. As a matter of fact, this - interfacing has not been standardized in the Ada 95 reference manual due - to the immaturity and lack of standard of C++ at the time. This section - gives a few hints that should make this task easier. In particular the - first section addresses the differences with interfacing with C. The - second section looks into the delicate problem of linking the complete - application from its Ada and C++ parts. The last section give some - hints on how the GNAT run time can be adapted in order to allow - inter-language dispatching with a new C++ compiler. - - * Menu: - - * Interfacing to C++:: - * Linking a Mixed C++ & Ada Program:: - * A Simple Example:: - * Adapting the Run Time to a New C++ Compiler:: - -  - File: gnat_ug_vms.info, Node: Interfacing to C++, Next: Linking a Mixed C++ & Ada Program, Up: Building Mixed Ada & C++ Programs - - Interfacing to C++ - ------------------ - - GNAT supports interfacing with C++ compilers generating code that is - compatible with the standard Application Binary Interface of the given - platform. - - Interfacing can be done at 3 levels: simple data, subprograms and - classes. In the first 2 cases, GNAT offer a specific CONVENTION CPP - that behaves exactly like CONVENTION C. Usually C++ mangle names of - subprograms and currently GNAT does not provide any help to solve the - demangling problem. This problem can be addressed in 2 ways: - * by modifying the C++ code in order to force a C convention using - the EXTERN "C" syntax. - - * by figuring out the mangled name and use it as the Link_Name - argument of the pragma import. - - Interfacing at the class level can be achieved by using the GNAT - specific pragmas such as `CPP_Class' and `CPP_Virtual'. See the GNAT - Reference Manual for additional information. - -  - File: gnat_ug_vms.info, Node: Linking a Mixed C++ & Ada Program, Next: A Simple Example, Prev: Interfacing to C++, Up: Building Mixed Ada & C++ Programs - - Linking a Mixed C++ & Ada Program - --------------------------------- - - Usually the linker of the C++ development system must be used to link - mixed applications because most C++ systems will resolve elaboration - issues (such as calling constructors on global class instances) - transparently during the link phase. GNAT has been adapted to ease the - use of a foreign linker for the last phase. Three cases can be - considered: - 1. Using GNAT and G++ (GNU C++ compiler) from the same GCC - installation. The c++ linker can simply be called by using the c++ - specific driver called `c++'. Note that this setup is not very - common because it may request recompiling the whole GCC tree from - sources and it does not allow to upgrade easily to a new version - of one compiler for one of the two languages without taking the - risk of destabilizing the other. - - $ c++ -c file1.C - $ c++ -c file2.C - $ GNAT MAKE ada_unit /LINKER_QUALIFIERS FILE1.OBJ FILE2.OBJ --LINK=c++ - - 2. Using GNAT and G++ from 2 different GCC installations. If both - compilers are on the PATH, the same method can be used. It is - important to be aware that environment variables such as - C_INCLUDE_PATH, GCC_EXEC_PREFIX, BINUTILS_ROOT or GCC_ROOT will - affect both compilers at the same time and thus may make one of - the 2 compilers operate improperly if they are set for the other. - In particular it is important that the link command has access to - the proper GNAT COMPILE library `libgcc.a', that is to say the one - that is part of the C++ compiler installation. The implicit link - command as suggested in the GNAT MAKE command from the former - example can be replaced by an explicit link command with full - verbosity in order to verify which library is used: - $ GNAT BIND ada_unit - $ GNAT LINK -v -v ada_unit FILE1.OBJ FILE2.OBJ --LINK=c++ - If there is a problem due to interfering environment variables, it - can be workaround by using an intermediate script. The following - example shows the proper script to use when GNAT has not been - installed at its default location and g++ has been installed at - its default location: - - $ GNAT LINK -v -v ada_unit FILE1.OBJ FILE2.OBJ --LINK=./my_script - $ cat ./my_script - #!/bin/sh - unset BINUTILS_ROOT - unset GCC_ROOT - c++ $* - - 3. Using a non GNU C++ compiler. The same set of command as previously - described can be used to insure that the c++ linker is used. - Nonetheless, you need to add the path to libgcc explicitely, since - some libraries needed by GNAT are located in this directory: - - - $ GNAT LINK ada_unit FILE1.OBJ FILE2.OBJ --LINK=./my_script - $ cat ./my_script - #!/bin/sh - CC $* `GNAT COMPILE -print-libgcc-file-name` - - Where CC is the name of the non GNU C++ compiler. - - -  - File: gnat_ug_vms.info, Node: A Simple Example, Next: Adapting the Run Time to a New C++ Compiler, Prev: Linking a Mixed C++ & Ada Program, Up: Building Mixed Ada & C++ Programs - - A Simple Example - ---------------- - - The following example, provided as part of the GNAT examples, show how - to achieve procedural interfacing between Ada and C++ in both - directions. The C++ class A has 2 methods. The first method is exported - to Ada by the means of an extern C wrapper function. The second method - calls an Ada subprogram. On the Ada side, The C++ calls is modelized by - a limited record with a layout comparable to the C++ class. The Ada - subprogram, in turn, calls the c++ method. So from the C++ main program - the code goes back and forth between the 2 languages. - - Here are the compilation commands for native configurations: - $ GNAT MAKE -c simple_cpp_interface - $ c++ -c cpp_main.C - $ c++ -c ex7.C - $ GNAT BIND -n simple_cpp_interface - $ GNAT LINK simple_cpp_interface -o cpp_main --LINK=$(CPLUSPLUS) - -lstdc++ EX7.OBJ CPP_MAIN.OBJ - - Here are the corresponding sources: - - //cpp_main.C - - #include "ex7.h" - - extern "C" { - void adainit (void); - void adafinal (void); - void method1 (A *t); - } - - void method1 (A *t) - { - t->method1 (); - } - - int main () - { - A obj; - adainit (); - obj.method2 (3030); - adafinal (); - } - - //ex7.h - - class Origin { - public: - int o_value; - }; - class A : public Origin { - public: - void method1 (void); - virtual void method2 (int v); - A(); - int a_value; - }; - - //ex7.C - - #include "ex7.h" - #include - - extern "C" { void ada_method2 (A *t, int v);} - - void A::method1 (void) - { - a_value = 2020; - printf ("in A::method1, a_value = %d \n",a_value); - - } - - void A::method2 (int v) - { - ada_method2 (this, v); - printf ("in A::method2, a_value = %d \n",a_value); - - } - - A::A(void) - { - a_value = 1010; - printf ("in A::A, a_value = %d \n",a_value); - } - - -- Ada sources - package body Simple_Cpp_Interface is - - procedure Ada_Method2 (This : in out A; V : Integer) is - begin - Method1 (This); - This.A_Value := V; - end Ada_Method2; - - end Simple_Cpp_Interface; - - package Simple_Cpp_Interface is - type A is limited - record - O_Value : Integer; - A_Value : Integer; - end record; - pragma Convention (C, A); - - procedure Method1 (This : in out A); - pragma Import (C, Method1); - - procedure Ada_Method2 (This : in out A; V : Integer); - pragma Export (C, Ada_Method2); - - end Simple_Cpp_Interface; - -  - File: gnat_ug_vms.info, Node: Adapting the Run Time to a New C++ Compiler, Prev: A Simple Example, Up: Building Mixed Ada & C++ Programs - - Adapting the Run Time to a New C++ Compiler - ------------------------------------------- - - GNAT offers the capability to derive Ada 95 tagged types directly from - preexisting C++ classes and . See "Interfacing with C++" in the GNAT - reference manual. The mechanism used by GNAT for achieving such a goal - has been made user configurable through a GNAT library unit - `Interfaces.CPP'. The default version of this file is adapted to the - GNU c++ compiler. Internal knowledge of the virtual table layout used - by the new C++ compiler is needed to configure properly this unit. The - Interface of this unit is known by the compiler and cannot be changed - except for the value of the constants defining the characteristics of - the virtual table: CPP_DT_Prologue_Size, CPP_DT_Entry_Size, - CPP_TSD_Prologue_Size, CPP_TSD_Entry_Size. Read comments in the source - of this unit for more details. - -  - File: gnat_ug_vms.info, Node: Comparison between GNAT and C/C++ Compilation Models, Next: Comparison between GNAT and Conventional Ada Library Models, Prev: Building Mixed Ada & C++ Programs, Up: The GNAT Compilation Model - - Comparison between GNAT and C/C++ Compilation Models - ==================================================== - - The GNAT model of compilation is close to the C and C++ models. You can - think of Ada specs as corresponding to header files in C. As in C, you - don't need to compile specs; they are compiled when they are used. The - Ada `with' is similar in effect to the `#include' of a C header. - - One notable difference is that, in Ada, you may compile specs - separately to check them for semantic and syntactic accuracy. This is - not always possible with C headers because they are fragments of - programs that have less specific syntactic or semantic rules. - - The other major difference is the requirement for running the binder, - which performs two important functions. First, it checks for - consistency. In C or C++, the only defense against assembling - inconsistent programs lies outside the compiler, in a makefile, for - example. The binder satisfies the Ada requirement that it be impossible - to construct an inconsistent program when the compiler is used in normal - mode. - - The other important function of the binder is to deal with - elaboration issues. There are also elaboration issues in C++ that are - handled automatically. This automatic handling has the advantage of - being simpler to use, but the C++ programmer has no control over - elaboration. Where `GNAT BIND' might complain there was no valid order - of elaboration, a C++ compiler would simply construct a program that - malfunctioned at run time. - -  - File: gnat_ug_vms.info, Node: Comparison between GNAT and Conventional Ada Library Models, Prev: Comparison between GNAT and C/C++ Compilation Models, Up: The GNAT Compilation Model - - Comparison between GNAT and Conventional Ada Library Models - =========================================================== - - This section is intended to be useful to Ada programmers who have - previously used an Ada compiler implementing the traditional Ada library - model, as described in the Ada 95 Language Reference Manual. If you - have not used such a system, please go on to the next section. - - In GNAT, there is no "library" in the normal sense. Instead, the set - of source files themselves acts as the library. Compiling Ada programs - does not generate any centralized information, but rather an object - file and a ALI file, which are of interest only to the binder and - linker. In a traditional system, the compiler reads information not - only from the source file being compiled, but also from the centralized - library. This means that the effect of a compilation depends on what - has been previously compiled. In particular: - - * When a unit is `with''ed, the unit seen by the compiler corresponds - to the version of the unit most recently compiled into the library. - - * Inlining is effective only if the necessary body has already been - compiled into the library. - - * Compiling a unit may obsolete other units in the library. - - In GNAT, compiling one unit never affects the compilation of any other - units because the compiler reads only source files. Only changes to - source files can affect the results of a compilation. In particular: - - * When a unit is `with''ed, the unit seen by the compiler corresponds - to the source version of the unit that is currently accessible to - the compiler. - - * Inlining requires the appropriate source files for the package or - subprogram bodies to be available to the compiler. Inlining is - always effective, independent of the order in which units are - complied. - - * Compiling a unit never affects any other compilations. The editing - of sources may cause previous compilations to be out of date if - they depended on the source file being modified. - - The most important result of these differences is that order of - compilation is never significant in GNAT. There is no situation in - which one is required to do one compilation before another. What shows - up as order of compilation requirements in the traditional Ada library - becomes, in GNAT, simple source dependencies; in other words, there is - only a set of rules saying what source files must be present when a - file is compiled. - -  - File: gnat_ug_vms.info, Node: Compiling Using GNAT COMPILE, Next: Binding Using GNAT BIND, Prev: The GNAT Compilation Model, Up: Top - - Compiling Using `GNAT COMPILE' - ****************************** - - This chapter discusses how to compile Ada programs using the `GNAT - COMPILE' command. It also describes the set of qualifiers that can be - used to control the behavior of the compiler. - - * Menu: - - * Compiling Programs:: - * Qualifiers for GNAT COMPILE:: - * Search Paths and the Run-Time Library (RTL):: - * Order of Compilation Issues:: - * Examples:: - -  - File: gnat_ug_vms.info, Node: Compiling Programs, Next: Qualifiers for GNAT COMPILE, Up: Compiling Using GNAT COMPILE - - Compiling Programs - ================== - - The first step in creating an executable program is to compile the units - of the program using the `GNAT COMPILE' command. You must compile the - following files: - - * the body file (`.ADB') for a library level subprogram or generic - subprogram - - * the spec file (`.ADS') for a library level package or generic - package that has no body - - * the body file (`.ADB') for a library level package or generic - package that has a body - - - You need _not_ compile the following files - - * the spec of a library unit which has a body - - * subunits - - because they are compiled as part of compiling related units. GNAT - package specs when the corresponding body is compiled, and subunits - when the parent is compiled. If you attempt to compile any of these - files, you will get one of the following error messages (where fff is - the name of the file you compiled): - - No code generated for file FFF (PACKAGE SPEC) - No code generated for file FFF (SUBUNIT) - - The basic command for compiling a file containing an Ada unit is - - $ GNAT COMPILE [QUALIFIERS] `file name' - - where FILE NAME is the name of the Ada file (usually having an extension - `.ADS' for a spec or `.ADB' for a body). The result of a successful - compilation is an object file, which has the same name as the source - file but an extension of `.OBJ' and an Ada Library Information (ALI) - file, which also has the same name as the source file, but with `.ALI' - as the extension. GNAT creates these two output files in the current - directory, but you may specify a source file in any directory using an - absolute or relative path specification containing the directory - information. - - `GNAT COMPILE' is actually a driver program that looks at the - extensions of the file arguments and loads the appropriate compiler. - For example, the GNU C compiler is `CC1', and the Ada compiler is - `GNAT1'. These programs are in directories known to the driver program - (in some configurations via environment variables you set), but need - not be in your path. The `GNAT COMPILE' driver also calls the assembler - and any other utilities needed to complete the generation of the - required object files. - - It is possible to supply several file names on the same `GNAT - COMPILE' command. This causes `GNAT COMPILE' to call the appropriate - compiler for each file. For example, the following command lists three - separate files to be compiled: - - $ GNAT COMPILE X.ADB Y.ADB Z.C - - calls `GNAT1' (the Ada compiler) twice to compile `X.ADB' and `Y.ADB', - and `CC1' (the C compiler) once to compile `Z.C'. The compiler - generates three object files `X.OBJ', `Y.OBJ' and `Z.OBJ' and the two - ALI files `X.ALI' and `Y.ALI' from the Ada compilations. Any qualifiers - apply to all the files listed. - -  - File: gnat_ug_vms.info, Node: Qualifiers for GNAT COMPILE, Next: Search Paths and the Run-Time Library (RTL), Prev: Compiling Programs, Up: Compiling Using GNAT COMPILE - - Qualifiers for `GNAT COMPILE' - ============================= - - The `GNAT COMPILE' command accepts qualifiers that control the - compilation process. These qualifiers are fully described in this - section. First we briefly list all the qualifiers, in alphabetical - order, then we describe the qualifiers in more detail in functionally - grouped sections. - - * Menu: - - * Output and Error Message Control:: - * Debugging and Assertion Control:: - * Run-Time Checks:: - * Stack Overflow Checking:: - * Run-Time Control:: - * Validity Checking:: - * Style Checking:: - * Using GNAT COMPILE for Syntax Checking:: - * Using GNAT COMPILE for Semantic Checking:: - * Compiling Ada 83 Programs:: - * Character Set Control:: - * File Naming Control:: - * Subprogram Inlining Control:: - * Auxiliary Output Control:: - * Debugging Control:: - * Units to Sources Mapping Files:: - - `/DEBUG' - Generate debugging information. This information is stored in the - object file and copied from there to the final executable file by - the linker, where it can be read by the debugger. You must use the - `/DEBUG' qualifier if you plan on using the debugger. - - `/SEARCH=DIR' - Direct GNAT to search the DIR directory for source files needed by - the current compilation (*note Search Paths and the Run-Time - Library (RTL)::). - - `/NOCURRENT_DIRECTORY' - Except for the source file named in the command line, do not look - for source files in the directory containing the source file named - in the command line (*note Search Paths and the Run-Time Library - (RTL)::). - - `/NOOPTIMIZE (default)' - `/OPTIMIZE[=(keyword[,...])]' - Selects the level of optimization for your program. The supported - keywords are as follows: - `ALL (default)' - Perform most optimizations, including those that be expensive. - - `NONE' - Do not do any optimizations. Same as `/NOOPTIMIZE'. - - `SOME' - Perform some optimizations, but omit ones that are costly. - - `DEVELOPMENT' - Same as `SOME'. - - `INLINING' - Full optimization, and also attempt automatic inlining of - small subprograms within a unit (*note Inlining of - Subprograms::). - - `UNROLL_LOOPS' - Try to unroll loops. This keyword may be specified together - with any keyword above other than `NONE'. Loop unrolling - usually, but not always, improves the performance of programs. - - `/RUNTIME_SYSTEM=RTS-PATH' - Specifies the default location of the runtime library. Same - meaning as the equivalent `GNAT MAKE' flag (see *Note Qualifiers - for GNAT MAKE::). - - `/ASM' - Used to cause the assembler source file to be generated, using - `.S' as the extension, instead of the object file. This may be - useful if you need to examine the generated assembly code. - - `/VERBOSE' - Show commands generated by the `GNAT COMPILE' driver. Normally - used only for debugging purposes or if you need to be sure what - version of the compiler you are executing. - - `/CHECKS=ASSERTIONS' - Assertions enabled. `Pragma Assert' and `pragma Debug' to be - activated. - - `-gnatA' - Avoid processing `GNAT.ADC'. If a GNAT.ADC file is present, it - will be ignored. - - `/WARNINGS=BRIEF' - Generate brief messages to `SYS$ERROR' even if verbose mode set. - - `/NOLOAD' - Check syntax and semantics only (no code generation attempted). - - `/COMPRESS_NAMES' - Compress debug information and external symbol name table entries. - - `/XDEBUG' - Output expanded source files for source level debugging. This - qualifier also suppress generation of cross-reference information - (see /XREF=SUPPRESS). - - `-gnatecPATH' - Specify a configuration pragma file. (see *Note The Configuration - Pragmas Files::) - - `-gnatemPATH' - Specify a mapping file. (see *Note Units to Sources Mapping - Files::) - - `/CHECKS=ELABORATION' - Full dynamic elaboration checks. - - `/REPORT_ERRORS=FULL' - Full errors. Multiple errors per line, all undefined references. - - `/UPPERCASE_EXTERNALS' - Externals names are folded to all uppercase. - - `/STYLE=GNAT' - Internal GNAT implementation mode. This should not be used for - applications programs, it is intended only for use by the compiler - and its run-time library. For documentation, see the GNAT sources. - - `/EXPAND_SOURCE' - List generated expanded code in source form. - - `/IDENTIFIER_CHARACTER_SET=C' - Identifier character set For details of the possible selections - for C, see *Note Character Set Control::. - - `/HELP' - Output usage information. The output is written to `SYS$OUTPUT'. - - `/FILE_NAME_MAX_LENGTH=N' - Limit file names to N (1-999) characters . - - `/LIST' - Output full source listing with embedded error messages. - - `/ERROR_LIMIT=N' - Limit number of detected errors to N (1-999). - - `/INLINE=PRAGMA' - Activate inlining across unit boundaries for subprograms for which - pragma `inline' is specified. - - `-gnatN' - Activate front end inlining. - - `/INLINE=SUPPRESS' - Suppresses all inlining, even if other optimization or inlining - qualifiers are set. - - `/CHECKS=OVERFLOW' - Enable numeric overflow checking (which is not normally enabled by - default). Not that division by zero is a separate check that is not - controlled by this qualifier (division by zero checking is on by - default). - - `/CHECKS=SUPPRESS_ALL' - Suppress all checks. - - `/TRY_SEMANTICS' - Don't quit; try semantics, even if parse errors. - - `/FORCE_ALI' - Don't quit; generate `ali' and tree files even if illegalities. - - `/POLLING_ENABLE' - Enable polling. This is required on some systems (notably Windows - NT) to obtain asynchronous abort and asynchronous transfer of - control capability. See the description of pragma Polling in the - GNAT Reference Manual for full details. - - `/REPRESENTATION_INFO[0/1/2/3][s]' - Output representation information for declared types and objects. - - `/SYNTAX_ONLY' - Syntax check only. - - `/TREE_OUTPUT' - Tree output file to be generated. - - `-gnatT nnn' - Set time slice to specified number of microseconds - - `/UNITS_LIST' - List units for this compilation. - - `/UNIQUE_ERROR_TAG' - Tag all error messages with the unique string "error:" - - `/REPORT_ERRORS=VERBOSE' - Verbose mode. Full error output with source lines to `SYS$OUTPUT'. - - `/VALIDITY_CHECKING' - Control level of validity checking. See separate section describing - this feature. - - `/WARNINGS=XXX' - Warning mode where XXX is a string of options describing the exact - warnings that are enabled or disabled. See separate section on - warning control. - - `/WIDE_CHARACTER_ENCODING=E' - Wide character encoding method (E=`BRACKETS, NONE, HEX, UPPER, - SHIFT_JIS, EUC, UTF8') - - `/XREF=SUPPRESS' - Suppress generation of cross-reference information. - - `/STYLE_CHECKS=(option,option..)' - Enable built-in style checks. See separate section describing this - feature. - - `/DISTRIBUTION_STUBS=M' - Distribution stub generation and compilation (M=`RECEIVER' or - `CALLER' to specify the type of stubs to be generated and - compiled). - - `/83' - Enforce Ada 83 restrictions. - - The following restrictions apply to the combination of qualifiers in - this manner: - - * The qualifier `/NOLOAD' if combined with other qualifiers must come - first in the string. - - * The qualifier `/SYNTAX_ONLY' if combined with other qualifiers - must come first in the string. - - * Once a "y" appears in the string (that is a use of the `/STYLE=' - qualifier), then all further characters in the qualifier are - interpreted as style modifiers (see description of `/STYLE='). - - * Once a "d" appears in the string (that is a use of the `-gnatd' - qualifier), then all further characters in the qualifier are - interpreted as debug flags (see description of `-gnatd'). - - * Once a "w" appears in the string (that is a use of the `-gnatw' - qualifier), then all further characters in the qualifier are - interpreted as warning mode modifiers (see description of - `-gnatw'). - - * Once a "V" appears in the string (that is a use of the - `/VALIDITY_CHECKING' qualifier), then all further characters in - the qualifier are interpreted as validity checking options (see - description of `/VALIDITY_CHECKING'). - - -  - File: gnat_ug_vms.info, Node: Output and Error Message Control, Next: Debugging and Assertion Control, Up: Qualifiers for GNAT COMPILE - - Output and Error Message Control - -------------------------------- - - The standard default format for error messages is called "brief format." - Brief format messages are written to `SYS$ERROR' (the standard error - file) and have the following form: - - E.ADB:3:04: Incorrect spelling of keyword "function" - E.ADB:4:20: ";" should be "is" - - The first integer after the file name is the line number in the file, - and the second integer is the column number within the line. `glide' - can parse the error messages and point to the referenced character. - The following qualifiers provide control over the error message format: - - `/REPORT_ERRORS=VERBOSE' - The effect of this setting is to write long-format error messages - to `SYS$OUTPUT' (the standard output file. The same program - compiled with the `/REPORT_ERRORS=VERBOSE' qualifier would - generate: - - 3. funcion X (Q : Integer) - | - >>> Incorrect spelling of keyword "function" - 4. return Integer; - | - >>> ";" should be "is" - - The vertical bar indicates the location of the error, and the `>>>' - prefix can be used to search for error messages. When this - qualifier is used the only source lines output are those with - errors. - - `/LIST' - This qualifier causes a full listing of the file to be generated. - The output might look as follows: - - 1. procedure E is - 2. V : Integer; - 3. funcion X (Q : Integer) - | - >>> Incorrect spelling of keyword "function" - 4. return Integer; - | - >>> ";" should be "is" - 5. begin - 6. return Q + Q; - 7. end; - 8. begin - 9. V := X + X; - 10.end E; - - When you specify the `/REPORT_ERRORS=VERBOSE' or `/LIST' - qualifiers and standard output is redirected, a brief summary is - written to `SYS$ERROR' (standard error) giving the number of error - messages and warning messages generated. - - `/UNIQUE_ERROR_TAG' - This qualifier forces all error messages to be preceded by the - unique string "error:". This means that error messages take a few - more characters in space, but allows easy searching for and - identification of error messages. - - `/WARNINGS=BRIEF' - This qualifier causes GNAT to generate the brief format error - messages to `SYS$ERROR' (the standard error file) as well as the - verbose format message or full listing (which as usual is written - to `SYS$OUTPUT' (the standard output file). - - `/ERROR_LIMIT=N' - N is a decimal integer in the range of 1 to 999 and limits the - number of error messages to be generated. For example, using - `/ERROR_LIMIT=2' might yield - - E.ADB:3:04: Incorrect spelling of keyword "function" - E.ADB:5:35: missing ".." - fatal error: maximum errors reached - compilation abandoned - - `/REPORT_ERRORS=FULL' - Normally, the compiler suppresses error messages that are likely - to be redundant. This qualifier causes all error messages to be - generated. In particular, in the case of references to undefined - variables. If a given variable is referenced several times, the - normal format of messages is - E.ADB:7:07: "V" is undefined (more references follow) - - where the parenthetical comment warns that there are additional - references to the variable `V'. Compiling the same program with the - `/REPORT_ERRORS=FULL' qualifier yields - - E.ADB:7:07: "V" is undefined - E.ADB:8:07: "V" is undefined - E.ADB:8:12: "V" is undefined - E.ADB:8:16: "V" is undefined - E.ADB:9:07: "V" is undefined - E.ADB:9:12: "V" is undefined - - `/TRY_SEMANTICS' - In normal operation mode, the compiler first parses the program and - determines if there are any syntax errors. If there are, - appropriate error messages are generated and compilation is - immediately terminated. This qualifier tells GNAT to continue - with semantic analysis even if syntax errors have been found. This - may enable the detection of more errors in a single run. On the - other hand, the semantic analyzer is more likely to encounter some - internal fatal error when given a syntactically invalid tree. - - `/FORCE_ALI' - In normal operation mode, the `ali' file is not generated if any - illegalities are detected in the program. The use of `/FORCE_ALI' - forces generation of the `ali' file. This file is marked as being - in error, so it cannot be used for binding purposes, but it does - contain reasonably complete cross-reference information, and thus - may be useful for use by tools (e.g. semantic browsing tools or - integrated development environments) that are driven from the - `ali' file. - - In addition, if `/TREE_OUTPUT' is also specified, then the tree - file is generated even if there are illegalities. It may be useful - in this case to also specify `/TRY_SEMANTICS' to ensure that full - semantic processing occurs. The resulting tree file can be - processed by ASIS, for the purpose of providing partial - information about illegal units, but if the error causes the tree - to be badly malformed, then ASIS may crash during the analysis. - - In addition to error messages, which correspond to illegalities as - defined in the Ada 95 Reference Manual, the compiler detects two kinds - of warning situations. - - First, the compiler considers some constructs suspicious and - generates a warning message to alert you to a possible error. Second, - if the compiler detects a situation that is sure to raise an exception - at run time, it generates a warning message. The following shows an - example of warning messages: - E.ADB:4:24: warning: creation of object may raise Storage_Error - E.ADB:10:17: warning: static value out of range - E.ADB:10:17: warning: "Constraint_Error" will be raised at run time - - GNAT considers a large number of situations as appropriate for the - generation of warning messages. As always, warnings are not definite - indications of errors. For example, if you do an out-of-range - assignment with the deliberate intention of raising a - `Constraint_Error' exception, then the warning that may be issued does - not indicate an error. Some of the situations for which GNAT issues - warnings (at least some of the time) are given in the following list, - which is not necessarily complete. - - * Possible infinitely recursive calls - - * Out-of-range values being assigned - - * Possible order of elaboration problems - - * Unreachable code - - * Fixed-point type declarations with a null range - - * Variables that are never assigned a value - - * Variables that are referenced before being initialized - - * Task entries with no corresponding accept statement - - * Duplicate accepts for the same task entry in a select - - * Objects that take too much storage - - * Unchecked conversion between types of differing sizes - - * Missing return statements along some execution paths in a function - - * Incorrect (unrecognized) pragmas - - * Incorrect external names - - * Allocation from empty storage pool - - * Potentially blocking operations in protected types - - * Suspicious parenthesization of expressions - - * Mismatching bounds in an aggregate - - * Attempt to return local value by reference - - * Unrecognized pragmas - - * Premature instantiation of a generic body - - * Attempt to pack aliased components - - * Out of bounds array subscripts - - * Wrong length on string assignment - - * Violations of style rules if style checking is enabled - - * Unused with clauses - - * Bit_Order usage that does not have any effect - - * Compile time biased rounding of floating-point constant - - * Standard.Duration used to resolve universal fixed expression - - * Dereference of possibly null value - - * Declaration that is likely to cause storage error - - * Internal GNAT unit with'ed by application unit - - * Values known to be out of range at compile time - - * Unreferenced labels and variables - - * Address overlays that could clobber memory - - * Unexpected initialization when address clause present - - * Bad alignment for address clause - - * Useless type conversions - - * Redundant assignment statements - - * Accidental hiding of name by child unit - - * Unreachable code - - * Access before elaboration detected at compile time - - * A range in a `for' loop that is known to be null or might be null - - - The following qualifiers are available to control the handling of - warning messages: - - `/WARNINGS=OPTIONAL (activate all optional errors)' - This qualifier activates most optional warning messages, see - remaining list in this section for details on optional warning - messages that can be individually controlled. The warnings that - are not turned on by this qualifier are - `/WARNINGS=BIASED_ROUNDING' (biased rounding), - `/WARNINGS=IMPLICIT_DEREFERENCE' (implicit dereferencing), and - `/WARNINGS=HIDING' (hiding). All other optional warnings are - turned on. - - `/WARNINGS=NOOPTIONAL (suppress all optional errors)' - This qualifier suppresses all optional warning messages, see - remaining list in this section for details on optional warning - messages that can be individually controlled. - - `/WARNINGS=BIASED_ROUNDING (activate warnings on biased rounding)' - If a static floating-point expression has a value that is exactly - half way between two adjacent machine numbers, then the rules of - Ada (Ada Reference Manual, section 4.9(38)) require that this - rounding be done away from zero, even if the normal unbiased - rounding rules at run time would require rounding towards zero. - This warning message alerts you to such instances where - compile-time rounding and run-time rounding are not equivalent. If - it is important to get proper run-time rounding, then you can - force this by making one of the operands into a variable. The - default is that such warnings are not generated. Note that - `/WARNINGS=OPTIONAL' does not affect the setting of this warning - option. - - `/WARNINGS=NOBIASED_ROUNDING (suppress warnings on biased rounding)' - This qualifier disables warnings on biased rounding. - - `/WARNINGS=CONDITIONALS (activate warnings on conditionals)' - This qualifier activates warnings for conditional expressions used - in tests that are known to be True or False at compile time. The - default is that such warnings are not generated. This warning can - also be turned on using `/WARNINGS=OPTIONAL'. - - `/WARNINGS=NOCONDITIONALS (suppress warnings on conditionals)' - This qualifier suppresses warnings for conditional expressions - used in tests that are known to be True or False at compile time. - - `/WARNINGS=IMPLICIT_DEREFERENCE (activate warnings on implicit dereferencing)' - If this qualifier is set, then the use of a prefix of an access - type in an indexed component, slice, or selected component without - an explicit `.all' will generate a warning. With this warning - enabled, access checks occur only at points where an explicit - `.all' appears in the source code (assuming no warnings are - generated as a result of this qualifier). The default is that such - warnings are not generated. Note that `/WARNINGS=OPTIONAL' does - not affect the setting of this warning option. - - `/WARNINGS=NOIMPLICIT_DEREFERENCE (suppress warnings on implicit dereferencing)' - This qualifier suppresses warnings for implicit deferences in - indexed components, slices, and selected components. - - `/WARNINGS=ERROR (treat warnings as errors)' - This qualifier causes warning messages to be treated as errors. - The warning string still appears, but the warning messages are - counted as errors, and prevent the generation of an object file. - - `/WARNINGS=UNREFERENCED_FORMALS (activate warnings on unreferenced formals)' - This qualifier causes a warning to be generated if a formal - parameter is not referenced in the body of the subprogram. This - warning can also be turned on using `/WARNINGS=OPTIONAL' or - `/WARNINGS=UNUSED'. - - `/WARNINGS=NOUNREFERENCED_FORMALS (suppress warnings on unreferenced formals)' - This qualifier suppresses warnings for unreferenced formal - parameters. Note that the combination `/WARNINGS=UNUSED' followed - by `/WARNINGS=NOUNREFERENCED_FORMALS' has the effect of warning on - unreferenced entities other than subprogram formals. - - `/WARNINGS=HIDING (activate warnings on hiding)' - This qualifier activates warnings on hiding declarations. A - declaration is considered hiding if it is for a non-overloadable - entity, and it declares an entity with the same name as some other - entity that is directly or use-visible. The default is that such - warnings are not generated. Note that `/WARNINGS=OPTIONAL' does - not affect the setting of this warning option. - - `/WARNINGS=NOHIDING (suppress warnings on hiding)' - This qualifier suppresses warnings on hiding declarations. - - `/WARNINGS=IMPLEMENTATION (activate warnings on implementation units).' - This qualifier activates warnings for a `with' of an internal GNAT - implementation unit, defined as any unit from the `Ada', - `Interfaces', `GNAT', `DEC', or `System' hierarchies that is not - documented in either the Ada Reference Manual or the GNAT - Programmer's Reference Manual. Such units are intended only for - internal implementation purposes and should not be `with''ed by - user programs. The default is that such warnings are generated - This warning can also be turned on using `/WARNINGS=OPTIONAL'. - - `/WARNINGS=NOIMPLEMENTATION (disable warnings on implementation units).' - This qualifier disables warnings for a `with' of an internal GNAT - implementation unit. - - `/WARNINGS=ELABORATION (activate warnings on elaboration pragmas)' - This qualifier activates warnings on missing pragma Elaborate_All - statements. See the section in this guide on elaboration checking - for details on when such pragma should be used. The default is - that such warnings are not generated. This warning can also be - turned on using `/WARNINGS=OPTIONAL'. - - `/WARNINGS=NOELABORATION (suppress warnings on elaboration pragmas)' - This qualifier suppresses warnings on missing pragma Elaborate_All - statements. See the section in this guide on elaboration checking - for details on when such pragma should be used. - - `/WARNINGS=OVERLAYS (activate warnings on address clause overlays)' - This qualifier activates warnings for possibly unintended - initialization effects of defining address clauses that cause one - variable to overlap another. The default is that such warnings are - generated. This warning can also be turned on using - `/WARNINGS=OPTIONAL'. - - `/WARNINGS=NOOVERLAYS (suppress warnings on address clause overlays)' - This qualifier suppresses warnings on possibly unintended - initialization effects of defining address clauses that cause one - variable to overlap another. - - `-gnatwp (activate warnings on ineffective pragma Inlines)' - This qualifier activates warnings for failure of front end inlining - (activated by `-gnatN') to inline a particular call. There are - many reasons for not being able to inline a call, including most - commonly that the call is too complex to inline. This warning can - also be turned on using `/WARNINGS=OPTIONAL'. - - `-gnatwP (suppress warnings on ineffective pragma Inlines)' - This qualifier suppresses warnings on ineffective pragma Inlines. - If the inlining mechanism cannot inline a call, it will simply - ignore the request silently. - - `/WARNINGS=REDUNDANT (activate warnings on redundant constructs)' - This qualifier activates warnings for redundant constructs. The - following is the current list of constructs regarded as redundant: - This warning can also be turned on using `/WARNINGS=OPTIONAL'. - - * Assignment of an item to itself. - - * Type conversion that converts an expression to its own type. - - * Use of the attribute `Base' where `typ'Base' is the same as - `typ'. - - * Use of pragma `Pack' when all components are placed by a - record representation clause. - - `/WARNINGS=NOREDUNDANT (suppress warnings on redundant constructs)' - This qualifier suppresses warnings for redundant constructs. - - `/WARNINGS=SUPPRESS (suppress all warnings)' - This qualifier completely suppresses the output of all warning - messages from the GNAT front end. Note that it does not suppress - warnings from the `GNAT COMPILE' back end. To suppress these back - end warnings as well, use the qualifier `-w' in addition to - `/WARNINGS=SUPPRESS'. - - `/WARNINGS=UNUSED (activate warnings on unused entities)' - This qualifier activates warnings to be generated for entities that - are defined but not referenced, and for units that are `with''ed - and not referenced. In the case of packages, a warning is also - generated if no entities in the package are referenced. This means - that if the package is referenced but the only references are in - `use' clauses or `renames' declarations, a warning is still - generated. A warning is also generated for a generic package that - is `with''ed but never instantiated. In the case where a package - or subprogram body is compiled, and there is a `with' on the - corresponding spec that is only referenced in the body, a warning - is also generated, noting that the `with' can be moved to the - body. The default is that such warnings are not generated. This - qualifier also activates warnings on unreferenced formals (it is - includes the effect of `/WARNINGS=UNREFERENCED_FORMALS'). This - warning can also be turned on using `/WARNINGS=OPTIONAL'. - - `/WARNINGS=NOUNUSED (suppress warnings on unused entities)' - This qualifier suppresses warnings for unused entities and - packages. It also turns off warnings on unreferenced formals (and - thus includes the effect of `/WARNINGS=NOUNREFERENCED_FORMALS'). - - A string of warning parameters can be used in the same parameter. - For example: - - -gnatwaLe - - Would turn on all optional warnings except for elaboration pragma - warnings, and also specify that warnings should be treated as - errors. - - `-w' - This qualifier suppresses warnings from the `GNAT COMPILE' - backend. It may be used in conjunction with `/WARNINGS=SUPPRESS' - to ensure that all warnings are suppressed during the entire - compilation process. - -  - File: gnat_ug_vms.info, Node: Debugging and Assertion Control, Next: Run-Time Checks, Prev: Output and Error Message Control, Up: Qualifiers for GNAT COMPILE - - Debugging and Assertion Control - ------------------------------- - - `/CHECKS=ASSERTIONS' - The pragmas `Assert' and `Debug' normally have no effect and are - ignored. This qualifier, where `a' stands for assert, causes - `Assert' and `Debug' pragmas to be activated. - - The pragmas have the form: - - pragma Assert (BOOLEAN-EXPRESSION [, - STATIC-STRING-EXPRESSION]) - pragma Debug (PROCEDURE CALL) - - The `Assert' pragma causes BOOLEAN-EXPRESSION to be tested. If - the result is `True', the pragma has no effect (other than - possible side effects from evaluating the expression). If the - result is `False', the exception `Assert_Failure' declared in the - package `System.Assertions' is raised (passing - STATIC-STRING-EXPRESSION, if present, as the message associated - with the exception). If no string expression is given the default - is a string giving the file name and line number of the pragma. - - The `Debug' pragma causes PROCEDURE to be called. Note that - `pragma Debug' may appear within a declaration sequence, allowing - debugging procedures to be called between declarations. - - `/DEBUG[=debug-level]' - `/NODEBUG' - Specifies how much debugging information is to be included in the - resulting object file where 'debug-level' is one of the following: - `TRACEBACK (default)' - Include both debugger symbol records and traceback the object - file. - - `ALL' - Include both debugger symbol records and traceback in object - file. - - `NONE' - Excludes both debugger symbol records and traceback the - object file. Same as /NODEBUG. - - `SYMBOLS' - Includes only debugger symbol records in the object file. - Note that this doesn't include traceback information. - -  - File: gnat_ug_vms.info, Node: Validity Checking, Next: Style Checking, Prev: Run-Time Control, Up: Qualifiers for GNAT COMPILE - - Validity Checking - ----------------- - - The Ada 95 Reference Manual has specific requirements for checking for - invalid values. In particular, RM 13.9.1 requires that the evaluation - of invalid values (for example from unchecked conversions), not result - in erroneous execution. In GNAT, the result of such an evaluation in - normal default mode is to either use the value unmodified, or to raise - Constraint_Error in those cases where use of the unmodified value would - cause erroneous execution. The cases where unmodified values might lead - to erroneous execution are case statements (where a wild jump might - result from an invalid value), and subscripts on the left hand side - (where memory corruption could occur as a result of an invalid value). - - The `-gnatVx' qualifier allows more control over the validity - checking mode. The `x' argument here is a string of letters which - control which validity checks are performed in addition to the default - checks described above. - - * `-gnatVc' Validity checks for copies - - The right hand side of assignments, and the initializing values of - object declarations are validity checked. - - * `/VALIDITY_CHECKING=RM' Default (RM) validity checks - - Some validity checks are done by default following normal Ada - semantics (RM 13.9.1 (9-11)). A check is done in case statements - that the expression is within the range of the subtype. If it is - not, Constraint_Error is raised. For assignments to array - components, a check is done that the expression used as index is - within the range. If it is not, Constraint_Error is raised. Both - these validity checks may be turned off using qualifier `-gnatVD'. - They are turned on by default. If `-gnatVD' is specified, a - subsequent qualifier `/VALIDITY_CHECKING=RM' will leave the checks - turned on. Qualifier `-gnatVD' should be used only if you are - sure that all such expressions have valid values. If you use this - qualifier and invalid values are present, then the program is - erroneous, and wild jumps or memory overwriting may occur. - - * `-gnatVi' Validity checks for `in' mode parameters - - Arguments for parameters of mode `in' are validity checked in - function and procedure calls at the point of call. - - * `-gnatVm' Validity checks for `in out' mode parameters - - Arguments for parameters of mode `in out' are validity checked in - procedure calls at the point of call. The `'m'' here stands for - modify, since this concerns parameters that can be modified by the - call. Note that there is no specific option to test `out' - parameters, but any reference within the subprogram will be tested - in the usual manner, and if an invalid value is copied back, any - reference to it will be subject to validity checking. - - * `-gnatVo' Validity checks for operator and attribute operands - - Arguments for predefined operators and attributes are validity - checked. This includes all operators in package `Standard', the - shift operators defined as intrinsic in package `Interfaces' and - operands for attributes such as `Pos'. - - * `-gnatVr' Validity checks for function returns - - The expression in `return' statements in functions is validity - checked. - - * `-gnatVs' Validity checks for subscripts - - All subscripts expressions are checked for validity, whether they - appear on the right side or left side (in default mode only left - side subscripts are validity checked). - - * `-gnatVt' Validity checks for tests - - Expressions used as conditions in `if', `while' or `exit' - statements are checked, as well as guard expressions in entry - calls. - - * `/VALIDITY_CHECKING=FULL' Validity checks for floating-point values - - In the absence of this qualifier, validity checking occurs only - for discrete values. If `/VALIDITY_CHECKING=FULL' is specified, - then validity checking also applies for floating-point values, and - NaN's and infinities are considered invalid, as well as out of - range values for constrained types. Note that this means that - standard `IEEE' infinity mode is not allowed. The exact contexts - in which floating-point values are checked depends on the setting - of other options. For example `-gnatVif' or `-gnatVfi' (the order - does not matter) specifies that floating-point parameters of mode - `in' should be validity checked. - - * `-gnatVa' All validity checks - - All the above validity checks are turned on. That is `-gnatVa' is - equivalent to `gnatVcdfimorst'. - - * `-gnatVn' No validity checks - - This qualifier turns off all validity checking, including the - default checking for case statements and left hand side - subscripts. Note that the use of the qualifier - `/CHECKS=SUPPRESS_ALL' supresses all run-time checks, including - validity checks, and thus implies `-gnatVn'. - - - The `/VALIDITY_CHECKING' qualifier may be followed by a string of - letters to turn on a series of validity checking options. For example, - `-gnatVcr' specifies that in addition to the default validity checking, - copies and function return expressions be validity checked. In order to - make it easier to specify a set of options, the upper case letters - `CDFIMORST' may be used to turn off the corresponding lower case - option, so for example `-gnatVaM' turns on all validity checking - options except for checking of `in out' procedure arguments. - - The specification of additional validity checking generates extra - code (and in the case of `-gnatva' the code expansion can be - substantial. However, these additional checks can be very useful in - smoking out cases of uninitialized variables, incorrect use of - unchecked conversion, and other errors leading to invalid values. The - use of pragma `Initialize_Scalars' is useful in conjunction with the - extra validity checking, since this ensures that wherever possible - uninitialized variables have invalid values. - - See also the pragma `Validity_Checks' which allows modification of - the validity checking mode at the program source level, and also allows - for temporary disabling of validity checks. - -  - File: gnat_ug_vms.info, Node: Style Checking, Next: Using GNAT COMPILE for Syntax Checking, Prev: Validity Checking, Up: Qualifiers for GNAT COMPILE - - Style Checking - -------------- - - The /STYLE=(OPTION,OPTION,..) qualifier causes the compiler to enforce - specified style rules. A limited set of style rules has been used in - writing the GNAT sources themselves. This qualifier allows user programs - to activate all or some of these checks. If the source program fails a - specified style check, an appropriate warning message is given, - preceded by the character sequence "(style)". (OPTION,OPTION,..) is a - sequence of keywords indicating the particular style checks to be - performed. The following checks are defined: - - `1-9 (specify indentation level)' - If a digit from 1-9 appears in the string after `/STYLE=' then - proper indentation is checked, with the digit indicating the - indentation level required. The general style of required - indentation is as specified by the examples in the Ada Reference - Manual. Full line comments must be aligned with the `--' starting - on a column that is a multiple of the alignment level. - - `ATTRIBUTE (check attribute casing)' - If the word ATTRIBUTE appears in the string after `/STYLE=' then - attribute names, including the case of keywords such as `digits' - used as attributes names, must be written in mixed case, that is, - the initial letter and any letter following an underscore must be - uppercase. All other letters must be lowercase. - - `BLANKS (blanks not allowed at statement end)' - If the word BLANKS appears in the string after `/STYLE=' then - trailing blanks are not allowed at the end of statements. The - purpose of this rule, together with h (no horizontal tabs), is to - enforce a canonical format for the use of blanks to separate - source tokens. - - `COMMENTS (check comments)' - If the word COMMENTS appears in the string after `/STYLE=' then - comments must meet the following set of rules: - - * The "-" that starts the column must either start in column - one, or else at least one blank must precede this sequence. - - * Comments that follow other tokens on a line must have at - least one blank following the "-" at the start of the comment. - - * Full line comments must have two blanks following the "-" - that starts the comment, with the following exceptions. - - * A line consisting only of the "-" characters, possibly - preceded by blanks is permitted. - - * A comment starting with "-x" where x is a special character - is permitted. This alows proper processing of the output - generated by specialized tools including `GNAT PREPROCESS' - (where -! is used) and the SPARK annnotation language (where - -# is used). For the purposes of this rule, a special - character is defined as being in one of the ASCII ranges - 16#21#..16#2F# or 16#3A#..16#3F#. - - * A line consisting entirely of minus signs, possibly preceded - by blanks, is permitted. This allows the construction of box - comments where lines of minus signs are used to form the top - and bottom of the box. - - * If a comment starts and ends with "-" is permitted as long as - at least one blank follows the initial "-". Together with the - preceding rule, this allows the construction of box comments, - as shown in the following example: - --------------------------- - -- This is a box comment -- - -- with two text lines. -- - --------------------------- - - `END (check end/exit labels)' - If the word END appears in the string after `/STYLE=' then - optional labels on `end' statements ending subprograms and on - `exit' statements exiting named loops, are required to be present. - - `VTABS (no form feeds or vertical tabs)' - If the word VTABS appears in the string after `/STYLE=' then - neither form feeds nor vertical tab characters are not permitted - in the source text. - - `HTABS (no horizontal tabs)' - If the word HTABS appears in the string after `/STYLE=' then - horizontal tab characters are not permitted in the source text. - Together with the b (no blanks at end of line) check, this - enforces a canonical form for the use of blanks to separate source - tokens. - - `IF_THEN (check if-then layout)' - If the word IF_THEN appears in the string after `/STYLE=', then - the keyword `then' must appear either on the same line as - corresponding `if', or on a line on its own, lined up under the - `if' with at least one non-blank line in between containing all or - part of the condition to be tested. - - `KEYWORD (check keyword casing)' - If the word KEYWORD appears in the string after `/STYLE=' then all - keywords must be in lower case (with the exception of keywords - such as `digits' used as attribute names to which this check does - not apply). - - `LAYOUT (check layout)' - If the word LAYOUT appears in the string after `/STYLE=' then - layout of statement and declaration constructs must follow the - recommendations in the Ada Reference Manual, as indicated by the - form of the syntax rules. For example an `else' keyword must be - lined up with the corresponding `if' keyword. - - There are two respects in which the style rule enforced by this - check option are more liberal than those in the Ada Reference - Manual. First in the case of record declarations, it is - permissible to put the `record' keyword on the same line as the - `type' keyword, and then the `end' in `end record' must line up - under `type'. For example, either of the following two layouts is - acceptable: - - type q is record - a : integer; - b : integer; - end record; - - type q is - record - a : integer; - b : integer; - end record; - - Second, in the case of a block statement, a permitted alternative - is to put the block label on the same line as the `declare' or - `begin' keyword, and then line the `end' keyword up under the - block label. For example both the following are permitted: - - Block : declare - A : Integer := 3; - begin - Proc (A, A); - end Block; - - Block : - declare - A : Integer := 3; - begin - Proc (A, A); - end Block; - - The same alternative format is allowed for loops. For example, - both of the following are permitted: - - Clear : while J < 10 loop - A (J) := 0; - end loop Clear; - - Clear : - while J < 10 loop - A (J) := 0; - end loop Clear; - - `LINE_LENGTH (check maximum line length)' - If the word LINE_LENGTH appears in the string after `/STYLE=' then - the length of source lines must not exceed 79 characters, including - any trailing blanks. The value of 79 allows convenient display on - an 80 character wide device or window, allowing for possible - special treatment of 80 character lines. - - `MAX_LENGTH=nnn (set maximum line length)' - If the sequence MAX_LENGTH=nnn, where nnn is a decimal number, - appears in the string after `/STYLE=' then the length of lines - must not exceed the given value. - - `STANDARD_CASING (check casing of entities in Standard)' - If the word STANDARD_CASING appears in the string after `/STYLE=' - then any identifier from Standard must be cased to match the - presentation in the Ada Reference Manual (for example, `Integer' - and `ASCII.NUL'). - - `ORDERED_SUBPROGRAMS (check order of subprogram bodies)' - If the word ORDERED_SUBPROGRAMS appears in the string after - `/STYLE=' then all subprogram bodies in a given scope (e.g. a - package body) must be in alphabetical order. The ordering rule - uses normal Ada rules for comparing strings, ignoring casing of - letters, except that if there is a trailing numeric suffix, then - the value of this suffix is used in the ordering (e.g. Junk2 comes - before Junk10). - - `PRAGMA (check pragma casing)' - If the word PRAGMA appears in the string after `/STYLE=' then - pragma names must be written in mixed case, that is, the initial - letter and any letter following an underscore must be uppercase. - All other letters must be lowercase. - - `REFERENCES (check references)' - If the word REFERENCES appears in the string after `/STYLE=' then - all identifier references must be cased in the same way as the - corresponding declaration. No specific casing style is imposed on - identifiers. The only requirement is for consistency of references - with declarations. - - `SPECS (check separate specs)' - If the word SPECS appears in the string after `/STYLE=' then - separate declarations ("specs") are required for subprograms (a - body is not allowed to serve as its own declaration). The only - exception is that parameterless library level procedures are not - required to have a separate declaration. This exception covers the - most frequent form of main program procedures. - - `TOKEN (check token spacing)' - If the word TOKEN appears in the string after `/STYLE=' then the - following token spacing rules are enforced: - - * The keywords `abs' and `not' must be followed by a space. - - * The token `=>' must be surrounded by spaces. - - * The token `<>' must be preceded by a space or a left - parenthesis. - - * Binary operators other than `**' must be surrounded by spaces. - There is no restriction on the layout of the `**' binary - operator. - - * Colon must be surrounded by spaces. - - * Colon-equal (assignment) must be surrounded by spaces. - - * Comma must be the first non-blank character on the line, or be - immediately preceded by a non-blank character, and must be - followed by a space. - - * If the token preceding a left paren ends with a letter or - digit, then a space must separate the two tokens. - - * A right parenthesis must either be the first non-blank - character on a line, or it must be preceded by a non-blank - character. - - * A semicolon must not be preceded by a space, and must not be - followed by a non-blank character. - - * A unary plus or minus may not be followed by a space. - - * A vertical bar must be surrounded by spaces. - - In the above rules, appearing in column one is always permitted, - that is, counts as meeting either a requirement for a required - preceding space, or as meeting a requirement for no preceding - space. - - Appearing at the end of a line is also always permitted, that is, - counts as meeting either a requirement for a following space, or - as meeting a requirement for no following space. - - If any of these style rules is violated, a message is generated giving - details on the violation. The initial characters of such messages are - always "(style)". Note that these messages are treated as warning - messages, so they normally do not prevent the generation of an object - file. The `/WARNINGS=ERROR' qualifier can be used to treat warning - messages, including style messages, as fatal errors. - - The qualifier /STYLE_CHECKS=ALL_BUILTIN is equivalent to all checking - options enabled with the exception of ORDERED_SUBPROGRAMS, with an - indentation level of 3. This is the standard checking option that is - used for the GNAT sources. - -  - File: gnat_ug_vms.info, Node: Run-Time Checks, Next: Stack Overflow Checking, Prev: Debugging and Assertion Control, Up: Qualifiers for GNAT COMPILE - - Run-Time Checks - --------------- - - If you compile with the default options, GNAT will insert many run-time - checks into the compiled code, including code that performs range - checking against constraints, but not arithmetic overflow checking for - integer operations (including division by zero) or checks for access - before elaboration on subprogram calls. All other run-time checks, as - required by the Ada 95 Reference Manual, are generated by default. The - following `GNAT COMPILE' qualifiers refine this default behavior: - - `/CHECKS=SUPPRESS_ALL' - Suppress all run-time checks as though `pragma Suppress - (all_checks') had been present in the source. Validity checks are - also suppressed (in other words `/CHECKS=SUPPRESS_ALL' also - implies `-gnatVn'. Use this qualifier to improve the performance - of the code at the expense of safety in the presence of invalid - data or program bugs. - - `/CHECKS=OVERFLOW' - Enables overflow checking for integer operations. This causes - GNAT to generate slower and larger executable programs by adding - code to check for overflow (resulting in raising - `Constraint_Error' as required by standard Ada semantics). These - overflow checks correspond to situations in which the true value - of the result of an operation may be outside the base range of the - result type. The following example shows the distinction: - - X1 : Integer := Integer'Last; - X2 : Integer range 1 .. 5 := 5; - ... - X1 := X1 + 1; -- `/CHECKS=OVERFLOW' required to catch the Constraint_Error - X2 := X2 + 1; -- range check, `/CHECKS=OVERFLOW' has no effect here - - Here the first addition results in a value that is outside the - base range of Integer, and hence requires an overflow check for - detection of the constraint error. The second increment operation - results in a violation of the explicit range constraint, and such - range checks are always performed. Basically the compiler can - assume that in the absence of the `/CHECKS=OVERFLOW' qualifier - that any value of type `xxx' is in range of the base type of `xxx'. - - Note that the `/CHECKS=OVERFLOW' qualifier does not affect the - code generated for any floating-point operations; it applies only - to integer semantics). For floating-point, GNAT has the - `Machine_Overflows' attribute set to `False' and the normal mode - of operation is to generate IEEE NaN and infinite values on - overflow or invalid operations (such as dividing 0.0 by 0.0). - - The reason that we distinguish overflow checking from other kinds - of range constraint checking is that a failure of an overflow - check can generate an incorrect value, but cannot cause erroneous - behavior. This is unlike the situation with a constraint check on - an array subscript, where failure to perform the check can result - in random memory description, or the range check on a case - statement, where failure to perform the check can cause a wild - jump. - - Note again that `/CHECKS=OVERFLOW' is off by default, so overflow - checking is not performed in default mode. This means that out of - the box, with the default settings, GNAT does not do all the - checks expected from the language description in the Ada Reference - Manual. If you want all constraint checks to be performed, as - described in this Manual, then you must explicitly use the - /CHECKS=OVERFLOW qualifier either on the `GNAT MAKE' or `GNAT - COMPILE' command. - - `/CHECKS=ELABORATION' - Enables dynamic checks for access-before-elaboration on subprogram - calls and generic instantiations. For full details of the effect - and use of this qualifier, *Note Compiling Using GNAT COMPILE::. - - The setting of these qualifiers only controls the default setting of the - checks. You may modify them using either `Suppress' (to remove checks) - or `Unsuppress' (to add back suppressed checks) pragmas in the program - source. - -  - File: gnat_ug_vms.info, Node: Stack Overflow Checking, Next: Run-Time Control, Prev: Run-Time Checks, Up: Qualifiers for GNAT COMPILE - - Stack Overflow Checking - ----------------------- - - For most operating systems, `GNAT COMPILE' does not perform stack - overflow checking by default. This means that if the main environment - task or some other task exceeds the available stack space, then - unpredictable behavior will occur. - - To activate stack checking, compile all units with the GNAT COMPILE - option `-fstack-check'. For example: - - GNAT COMPILE -fstack-check PACKAGE1.ADB - - Units compiled with this option will generate extra instructions to - check that any use of the stack (for procedure calls or for declaring - local variables in declare blocks) do not exceed the available stack - space. If the space is exceeded, then a `Storage_Error' exception is - raised. - - For declared tasks, the stack size is always controlled by the size - given in an applicable `Storage_Size' pragma (or is set to the default - size if no pragma is used. - - For the environment task, the stack size depends on system defaults - and is unknown to the compiler. The stack may even dynamically grow on - some systems, precluding the normal Ada semantics for stack overflow. - In the worst case, unbounded stack usage, causes unbounded stack - expansion resulting in the system running out of virtual memory. - - The stack checking may still work correctly if a fixed size stack is - allocated, but this cannot be guaranteed. To ensure that a clean - exception is signalled for stack overflow, set the environment variable - `GNAT_STACK_LIMIT' to indicate the maximum stack area that can be used, - as in: - - SET GNAT_STACK_LIMIT 1600 - - The limit is given in kilobytes, so the above declaration would set the - stack limit of the environment task to 1.6 megabytes. Note that the - only purpose of this usage is to limit the amount of stack used by the - environment task. If it is necessary to increase the amount of stack - for the environment task, then this is an operating systems issue, and - must be addressed with the appropriate operating systems commands. - -  - File: gnat_ug_vms.info, Node: Run-Time Control, Next: Validity Checking, Prev: Stack Overflow Checking, Up: Qualifiers for GNAT COMPILE - - Run-Time Control - ---------------- - - `-gnatT nnn' - The `gnatT' qualifier can be used to specify the time-slicing value - to be used for task switching between equal priority tasks. The - value `nnn' is given in microseconds as a decimal integer. - - Setting the time-slicing value is only effective if the underlying - thread control system can accommodate time slicing. Check the - documentation of your operating system for details. Note that the - time-slicing value can also be set by use of pragma `Time_Slice' - or by use of the `t' qualifier in the GNAT BIND step. The pragma - overrides a command line argument if both are present, and the `t' - qualifier for GNAT BIND overrides both the pragma and the `GNAT - COMPILE' command line qualifier. - -  - File: gnat_ug_vms.info, Node: Using GNAT COMPILE for Syntax Checking, Next: Using GNAT COMPILE for Semantic Checking, Prev: Style Checking, Up: Qualifiers for GNAT COMPILE - - Using `GNAT COMPILE' for Syntax Checking - ---------------------------------------- - - `/SYNTAX_ONLY' - Run GNAT in syntax checking only mode. For example, the command - - $ GNAT COMPILE /SYNTAX_ONLY X.ADB - - compiles file `X.ADB' in syntax-check-only mode. You can check a - series of files in a single command . - - You may use other qualifiers in conjunction with `/SYNTAX_ONLY'. In - particular, `/LIST' and `/REPORT_ERRORS=VERBOSE' are useful to - control the format of any generated error messages. - - The output is simply the error messages, if any. No object file or - ALI file is generated by a syntax-only compilation. Also, no units - other than the one specified are accessed. For example, if a unit - `X' `with''s a unit `Y', compiling unit `X' in syntax check only - mode does not access the source file containing unit `Y'. - - Normally, GNAT allows only a single unit in a source file. - However, this restriction does not apply in syntax-check-only - mode, and it is possible to check a file containing multiple - compilation units concatenated together. This is primarily used by - the `GNAT CHOP' utility (*note Renaming Files Using GNAT CHOP::). - -  - File: gnat_ug_vms.info, Node: Using GNAT COMPILE for Semantic Checking, Next: Compiling Ada 83 Programs, Prev: Using GNAT COMPILE for Syntax Checking, Up: Qualifiers for GNAT COMPILE - - Using `GNAT COMPILE' for Semantic Checking - ------------------------------------------ - - `/NOLOAD' - Causes the compiler to operate in semantic check mode, with full - checking for all illegalities specified in the Ada 95 Reference - Manual, but without generation of any object code (no object file - is generated). - - Because dependent files must be accessed, you must follow the GNAT - semantic restrictions on file structuring to operate in this mode: - - * The needed source files must be accessible (*note Search - Paths and the Run-Time Library (RTL)::). - - * Each file must contain only one compilation unit. - - * The file name and unit name must match (*note File Naming - Rules::). - - The output consists of error messages as appropriate. No object - file is generated. An `ALI' file is generated for use in the - context of cross-reference tools, but this file is marked as not - being suitable for binding (since no object file is generated). - The checking corresponds exactly to the notion of legality in the - Ada 95 Reference Manual. - - Any unit can be compiled in semantics-checking-only mode, including - units that would not normally be compiled (subunits, and - specifications where a separate body is present). - -  - File: gnat_ug_vms.info, Node: Compiling Ada 83 Programs, Next: Character Set Control, Prev: Using GNAT COMPILE for Semantic Checking, Up: Qualifiers for GNAT COMPILE - - Compiling Ada 83 Programs - ------------------------- - - `/83' - Although GNAT is primarily an Ada 95 compiler, it accepts this - qualifier to specify that an Ada 83 program is to be compiled in - Ada83 mode. If you specify this qualifier, GNAT rejects most Ada - 95 extensions and applies Ada 83 semantics where this can be done - easily. It is not possible to guarantee this qualifier does a - perfect job; for example, some subtle tests, such as are found in - earlier ACVC tests (that have been removed from the ACVC suite for - Ada 95), may not compile correctly. However, for most purposes, - using this qualifier should help to ensure that programs that - compile correctly under the `/83' qualifier can be ported easily - to an Ada 83 compiler. This is the main use of the qualifier. - - With few exceptions (most notably the need to use `<>' on - unconstrained generic formal parameters, the use of the new Ada 95 - keywords, and the use of packages with optional bodies), it is not - necessary to use the `/83' qualifier when compiling Ada 83 - programs, because, with rare exceptions, Ada 95 is upwardly - compatible with Ada 83. This means that a correct Ada 83 program - is usually also a correct Ada 95 program. - -  - File: gnat_ug_vms.info, Node: Character Set Control, Next: File Naming Control, Prev: Compiling Ada 83 Programs, Up: Qualifiers for GNAT COMPILE - - Character Set Control - --------------------- - - `/IDENTIFIER_CHARACTER_SET=C' - Normally GNAT recognizes the Latin-1 character set in source - program identifiers, as described in the Ada 95 Reference Manual. - This qualifier causes GNAT to recognize alternate character sets - in identifiers. C is a single character or word indicating the - character set, as follows: - - `1' - Latin-1 identifiers - - `2' - Latin-2 letters allowed in identifiers - - `3' - Latin-3 letters allowed in identifiers - - `4' - Latin-4 letters allowed in identifiers - - `5' - Latin-5 (Cyrillic) letters allowed in identifiers - - `9' - Latin-9 letters allowed in identifiers - - `PC' - IBM PC letters (code page 437) allowed in identifiers - - `PC850' - IBM PC letters (code page 850) allowed in identifiers - - `FULL_UPPER' - Full upper-half codes allowed in identifiers - - `NO_UPPER' - No upper-half codes allowed in identifiers - - `WIDE' - Wide-character codes (that is, codes greater than 255) - allowed in identifiers - - *Note Foreign Language Representation::, for full details on the - implementation of these character sets. - - `/WIDE_CHARACTER_ENCODING=E' - Specify the method of encoding for wide characters. E is one of - the following: - - `HEX' - Hex encoding (brackets coding also recognized) - - `UPPER' - Upper half encoding (brackets encoding also recognized) - - `SHIFT_JIS' - Shift/JIS encoding (brackets encoding also recognized) - - `EUC' - EUC encoding (brackets encoding also recognized) - - `UTF8' - UTF-8 encoding (brackets encoding also recognized) - - `BRACKETS' - Brackets encoding only (default value) For full details on - the these encoding methods see *Note Wide Character Encodings::. - Note that brackets coding is always accepted, even if one of the - other options is specified, so for example - `/WIDE_CHARACTER_ENCODING=UTF8' specifies that both brackets and - `UTF-8' encodings will be recognized. The units that are with'ed - directly or indirectly will be scanned using the specified - representation scheme, and so if one of the non-brackets scheme is - used, it must be used consistently throughout the program. However, - since brackets encoding is always recognized, it may be - conveniently used in standard libraries, allowing these libraries - to be used with any of the available coding schemes. scheme. If - no `/WIDE_CHARACTER_ENCODING=?' parameter is present, then the - default representation is Brackets encoding only. - - Note that the wide character representation that is specified - (explicitly or by default) for the main program also acts as the - default encoding used for Wide_Text_IO files if not specifically - overridden by a WCEM form parameter. - -  - File: gnat_ug_vms.info, Node: File Naming Control, Next: Subprogram Inlining Control, Prev: Character Set Control, Up: Qualifiers for GNAT COMPILE - - File Naming Control - ------------------- - - `/FILE_NAME_MAX_LENGTH=N' - Activates file name "krunching". N, a decimal integer in the range - 1-999, indicates the maximum allowable length of a file name (not - including the `.ADS' or `.ADB' extension). The default is not to - enable file name krunching. - - For the source file naming rules, *Note File Naming Rules::. - -  - File: gnat_ug_vms.info, Node: Subprogram Inlining Control, Next: Auxiliary Output Control, Prev: File Naming Control, Up: Qualifiers for GNAT COMPILE - - Subprogram Inlining Control - --------------------------- - - `/INLINE=PRAGMA' - GNAT recognizes and processes `Inline' pragmas. However, for the - inlining to actually occur, optimization must be enabled. To enable - inlining across unit boundaries, this is, inlining a call in one - unit of a subprogram declared in a `with''ed unit, you must also - specify this qualifier. In the absence of this qualifier, GNAT - does not attempt inlining across units and does not need to access - the bodies of subprograms for which `pragma Inline' is specified - if they are not in the current unit. - - If you specify this qualifier the compiler will access these - bodies, creating an extra source dependency for the resulting - object file, and where possible, the call will be inlined. For - further details on when inlining is possible see *Note Inlining of - Subprograms::. - - `-gnatN' - The front end inlining activated by this qualifier is generally - more extensive, and quite often more effective than the standard - `/INLINE=PRAGMA' inlining mode. It will also generate additional - dependencies. - -  - File: gnat_ug_vms.info, Node: Auxiliary Output Control, Next: Debugging Control, Prev: Subprogram Inlining Control, Up: Qualifiers for GNAT COMPILE - - Auxiliary Output Control - ------------------------ - - `/TREE_OUTPUT' - Causes GNAT to write the internal tree for a unit to a file (with - the extension `.adt'. This not normally required, but is used by - separate analysis tools. Typically these tools do the necessary - compilations automatically, so you should not have to specify this - qualifier in normal operation. - - `/UNITS_LIST' - Print a list of units required by this compilation on `SYS$OUTPUT'. - The listing includes all units on which the unit being compiled - depends either directly or indirectly. - -  - File: gnat_ug_vms.info, Node: Debugging Control, Next: Units to Sources Mapping Files, Prev: Auxiliary Output Control, Up: Qualifiers for GNAT COMPILE - - Debugging Control - ----------------- - - `/EXPAND_SOURCE' - This qualifier causes the compiler to generate auxiliary output - containing a pseudo-source listing of the generated expanded code. - Like most Ada compilers, GNAT works by first transforming the high - level Ada code into lower level constructs. For example, tasking - operations are transformed into calls to the tasking run-time - routines. A unique capability of GNAT is to list this expanded - code in a form very close to normal Ada source. This is very - useful in understanding the implications of various Ada usage on - the efficiency of the generated code. There are many cases in Ada - (e.g. the use of controlled types), where simple Ada statements can - generate a lot of run-time code. By using `/EXPAND_SOURCE' you can - identify these cases, and consider whether it may be desirable to - modify the coding approach to improve efficiency. - - The format of the output is very similar to standard Ada source, - and is easily understood by an Ada programmer. The following - special syntactic additions correspond to low level features used - in the generated code that do not have any exact analogies in pure - Ada source form. The following is a partial list of these special - constructions. See the specification of package `Sprint' in file - `SPRINT.ADS' for a full list. - - `new XXX [storage_pool = YYY]' - Shows the storage pool being used for an allocator. - - `at end PROCEDURE-NAME;' - Shows the finalization (cleanup) procedure for a scope. - - `(if EXPR then EXPR else EXPR)' - Conditional expression equivalent to the `x?y:z' construction - in C. - - `TARGET^(SOURCE)' - A conversion with floating-point truncation instead of - rounding. - - `TARGET?(SOURCE)' - A conversion that bypasses normal Ada semantic checking. In - particular enumeration types and fixed-point types are - treated simply as integers. - - `TARGET?^(SOURCE)' - Combines the above two cases. - - `X #/ Y' - `X #mod Y' - `X #* Y' - `X #rem Y' - A division or multiplication of fixed-point values which are - treated as integers without any kind of scaling. - - `free EXPR [storage_pool = XXX]' - Shows the storage pool associated with a `free' statement. - - `freeze TYPENAME [ACTIONS]' - Shows the point at which TYPENAME is frozen, with possible - associated actions to be performed at the freeze point. - - `reference ITYPE' - Reference (and hence definition) to internal type ITYPE. - - `FUNCTION-NAME! (ARG, ARG, ARG)' - Intrinsic function call. - - `LABELNAME : label' - Declaration of label LABELNAME. - - `EXPR && EXPR && EXPR ... && EXPR' - A multiple concatenation (same effect as EXPR & EXPR & EXPR, - but handled more efficiently). - - `[constraint_error]' - Raise the `Constraint_Error' exception. - - `EXPRESSION'reference' - A pointer to the result of evaluating EXPRESSION. - - `TARGET-TYPE!(SOURCE-EXPRESSION)' - An unchecked conversion of SOURCE-EXPRESSION to TARGET-TYPE. - - `[NUMERATOR/DENOMINATOR]' - Used to represent internal real literals (that) have no exact - representation in base 2-16 (for example, the result of - compile time evaluation of the expression 1.0/27.0). - - `/XDEBUG' - This qualifier is used in conjunction with `/EXPAND_SOURCE' - to cause the expanded source, as described above to be - written to files with names `XXX_DG', where `xxx' is the - normal file name, for example, if the source file name is - `HELLO.ADB', then a file `HELLO.ADB_DG' will be written. The - debugging information generated by the `GNAT COMPILE' - `/DEBUG' qualifier will refer to the generated `XXX_DG' file. - This allows you to do source level debugging using the - generated code which is sometimes useful for complex code, - for example to find out exactly which part of a complex - construction raised an exception. This qualifier also - suppress generation of cross-reference information (see - /XREF=SUPPRESS). - - `/COMPRESS_NAMES' - In the generated debugging information, and also in the case - of long external names, the compiler uses a compression - mechanism if the name is very long. This compression method - uses a checksum, and avoids trouble on some operating systems - which have difficulty with very long names. The - `/COMPRESS_NAMES' qualifier forces this compression approach - to be used on all external names and names in the debugging - information tables. This reduces the size of the generated - executable, at the expense of making the naming scheme more - complex. The compression only affects the qualification of - the name. Thus a name in the source: - - Very_Long_Package.Very_Long_Inner_Package.Var - - would normally appear in these tables as: - - very_long_package__very_long_inner_package__var - - but if the `/COMPRESS_NAMES' qualifier is used, then the name - appears as - - XCb7e0c705__var - - Here b7e0c705 is a compressed encoding of the qualification - prefix. The GNAT Ada aware version of GDB understands these - encoded prefixes, so if this debugger is used, the encoding - is largely hidden from the user of the compiler. - - `/REPRESENTATION_INFO[0|1|2|3][s]' - This qualifier controls output from the compiler of a listing - showing representation information for declared types and objects. - For `/REPRESENTATION_INFO=NONE', no information is output - (equivalent to omitting the `/REPRESENTATION_INFO' qualifier). For - `/REPRESENTATION_INFO=ARRAYS' (which is the default, so - `/REPRESENTATION_INFO' with no parameter has the same effect), - size and alignment information is listed for declared array and - record types. For `/REPRESENTATION_INFO=OBJECTS', size and - alignment information is listed for all expression information for - values that are computed at run time for variant records. These - symbolic expressions have a mostly obvious format with #n being - used to represent the value of the n'th discriminant. See source - files `REPINFO.ADS/adb' in the `GNAT' sources for full detalis on - the format of `/REPRESENTATION_INFO=SYMBOLIC' output. If the - qualifier is followed by an s (e.g. `-gnatR2s'), then the output - is to a file with the name `file_REP' where file is the name of - the corresponding source file. - - `/XREF=SUPPRESS' - Normally the compiler generates full cross-referencing information - in the `ALI' file. This information is used by a number of tools, - including `GNAT FIND' and `GNAT XREF'. The /XREF=SUPPRESS qualifier - suppresses this information. This saves some space and may slightly - speed up compilation, but means that these tools cannot be used. - -  - File: gnat_ug_vms.info, Node: Units to Sources Mapping Files, Prev: Debugging Control, Up: Qualifiers for GNAT COMPILE - - Units to Sources Mapping Files - ------------------------------ - - `-gnatemPATH' - A mapping file is a way to communicate to the compiler two - mappings: from unit names to file names (without any directory - information) and from file names to path names (with full - directory information). These mappings are used by the compiler to - short-circuit the path search. - - A mapping file is a sequence of sets of three lines. In each set, - the first line is the unit name, in lower case, with "%s" appended - for specifications and "%b" appended for bodies; the second line - is the file name; and the third line is the path name. - - Example: - main%b - main.2.ADA - /gnat/project1/sources/main.2.ADA - - When the qualifier `-gnatem' is specified, the compiler will create - in memory the two mappings from the specified file. If there is - any problem (non existent file, truncated file or duplicate - entries), no mapping will be created. - - Several `-gnatem' qualifiers may be specified; however, only the - last one on the command line will be taken into account. - - When using a project file, `GNAT MAKE' create a temporary mapping - file and communicates it to the compiler using this qualifier. - -  - File: gnat_ug_vms.info, Node: Search Paths and the Run-Time Library (RTL), Next: Order of Compilation Issues, Prev: Qualifiers for GNAT COMPILE, Up: Compiling Using GNAT COMPILE - - Search Paths and the Run-Time Library (RTL) - =========================================== - - With the GNAT source-based library system, the compiler must be able to - find source files for units that are needed by the unit being compiled. - Search paths are used to guide this process. - - The compiler compiles one source file whose name must be given - explicitly on the command line. In other words, no searching is done - for this file. To find all other source files that are needed (the most - common being the specs of units), the compiler examines the following - directories, in the following order: - - 1. The directory containing the source file of the main unit being - compiled (the file name on the command line). - - 2. Each directory named by an `/SOURCE_SEARCH' qualifier given on the - `GNAT COMPILE' command line, in the order given. - - 3. Each of the directories listed in the value of the - `ADA_INCLUDE_PATH' logical name. Normally, define this value as a - logical name containing a comma separated list of directory names. - - This variable can also be defined by means of an environment string - (an argument to the DEC C exec* set of functions). - - Logical Name: - DEFINE ANOTHER_PATH FOO:[BAG] - DEFINE ADA_INCLUDE_PATH ANOTHER_PATH,FOO:[BAM],FOO:[BAR] - - By default, the path includes GNU:[LIB.OPENVMS7_x.2_8_x.DECLIB] - first, followed by the standard Ada 95 libraries in - GNU:[LIB.OPENVMS7_x.2_8_x.ADAINCLUDE]. If this is not redefined, - the user will obtain the DEC Ada83 IO packages (Text_IO, - Sequential_IO, etc) instead of the Ada95 packages. Thus, in order - to get the Ada 95 packages by default, ADA_INCLUDE_PATH must be - redefined. - - 4. The content of the "ada_source_path" file which is part of the GNAT - installation tree and is used to store standard libraries such as - the GNAT Run Time Library (RTL) source files. - - Specifying the qualifier `/NOCURRENT_DIRECTORY' inhibits the use of the - directory containing the source file named in the command line. You can - still have this directory on your search path, but in this case it must - be explicitly requested with a `/SOURCE_SEARCH' qualifier. - - Specifying the qualifier `/NOSTD_INCLUDES' inhibits the search of - the default location for the GNAT Run Time Library (RTL) source files. - - The compiler outputs its object files and ALI files in the current - working directory. - - The packages `Ada', `System', and `Interfaces' and their children - make up the GNAT RTL, together with the simple `System.IO' package used - in the "Hello World" example. The sources for these units are needed by - the compiler and are kept together in one directory. Not all of the - bodies are needed, but all of the sources are kept together anyway. In - a normal installation, you need not specify these directory names when - compiling or binding. Either the environment variables or the built-in - defaults cause these files to be found. - - In addition to the language-defined hierarchies (System, Ada and - Interfaces), the GNAT distribution provides a fourth hierarchy, - consisting of child units of GNAT. This is a collection of generally - useful routines. See the GNAT Reference Manual for further details. - - Besides simplifying access to the RTL, a major use of search paths is - in compiling sources from multiple directories. This can make - development environments much more flexible. - -  - File: gnat_ug_vms.info, Node: Order of Compilation Issues, Next: Examples, Prev: Search Paths and the Run-Time Library (RTL), Up: Compiling Using GNAT COMPILE - - Order of Compilation Issues - =========================== - - If, in our earlier example, there was a spec for the `hello' procedure, - it would be contained in the file `HELLO.ADS'; yet this file would not - have to be explicitly compiled. This is the result of the model we - chose to implement library management. Some of the consequences of this - model are as follows: - - * There is no point in compiling specs (except for package specs - with no bodies) because these are compiled as needed by clients. If - you attempt a useless compilation, you will receive an error - message. It is also useless to compile subunits because they are - compiled as needed by the parent. - - * There are no order of compilation requirements: performing a - compilation never obsoletes anything. The only way you can obsolete - something and require recompilations is to modify one of the - source files on which it depends. - - * There is no library as such, apart from the ALI files (*note The - Ada Library Information Files::, for information on the format of - these files). For now we find it convenient to create separate ALI - files, but eventually the information therein may be incorporated - into the object file directly. - - * When you compile a unit, the source files for the specs of all - units that it `with''s, all its subunits, and the bodies of any - generics it instantiates must be available (reachable by the - search-paths mechanism described above), or you will receive a - fatal error message. - -  - File: gnat_ug_vms.info, Node: Examples, Prev: Order of Compilation Issues, Up: Compiling Using GNAT COMPILE - - Examples - ======== - - The following are some typical Ada compilation command line examples: - - `$ GNAT COMPILE XYZ.ADB' - Compile body in file `XYZ.ADB' with all default options. - - `$ GNAT COMPILE /OPTIMIZE=ALL /CHECKS=ASSERTIONS XYZ-DEF.ADB' - Compile the child unit package in file `XYZ-DEF.ADB' with extensive - optimizations, and pragma `Assert'/`Debug' statements enabled. - - `$ GNAT COMPILE /NOLOAD ABC-DEF.ADB' - Compile the subunit in file `ABC-DEF.ADB' in semantic-checking-only - mode. - -  - File: gnat_ug_vms.info, Node: Binding Using GNAT BIND, Next: Linking Using GNAT LINK, Prev: Compiling Using GNAT COMPILE, Up: Top - - Binding Using `GNAT BIND' - ************************* - - * Menu: - - * Running GNAT BIND:: - * Generating the Binder Program in C:: - * Consistency-Checking Modes:: - * Binder Error Message Control:: - * Elaboration Control:: - * Output Control:: - * Binding with Non-Ada Main Programs:: - * Binding Programs with No Main Subprogram:: - * Summary of Binder Qualifiers:: - * Command-Line Access:: - * Search Paths for GNAT BIND:: - * Examples of GNAT BIND Usage:: - - This chapter describes the GNAT binder, `GNAT BIND', which is used to - bind compiled GNAT objects. The `GNAT BIND' program performs four - separate functions: - - 1. Checks that a program is consistent, in accordance with the rules - in Chapter 10 of the Ada 95 Reference Manual. In particular, error - messages are generated if a program uses inconsistent versions of a - given unit. - - 2. Checks that an acceptable order of elaboration exists for the - program and issues an error message if it cannot find an order of - elaboration that satisfies the rules in Chapter 10 of the Ada 95 - Language Manual. - - 3. Generates a main program incorporating the given elaboration order. - This program is a small Ada package (body and spec) that must be - subsequently compiled using the GNAT compiler. The necessary - compilation step is usually performed automatically by `GNAT - LINK'. The two most important functions of this program are to - call the elaboration routines of units in an appropriate order and - to call the main program. - - 4. Determines the set of object files required by the given main - program. This information is output in the forms of comments in - the generated program, to be read by the `GNAT LINK' utility used - to link the Ada application. - -  - File: gnat_ug_vms.info, Node: Running GNAT BIND, Next: Generating the Binder Program in C, Up: Binding Using GNAT BIND - - Running `GNAT BIND' - =================== - - The form of the `GNAT BIND' command is - - $ GNAT BIND [QUALIFIERS] MAINPROG[.ALI] [QUALIFIERS] - - where MAINPROG.ADB is the Ada file containing the main program unit - body. If no qualifiers are specified, `GNAT BIND' constructs an Ada - package in two files which names are `B$ADA_MAIN.ADS', and - `B$ADA_MAIN.ADB'. For example, if given the parameter `HELLO.ALI', for - a main program contained in file `HELLO.ADB', the binder output files - would be `B~HELLO.ADS' and `B~HELLO.ADB'. - - When doing consistency checking, the binder takes into consideration - any source files it can locate. For example, if the binder determines - that the given main program requires the package `Pack', whose `.ALI' - file is `PACK.ALI' and whose corresponding source spec file is - `PACK.ADS', it attempts to locate the source file `PACK.ADS' (using the - same search path conventions as previously described for the `GNAT - COMPILE' command). If it can locate this source file, it checks that - the time stamps or source checksums of the source and its references to - in `ali' files match. In other words, any `ali' files that mentions - this spec must have resulted from compiling this version of the source - file (or in the case where the source checksums match, a version close - enough that the difference does not matter). - - The effect of this consistency checking, which includes source - files, is that the binder ensures that the program is consistent with - the latest version of the source files that can be located at bind - time. Editing a source file without compiling files that depend on the - source file cause error messages to be generated by the binder. - - For example, suppose you have a main program `HELLO.ADB' and a - package `P', from file `P.ADS' and you perform the following steps: - - 1. Enter `GNAT COMPILE HELLO.ADB' to compile the main program. - - 2. Enter `GNAT COMPILE P.ADS' to compile package `P'. - - 3. Edit file `P.ADS'. - - 4. Enter `GNAT BIND hello'. - - At this point, the file `P.ALI' contains an out-of-date time stamp - because the file `P.ADS' has been edited. The attempt at binding fails, - and the binder generates the following error messages: - - error: "HELLO.ADB" must be recompiled ("P.ADS" has been modified) - error: "P.ADS" has been modified and must be recompiled - - Now both files must be recompiled as indicated, and then the bind can - succeed, generating a main program. You need not normally be concerned - with the contents of this file, but it is similar to the following which - is the binder file generated for a simple "hello world" program. - - -- The package is called Ada_Main unless this name is actually used - -- as a unit name in the partition, in which case some other unique - -- name is used. - - with System; - package ada_main is - - Elab_Final_Code : Integer; - pragma Import (C, Elab_Final_Code, "__gnat_inside_elab_final_code"); - - -- The main program saves the parameters (argument count, - -- argument values, environment pointer) in global variables - -- for later access by other units including - -- Ada.Command_Line. - - gnat_argc : Integer; - gnat_argv : System.Address; - gnat_envp : System.Address; - - -- The actual variables are stored in a library routine. This - -- is useful for some shared library situations, where there - -- are problems if variables are not in the library. - - pragma Import (C, gnat_argc); - pragma Import (C, gnat_argv); - pragma Import (C, gnat_envp); - - -- The exit status is similarly an external location - - gnat_exit_status : Integer; - pragma Import (C, gnat_exit_status); - - GNAT_Version : constant String := - "GNAT Version: 3.15w (20010315)"; - pragma Export (C, GNAT_Version, "__gnat_version"); - - -- This is the generated adafinal routine that performs - -- finalization at the end of execution. In the case where - -- Ada is the main program, this main program makes a call - -- to adafinal at program termination. - - procedure adafinal; - pragma Export (C, adafinal, "adafinal"); - - -- This is the generated adainit routine that performs - -- initialization at the start of execution. In the case - -- where Ada is the main program, this main program makes - -- a call to adainit at program startup. - - procedure adainit; - pragma Export (C, adainit, "adainit"); - - -- This routine is called at the start of execution. It is - -- a dummy routine that is used by the debugger to breakpoint - -- at the start of execution. - - procedure Break_Start; - pragma Import (C, Break_Start, "__gnat_break_start"); - - -- This is the actual generated main program (it would be - -- suppressed if the no main program qualifier were used). As - -- required by standard system conventions, this program has - -- the external name main. - - function main - (argc : Integer; - argv : System.Address; - envp : System.Address) - return Integer; - pragma Export (C, main, "main"); - - -- The following set of constants give the version - -- identification values for every unit in the bound - -- partition. This identification is computed from all - -- dependent semantic units, and corresponds to the - -- string that would be returned by use of the - -- Body_Version or Version attributes. - - type Version_32 is mod 2 ** 32; - u00001 : constant Version_32 := 16#7880BEB3#; - u00002 : constant Version_32 := 16#0D24CBD0#; - u00003 : constant Version_32 := 16#3283DBEB#; - u00004 : constant Version_32 := 16#2359F9ED#; - u00005 : constant Version_32 := 16#664FB847#; - u00006 : constant Version_32 := 16#68E803DF#; - u00007 : constant Version_32 := 16#5572E604#; - u00008 : constant Version_32 := 16#46B173D8#; - u00009 : constant Version_32 := 16#156A40CF#; - u00010 : constant Version_32 := 16#033DABE0#; - u00011 : constant Version_32 := 16#6AB38FEA#; - u00012 : constant Version_32 := 16#22B6217D#; - u00013 : constant Version_32 := 16#68A22947#; - u00014 : constant Version_32 := 16#18CC4A56#; - u00015 : constant Version_32 := 16#08258E1B#; - u00016 : constant Version_32 := 16#367D5222#; - u00017 : constant Version_32 := 16#20C9ECA4#; - u00018 : constant Version_32 := 16#50D32CB6#; - u00019 : constant Version_32 := 16#39A8BB77#; - u00020 : constant Version_32 := 16#5CF8FA2B#; - u00021 : constant Version_32 := 16#2F1EB794#; - u00022 : constant Version_32 := 16#31AB6444#; - u00023 : constant Version_32 := 16#1574B6E9#; - u00024 : constant Version_32 := 16#5109C189#; - u00025 : constant Version_32 := 16#56D770CD#; - u00026 : constant Version_32 := 16#02F9DE3D#; - u00027 : constant Version_32 := 16#08AB6B2C#; - u00028 : constant Version_32 := 16#3FA37670#; - u00029 : constant Version_32 := 16#476457A0#; - u00030 : constant Version_32 := 16#731E1B6E#; - u00031 : constant Version_32 := 16#23C2E789#; - u00032 : constant Version_32 := 16#0F1BD6A1#; - u00033 : constant Version_32 := 16#7C25DE96#; - u00034 : constant Version_32 := 16#39ADFFA2#; - u00035 : constant Version_32 := 16#571DE3E7#; - u00036 : constant Version_32 := 16#5EB646AB#; - u00037 : constant Version_32 := 16#4249379B#; - u00038 : constant Version_32 := 16#0357E00A#; - u00039 : constant Version_32 := 16#3784FB72#; - u00040 : constant Version_32 := 16#2E723019#; - u00041 : constant Version_32 := 16#623358EA#; - u00042 : constant Version_32 := 16#107F9465#; - u00043 : constant Version_32 := 16#6843F68A#; - u00044 : constant Version_32 := 16#63305874#; - u00045 : constant Version_32 := 16#31E56CE1#; - u00046 : constant Version_32 := 16#02917970#; - u00047 : constant Version_32 := 16#6CCBA70E#; - u00048 : constant Version_32 := 16#41CD4204#; - u00049 : constant Version_32 := 16#572E3F58#; - u00050 : constant Version_32 := 16#20729FF5#; - u00051 : constant Version_32 := 16#1D4F93E8#; - u00052 : constant Version_32 := 16#30B2EC3D#; - u00053 : constant Version_32 := 16#34054F96#; - u00054 : constant Version_32 := 16#5A199860#; - u00055 : constant Version_32 := 16#0E7F912B#; - u00056 : constant Version_32 := 16#5760634A#; - u00057 : constant Version_32 := 16#5D851835#; - - -- The following Export pragmas export the version numbers - -- with symbolic names ending in B (for body) or S - -- (for spec) so that they can be located in a link. The - -- information provided here is sufficient to track down - -- the exact versions of units used in a given build. - - pragma Export (C, u00001, "helloB"); - pragma Export (C, u00002, "system__standard_libraryB"); - pragma Export (C, u00003, "system__standard_libraryS"); - pragma Export (C, u00004, "adaS"); - pragma Export (C, u00005, "ada__text_ioB"); - pragma Export (C, u00006, "ada__text_ioS"); - pragma Export (C, u00007, "ada__exceptionsB"); - pragma Export (C, u00008, "ada__exceptionsS"); - pragma Export (C, u00009, "gnatS"); - pragma Export (C, u00010, "gnat__heap_sort_aB"); - pragma Export (C, u00011, "gnat__heap_sort_aS"); - pragma Export (C, u00012, "systemS"); - pragma Export (C, u00013, "system__exception_tableB"); - pragma Export (C, u00014, "system__exception_tableS"); - pragma Export (C, u00015, "gnat__htableB"); - pragma Export (C, u00016, "gnat__htableS"); - pragma Export (C, u00017, "system__exceptionsS"); - pragma Export (C, u00018, "system__machine_state_operationsB"); - pragma Export (C, u00019, "system__machine_state_operationsS"); - pragma Export (C, u00020, "system__machine_codeS"); - pragma Export (C, u00021, "system__storage_elementsB"); - pragma Export (C, u00022, "system__storage_elementsS"); - pragma Export (C, u00023, "system__secondary_stackB"); - pragma Export (C, u00024, "system__secondary_stackS"); - pragma Export (C, u00025, "system__parametersB"); - pragma Export (C, u00026, "system__parametersS"); - pragma Export (C, u00027, "system__soft_linksB"); - pragma Export (C, u00028, "system__soft_linksS"); - pragma Export (C, u00029, "system__stack_checkingB"); - pragma Export (C, u00030, "system__stack_checkingS"); - pragma Export (C, u00031, "system__tracebackB"); - pragma Export (C, u00032, "system__tracebackS"); - pragma Export (C, u00033, "ada__streamsS"); - pragma Export (C, u00034, "ada__tagsB"); - pragma Export (C, u00035, "ada__tagsS"); - pragma Export (C, u00036, "system__string_opsB"); - pragma Export (C, u00037, "system__string_opsS"); - pragma Export (C, u00038, "interfacesS"); - pragma Export (C, u00039, "interfaces__c_streamsB"); - pragma Export (C, u00040, "interfaces__c_streamsS"); - pragma Export (C, u00041, "system__file_ioB"); - pragma Export (C, u00042, "system__file_ioS"); - pragma Export (C, u00043, "ada__finalizationB"); - pragma Export (C, u00044, "ada__finalizationS"); - pragma Export (C, u00045, "system__finalization_rootB"); - pragma Export (C, u00046, "system__finalization_rootS"); - pragma Export (C, u00047, "system__finalization_implementationB"); - pragma Export (C, u00048, "system__finalization_implementationS"); - pragma Export (C, u00049, "system__string_ops_concat_3B"); - pragma Export (C, u00050, "system__string_ops_concat_3S"); - pragma Export (C, u00051, "system__stream_attributesB"); - pragma Export (C, u00052, "system__stream_attributesS"); - pragma Export (C, u00053, "ada__io_exceptionsS"); - pragma Export (C, u00054, "system__unsigned_typesS"); - pragma Export (C, u00055, "system__file_control_blockS"); - pragma Export (C, u00056, "ada__finalization__list_controllerB"); - pragma Export (C, u00057, "ada__finalization__list_controllerS"); - - -- BEGIN ELABORATION ORDER - -- ada (spec) - -- gnat (spec) - -- gnat.heap_sort_a (spec) - -- gnat.heap_sort_a (body) - -- gnat.htable (spec) - -- gnat.htable (body) - -- interfaces (spec) - -- system (spec) - -- system.machine_code (spec) - -- system.parameters (spec) - -- system.parameters (body) - -- interfaces.c_streams (spec) - -- interfaces.c_streams (body) - -- system.standard_library (spec) - -- ada.exceptions (spec) - -- system.exception_table (spec) - -- system.exception_table (body) - -- ada.io_exceptions (spec) - -- system.exceptions (spec) - -- system.storage_elements (spec) - -- system.storage_elements (body) - -- system.machine_state_operations (spec) - -- system.machine_state_operations (body) - -- system.secondary_stack (spec) - -- system.stack_checking (spec) - -- system.soft_links (spec) - -- system.soft_links (body) - -- system.stack_checking (body) - -- system.secondary_stack (body) - -- system.standard_library (body) - -- system.string_ops (spec) - -- system.string_ops (body) - -- ada.tags (spec) - -- ada.tags (body) - -- ada.streams (spec) - -- system.finalization_root (spec) - -- system.finalization_root (body) - -- system.string_ops_concat_3 (spec) - -- system.string_ops_concat_3 (body) - -- system.traceback (spec) - -- system.traceback (body) - -- ada.exceptions (body) - -- system.unsigned_types (spec) - -- system.stream_attributes (spec) - -- system.stream_attributes (body) - -- system.finalization_implementation (spec) - -- system.finalization_implementation (body) - -- ada.finalization (spec) - -- ada.finalization (body) - -- ada.finalization.list_controller (spec) - -- ada.finalization.list_controller (body) - -- system.file_control_block (spec) - -- system.file_io (spec) - -- system.file_io (body) - -- ada.text_io (spec) - -- ada.text_io (body) - -- hello (body) - -- END ELABORATION ORDER - - end ada_main; - - -- The following source file name pragmas allow the generated file - -- names to be unique for different main programs. They are needed - -- since the package name will always be Ada_Main. - - pragma Source_File_Name (ada_main, Spec_File_Name => "B~HELLO.ADS"); - pragma Source_File_Name (ada_main, Body_File_Name => "B~HELLO.ADB"); - - -- Generated package body for Ada_Main starts here - - package body ada_main is - - -- The actual finalization is performed by calling the - -- library routine in System.Standard_Library.Adafinal - - procedure Do_Finalize; - pragma Import (C, Do_Finalize, "system__standard_library__adafinal"); - - ------------- - -- adainit -- - ------------- - - procedure adainit is - - -- These booleans are set to True once the associated unit has - -- been elaborated. It is also used to avoid elaborating the - -- same unit twice. - - E040 : Boolean; pragma Import (Ada, E040, "interfaces__c_streams_E"); - E008 : Boolean; pragma Import (Ada, E008, "ada__exceptions_E"); - E014 : Boolean; pragma Import (Ada, E014, "system__exception_table_E"); - E053 : Boolean; pragma Import (Ada, E053, "ada__io_exceptions_E"); - E017 : Boolean; pragma Import (Ada, E017, "system__exceptions_E"); - E024 : Boolean; pragma Import (Ada, E024, "system__secondary_stack_E"); - E030 : Boolean; pragma Import (Ada, E030, "system__stack_checking_E"); - E028 : Boolean; pragma Import (Ada, E028, "system__soft_links_E"); - E035 : Boolean; pragma Import (Ada, E035, "ada__tags_E"); - E033 : Boolean; pragma Import (Ada, E033, "ada__streams_E"); - E046 : Boolean; pragma Import (Ada, E046, "system__finalization_root_E"); - E048 : Boolean; pragma Import (Ada, E048, "system__finalization_implementation_E"); - E044 : Boolean; pragma Import (Ada, E044, "ada__finalization_E"); - E057 : Boolean; pragma Import (Ada, E057, "ada__finalization__list_controller_E"); - E055 : Boolean; pragma Import (Ada, E055, "system__file_control_block_E"); - E042 : Boolean; pragma Import (Ada, E042, "system__file_io_E"); - E006 : Boolean; pragma Import (Ada, E006, "ada__text_io_E"); - - -- Set_Globals is a library routine that stores away the - -- value of the indicated set of global values in global - -- variables within the library. - - procedure Set_Globals - (Main_Priority : Integer; - Time_Slice_Value : Integer; - WC_Encoding : Character; - Locking_Policy : Character; - Queuing_Policy : Character; - Task_Dispatching_Policy : Character; - Adafinal : System.Address; - Unreserve_All_Interrupts : Integer; - Exception_Tracebacks : Integer); - pragma Import (C, Set_Globals, "__gnat_set_globals"); - - -- SDP_Table_Build is a library routine used to build the - -- exception tables. See unit Ada.Exceptions in files - -- A-EXCEPT.ADS/adb for full details of how zero cost - -- exception handling works. This procedure, the call to - -- it, and the two following tables are all omitted if the - -- build is in longjmp/setjump exception mode. - - procedure SDP_Table_Build - (SDP_Addresses : System.Address; - SDP_Count : Natural; - Elab_Addresses : System.Address; - Elab_Addr_Count : Natural); - pragma Import (C, SDP_Table_Build, "__gnat_SDP_Table_Build"); - - -- Table of Unit_Exception_Table addresses. Used for zero - -- cost exception handling to build the top level table. - - ST : aliased constant array (1 .. 23) of System.Address := ( - Hello'UET_Address, - Ada.Text_Io'UET_Address, - Ada.Exceptions'UET_Address, - Gnat.Heap_Sort_A'UET_Address, - System.Exception_Table'UET_Address, - System.Machine_State_Operations'UET_Address, - System.Secondary_Stack'UET_Address, - System.Parameters'UET_Address, - System.Soft_Links'UET_Address, - System.Stack_Checking'UET_Address, - System.Traceback'UET_Address, - Ada.Streams'UET_Address, - Ada.Tags'UET_Address, - System.String_Ops'UET_Address, - Interfaces.C_Streams'UET_Address, - System.File_Io'UET_Address, - Ada.Finalization'UET_Address, - System.Finalization_Root'UET_Address, - System.Finalization_Implementation'UET_Address, - System.String_Ops_Concat_3'UET_Address, - System.Stream_Attributes'UET_Address, - System.File_Control_Block'UET_Address, - Ada.Finalization.List_Controller'UET_Address); - - -- Table of addresses of elaboration routines. Used for - -- zero cost exception handling to make sure these - -- addresses are included in the top level procedure - -- address table. - - EA : aliased constant array (1 .. 23) of System.Address := ( - adainit'Code_Address, - Do_Finalize'Code_Address, - Ada.Exceptions'Elab_Spec'Address, - System.Exceptions'Elab_Spec'Address, - Interfaces.C_Streams'Elab_Spec'Address, - System.Exception_Table'Elab_Body'Address, - Ada.Io_Exceptions'Elab_Spec'Address, - System.Stack_Checking'Elab_Spec'Address, - System.Soft_Links'Elab_Body'Address, - System.Secondary_Stack'Elab_Body'Address, - Ada.Tags'Elab_Spec'Address, - Ada.Tags'Elab_Body'Address, - Ada.Streams'Elab_Spec'Address, - System.Finalization_Root'Elab_Spec'Address, - Ada.Exceptions'Elab_Body'Address, - System.Finalization_Implementation'Elab_Spec'Address, - System.Finalization_Implementation'Elab_Body'Address, - Ada.Finalization'Elab_Spec'Address, - Ada.Finalization.List_Controller'Elab_Spec'Address, - System.File_Control_Block'Elab_Spec'Address, - System.File_Io'Elab_Body'Address, - Ada.Text_Io'Elab_Spec'Address, - Ada.Text_Io'Elab_Body'Address); - - -- Start of processing for adainit - - begin - - -- Call SDP_Table_Build to build the top level procedure - -- table for zero cost exception handling (omitted in - -- longjmp/setjump mode). - - SDP_Table_Build (ST'Address, 23, EA'Address, 23); - - -- Call Set_Globals to record various information for - -- this partition. The values are derived by the binder - -- from information stored in the ali files by the compiler. - - Set_Globals - (Main_Priority => -1, - -- Priority of main program, -1 if no pragma Priority used - - Time_Slice_Value => -1, - -- Time slice from Time_Slice pragma, -1 if none used - - WC_Encoding => 'b', - -- Wide_Character encoding used, default is brackets - - Locking_Policy => ' ', - -- Locking_Policy used, default of space means not - -- specified, otherwise it is the first character of - -- the policy name. - - Queuing_Policy => ' ', - -- Queuing_Policy used, default of space means not - -- specified, otherwise it is the first character of - -- the policy name. - - Task_Dispatching_Policy => ' ', - -- Task_Dispatching_Policy used, default of space means - -- not specified, otherwise first character of the - -- policy name. - - Adafinal => System.Null_Address, - -- Address of Adafinal routine, not used anymore - - Unreserve_All_Interrupts => 0, - -- Set true if pragma Unreserve_All_Interrupts was used - - Exception_Tracebacks => 0); - -- Indicates if exception tracebacks are enabled - - Elab_Final_Code := 1; - - -- Now we have the elaboration calls for all units in the partition. - -- The Elab_Spec and Elab_Body attributes generate references to the - -- implicit elaboration procedures generated by the compiler for - -- each unit that requires elaboration. - - if not E040 then - Interfaces.C_Streams'Elab_Spec; - end if; - E040 := True; - if not E008 then - Ada.Exceptions'Elab_Spec; - end if; - if not E014 then - System.Exception_Table'Elab_Body; - E014 := True; - end if; - if not E053 then - Ada.Io_Exceptions'Elab_Spec; - E053 := True; - end if; - if not E017 then - System.Exceptions'Elab_Spec; - E017 := True; - end if; - if not E030 then - System.Stack_Checking'Elab_Spec; - end if; - if not E028 then - System.Soft_Links'Elab_Body; - E028 := True; - end if; - E030 := True; - if not E024 then - System.Secondary_Stack'Elab_Body; - E024 := True; - end if; - if not E035 then - Ada.Tags'Elab_Spec; - end if; - if not E035 then - Ada.Tags'Elab_Body; - E035 := True; - end if; - if not E033 then - Ada.Streams'Elab_Spec; - E033 := True; - end if; - if not E046 then - System.Finalization_Root'Elab_Spec; - end if; - E046 := True; - if not E008 then - Ada.Exceptions'Elab_Body; - E008 := True; - end if; - if not E048 then - System.Finalization_Implementation'Elab_Spec; - end if; - if not E048 then - System.Finalization_Implementation'Elab_Body; - E048 := True; - end if; - if not E044 then - Ada.Finalization'Elab_Spec; - end if; - E044 := True; - if not E057 then - Ada.Finalization.List_Controller'Elab_Spec; - end if; - E057 := True; - if not E055 then - System.File_Control_Block'Elab_Spec; - E055 := True; - end if; - if not E042 then - System.File_Io'Elab_Body; - E042 := True; - end if; - if not E006 then - Ada.Text_Io'Elab_Spec; - end if; - if not E006 then - Ada.Text_Io'Elab_Body; - E006 := True; - end if; - - Elab_Final_Code := 0; - end adainit; - - -------------- - -- adafinal -- - -------------- - - procedure adafinal is - begin - Do_Finalize; - end adafinal; - - ---------- - -- main -- - ---------- - - -- main is actually a function, as in the ANSI C standard, - -- defined to return the exit status. The three parameters - -- are the argument count, argument values and environment - -- pointer. - - function main - (argc : Integer; - argv : System.Address; - envp : System.Address) - return Integer - is - -- The initialize routine performs low level system - -- initialization using a standard library routine which - -- sets up signal handling and performs any other - -- required setup. The routine can be found in file - -- A-INIT.C. - - procedure initialize; - pragma Import (C, initialize, "__gnat_initialize"); - - -- The finalize routine performs low level system - -- finalization using a standard library routine. The - -- routine is found in file A-FINAL.C and in the standard - -- distribution is a dummy routine that does nothing, so - -- really this is a hook for special user finalization. - - procedure finalize; - pragma Import (C, finalize, "__gnat_finalize"); - - -- We get to the main program of the partition by using - -- pragma Import because if we try to with the unit and - -- call it Ada style, then not only do we waste time - -- recompiling it, but also, we don't really know the right - -- qualifiers (e.g. identifier character set) to be used - -- to compile it. - - procedure Ada_Main_Program; - pragma Import (Ada, Ada_Main_Program, "_ada_hello"); - - -- Start of processing for main - - begin - -- Save global variables - - gnat_argc := argc; - gnat_argv := argv; - gnat_envp := envp; - - -- Call low level system initialization - - Initialize; - - -- Call our generated Ada initialization routine - - adainit; - - -- This is the point at which we want the debugger to get - -- control - - Break_Start; - - -- Now we call the main program of the partition - - Ada_Main_Program; - - -- Perform Ada finalization - - adafinal; - - -- Perform low level system finalization - - Finalize; - - -- Return the proper exit status - return (gnat_exit_status); - end; - - -- This section is entirely comments, so it has no effect on the - -- compilation of the Ada_Main package. It provides the list of - -- object files and linker options, as well as some standard - -- libraries needed for the link. The GNAT LINK utility parses - -- this B~HELLO.ADB file to read these comment lines to generate - -- the appropriate command line arguments for the call to the - -- system linker. The BEGIN/END lines are used for sentinels for - -- this parsing operation. - - -- The exact file names will of course depend on the environment, - -- host/target and location of files on the host system. - - -- BEGIN Object file/option list - -- ./HELLO.OBJ - -- -L./ - -- -L/usr/local/gnat/lib/gcc-lib/i686-pc-linux-gnu/2.8.1/adalib/ - -- /usr/local/gnat/lib/gcc-lib/i686-pc-linux-gnu/2.8.1/adalib/libgnat.a - -- END Object file/option list - - end ada_main; - - The Ada code in the above example is exactly what is generated by the - binder. We have added comments to more clearly indicate the function of - each part of the generated `Ada_Main' package. - - The code is standard Ada in all respects, and can be processed by any - tools that handle Ada. In particular, it is possible to use the debugger - in Ada mode to debug the generated Ada_Main package. For example, - suppose that for reasons that you do not understand, your program is - blowing up during elaboration of the body of `Ada.Text_IO'. To chase - this bug down, you can place a breakpoint on the call: - - Ada.Text_Io'Elab_Body; - - and trace the elaboration routine for this package to find out where - the problem might be (more usually of course you would be debugging - elaboration code in your own application). - -  - File: gnat_ug_vms.info, Node: Generating the Binder Program in C, Next: Consistency-Checking Modes, Prev: Running GNAT BIND, Up: Binding Using GNAT BIND - - Generating the Binder Program in C - ================================== - - In most normal usage, the default mode of `GNAT BIND' which is to - generate the main package in Ada, as described in the previous section. - In particular, this means that any Ada programmer can read and - understand the generated main program. It can also be debugged just - like any other Ada code provided the `-g' qualifier is used for `GNAT - BIND' and `GNAT LINK'. - - However for some purposes it may be convenient to generate the main - program in C rather than Ada. This may for example be helpful when you - are generating a mixed language program with the main program in C. The - GNAT compiler itself is an example. The use of the `-C' qualifier for - both `GNAT BIND' and `GNAT LINK' will cause the program to be generated - in C (and compiled using the gnu C compiler). The following shows the C - code generated for the same "Hello World" program: - - - #ifdef __STDC__ - #define PARAMS(paramlist) paramlist - #else - #define PARAMS(paramlist) () - #endif - - extern void __gnat_set_globals - PARAMS ((int, int, int, int, int, int, - void (*) PARAMS ((void)), int, int)); - extern void adafinal PARAMS ((void)); - extern void adainit PARAMS ((void)); - extern void system__standard_library__adafinal PARAMS ((void)); - extern int main PARAMS ((int, char **, char **)); - extern void exit PARAMS ((int)); - extern void __gnat_break_start PARAMS ((void)); - extern void _ada_hello PARAMS ((void)); - extern void __gnat_initialize PARAMS ((void)); - extern void __gnat_finalize PARAMS ((void)); - - extern void ada__exceptions___elabs PARAMS ((void)); - extern void system__exceptions___elabs PARAMS ((void)); - extern void interfaces__c_streams___elabs PARAMS ((void)); - extern void system__exception_table___elabb PARAMS ((void)); - extern void ada__io_exceptions___elabs PARAMS ((void)); - extern void system__stack_checking___elabs PARAMS ((void)); - extern void system__soft_links___elabb PARAMS ((void)); - extern void system__secondary_stack___elabb PARAMS ((void)); - extern void ada__tags___elabs PARAMS ((void)); - extern void ada__tags___elabb PARAMS ((void)); - extern void ada__streams___elabs PARAMS ((void)); - extern void system__finalization_root___elabs PARAMS ((void)); - extern void ada__exceptions___elabb PARAMS ((void)); - extern void system__finalization_implementation___elabs PARAMS ((void)); - extern void system__finalization_implementation___elabb PARAMS ((void)); - extern void ada__finalization___elabs PARAMS ((void)); - extern void ada__finalization__list_controller___elabs PARAMS ((void)); - extern void system__file_control_block___elabs PARAMS ((void)); - extern void system__file_io___elabb PARAMS ((void)); - extern void ada__text_io___elabs PARAMS ((void)); - extern void ada__text_io___elabb PARAMS ((void)); - - extern int __gnat_inside_elab_final_code; - - extern int gnat_argc; - extern char **gnat_argv; - extern char **gnat_envp; - extern int gnat_exit_status; - - char __gnat_version[] = "GNAT Version: 3.15w (20010315)"; - void adafinal () { - system__standard_library__adafinal (); - } - - void adainit () - { - extern char ada__exceptions_E; - extern char system__exceptions_E; - extern char interfaces__c_streams_E; - extern char system__exception_table_E; - extern char ada__io_exceptions_E; - extern char system__secondary_stack_E; - extern char system__stack_checking_E; - extern char system__soft_links_E; - extern char ada__tags_E; - extern char ada__streams_E; - extern char system__finalization_root_E; - extern char system__finalization_implementation_E; - extern char ada__finalization_E; - extern char ada__finalization__list_controller_E; - extern char system__file_control_block_E; - extern char system__file_io_E; - extern char ada__text_io_E; - - extern void *__gnat_hello__SDP; - extern void *__gnat_ada__text_io__SDP; - extern void *__gnat_ada__exceptions__SDP; - extern void *__gnat_gnat__heap_sort_a__SDP; - extern void *__gnat_system__exception_table__SDP; - extern void *__gnat_system__machine_state_operations__SDP; - extern void *__gnat_system__secondary_stack__SDP; - extern void *__gnat_system__parameters__SDP; - extern void *__gnat_system__soft_links__SDP; - extern void *__gnat_system__stack_checking__SDP; - extern void *__gnat_system__traceback__SDP; - extern void *__gnat_ada__streams__SDP; - extern void *__gnat_ada__tags__SDP; - extern void *__gnat_system__string_ops__SDP; - extern void *__gnat_interfaces__c_streams__SDP; - extern void *__gnat_system__file_io__SDP; - extern void *__gnat_ada__finalization__SDP; - extern void *__gnat_system__finalization_root__SDP; - extern void *__gnat_system__finalization_implementation__SDP; - extern void *__gnat_system__string_ops_concat_3__SDP; - extern void *__gnat_system__stream_attributes__SDP; - extern void *__gnat_system__file_control_block__SDP; - extern void *__gnat_ada__finalization__list_controller__SDP; - - void **st[23] = { - &__gnat_hello__SDP, - &__gnat_ada__text_io__SDP, - &__gnat_ada__exceptions__SDP, - &__gnat_gnat__heap_sort_a__SDP, - &__gnat_system__exception_table__SDP, - &__gnat_system__machine_state_operations__SDP, - &__gnat_system__secondary_stack__SDP, - &__gnat_system__parameters__SDP, - &__gnat_system__soft_links__SDP, - &__gnat_system__stack_checking__SDP, - &__gnat_system__traceback__SDP, - &__gnat_ada__streams__SDP, - &__gnat_ada__tags__SDP, - &__gnat_system__string_ops__SDP, - &__gnat_interfaces__c_streams__SDP, - &__gnat_system__file_io__SDP, - &__gnat_ada__finalization__SDP, - &__gnat_system__finalization_root__SDP, - &__gnat_system__finalization_implementation__SDP, - &__gnat_system__string_ops_concat_3__SDP, - &__gnat_system__stream_attributes__SDP, - &__gnat_system__file_control_block__SDP, - &__gnat_ada__finalization__list_controller__SDP}; - - extern void ada__exceptions___elabs (); - extern void system__exceptions___elabs (); - extern void interfaces__c_streams___elabs (); - extern void system__exception_table___elabb (); - extern void ada__io_exceptions___elabs (); - extern void system__stack_checking___elabs (); - extern void system__soft_links___elabb (); - extern void system__secondary_stack___elabb (); - extern void ada__tags___elabs (); - extern void ada__tags___elabb (); - extern void ada__streams___elabs (); - extern void system__finalization_root___elabs (); - extern void ada__exceptions___elabb (); - extern void system__finalization_implementation___elabs (); - extern void system__finalization_implementation___elabb (); - extern void ada__finalization___elabs (); - extern void ada__finalization__list_controller___elabs (); - extern void system__file_control_block___elabs (); - extern void system__file_io___elabb (); - extern void ada__text_io___elabs (); - extern void ada__text_io___elabb (); - - void (*ea[23]) () = { - adainit, - system__standard_library__adafinal, - ada__exceptions___elabs, - system__exceptions___elabs, - interfaces__c_streams___elabs, - system__exception_table___elabb, - ada__io_exceptions___elabs, - system__stack_checking___elabs, - system__soft_links___elabb, - system__secondary_stack___elabb, - ada__tags___elabs, - ada__tags___elabb, - ada__streams___elabs, - system__finalization_root___elabs, - ada__exceptions___elabb, - system__finalization_implementation___elabs, - system__finalization_implementation___elabb, - ada__finalization___elabs, - ada__finalization__list_controller___elabs, - system__file_control_block___elabs, - system__file_io___elabb, - ada__text_io___elabs, - ada__text_io___elabb}; - - __gnat_SDP_Table_Build (&st, 23, ea, 23); - __gnat_set_globals ( - -1, /* Main_Priority */ - -1, /* Time_Slice_Value */ - 'b', /* WC_Encoding */ - ' ', /* Locking_Policy */ - ' ', /* Queuing_Policy */ - ' ', /* Tasking_Dispatching_Policy */ - 0, /* Finalization routine address, not used anymore */ - 0, /* Unreserve_All_Interrupts */ - 0); /* Exception_Tracebacks */ - - __gnat_inside_elab_final_code = 1; - - if (ada__exceptions_E == 0) { - ada__exceptions___elabs (); - } - if (system__exceptions_E == 0) { - system__exceptions___elabs (); - system__exceptions_E++; - } - if (interfaces__c_streams_E == 0) { - interfaces__c_streams___elabs (); - } - interfaces__c_streams_E = 1; - if (system__exception_table_E == 0) { - system__exception_table___elabb (); - system__exception_table_E++; - } - if (ada__io_exceptions_E == 0) { - ada__io_exceptions___elabs (); - ada__io_exceptions_E++; - } - if (system__stack_checking_E == 0) { - system__stack_checking___elabs (); - } - if (system__soft_links_E == 0) { - system__soft_links___elabb (); - system__soft_links_E++; - } - system__stack_checking_E = 1; - if (system__secondary_stack_E == 0) { - system__secondary_stack___elabb (); - system__secondary_stack_E++; - } - if (ada__tags_E == 0) { - ada__tags___elabs (); - } - if (ada__tags_E == 0) { - ada__tags___elabb (); - ada__tags_E++; - } - if (ada__streams_E == 0) { - ada__streams___elabs (); - ada__streams_E++; - } - if (system__finalization_root_E == 0) { - system__finalization_root___elabs (); - } - system__finalization_root_E = 1; - if (ada__exceptions_E == 0) { - ada__exceptions___elabb (); - ada__exceptions_E++; - } - if (system__finalization_implementation_E == 0) { - system__finalization_implementation___elabs (); - } - if (system__finalization_implementation_E == 0) { - system__finalization_implementation___elabb (); - system__finalization_implementation_E++; - } - if (ada__finalization_E == 0) { - ada__finalization___elabs (); - } - ada__finalization_E = 1; - if (ada__finalization__list_controller_E == 0) { - ada__finalization__list_controller___elabs (); - } - ada__finalization__list_controller_E = 1; - if (system__file_control_block_E == 0) { - system__file_control_block___elabs (); - system__file_control_block_E++; - } - if (system__file_io_E == 0) { - system__file_io___elabb (); - system__file_io_E++; - } - if (ada__text_io_E == 0) { - ada__text_io___elabs (); - } - if (ada__text_io_E == 0) { - ada__text_io___elabb (); - ada__text_io_E++; - } - - __gnat_inside_elab_final_code = 0; - } - int main (argc, argv, envp) - int argc; - char **argv; - char **envp; - { - gnat_argc = argc; - gnat_argv = argv; - gnat_envp = envp; - - __gnat_initialize (); - adainit (); - __gnat_break_start (); - - _ada_hello (); - - system__standard_library__adafinal (); - __gnat_finalize (); - exit (gnat_exit_status); - } - unsigned helloB = 0x7880BEB3; - unsigned system__standard_libraryB = 0x0D24CBD0; - unsigned system__standard_libraryS = 0x3283DBEB; - unsigned adaS = 0x2359F9ED; - unsigned ada__text_ioB = 0x47C85FC4; - unsigned ada__text_ioS = 0x496FE45C; - unsigned ada__exceptionsB = 0x74F50187; - unsigned ada__exceptionsS = 0x6736945B; - unsigned gnatS = 0x156A40CF; - unsigned gnat__heap_sort_aB = 0x033DABE0; - unsigned gnat__heap_sort_aS = 0x6AB38FEA; - unsigned systemS = 0x0331C6FE; - unsigned system__exceptionsS = 0x20C9ECA4; - unsigned system__exception_tableB = 0x68A22947; - unsigned system__exception_tableS = 0x394BADD5; - unsigned gnat__htableB = 0x08258E1B; - unsigned gnat__htableS = 0x367D5222; - unsigned system__machine_state_operationsB = 0x4F3B7492; - unsigned system__machine_state_operationsS = 0x182F5CF4; - unsigned system__storage_elementsB = 0x2F1EB794; - unsigned system__storage_elementsS = 0x102C83C7; - unsigned system__secondary_stackB = 0x1574B6E9; - unsigned system__secondary_stackS = 0x708E260A; - unsigned system__parametersB = 0x56D770CD; - unsigned system__parametersS = 0x237E39BE; - unsigned system__soft_linksB = 0x08AB6B2C; - unsigned system__soft_linksS = 0x1E2491F3; - unsigned system__stack_checkingB = 0x476457A0; - unsigned system__stack_checkingS = 0x5299FCED; - unsigned system__tracebackB = 0x2971EBDE; - unsigned system__tracebackS = 0x2E9C3122; - unsigned ada__streamsS = 0x7C25DE96; - unsigned ada__tagsB = 0x39ADFFA2; - unsigned ada__tagsS = 0x769A0464; - unsigned system__string_opsB = 0x5EB646AB; - unsigned system__string_opsS = 0x63CED018; - unsigned interfacesS = 0x0357E00A; - unsigned interfaces__c_streamsB = 0x3784FB72; - unsigned interfaces__c_streamsS = 0x2E723019; - unsigned system__file_ioB = 0x623358EA; - unsigned system__file_ioS = 0x31F873E6; - unsigned ada__finalizationB = 0x6843F68A; - unsigned ada__finalizationS = 0x63305874; - unsigned system__finalization_rootB = 0x31E56CE1; - unsigned system__finalization_rootS = 0x23169EF3; - unsigned system__finalization_implementationB = 0x6CCBA70E; - unsigned system__finalization_implementationS = 0x604AA587; - unsigned system__string_ops_concat_3B = 0x572E3F58; - unsigned system__string_ops_concat_3S = 0x01F57876; - unsigned system__stream_attributesB = 0x1D4F93E8; - unsigned system__stream_attributesS = 0x30B2EC3D; - unsigned ada__io_exceptionsS = 0x34054F96; - unsigned system__unsigned_typesS = 0x7B9E7FE3; - unsigned system__file_control_blockS = 0x2FF876A8; - unsigned ada__finalization__list_controllerB = 0x5760634A; - unsigned ada__finalization__list_controllerS = 0x5D851835; - - /* BEGIN ELABORATION ORDER - ada (spec) - gnat (spec) - gnat.heap_sort_a (spec) - gnat.htable (spec) - gnat.htable (body) - interfaces (spec) - system (spec) - system.parameters (spec) - system.standard_library (spec) - ada.exceptions (spec) - system.exceptions (spec) - system.parameters (body) - gnat.heap_sort_a (body) - interfaces.c_streams (spec) - interfaces.c_streams (body) - system.exception_table (spec) - system.exception_table (body) - ada.io_exceptions (spec) - system.storage_elements (spec) - system.storage_elements (body) - system.machine_state_operations (spec) - system.machine_state_operations (body) - system.secondary_stack (spec) - system.stack_checking (spec) - system.soft_links (spec) - system.soft_links (body) - system.stack_checking (body) - system.secondary_stack (body) - system.standard_library (body) - system.string_ops (spec) - system.string_ops (body) - ada.tags (spec) - ada.tags (body) - ada.streams (spec) - system.finalization_root (spec) - system.finalization_root (body) - system.string_ops_concat_3 (spec) - system.string_ops_concat_3 (body) - system.traceback (spec) - system.traceback (body) - ada.exceptions (body) - system.unsigned_types (spec) - system.stream_attributes (spec) - system.stream_attributes (body) - system.finalization_implementation (spec) - system.finalization_implementation (body) - ada.finalization (spec) - ada.finalization (body) - ada.finalization.list_controller (spec) - ada.finalization.list_controller (body) - system.file_control_block (spec) - system.file_io (spec) - system.file_io (body) - ada.text_io (spec) - ada.text_io (body) - hello (body) - END ELABORATION ORDER */ - - /* BEGIN Object file/option list - ./HELLO.OBJ - -L./ - -L/usr/local/gnat/lib/gcc-lib/alpha-dec-osf5.1/2.8.1/adalib/ - /usr/local/gnat/lib/gcc-lib/alpha-dec-osf5.1/2.8.1/adalib/libgnat.a - -lexc - END Object file/option list */ - - Here again, the C code is exactly what is generated by the binder. The - functions of the various parts of this code correspond in an obvious - manner with the commented Ada code shown in the example in the previous - section. - -  - File: gnat_ug_vms.info, Node: Consistency-Checking Modes, Next: Binder Error Message Control, Prev: Generating the Binder Program in C, Up: Binding Using GNAT BIND - - Consistency-Checking Modes - ========================== - - As described in the previous section, by default `GNAT BIND' checks - that object files are consistent with one another and are consistent - with any source files it can locate. The following qualifiers control - binder access to sources. - - `/READ_SOURCES=ALL' - Require source files to be present. In this mode, the binder must - be able to locate all source files that are referenced, in order - to check their consistency. In normal mode, if a source file - cannot be located it is simply ignored. If you specify this - qualifier, a missing source file is an error. - - `/READ_SOURCES=NONE' - Exclude source files. In this mode, the binder only checks that ALI - files are consistent with one another. Source files are not - accessed. The binder runs faster in this mode, and there is still - a guarantee that the resulting program is self-consistent. If a - source file has been edited since it was last compiled, and you - specify this qualifier, the binder will not detect that the object - file is out of date with respect to the source file. Note that - this is the mode that is automatically used by `GNAT MAKE' because - in this case the checking against sources has already been - performed by `GNAT MAKE' in the course of compilation (i.e. before - binding). - - `/READ_SOURCES=AVAILABLE' - This is the default mode in which source files are checked if they - are available, and ignored if they are not available. - -  - File: gnat_ug_vms.info, Node: Binder Error Message Control, Next: Elaboration Control, Prev: Consistency-Checking Modes, Up: Binding Using GNAT BIND - - Binder Error Message Control - ============================ - - The following qualifiers provide control over the generation of error - messages from the binder: - - `/REPORT_ERRORS=VERBOSE' - Verbose mode. In the normal mode, brief error messages are - generated to `SYS$ERROR'. If this qualifier is present, a header - is written to `SYS$OUTPUT' and any error messages are directed to - `SYS$OUTPUT'. All that is written to `SYS$ERROR' is a brief - summary message. - - `/REPORT_ERRORS=BRIEF' - Generate brief error messages to `SYS$ERROR' even if verbose mode - is specified. This is relevant only when used with the - `/REPORT_ERRORS=VERBOSE' qualifier. - - `/WARNINGS=SUPPRESS' - Suppress all warning messages. - - `/WARNINGS=ERROR' - Treat any warning messages as fatal errors. - - `/WARNINGS=NORMAL' - Standard mode with warnings generated, but warnings do not get - treated as errors. - - `/NOTIME_STAMP_CHECK' - The binder performs a number of consistency checks including: - - * Check that time stamps of a given source unit are consistent - - * Check that checksums of a given source unit are consistent - - * Check that consistent versions of `GNAT' were used for - compilation - - * Check consistency of configuration pragmas as required - - Normally failure of such checks, in accordance with the consistency - requirements of the Ada Reference Manual, causes error messages to - be generated which abort the binder and prevent the output of a - binder file and subsequent link to obtain an executable. - - The `/NOTIME_STAMP_CHECK' qualifier converts these error messages - into warnings, so that binding and linking can continue to - completion even in the presence of such errors. The result may be - a failed link (due to missing symbols), or a non-functional - executable which has undefined semantics. _This means that - `/NOTIME_STAMP_CHECK' should be used only in unusual situations, - with extreme care._ - -  - File: gnat_ug_vms.info, Node: Elaboration Control, Next: Output Control, Prev: Binder Error Message Control, Up: Binding Using GNAT BIND - - Elaboration Control - =================== - - The following qualifiers provide additional control over the elaboration - order. For full details see *Note Elaboration Order Handling in GNAT::. - - `/PESSIMISTIC_ELABORATION' - Normally the binder attempts to choose an elaboration order that is - likely to minimize the likelihood of an elaboration order error - resulting in raising a `Program_Error' exception. This qualifier - reverses the action of the binder, and requests that it - deliberately choose an order that is likely to maximize the - likelihood of an elaboration error. This is useful in ensuring - portability and avoiding dependence on accidental fortuitous - elaboration ordering. - - Normally it only makes sense to use the `-p' qualifier if dynamic - elaboration checking is used (`/CHECKS=ELABORATION' qualifier used - for compilation). This is because in the default static - elaboration mode, all necessary `Elaborate_All' pragmas are - implicitly inserted. These implicit pragmas are still respected by - the binder in `-p' mode, so a safe elaboration order is assured. - -  - File: gnat_ug_vms.info, Node: Output Control, Next: Binding with Non-Ada Main Programs, Prev: Elaboration Control, Up: Binding Using GNAT BIND - - Output Control - ============== - - The following qualifiers allow additional control over the output - generated by the binder. - - `/BIND_FILE=ADA' - Generate binder program in Ada (default). The binder program is - named `B$MAINPROG.ADB' by default. This can be changed with `-o' - `GNAT BIND' option. - - `/NOOUTPUT' - Check only. Do not generate the binder output file. In this mode - the binder performs all error checks but does not generate an - output file. - - `/BIND_FILE=C' - Generate binder program in C. The binder program is named - `B_MAINPROG.C'. This can be changed with `-o' `GNAT BIND' option. - - `/ELABORATION_DEPENDENCIES' - Output complete list of elaboration-order dependencies, showing the - reason for each dependency. This output can be rather extensive - but may be useful in diagnosing problems with elaboration order. - The output is written to `SYS$OUTPUT'. - - `/HELP' - Output usage information. The output is written to `SYS$OUTPUT'. - - `/LINKER_OPTION_LIST' - Output linker options to `SYS$OUTPUT'. Includes library search - paths, contents of pragmas Ident and Linker_Options, and libraries - added by `GNAT BIND'. - - `/ORDER_OF_ELABORATION' - Output chosen elaboration order. The output is written to - `SYS$OUTPUT'. - - `/OBJECT_LIST' - Output full names of all the object files that must be linked to - provide the Ada component of the program. The output is written to - `SYS$OUTPUT'. This list includes the files explicitly supplied - and referenced by the user as well as implicitly referenced - run-time unit files. The latter are omitted if the corresponding - units reside in shared libraries. The directory names for the - run-time units depend on the system configuration. - - `/OUTPUT=FILE' - Set name of output file to FILE instead of the normal - `B$MAINPROG.ADB' default. Note that FILE denote the Ada binder - generated body filename. In C mode you would normally give FILE an - extension of `.C' because it will be a C source program. Note - that if this option is used, then linking must be done manually. - It is not possible to use GNAT LINK in this case, since it cannot - locate the binder file. - - `/RESTRICTION_LIST' - Generate list of `pragma Rerstrictions' that could be applied to - the current unit. This is useful for code audit purposes, and also - may be used to improve code generation in some cases. - -  - File: gnat_ug_vms.info, Node: Binding with Non-Ada Main Programs, Next: Binding Programs with No Main Subprogram, Prev: Output Control, Up: Binding Using GNAT BIND - - Binding with Non-Ada Main Programs - ================================== - - In our description so far we have assumed that the main program is in - Ada, and that the task of the binder is to generate a corresponding - function `main' that invokes this Ada main program. GNAT also supports - the building of executable programs where the main program is not in - Ada, but some of the called routines are written in Ada and compiled - using GNAT (*note Mixed Language Programming::). The following - qualifier is used in this situation: - - `/NOMAIN' - No main program. The main program is not in Ada. - - In this case, most of the functions of the binder are still required, - but instead of generating a main program, the binder generates a file - containing the following callable routines: - - `adainit' - You must call this routine to initialize the Ada part of the - program by calling the necessary elaboration routines. A call to - `adainit' is required before the first call to an Ada subprogram. - - Note that it is assumed that the basic execution environment must - be setup to be appropriate for Ada execution at the point where - the first Ada subprogram is called. In particular, if the Ada code - will do any floating-point operations, then the FPU must be setup - in an appropriate manner. For the case of the x86, for example, - full precision mode is required. The procedure - GNAT.Float_Control.Reset may be used to ensure that the FPU is in - the right state. - - `adafinal' - You must call this routine to perform any library-level - finalization required by the Ada subprograms. A call to `adafinal' - is required after the last call to an Ada subprogram, and before - the program terminates. - - If the `/NOMAIN' qualifier is given, more than one ALI file may appear - on the command line for `GNAT BIND'. The normal "closure" calculation - is performed for each of the specified units. Calculating the closure - means finding out the set of units involved by tracing `with' - references. The reason it is necessary to be able to specify more than - one ALI file is that a given program may invoke two or more quite - separate groups of Ada units. - - The binder takes the name of its output file from the last specified - ALI file, unless overridden by the use of the `/OUTPUT=file'. The - output is an Ada unit in source form that can be compiled with GNAT - unless the -C qualifier is used in which case the output is a C source - file, which must be compiled using the C compiler. This compilation - occurs automatically as part of the `GNAT LINK' processing. - - Currently the GNAT run time requires a FPU using 80 bits mode - precision. Under targets where this is not the default it is required to - call GNAT.Float_Control.Reset before using floating point numbers (this - include float computation, float input and output) in the Ada code. A - side effect is that this could be the wrong mode for the foreign code - where floating point computation could be broken after this call. - -  - File: gnat_ug_vms.info, Node: Binding Programs with No Main Subprogram, Next: Summary of Binder Qualifiers, Prev: Binding with Non-Ada Main Programs, Up: Binding Using GNAT BIND - - Binding Programs with No Main Subprogram - ======================================== - - It is possible to have an Ada program which does not have a main - subprogram. This program will call the elaboration routines of all the - packages, then the finalization routines. - - The following qualifier is used to bind programs organized in this - manner: - - `/ZERO_MAIN' - Normally the binder checks that the unit name given on the command - line corresponds to a suitable main subprogram. When this - qualifier is used, a list of ALI files can be given, and the - execution of the program consists of elaboration of these units in - an appropriate order. - -  - File: gnat_ug_vms.info, Node: Summary of Binder Qualifiers, Next: Command-Line Access, Prev: Binding Programs with No Main Subprogram, Up: Binding Using GNAT BIND - - Summary of Binder Qualifiers - ============================ - - The following are the qualifiers available with `GNAT BIND': - - `/OBJECT_SEARCH' - Specify directory to be searched for ALI files. - - `/SOURCE_SEARCH' - Specify directory to be searched for source file. - - `/BIND_FILE=ADA' - Generate binder program in Ada (default) - - `/REPORT_ERRORS=BRIEF' - Generate brief messages to `SYS$ERROR' even if verbose mode set. - - `/NOOUTPUT' - Check only, no generation of binder output file. - - `/BIND_FILE=C' - Generate binder program in C - - `/ELABORATION_DEPENDENCIES' - Output complete list of elaboration-order dependencies. - - `-E' - Store tracebacks in exception occurrences when the target supports - it. This is the default with the zero cost exception mechanism. - This option is currently supported on the following targets: all - x86 ports, Solaris, Windows, HP-UX, AIX, PowerPC VxWorks and Alpha - VxWorks. See also the packages `GNAT.Traceback' and - `GNAT.Traceback.Symbolic' for more information. Note that on x86 - ports, you must not use `-fomit-frame-pointer' `GNAT COMPILE' - option. - - `-h' - Output usage (help) information - - `/SEARCH' - Specify directory to be searched for source and ALI files. - - `/NOCURRENT_DIRECTORY' - Do not look for sources in the current directory where `GNAT BIND' - was invoked, and do not look for ALI files in the directory - containing the ALI file named in the `GNAT BIND' command line. - - `/ORDER_OF_ELABORATION' - Output chosen elaboration order. - - `-Lxxx' - Binds the units for library building. In this case the adainit and - adafinal procedures (See *note Binding with Non-Ada Main - Programs::) are renamed to xxxinit and xxxfinal. Implies -n. - - `-Mxyz' - Rename generated main program from main to xyz - - `/ERROR_LIMIT=N' - Limit number of detected errors to N (1-999). - - `/NOMAIN' - No main program. - - `/NOSTD_INCLUDES' - Do not look for sources in the system default directory. - - `/NOSTD_LIBRARIES' - Do not look for library files in the system default directory. - - `/RUNTIME_SYSTEM=RTS-PATH' - Specifies the default location of the runtime library. Same - meaning as the equivalent `GNAT MAKE' flag (see *Note Qualifiers - for GNAT MAKE::). - - `/OUTPUT=FILE' - Name the output file FILE (default is `B$XXX.ADB'). Note that if - this option is used, then linking must be done manually, GNAT LINK - cannot be used. - - `/OBJECT_LIST' - Output object list. - - `-p' - Pessimistic (worst-case) elaboration order - - `/READ_SOURCES=ALL' - Require all source files to be present. - - `/NOTIME_STAMP_CHECK' - Tolerate time stamp and other consistency errors - - `-TN' - Set the time slice value to n microseconds. A value of zero means - no time slicing and also indicates to the tasking run time to - match as close as possible to the annex D requirements of the RM. - - `/REPORT_ERRORS=VERBOSE' - Verbose mode. Write error messages, header, summary output to - `SYS$OUTPUT'. - - `/WARNINGS=NORMAL' - Normal warnings mode. Warnings are issued but ignored - - `/WARNINGS=SUPPRESS' - All warning messages are suppressed - - `/WARNINGS=ERROR' - Warning messages are treated as fatal errors - - `/READ_SOURCES=NONE' - Exclude source files (check object consistency only). - - `/READ_SOURCES=AVAILABLE' - Default mode, in which sources are checked for consistency only if - they are available. - - `/ZERO_MAIN' - No main subprogram. - -  - File: gnat_ug_vms.info, Node: Command-Line Access, Next: Search Paths for GNAT BIND, Prev: Summary of Binder Qualifiers, Up: Binding Using GNAT BIND - - Command-Line Access - =================== - - The package `Ada.Command_Line' provides access to the command-line - arguments and program name. In order for this interface to operate - correctly, the two variables - - int gnat_argc; - char **gnat_argv; - - are declared in one of the GNAT library routines. These variables must - be set from the actual `argc' and `argv' values passed to the main - program. With no `/NOMAIN' present, `GNAT BIND' generates the C main - program to automatically set these variables. If the `/NOMAIN' - qualifier is used, there is no automatic way to set these variables. If - they are not set, the procedures in `Ada.Command_Line' will not be - available, and any attempt to use them will raise `Constraint_Error'. - If command line access is required, your main program must set - `gnat_argc' and `gnat_argv' from the `argc' and `argv' values passed to - it. - -  - File: gnat_ug_vms.info, Node: Search Paths for GNAT BIND, Next: Examples of GNAT BIND Usage, Prev: Command-Line Access, Up: Binding Using GNAT BIND - - Search Paths for `GNAT BIND' - ============================ - - The binder takes the name of an ALI file as its argument and needs to - locate source files as well as other ALI files to verify object - consistency. - - For source files, it follows exactly the same search rules as `GNAT - COMPILE' (*note Search Paths and the Run-Time Library (RTL)::). For ALI - files the directories searched are: - - 1. The directory containing the ALI file named in the command line, - unless the qualifier `/NOCURRENT_DIRECTORY' is specified. - - 2. All directories specified by `/SEARCH' qualifiers on the `GNAT - BIND' command line, in the order given. - - 3. Each of the directories listed in the value of the - `ADA_OBJECTS_PATH' logical name. Normally, define this value as a - logical name containing a comma separated list of directory names. - - This variable can also be defined by means of an environment string - (an argument to the DEC C exec* set of functions). - - Logical Name: - DEFINE ANOTHER_PATH FOO:[BAG] - DEFINE ADA_OBJECTS_PATH ANOTHER_PATH,FOO:[BAM],FOO:[BAR] - - By default, the path includes GNU:[LIB.OPENVMS7_x.2_8_x.DECLIB] - first, followed by the standard Ada 95 libraries in - GNU:[LIB.OPENVMS7_x.2_8_x.ADALIB]. If this is not redefined, the - user will obtain the DEC Ada83 IO packages (Text_IO, - Sequential_IO, etc) instead of the Ada95 packages. Thus, in order - to get the Ada 95 packages by default, ADA_OBJECTS_PATH must be - redefined. - - 4. The content of the "ada_object_path" file which is part of the GNAT - installation tree and is used to store standard libraries such as - the GNAT Run Time Library (RTL) unless the qualifier - `/NOSTD_LIBRARIES' is specified. - - In the binder the qualifier `/SEARCH' is used to specify both source and - library file paths. Use `/SOURCE_SEARCH' instead if you want to specify - source paths only, and `/LIBRARY_SEARCH' if you want to specify library - paths only. This means that for the binder `/SEARCH='DIR is equivalent - to `/SOURCE_SEARCH='DIR `/OBJECT_SEARCH='DIR. The binder generates the - bind file (a C language source file) in the current working directory. - - The packages `Ada', `System', and `Interfaces' and their children - make up the GNAT Run-Time Library, together with the package GNAT and - its children, which contain a set of useful additional library - functions provided by GNAT. The sources for these units are needed by - the compiler and are kept together in one directory. The ALI files and - object files generated by compiling the RTL are needed by the binder - and the linker and are kept together in one directory, typically - different from the directory containing the sources. In a normal - installation, you need not specify these directory names when compiling - or binding. Either the environment variables or the built-in defaults - cause these files to be found. - - Besides simplifying access to the RTL, a major use of search paths is - in compiling sources from multiple directories. This can make - development environments much more flexible. - -  - File: gnat_ug_vms.info, Node: Examples of GNAT BIND Usage, Prev: Search Paths for GNAT BIND, Up: Binding Using GNAT BIND - - Examples of `GNAT BIND' Usage - ============================= - - This section contains a number of examples of using the GNAT binding - utility `GNAT BIND'. - - `GNAT BIND hello' - The main program `Hello' (source program in `HELLO.ADB') is bound - using the standard qualifier settings. The generated main program - is `B~HELLO.ADB'. This is the normal, default use of the binder. - - `GNAT BIND HELLO.ALI /OUTPUT=Mainprog.ADB' - The main program `Hello' (source program in `HELLO.ADB') is bound - using the standard qualifier settings. The generated main program - is `MAINPROG.ADB' with the associated spec in `MAINPROG.ADS'. Note - that you must specify the body here not the spec, in the case - where the output is in Ada. Note that if this option is used, then - linking must be done manually, since GNAT LINK will not be able to - find the generated file. - - `GNAT BIND MAIN.ALI /BIND_FILE=C /OUTPUT=Mainprog.C /READ_SOURCES=NONE' - The main program `Main' (source program in `MAIN.ADB') is bound, - excluding source files from the consistency checking, generating - the file `MAINPROG.C'. - - `GNAT BIND /NOMAIN math dbase /BIND_FILE=C /OUTPUT=ADA-CONTROL.C' - The main program is in a language other than Ada, but calls to - subprograms in packages `Math' and `Dbase' appear. This call to - `GNAT BIND' generates the file `ADA-CONTROL.C' containing the - `adainit' and `adafinal' routines to be called before and after - accessing the Ada units. - -  - File: gnat_ug_vms.info, Node: Linking Using GNAT LINK, Next: The GNAT Make Program GNAT MAKE, Prev: Binding Using GNAT BIND, Up: Top - - Linking Using `GNAT LINK' - ************************* - - This chapter discusses `GNAT LINK', a utility program used to link Ada - programs and build an executable file. This is a simple program that - invokes the Unix linker (via the `GNAT COMPILE' command) with a correct - list of object files and library references. `GNAT LINK' automatically - determines the list of files and references for the Ada part of a - program. It uses the binder file generated by the binder to determine - this list. - - * Menu: - - * Running GNAT LINK:: - * Qualifiers for GNAT LINK:: - * Setting Stack Size from GNAT LINK:: - * Setting Heap Size from GNAT LINK:: - -  - File: gnat_ug_vms.info, Node: Running GNAT LINK, Next: Qualifiers for GNAT LINK, Up: Linking Using GNAT LINK - - Running `GNAT LINK' - =================== - - The form of the `GNAT LINK' command is - - $ GNAT LINK [QUALIFIERS] MAINPROG[.ALI] [NON-ADA OBJECTS] - [LINKER OPTIONS] - - `MAINPROG.ALI' references the ALI file of the main program. The `.ALI' - extension of this file can be omitted. From this reference, `GNAT LINK' - locates the corresponding binder file `B$MAINPROG.ADB' and, using the - information in this file along with the list of non-Ada objects and - linker options, constructs a Unix linker command file to create the - executable. - - The arguments following `MAINPROG.ALI' are passed to the linker - uninterpreted. They typically include the names of object files for - units written in other languages than Ada and any library references - required to resolve references in any of these foreign language units, - or in `pragma Import' statements in any Ada units. - - LINKER OPTIONS is an optional list of linker specific qualifiers. - The default linker called by GNAT LINK is GNAT COMPILE which in turn - calls the appropriate system linker usually called LD. Standard options - for the linker such as `-lmy_lib' or `-Ldir' can be added as is. For - options that are not recognized by GNAT COMPILE as linker options, the - GNAT COMPILE qualifiers `-Xlinker' or `-Wl,' shall be used. Refer to - the GCC documentation for details. Here is an example showing how to - generate a linker map assuming that the underlying linker is GNU ld: - - $ GNAT LINK my_prog -Wl,-Map,MAPFILE - - Using LINKER OPTIONS it is possible to set the program stack and - heap size. See *note Setting Stack Size from GNAT LINK:: and *note - Setting Heap Size from GNAT LINK::. - - `GNAT LINK' determines the list of objects required by the Ada - program and prepends them to the list of objects passed to the linker. - `GNAT LINK' also gathers any arguments set by the use of `pragma - Linker_Options' and adds them to the list of arguments presented to the - linker. - - `GNAT LINK' accepts the following types of extra files on the command - line: objects (.OBJ), libraries (.OLB), shareable images (.EXE), and - options files (.OPT). These are recognized and handled according to - their extension. - -  - File: gnat_ug_vms.info, Node: Qualifiers for GNAT LINK, Next: Setting Stack Size from GNAT LINK, Prev: Running GNAT LINK, Up: Linking Using GNAT LINK - - Qualifiers for `GNAT LINK' - ========================== - - The following qualifiers are available with the `GNAT LINK' utility: - - `/BIND_FILE=ADA' - The binder has generated code in Ada. This is the default. - - `/BIND_FILE=C' - If instead of generating a file in Ada, the binder has generated - one in C, then the linker needs to know about it. Use this - qualifier to signal to `GNAT LINK' that the binder has generated C - code rather than Ada code. - - `-f' - On some targets, the command line length is limited, and `GNAT - LINK' will generate a separate file for the linker if the list of - object files is too long. The `-f' flag forces this file to be - generated even if the limit is not exceeded. This is useful in - some cases to deal with special situations where the command line - length is exceeded. - - `/DEBUG' - The option to include debugging information causes the Ada bind - file (in other words, `B$MAINPROG.ADB') to be compiled with - `/DEBUG'. In addition, the binder does not delete the - `B$MAINPROG.ADB', `B$MAINPROG.OBJ' and `B$MAINPROG.ALI' files. - Without `/DEBUG', the binder removes these files by default. The - same procedure apply if a C bind file was generated using - `/BIND_FILE=C' `GNAT BIND' option, in this case the filenames are - `B_MAINPROG.C' and `B_MAINPROG.OBJ'. - - `/VERBOSE' - Causes additional information to be output, including a full list - of the included object files. This qualifier option is most useful - when you want to see what set of object files are being used in - the link step. - - `/EXECUTABLE=EXEC-NAME' - EXEC-NAME specifies an alternate name for the generated executable - program. If this qualifier is omitted, the executable has the same - name as the main unit. For example, `GNAT LINK TRY.ALI' creates an - executable called `TRY.EXE'. - - `/DEBUG=TRACEBACK' - This qualifier causes sufficient information to be included in the - executable file to allow a traceback, but does not include the full - symbol information needed by the debugger. - - `/IDENTIFICATION=""' - "" specifies the string to be stored in the image file - identification field in the image header. It overrides any pragma - Ident specified string. - - `/NOINHIBIT-EXEC' - Generate the executable file even if there are linker warnings. - - `/NOSTART_FILES' - Don't link in the object file containing the "main" transfer - address. Used when linking with a foreign language main program - compiled with a Digital compiler. - - `/STATIC' - Prefer linking with object libraries over shareable images, even - without /DEBUG. - -  - File: gnat_ug_vms.info, Node: Setting Stack Size from GNAT LINK, Next: Setting Heap Size from GNAT LINK, Prev: Qualifiers for GNAT LINK, Up: Linking Using GNAT LINK - - Setting Stack Size from `GNAT LINK' - =================================== - - It is possible to specify the program stack size from `GNAT LINK'. - Assuming that the underlying linker is GNU ld there is two ways to do - so: - - * using `-Xlinker' linker option - - $ GNAT LINK hello -Xlinker --stack=0x10000,0x1000 - - This set the stack reserve size to 0x10000 bytes and the stack - commit size to 0x1000 bytes. - - * using `-Wl' linker option - - $ GNAT LINK hello -Wl,--stack=0x1000000 - - This set the stack reserve size to 0x1000000 bytes. Note that with - `-Wl' option it is not possible to set the stack commit size - because the coma is a separator for this option. - - -  - File: gnat_ug_vms.info, Node: Setting Heap Size from GNAT LINK, Prev: Setting Stack Size from GNAT LINK, Up: Linking Using GNAT LINK - - Setting Heap Size from `GNAT LINK' - ================================== - - It is possible to specify the program heap size from `GNAT LINK'. - Assuming that the underlying linker is GNU ld there is two ways to do - so: - - * using `-Xlinker' linker option - - $ GNAT LINK hello -Xlinker --heap=0x10000,0x1000 - - This set the heap reserve size to 0x10000 bytes and the heap commit - size to 0x1000 bytes. - - * using `-Wl' linker option - - $ GNAT LINK hello -Wl,--heap=0x1000000 - - This set the heap reserve size to 0x1000000 bytes. Note that with - `-Wl' option it is not possible to set the heap commit size - because the coma is a separator for this option. - - -  - File: gnat_ug_vms.info, Node: The GNAT Make Program GNAT MAKE, Next: Renaming Files Using GNAT CHOP, Prev: Linking Using GNAT LINK, Up: Top - - The GNAT Make Program `GNAT MAKE' - ********************************* - - * Menu: - - * Running GNAT MAKE:: - * Qualifiers for GNAT MAKE:: - * Mode Qualifiers for GNAT MAKE:: - * Notes on the Command Line:: - * How GNAT MAKE Works:: - * Examples of GNAT MAKE Usage:: - - A typical development cycle when working on an Ada program consists of - the following steps: - - 1. Edit some sources to fix bugs. - - 2. Add enhancements. - - 3. Compile all sources affected. - - 4. Rebind and relink. - - 5. Test. - - The third step can be tricky, because not only do the modified files - have to be compiled, but any files depending on these files must also be - recompiled. The dependency rules in Ada can be quite complex, especially - in the presence of overloading, `use' clauses, generics and inlined - subprograms. - - `GNAT MAKE' automatically takes care of the third and fourth steps - of this process. It determines which sources need to be compiled, - compiles them, and binds and links the resulting object files. - - Unlike some other Ada make programs, the dependencies are always - accurately recomputed from the new sources. The source based approach of - the GNAT compilation model makes this possible. This means that if - changes to the source program cause corresponding changes in - dependencies, they will always be tracked exactly correctly by `GNAT - MAKE'. - -  - File: gnat_ug_vms.info, Node: Running GNAT MAKE, Next: Qualifiers for GNAT MAKE, Up: The GNAT Make Program GNAT MAKE - - Running `GNAT MAKE' - =================== - - The usual form of the `GNAT MAKE' command is - - $ GNAT MAKE [QUALIFIERS] FILE_NAME [FILE_NAMES] [MODE_QUALIFIERS] - - The only required argument is one FILE_NAME, which specifies a - compilation unit that is a main program. Several FILE_NAMES can be - specified: this will result in several executables being built. If - `qualifiers' are present, they can be placed before the first - FILE_NAME, between FILE_NAMES or after the last FILE_NAME. If - MODE_QUALIFIERS are present, they must always be placed after the last - FILE_NAME and all `qualifiers'. - - If you are using standard file extensions (.ADB and .ADS), then the - extension may be omitted from the FILE_NAME arguments. However, if you - are using non-standard extensions, then it is required that the - extension be given. A relative or absolute directory path can be - specified in a FILE_NAME, in which case, the input source file will be - searched for in the specified directory only. Otherwise, the input - source file will first be searched in the directory where `GNAT MAKE' - was invoked and if it is not found, it will be search on the source - path of the compiler as described in *Note Search Paths and the - Run-Time Library (RTL)::. - - When several FILE_NAMES are specified, if an executable needs to be - rebuilt and relinked, all subsequent executables will be rebuilt and - relinked, even if this would not be absolutely necessary. - - All `GNAT MAKE' output (except when you specify - `/DEPENDENCIES_LIST') is to `SYS$ERROR'. The output produced by the - `/DEPENDENCIES_LIST' qualifier is send to `SYS$OUTPUT'. - -  - File: gnat_ug_vms.info, Node: Qualifiers for GNAT MAKE, Next: Mode Qualifiers for GNAT MAKE, Prev: Running GNAT MAKE, Up: The GNAT Make Program GNAT MAKE - - Qualifiers for `GNAT MAKE' - ========================== - - You may specify any of the following qualifiers to `GNAT MAKE': - - `/ALL_FILES' - Consider all files in the make process, even the GNAT internal - system files (for example, the predefined Ada library files), as - well as any locked files. Locked files are files whose ALI file is - write-protected. By default, `GNAT MAKE' does not check these - files, because the assumption is that the GNAT internal files are - properly up to date, and also that any write protected ALI files - have been properly installed. Note that if there is an - installation problem, such that one of these files is not up to - date, it will be properly caught by the binder. You may have to - specify this qualifier if you are working on GNAT itself. - `/ALL_FILES' is also useful in conjunction with `/FORCE_COMPILE' - if you need to recompile an entire application, including run-time - files, using special configuration pragma settings, such as a - non-standard `Float_Representation' pragma. By default `GNAT MAKE - /ALL_FILES' compiles all GNAT internal files with the - `/CHECKS=SUPPRESS_ALL /STYLE_CHECKS=GNAT' qualifier. - - `/ACTIONS=BIND' - Bind only. Can be combined with `/ACTIONS=COMPILE' to do - compilation and binding, but no link. Can be combined with - `/ACTIONS=LINK' to do binding and linking. When not combined with - `/ACTIONS=COMPILE' all the units in the closure of the main - program must have been previously compiled and must be up to date. - The root unit specified by FILE_NAME may be given without - extension, with the source extension or, if no GNAT Project File - is specified, with the ALI file extension. - - `/ACTIONS=COMPILE' - Compile only. Do not perform binding, except when `/ACTIONS=BIND' - is also specified. Do not perform linking, except if both - `/ACTIONS=BIND' and `/ACTIONS=LINK' are also specified. If the - root unit specified by FILE_NAME is not a main unit, this is the - default. Otherwise `GNAT MAKE' will attempt binding and linking - unless all objects are up to date and the executable is more - recent than the objects. - - `/MAPPING' - Use a mapping file. A mapping file is a way to communicate to the - compiler two mappings: from unit names to file names (without any - directory information) and from file names to path names (with - full directory information). These mappings are used by the - compiler to short-circuit the path search. When `GNAT MAKE' is - invoked with this qualifier, it will create a mapping file, - initially populated by the project manager, if `-P' is used, - otherwise initially empty. Each invocation of the compiler will - add the newly accessed sources to the mapping file. This will - improve the source search during the next invocation of the - compiler. - - `/FORCE_COMPILE' - Force recompilations. Recompile all sources, even though some - object files may be up to date, but don't recompile predefined or - GNAT internal files or locked files (files with a write-protected - ALI file), unless the `/ALL_FILES' qualifier is also specified. - - `' - - `/IN_PLACE' - In normal mode, `GNAT MAKE' compiles all object files and ALI files - into the current directory. If the `/IN_PLACE' qualifier is used, - then instead object files and ALI files that already exist are - overwritten in place. This means that once a large project is - organized into separate directories in the desired manner, then - `GNAT MAKE' will automatically maintain and update this - organization. If no ALI files are found on the Ada object path - (*Note Search Paths and the Run-Time Library (RTL)::), the new - object and ALI files are created in the directory containing the - source being compiled. If another organization is desired, where - objects and sources are kept in different directories, a useful - technique is to create dummy ALI files in the desired directories. - When detecting such a dummy file, `GNAT MAKE' will be forced to - recompile the corresponding source file, and it will be put the - resulting object and ALI files in the directory where it found the - dummy file. - - `/PROCESSES=N' - Use N processes to carry out the (re)compilations. On a - multiprocessor machine compilations will occur in parallel. In the - event of compilation errors, messages from various compilations - might get interspersed (but `GNAT MAKE' will give you the full - ordered list of failing compiles at the end). If this is - problematic, rerun the make process with n set to 1 to get a clean - list of messages. - - `/CONTINUE_ON_ERROR' - Keep going. Continue as much as possible after a compilation - error. To ease the programmer's task in case of compilation - errors, the list of sources for which the compile fails is given - when `GNAT MAKE' terminates. - - If `GNAT MAKE' is invoked with several `file_names' and with this - qualifier, if there are compilation errors when building an - executable, `GNAT MAKE' will not attempt to build the following - executables. - - `/ACTIONS=LINK' - Link only. Can be combined with `/ACTIONS=BIND' to binding and - linking. Linking will not be performed if combined with - `/ACTIONS=COMPILE' but not with `/ACTIONS=BIND'. When not - combined with `/ACTIONS=BIND' all the units in the closure of the - main program must have been previously compiled and must be up to - date, and the main program need to have been bound. The root unit - specified by FILE_NAME may be given without extension, with the - source extension or, if no GNAT Project File is specified, with - the ALI file extension. - - `/MINIMAL_RECOMPILATION' - Specifies that the minimum necessary amount of recompilations be - performed. In this mode `GNAT MAKE' ignores time stamp differences - when the only modifications to a source file consist in - adding/removing comments, empty lines, spaces or tabs. This means - that if you have changed the comments in a source file or have - simply reformatted it, using this qualifier will tell GNAT MAKE - not to recompile files that depend on it (provided other sources - on which these files depend have undergone no semantic - modifications). Note that the debugging information may be out of - date with respect to the sources if the `-m' qualifier causes a - compilation to be switched, so the use of this qualifier - represents a trade-off between compilation time and accurate - debugging information. - - `/DEPENDENCIES_LIST' - Check if all objects are up to date. If they are, output the object - dependences to `SYS$OUTPUT' in a form that can be directly - exploited in a `Makefile'. By default, each source file is - prefixed with its (relative or absolute) directory name. This name - is whatever you specified in the various `/SOURCE_SEARCH' and - `/SEARCH' qualifiers. If you use `GNAT MAKE /DEPENDENCIES_LIST' - `/QUIET' (see below), only the source file names, without relative - paths, are output. If you just specify the `/DEPENDENCIES_LIST' - qualifier, dependencies of the GNAT internal system files are - omitted. This is typically what you want. If you also specify the - `/ALL_FILES' qualifier, dependencies of the GNAT internal files - are also listed. Note that dependencies of the objects in external - Ada libraries (see qualifier `/SKIP_MISSING='DIR in the following - list) are never reported. - - `/DO_OBJECT_CHECK' - Don't compile, bind, or link. Checks if all objects are up to date. - If they are not, the full name of the first file that needs to be - recompiled is printed. Repeated use of this option, followed by - compiling the indicated source file, will eventually result in - recompiling all required units. - - `/EXECUTABLE=EXEC_NAME' - Output executable name. The name of the final executable program - will be EXEC_NAME. If the `/EXECUTABLE' qualifier is omitted the - default name for the executable will be the name of the input file - in appropriate form for an executable file on the host system. - - This qualifier cannot be used when invoking `GNAT MAKE' with - several `file_names'. - - `/QUIET' - Quiet. When this flag is not set, the commands carried out by - `GNAT MAKE' are displayed. - - `/SWITCH_CHECK/' - Recompile if compiler qualifiers have changed since last - compilation. All compiler qualifiers but -I and -o are taken into - account in the following way: orders between different "first - letter" qualifiers are ignored, but orders between same qualifiers - are taken into account. For example, `-O /OPTIMIZE=ALL' is - different than `/OPTIMIZE=ALL -O', but `-g -O' is equivalent to - `-O -g'. - - `/UNIQUE' - Unique. Recompile at most the main file. It implies -c. Combined - with -f, it is equivalent to calling the compiler directly. - - `/REASONS' - Verbose. Displays the reason for all recompilations `GNAT MAKE' - decides are necessary. - - `/NOMAIN' - No main subprogram. Bind and link the program even if the unit name - given on the command line is a package name. The resulting - executable will execute the elaboration routines of the package - and its closure, then the finalization routines. - - ``GNAT COMPILE' qualifiers' - Any qualifier that cannot be recognized as a qualifier for `GNAT - MAKE' but is recognizable as a valid qualifier for `GNAT COMPILE' - is automatically treated as a compiler qualifier, and passed on to - all compilations that are carried out. - - Source and library search path qualifiers: - - `/SOURCE_SEARCH=DIR' - When looking for source files also look in directory DIR. The - order in which source files search is undertaken is described in - *Note Search Paths and the Run-Time Library (RTL)::. - - `/SKIP_MISSING=DIR' - Consider DIR as being an externally provided Ada library. - Instructs `GNAT MAKE' to skip compilation units whose `.ALI' files - have been located in directory DIR. This allows you to have - missing bodies for the units in DIR and to ignore out of date - bodies for the same units. You still need to specify the location - of the specs for these units by using the qualifiers - `/SOURCE_SEARCH=DIR' or `/SEARCH=DIR'. Note: this qualifier is - provided for compatibility with previous versions of `GNAT MAKE'. - The easier method of causing standard libraries to be excluded - from consideration is to write-protect the corresponding ALI files. - - `/OBJECT_SEARCH=DIR' - When searching for library and object files, look in directory - DIR. The order in which library files are searched is described in - *Note Search Paths for GNAT BIND::. - - `/CONDITIONAL_SOURCE_SEARCH=DIR' - Equivalent to `/SKIP_MISSING=DIR /SOURCE_SEARCH=DIR'. - - `/SEARCH=DIR' - Equivalent to `/OBJECT_SEARCH=DIR /SOURCE_SEARCH=DIR'. - - `/NOCURRENT_DIRECTORY' - Do not look for source files in the directory containing the source - file named in the command line. Do not look for ALI or object - files in the directory where `GNAT MAKE' was invoked. - - `/LIBRARY_SEARCH=DIR' - Add directory DIR to the list of directories in which the linker - will search for libraries. This is equivalent to - `/LINKER_QUALIFIERS /LIBRARY_SEARCH='DIR. - - `/NOSTD_INCLUDES' - Do not look for source files in the system default directory. - - `/NOSTD_LIBRARIES' - Do not look for library files in the system default directory. - - `/RUNTIME_SYSTEM=RTS-PATH' - Specifies the default location of the runtime library. We look for - the runtime in the following directories, and stop as soon as a - valid runtime is found ("adainclude" or "ada_source_path", and - "adalib" or "ada_object_path" present): - - * /$rts_path - - * /$rts_path - - * /rts-$rts_path - - The selected path is handled like a normal RTS path. - -  - File: gnat_ug_vms.info, Node: Mode Qualifiers for GNAT MAKE, Next: Notes on the Command Line, Prev: Qualifiers for GNAT MAKE, Up: The GNAT Make Program GNAT MAKE - - Mode Qualifiers for `GNAT MAKE' - =============================== - - The mode qualifiers (referred to as `mode_qualifiers') allow the - inclusion of qualifiers that are to be passed to the compiler itself, - the binder or the linker. The effect of a mode qualifier is to cause all - subsequent qualifiers up to the end of the qualifier list, or up to the - next mode qualifier, to be interpreted as qualifiers to be passed on to - the designated component of GNAT. - - `/COMPILER_QUALIFIERS QUALIFIERS' - Compiler qualifiers. Here QUALIFIERS is a list of qualifiers that - are valid qualifiers for `GNAT COMPILE'. They will be passed on to - all compile steps performed by `GNAT MAKE'. - - `/BINDER_QUALIFIERS QUALIFIERS' - Binder qualifiers. Here QUALIFIERS is a list of qualifiers that - are valid qualifiers for `GNAT COMPILE'. They will be passed on to - all bind steps performed by `GNAT MAKE'. - - `/LINKER_QUALIFIERS QUALIFIERS' - Linker qualifiers. Here QUALIFIERS is a list of qualifiers that - are valid qualifiers for `GNAT COMPILE'. They will be passed on to - all link steps performed by `GNAT MAKE'. - -  - File: gnat_ug_vms.info, Node: Notes on the Command Line, Next: How GNAT MAKE Works, Prev: Mode Qualifiers for GNAT MAKE, Up: The GNAT Make Program GNAT MAKE - - Notes on the Command Line - ========================= - - This section contains some additional useful notes on the operation of - the `GNAT MAKE' command. - - * If `GNAT MAKE' finds no ALI files, it recompiles the main program - and all other units required by the main program. This means that - `GNAT MAKE' can be used for the initial compile, as well as during - subsequent steps of the development cycle. - - * If you enter `GNAT MAKE FILE.ADB', where `FILE.ADB' is a subunit - or body of a generic unit, `GNAT MAKE' recompiles `FILE.ADB' - (because it finds no ALI) and stops, issuing a warning. - - * In `GNAT MAKE' the qualifier `/SEARCH' is used to specify both - source and library file paths. Use `/SOURCE_SEARCH' instead if you - just want to specify source paths only and `/OBJECT_SEARCH' if you - want to specify library paths only. - - * `GNAT MAKE' examines both an ALI file and its corresponding object - file for consistency. If an ALI is more recent than its - corresponding object, or if the object file is missing, the - corresponding source will be recompiled. Note that `GNAT MAKE' - expects an ALI and the corresponding object file to be in the same - directory. - - * `GNAT MAKE' will ignore any files whose ALI file is - write-protected. This may conveniently be used to exclude - standard libraries from consideration and in particular it means - that the use of the `/FORCE_COMPILE' qualifier will not recompile - these files unless `/ALL_FILES' is also specified. - - * `GNAT MAKE' has been designed to make the use of Ada libraries - particularly convenient. Assume you have an Ada library organized - as follows: [OBJ_DIR] contains the objects and ALI files for of - your Ada compilation units, whereas [INCLUDE_DIR] contains the - specs of these units, but no bodies. Then to compile a unit stored - in `MAIN.ADB', which uses this Ada library you would just type - - $ GNAT MAKE /SOURCE_SEARCH=[INCLUDE_DIR] - /SKIP_MISSING=[OBJ_DIR] main - - * Using `GNAT MAKE' along with the `/MINIMAL_RECOMPILATION' - qualifier provides a mechanism for avoiding unnecessary - rcompilations. Using this qualifier, you can update the - comments/format of your source files without having to recompile - everything. Note, however, that adding or deleting lines in a - source files may render its debugging info obsolete. If the file - in question is a spec, the impact is rather limited, as that - debugging info will only be useful during the elaboration phase of - your program. For bodies the impact can be more significant. In - all events, your debugger will warn you if a source file is more - recent than the corresponding object, and alert you to the fact - that the debugging information may be out of date. - -  - File: gnat_ug_vms.info, Node: How GNAT MAKE Works, Next: Examples of GNAT MAKE Usage, Prev: Notes on the Command Line, Up: The GNAT Make Program GNAT MAKE - - How `GNAT MAKE' Works - ===================== - - Generally `GNAT MAKE' automatically performs all necessary - recompilations and you don't need to worry about how it works. However, - it may be useful to have some basic understanding of the `GNAT MAKE' - approach and in particular to understand how it uses the results of - previous compilations without incorrectly depending on them. - - First a definition: an object file is considered "up to date" if the - corresponding ALI file exists and its time stamp predates that of the - object file and if all the source files listed in the dependency - section of this ALI file have time stamps matching those in the ALI - file. This means that neither the source file itself nor any files that - it depends on have been modified, and hence there is no need to - recompile this file. - - `GNAT MAKE' works by first checking if the specified main unit is up - to date. If so, no compilations are required for the main unit. If not, - `GNAT MAKE' compiles the main program to build a new ALI file that - reflects the latest sources. Then the ALI file of the main unit is - examined to find all the source files on which the main program depends, - and `GNAT MAKE' recursively applies the above procedure on all these - files. - - This process ensures that `GNAT MAKE' only trusts the dependencies - in an existing ALI file if they are known to be correct. Otherwise it - always recompiles to determine a new, guaranteed accurate set of - dependencies. As a result the program is compiled "upside down" from - what may be more familiar as the required order of compilation in some - other Ada systems. In particular, clients are compiled before the units - on which they depend. The ability of GNAT to compile in any order is - critical in allowing an order of compilation to be chosen that - guarantees that `GNAT MAKE' will recompute a correct set of new - dependencies if necessary. - - When invoking `GNAT MAKE' with several FILE_NAMES, if a unit is - imported by several of the executables, it will be recompiled at most - once. - -  - File: gnat_ug_vms.info, Node: Examples of GNAT MAKE Usage, Prev: How GNAT MAKE Works, Up: The GNAT Make Program GNAT MAKE - - Examples of `GNAT MAKE' Usage - ============================= - - `GNAT MAKE HELLO.ADB' - Compile all files necessary to bind and link the main program - `HELLO.ADB' (containing unit `Hello') and bind and link the - resulting object files to generate an executable file `HELLO.EXE'. - - `GNAT MAKE main1 main2 main3' - Compile all files necessary to bind and link the main programs - `MAIN1.ADB' (containing unit `Main1'), `MAIN2.ADB' (containing - unit `Main2') and `MAIN3.ADB' (containing unit `Main3') and bind - and link the resulting object files to generate three executable - files `MAIN1.EXE', `MAIN2.EXE' and `MAIN3.EXE'. - - `GNAT MAKE Main_Unit /QUIET /COMPILER_QUALIFIERS /OPTIMIZE=ALL /BINDER_QUALIFIERS /ORDER_OF_ELABORATION' - Compile all files necessary to bind and link the main program unit - `Main_Unit' (from file `MAIN_UNIT.ADB'). All compilations will be - done with optimization level 2 and the order of elaboration will be - listed by the binder. `GNAT MAKE' will operate in quiet mode, not - displaying commands it is executing. - -  - File: gnat_ug_vms.info, Node: Renaming Files Using GNAT CHOP, Next: Configuration Pragmas, Prev: The GNAT Make Program GNAT MAKE, Up: Top - - Renaming Files Using `GNAT CHOP' - ******************************** - - This chapter discusses how to handle files with multiple units by using - the `GNAT CHOP' utility. This utility is also useful in renaming files - to meet the standard GNAT default file naming conventions. - - * Menu: - - * Handling Files with Multiple Units:: - * Operating GNAT CHOP in Compilation Mode:: - * Command Line for GNAT CHOP:: - * Qualifiers for GNAT CHOP:: - * Examples of GNAT CHOP Usage:: - -  - File: gnat_ug_vms.info, Node: Handling Files with Multiple Units, Next: Operating GNAT CHOP in Compilation Mode, Up: Renaming Files Using GNAT CHOP - - Handling Files with Multiple Units - ================================== - - The basic compilation model of GNAT requires that a file submitted to - the compiler have only one unit and there be a strict correspondence - between the file name and the unit name. - - The `GNAT CHOP' utility allows both of these rules to be relaxed, - allowing GNAT to process files which contain multiple compilation units - and files with arbitrary file names. `GNAT CHOP' reads the specified - file and generates one or more output files, containing one unit per - file. The unit and the file name correspond, as required by GNAT. - - If you want to permanently restructure a set of "foreign" files so - that they match the GNAT rules, and do the remaining development using - the GNAT structure, you can simply use `GNAT CHOP' once, generate the - new set of files and work with them from that point on. - - Alternatively, if you want to keep your files in the "foreign" - format, perhaps to maintain compatibility with some other Ada - compilation system, you can set up a procedure where you use `GNAT - CHOP' each time you compile, regarding the source files that it writes - as temporary files that you throw away. - -  - File: gnat_ug_vms.info, Node: Operating GNAT CHOP in Compilation Mode, Next: Command Line for GNAT CHOP, Prev: Handling Files with Multiple Units, Up: Renaming Files Using GNAT CHOP - - Operating GNAT CHOP in Compilation Mode - ======================================= - - The basic function of `GNAT CHOP' is to take a file with multiple units - and split it into separate files. The boundary between files is - reasonably clear, except for the issue of comments and pragmas. In - default mode, the rule is that any pragmas between units belong to the - previous unit, except that configuration pragmas always belong to the - following unit. Any comments belong to the following unit. These rules - almost always result in the right choice of the split point without - needing to mark it explicitly and most users will find this default to - be what they want. In this default mode it is incorrect to submit a - file containing only configuration pragmas, or one that ends in - configuration pragmas, to `GNAT CHOP'. - - However, using a special option to activate "compilation mode", - `GNAT CHOP' can perform another function, which is to provide exactly - the semantics required by the RM for handling of configuration pragmas - in a compilation. In the absence of configuration pragmas (at the main - file level), this option has no effect, but it causes such - configuration pragmas to be handled in a quite different manner. - - First, in compilation mode, if `GNAT CHOP' is given a file that - consists of only configuration pragmas, then this file is appended to - the `GNAT.ADC' file in the current directory. This behavior provides - the required behavior described in the RM for the actions to be taken - on submitting such a file to the compiler, namely that these pragmas - should apply to all subsequent compilations in the same compilation - environment. Using GNAT, the current directory, possibly containing a - `GNAT.ADC' file is the representation of a compilation environment. For - more information on the `GNAT.ADC' file, see the section on handling of - configuration pragmas *note Handling of Configuration Pragmas::. - - Second, in compilation mode, if `GNAT CHOP' is given a file that - starts with configuration pragmas, and contains one or more units, then - these configuration pragmas are prepended to each of the chopped files. - This behavior provides the required behavior described in the RM for the - actions to be taken on compiling such a file, namely that the pragmas - apply to all units in the compilation, but not to subsequently compiled - units. - - Finally, if configuration pragmas appear between units, they are - appended to the previous unit. This results in the previous unit being - illegal, since the compiler does not accept configuration pragmas that - follow a unit. This provides the required RM behavior that forbids - configuration pragmas other than those preceding the first compilation - unit of a compilation. - - For most purposes, `GNAT CHOP' will be used in default mode. The - compilation mode described above is used only if you need exactly - accurate behavior with respect to compilations, and you have files that - contain multiple units and configuration pragmas. In this circumstance - the use of `GNAT CHOP' with the compilation mode qualifier provides the - required behavior, and is for example the mode in which GNAT processes - the ACVC tests. - -  - File: gnat_ug_vms.info, Node: Command Line for GNAT CHOP, Next: Qualifiers for GNAT CHOP, Prev: Operating GNAT CHOP in Compilation Mode, Up: Renaming Files Using GNAT CHOP - - Command Line for `GNAT CHOP' - ============================ - - The `GNAT CHOP' command has the form: - - $ GNAT CHOP qualifiers FILE NAME [FILE NAME FILE NAME ...] - [DIRECTORY] - - The only required argument is the file name of the file to be chopped. - There are no restrictions on the form of this file name. The file itself - contains one or more Ada units, in normal GNAT format, concatenated - together. As shown, more than one file may be presented to be chopped. - - When run in default mode, `GNAT CHOP' generates one output file in - the current directory for each unit in each of the files. - - DIRECTORY, if specified, gives the name of the directory to which - the output files will be written. If it is not specified, all files are - written to the current directory. - - For example, given a file called `hellofiles' containing - - procedure hello; - - with Text_IO; use Text_IO; - procedure hello is - begin - Put_Line ("Hello"); - end hello; - - the command - - $ GNAT CHOP HELLOFILES. - - generates two files in the current directory, one called `HELLO.ADS' - containing the single line that is the procedure spec, and the other - called `HELLO.ADB' containing the remaining text. The original file is - not affected. The generated files can be compiled in the normal manner. - -  - File: gnat_ug_vms.info, Node: Qualifiers for GNAT CHOP, Next: Examples of GNAT CHOP Usage, Prev: Command Line for GNAT CHOP, Up: Renaming Files Using GNAT CHOP - - Qualifiers for `GNAT CHOP' - ========================== - - `GNAT CHOP' recognizes the following qualifiers: - - `/COMPILATION' - Causes `GNAT CHOP' to operate in compilation mode, in which - configuration pragmas are handled according to strict RM rules. See - previous section for a full description of this mode. - - `/HELP' - Causes `GNAT CHOP' to generate a brief help summary to the standard - output file showing usage information. - - `/FILE_NAME_MAX_LENGTH=MM' - Limit generated file names to the specified number `mm' of - characters. This is useful if the resulting set of files is - required to be interoperable with systems which limit the length - of file names. If no value is given, or if no - `/FILE_NAME_MAX_LENGTH' qualifier is given, a default of 39, - suitable for OpenVMS Alpha Systems, is assumed - - `/PRESERVE' - Causes the file creation time stamp of the input file to be - preserved and used for the time stamp of the output file(s). This - may be useful for preserving coherency of time stamps in an - enviroment where `GNAT CHOP' is used as part of a standard build - process. - - `/QUIET' - Causes output of informational messages indicating the set of - generated files to be suppressed. Warnings and error messages are - unaffected. - - `/REFERENCE' - Generate `Source_Reference' pragmas. Use this qualifier if the - output files are regarded as temporary and development is to be - done in terms of the original unchopped file. This qualifier causes - `Source_Reference' pragmas to be inserted into each of the - generated files to refers back to the original file name and line - number. The result is that all error messages refer back to the - original unchopped file. In addition, the debugging information - placed into the object file (when the `/DEBUG' qualifier of `GNAT - COMPILE' or `GNAT MAKE' is specified) also refers back to this - original file so that tools like profilers and debuggers will give - information in terms of the original unchopped file. - - If the original file to be chopped itself contains a - `Source_Reference' pragma referencing a third file, then GNAT CHOP - respects this pragma, and the generated `Source_Reference' pragmas - in the chopped file refer to the original file, with appropriate - line numbers. This is particularly useful when `GNAT CHOP' is used - in conjunction with `GNAT PREPROCESS' to compile files that - contain preprocessing statements and multiple units. - - `/VERBOSE' - Causes `GNAT CHOP' to operate in verbose mode. The version number - and copyright notice are output, as well as exact copies of the - GNAT1 commands spawned to obtain the chop control information. - - `/OVERWRITE' - Overwrite existing file names. Normally `GNAT CHOP' regards it as a - fatal error if there is already a file with the same name as a - file it would otherwise output, in other words if the files to be - chopped contain duplicated units. This qualifier bypasses this - check, and causes all but the last instance of such duplicated - units to be skipped. - -  - File: gnat_ug_vms.info, Node: Examples of GNAT CHOP Usage, Prev: Qualifiers for GNAT CHOP, Up: Renaming Files Using GNAT CHOP - - Examples of `GNAT CHOP' Usage - ============================= - - `GNAT CHOP /OVERWRITE HELLO_S.ADA [ICHBIAH.FILES]' - Chops the source file `HELLO_S.ADA'. The output files will be - placed in the directory `[ICHBIAH.FILES]', overwriting any files - with matching names in that directory (no files in the current - directory are modified). - - `GNAT CHOP ARCHIVE.' - Chops the source file `ARCHIVE.' into the current directory. One - useful application of `GNAT CHOP' is in sending sets of sources - around, for example in email messages. The required sources are - simply concatenated (for example, using a VMS `APPEND/NEW' - command), and then `GNAT CHOP' is used at the other end to - reconstitute the original file names. - - `GNAT CHOP file1 file2 file3 direc' - Chops all units in files `file1', `file2', `file3', placing the - resulting files in the directory `direc'. Note that if any units - occur more than once anywhere within this set of files, an error - message is generated, and no files are written. To override this - check, use the `/OVERWRITE' qualifier, in which case the last - occurrence in the last file will be the one that is output, and - earlier duplicate occurrences for a given unit will be skipped. - -  - File: gnat_ug_vms.info, Node: Configuration Pragmas, Next: Handling Arbitrary File Naming Conventions Using gnatname, Prev: Renaming Files Using GNAT CHOP, Up: Top - - Configuration Pragmas - ********************* - - In Ada 95, configuration pragmas include those pragmas described as - such in the Ada 95 Reference Manual, as well as - implementation-dependent pragmas that are configuration pragmas. See the - individual descriptions of pragmas in the GNAT Reference Manual for - details on these additional GNAT-specific configuration pragmas. Most - notably, the pragma `Source_File_Name', which allows specifying - non-default names for source files, is a configuration pragma. The - following is a complete list of configuration pragmas recognized by - `GNAT': - - Ada_83 - Ada_95 - C_Pass_By_Copy - Component_Alignment - Discard_Names - Elaboration_Checks - Eliminate - Extend_System - Extensions_Allowed - External_Name_Casing - Float_Representation - Initialize_Scalars - License - Locking_Policy - Long_Float - No_Run_Time - Normalize_Scalars - Polling - Propagate_Exceptions - Queuing_Policy - Ravenscar - Restricted_Run_Time - Restrictions - Reviewable - Source_File_Name - Style_Checks - Suppress - Task_Dispatching_Policy - Unsuppress - Use_VADS_Size - Warnings - Validity_Checks - - * Menu: - - * Handling of Configuration Pragmas:: - * The Configuration Pragmas Files:: - -  - File: gnat_ug_vms.info, Node: Handling of Configuration Pragmas, Next: The Configuration Pragmas Files, Up: Configuration Pragmas - - Handling of Configuration Pragmas - ================================= - - Configuration pragmas may either appear at the start of a compilation - unit, in which case they apply only to that unit, or they may apply to - all compilations performed in a given compilation environment. - - GNAT also provides the `GNAT CHOP' utility to provide an automatic - way to handle configuration pragmas following the semantics for - compilations (that is, files with multiple units), described in the RM. - See section *note Operating GNAT CHOP in Compilation Mode:: for details. - However, for most purposes, it will be more convenient to edit the - `GNAT.ADC' file that contains configuration pragmas directly, as - described in the following section. - -  - File: gnat_ug_vms.info, Node: The Configuration Pragmas Files, Prev: Handling of Configuration Pragmas, Up: Configuration Pragmas - - The Configuration Pragmas Files - =============================== - - In GNAT a compilation environment is defined by the current directory - at the time that a compile command is given. This current directory is - searched for a file whose name is `GNAT.ADC'. If this file is present, - it is expected to contain one or more configuration pragmas that will - be applied to the current compilation. However, if the qualifier - `-gnatA' is used, `GNAT.ADC' is not considered. - - Configuration pragmas may be entered into the `GNAT.ADC' file either - by running `GNAT CHOP' on a source file that consists only of - configuration pragmas, or more conveniently by direct editing of the - `GNAT.ADC' file, which is a standard format source file. - - In addition to `GNAT.ADC', one additional file containing - configuration pragmas may be applied to the current compilation using - the qualifier `-gnatec'PATH. PATH must designate an existing file that - contains only configuration pragmas. These configuration pragmas are in - addition to those found in `GNAT.ADC' (provided `GNAT.ADC' is present - and qualifier `-gnatA' is not used). - - It is allowed to specify several qualifiers `-gnatec', however only - the last one on the command line will be taken into account. - - Of special interest to GNAT OpenVMS Alpha is the following - configuration pragma: - - pragma Extend_System (Aux_DEC); - - In the presence of this pragma, GNAT adds to the definition of the - predefined package SYSTEM all the additional types and subprograms that - are defined in DEC Ada. See *note Compatibility with DEC Ada:: for - details. - -  - File: gnat_ug_vms.info, Node: Handling Arbitrary File Naming Conventions Using gnatname, Next: GNAT Project Manager, Prev: Configuration Pragmas, Up: Top - - Handling Arbitrary File Naming Conventions Using `gnatname' - *********************************************************** - - * Menu: - - * Arbitrary File Naming Conventions:: - * Running gnatname:: - * Qualifiers for gnatname:: - * Examples of gnatname Usage:: - -  - File: gnat_ug_vms.info, Node: Arbitrary File Naming Conventions, Next: Running gnatname, Up: Handling Arbitrary File Naming Conventions Using gnatname - - Arbitrary File Naming Conventions - ================================= - - The GNAT compiler must be able to know the source file name of a - compilation unit. When using the standard GNAT default file naming - conventions (`.ADS' for specs, `.ADB' for bodies), the GNAT compiler - does not need additional information. - - When the source file names do not follow the standard GNAT default file - naming conventions, the GNAT compiler must be given additional - information through a configuration pragmas file (see *Note - Configuration Pragmas::) or a project file. When the non standard file - naming conventions are well-defined, a small number of pragmas - `Source_File_Name' specifying a naming pattern (see *Note Alternative - File Naming Schemes::) may be sufficient. However, if the file naming - conventions are irregular or arbitrary, a number of pragma - `Source_File_Name' for individual compilation units must be defined. - To help maintain the correspondence between compilation unit names and - source file names within the compiler, GNAT provides a tool `gnatname' - to generate the required pragmas for a set of files. - -  - File: gnat_ug_vms.info, Node: Running gnatname, Next: Qualifiers for gnatname, Prev: Arbitrary File Naming Conventions, Up: Handling Arbitrary File Naming Conventions Using gnatname - - Running `gnatname' - ================== - - The usual form of the `gnatname' command is - - $ gnatname [QUALIFIERS] NAMING_PATTERN [NAMING_PATTERNS] - - All of the arguments are optional. If invoked without any argument, - `gnatname' will display its usage. - - When used with at least one naming pattern, `gnatname' will attempt to - find all the compilation units in files that follow at least one of the - naming patterns. To find these compilation units, `gnatname' will use - the GNAT compiler in syntax-check-only mode on all regular files. - - One or several Naming Patterns may be given as arguments to `gnatname'. - Each Naming Pattern is enclosed between double quotes. A Naming - Pattern is a regular expression similar to the wildcard patterns used - in file names by the Unix shells or the DOS prompt. - - Examples of Naming Patterns are - - "*.[12].ADA" - "*.ad[sb]*" - "body_*" "spec_*" - - For a more complete description of the syntax of Naming Patterns, see - the second kind of regular expressions described in `G-REGEXP.ADS' (the - "Glob" regular expressions). - - When invoked with no qualifiers, `gnatname' will create a configuration - pragmas file `GNAT.ADC' in the current working directory, with pragmas - `Source_File_Name' for each file that contains a valid Ada unit. - -  - File: gnat_ug_vms.info, Node: Qualifiers for gnatname, Next: Examples of gnatname Usage, Prev: Running gnatname, Up: Handling Arbitrary File Naming Conventions Using gnatname - - Qualifiers for `gnatname' - ========================= - - Qualifiers for `gnatname' must precede any specified Naming Pattern. - - You may specify any of the following qualifiers to `gnatname': - - `-c`file'' - Create a configuration pragmas file `file' (instead of the default - `GNAT.ADC'). There may be zero, one or more space between `-c' and - `file'. `file' may include directory information. `file' must be - writeable. There may be only one qualifier `-c'. When a qualifier - `-c' is specified, no qualifier `-P' may be specified (see below). - - `-d`dir'' - Look for source files in directory `dir'. There may be zero, one - or more spaces between `-d' and `dir'. When a qualifier `-d' is - specified, the current working directory will not be searched for - source files, unless it is explictly specified with a `-d' or `-D' - qualifier. Several qualifiers `-d' may be specified. If `dir' is a - relative path, it is relative to the directory of the - configuration pragmas file specified with qualifier `-c', or to - the directory of the project file specified with qualifier `-P' - or, if neither qualifier `-c' nor qualifier `-P' are specified, it - is relative to the current working directory. The directory - specified with qualifier `-c' must exist and be readable. - - `-D`file'' - Look for source files in all directories listed in text file - `file'. There may be zero, one or more spaces between `-d' and - `dir'. `file' must be an existing, readable text file. Each non - empty line in `file' must be a directory. Specifying qualifier - `-D' is equivalent to specifying as many qualifiers `-d' as there - are non empty lines in `file'. - - `-h' - Output usage (help) information. The output is written to - `SYS$OUTPUT'. - - `-P`proj'' - Create or update project file `proj'. There may be zero, one or - more space between `-P' and `proj'. `proj' may include directory - information. `proj' must be writeable. There may be only one - qualifier `-P'. When a qualifier `-P' is specified, no qualifier - `-c' may be specified. - - `-v' - Verbose mode. Output detailed explanation of behavior to - `SYS$OUTPUT'. This includes name of the file written, the name of - the directories to search and, for each file in those directories - whose name matches at least one of the Naming Patterns, an - indication of whether the file contains a unit, and if so the name - of the unit. - - `-v -v' - Very Verbose mode. In addition to the output produced in verbose - mode, for each file in the searched directories whose name matches - none of the Naming Patterns, an indication is given that there is - no match. - - `-x`pattern'' - Excluded patterns. Using this qualifier, it is possible to exclude - some files that would match the name patterns. For example, - `"gnatname -x "*_NT.ADA" "*.ADA"' will look for Ada units in all - files with the `.ADA' extension, except those whose names end with - `_NT.ADA'. - -  - File: gnat_ug_vms.info, Node: Examples of gnatname Usage, Prev: Qualifiers for gnatname, Up: Handling Arbitrary File Naming Conventions Using gnatname - - Examples of `gnatname' Usage - ============================ - - $ gnatname -c /home/me/NAMES.ADC -d sources "[a-z]*.ADA*" - - In this example, the directory `/home/me' must already exist and be - writeable. In addition, the directory `/home/me/sources' (specified by - `-d sources') must exist and be readable. Note the optional spaces after - `-c' and `-d'. - - $ gnatname -P/home/me/proj -x "*_NT_BODY.ADA" -dsources -dsources/plus -Dcommon_dirs.txt "body_*" "spec_*" - - Note that several qualifiers `-d' may be used, even in conjunction - with one or several qualifiers `-D'. Several Naming Patterns and one - excluded pattern are used in this example. - -  - File: gnat_ug_vms.info, Node: GNAT Project Manager, Next: Elaboration Order Handling in GNAT, Prev: Handling Arbitrary File Naming Conventions Using gnatname, Up: Top - - GNAT Project Manager - ******************** - - * Menu: - - * Introduction:: - * Examples of Project Files:: - * Project File Syntax:: - * Objects and Sources in Project Files:: - * Importing Projects:: - * Project Extension:: - * External References in Project Files:: - * Packages in Project Files:: - * Variables from Imported Projects:: - * Naming Schemes:: - * Library Projects:: - * Qualifiers Related to Project Files:: - * Tools Supporting Project Files:: - * An Extended Example:: - * Project File Complete Syntax:: - -  - File: gnat_ug_vms.info, Node: Introduction, Next: Examples of Project Files, Up: GNAT Project Manager - - Introduction - ============ - - This chapter describes GNAT's _Project Manager_, a facility that lets - you configure various properties for a collection of source files. In - particular, you can specify: - * The directory or set of directories containing the source files, - and/or the names of the specific source files themselves - - * The directory in which the compiler's output (`ALI' files, object - files, tree files) will be placed - - * The directory in which the executable programs will be placed - - * Qualifier settings for any of the project-enabled tools (`GNAT - MAKE', compiler, binder, linker, `GNAT LIST', `GNAT XREF', `GNAT - FIND'); you can apply these settings either globally or to - individual units - - * The source files containing the main subprogram(s) to be built - - * The source programming language(s) (currently Ada and/or C) - - * Source file naming conventions; you can specify these either - globally or for individual units - - * Menu: - - * Project Files:: - -  - File: gnat_ug_vms.info, Node: Project Files, Up: Introduction - - Project Files - ------------- - - A "project" is a specific set of values for these properties. You can - define a project's settings in a "project file", a text file with an - Ada-like syntax; a property value is either a string or a list of - strings. Properties that are not explicitly set receive default - values. A project file may interrogate the values of "external - variables" (user-defined command-line qualifiers or environment - variables), and it may specify property settings conditionally, based - on the value of such variables. - - In simple cases, a project's source files depend only on other - source files in the same project, or on the predefined libraries. - ("Dependence" is in the technical sense; for example, one Ada unit - "with"ing another.) However, the Project Manager also allows much more - sophisticated arrangements, with the source files in one project - depending on source files in other projects: - * One project can _import_ other projects containing needed source - files. - - * You can organize GNAT projects in a hierarchy: a _child_ project - can extend a _parent_ project, inheriting the parent's source - files and optionally overriding any of them with alternative - versions - - More generally, the Project Manager lets you structure large development - efforts into hierarchical subsystems, with build decisions deferred to - the subsystem level and thus different compilation environments - (qualifier settings) used for different subsystems. - - The Project Manager is invoked through the `-P_projectfile_' - qualifier to `GNAT MAKE' or to the `gnat' front driver. If you want to - define (on the command line) an external variable that is queried by - the project file, additionally use the `-X_vbl_=_value_' qualifier. - The Project Manager parses and interprets the project file, and drives - the invoked tool based on the project settings. - - The Project Manager supports a wide range of development strategies, - for systems of all sizes. Some typical practices that are easily - handled: - * Using a common set of source files, but generating object files in - different directories via different qualifier settings - - * Using a mostly-shared set of source files, but with different - versions of some unit or units - - The destination of an executable can be controlled inside a project file - using the `-o' qualifier. In the absence of such a qualifier either - inside the project file or on the command line, any executable files - generated by `GNAT MAKE' will be placed in the directory `Exec_Dir' - specified in the project file. If no `Exec_Dir' is specified, they will - be placed in the object directory of the project. - - You can use project files to achieve some of the effects of a source - versioning system (for example, defining separate projects for the - different sets of sources that comprise different releases) but the - Project Manager is independent of any source configuration management - tools that might be used by the developers. - - The next section introduces the main features of GNAT's project - facility through a sequence of examples; subsequent sections will - present the syntax and semantics in more detail. - -  - File: gnat_ug_vms.info, Node: Examples of Project Files, Next: Project File Syntax, Prev: Introduction, Up: GNAT Project Manager - - Examples of Project Files - ========================= - - This section illustrates some of the typical uses of project files and - explains their basic structure and behavior. - - * Menu: - - * Common Sources with Different Qualifiers and Different Output Directories:: - * Using External Variables:: - * Importing Other Projects:: - * Extending a Project:: - -  - File: gnat_ug_vms.info, Node: Common Sources with Different Qualifiers and Different Output Directories, Next: Using External Variables, Up: Examples of Project Files - - Common Sources with Different Qualifiers and Different Output Directories - ------------------------------------------------------------------------- - - * Menu: - - * Source Files:: - * Specifying the Object Directory:: - * Specifying the Exec Directory:: - * Project File Packages:: - * Specifying Qualifier Settings:: - * Main Subprograms:: - * Source File Naming Conventions:: - * Source Language(s):: - - Assume that the Ada source files `PACK.ADS', `PACK.ADB', and `PROC.ADB' - are in the `/common' directory. The file `PROC.ADB' contains an Ada - main subprogram `Proc' that "with"s package `Pack'. We want to compile - these source files under two sets of qualifiers: - * When debugging, we want to pass the `-g' qualifier to `GNAT MAKE', - and the `/CHECKS=ASSERTIONS', `/CHECKS=OVERFLOW', and - `/CHECKS=ELABORATION' qualifiers to the compiler; the compiler's - output is to appear in `/common/debug' - - * When preparing a release version, we want to pass the - `/OPTIMIZE=ALL' qualifier to the compiler; the compiler's output - is to appear in `/common/release' - - The GNAT project files shown below, respectively `debug.gpr' and - `release.gpr' in the `/common' directory, achieve these effects. - - Diagrammatically: - /common - debug.gpr - release.gpr - PACK.ADS - PACK.ADB - PROC.ADB - /common/debug {-g, /CHECKS=ASSERTIONS, /CHECKS=OVERFLOW, /CHECKS=ELABORATION} - PROC.ALI, PROC.OBJ - PACK.ALI, PACK.OBJ - /common/release {/OPTIMIZE=ALL} - PROC.ALI, PROC.OBJ - PACK.ALI, PACK.OBJ - Here are the project files: - project Debug is - for Object_Dir use "debug"; - for Main use ("proc"); - - package Builder is - for Default_Qualifiers ("Ada") use ("-g"); - end Builder; - - package Compiler is - for Default_Qualifiers ("Ada") - use ("-fstack-check", "/CHECKS=ASSERTIONS", "/CHECKS=OVERFLOW", "/CHECKS=ELABORATION"); - end Compiler; - end Debug; - - project Release is - for Object_Dir use "release"; - for Exec_Dir use "."; - for Main use ("proc"); - - package Compiler is - for Default_Qualifiers ("Ada") use ("/OPTIMIZE=ALL"); - end Compiler; - end Release; - - The name of the project defined by `debug.gpr' is `"Debug"' (case - insensitive), and analogously the project defined by `release.gpr' is - `"Release"'. For consistency the file should have the same name as the - project, and the project file's extension should be `"gpr"'. These - conventions are not required, but a warning is issued if they are not - followed. - - If the current directory is `/temp', then the command - GNAT MAKE -P/common/debug.gpr - - generates object and ALI files in `/common/debug', and the `proc' - executable also in `/common/debug', using the qualifier settings - defined in the project file. - - Likewise, the command - GNAT MAKE -P/common/release.gpr - - generates object and ALI files in `/common/release', and the `proc' - executable in `/common', using the qualifier settings from the project - file. - -  - File: gnat_ug_vms.info, Node: Source Files, Next: Specifying the Object Directory, Up: Common Sources with Different Qualifiers and Different Output Directories - - Source Files - ............ - - If a project file does not explicitly specify a set of source - directories or a set of source files, then by default the project's - source files are the Ada source files in the project file directory. - Thus `PACK.ADS', `PACK.ADB', and `PROC.ADB' are the source files for - both projects. - -  - File: gnat_ug_vms.info, Node: Specifying the Object Directory, Next: Specifying the Exec Directory, Prev: Source Files, Up: Common Sources with Different Qualifiers and Different Output Directories - - Specifying the Object Directory - ............................... - - Several project properties are modeled by Ada-style _attributes_; you - define the property by supplying the equivalent of an Ada attribute - definition clause in the project file. A project's object directory is - such a property; the corresponding attribute is `Object_Dir', and its - value is a string expression. A directory may be specified either as - absolute or as relative; in the latter case, it is relative to the - project file directory. Thus the compiler's output is directed to - `/common/debug' (for the `Debug' project) and to `/common/release' (for - the `Release' project). If `Object_Dir' is not specified, then the - default is the project file directory. - -  - File: gnat_ug_vms.info, Node: Specifying the Exec Directory, Next: Project File Packages, Prev: Specifying the Object Directory, Up: Common Sources with Different Qualifiers and Different Output Directories - - Specifying the Exec Directory - ............................. - - A project's exec directory is another property; the corresponding - attribute is `Exec_Dir', and its value is also a string expression, - either specified as relative or absolute. If `Exec_Dir' is not - specified, then the default is the object directory (which may also be - the project file directory if attribute `Object_Dir' is not specified). - Thus the executable is placed in `/common/debug' for the `Debug' - project (attribute `Exec_Dir' not specified) and in `/common' for the - `Release' project. - -  - File: gnat_ug_vms.info, Node: Project File Packages, Next: Specifying Qualifier Settings, Prev: Specifying the Exec Directory, Up: Common Sources with Different Qualifiers and Different Output Directories - - Project File Packages - ..................... - - A GNAT tool integrated with the Project Manager is modeled by a - corresponding package in the project file. The `Debug' project defines - the packages `Builder' (for `GNAT MAKE') and `Compiler'; the `Release' - project defines only the `Compiler' package. - - The Ada package syntax is not to be taken literally. Although - packages in project files bear a surface resemblance to packages in Ada - source code, the notation is simply a way to convey a grouping of - properties for a named entity. Indeed, the package names permitted in - project files are restricted to a predefined set, corresponding to the - project-aware tools, and the contents of packages are limited to a - small set of constructs. The packages in the example above contain - attribute definitions. - -  - File: gnat_ug_vms.info, Node: Specifying Qualifier Settings, Next: Main Subprograms, Prev: Project File Packages, Up: Common Sources with Different Qualifiers and Different Output Directories - - Specifying Qualifier Settings - ............................. - - Qualifier settings for a project-aware tool can be specified through - attributes in the package corresponding to the tool. The example above - illustrates one of the relevant attributes, `Default_Qualifiers', - defined in the packages in both project files. Unlike simple - attributes like `Source_Dirs', `Default_Qualifiers' is known as an - _associative array_. When you define this attribute, you must supply - an "index" (a literal string), and the effect of the attribute - definition is to set the value of the "array" at the specified "index". - For the `Default_Qualifiers' attribute, the index is a programming - language (in our case, Ada) , and the value specified (after `use') - must be a list of string expressions. - - The attributes permitted in project files are restricted to a - predefined set. Some may appear at project level, others in packages. - For any attribute that is an associate array, the index must always be a - literal string, but the restrictions on this string (e.g., a file name - or a language name) depend on the individual attribute. Also depending - on the attribute, its specified value will need to be either a string - or a string list. - - In the `Debug' project, we set the qualifiers for two tools, `GNAT - MAKE' and the compiler, and thus we include corresponding packages, - with each package defining the `Default_Qualifiers' attribute with - index `"Ada"'. Note that the package corresponding to `GNAT MAKE' is - named `Builder'. The `Release' project is similar, but with just the - `Compiler' package. - - In project `Debug' above the qualifiers starting with `-gnat' that - are specified in package `Compiler' could have been placed in package - `Builder', since `GNAT MAKE' transmits all such qualifiers to the - compiler. - -  - File: gnat_ug_vms.info, Node: Main Subprograms, Next: Source File Naming Conventions, Prev: Specifying Qualifier Settings, Up: Common Sources with Different Qualifiers and Different Output Directories - - Main Subprograms - ................ - - One of the properties of a project is its list of main subprograms - (actually a list of names of source files containing main subprograms, - with the file extension optional. This property is captured in the - `Main' attribute, whose value is a list of strings. If a project - defines the `Main' attribute, then you do not need to identify the main - subprogram(s) when invoking `GNAT MAKE' (see *Note GNAT MAKE and - Project Files::). - -  - File: gnat_ug_vms.info, Node: Source File Naming Conventions, Next: Source Language(s), Prev: Main Subprograms, Up: Common Sources with Different Qualifiers and Different Output Directories - - Source File Naming Conventions - .............................. - - Since the project files do not specify any source file naming - conventions, the GNAT defaults are used. The mechanism for defining - source file naming conventions - a package named `Naming' - will be - described below (*note Naming Schemes::). - -  - File: gnat_ug_vms.info, Node: Source Language(s), Prev: Source File Naming Conventions, Up: Common Sources with Different Qualifiers and Different Output Directories - - Source Language(s) - .................. - - Since the project files do not specify a `Languages' attribute, by - default the GNAT tools assume that the language of the project file is - Ada. More generally, a project can comprise source files in Ada, C, - and/or other languages. - -  - File: gnat_ug_vms.info, Node: Using External Variables, Next: Importing Other Projects, Prev: Common Sources with Different Qualifiers and Different Output Directories, Up: Examples of Project Files - - Using External Variables - ------------------------ - - Instead of supplying different project files for debug and release, we - can define a single project file that queries an external variable (set - either on the command line or via an environment variable) in order to - conditionally define the appropriate settings. Again, assume that the - source files `PACK.ADS', `PACK.ADB', and `PROC.ADB' are located in - directory `/common'. The following project file, `build.gpr', queries - the external variable named `STYLE' and defines an object directory and - qualifier settings based on whether the value is `"deb"' (debug) or - `"rel"' (release), where the default is `"deb"'. - - project Build is - for Main use ("proc"); - - type Style_Type is ("deb", "rel"); - Style : Style_Type := external ("STYLE", "deb"); - - case Style is - when "deb" => - for Object_Dir use "debug"; - - when "rel" => - for Object_Dir use "release"; - for Exec_Dir use "."; - end case; - - package Builder is - - case Style is - when "deb" => - for Default_Qualifiers ("Ada") use ("-g"); - end case; - - end Builder; - - package Compiler is - - case Style is - when "deb" => - for Default_Qualifiers ("Ada") use ("/CHECKS=ASSERTIONS", "/CHECKS=OVERFLOW", "/CHECKS=ELABORATION"); - - when "rel" => - for Default_Qualifiers ("Ada") use ("/OPTIMIZE=ALL"); - end case; - - end Compiler; - - end Build; - - `Style_Type' is an example of a _string type_, which is the project - file analog of an Ada enumeration type but containing string literals - rather than identifiers. `Style' is declared as a variable of this - type. - - The form `external("STYLE", "deb")' is known as an _external - reference_; its first argument is the name of an _external variable_, - and the second argument is a default value to be used if the external - variable doesn't exist. You can define an external variable on the - command line via the `-X' qualifier, or you can use an environment - variable as an external variable. - - Each `case' construct is expanded by the Project Manager based on the - value of `Style'. Thus the command - GNAT MAKE -P/common/build.gpr -XSTYLE=deb - - is equivalent to the `GNAT MAKE' invocation using the project file - `debug.gpr' in the earlier example. So is the command - GNAT MAKE -P/common/build.gpr - - since `"deb"' is the default for `STYLE'. - - Analogously, - GNAT MAKE -P/common/build.gpr -XSTYLE=rel - - is equivalent to the `GNAT MAKE' invocation using the project file - `release.gpr' in the earlier example. - -  - File: gnat_ug_vms.info, Node: Importing Other Projects, Next: Extending a Project, Prev: Using External Variables, Up: Examples of Project Files - - Importing Other Projects - ------------------------ - - A compilation unit in a source file in one project may depend on - compilation units in source files in other projects. To obtain this - behavior, the dependent project must _import_ the projects containing - the needed source files. This effect is embodied in syntax similar to - an Ada `with' clause, but the "with"ed entities are strings denoting - project files. - - As an example, suppose that the two projects `GUI_Proj' and - `Comm_Proj' are defined in the project files `gui_proj.gpr' and - `comm_proj.gpr' in directories `/gui' and `/comm', respectively. - Assume that the source files for `GUI_Proj' are `GUI.ADS' and - `GUI.ADB', and that the source files for `Comm_Proj' are `COMM.ADS' and - `COMM.ADB', with each set of files located in its respective project - file directory. Diagrammatically: - - /gui - gui_proj.gpr - GUI.ADS - GUI.ADB - - /comm - comm_proj.gpr - COMM.ADS - COMM.ADB - - We want to develop an application in directory `/app' that "with"s the - packages `GUI' and `Comm', using the properties of the corresponding - project files (e.g. the qualifier settings and object directory). - Skeletal code for a main procedure might be something like the - following: - - with GUI, Comm; - procedure App_Main is - ... - begin - ... - end App_Main; - - Here is a project file, `app_proj.gpr', that achieves the desired - effect: - - with "/gui/gui_proj", "/comm/comm_proj"; - project App_Proj is - for Main use ("app_main"); - end App_Proj; - - Building an executable is achieved through the command: - GNAT MAKE -P/app/app_proj - - which will generate the `app_main' executable in the directory where - `app_proj.gpr' resides. - - If an imported project file uses the standard extension (`gpr') then - (as illustrated above) the `with' clause can omit the extension. - - Our example specified an absolute path for each imported project - file. Alternatively, you can omit the directory if either - * The imported project file is in the same directory as the - importing project file, or - - * You have defined an environment variable `ADA_PROJECT_PATH' that - includes the directory containing the needed project file. - - Thus, if we define `ADA_PROJECT_PATH' to include `/gui' and `/comm', - then our project file `app_proj.gpr' could be written as follows: - - with "gui_proj", "comm_proj"; - project App_Proj is - for Main use ("app_main"); - end App_Proj; - - Importing other projects raises the possibility of ambiguities. For - example, the same unit might be present in different imported projects, - or it might be present in both the importing project and an imported - project. Both of these conditions are errors. Note that in the - current version of the Project Manager, it is illegal to have an - ambiguous unit even if the unit is never referenced by the importing - project. This restriction may be relaxed in a future release. - -  - File: gnat_ug_vms.info, Node: Extending a Project, Prev: Importing Other Projects, Up: Examples of Project Files - - Extending a Project - ------------------- - - A common situation in large software systems is to have multiple - implementations for a common interface; in Ada terms, multiple versions - of a package body for the same specification. For example, one - implementation might be safe for use in tasking programs, while another - might only be used in sequential applications. This can be modeled in - GNAT using the concept of _project extension_. If one project (the - "child") _extends_ another project (the "parent") then by default all - source files of the parent project are inherited by the child, but the - child project can override any of the parent's source files with new - versions, and can also add new files. This facility is the project - analog of extension in Object-Oriented Programming. Project - hierarchies are permitted (a child project may be the parent of yet - another project), and a project that inherits one project can also - import other projects. - - As an example, suppose that directory `/seq' contains the project - file `seq_proj.gpr' and the source files `PACK.ADS', `PACK.ADB', and - `PROC.ADB': - - /seq - PACK.ADS - PACK.ADB - PROC.ADB - seq_proj.gpr - - Note that the project file can simply be empty (that is, no attribute or - package is defined): - - project Seq_Proj is - end Seq_Proj; - - implying that its source files are all the Ada source files in the - project directory. - - Suppose we want to supply an alternate version of `PACK.ADB', in - directory `/tasking', but use the existing versions of `PACK.ADS' and - `PROC.ADB'. We can define a project `Tasking_Proj' that inherits - `Seq_Proj': - - /tasking - PACK.ADB - tasking_proj.gpr - - project Tasking_Proj extends "/seq/seq_proj" is - end Tasking_Proj; - - The version of `PACK.ADB' used in a build depends on which project file - is specified. - - Note that we could have designed this using project import rather - than project inheritance; a `base' project would contain the sources for - `PACK.ADS' and `PROC.ADB', a sequential project would import `base' and - add `PACK.ADB', and likewise a tasking project would import `base' and - add a different version of `PACK.ADB'. The choice depends on whether - other sources in the original project need to be overridden. If they - do, then project extension is necessary, otherwise, importing is - sufficient. - -  - File: gnat_ug_vms.info, Node: Project File Syntax, Next: Objects and Sources in Project Files, Prev: Examples of Project Files, Up: GNAT Project Manager - - Project File Syntax - =================== - - * Menu: - - * Basic Syntax:: - * Packages:: - * Expressions:: - * String Types:: - * Variables:: - * Attributes:: - * Associative Array Attributes:: - * case Constructions:: - - This section describes the structure of project files. - - A project may be an _independent project_, entirely defined by a - single project file. Any Ada source file in an independent project - depends only on the predefined library and other Ada source files in - the same project. - - A project may also "depend on" other projects, in either or both of the - following ways: - * It may import any number of projects - - * It may extend at most one other project - - The dependence relation is a directed acyclic graph (the subgraph - reflecting the "extends" relation is a tree). - - A project's "immediate sources" are the source files directly - defined by that project, either implicitly by residing in the project - file's directory, or explicitly through any of the source-related - attributes described below. More generally, a project PROJ's "sources" - are the immediate sources of PROJ together with the immediate sources - (unless overridden) of any project on which PROJ depends (either - directly or indirectly). - -  - File: gnat_ug_vms.info, Node: Basic Syntax, Next: Packages, Up: Project File Syntax - - Basic Syntax - ------------ - - As seen in the earlier examples, project files have an Ada-like syntax. - The minimal project file is: - project Empty is - - end Empty; - - The identifier `Empty' is the name of the project. This project name - must be present after the reserved word `end' at the end of the project - file, followed by a semi-colon. - - Any name in a project file, such as the project name or a variable - name, has the same syntax as an Ada identifier. - - The reserved words of project files are the Ada reserved words plus - `extends', `external', and `project'. Note that the only Ada reserved - words currently used in project file syntax are: - - * `case' - - * `end' - - * `for' - - * `is' - - * `others' - - * `package' - - * `renames' - - * `type' - - * `use' - - * `when' - - * `with' - - Comments in project files have the same syntax as in Ada, two - consecutives hyphens through the end of the line. - -  - File: gnat_ug_vms.info, Node: Packages, Next: Expressions, Prev: Basic Syntax, Up: Project File Syntax - - Packages - -------- - - A project file may contain _packages_. The name of a package must be one - of the identifiers (case insensitive) from a predefined list, and a - package with a given name may only appear once in a project file. The - predefined list includes the following packages: - - * `Naming' - - * `Builder' - - * `Compiler' - - * `Binder' - - * `Linker' - - * `Finder' - - * `Cross_Reference' - - * `GNAT LIST' - - (The complete list of the package names and their attributes can be - found in file `PRJ-ATTR.ADB'). - - In its simplest form, a package may be empty: - - project Simple is - package Builder is - end Builder; - end Simple; - - A package may contain _attribute declarations_, _variable declarations_ - and _case constructions_, as will be described below. - - When there is ambiguity between a project name and a package name, - the name always designates the project. To avoid possible confusion, it - is always a good idea to avoid naming a project with one of the names - allowed for packages or any name that starts with `gnat'. - -  - File: gnat_ug_vms.info, Node: Expressions, Next: String Types, Prev: Packages, Up: Project File Syntax - - Expressions - ----------- - - An _expression_ is either a _string expression_ or a _string list - expression_. - - A _string expression_ is either a _simple string expression_ or a - _compound string expression_. - - A _simple string expression_ is one of the following: - * A literal string; e.g.`"comm/my_proj.gpr"' - - * A string-valued variable reference (see *Note Variables::) - - * A string-valued attribute reference (see *Note Attributes::) - - * An external reference (see *Note External References in Project - Files::) - - A _compound string expression_ is a concatenation of string expressions, - using `"&"' - Path & "/" & File_Name & ".ADS" - - A _string list expression_ is either a _simple string list expression_ - or a _compound string list expression_. - - A _simple string list expression_ is one of the following: - * A parenthesized list of zero or more string expressions, separated - by commas - File_Names := (File_Name, "GNAT.ADC", File_Name & ".orig"); - Empty_List := (); - - * A string list-valued variable reference - - * A string list-valued attribute reference - - A _compound string list expression_ is the concatenation (using `"&"') - of a simple string list expression and an expression. Note that each - term in a compound string list expression, except the first, may be - either a string expression or a string list expression. - - File_Name_List := () & File_Name; -- One string in this list - Extended_File_Name_List := File_Name_List & (File_Name & ".orig"); - -- Two strings - Big_List := File_Name_List & Extended_File_Name_List; - -- Concatenation of two string lists: three strings - Illegal_List := "GNAT.ADC" & Extended_File_Name_List; - -- Illegal: must start with a string list - -  - File: gnat_ug_vms.info, Node: String Types, Next: Variables, Prev: Expressions, Up: Project File Syntax - - String Types - ------------ - - The value of a variable may be restricted to a list of string literals. - The restricted list of string literals is given in a _string type - declaration_. - - Here is an example of a string type declaration: - - type OS is ("NT, "nt", "Unix", "Linux", "other OS"); - - Variables of a string type are called _typed variables_; all other - variables are called _untyped variables_. Typed variables are - particularly useful in `case' constructions (see *Note case - Constructions::). - - A string type declaration starts with the reserved word `type', - followed by the name of the string type (case-insensitive), followed by - the reserved word `is', followed by a parenthesized list of one or more - string literals separated by commas, followed by a semicolon. - - The string literals in the list are case sensitive and must all be - different. They may include any graphic characters allowed in Ada, - including spaces. - - A string type may only be declared at the project level, not inside - a package. - - A string type may be referenced by its name if it has been declared - in the same project file, or by its project name, followed by a dot, - followed by the string type name. - -  - File: gnat_ug_vms.info, Node: Variables, Next: Attributes, Prev: String Types, Up: Project File Syntax - - Variables - --------- - - A variable may be declared at the project file level, or in a package. - Here are some examples of variable declarations: - - This_OS : OS := external ("OS"); -- a typed variable declaration - That_OS := "Linux"; -- an untyped variable declaration - - A _typed variable declaration_ includes the variable name, followed by - a colon, followed by the name of a string type, followed by `:=', - followed by a simple string expression. - - An _untyped variable declaration_ includes the variable name, - followed by `:=', followed by an expression. Note that, despite the - terminology, this form of "declaration" resembles more an assignment - than a declaration in Ada. It is a declaration in several senses: - * The variable name does not need to be defined previously - - * The declaration establishes the _kind_ (string versus string list) - of the variable, and later declarations of the same variable need - to be consistent with this - - A string variable declaration (typed or untyped) declares a variable - whose value is a string. This variable may be used as a string - expression. - File_Name := "readme.txt"; - Saved_File_Name := File_Name & ".saved"; - - A string list variable declaration declares a variable whose value is a - list of strings. The list may contain any number (zero or more) of - strings. - - Empty_List := (); - List_With_One_Element := ("/STYLE="); - List_With_Two_Elements := List_With_One_Element & "/STYLE=GNAT"; - Long_List := ("MAIN.ADA", "PACK1_.ADA", "PACK1.ADA", "PACK2_.ADA" - "PACK2.ADA", "UTIL_.ADA", "UTIL.ADA"); - - The same typed variable may not be declared more than once at project - level, and it may not be declared more than once in any package; it is - in effect a constant or a readonly variable. - - The same untyped variable may be declared several times. In this - case, the new value replaces the old one, and any subsequent reference - to the variable uses the new value. However, as noted above, if a - variable has been declared as a string, all subsequent declarations - must give it a string value. Similarly, if a variable has been declared - as a string list, all subsequent declarations must give it a string - list value. - - A _variable reference_ may take several forms: - - * The simple variable name, for a variable in the current package - (if any) or in the current project - - * A context name, followed by a dot, followed by the variable name. - - A _context_ may be one of the following: - - * The name of an existing package in the current project - - * The name of an imported project of the current project - - * The name of an ancestor project (i.e., a project extended by the - current project, either directly or indirectly) - - * An imported/parent project name, followed by a dot, followed by a - package name - - A variable reference may be used in an expression. - -  - File: gnat_ug_vms.info, Node: Attributes, Next: Associative Array Attributes, Prev: Variables, Up: Project File Syntax - - Attributes - ---------- - - A project (and its packages) may have _attributes_ that define the - project's properties. Some attributes have values that are strings; - others have values that are string lists. - - There are two categories of attributes: _simple attributes_ and - _associative arrays_ (see *Note Associative Array Attributes::). - - The names of the attributes are restricted; there is a list of - project attributes, and a list of package attributes for each package. - The names are not case sensitive. - - The project attributes are as follows (all are simple attributes): - - _Attribute Name_ _Value_ - `Source_Files' string list - `Source_Dirs' string list - `Source_List_File' string - `Object_Dir' string - `Exec_Dir' string - `Main' string list - `Languages' string list - `Library_Dir' string - `Library_Name' string - `Library_Kind' string - `Library_Elaboration' string - `Library_Version' string - - The attributes for package `Naming' are as follows (see *Note Naming - Schemes::): - - Attribute Name Category Index Value - `Specification_Suffix' associative language name string - array - `Implementation_Suffix' associative language name string - array - `Separate_Suffix' simple n/a string - attribute - `Casing' simple n/a string - attribute - `Dot_Replacement' simple n/a string - attribute - `Specification' associative Ada unit name string - array - `Implementation' associative Ada unit name string - array - `Specification_Exceptions' associative language name string list - array - `Implementation_Exceptions' associative language name string list - array - - The attributes for package `Builder', `Compiler', `Binder', `Linker', - `Cross_Reference', and `Finder' are as follows (see *Note Qualifiers - and Project Files::). - - Attribute Name Category Index Value - `Default_Qualifiers' associative language name string list - array - `Qualifiers' associative file name string list - array - - In addition, package `Builder' has a single string attribute - `Local_Configuration_Pragmas' and package `Builder' has a single string - attribute `Global_Configuration_Pragmas'. - - The attribute for package `Glide' are not documented: they are for - internal use only. - - Each simple attribute has a default value: the empty string (for - string-valued attributes) and the empty list (for string list-valued - attributes). - - Similar to variable declarations, an attribute declaration defines a - new value for an attribute. - - Examples of simple attribute declarations: - - for Object_Dir use "objects"; - for Source_Dirs use ("units", "test/drivers"); - - A "simple attribute declaration" starts with the reserved word `for', - followed by the name of the attribute, followed by the reserved word - `use', followed by an expression (whose kind depends on the attribute), - followed by a semicolon. - - Attributes may be referenced in expressions. The general form for - such a reference is `'': the entity for which the - attribute is defined, followed by an apostrophe, followed by the name - of the attribute. For associative array attributes, a litteral string - between parentheses need to be supplied as index. - - Examples are: - - project'Object_Dir - Naming'Dot_Replacement - Imported_Project'Source_Dirs - Imported_Project.Naming'Casing - Builder'Default_Qualifiers("Ada") - - The entity may be: - * `project' for an attribute of the current project - - * The name of an existing package of the current project - - * The name of an imported project - - * The name of a parent project (extended by the current project) - - * An imported/parent project name, followed by a dot, followed - by a package name - - Example: - project Prj is - for Source_Dirs use project'Source_Dirs & "units"; - for Source_Dirs use project'Source_Dirs & "test/drivers" - end Prj; - - In the first attribute declaration, initially the attribute - `Source_Dirs' has the default value: an empty string list. After this - declaration, `Source_Dirs' is a string list of one element: "units". - After the second attribute declaration `Source_Dirs' is a string list of - two elements: "units" and "test/drivers". - - Note: this example is for illustration only. In practice, the - project file would contain only one attribute declaration: - - for Source_Dirs use ("units", "test/drivers"); - -  - File: gnat_ug_vms.info, Node: Associative Array Attributes, Next: case Constructions, Prev: Attributes, Up: Project File Syntax - - Associative Array Attributes - ---------------------------- - - Some attributes are defined as _associative arrays_. An associative - array may be regarded as a function that takes a string as a parameter - and delivers a string or string list value as its result. - - Here are some examples of associative array attribute declarations: - - for Implementation ("main") use "MAIN.ADA"; - for Qualifiers ("MAIN.ADA") use ("-v", "/REPORT_ERRORS=VERBOSE"); - for Qualifiers ("MAIN.ADA") use Builder'Qualifiers ("MAIN.ADA") & "-g"; - - Like untyped variables and simple attributes, associative array - attributes may be declared several times. Each declaration supplies a - new value for the attribute, replacing the previous setting. - -  - File: gnat_ug_vms.info, Node: case Constructions, Prev: Associative Array Attributes, Up: Project File Syntax - - `case' Constructions - -------------------- - - A `case' construction is used in a project file to effect conditional - behavior. Here is a typical example: - - project MyProj is - type OS_Type is ("Linux", "Unix", "NT", "VMS"); - - OS : OS_Type := external ("OS", "Linux"); - - package Compiler is - case OS is - when "Linux" | "Unix" => - for Default_Qualifiers ("Ada") use ("-gnath"); - when "NT" => - for Default_Qualifiers ("Ada") use ("/POLLING_ENABLE"); - when others => - end case; - end Compiler; - end MyProj; - - The syntax of a `case' construction is based on the Ada case statement - (although there is no `null' construction for empty alternatives). - - Following the reserved word `case' there is the case variable (a - typed string variable), the reserved word `is', and then a sequence of - one or more alternatives. Each alternative comprises the reserved word - `when', either a list of literal strings separated by the `"|"' - character or the reserved word `others', and the `"=>"' token. Each - literal string must belong to the string type that is the type of the - case variable. An `others' alternative, if present, must occur last. - The `end case;' sequence terminates the case construction. - - After each `=>', there are zero or more constructions. The only - constructions allowed in a case construction are other case - constructions and attribute declarations. String type declarations, - variable declarations and package declarations are not allowed. - - The value of the case variable is often given by an external - reference (see *Note External References in Project Files::). - -  - File: gnat_ug_vms.info, Node: Objects and Sources in Project Files, Next: Importing Projects, Prev: Project File Syntax, Up: GNAT Project Manager - - Objects and Sources in Project Files - ==================================== - - * Menu: - - * Object Directory:: - * Exec Directory:: - * Source Directories:: - * Source File Names:: - - Each project has exactly one object directory and one or more source - directories. The source directories must contain at least one source - file, unless the project file explicitly specifies that no source - files are present (see *Note Source File Names::). - -  - File: gnat_ug_vms.info, Node: Object Directory, Next: Exec Directory, Up: Objects and Sources in Project Files - - Object Directory - ---------------- - - The object directory for a project is the directory containing the - compiler's output (such as `ALI' files and object files) for the - project's immediate sources. Note that for inherited sources (when - extending a parent project) the parent project's object directory is - used. - - The object directory is given by the value of the attribute - `Object_Dir' in the project file. - - for Object_Dir use "objects"; - - The attribute OBJECT_DIR has a string value, the path name of the object - directory. The path name may be absolute or relative to the directory - of the project file. This directory must already exist, and be readable - and writable. - - By default, when the attribute `Object_Dir' is not given an explicit - value or when its value is the empty string, the object directory is - the same as the directory containing the project file. - -  - File: gnat_ug_vms.info, Node: Exec Directory, Next: Source Directories, Prev: Object Directory, Up: Objects and Sources in Project Files - - Exec Directory - -------------- - - The exec directory for a project is the directory containing the - executables for the project's main subprograms. - - The exec directory is given by the value of the attribute `Exec_Dir' - in the project file. - - for Exec_Dir use "executables"; - - The attribute EXEC_DIR has a string value, the path name of the exec - directory. The path name may be absolute or relative to the directory - of the project file. This directory must already exist, and be writable. - - By default, when the attribute `Exec_Dir' is not given an explicit - value or when its value is the empty string, the exec directory is the - same as the object directory of the project file. - -  - File: gnat_ug_vms.info, Node: Source Directories, Next: Source File Names, Prev: Exec Directory, Up: Objects and Sources in Project Files - - Source Directories - ------------------ - - The source directories of a project are specified by the project file - attribute `Source_Dirs'. - - This attribute's value is a string list. If the attribute is not - given an explicit value, then there is only one source directory, the - one where the project file resides. - - A `Source_Dirs' attribute that is explicitly defined to be the empty - list, as in - - for Source_Dirs use (); - - indicates that the project contains no source files. - - Otherwise, each string in the string list designates one or more - source directories. - - for Source_Dirs use ("sources", "test/drivers"); - - If a string in the list ends with `"/**"', then the directory whose - path name precedes the two asterisks, as well as all its subdirectories - (recursively), are source directories. - - for Source_Dirs use ("/system/sources/**"); - - Here the directory `/system/sources' and all of its subdirectories - (recursively) are source directories. - - To specify that the source directories are the directory of the - project file and all of its subdirectories, you can declare - `Source_Dirs' as follows: - for Source_Dirs use ("./**"); - - Each of the source directories must exist and be readable. - -  - File: gnat_ug_vms.info, Node: Source File Names, Prev: Source Directories, Up: Objects and Sources in Project Files - - Source File Names - ----------------- - - In a project that contains source files, their names may be specified - by the attributes `Source_Files' (a string list) or `Source_List_File' - (a string). Source file names never include any directory information. - - If the attribute `Source_Files' is given an explicit value, then each - element of the list is a source file name. - - for Source_Files use ("MAIN.ADB"); - for Source_Files use ("MAIN.ADB", "PACK1.ADS", "PACK2.ADB"); - - If the attribute `Source_Files' is not given an explicit value, but the - attribute `Source_List_File' is given a string value, then the source - file names are contained in the text file whose path name (absolute or - relative to the directory of the project file) is the value of the - attribute `Source_List_File'. - - Each line in the file that is not empty or is not a comment contains - a source file name. A comment line starts with two hyphens. - - for Source_List_File use "source_list.txt"; - - By default, if neither the attribute `Source_Files' nor the attribute - `Source_List_File' is given an explicit value, then each file in the - source directories that conforms to the project's naming scheme (see - *Note Naming Schemes::) is an immediate source of the project. - - A warning is issued if both attributes `Source_Files' and - `Source_List_File' are given explicit values. In this case, the - attribute `Source_Files' prevails. - - Each source file name must be the name of one and only one existing - source file in one of the source directories. - - A `Source_Files' attribute defined with an empty list as its value - indicates that there are no source files in the project. - - Except for projects that are clearly specified as containing no Ada - source files (`Source_Dirs' or `Source_Files' specified as an empty - list, or `Languages' specified without `"Ada"' in the list) - for Source_Dirs use (); - for Source_Files use (); - for Languages use ("C", "C++"); - - a project must contain at least one immediate source. - - Projects with no source files are useful as template packages (see - *Note Packages in Project Files::) for other projects; in particular to - define a package `Naming' (see *Note Naming Schemes::). - -  - File: gnat_ug_vms.info, Node: Importing Projects, Next: Project Extension, Prev: Objects and Sources in Project Files, Up: GNAT Project Manager - - Importing Projects - ================== - - An immediate source of a project P may depend on source files that are - neither immediate sources of P nor in the predefined library. To get - this effect, P must _import_ the projects that contain the needed - source files. - - with "project1", "utilities.gpr"; - with "/namings/apex.gpr"; - project Main is - ... - - As can be seen in this example, the syntax for importing projects is - similar to the syntax for importing compilation units in Ada. However, - project files use literal strings instead of names, and the `with' - clause identifies project files rather than packages. - - Each literal string is the file name or path name (absolute or - relative) of a project file. If a string is simply a file name, with no - path, then its location is determined by the _project path_: - - * If the environment variable `ADA_PROJECT_PATH' exists, then the - project path includes all the directories in this environment - variable, plus the directory of the project file. - - * If the environment variable `ADA_PROJECT_PATH' does not exist, - then the project path contains only one directory, namely the one - where the project file is located. - - If a relative pathname is used as in - - with "tests/proj"; - - then the path is relative to the directory where the importing project - file is located. Any symbolic link will be fully resolved in the - directory of the importing project file before the imported project - file is looked up. - - When the `with''ed project file name does not have an extension, the - default is `.gpr'. If a file with this extension is not found, then the - file name as specified in the `with' clause (no extension) will be - used. In the above example, if a file `project1.gpr' is found, then it - will be used; otherwise, if a file `project1' exists then it will be - used; if neither file exists, this is an error. - - A warning is issued if the name of the project file does not match - the name of the project; this check is case insensitive. - - Any source file that is an immediate source of the imported project - can be used by the immediate sources of the importing project, and - recursively. Thus if `A' imports `B', and `B' imports `C', the immediate - sources of `A' may depend on the immediate sources of `C', even if `A' - does not import `C' explicitly. However, this is not recommended, - because if and when `B' ceases to import `C', some sources in `A' will - no longer compile. - - A side effect of this capability is that cyclic dependences are not - permitted: if `A' imports `B' (directly or indirectly) then `B' is not - allowed to import `A'. - -  - File: gnat_ug_vms.info, Node: Project Extension, Next: External References in Project Files, Prev: Importing Projects, Up: GNAT Project Manager - - Project Extension - ================= - - During development of a large system, it is sometimes necessary to use - modified versions of some of the source files without changing the - original sources. This can be achieved through a facility known as - _project extension_. - - project Modified_Utilities extends "/baseline/utilities.gpr" is ... - - The project file for the project being extended (the _parent_) is - identified by the literal string that follows the reserved word - `extends', which itself follows the name of the extending project (the - _child_). - - By default, a child project inherits all the sources of its parent. - However, inherited sources can be overridden: a unit with the same name - as one in the parent will hide the original unit. Inherited sources - are considered to be sources (but not immediate sources) of the child - project; see *Note Project File Syntax::. - - An inherited source file retains any qualifiers specified in the - parent project. - - For example if the project `Utilities' contains the specification - and the body of an Ada package `Util_IO', then the project - `Modified_Utilities' can contain a new body for package `Util_IO'. The - original body of `Util_IO' will not be considered in program builds. - However, the package specification will still be found in the project - `Utilities'. - - A child project can have only one parent but it may import any - number of other projects. - - A project is not allowed to import directly or indirectly at the - same time a child project and any of its ancestors. - -  - File: gnat_ug_vms.info, Node: External References in Project Files, Next: Packages in Project Files, Prev: Project Extension, Up: GNAT Project Manager - - External References in Project Files - ==================================== - - A project file may contain references to external variables; such - references are called _external references_. - - An external variable is either defined as part of the environment (an - environment variable in Unix, for example) or else specified on the - command line via the `-X_vbl_=_value_' qualifier. If both, then the - command line value is used. - - An external reference is denoted by the built-in function - `external', which returns a string value. This function has two forms: - * `external (external_variable_name)' - - * `external (external_variable_name, default_value)' - - Each parameter must be a string literal. For example: - - external ("USER") - external ("OS", "Linux") - - In the form with one parameter, the function returns the value of the - external variable given as parameter. If this name is not present in the - environment, then the returned value is an empty string. - - In the form with two string parameters, the second parameter is the - value returned when the variable given as the first parameter is not - present in the environment. In the example above, if `"OS"' is not the - name of an environment variable and is not passed on the command line, - then the returned value will be `"Linux"'. - - An external reference may be part of a string expression or of a - string list expression, to define variables or attributes. - - type Mode_Type is ("Debug", "Release"); - Mode : Mode_Type := external ("MODE"); - case Mode is - when "Debug" => - ... - -  - File: gnat_ug_vms.info, Node: Packages in Project Files, Next: Variables from Imported Projects, Prev: External References in Project Files, Up: GNAT Project Manager - - Packages in Project Files - ========================= - - The _package_ is the project file feature that defines the settings for - project-aware tools. For each such tool you can declare a - corresponding package; the names for these packages are preset (see - *Note Packages::) but are not case sensitive. A package may contain - variable declarations, attribute declarations, and case constructions. - - project Proj is - package Builder is -- used by GNAT MAKE - for Default_Qualifiers ("Ada") use ("-v", "-g"); - end Builder; - end Proj; - - A package declaration starts with the reserved word `package', followed - by the package name (case insensitive), followed by the reserved word - `is'. It ends with the reserved word `end', followed by the package - name, finally followed by a semi-colon. - - Most of the packages have an attribute `Default_Qualifiers'. This - attribute is an associative array, and its value is a string list. The - index of the associative array is the name of a programming language - (case insensitive). This attribute indicates the qualifier or - qualifiers to be used with the corresponding tool. - - Some packages also have another attribute, `Qualifiers', an - associative array whose value is a string list. The index is the name - of a source file. This attribute indicates the qualifier or qualifiers - to be used by the corresponding tool when dealing with this specific - file. - - Further information on these qualifier-related attributes is found in - *Note Qualifiers and Project Files::. - - A package may be declared as a _renaming_ of another package; e.g., - from the project file for an imported project. - - with "/global/apex.gpr"; - project Example is - package Naming renames Apex.Naming; - ... - end Example; - - Packages that are renamed in other project files often come from - project files that have no sources: they are just used as templates. - Any modification in the template will be reflected automatically in all - the project files that rename a package from the template. - - In addition to the tool-oriented packages, you can also declare a - package named `Naming' to establish specialized source file naming - conventions (see *Note Naming Schemes::). - -  - File: gnat_ug_vms.info, Node: Variables from Imported Projects, Next: Naming Schemes, Prev: Packages in Project Files, Up: GNAT Project Manager - - Variables from Imported Projects - ================================ - - An attribute or variable defined in an imported or parent project can - be used in expressions in the importing / extending project. Such an - attribute or variable is prefixed with the name of the project and (if - relevant) the name of package where it is defined. - - with "imported"; - project Main extends "base" is - Var1 := Imported.Var; - Var2 := Base.Var & ".new"; - - package Builder is - for Default_Qualifiers ("Ada") use Imported.Builder.Ada_Qualifiers & - "/STYLE=GNAT" & "-v"; - end Builder; - - package Compiler is - for Default_Qualifiers ("Ada") use Base.Compiler.Ada_Qualifiers; - end Compiler; - end Main; - - In this example: - - * `Var1' is a copy of the variable `Var' defined in the project file - `"imported.gpr"' - - * the value of `Var2' is a copy of the value of variable `Var' - defined in the project file `base.gpr', concatenated with `".new"' - - * attribute `Default_Qualifiers ("Ada")' in package `Builder' is a - string list that includes in its value a copy of variable - `Ada_Qualifiers' defined in the `Builder' package in project file - `imported.gpr' plus two new elements: `"/STYLE=GNAT"' and `"-v"'; - - * attribute `Default_Qualifiers ("Ada")' in package `Compiler' is a - copy of the variable `Ada_Qualifiers' defined in the `Compiler' - package in project file `base.gpr', the project being extended. - -  - File: gnat_ug_vms.info, Node: Naming Schemes, Next: Library Projects, Prev: Variables from Imported Projects, Up: GNAT Project Manager - - Naming Schemes - ============== - - Sometimes an Ada software system is ported from a foreign compilation - environment to GNAT, with file names that do not use the default GNAT - conventions. Instead of changing all the file names (which for a - variety of reasons might not be possible), you can define the relevant - file naming scheme in the `Naming' package in your project file. For - example, the following package models the Apex file naming rules: - - package Naming is - for Casing use "lowercase"; - for Dot_Replacement use "."; - for Specification_Suffix ("Ada") use ".1.ADA"; - for Implementation_Suffix ("Ada") use ".2.ADA"; - end Naming; - - You can define the following attributes in package `Naming': - - `CASING' - This must be a string with one of the three values `"lowercase"', - `"uppercase"' or `"mixedcase"'; these strings are case insensitive. - - If CASING is not specified, then the default is `"lowercase"'. - - `DOT_REPLACEMENT' - This must be a string whose value satisfies the following - conditions: - - * It must not be empty - - * It cannot start or end with an alphanumeric character - - * It cannot be a single underscore - - * It cannot start with an underscore followed by an alphanumeric - - * It cannot contain a dot `'.'' except if it the entire string - is `"."' - - If `Dot_Replacement' is not specified, then the default is `"-"'. - - `SPECIFICATION_SUFFIX' - This is an associative array (indexed by the programming language - name, case insensitive) whose value is a string that must satisfy - the following conditions: - - * It must not be empty - - * It cannot start with an alphanumeric character - - * It cannot start with an underscore followed by an - alphanumeric character - - If `Specification_Suffix ("Ada")' is not specified, then the - default is `".ADS"'. - - `IMPLEMENTATION_SUFFIX' - This is an associative array (indexed by the programming language - name, case insensitive) whose value is a string that must satisfy - the following conditions: - - * It must not be empty - - * It cannot start with an alphanumeric character - - * It cannot start with an underscore followed by an - alphanumeric character - - * It cannot be a suffix of `Specification_Suffix' - - If `Implementation_Suffix ("Ada")' is not specified, then the - default is `".ADB"'. - - `SEPARATE_SUFFIX' - This must be a string whose value satisfies the same conditions as - `Implementation_Suffix'. - - If `Separate_Suffix ("Ada")' is not specified, then it defaults to - same value as `Implementation_Suffix ("Ada")'. - - `SPECIFICATION' - You can use the `Specification' attribute, an associative array, - to define the source file name for an individual Ada compilation - unit's spec. The array index must be a string literal that - identifies the Ada unit (case insensitive). The value of this - attribute must be a string that identifies the file that contains - this unit's spec (case sensitive or insensitive depending on the - operating system). - - for Specification ("MyPack.MyChild") use "mypack.mychild.spec"; - - `IMPLEMENTATION' - You can use the `Implementation' attribute, an associative array, - to define the source file name for an individual Ada compilation - unit's body (possibly a subunit). The array index must be a - string literal that identifies the Ada unit (case insensitive). - The value of this attribute must be a string that identifies the - file that contains this unit's body or subunit (case sensitive or - insensitive depending on the operating system). - - for Implementation ("MyPack.MyChild") use "mypack.mychild.body"; - -  - File: gnat_ug_vms.info, Node: Library Projects, Next: Qualifiers Related to Project Files, Prev: Naming Schemes, Up: GNAT Project Manager - - Library Projects - ================ - - _Library projects_ are projects whose object code is placed in a - library. (Note that this facility is not yet supported on all - platforms) - - To create a library project, you need to define in its project file - two project-level attributes: `Library_Name' and `Library_Dir'. - Additionally, you may define the library-related attributes - `Library_Kind', `Library_Version' and `Library_Elaboration'. - - The `Library_Name' attribute has a string value that must start with - a letter and include only letters and digits. - - The `Library_Dir' attribute has a string value that designates the - path (absolute or relative) of the directory where the library will - reside. It must designate an existing directory, and this directory - needs to be different from the project's object directory. It also - needs to be writable. - - If both `Library_Name' and `Library_Dir' are specified and are - legal, then the project file defines a library project. The optional - library-related attributes are checked only for such project files. - - The `Library_Kind' attribute has a string value that must be one of - the following (case insensitive): `"static"', `"dynamic"' or - `"relocatable"'. If this attribute is not specified, the library is a - static library. Otherwise, the library may be dynamic or relocatable. - Depending on the operating system, there may or may not be a distinction - between dynamic and relocatable libraries. For example, on Unix there - is no such distinction. - - The `Library_Version' attribute has a string value whose - interpretation is platform dependent. On Unix, it is used only for - dynamic/relocatable libraries as the internal name of the library (the - `"soname"'). If the library file name (built from the `Library_Name') - is different from the `Library_Version', then the library file will be - a symbolic link to the actual file whose name will be `Library_Version'. - - Example (on Unix): - - project Plib is - - Version := "1"; - - for Library_Dir use "lib_dir"; - for Library_Name use "dummy"; - for Library_Kind use "relocatable"; - for Library_Version use "libdummy.so." & Version; - - end Plib; - - Directory `lib_dir' will contain the internal library file whose name - will be `libdummy.so.1', and `libdummy.so' will be a symbolic link to - `libdummy.so.1'. - - When `GNAT MAKE' detects that a project file (not the main project - file) is a library project file, it will check all immediate sources of - the project and rebuild the library if any of the sources have been - recompiled. All `ALI' files will also be copied from the object - directory to the library directory. To build executables, `GNAT MAKE' - will use the library rather than the individual object files. - -  - File: gnat_ug_vms.info, Node: Qualifiers Related to Project Files, Next: Tools Supporting Project Files, Prev: Library Projects, Up: GNAT Project Manager - - Qualifiers Related to Project Files - =================================== - - The following qualifiers are used by GNAT tools that support project - files: - - ``-PPROJECT'' - Indicates the name of a project file. This project file will be - parsed with the verbosity indicated by `-vP_x_', if any, and using - the external references indicated by `-X' qualifiers, if any. - - There must be only one `-P' qualifier on the command line. - - Since the Project Manager parses the project file only after all - the qualifiers on the command line are checked, the order of the - qualifiers `-P', `-Vp_x_' or `-X' is not significant. - - ``-XNAME=VALUE'' - Indicates that external variable NAME has the value VALUE. The - Project Manager will use this value for occurrences of - `external(name)' when parsing the project file. - - If NAME or VALUE includes a space, then NAME=VALUE should be put - between quotes. - -XOS=NT - -X"user=John Doe" - - Several `-X' qualifiers can be used simultaneously. If several - `-X' qualifiers specify the same NAME, only the last one is used. - - An external variable specified with a `-X' qualifier takes - precedence over the value of the same name in the environment. - - ``-vP_x_'' - Indicates the verbosity of the parsing of GNAT project files. - `-vP0' means Default (no output for syntactically correct project - files); `-vP1' means Medium; `-vP2' means High. - - The default is Default. - - If several `-vP_x_' qualifiers are present, only the last one is - used. - -  - File: gnat_ug_vms.info, Node: Tools Supporting Project Files, Next: An Extended Example, Prev: Qualifiers Related to Project Files, Up: GNAT Project Manager - - Tools Supporting Project Files - ============================== - - * Menu: - - * GNAT MAKE and Project Files:: - * The GNAT Driver and Project Files:: - -  - File: gnat_ug_vms.info, Node: GNAT MAKE and Project Files, Next: The GNAT Driver and Project Files, Up: Tools Supporting Project Files - - GNAT MAKE and Project Files - --------------------------- - - This section covers two topics related to `GNAT MAKE' and project files: - defining qualifiers for `GNAT MAKE' and for the tools that it invokes; - and the use of the `Main' attribute. - - * Menu: - - * Qualifiers and Project Files:: - * Project Files and Main Subprograms:: - -  - File: gnat_ug_vms.info, Node: Qualifiers and Project Files, Next: Project Files and Main Subprograms, Up: GNAT MAKE and Project Files - - Qualifiers and Project Files - ............................ - - For each of the packages `Builder', `Compiler', `Binder', and `Linker', - you can specify a `Default_Qualifiers' attribute, a `Qualifiers' - attribute, or both; as their names imply, these qualifier-related - attributes affect which qualifiers are used for which files when `GNAT - MAKE' is invoked. As will be explained below, these - package-contributed qualifiers precede the qualifiers passed on the - `GNAT MAKE' command line. - - The `Default_Qualifiers' attribute is an associative array indexed by - language name (case insensitive) and returning a string list. For - example: - - package Compiler is - for Default_Qualifiers ("Ada") use ("/STYLE=", "-v"); - end Compiler; - - The `Qualifiers' attribute is also an associative array, indexed by a - file name (which may or may not be case sensitive, depending on the - operating system) and returning a string list. For example: - - package Builder is - for Qualifiers ("MAIN1.ADB") use ("/OPTIMIZE=ALL"); - for Qualifiers ("MAIN2.ADB") use ("-g"); - end Builder; - - For the `Builder' package, the file names should designate source files - for main subprograms. For the `Binder' and `Linker' packages, the file - names should designate `ALI' or source files for main subprograms. In - each case just the file name (without explicit extension) is acceptable. - - For each tool used in a program build (`GNAT MAKE', the compiler, the - binder, and the linker), its corresponding package "contributes" a set - of qualifiers for each file on which the tool is invoked, based on the - qualifier-related attributes defined in the package. In particular, the - qualifiers that each of these packages contributes for a given file F - comprise: - - * the value of attribute `Qualifiers (F)', if it is specified in the - package for the given file, - - * otherwise, the value of `Default_Qualifiers ("Ada")', if it is - specified in the package. - - If neither of these attributes is defined in the package, then the - package does not contribute any qualifiers for the given file. - - When `GNAT MAKE' is invoked on a file, the qualifiers comprise two - sets, in the following order: those contributed for the file by the - `Builder' package; and the qualifiers passed on the command line. - - When `GNAT MAKE' invokes a tool (compiler, binder, linker) on a file, - the qualifiers passed to the tool comprise three sets, in the following - order: - - 1. the applicable qualifiers contributed for the file by the - `Builder' package in the project file supplied on the command line; - - 2. those contributed for the file by the package (in the relevant - project file - see below) corresponding to the tool; and - - 3. the applicable qualifiers passed on the command line. - - The term _applicable qualifiers_ reflects the fact that `GNAT MAKE' - qualifiers may or may not be passed to individual tools, depending on - the individual qualifier. - - `GNAT MAKE' may invoke the compiler on source files from different - projects. The Project Manager will use the appropriate project file to - determine the `Compiler' package for each source file being compiled. - Likewise for the `Binder' and `Linker' packages. - - As an example, consider the following package in a project file: - - project Proj1 is - package Compiler is - for Default_Qualifiers ("Ada") use ("-g"); - for Qualifiers ("A.ADB") use ("/OPTIMIZE=SOME"); - for Qualifiers ("B.ADB") use ("/OPTIMIZE=ALL", "/STYLE="); - end Compiler; - end Proj1; - - If `GNAT MAKE' is invoked with this project file, and it needs to - compile, say, the files `A.ADB', `B.ADB', and `C.ADB', then `A.ADB' - will be compiled with the qualifier `/OPTIMIZE=SOME', `B.ADB' with - qualifiers `/OPTIMIZE=ALL' and `/STYLE=', and `C.ADB' with `-g'. - - Another example illustrates the ordering of the qualifiers - contributed by different packages: - - project Proj2 is - package Builder is - for Qualifiers ("MAIN.ADB") use ("-g", "/OPTIMIZE=SOME", "-f"); - end Builder; - - package Compiler is - for Qualifiers ("MAIN.ADB") use ("/OPTIMIZE=ALL"); - end Compiler; - end Proj2; - - If you issue the command: - - GNAT MAKE -PProj2 /OPTIMIZE=NONE main - - then the compiler will be invoked on `MAIN.ADB' with the following - sequence of qualifiers - - -g /OPTIMIZE=SOME /OPTIMIZE=ALL /OPTIMIZE=NONE - - with the last `-O' qualifier having precedence over the earlier ones; - several other qualifiers (such as `-c') are added implicitly. - - The qualifiers `-g' and `/OPTIMIZE=SOME' are contributed by package - `Builder', `/OPTIMIZE=ALL' is contributed by the package `Compiler' - and `/OPTIMIZE=NONE' comes from the command line. - - The `-g' qualifier will also be passed in the invocation of `GNAT - LINK.' - - A final example illustrates qualifier contributions from packages in - different project files: - - project Proj3 is - for Source_Files use ("PACK.ADS", "PACK.ADB"); - package Compiler is - for Default_Qualifiers ("Ada") use ("/CHECKS=ASSERTIONS"); - end Compiler; - end Proj3; - - with "Proj3"; - project Proj4 is - for Source_Files use ("FOO_MAIN.ADB", "BAR_MAIN.ADB"); - package Builder is - for Qualifiers ("FOO_MAIN.ADB") use ("-s", "-g"); - end Builder; - end Proj4; - - -- Ada source file: - with Pack; - procedure Foo_Main is - ... - end Foo_Main; - - If the command is - GNAT MAKE -PProj4 FOO_MAIN.ADB /COMPILER_QUALIFIERS /CHECKS=OVERFLOW - - then the qualifiers passed to the compiler for `FOO_MAIN.ADB' are `-g' - (contributed by the package `Proj4.Builder') and `/CHECKS=OVERFLOW' - (passed on the command line). When the imported package `Pack' is - compiled, the qualifiers used are `-g' from `Proj4.Builder', - `/CHECKS=ASSERTIONS' (contributed from package `Proj3.Compiler', and - `/CHECKS=OVERFLOW' from the command line. - -  - File: gnat_ug_vms.info, Node: Project Files and Main Subprograms, Prev: Qualifiers and Project Files, Up: GNAT MAKE and Project Files - - Project Files and Main Subprograms - .................................. - - When using a project file, you can invoke `GNAT MAKE' with several main - subprograms, by specifying their source files on the command line. - Each of these needs to be an immediate source file of the project. - - GNAT MAKE -Pprj main1 main2 main3 - - When using a project file, you can also invoke `GNAT MAKE' without - explicitly specifying any main, and the effect depends on whether you - have defined the `Main' attribute. This attribute has a string list - value, where each element in the list is the name of a source file (the - file extension is optional) containing a main subprogram. - - If the `Main' attribute is defined in a project file as a non-empty - string list and the qualifier `-u' is not used on the command line, then - invoking `GNAT MAKE' with this project file but without any main on the - command line is equivalent to invoking `GNAT MAKE' with all the file - names in the `Main' attribute on the command line. - - Example: - project Prj is - for Main use ("main1", "main2", "main3"); - end Prj; - - With this project file, `"GNAT MAKE -Pprj"' is equivalent to `"GNAT - MAKE -Pprj main1 main2 main3"'. - - When the project attribute `Main' is not specified, or is specified - as an empty string list, or when the qualifier `-u' is used on the - command line, then invoking `GNAT MAKE' with no main on the command - line will result in all immediate sources of the project file being - checked, and potentially recompiled. Depending on the presence of the - qualifier `-u', sources from other project files on which the immediate - sources of the main project file depend are also checked and - potentially recompiled. In other words, the `-u' qualifier is applied - to all of the immediate sources of themain project file. - -  - File: gnat_ug_vms.info, Node: The GNAT Driver and Project Files, Prev: GNAT MAKE and Project Files, Up: Tools Supporting Project Files - - The GNAT Driver and Project Files - --------------------------------- - - A number of GNAT tools, other than `GNAT MAKE' are project-aware: `GNAT - BIND', `GNAT FIND', `GNAT LINK', `GNAT LIST' and `GNAT XREF'. However, - none of these tools can be invoked directly with a project file - qualifier (`-P'). They need to be invoke through the `gnat' driver. - - The `gnat' driver is a front-end that accepts a number of commands - and call the corresponding tool. It has been designed initially for VMS - to convert VMS style qualifiers to Unix style qualifiers, but it is now - available to all the GNAT supported platforms. - - On non VMS platforms, the `gnat' driver accepts the following - commands (case insensitive): - - * BIND to invoke `GNAT BIND' - - * CHOP to invoke `GNAT CHOP' - - * COMP or COMPILE to invoke the compiler - - * ELIM to invoke `GNAT ELIM' - - * FIND to invoke `GNAT FIND' - - * KR or KRUNCH to invoke `GNAT KRUNCH' - - * LINK to invoke `GNAT LINK' - - * LS or LIST to invoke `GNAT LIST' - - * MAKE to invoke `GNAT MAKE' - - * NAME to invoke `gnatname' - - * PREP or PREPROCESS to invoke `GNAT PREPROCESS' - - * PSTA or STANDARD to invoke `GNAT STANDARD' - - * STUB to invoke `GNAT STUB' - - * XREF to invoke `GNAT XREF' - - Note that the compiler is invoked using the command `GNAT MAKE -f -u'. - - Following the command, you may put qualifiers and arguments for the - invoked tool. - - gnat bind -C MAIN.ALI - gnat ls -a main - gnat chop foo.txt - - In addition, for command BIND, FIND, LS or LIST, LINK and XREF, the - project file related qualifiers (`-P', `-X' and `-vPx') may be used in - addition to the qualifiers of the invoking tool. - - For each of these command, there is possibly a package in the main - project that corresponds to the invoked tool. - - * package `Binder' for command BIND (invoking `GNAT BIND') - - * package `Finder' for command FIND (invoking `GNAT FIND') - - * package `GNAT LIST' for command LS or LIST (invoking `GNAT LIST') - - * package `Linker' for command LINK (invoking `GNAT LINK') - - * package `Cross_Reference' for command XREF (invoking `GNAT LINK') - - - Package `GNAT LIST' has a unique attribute `Qualifiers', a simple - variable with a string list value. It contains qualifiers for the - invocation of `GNAT LIST'. - - project Proj1 is - package GNAT LIST is - for Qualifiers use ("-a", "-v"); - end GNAT LIST; - end Proj1; - - All other packages contains a qualifier `Default_Qualifiers', an - associative array, indexed by the programming language (case - insensitive) and having a string list value. `Default_Qualifiers - ("Ada")' contains the qualifiers for the invocation of the tool - corresponding to the package. - - project Proj is - - for Source_Dirs use ("./**"); - - package GNAT LIST is - for Qualifiers use ("-a", "-v"); - end GNAT LIST; - - package Binder is - for Default_Qualifiers ("Ada") use ("-C", "-e"); - end Binder; - - package Linker is - for Default_Qualifiers ("Ada") use ("-C"); - end Linker; - - package Finder is - for Default_Qualifiers ("Ada") use ("-a", "-f"); - end Finder; - - package Cross_Reference is - for Default_Qualifiers ("Ada") use ("-a", "-f", "-d", "-u"); - end Cross_Reference; - end Proj; - - With the above project file, commands such as - - gnat ls -Pproj main - gnat xref -Pproj main - gnat bind -Pproj MAIN.ALI - - will set up the environment properly and invoke the tool with the - qualifiers found in the package corresponding to the tool. - -  - File: gnat_ug_vms.info, Node: An Extended Example, Next: Project File Complete Syntax, Prev: Tools Supporting Project Files, Up: GNAT Project Manager - - An Extended Example - =================== - - Suppose that we have two programs, PROG1 and PROG2, with the sources in - the respective directories. We would like to build them with a single - `GNAT MAKE' command, and we would like to place their object files into - `.build' subdirectories of the source directories. Furthermore, we would - like to have to have two separate subdirectories in `.build' - - `release' and `debug' - which will contain the object files compiled - with different set of compilation flags. - - In other words, we have the following structure: - - main - |- prog1 - | |- .build - | | debug - | | release - |- prog2 - |- .build - | debug - | release - - Here are the project files that we need to create in a directory `main' - to maintain this structure: - - 1. We create a `Common' project with a package `Compiler' that - specifies the compilation qualifiers: - - File "common.gpr": - project Common is - - for Source_Dirs use (); -- No source files - - type Build_Type is ("release", "debug"); - Build : Build_Type := External ("BUILD", "debug"); - package Compiler is - case Build is - when "release" => - for Default_Qualifiers ("Ada") use ("/OPTIMIZE=ALL"); - when "debug" => - for Default_Qualifiers ("Ada") use ("-g"); - end case; - end Compiler; - - end Common; - - 2. We create separate projects for the two programs: - - File "prog1.gpr": - - with "common"; - project Prog1 is - - for Source_Dirs use ("prog1"); - for Object_Dir use "prog1/.build/" & Common.Build; - - package Compiler renames Common.Compiler; - - end Prog1; - - File "prog2.gpr": - - with "common"; - project Prog2 is - - for Source_Dirs use ("prog2"); - for Object_Dir use "prog2/.build/" & Common.Build; - - package Compiler renames Common.Compiler; - end Prog2; - - 3. We create a wrapping project MAIN: - - File "main.gpr": - - with "common"; - with "prog1"; - with "prog2"; - project Main is - - package Compiler renames Common.Compiler; - - end Main; - - 4. Finally we need to create a dummy procedure that `with's (either - explicitly or implicitly) all the sources of our two programs. - - - Now we can build the programs using the command - - GNAT MAKE -Pmain dummy - - for the Debug mode, or - - GNAT MAKE -Pmain -XBUILD=release - - for the Release mode. - -  - File: gnat_ug_vms.info, Node: Project File Complete Syntax, Prev: An Extended Example, Up: GNAT Project Manager - - Project File Complete Syntax - ============================ - - project ::= - context_clause project_declaration - - context_clause ::= - {with_clause} - - with_clause ::= - with literal_string { , literal_string } ; - - project_declaration ::= - project simple_name [ extends literal_string ] is - {declarative_item} - end simple_name; - - declarative_item ::= - package_declaration | - typed_string_declaration | - other_declarative_item - - package_declaration ::= - package simple_name package_completion - - package_completion ::= - package_body | package_renaming - - package body ::= - is - {other_declarative_item} - end simple_name ; - - package_renaming ::== - renames simple_name.simple_name ; - - typed_string_declaration ::= - type _simple_name is - ( literal_string {, literal_string} ); - - other_declarative_item ::= - attribute_declaration | - typed_variable_declaration | - variable_declaration | - case_construction - - attribute_declaration ::= - for attribute use expression ; - - attribute ::= - simple_name | - simple_name ( literal_string ) - - typed_variable_declaration ::= - simple_name : name := string_expression ; - - variable_declaration ::= - simple_name := expression; - - expression ::= - term {& term} - - term ::= - literal_string | - string_list | - name | - external_value | - attribute_reference - - literal_string ::= - (same as Ada) - - string_list ::= - ( expression { , expression } ) - - external_value ::= - external ( literal_string [, literal_string] ) - - attribute_reference ::= - attribute_parent ' simple_name [ ( literal_string ) ] - - attribute_parent ::= - project | - simple_name | - simple_name . simple_name - - case_construction ::= - case name is - {case_item} - end case ; - - case_item ::= - when discrete_choice_list => {case_construction | attribute_declaration} - - discrete_choice_list ::= - literal_string {| literal_string} - - name ::= - simple_name {. simple_name} - - simple_name ::= - identifier (same as Ada) - -  - File: gnat_ug_vms.info, Node: Elaboration Order Handling in GNAT, Next: The Cross-Referencing Tools GNAT XREF and GNAT FIND, Prev: GNAT Project Manager, Up: Top - - Elaboration Order Handling in GNAT - ********************************** - - * Menu: - - * Elaboration Code in Ada 95:: - * Checking the Elaboration Order in Ada 95:: - * Controlling the Elaboration Order in Ada 95:: - * Controlling Elaboration in GNAT - Internal Calls:: - * Controlling Elaboration in GNAT - External Calls:: - * Default Behavior in GNAT - Ensuring Safety:: - * Elaboration Issues for Library Tasks:: - * Mixing Elaboration Models:: - * What to Do If the Default Elaboration Behavior Fails:: - * Elaboration for Access-to-Subprogram Values:: - * Summary of Procedures for Elaboration Control:: - * Other Elaboration Order Considerations:: - - This chapter describes the handling of elaboration code in Ada 95 and - in GNAT, and discusses how the order of elaboration of program units can - be controlled in GNAT, either automatically or with explicit programming - features. - -  - File: gnat_ug_vms.info, Node: Elaboration Code in Ada 95, Next: Checking the Elaboration Order in Ada 95, Up: Elaboration Order Handling in GNAT - - Elaboration Code in Ada 95 - ========================== - - Ada 95 provides rather general mechanisms for executing code at - elaboration time, that is to say before the main program starts - executing. Such code arises in three contexts: - - Initializers for variables. - Variables declared at the library level, in package specs or - bodies, can require initialization that is performed at - elaboration time, as in: - Sqrt_Half : Float := Sqrt (0.5); - - Package initialization code - Code in a `BEGIN-END' section at the outer level of a package body - is executed as part of the package body elaboration code. - - Library level task allocators - Tasks that are declared using task allocators at the library level - start executing immediately and hence can execute at elaboration - time. - - Subprogram calls are possible in any of these contexts, which means that - any arbitrary part of the program may be executed as part of the - elaboration code. It is even possible to write a program which does all - its work at elaboration time, with a null main program, although - stylistically this would usually be considered an inappropriate way to - structure a program. - - An important concern arises in the context of elaboration code: we - have to be sure that it is executed in an appropriate order. What we - have is a series of elaboration code sections, potentially one section - for each unit in the program. It is important that these execute in the - correct order. Correctness here means that, taking the above example of - the declaration of `Sqrt_Half', if some other piece of elaboration code - references `Sqrt_Half', then it must run after the section of - elaboration code that contains the declaration of `Sqrt_Half'. - - There would never be any order of elaboration problem if we made a - rule that whenever you `with' a unit, you must elaborate both the spec - and body of that unit before elaborating the unit doing the `with''ing: - - with Unit_1; - package Unit_2 is ... - - would require that both the body and spec of `Unit_1' be elaborated - before the spec of `Unit_2'. However, a rule like that would be far too - restrictive. In particular, it would make it impossible to have routines - in separate packages that were mutually recursive. - - You might think that a clever enough compiler could look at the - actual elaboration code and determine an appropriate correct order of - elaboration, but in the general case, this is not possible. Consider - the following example. - - In the body of `Unit_1', we have a procedure `Func_1' that references - the variable `Sqrt_1', which is declared in the elaboration code of the - body of `Unit_1': - - Sqrt_1 : Float := Sqrt (0.1); - - The elaboration code of the body of `Unit_1' also contains: - - if expression_1 = 1 then - Q := Unit_2.Func_2; - end if; - - `Unit_2' is exactly parallel, it has a procedure `Func_2' that - references the variable `Sqrt_2', which is declared in the elaboration - code of the body `Unit_2': - - Sqrt_2 : Float := Sqrt (0.1); - - The elaboration code of the body of `Unit_2' also contains: - - if expression_2 = 2 then - Q := Unit_1.Func_1; - end if; - - Now the question is, which of the following orders of elaboration is - acceptable: - - Spec of Unit_1 - Spec of Unit_2 - Body of Unit_1 - Body of Unit_2 - - or - - Spec of Unit_2 - Spec of Unit_1 - Body of Unit_2 - Body of Unit_1 - - If you carefully analyze the flow here, you will see that you cannot - tell at compile time the answer to this question. If `expression_1' is - not equal to 1, and `expression_2' is not equal to 2, then either order - is acceptable, because neither of the function calls is executed. If - both tests evaluate to true, then neither order is acceptable and in - fact there is no correct order. - - If one of the two expressions is true, and the other is false, then - one of the above orders is correct, and the other is incorrect. For - example, if `expression_1' = 1 and `expression_2' /= 2, then the call - to `Func_2' will occur, but not the call to `Func_1.' This means that - it is essential to elaborate the body of `Unit_1' before the body of - `Unit_2', so the first order of elaboration is correct and the second - is wrong. - - By making `expression_1' and `expression_2' depend on input data, or - perhaps the time of day, we can make it impossible for the compiler or - binder to figure out which of these expressions will be true, and hence - it is impossible to guarantee a safe order of elaboration at run time. - -  - File: gnat_ug_vms.info, Node: Checking the Elaboration Order in Ada 95, Next: Controlling the Elaboration Order in Ada 95, Prev: Elaboration Code in Ada 95, Up: Elaboration Order Handling in GNAT - - Checking the Elaboration Order in Ada 95 - ======================================== - - In some languages that involve the same kind of elaboration problems, - e.g. Java and C++, the programmer is expected to worry about these - ordering problems himself, and it is common to write a program in which - an incorrect elaboration order gives surprising results, because it - references variables before they are initialized. Ada 95 is designed - to be a safe language, and a programmer-beware approach is clearly not - sufficient. Consequently, the language provides three lines of defense: - - Standard rules - Some standard rules restrict the possible choice of elaboration - order. In particular, if you `with' a unit, then its spec is always - elaborated before the unit doing the `with'. Similarly, a parent - spec is always elaborated before the child spec, and finally a - spec is always elaborated before its corresponding body. - - Dynamic elaboration checks - Dynamic checks are made at run time, so that if some entity is - accessed before it is elaborated (typically by means of a - subprogram call) then the exception (`Program_Error') is raised. - - Elaboration control - Facilities are provided for the programmer to specify the desired - order of elaboration. - - Let's look at these facilities in more detail. First, the rules for - dynamic checking. One possible rule would be simply to say that the - exception is raised if you access a variable which has not yet been - elaborated. The trouble with this approach is that it could require - expensive checks on every variable reference. Instead Ada 95 has two - rules which are a little more restrictive, but easier to check, and - easier to state: - - Restrictions on calls - A subprogram can only be called at elaboration time if its body - has been elaborated. The rules for elaboration given above - guarantee that the spec of the subprogram has been elaborated - before the call, but not the body. If this rule is violated, then - the exception `Program_Error' is raised. - - Restrictions on instantiations - A generic unit can only be instantiated if the body of the generic - unit has been elaborated. Again, the rules for elaboration given - above guarantee that the spec of the generic unit has been - elaborated before the instantiation, but not the body. If this - rule is violated, then the exception `Program_Error' is raised. - - The idea is that if the body has been elaborated, then any variables it - references must have been elaborated; by checking for the body being - elaborated we guarantee that none of its references causes any trouble. - As we noted above, this is a little too restrictive, because a - subprogram that has no non-local references in its body may in fact be - safe to call. However, it really would be unsafe to rely on this, - because it would mean that the caller was aware of details of the - implementation in the body. This goes against the basic tenets of Ada. - - A plausible implementation can be described as follows. A Boolean - variable is associated with each subprogram and each generic unit. This - variable is initialized to False, and is set to True at the point body - is elaborated. Every call or instantiation checks the variable, and - raises `Program_Error' if the variable is False. - - Note that one might think that it would be good enough to have one - Boolean variable for each package, but that would not deal with cases - of trying to call a body in the same package as the call that has not - been elaborated yet. Of course a compiler may be able to do enough - analysis to optimize away some of the Boolean variables as unnecessary, - and `GNAT' indeed does such optimizations, but still the easiest - conceptual model is to think of there being one variable per subprogram. - -  - File: gnat_ug_vms.info, Node: Controlling the Elaboration Order in Ada 95, Next: Controlling Elaboration in GNAT - Internal Calls, Prev: Checking the Elaboration Order in Ada 95, Up: Elaboration Order Handling in GNAT - - Controlling the Elaboration Order in Ada 95 - =========================================== - - In the previous section we discussed the rules in Ada 95 which ensure - that `Program_Error' is raised if an incorrect elaboration order is - chosen. This prevents erroneous executions, but we need mechanisms to - specify a correct execution and avoid the exception altogether. To - achieve this, Ada 95 provides a number of features for controlling the - order of elaboration. We discuss these features in this section. - - First, there are several ways of indicating to the compiler that a - given unit has no elaboration problems: - - packages that do not require a body - In Ada 95, a library package that does not require a body does not - permit a body. This means that if we have a such a package, as in: - - package Definitions is - generic - type m is new integer; - package Subp is - type a is array (1 .. 10) of m; - type b is array (1 .. 20) of m; - end Subp; - end Definitions; - - A package that `with''s `Definitions' may safely instantiate - `Definitions.Subp' because the compiler can determine that there - definitely is no package body to worry about in this case - - pragma Pure - Places sufficient restrictions on a unit to guarantee that no call - to any subprogram in the unit can result in an elaboration - problem. This means that the compiler does not need to worry about - the point of elaboration of such units, and in particular, does - not need to check any calls to any subprograms in this unit. - - pragma Preelaborate - This pragma places slightly less stringent restrictions on a unit - than does pragma Pure, but these restrictions are still sufficient - to ensure that there are no elaboration problems with any calls to - the unit. - - pragma Elaborate_Body - This pragma requires that the body of a unit be elaborated - immediately after its spec. Suppose a unit `A' has such a pragma, - and unit `B' does a `with' of unit `A'. Recall that the standard - rules require the spec of unit `A' to be elaborated before the - `with''ing unit; given the pragma in `A', we also know that the - body of `A' will be elaborated before `B', so that calls to `A' - are safe and do not need a check. - - Note that, unlike pragma `Pure' and pragma `Preelaborate', the use of - `Elaborate_Body' does not guarantee that the program is free of - elaboration problems, because it may not be possible to satisfy the - requested elaboration order. Let's go back to the example with - `Unit_1' and `Unit_2'. If a programmer marks `Unit_1' as - `Elaborate_Body', and not `Unit_2,' then the order of elaboration will - be: - - Spec of Unit_2 - Spec of Unit_1 - Body of Unit_1 - Body of Unit_2 - - Now that means that the call to `Func_1' in `Unit_2' need not be - checked, it must be safe. But the call to `Func_2' in `Unit_1' may - still fail if `Expression_1' is equal to 1, and the programmer must - still take responsibility for this not being the case. - - If all units carry a pragma `Elaborate_Body', then all problems are - eliminated, except for calls entirely within a body, which are in any - case fully under programmer control. However, using the pragma - everywhere is not always possible. In particular, for our - `Unit_1'/`Unit_2' example, if we marked both of them as having pragma - `Elaborate_Body', then clearly there would be no possible elaboration - order. - - The above pragmas allow a server to guarantee safe use by clients, - and clearly this is the preferable approach. Consequently a good rule in - Ada 95 is to mark units as `Pure' or `Preelaborate' if possible, and if - this is not possible, mark them as `Elaborate_Body' if possible. As we - have seen, there are situations where neither of these three pragmas - can be used. So we also provide methods for clients to control the - order of elaboration of the servers on which they depend: - - pragma Elaborate (unit) - This pragma is placed in the context clause, after a `with' clause, - and it requires that the body of the named unit be elaborated - before the unit in which the pragma occurs. The idea is to use - this pragma if the current unit calls at elaboration time, - directly or indirectly, some subprogram in the named unit. - - pragma Elaborate_All (unit) - This is a stronger version of the Elaborate pragma. Consider the - following example: - - Unit A `with''s unit B and calls B.Func in elab code - Unit B `with''s unit C, and B.Func calls C.Func - - Now if we put a pragma `Elaborate (B)' in unit `A', this ensures - that the body of `B' is elaborated before the call, but not the - body of `C', so the call to `C.Func' could still cause - `Program_Error' to be raised. - - The effect of a pragma `Elaborate_All' is stronger, it requires - not only that the body of the named unit be elaborated before the - unit doing the `with', but also the bodies of all units that the - named unit uses, following `with' links transitively. For example, - if we put a pragma `Elaborate_All (B)' in unit `A', then it - requires not only that the body of `B' be elaborated before `A', - but also the body of `C', because `B' `with''s `C'. - - We are now in a position to give a usage rule in Ada 95 for avoiding - elaboration problems, at least if dynamic dispatching and access to - subprogram values are not used. We will handle these cases separately - later. - - The rule is simple. If a unit has elaboration code that can directly - or indirectly make a call to a subprogram in a `with''ed unit, or - instantiate a generic unit in a `with''ed unit, then if the `with''ed - unit does not have pragma `Pure' or `Preelaborate', then the client - should have a pragma `Elaborate_All' for the `with''ed unit. By - following this rule a client is assured that calls can be made without - risk of an exception. If this rule is not followed, then a program may - be in one of four states: - - No order exists - No order of elaboration exists which follows the rules, taking into - account any `Elaborate', `Elaborate_All', or `Elaborate_Body' - pragmas. In this case, an Ada 95 compiler must diagnose the - situation at bind time, and refuse to build an executable program. - - One or more orders exist, all incorrect - One or more acceptable elaboration orders exists, and all of them - generate an elaboration order problem. In this case, the binder - can build an executable program, but `Program_Error' will be raised - when the program is run. - - Several orders exist, some right, some incorrect - One or more acceptable elaboration orders exists, and some of them - work, and some do not. The programmer has not controlled the order - of elaboration, so the binder may or may not pick one of the - correct orders, and the program may or may not raise an exception - when it is run. This is the worst case, because it means that the - program may fail when moved to another compiler, or even another - version of the same compiler. - - One or more orders exists, all correct - One ore more acceptable elaboration orders exist, and all of them - work. In this case the program runs successfully. This state of - affairs can be guaranteed by following the rule we gave above, but - may be true even if the rule is not followed. - - Note that one additional advantage of following our Elaborate_All rule - is that the program continues to stay in the ideal (all orders OK) state - even if maintenance changes some bodies of some subprograms. - Conversely, if a program that does not follow this rule happens to be - safe at some point, this state of affairs may deteriorate silently as a - result of maintenance changes. - - You may have noticed that the above discussion did not mention the - use of `Elaborate_Body'. This was a deliberate omission. If you `with' - an `Elaborate_Body' unit, it still may be the case that code in the - body makes calls to some other unit, so it is still necessary to use - `Elaborate_All' on such units. - -  - File: gnat_ug_vms.info, Node: Controlling Elaboration in GNAT - Internal Calls, Next: Controlling Elaboration in GNAT - External Calls, Prev: Controlling the Elaboration Order in Ada 95, Up: Elaboration Order Handling in GNAT - - Controlling Elaboration in GNAT - Internal Calls - ================================================ - - In the case of internal calls, i.e. calls within a single package, the - programmer has full control over the order of elaboration, and it is up - to the programmer to elaborate declarations in an appropriate order. For - example writing: - - function One return Float; - - Q : Float := One; - - function One return Float is - begin - return 1.0; - end One; - - will obviously raise `Program_Error' at run time, because function One - will be called before its body is elaborated. In this case GNAT will - generate a warning that the call will raise `Program_Error': - - 1. procedure y is - 2. function One return Float; - 3. - 4. Q : Float := One; - | - >>> warning: cannot call "One" before body is elaborated - >>> warning: Program_Error will be raised at run time - - 5. - 6. function One return Float is - 7. begin - 8. return 1.0; - 9. end One; - 10. - 11. begin - 12. null; - 13. end; - - Note that in this particular case, it is likely that the call is safe, - because the function `One' does not access any global variables. - Nevertheless in Ada 95, we do not want the validity of the check to - depend on the contents of the body (think about the separate - compilation case), so this is still wrong, as we discussed in the - previous sections. - - The error is easily corrected by rearranging the declarations so - that the body of One appears before the declaration containing the call - (note that in Ada 95, declarations can appear in any order, so there is - no restriction that would prevent this reordering, and if we write: - - function One return Float; - - function One return Float is - begin - return 1.0; - end One; - - Q : Float := One; - - then all is well, no warning is generated, and no `Program_Error' - exception will be raised. Things are more complicated when a chain of - subprograms is executed: - - function A return Integer; - function B return Integer; - function C return Integer; - - function B return Integer is begin return A; end; - function C return Integer is begin return B; end; - - X : Integer := C; - - function A return Integer is begin return 1; end; - - Now the call to `C' at elaboration time in the declaration of `X' is - correct, because the body of `C' is already elaborated, and the call to - `B' within the body of `C' is correct, but the call to `A' within the - body of `B' is incorrect, because the body of `A' has not been - elaborated, so `Program_Error' will be raised on the call to `A'. In - this case GNAT will generate a warning that `Program_Error' may be - raised at the point of the call. Let's look at the warning: - - 1. procedure x is - 2. function A return Integer; - 3. function B return Integer; - 4. function C return Integer; - 5. - 6. function B return Integer is begin return A; end; - | - >>> warning: call to "A" before body is elaborated may - raise Program_Error - >>> warning: "B" called at line 7 - >>> warning: "C" called at line 9 - - 7. function C return Integer is begin return B; end; - 8. - 9. X : Integer := C; - 10. - 11. function A return Integer is begin return 1; end; - 12. - 13. begin - 14. null; - 15. end; - - Note that the message here says "may raise", instead of the direct case, - where the message says "will be raised". That's because whether `A' is - actually called depends in general on run-time flow of control. For - example, if the body of `B' said - - function B return Integer is - begin - if some-condition-depending-on-input-data then - return A; - else - return 1; - end if; - end B; - - then we could not know until run time whether the incorrect call to A - would actually occur, so `Program_Error' might or might not be raised. - It is possible for a compiler to do a better job of analyzing bodies, to - determine whether or not `Program_Error' might be raised, but it - certainly couldn't do a perfect job (that would require solving the - halting problem and is provably impossible), and because this is a - warning anyway, it does not seem worth the effort to do the analysis. - Cases in which it would be relevant are rare. - - In practice, warnings of either of the forms given above will - usually correspond to real errors, and should be examined carefully and - eliminated. In the rare case where a warning is bogus, it can be - suppressed by any of the following methods: - - * Compile with the `/WARNINGS=SUPPRESS' qualifier set - - * Suppress `Elaboration_Checks' for the called subprogram - - * Use pragma `Warnings_Off' to turn warnings off for the call - - For the internal elaboration check case, GNAT by default generates the - necessary run-time checks to ensure that `Program_Error' is raised if - any call fails an elaboration check. Of course this can only happen if a - warning has been issued as described above. The use of pragma `Suppress - (Elaboration_Checks)' may (but is not guaranteed to) suppress some of - these checks, meaning that it may be possible (but is not guaranteed) - for a program to be able to call a subprogram whose body is not yet - elaborated, without raising a `Program_Error' exception. - -  - File: gnat_ug_vms.info, Node: Controlling Elaboration in GNAT - External Calls, Next: Default Behavior in GNAT - Ensuring Safety, Prev: Controlling Elaboration in GNAT - Internal Calls, Up: Elaboration Order Handling in GNAT - - Controlling Elaboration in GNAT - External Calls - ================================================ - - The previous section discussed the case in which the execution of a - particular thread of elaboration code occurred entirely within a single - unit. This is the easy case to handle, because a programmer has direct - and total control over the order of elaboration, and furthermore, - checks need only be generated in cases which are rare and which the - compiler can easily detect. The situation is more complex when - separate compilation is taken into account. Consider the following: - - package Math is - function Sqrt (Arg : Float) return Float; - end Math; - - package body Math is - function Sqrt (Arg : Float) return Float is - begin - ... - end Sqrt; - end Math; - - with Math; - package Stuff is - X : Float := Math.Sqrt (0.5); - end Stuff; - - with Stuff; - procedure Main is - begin - ... - end Main; - - where `Main' is the main program. When this program is executed, the - elaboration code must first be executed, and one of the jobs of the - binder is to determine the order in which the units of a program are to - be elaborated. In this case we have four units: the spec and body of - `Math', the spec of `Stuff' and the body of `Main'). In what order - should the four separate sections of elaboration code be executed? - - There are some restrictions in the order of elaboration that the - binder can choose. In particular, if unit U has a `with' for a package - `X', then you are assured that the spec of `X' is elaborated before U , - but you are not assured that the body of `X' is elaborated before U. - This means that in the above case, the binder is allowed to choose the - order: - - spec of Math - spec of Stuff - body of Math - body of Main - - but that's not good, because now the call to `Math.Sqrt' that happens - during the elaboration of the `Stuff' spec happens before the body of - `Math.Sqrt' is elaborated, and hence causes `Program_Error' exception - to be raised. At first glance, one might say that the binder is - misbehaving, because obviously you want to elaborate the body of - something you `with' first, but that is not a general rule that can be - followed in all cases. Consider - - package X is ... - - package Y is ... - - with X; - package body Y is ... - - with Y; - package body X is ... - - This is a common arrangement, and, apart from the order of elaboration - problems that might arise in connection with elaboration code, this - works fine. A rule that says that you must first elaborate the body of - anything you `with' cannot work in this case: the body of `X' `with''s - `Y', which means you would have to elaborate the body of `Y' first, but - that `with''s `X', which means you have to elaborate the body of `X' - first, but ... and we have a loop that cannot be broken. - - It is true that the binder can in many cases guess an order of - elaboration that is unlikely to cause a `Program_Error' exception to be - raised, and it tries to do so (in the above example of - `Math/Stuff/Spec', the GNAT binder will by default elaborate the body - of `Math' right after its spec, so all will be well). - - However, a program that blindly relies on the binder to be helpful - can get into trouble, as we discussed in the previous sections, so GNAT - provides a number of facilities for assisting the programmer in - developing programs that are robust with respect to elaboration order. - -  - File: gnat_ug_vms.info, Node: Default Behavior in GNAT - Ensuring Safety, Next: Elaboration Issues for Library Tasks, Prev: Controlling Elaboration in GNAT - External Calls, Up: Elaboration Order Handling in GNAT - - Default Behavior in GNAT - Ensuring Safety - ========================================== - - The default behavior in GNAT ensures elaboration safety. In its default - mode GNAT implements the rule we previously described as the right - approach. Let's restate it: - - * _If a unit has elaboration code that can directly or indirectly - make a call to a subprogram in a `with''ed unit, or instantiate a - generic unit in a `with''ed unit, then if the `with''ed unit does - not have pragma `Pure' or `Preelaborate', then the client should - have an `Elaborate_All' for the `with''ed unit._ - - By following this rule a client is assured that calls and - instantiations can be made without risk of an exception. - - In this mode GNAT traces all calls that are potentially made from - elaboration code, and puts in any missing implicit `Elaborate_All' - pragmas. The advantage of this approach is that no elaboration problems - are possible if the binder can find an elaboration order that is - consistent with these implicit `Elaborate_All' pragmas. The - disadvantage of this approach is that no such order may exist. - - If the binder does not generate any diagnostics, then it means that - it has found an elaboration order that is guaranteed to be safe. - However, the binder may still be relying on implicitly generated - `Elaborate_All' pragmas so portability to other compilers than GNAT is - not guaranteed. - - If it is important to guarantee portability, then the compilations - should use the `/WARNINGS=ELABORATION' (warn on elaboration problems) - qualifier. This will cause warning messages to be generated indicating - the missing `Elaborate_All' pragmas. Consider the following source - program: - - with k; - package j is - m : integer := k.r; - end; - - where it is clear that there should be a pragma `Elaborate_All' for - unit `k'. An implicit pragma will be generated, and it is likely that - the binder will be able to honor it. However, it is safer to include - the pragma explicitly in the source. If this unit is compiled with the - `/WARNINGS=ELABORATION' qualifier, then the compiler outputs a warning: - - 1. with k; - 2. package j is - 3. m : integer := k.r; - | - >>> warning: call to "r" may raise Program_Error - >>> warning: missing pragma Elaborate_All for "k" - - 4. end; - - and these warnings can be used as a guide for supplying manually the - missing pragmas. - - This default mode is more restrictive than the Ada Reference Manual, - and it is possible to construct programs which will compile using the - dynamic model described there, but will run into a circularity using - the safer static model we have described. - - Of course any Ada compiler must be able to operate in a mode - consistent with the requirements of the Ada Reference Manual, and in - particular must have the capability of implementing the standard - dynamic model of elaboration with run-time checks. - - In GNAT, this standard mode can be achieved either by the use of the - `/CHECKS=ELABORATION' qualifier on the compiler (`GNAT COMPILE' or - `GNAT MAKE') command, or by the use of the configuration pragma: - - pragma Elaboration_Checks (RM); - - Either approach will cause the unit affected to be compiled using the - standard dynamic run-time elaboration checks described in the Ada - Reference Manual. The static model is generally preferable, since it is - clearly safer to rely on compile and link time checks rather than - run-time checks. However, in the case of legacy code, it may be - difficult to meet the requirements of the static model. This issue is - further discussed in *Note What to Do If the Default Elaboration - Behavior Fails::. - - Note that the static model provides a strict subset of the allowed - behavior and programs of the Ada Reference Manual, so if you do adhere - to the static model and no circularities exist, then you are assured - that your program will work using the dynamic model. - -  - File: gnat_ug_vms.info, Node: Elaboration Issues for Library Tasks, Next: Mixing Elaboration Models, Prev: Default Behavior in GNAT - Ensuring Safety, Up: Elaboration Order Handling in GNAT - - Elaboration Issues for Library Tasks - ==================================== - - In this section we examine special elaboration issues that arise for - programs that declare library level tasks. - - Generally the model of execution of an Ada program is that all units - are elaborated, and then execution of the program starts. However, the - declaration of library tasks definitely does not fit this model. The - reason for this is that library tasks start as soon as they are declared - (more precisely, as soon as the statement part of the enclosing package - body is reached), that is to say before elaboration of the program is - complete. This means that if such a task calls a subprogram, or an - entry in another task, the callee may or may not be elaborated yet, and - in the standard Reference Manual model of dynamic elaboration checks, - you can even get timing dependent Program_Error exceptions, since there - can be a race between the elaboration code and the task code. - - The static model of elaboration in GNAT seeks to avoid all such - dynamic behavior, by being conservative, and the conservative approach - in this particular case is to assume that all the code in a task body - is potentially executed at elaboration time if a task is declared at - the library level. - - This can definitely result in unexpected circularities. Consider the - following example - - package Decls is - task Lib_Task is - entry Start; - end Lib_Task; - - type My_Int is new Integer; - - function Ident (M : My_Int) return My_Int; - end Decls; - - with Utils; - package body Decls is - task body Lib_Task is - begin - accept Start; - Utils.Put_Val (2); - end Lib_Task; - - function Ident (M : My_Int) return My_Int is - begin - return M; - end Ident; - end Decls; - - with Decls; - package Utils is - procedure Put_Val (Arg : Decls.My_Int); - end Utils; - - with Text_IO; - package body Utils is - procedure Put_Val (Arg : Decls.My_Int) is - begin - Text_IO.Put_Line (Decls.My_Int'Image (Decls.Ident (Arg))); - end Put_Val; - end Utils; - - with Decls; - procedure Main is - begin - Decls.Lib_Task.Start; - end; - - If the above example is compiled in the default static elaboration - mode, then a circularity occurs. The circularity comes from the call - `Utils.Put_Val' in the task body of `Decls.Lib_Task'. Since this call - occurs in elaboration code, we need an implicit pragma `Elaborate_All' - for `Utils'. This means that not only must the spec and body of `Utils' - be elaborated before the body of `Decls', but also the spec and body of - any unit that is `with'ed' by the body of `Utils' must also be - elaborated before the body of `Decls'. This is the transitive - implication of pragma `Elaborate_All' and it makes sense, because in - general the body of `Put_Val' might have a call to something in a - `with'ed' unit. - - In this case, the body of Utils (actually its spec) `with's' - `Decls'. Unfortunately this means that the body of `Decls' must be - elaborated before itself, in case there is a call from the body of - `Utils'. - - Here is the exact chain of events we are worrying about: - - 1. In the body of `Decls' a call is made from within the body of a - library task to a subprogram in the package `Utils'. Since this - call may occur at elaboration time (given that the task is - activated at elaboration time), we have to assume the worst, i.e. - that the call does happen at elaboration time. - - 2. This means that the body and spec of `Util' must be elaborated - before the body of `Decls' so that this call does not cause an - access before elaboration. - - 3. Within the body of `Util', specifically within the body of - `Util.Put_Val' there may be calls to any unit `with''ed by this - package. - - 4. One such `with''ed package is package `Decls', so there might be a - call to a subprogram in `Decls' in `Put_Val'. In fact there is - such a call in this example, but we would have to assume that - there was such a call even if it were not there, since we are not - supposed to write the body of `Decls' knowing what is in the body - of `Utils'; certainly in the case of the static elaboration model, - the compiler does not know what is in other bodies and must assume - the worst. - - 5. This means that the spec and body of `Decls' must also be - elaborated before we elaborate the unit containing the call, but - that unit is `Decls'! This means that the body of `Decls' must be - elaborated before itself, and that's a circularity. - - Indeed, if you add an explicit pragma Elaborate_All for `Utils' in the - body of `Decls' you will get a true Ada Reference Manual circularity - that makes the program illegal. - - In practice, we have found that problems with the static model of - elaboration in existing code often arise from library tasks, so we must - address this particular situation. - - Note that if we compile and run the program above, using the dynamic - model of elaboration (that is to say use the `/CHECKS=ELABORATION' - qualifier), then it compiles, binds, links, and runs, printing the - expected result of 2. Therefore in some sense the circularity here is - only apparent, and we need to capture the properties of this program - that distinguish it from other library-level tasks that have real - elaboration problems. - - We have four possible answers to this question: - - * Use the dynamic model of elaboration. - - If we use the `/CHECKS=ELABORATION' qualifier, then as noted - above, the program works. Why is this? If we examine the task - body, it is apparent that the task cannot proceed past the - `accept' statement until after elaboration has been completed, - because the corresponding entry call comes from the main program, - not earlier. This is why the dynamic model works here. But that's - really giving up on a precise analysis, and we prefer to take this - approach only if we cannot solve the problem in any other manner. - So let us examine two ways to reorganize the program to avoid the - potential elaboration problem. - - * Split library tasks into separate packages. - - Write separate packages, so that library tasks are isolated from - other declarations as much as possible. Let us look at a variation - on the above program. - - package Decls1 is - task Lib_Task is - entry Start; - end Lib_Task; - end Decls1; - - with Utils; - package body Decls1 is - task body Lib_Task is - begin - accept Start; - Utils.Put_Val (2); - end Lib_Task; - end Decls1; - - package Decls2 is - type My_Int is new Integer; - function Ident (M : My_Int) return My_Int; - end Decls2; - - with Utils; - package body Decls2 is - function Ident (M : My_Int) return My_Int is - begin - return M; - end Ident; - end Decls2; - - with Decls2; - package Utils is - procedure Put_Val (Arg : Decls2.My_Int); - end Utils; - - with Text_IO; - package body Utils is - procedure Put_Val (Arg : Decls2.My_Int) is - begin - Text_IO.Put_Line (Decls2.My_Int'Image (Decls2.Ident (Arg))); - end Put_Val; - end Utils; - - with Decls1; - procedure Main is - begin - Decls1.Lib_Task.Start; - end; - - All we have done is to split `Decls' into two packages, one - containing the library task, and one containing everything else. - Now there is no cycle, and the program compiles, binds, links and - executes using the default static model of elaboration. - - * Declare separate task types. - - A significant part of the problem arises because of the use of the - single task declaration form. This means that the elaboration of - the task type, and the elaboration of the task itself (i.e. the - creation of the task) happen at the same time. A good rule of - style in Ada 95 is to always create explicit task types. By - following the additional step of placing task objects in separate - packages from the task type declaration, many elaboration problems - are avoided. Here is another modified example of the example - program: - - package Decls is - task type Lib_Task_Type is - entry Start; - end Lib_Task_Type; - - type My_Int is new Integer; - - function Ident (M : My_Int) return My_Int; - end Decls; - - with Utils; - package body Decls is - task body Lib_Task_Type is - begin - accept Start; - Utils.Put_Val (2); - end Lib_Task_Type; - - function Ident (M : My_Int) return My_Int is - begin - return M; - end Ident; - end Decls; - - with Decls; - package Utils is - procedure Put_Val (Arg : Decls.My_Int); - end Utils; - - with Text_IO; - package body Utils is - procedure Put_Val (Arg : Decls.My_Int) is - begin - Text_IO.Put_Line (Decls.My_Int'Image (Decls.Ident (Arg))); - end Put_Val; - end Utils; - - with Decls; - package Declst is - Lib_Task : Decls.Lib_Task_Type; - end Declst; - - with Declst; - procedure Main is - begin - Declst.Lib_Task.Start; - end; - - What we have done here is to replace the `task' declaration in - package `Decls' with a `task type' declaration. Then we introduce - a separate package `Declst' to contain the actual task object. - This separates the elaboration issues for the `task type' - declaration, which causes no trouble, from the elaboration issues - of the task object, which is also unproblematic, since it is now - independent of the elaboration of `Utils'. This separation of - concerns also corresponds to a generally sound engineering - principle of separating declarations from instances. This version - of the program also compiles, binds, links, and executes, - generating the expected output. - - * Use No_Entry_Calls_In_Elaboration_Code restriction. - - The previous two approaches described how a program can be - restructured to avoid the special problems caused by library task - bodies. in practice, however, such restructuring may be difficult - to apply to existing legacy code, so we must consider solutions - that do not require massive rewriting. - - Let us consider more carefully why our original sample program - works under the dynamic model of elaboration. The reason is that - the code in the task body blocks immediately on the `accept' - statement. Now of course there is nothing to prohibit elaboration - code from making entry calls (for example from another library - level task), so we cannot tell in isolation that the task will not - execute the accept statement during elaboration. - - However, in practice it is very unusual to see elaboration code - make any entry calls, and the pattern of tasks starting at - elaboration time and then immediately blocking on `accept' or - `select' statements is very common. What this means is that the - compiler is being too pessimistic when it analyzes the whole - package body as though it might be executed at elaboration time. - - If we know that the elaboration code contains no entry calls, (a - very safe assumption most of the time, that could almost be made - the default behavior), then we can compile all units of the - program under control of the following configuration pragma: - - pragma Restrictions (No_Entry_Calls_In_Elaboration_Code); - - This pragma can be placed in the `GNAT.ADC' file in the usual - manner. If we take our original unmodified program and compile it - in the presence of a `GNAT.ADC' containing the above pragma, then - once again, we can compile, bind, link, and execute, obtaining the - expected result. In the presence of this pragma, the compiler does - not trace calls in a task body, that appear after the first - `accept' or `select' statement, and therefore does not report a - potential circularity in the original program. - - The compiler will check to the extent it can that the above - restriction is not violated, but it is not always possible to do a - complete check at compile time, so it is important to use this - pragma only if the stated restriction is in fact met, that is to - say no task receives an entry call before elaboration of all units - is completed. - - -  - File: gnat_ug_vms.info, Node: Mixing Elaboration Models, Next: What to Do If the Default Elaboration Behavior Fails, Prev: Elaboration Issues for Library Tasks, Up: Elaboration Order Handling in GNAT - - Mixing Elaboration Models - ========================= - - So far, we have assumed that the entire program is either compiled - using the dynamic model or static model, ensuring consistency. It is - possible to mix the two models, but rules have to be followed if this - mixing is done to ensure that elaboration checks are not omitted. - - The basic rule is that _a unit compiled with the static model cannot - be `with'ed' by a unit compiled with the dynamic model_. The reason for - this is that in the static model, a unit assumes that its clients - guarantee to use (the equivalent of) pragma `Elaborate_All' so that no - elaboration checks are required in inner subprograms, and this - assumption is violated if the client is compiled with dynamic checks. - - The precise rule is as follows. A unit that is compiled with dynamic - checks can only `with' a unit that meets at least one of the following - criteria: - - * The `with'ed' unit is itself compiled with dynamic elaboration - checks (that is with the `/CHECKS=ELABORATION' qualifier. - - * The `with'ed' unit is an internal GNAT implementation unit from - the System, Interfaces, Ada, or GNAT hierarchies. - - * The `with'ed' unit has pragma Preelaborate or pragma Pure. - - * The `with'ing' unit (that is the client) has an explicit pragma - `Elaborate_All' for the `with'ed' unit. - - - If this rule is violated, that is if a unit with dynamic elaboration - checks `with's' a unit that does not meet one of the above four - criteria, then the binder (`GNAT BIND') will issue a warning similar to - that in the following example: - - warning: "X.ADS" has dynamic elaboration checks and with's - warning: "Y.ADS" which has static elaboration checks - - These warnings indicate that the rule has been violated, and that as a - result elaboration checks may be missed in the resulting executable - file. This warning may be suppressed using the `-ws' binder qualifier - in the usual manner. - - One useful application of this mixing rule is in the case of a - subsystem which does not itself `with' units from the remainder of the - application. In this case, the entire subsystem can be compiled with - dynamic checks to resolve a circularity in the subsystem, while - allowing the main application that uses this subsystem to be compiled - using the more reliable default static model. - -  - File: gnat_ug_vms.info, Node: What to Do If the Default Elaboration Behavior Fails, Next: Elaboration for Access-to-Subprogram Values, Prev: Mixing Elaboration Models, Up: Elaboration Order Handling in GNAT - - What to Do If the Default Elaboration Behavior Fails - ==================================================== - - If the binder cannot find an acceptable order, it outputs detailed - diagnostics. For example: - error: elaboration circularity detected - info: "proc (body)" must be elaborated before "pack (body)" - info: reason: Elaborate_All probably needed in unit "pack (body)" - info: recompile "pack (body)" with /WARNINGS=ELABORATION - info: for full details - info: "proc (body)" - info: is needed by its spec: - info: "proc (spec)" - info: which is withed by: - info: "pack (body)" - info: "pack (body)" must be elaborated before "proc (body)" - info: reason: pragma Elaborate in unit "proc (body)" - - - In this case we have a cycle that the binder cannot break. On the one - hand, there is an explicit pragma Elaborate in `proc' for `pack'. This - means that the body of `pack' must be elaborated before the body of - `proc'. On the other hand, there is elaboration code in `pack' that - calls a subprogram in `proc'. This means that for maximum safety, there - should really be a pragma Elaborate_All in `pack' for `proc' which - would require that the body of `proc' be elaborated before the body of - `pack'. Clearly both requirements cannot be satisfied. Faced with a - circularity of this kind, you have three different options. - - Fix the program - The most desirable option from the point of view of long-term - maintenance is to rearrange the program so that the elaboration - problems are avoided. One useful technique is to place the - elaboration code into separate child packages. Another is to move - some of the initialization code to explicitly called subprograms, - where the program controls the order of initialization explicitly. - Although this is the most desirable option, it may be impractical - and involve too much modification, especially in the case of - complex legacy code. - - Perform dynamic checks - If the compilations are done using the `/CHECKS=ELABORATION' - (dynamic elaboration check) qualifier, then GNAT behaves in a - quite different manner. Dynamic checks are generated for all calls - that could possibly result in raising an exception. With this - qualifier, the compiler does not generate implicit `Elaborate_All' - pragmas. The behavior then is exactly as specified in the Ada 95 - Reference Manual. The binder will generate an executable program - that may or may not raise `Program_Error', and then it is the - programmer's job to ensure that it does not raise an exception. - Note that it is important to compile all units with the qualifier, - it cannot be used selectively. - - Suppress checks - The drawback of dynamic checks is that they generate a significant - overhead at run time, both in space and time. If you are - absolutely sure that your program cannot raise any elaboration - exceptions, and you still want to use the dynamic elaboration - model, then you can use the configuration pragma `Suppress - (Elaboration_Checks)' to suppress all such checks. For example - this pragma could be placed in the `GNAT.ADC' file. - - Suppress checks selectively - When you know that certain calls in elaboration code cannot - possibly lead to an elaboration error, and the binder nevertheless - generates warnings on those calls and inserts Elaborate_All - pragmas that lead to elaboration circularities, it is possible to - remove those warnings locally and obtain a program that will bind. - Clearly this can be unsafe, and it is the responsibility of the - programmer to make sure that the resulting program has no - elaboration anomalies. The pragma `Suppress (Elaboration_Check)' - can be used with different granularity to suppress warnings and - break elaboration circularities: - - * Place the pragma that names the called subprogram in the - declarative part that contains the call. - - * Place the pragma in the declarative part, without naming an - entity. This disables warnings on all calls in the - corresponding declarative region. - - * Place the pragma in the package spec that declares the called - subprogram, and name the subprogram. This disables warnings - on all elaboration calls to that subprogram. - - * Place the pragma in the package spec that declares the called - subprogram, without naming any entity. This disables warnings - on all elaboration calls to all subprograms declared in this - spec. - - These four cases are listed in order of decreasing safety, and - therefore require increasing programmer care in their application. - Consider the following program: - - package Pack1 is - function F1 return Integer; - X1 : Integer; - end Pack1; - - package Pack2 is - function F2 return Integer; - function Pure (x : integer) return integer; - -- pragma Suppress (Elaboration_Check, On => Pure); -- (3) - -- pragma Suppress (Elaboration_Check); -- (4) - end Pack2; - - with Pack2; - package body Pack1 is - function F1 return Integer is - begin - return 100; - end F1; - Val : integer := Pack2.Pure (11); -- Elab. call (1) - begin - declare - -- pragma Suppress(Elaboration_Check, Pack2.F2); -- (1) - -- pragma Suppress(Elaboration_Check); -- (2) - begin - X1 := Pack2.F2 + 1; -- Elab. call (2) - end; - end Pack1; - - with Pack1; - package body Pack2 is - function F2 return Integer is - begin - return Pack1.F1; - end F2; - function Pure (x : integer) return integer is - begin - return x ** 3 - 3 * x; - end; - end Pack2; - - with Pack1, Ada.Text_IO; - procedure Proc3 is - begin - Ada.Text_IO.Put_Line(Pack1.X1'Img); -- 101 - end Proc3; - In the absence of any pragmas, an attempt to bind this program - produces the following diagnostics: - error: elaboration circularity detected - info: "pack1 (body)" must be elaborated before "pack1 (body)" - info: reason: Elaborate_All probably needed in unit "pack1 (body)" - info: recompile "pack1 (body)" with /WARNINGS=ELABORATION for full details - info: "pack1 (body)" - info: must be elaborated along with its spec: - info: "pack1 (spec)" - info: which is withed by: - info: "pack2 (body)" - info: which must be elaborated along with its spec: - info: "pack2 (spec)" - info: which is withed by: - info: "pack1 (body)" - The sources of the circularity are the two calls to - `Pack2.Pure' and `Pack2.F2' in the body of `Pack1'. We can see - that the call to F2 is safe, even though F2 calls F1, because the - call appears after the elaboration of the body of F1. Therefore - the pragma (1) is safe, and will remove the warning on the call. - It is also possible to use pragma (2) because there are no other - potentially unsafe calls in the block. - - The call to `Pure' is safe because this function does not depend - on the state of `Pack2'. Therefore any call to this function is - safe, and it is correct to place pragma (3) in the corresponding - package spec. - - Finally, we could place pragma (4) in the spec of `Pack2' to - disable warnings on all calls to functions declared therein. Note - that this is not necessarily safe, and requires more detailed - examination of the subprogram bodies involved. In particular, a - call to `F2' requires that `F1' be already elaborated. - - It is hard to generalize on which of these four approaches should be - taken. Obviously if it is possible to fix the program so that the - default treatment works, this is preferable, but this may not always be - practical. It is certainly simple enough to use `/CHECKS=ELABORATION' - but the danger in this case is that, even if the GNAT binder finds a - correct elaboration order, it may not always do so, and certainly a - binder from another Ada compiler might not. A combination of testing - and analysis (for which the warnings generated with the - `/WARNINGS=ELABORATION' qualifier can be useful) must be used to ensure - that the program is free of errors. One qualifier that is useful in - this testing is the `/PESSIMISTIC_ELABORATION_ORDER' qualifier for - `GNAT BIND'. Normally the binder tries to find an order that has the - best chance of of avoiding elaboration problems. With this qualifier, - the binder plays a devil's advocate role, and tries to choose the order - that has the best chance of failing. If your program works even with - this qualifier, then it has a better chance of being error free, but - this is still not a guarantee. - - For an example of this approach in action, consider the C-tests - (executable tests) from the ACVC suite. If these are compiled and run - with the default treatment, then all but one of them succeed without - generating any error diagnostics from the binder. However, there is one - test that fails, and this is not surprising, because the whole point of - this test is to ensure that the compiler can handle cases where it is - impossible to determine a correct order statically, and it checks that - an exception is indeed raised at run time. - - This one test must be compiled and run using the - `/CHECKS=ELABORATION' qualifier, and then it passes. Alternatively, the - entire suite can be run using this qualifier. It is never wrong to run - with the dynamic elaboration qualifier if your code is correct, and we - assume that the C-tests are indeed correct (it is less efficient, but - efficiency is not a factor in running the ACVC tests.) - -  - File: gnat_ug_vms.info, Node: Elaboration for Access-to-Subprogram Values, Next: Summary of Procedures for Elaboration Control, Prev: What to Do If the Default Elaboration Behavior Fails, Up: Elaboration Order Handling in GNAT - - Elaboration for Access-to-Subprogram Values - =========================================== - - The introduction of access-to-subprogram types in Ada 95 complicates - the handling of elaboration. The trouble is that it becomes impossible - to tell at compile time which procedure is being called. This means - that it is not possible for the binder to analyze the elaboration - requirements in this case. - - If at the point at which the access value is created (i.e., the - evaluation of `P'Access' for a subprogram `P'), the body of the - subprogram is known to have been elaborated, then the access value is - safe, and its use does not require a check. This may be achieved by - appropriate arrangement of the order of declarations if the subprogram - is in the current unit, or, if the subprogram is in another unit, by - using pragma `Pure', `Preelaborate', or `Elaborate_Body' on the - referenced unit. - - If the referenced body is not known to have been elaborated at the - point the access value is created, then any use of the access value - must do a dynamic check, and this dynamic check will fail and raise a - `Program_Error' exception if the body has not been elaborated yet. - GNAT will generate the necessary checks, and in addition, if the - `/WARNINGS=ELABORATION' qualifier is set, will generate warnings that - such checks are required. - - The use of dynamic dispatching for tagged types similarly generates - a requirement for dynamic checks, and premature calls to any primitive - operation of a tagged type before the body of the operation has been - elaborated, will result in the raising of `Program_Error'. - -  - File: gnat_ug_vms.info, Node: Summary of Procedures for Elaboration Control, Next: Other Elaboration Order Considerations, Prev: Elaboration for Access-to-Subprogram Values, Up: Elaboration Order Handling in GNAT - - Summary of Procedures for Elaboration Control - ============================================= - - First, compile your program with the default options, using none of the - special elaboration control qualifiers. If the binder successfully - binds your program, then you can be confident that, apart from issues - raised by the use of access-to-subprogram types and dynamic dispatching, - the program is free of elaboration errors. If it is important that the - program be portable, then use the `/WARNINGS=ELABORATION' qualifier to - generate warnings about missing `Elaborate_All' pragmas, and supply the - missing pragmas. - - If the program fails to bind using the default static elaboration - handling, then you can fix the program to eliminate the binder message, - or recompile the entire program with the `/CHECKS=ELABORATION' - qualifier to generate dynamic elaboration checks, and, if you are sure - there really are no elaboration problems, use a global pragma `Suppress - (Elaboration_Checks)'. - -  - File: gnat_ug_vms.info, Node: Other Elaboration Order Considerations, Prev: Summary of Procedures for Elaboration Control, Up: Elaboration Order Handling in GNAT - - Other Elaboration Order Considerations - ====================================== - - This section has been entirely concerned with the issue of finding a - valid elaboration order, as defined by the Ada Reference Manual. In a - case where several elaboration orders are valid, the task is to find one - of the possible valid elaboration orders (and the static model in GNAT - will ensure that this is achieved). - - The purpose of the elaboration rules in the Ada Reference Manual is - to make sure that no entity is accessed before it has been elaborated. - For a subprogram, this means that the spec and body must have been - elaborated before the subprogram is called. For an object, this means - that the object must have been elaborated before its value is read or - written. A violation of either of these two requirements is an access - before elaboration order, and this section has been all about avoiding - such errors. - - In the case where more than one order of elaboration is possible, in - the sense that access before elaboration errors are avoided, then any - one of the orders is "correct" in the sense that it meets the - requirements of the Ada Reference Manual, and no such error occurs. - - However, it may be the case for a given program, that there are - constraints on the order of elaboration that come not from consideration - of avoiding elaboration errors, but rather from extra-lingual logic - requirements. Consider this example: - - with Init_Constants; - package Constants is - X : Integer := 0; - Y : Integer := 0; - end Constants; - - package Init_Constants is - procedure Calc; - end Init_Constants; - - with Constants; - package body Init_Constants is - procedure Calc is begin null; end; - begin - Constants.X := 3; - Constants.Y := 4; - end Init_Constants; - - with Constants; - package Calc is - Z : Integer := Constants.X + Constants.Y; - end Calc; - - with Calc; - with Text_IO; use Text_IO; - procedure Main is - begin - Put_Line (Calc.Z'Img); - end Main; - - In this example, there is more than one valid order of elaboration. For - example both the following are correct orders: - - Init_Constants spec - Constants spec - Calc spec - Main body - Init_Constants body - - and - - Init_Constants spec - Init_Constants body - Constants spec - Calc spec - Main body - - There is no language rule to prefer one or the other, both are correct - from an order of elaboration point of view. But the programmatic effects - of the two orders are very different. In the first, the elaboration - routine of `Calc' initializes `Z' to zero, and then the main program - runs with this value of zero. But in the second order, the elaboration - routine of `Calc' runs after the body of Init_Constants has set `X' and - `Y' and thus `Z' is set to 7 before `Main' runs. - - One could perhaps by applying pretty clever non-artificial - intelligence to the situation guess that it is more likely that the - second order of elaboration is the one desired, but there is no formal - linguistic reason to prefer one over the other. In fact in this - particular case, GNAT will prefer the second order, because of the rule - that bodies are elaborated as soon as possible, but it's just luck that - this is what was wanted (if indeed the second order was preferred). - - If the program cares about the order of elaboration routines in a - case like this, it is important to specify the order required. In this - particular case, that could have been achieved by adding to the spec of - Calc: - - pragma Elaborate_All (Constants); - - which requires that the body (if any) and spec of `Constants', as well - as the body and spec of any unit `with''ed by `Constants' be elaborated - before `Calc' is elaborated. - - Clearly no automatic method can always guess which alternative you - require, and if you are working with legacy code that had constraints - of this kind which were not properly specified by adding `Elaborate' or - `Elaborate_All' pragmas, then indeed it is possible that two different - compilers can choose different orders. - - The `GNAT BIND' `/PESSIMISTIC_ELABORATION' qualifier may be useful - in smoking out problems. This qualifier causes bodies to be elaborated - as late as possible instead of as early as possible. In the example - above, it would have forced the choice of the first elaboration order. - If you get different results when using this qualifier, and - particularly if one set of results is right, and one is wrong as far as - you are concerned, it shows that you have some missing `Elaborate' - pragmas. For the example above, we have the following output: - - GNAT MAKE -f -q main - main - 7 - GNAT MAKE -f -q main /BINDER_QUALIFIERS -p - main - 0 - - It is of course quite unlikely that both these results are correct, so - it is up to you in a case like this to investigate the source of the - difference, by looking at the two elaboration orders that are chosen, - and figuring out which is correct, and then adding the necessary - `Elaborate_All' pragmas to ensure the desired order. - -  - File: gnat_ug_vms.info, Node: The Cross-Referencing Tools GNAT XREF and GNAT FIND, Next: File Name Krunching Using GNAT KRUNCH, Prev: Elaboration Order Handling in GNAT, Up: Top - - The Cross-Referencing Tools `GNAT XREF' and `GNAT FIND' - ******************************************************* - - The compiler generates cross-referencing information (unless you set - the `/XREF=SUPPRESS' qualifier), which are saved in the `.ALI' files. - This information indicates where in the source each entity is declared - and referenced. Note that entities in package Standard are not - included, but entities in all other predefined units are included in - the output. - - Before using any of these two tools, you need to compile - successfully your application, so that GNAT gets a chance to generate - the cross-referencing information. - - The two tools `GNAT XREF' and `GNAT FIND' take advantage of this - information to provide the user with the capability to easily locate the - declaration and references to an entity. These tools are quite similar, - the difference being that `GNAT FIND' is intended for locating - definitions and/or references to a specified entity or entities, whereas - `GNAT XREF' is oriented to generating a full report of all - cross-references. - - To use these tools, you must not compile your application using the - `/XREF=SUPPRESS' qualifier on the `GNAT MAKE' command line (*note - (gnat_ug)The GNAT Make Program GNAT MAKE::). Otherwise, - cross-referencing information will not be generated. - - * Menu: - - * GNAT XREF Qualifiers:: - * GNAT FIND Qualifiers:: - * Project Files for GNAT XREF and GNAT FIND:: - * Regular Expressions in GNAT FIND and GNAT XREF:: - * Examples of GNAT XREF Usage:: - * Examples of GNAT FIND Usage:: - -  - File: gnat_ug_vms.info, Node: GNAT XREF Qualifiers, Next: GNAT FIND Qualifiers, Up: The Cross-Referencing Tools GNAT XREF and GNAT FIND - - `GNAT XREF' Qualifiers - ====================== - - The command lines for `GNAT XREF' is: - $ GNAT XREF [qualifiers] sourcefile1 [sourcefile2 ...] - - where - - `sourcefile1, sourcefile2' - identifies the source files for which a report is to be generated. - The 'with'ed units will be processed too. You must provide at - least one file. - - These file names are considered to be regular expressions, so for - instance specifying 'source*.ADB' is the same as giving every file - in the current directory whose name starts with 'source' and whose - extension is 'adb'. - - The qualifiers can be : - `/ALL_FILES' - If this qualifier is present, `GNAT FIND' and `GNAT XREF' will - parse the read-only files found in the library search path. - Otherwise, these files will be ignored. This option can be used to - protect Gnat sources or your own libraries from being parsed, thus - making `GNAT FIND' and `GNAT XREF' much faster, and their output - much smaller. - - `/SOURCE_SEARCH=direc' - When looking for source files also look in directory DIR. The - order in which source file search is undertaken is the same as for - `GNAT MAKE'. - - `/OBJECT_SEARCH=direc' - When searching for library and object files, look in directory - DIR. The order in which library files are searched is the same as - for `GNAT MAKE'. - - `/NOSTD_INCLUDES' - Do not look for sources in the system default directory. - - `/NOSTD_LIBRARIES' - Do not look for library files in the system default directory. - - `/RUNTIME_SYSTEM=RTS-PATH' - Specifies the default location of the runtime library. Same - meaning as the equivalent `GNAT MAKE' flag (see *Note Qualifiers - for GNAT MAKE::). - - `-d' - If this qualifier is set `GNAT XREF' will output the parent type - reference for each matching derived types. - - `/FULL_PATHNAME' - If this qualifier is set, the output file names will be preceded - by their directory (if the file was found in the search path). If - this qualifier is not set, the directory will not be printed. - - `/IGNORE_LOCALS' - If this qualifier is set, information is output only for - library-level entities, ignoring local entities. The use of this - qualifier may accelerate `GNAT FIND' and `GNAT XREF'. - - `/SEARCH=direc' - Equivalent to `/OBJECT_SEARCH=direc /SOURCE_SEARCH=direc'. - - `/PROJECT=file' - Specify a project file to use *Note Project Files::. By default, - `GNAT XREF' and `GNAT FIND' will try to locate a project file in - the current directory. - - If a project file is either specified or found by the tools, then - the content of the source directory and object directory lines are - added as if they had been specified respectively by - `/SOURCE_SEARCH' and `OBJECT_SEARCH'. - - `/UNUSED' - Output only unused symbols. This may be really useful if you give - your main compilation unit on the command line, as `GNAT XREF' - will then display every unused entity and 'with'ed package. - - All these qualifiers may be in any order on the command line, and - may even appear after the file names. They need not be separated by - spaces, thus you can say `GNAT XREF /ALL_FILES/IGNORE_LOCALS' instead of - `GNAT XREF /ALL_FILES /IGNORE_LOCALS'. - -  - File: gnat_ug_vms.info, Node: GNAT FIND Qualifiers, Next: Project Files for GNAT XREF and GNAT FIND, Prev: GNAT XREF Qualifiers, Up: The Cross-Referencing Tools GNAT XREF and GNAT FIND - - `GNAT FIND' Qualifiers - ====================== - - The command line for `GNAT FIND' is: - - $ GNAT FIND [qualifiers] pattern[:sourcefile[:line[:column]]] - [file1 file2 ...] - - where - - `pattern' - An entity will be output only if it matches the regular expression - found in `pattern', see *Note Regular Expressions in GNAT FIND and - GNAT XREF::. - - Omitting the pattern is equivalent to specifying `*', which will - match any entity. Note that if you do not provide a pattern, you - have to provide both a sourcefile and a line. - - Entity names are given in Latin-1, with uppercase/lowercase - equivalence for matching purposes. At the current time there is no - support for 8-bit codes other than Latin-1, or for wide characters - in identifiers. - - `sourcefile' - `GNAT FIND' will look for references, bodies or declarations of - symbols referenced in `sourcefile', at line `line' and column - `column'. See *note Examples of GNAT FIND Usage:: for syntax - examples. - - `line' - is a decimal integer identifying the line number containing the - reference to the entity (or entities) to be located. - - `column' - is a decimal integer identifying the exact location on the line of - the first character of the identifier for the entity reference. - Columns are numbered from 1. - - `file1 file2 ...' - The search will be restricted to these files. If none are given, - then the search will be done for every library file in the search - path. These file must appear only after the pattern or sourcefile. - - These file names are considered to be regular expressions, so for - instance specifying 'source*.ADB' is the same as giving every file - in the current directory whose name starts with 'source' and whose - extension is 'adb'. - - Not that if you specify at least one file in this part, `GNAT - FIND' may sometimes not be able to find the body of the - subprograms... - - At least one of 'sourcefile' or 'pattern' has to be present on the - command line. - - The following qualifiers are available: - `/ALL_FILES' - If this qualifier is present, `GNAT FIND' and `GNAT XREF' will - parse the read-only files found in the library search path. - Otherwise, these files will be ignored. This option can be used to - protect Gnat sources or your own libraries from being parsed, thus - making `GNAT FIND' and `GNAT XREF' much faster, and their output - much smaller. - - `/SOURCE_SEARCH=direc' - When looking for source files also look in directory DIR. The - order in which source file search is undertaken is the same as for - `GNAT MAKE'. - - `/OBJECT_SEARCH=direc' - When searching for library and object files, look in directory - DIR. The order in which library files are searched is the same as - for `GNAT MAKE'. - - `/NOSTD_INCLUDES' - Do not look for sources in the system default directory. - - `/NOSTD_LIBRARIES' - Do not look for library files in the system default directory. - - `/RUNTIME_SYSTEM=RTS-PATH' - Specifies the default location of the runtime library. Same - meaning as the equivalent `GNAT MAKE' flag (see *Note Qualifiers - for GNAT MAKE::). - - `-d' - If this qualifier is set, then `GNAT FIND' will output the parent - type reference for each matching derived types. - - `/EXPRESSIONS' - By default, `GNAT FIND' accept the simple regular expression set - for `pattern'. If this qualifier is set, then the pattern will be - considered as full Unix-style regular expression. - - `/FULL_PATHNAME' - If this qualifier is set, the output file names will be preceded - by their directory (if the file was found in the search path). If - this qualifier is not set, the directory will not be printed. - - `/IGNORE_LOCALS' - If this qualifier is set, information is output only for - library-level entities, ignoring local entities. The use of this - qualifier may accelerate `GNAT FIND' and `GNAT XREF'. - - `/SEARCH=direc' - Equivalent to `/OBJECT_SEARCH=direc /SOURCE_SEARCH=direc'. - - `/PROJECT=file' - Specify a project file (*note Project Files::) to use. By - default, `GNAT XREF' and `GNAT FIND' will try to locate a project - file in the current directory. - - If a project file is either specified or found by the tools, then - the content of the source directory and object directory lines are - added as if they had been specified respectively by - `/SOURCE_SEARCH' and `/OBJECT_SEARCH'. - - `/REFERENCES' - By default, `GNAT FIND' will output only the information about the - declaration, body or type completion of the entities. If this - qualifier is set, the `GNAT FIND' will locate every reference to - the entities in the files specified on the command line (or in - every file in the search path if no file is given on the command - line). - - `/PRINT_LINES' - If this qualifier is set, then `GNAT FIND' will output the content - of the Ada source file lines were the entity was found. - - `-t' - If this qualifier is set, then `GNAT FIND' will output the type - hierarchy for the specified type. It act like -d option but - recursively from parent type to parent type. When this qualifier - is set it is not possible to specify more than one file. - - All these qualifiers may be in any order on the command line, and - may even appear after the file names. They need not be separated by - spaces, thus you can say `GNAT XREF /ALL_FILES/IGNORE_LOCALS' instead of - `GNAT XREF /ALL_FILES /IGNORE_LOCALS'. - - As stated previously, GNAT FIND will search in every directory in the - search path. You can force it to look only in the current directory if - you specify `*' at the end of the command line. - -  - File: gnat_ug_vms.info, Node: Project Files for GNAT XREF and GNAT FIND, Next: Regular Expressions in GNAT FIND and GNAT XREF, Prev: GNAT FIND Qualifiers, Up: The Cross-Referencing Tools GNAT XREF and GNAT FIND - - Project Files for `GNAT XREF' and `GNAT FIND' - ============================================= - - Project files allow a programmer to specify how to compile its - application, where to find sources,... These files are used primarily by - the Glide Ada mode, but they can also be used by the two tools `GNAT - XREF' and `GNAT FIND'. - - A project file name must end with `.adp'. If a single one is present - in the current directory, then `GNAT XREF' and `GNAT FIND' will extract - the information from it. If multiple project files are found, none of - them is read, and you have to use the `-p' qualifier to specify the one - you want to use. - - The following lines can be included, even though most of them have - default values which can be used in most cases. The lines can be - entered in any order in the file. Except for `src_dir' and `obj_dir', - you can only have one instance of each line. If you have multiple - instances, only the last one is taken into account. - - `src_dir=DIR [default: "[]"]' - specifies a directory where to look for source files. Multiple - src_dir lines can be specified and they will be searched in the - order they are specified. - - `obj_dir=DIR [default: "[]"]' - specifies a directory where to look for object and library files. - Multiple obj_dir lines can be specified and they will be searched - in the order they are specified - - `comp_opt=SWITCHES [default: ""]' - creates a variable which can be referred to subsequently by using - the `${comp_opt}' notation. This is intended to store the default - qualifiers given to `GNAT MAKE' and `GNAT COMPILE'. - - `bind_opt=SWITCHES [default: ""]' - creates a variable which can be referred to subsequently by using - the `${bind_opt}' notation. This is intended to store the default - qualifiers given to `GNAT BIND'. - - `link_opt=SWITCHES [default: ""]' - creates a variable which can be referred to subsequently by using - the `${link_opt}' notation. This is intended to store the default - qualifiers given to `GNAT LINK'. - - `main=EXECUTABLE [default: ""]' - specifies the name of the executable for the application. This - variable can be referred to in the following lines by using the - `${main}' notation. - - `comp_cmd=COMMAND [default: "GNAT COMPILE /SEARCH=${src_dir} /DEBUG /TRY_SEMANTICS"]' - specifies the command used to compile a single file in the - application. - - `make_cmd=COMMAND [default: "GNAT MAKE ${main} /SOURCE_SEARCH=${src_dir} /OBJECT_SEARCH=${obj_dir} /DEBUG /TRY_SEMANTICS /COMPILER_QUALIFIERS ${comp_opt} /BINDER_QUALIFIERS ${bind_opt} /LINKER_QUALIFIERS ${link_opt}"]' - specifies the command used to recompile the whole application. - - `run_cmd=COMMAND [default: "${main}"]' - specifies the command used to run the application. - - `debug_cmd=COMMAND [default: "GDB ${main}"]' - specifies the command used to debug the application - - `GNAT XREF' and `GNAT FIND' only take into account the `src_dir' and - `obj_dir' lines, and ignore the others. - -  - File: gnat_ug_vms.info, Node: Regular Expressions in GNAT FIND and GNAT XREF, Next: Examples of GNAT XREF Usage, Prev: Project Files for GNAT XREF and GNAT FIND, Up: The Cross-Referencing Tools GNAT XREF and GNAT FIND - - Regular Expressions in `GNAT FIND' and `GNAT XREF' - ================================================== - - As specified in the section about `GNAT FIND', the pattern can be a - regular expression. Actually, there are to set of regular expressions - which are recognized by the program : - - `globbing patterns' - These are the most usual regular expression. They are the same - that you generally used in a Unix shell command line, or in a DOS - session. - - Here is a more formal grammar : - regexp ::= term - term ::= elmt -- matches elmt - term ::= elmt elmt -- concatenation (elmt then elmt) - term ::= * -- any string of 0 or more characters - term ::= ? -- matches any character - term ::= [char {char}] -- matches any character listed - term ::= [char - char] -- matches any character in range - - `full regular expression' - The second set of regular expressions is much more powerful. This - is the type of regular expressions recognized by utilities such a - `grep'. - - The following is the form of a regular expression, expressed in Ada - reference manual style BNF is as follows - - regexp ::= term {| term} -- alternation (term or term ...) - - term ::= item {item} -- concatenation (item then item) - - item ::= elmt -- match elmt - item ::= elmt * -- zero or more elmt's - item ::= elmt + -- one or more elmt's - item ::= elmt ? -- matches elmt or nothing - elmt ::= nschar -- matches given character - elmt ::= [nschar {nschar}] -- matches any character listed - elmt ::= [^ nschar {nschar}] -- matches any character not listed - elmt ::= [char - char] -- matches chars in given range - elmt ::= \ char -- matches given character - elmt ::= . -- matches any single character - elmt ::= ( regexp ) -- parens used for grouping - - char ::= any character, including special characters - nschar ::= any character except ()[].*+?^ - - Following are a few examples : - - `abcde|fghi' - will match any of the two strings 'abcde' and 'fghi'. - - `abc*d' - will match any string like 'abd', 'abcd', 'abccd', 'abcccd', - and so on - - `[a-z]+' - will match any string which has only lowercase characters in - it (and at least one character - -  - File: gnat_ug_vms.info, Node: Examples of GNAT XREF Usage, Next: Examples of GNAT FIND Usage, Prev: Regular Expressions in GNAT FIND and GNAT XREF, Up: The Cross-Referencing Tools GNAT XREF and GNAT FIND - - Examples of `GNAT XREF' Usage - ============================= - - General Usage - ------------- - - For the following examples, we will consider the following units : - - MAIN.ADS: - 1: with Bar; - 2: package Main is - 3: procedure Foo (B : in Integer); - 4: C : Integer; - 5: private - 6: D : Integer; - 7: end Main; - - MAIN.ADB: - 1: package body Main is - 2: procedure Foo (B : in Integer) is - 3: begin - 4: C := B; - 5: D := B; - 6: Bar.Print (B); - 7: Bar.Print (C); - 8: end Foo; - 9: end Main; - - BAR.ADS: - 1: package Bar is - 2: procedure Print (B : Integer); - 3: end bar; - - The first thing to do is to recompile your application (for - instance, in that case just by doing a `GNAT MAKE main', so that - GNAT generates the cross-referencing information. You can then - issue any of the following commands: - - `GNAT XREF MAIN.ADB' - `GNAT XREF' generates cross-reference information for MAIN.ADB and - every unit 'with'ed by MAIN.ADB. - - The output would be: - B Type: Integer - Decl: BAR.ADS 2:22 - B Type: Integer - Decl: MAIN.ADS 3:20 - Body: MAIN.ADB 2:20 - Ref: MAIN.ADB 4:13 5:13 6:19 - Bar Type: Unit - Decl: BAR.ADS 1:9 - Ref: MAIN.ADB 6:8 7:8 - MAIN.ADS 1:6 - C Type: Integer - Decl: MAIN.ADS 4:5 - Modi: MAIN.ADB 4:8 - Ref: MAIN.ADB 7:19 - D Type: Integer - Decl: MAIN.ADS 6:5 - Modi: MAIN.ADB 5:8 - Foo Type: Unit - Decl: MAIN.ADS 3:15 - Body: MAIN.ADB 2:15 - Main Type: Unit - Decl: MAIN.ADS 2:9 - Body: MAIN.ADB 1:14 - Print Type: Unit - Decl: BAR.ADS 2:15 - Ref: MAIN.ADB 6:12 7:12 - - that is the entity `Main' is declared in MAIN.ADS, line 2, column - 9, its body is in MAIN.ADB, line 1, column 14 and is not - referenced any where. - - The entity `Print' is declared in BAR.ADS, line 2, column 15 and it - it referenced in MAIN.ADB, line 6 column 12 and line 7 column 12. - - `GNAT XREF PACKAGE1.ADB PACKAGE2.ADS' - `GNAT XREF' will generates cross-reference information for - PACKAGE1.ADB, PACKAGE2.ADS and any other package 'with'ed by any - of these. - -  - File: gnat_ug_vms.info, Node: Examples of GNAT FIND Usage, Prev: Examples of GNAT XREF Usage, Up: The Cross-Referencing Tools GNAT XREF and GNAT FIND - - Examples of `GNAT FIND' Usage - ============================= - - `GNAT FIND /FULL_PATHNAME xyz:MAIN.ADB' - Find declarations for all entities xyz referenced at least once in - MAIN.ADB. The references are search in every library file in the - search path. - - The directories will be printed as well (as the `/FULL_PATHNAME' - qualifier is set) - - The output will look like: - [directory]MAIN.ADS:106:14: xyz <= declaration - [directory]MAIN.ADB:24:10: xyz <= body - [directory]FOO.ADS:45:23: xyz <= declaration - - that is to say, one of the entities xyz found in MAIN.ADB is - declared at line 12 of MAIN.ADS (and its body is in MAIN.ADB), and - another one is declared at line 45 of FOO.ADS - - `GNAT FIND /FULL_PATHNAME/SOURCE_LINE xyz:MAIN.ADB' - This is the same command as the previous one, instead `GNAT FIND' - will display the content of the Ada source file lines. - - The output will look like: - - [directory]MAIN.ADS:106:14: xyz <= declaration - procedure xyz; - [directory]MAIN.ADB:24:10: xyz <= body - procedure xyz is - [directory]FOO.ADS:45:23: xyz <= declaration - xyz : Integer; - - This can make it easier to find exactly the location your are - looking for. - - `GNAT FIND /REFERENCES "*x*":MAIN.ADS:123 FOO.ADB' - Find references to all entities containing an x that are - referenced on line 123 of MAIN.ADS. The references will be - searched only in MAIN.ADB and FOO.ADB. - - `GNAT FIND MAIN.ADS:123' - Find declarations and bodies for all entities that are referenced - on line 123 of MAIN.ADS. - - This is the same as `GNAT FIND "*":MAIN.ADB:123'. - - `GNAT FIND [mydir]MAIN.ADB:123:45' - Find the declaration for the entity referenced at column 45 in - line 123 of file MAIN.ADB in directory mydir. Note that it is - usual to omit the identifier name when the column is given, since - the column position identifies a unique reference. - - The column has to be the beginning of the identifier, and should - not point to any character in the middle of the identifier. - -  - File: gnat_ug_vms.info, Node: File Name Krunching Using GNAT KRUNCH, Next: Preprocessing Using GNAT PREPROCESS, Prev: The Cross-Referencing Tools GNAT XREF and GNAT FIND, Up: Top - - File Name Krunching Using `GNAT KRUNCH' - *************************************** - - This chapter discusses the method used by the compiler to shorten the - default file names chosen for Ada units so that they do not exceed the - maximum length permitted. It also describes the `GNAT KRUNCH' utility - that can be used to determine the result of applying this shortening. - - * Menu: - - * About GNAT KRUNCH:: - * Using GNAT KRUNCH:: - * Krunching Method:: - * Examples of GNAT KRUNCH Usage:: - -  - File: gnat_ug_vms.info, Node: About GNAT KRUNCH, Next: Using GNAT KRUNCH, Up: File Name Krunching Using GNAT KRUNCH - - About `GNAT KRUNCH' - =================== - - The default file naming rule in GNAT is that the file name must be - derived from the unit name. The exact default rule is as follows: - * Take the unit name and replace all dots by hyphens. - - * If such a replacement occurs in the second character position of a - name, and the first character is A, G, S, or I then replace the - dot by the character $ (dollar sign) instead of a minus. - The reason for this exception is to avoid clashes with the standard - names for children of System, Ada, Interfaces, and GNAT, which use the - prefixes S- A- I- and G- respectively. - - The `/FILE_NAME_MAX_LENGTH=NN' qualifier of the compiler activates a - "krunching" circuit that limits file names to nn characters (where nn - is a decimal integer). For example, using OpenVMS, where the maximum - file name length is 39, the value of nn is usually set to 39, but if - you want to generate a set of files that would be usable if ported to a - system with some different maximum file length, then a different value - can be specified. The default value of 39 for OpenVMS need not be - specified. - - The `GNAT KRUNCH' utility can be used to determine the krunched name - for a given file, when krunched to a specified maximum length. - -  - File: gnat_ug_vms.info, Node: Using GNAT KRUNCH, Next: Krunching Method, Prev: About GNAT KRUNCH, Up: File Name Krunching Using GNAT KRUNCH - - Using `GNAT KRUNCH' - =================== - - The `GNAT KRUNCH' command has the form - - $ GNAT KRUNCH NAME /COUNT=nn - - NAME can be an Ada name with dots or the GNAT name of the unit, where - the dots representing child units or subunit are replaced by hyphens. - The only confusion arises if a name ends in `.ADS' or `.ADB'. `GNAT - KRUNCH' takes this to be an extension if there are no other dots in the - name. - - LENGTH represents the length of the krunched name. The default when - no argument is given is 39 characters. A length of zero stands for - unlimited, in other words do not chop except for system files which are - always 39. - - The output is the krunched name. The output has an extension only if the - original argument was a file name with an extension. - -  - File: gnat_ug_vms.info, Node: Krunching Method, Next: Examples of GNAT KRUNCH Usage, Prev: Using GNAT KRUNCH, Up: File Name Krunching Using GNAT KRUNCH - - Krunching Method - ================ - - The initial file name is determined by the name of the unit that the - file contains. The name is formed by taking the full expanded name of - the unit and replacing the separating dots with hyphens and using - uppercase for all letters, except that a hyphen in the second character - position is replaced by a dollar sign if the first character is A, I, - G, or S. The extension is `.ADS' for a specification and `.ADB' for a - body. Krunching does not affect the extension, but the file name is - shortened to the specified length by following these rules: - - * The name is divided into segments separated by hyphens, tildes or - underscores and all hyphens, tildes, and underscores are - eliminated. If this leaves the name short enough, we are done. - - * If the name is too long, the longest segment is located (left-most - if there are two of equal length), and shortened by dropping its - last character. This is repeated until the name is short enough. - - As an example, consider the krunching of - `OUR-STRINGS-WIDE_FIXED.ADB' to fit the name into 8 characters as - required by some operating systems. - - our-strings-wide_fixed 22 - our strings wide fixed 19 - our string wide fixed 18 - our strin wide fixed 17 - our stri wide fixed 16 - our stri wide fixe 15 - our str wide fixe 14 - our str wid fixe 13 - our str wid fix 12 - ou str wid fix 11 - ou st wid fix 10 - ou st wi fix 9 - ou st wi fi 8 - Final file name: OUSTWIFI.ADB - - * The file names for all predefined units are always krunched to - eight characters. The krunching of these predefined units uses the - following special prefix replacements: - - `ada-' - replaced by `A-' - - `gnat-' - replaced by `G-' - - `interfaces-' - replaced by `I-' - - `system-' - replaced by `S-' - - These system files have a hyphen in the second character position. - That is why normal user files replace such a character with a - dollar sign, to avoid confusion with system file names. - - As an example of this special rule, consider - `ADA-STRINGS-WIDE_FIXED.ADB', which gets krunched as follows: - - ada-strings-wide_fixed 22 - a- strings wide fixed 18 - a- string wide fixed 17 - a- strin wide fixed 16 - a- stri wide fixed 15 - a- stri wide fixe 14 - a- str wide fixe 13 - a- str wid fixe 12 - a- str wid fix 11 - a- st wid fix 10 - a- st wi fix 9 - a- st wi fi 8 - Final file name: A-STWIFI.ADB - - Of course no file shortening algorithm can guarantee uniqueness over - all possible unit names, and if file name krunching is used then it is - your responsibility to ensure that no name clashes occur. The utility - program `GNAT KRUNCH' is supplied for conveniently determining the - krunched name of a file. - -  - File: gnat_ug_vms.info, Node: Examples of GNAT KRUNCH Usage, Prev: Krunching Method, Up: File Name Krunching Using GNAT KRUNCH - - Examples of `GNAT KRUNCH' Usage - =============================== - - $ GNAT KRUNCH VERY_LONG_UNIT_NAME.ADS/count=6 --> VLUNNA.ADS - $ GNAT KRUNCH VERY_LONG_UNIT_NAME.ADS/count=0 --> VERY_LONG_UNIT_NAME.ADS - -  - File: gnat_ug_vms.info, Node: Preprocessing Using GNAT PREPROCESS, Next: The GNAT Run-Time Library Builder GNAT LIBRARY, Prev: File Name Krunching Using GNAT KRUNCH, Up: Top - - Preprocessing Using `GNAT PREPROCESS' - ************************************* - - The `GNAT PREPROCESS' utility provides a simple preprocessing - capability for Ada programs. It is designed for use with GNAT, but is - not dependent on any special features of GNAT. - - * Menu: - - * Using GNAT PREPROCESS:: - * Qualifiers for GNAT PREPROCESS:: - * Form of Definitions File:: - * Form of Input Text for GNAT PREPROCESS:: - -  - File: gnat_ug_vms.info, Node: Using GNAT PREPROCESS, Next: Qualifiers for GNAT PREPROCESS, Up: Preprocessing Using GNAT PREPROCESS - - Using `GNAT PREPROCESS' - ======================= - - To call `GNAT PREPROCESS' use - - $ GNAT PREPROCESS [-bcrsu] [-Dsymbol=value] infile outfile [deffile] - - where - `infile' - is the full name of the input file, which is an Ada source file - containing preprocessor directives. - - `outfile' - is the full name of the output file, which is an Ada source in - standard Ada form. When used with GNAT, this file name will - normally have an ads or adb suffix. - - `deffile' - is the full name of a text file containing definitions of symbols - to be referenced by the preprocessor. This argument is optional, - and can be replaced by the use of the `-D' qualifier. - - `qualifiers' - is an optional sequence of qualifiers as described in the next - section. - -  - File: gnat_ug_vms.info, Node: Qualifiers for GNAT PREPROCESS, Next: Form of Definitions File, Prev: Using GNAT PREPROCESS, Up: Preprocessing Using GNAT PREPROCESS - - Qualifiers for `GNAT PREPROCESS' - ================================ - - `/BLANK_LINES' - Causes both preprocessor lines and the lines deleted by - preprocessing to be replaced by blank lines in the output source - file, preserving line numbers in the output file. - - `/COMMENTS' - Causes both preprocessor lines and the lines deleted by - preprocessing to be retained in the output source as comments - marked with the special string "-! ". This option will result in - line numbers being preserved in the output file. - - `-Dsymbol=value' - Defines a new symbol, associated with value. If no value is given - on the command line, then symbol is considered to be `True'. This - qualifier can be used in place of a definition file. - - `/REMOVE (default)' - This is the default setting which causes lines deleted by - preprocessing to be entirely removed from the output file. - - `/REFERENCE' - Causes a `Source_Reference' pragma to be generated that references - the original input file, so that error messages will use the file - name of this original file. The use of this qualifier implies that - preprocessor lines are not to be removed from the file, so its use - will force `/BLANK_LINES' mode if `/COMMENTS' has not been - specified explicitly. - - Note that if the file to be preprocessed contains multiple units, - then it will be necessary to `GNAT CHOP' the output file from - `GNAT PREPROCESS'. If a `Source_Reference' pragma is present in - the preprocessed file, it will be respected by `GNAT CHOP - /REFERENCE' so that the final chopped files will correctly refer - to the original input source file for `GNAT PREPROCESS'. - - `/SYMBOLS' - Causes a sorted list of symbol names and values to be listed on - the standard output file. - - `/UNDEFINED' - Causes undefined symbols to be treated as having the value FALSE - in the context of a preprocessor test. In the absence of this - option, an undefined symbol in a `#if' or `#elsif' test will be - treated as an error. - -  - File: gnat_ug_vms.info, Node: Form of Definitions File, Next: Form of Input Text for GNAT PREPROCESS, Prev: Qualifiers for GNAT PREPROCESS, Up: Preprocessing Using GNAT PREPROCESS - - Form of Definitions File - ======================== - - The definitions file contains lines of the form - - symbol := value - - where symbol is an identifier, following normal Ada (case-insensitive) - rules for its syntax, and value is one of the following: - - * Empty, corresponding to a null substitution - - * A string literal using normal Ada syntax - - * Any sequence of characters from the set (letters, digits, period, - underline). - - Comment lines may also appear in the definitions file, starting with - the usual `--', and comments may be added to the definitions lines. - -  - File: gnat_ug_vms.info, Node: Form of Input Text for GNAT PREPROCESS, Prev: Form of Definitions File, Up: Preprocessing Using GNAT PREPROCESS - - Form of Input Text for `GNAT PREPROCESS' - ======================================== - - The input text may contain preprocessor conditional inclusion lines, as - well as general symbol substitution sequences. - - The preprocessor conditional inclusion commands have the form - - #if expression [then] - lines - #elsif expression [then] - lines - #elsif expression [then] - lines - ... - #else - lines - #end if; - - In this example, expression is defined by the following grammar: - expression ::= - expression ::= = "" - expression ::= = - expression ::= 'Defined - expression ::= not expression - expression ::= expression and expression - expression ::= expression or expression - expression ::= expression and then expression - expression ::= expression or else expression - expression ::= ( expression ) - - For the first test (expression ::= ) the symbol must have - either the value true or false, that is to say the right-hand of the - symbol definition must be one of the (case-insensitive) literals `True' - or `False'. If the value is true, then the corresponding lines are - included, and if the value is false, they are excluded. - - The test (expression ::= `'Defined') is true only if the - symbol has been defined in the definition file or by a `-D' qualifier - on the command line. Otherwise, the test is false. - - The equality tests are case insensitive, as are all the preprocessor - lines. - - If the symbol referenced is not defined in the symbol definitions - file, then the effect depends on whether or not qualifier `-u' is - specified. If so, then the symbol is treated as if it had the value - false and the test fails. If this qualifier is not specified, then it - is an error to reference an undefined symbol. It is also an error to - reference a symbol that is defined with a value other than `True' or - `False'. - - The use of the `not' operator inverts the sense of this logical - test, so that the lines are included only if the symbol is not defined. - The `then' keyword is optional as shown - - The `#' must be the first non-blank character on a line, but - otherwise the format is free form. Spaces or tabs may appear between - the `#' and the keyword. The keywords and the symbols are case - insensitive as in normal Ada code. Comments may be used on a - preprocessor line, but other than that, no other tokens may appear on a - preprocessor line. Any number of `elsif' clauses can be present, - including none at all. The `else' is optional, as in Ada. - - The `#' marking the start of a preprocessor line must be the first - non-blank character on the line, i.e. it must be preceded only by - spaces or horizontal tabs. - - Symbol substitution outside of preprocessor lines is obtained by - using the sequence - - $symbol - - anywhere within a source line, except in a comment or within a string - literal. The identifier following the `$' must match one of the symbols - defined in the symbol definition file, and the result is to substitute - the value of the symbol in place of `$symbol' in the output file. - - Note that although the substitution of strings within a string - literal is not possible, it is possible to have a symbol whose defined - value is a string literal. So instead of setting XYZ to `hello' and - writing: - - Header : String := "$XYZ"; - - you should set XYZ to `"hello"' and write: - - Header : String := $XYZ; - - and then the substitution will occur as desired. - -  - File: gnat_ug_vms.info, Node: The GNAT Run-Time Library Builder GNAT LIBRARY, Next: The GNAT Library Browser GNAT LIST, Prev: Preprocessing Using GNAT PREPROCESS, Up: Top - - The GNAT Run-Time Library Builder `GNAT LIBRARY' - ************************************************ - - `GNAT LIBRARY' is a tool for rebuilding the GNAT run time with user - supplied configuration pragmas. - - * Menu: - - * Running GNAT LIBRARY:: - * Qualifiers for GNAT LIBRARY:: - * Examples of GNAT LIBRARY Usage:: - -  - File: gnat_ug_vms.info, Node: Running GNAT LIBRARY, Next: Qualifiers for GNAT LIBRARY, Up: The GNAT Run-Time Library Builder GNAT LIBRARY - - Running `GNAT LIBRARY' - ====================== - - The `GNAT LIBRARY' command has the form - - $ GNAT LIBRARY /[CREATE | SET | DELETE]=directory [/CONFIG=file] - -  - File: gnat_ug_vms.info, Node: Qualifiers for GNAT LIBRARY, Next: Examples of GNAT LIBRARY Usage, Prev: Running GNAT LIBRARY, Up: The GNAT Run-Time Library Builder GNAT LIBRARY - - Qualifiers for `GNAT LIBRARY' - ============================= - - `GNAT LIBRARY' recognizes the following qualifiers: - - `/CREATE=directory' - Create the new run-time library in the specified directory. - - `/SET=directory' - Make the library in the specified directory the current run-time - library. - - `/DELETE=directory' - Delete the run-time library in the specified directory. - - `/CONFIG=file' - With /CREATE: Use the configuration pragmas in the specified - file when building the library. - - With /SET: Use the configuration pragmas in the specified - file when compiling. - -  - File: gnat_ug_vms.info, Node: Examples of GNAT LIBRARY Usage, Prev: Qualifiers for GNAT LIBRARY, Up: The GNAT Run-Time Library Builder GNAT LIBRARY - - Example of `GNAT LIBRARY' Usage - =============================== - - Contents of VAXFLOAT.ADC: - pragma Float_Representation (VAX_Float); - - $ GNAT LIBRARY /CREATE=[.VAXFLOAT] /CONFIG=VAXFLOAT.ADC - - GNAT LIBRARY rebuilds the run-time library in directory [.VAXFLOAT] - -  - File: gnat_ug_vms.info, Node: The GNAT Library Browser GNAT LIST, Next: Finding Memory Problems with GNAT Debug Pool, Prev: The GNAT Run-Time Library Builder GNAT LIBRARY, Up: Top - - The GNAT Library Browser `GNAT LIST' - ************************************ - - `GNAT LIST' is a tool that outputs information about compiled units. It - gives the relationship between objects, unit names and source files. It - can also be used to check the source dependencies of a unit as well as - various characteristics. - - * Menu: - - * Running GNAT LIST:: - * Qualifiers for GNAT LIST:: - * Examples of GNAT LIST Usage:: - -  - File: gnat_ug_vms.info, Node: Running GNAT LIST, Next: Qualifiers for GNAT LIST, Up: The GNAT Library Browser GNAT LIST - - Running `GNAT LIST' - =================== - - The `GNAT LIST' command has the form - - $ GNAT LIST qualifiers OBJECT_OR_ALI_FILE - - The main argument is the list of object or `ali' files (*note The Ada - Library Information Files::) for which information is requested. - - In normal mode, without additional option, `GNAT LIST' produces a - four-column listing. Each line represents information for a specific - object. The first column gives the full path of the object, the second - column gives the name of the principal unit in this object, the third - column gives the status of the source and the fourth column gives the - full path of the source representing this unit. Here is a simple - example of use: - - $ GNAT LIST *.OBJ - []DEMO1.OBJ demo1 DIF DEMO1.ADB - []DEMO2.OBJ demo2 OK DEMO2.ADB - []HELLO.OBJ h1 OK HELLO.ADB - []INSTR-CHILD.OBJ instr.child MOK INSTR-CHILD.ADB - []INSTR.OBJ instr OK INSTR.ADB - []TEF.OBJ tef DIF TEF.ADB - []TEXT_IO_EXAMPLE.OBJ text_io_example OK TEXT_IO_EXAMPLE.ADB - []TGEF.OBJ tgef DIF TGEF.ADB - - The first line can be interpreted as follows: the main unit which is - contained in object file `DEMO1.OBJ' is demo1, whose main source is in - `DEMO1.ADB'. Furthermore, the version of the source used for the - compilation of demo1 has been modified (DIF). Each source file has a - status qualifier which can be: - - `OK (unchanged)' - The version of the source file used for the compilation of the - specified unit corresponds exactly to the actual source file. - - `MOK (slightly modified)' - The version of the source file used for the compilation of the - specified unit differs from the actual source file but not enough - to require recompilation. If you use GNAT MAKE with the qualifier - `/MINIMAL_RECOMPILATION', a file marked MOK will not be recompiled. - - `DIF (modified)' - No version of the source found on the path corresponds to the - source used to build this object. - - `??? (file not found)' - No source file was found for this unit. - - `HID (hidden, unchanged version not first on PATH)' - The version of the source that corresponds exactly to the source - used for compilation has been found on the path but it is hidden - by another version of the same source that has been modified. - -  - File: gnat_ug_vms.info, Node: Qualifiers for GNAT LIST, Next: Examples of GNAT LIST Usage, Prev: Running GNAT LIST, Up: The GNAT Library Browser GNAT LIST - - Qualifiers for `GNAT LIST' - ========================== - - `GNAT LIST' recognizes the following qualifiers: - - `/ALL_UNITS' - Consider all units, including those of the predefined Ada library. - Especially useful with `/DEPENDENCIES'. - - `/DEPENDENCIES' - List sources from which specified units depend on. - - `/OUTPUT=OPTIONS' - Output the list of options. - - `/OUTPUT=OBJECTS' - Only output information about object files. - - `/OUTPUT=SOURCES' - Only output information about source files. - - `/OUTPUT=UNITS' - Only output information about compilation units. - - `/OBJECT_SEARCH=DIR' - `/SOURCE_SEARCH=DIR' - `/SEARCH=DIR' - `/NOCURRENT_DIRECTORY' - `/NOSTD_INCLUDES' - Source path manipulation. Same meaning as the equivalent `GNAT - MAKE' flags (see *Note Qualifiers for GNAT MAKE::). - - `/RUNTIME_SYSTEM=RTS-PATH' - Specifies the default location of the runtime library. Same - meaning as the equivalent `GNAT MAKE' flag (see *Note Qualifiers - for GNAT MAKE::). - - `/OUTPUT=VERBOSE' - Verbose mode. Output the complete source and object paths. Do not - use the default column layout but instead use long format giving - as much as information possible on each requested units, including - special characteristics such as: - - `Preelaborable' - The unit is preelaborable in the Ada 95 sense. - - `No_Elab_Code' - No elaboration code has been produced by the compiler for - this unit. - - `Pure' - The unit is pure in the Ada 95 sense. - - `Elaborate_Body' - The unit contains a pragma Elaborate_Body. - - `Remote_Types' - The unit contains a pragma Remote_Types. - - `Shared_Passive' - The unit contains a pragma Shared_Passive. - - `Predefined' - This unit is part of the predefined environment and cannot be - modified by the user. - - `Remote_Call_Interface' - The unit contains a pragma Remote_Call_Interface. - -  - File: gnat_ug_vms.info, Node: Examples of GNAT LIST Usage, Prev: Qualifiers for GNAT LIST, Up: The GNAT Library Browser GNAT LIST - - Example of `GNAT LIST' Usage - ============================ - - GNAT LIST /DEPENDENCIES /OUTPUT=SOURCES /ALL_UNITS DEMO1.ADB - - GNU:[LIB.OPENVMS7_1.2_8_1.ADALIB]ADA.ADS - GNU:[LIB.OPENVMS7_1.2_8_1.ADALIB]A-FINALI.ADS - GNU:[LIB.OPENVMS7_1.2_8_1.ADALIB]A-FILICO.ADS - GNU:[LIB.OPENVMS7_1.2_8_1.ADALIB]A-STREAM.ADS - GNU:[LIB.OPENVMS7_1.2_8_1.ADALIB]A-TAGS.ADS - DEMO1.ADB - GEN_LIST.ADS - GEN_LIST.ADB - GNU:[LIB.OPENVMS7_1.2_8_1.ADALIB]GNAT.ADS - GNU:[LIB.OPENVMS7_1.2_8_1.ADALIB]G-IO.ADS - INSTR.ADS - GNU:[LIB.OPENVMS7_1.2_8_1.ADALIB]SYSTEM.ADS - GNU:[LIB.OPENVMS7_1.2_8_1.ADALIB]S-EXCTAB.ADS - GNU:[LIB.OPENVMS7_1.2_8_1.ADALIB]S-FINIMP.ADS - GNU:[LIB.OPENVMS7_1.2_8_1.ADALIB]S-FINROO.ADS - GNU:[LIB.OPENVMS7_1.2_8_1.ADALIB]S-SECSTA.ADS - GNU:[LIB.OPENVMS7_1.2_8_1.ADALIB]S-STALIB.ADS - GNU:[LIB.OPENVMS7_1.2_8_1.ADALIB]S-STOELE.ADS - GNU:[LIB.OPENVMS7_1.2_8_1.ADALIB]S-STRATT.ADS - GNU:[LIB.OPENVMS7_1.2_8_1.ADALIB]S-TASOLI.ADS - GNU:[LIB.OPENVMS7_1.2_8_1.ADALIB]S-UNSTYP.ADS - GNU:[LIB.OPENVMS7_1.2_8_1.ADALIB]UNCHCONV.ADS - -  - File: gnat_ug_vms.info, Node: Finding Memory Problems with GNAT Debug Pool, Next: Creating Sample Bodies Using GNAT STUB, Prev: The GNAT Library Browser GNAT LIST, Up: Top - - Finding Memory Problems with GNAT Debug Pool - ******************************************** - - The use of unchecked deallocation and unchecked conversion can easily - lead to incorrect memory references. The problems generated by such - references are usually difficult to tackle because the symptoms can be - very remote from the origin of the problem. In such cases, it is very - helpful to detect the problem as early as possible. This is the purpose - of the Storage Pool provided by `GNAT.Debug_Pools'. - - In order to use the GNAT specific debugging pool, the user must - associate a debug pool object with each of the access types that may be - related to suspected memory problems. See Ada Reference Manual 13.11. - type Ptr is access Some_Type; - Pool : GNAT.Debug_Pools.Debug_Pool; - for Ptr'Storage_Pool use Pool; - - `GNAT.Debug_Pools' is derived from of a GNAT-specific kind of pool: - the Checked_Pool. Such pools, like standard Ada storage pools, allow - the user to redefine allocation and deallocation strategies. They also - provide a checkpoint for each dereference, through the use of the - primitive operation `Dereference' which is implicitly called at each - dereference of an access value. - - Once an access type has been associated with a debug pool, - operations on values of the type may raise four distinct exceptions, - which correspond to four potential kinds of memory corruption: - * `GNAT.Debug_Pools.Accessing_Not_Allocated_Storage' - - * `GNAT.Debug_Pools.Accessing_Deallocated_Storage' - - * `GNAT.Debug_Pools.Freeing_Not_Allocated_Storage' - - * `GNAT.Debug_Pools.Freeing_Deallocated_Storage ' - - For types associated with a Debug_Pool, dynamic allocation is performed - using the standard GNAT allocation routine. References to all allocated - chunks of memory are kept in an internal dictionary. The deallocation - strategy consists in not releasing the memory to the underlying system - but rather to fill it with a memory pattern easily recognizable during - debugging sessions: The memory pattern is the old IBM hexadecimal - convention: 16#DEADBEEF#. Upon each dereference, a check is made that - the access value denotes a properly allocated memory location. Here is - a complete example of use of `Debug_Pools', that includes typical - instances of memory corruption: - with Gnat.Io; use Gnat.Io; - with Unchecked_Deallocation; - with Unchecked_Conversion; - with GNAT.Debug_Pools; - with System.Storage_Elements; - with Ada.Exceptions; use Ada.Exceptions; - procedure Debug_Pool_Test is - - type T is access Integer; - type U is access all T; - - P : GNAT.Debug_Pools.Debug_Pool; - for T'Storage_Pool use P; - - procedure Free is new Unchecked_Deallocation (Integer, T); - function UC is new Unchecked_Conversion (U, T); - A, B : aliased T; - - procedure Info is new GNAT.Debug_Pools.Print_Info(Put_Line); - - begin - Info (P); - A := new Integer; - B := new Integer; - B := A; - Info (P); - Free (A); - begin - Put_Line (Integer'Image(B.all)); - exception - when E : others => Put_Line ("raised: " & Exception_Name (E)); - end; - begin - Free (B); - exception - when E : others => Put_Line ("raised: " & Exception_Name (E)); - end; - B := UC(A'Access); - begin - Put_Line (Integer'Image(B.all)); - exception - when E : others => Put_Line ("raised: " & Exception_Name (E)); - end; - begin - Free (B); - exception - when E : others => Put_Line ("raised: " & Exception_Name (E)); - end; - Info (P); - end Debug_Pool_Test; - - The debug pool mechanism provides the following precise diagnostics on - the execution of this erroneous program: - Debug Pool info: - Total allocated bytes : 0 - Total deallocated bytes : 0 - Current Water Mark: 0 - High Water Mark: 0 - - Debug Pool info: - Total allocated bytes : 8 - Total deallocated bytes : 0 - Current Water Mark: 8 - High Water Mark: 8 - - raised: GNAT.DEBUG_POOLS.ACCESSING_DEALLOCATED_STORAGE - raised: GNAT.DEBUG_POOLS.FREEING_DEALLOCATED_STORAGE - raised: GNAT.DEBUG_POOLS.ACCESSING_NOT_ALLOCATED_STORAGE - raised: GNAT.DEBUG_POOLS.FREEING_NOT_ALLOCATED_STORAGE - Debug Pool info: - Total allocated bytes : 8 - Total deallocated bytes : 4 - Current Water Mark: 4 - High Water Mark: 8 - -  - File: gnat_ug_vms.info, Node: Creating Sample Bodies Using GNAT STUB, Next: Reducing the Size of Ada Executables with GNAT ELIM, Prev: Finding Memory Problems with GNAT Debug Pool, Up: Top - - Creating Sample Bodies Using `GNAT STUB' - **************************************** - - `GNAT STUB' creates body stubs, that is, empty but compilable bodies - for library unit declarations. - - To create a body stub, `GNAT STUB' has to compile the library unit - declaration. Therefore, bodies can be created only for legal library - units. Moreover, if a library unit depends semantically upon units - located outside the current directory, you have to provide the source - search path when calling `GNAT STUB', see the description of `GNAT - STUB' qualifiers below. - - * Menu: - - * Running GNAT STUB:: - * Qualifiers for GNAT STUB:: - -  - File: gnat_ug_vms.info, Node: Running GNAT STUB, Next: Qualifiers for GNAT STUB, Up: Creating Sample Bodies Using GNAT STUB - - Running `GNAT STUB' - =================== - - `GNAT STUB' has the command-line interface of the form - - $ GNAT STUB [qualifiers] filename [directory] - - where - `filename' - is the name of the source file that contains a library unit - declaration for which a body must be created. This name should - follow the GNAT file name conventions. No crunching is allowed for - this file name. The file name may contain the path information. - - `directory' - indicates the directory to place a body stub (default is the - current directory) - - `qualifiers' - is an optional sequence of qualifiers as described in the next - section - -  - File: gnat_ug_vms.info, Node: Qualifiers for GNAT STUB, Prev: Running GNAT STUB, Up: Creating Sample Bodies Using GNAT STUB - - Qualifiers for `GNAT STUB' - ========================== - - `/FULL' - If the destination directory already contains a file with a name - of the body file for the argument spec file, replace it with the - generated body stub. - - `/HEADER=SPEC' - Put the comment header (i.e. all the comments preceding the - compilation unit) from the source of the library unit declaration - into the body stub. - - `/HEADER=GENERAL' - Put a sample comment header into the body stub. - - `/SEARCH=direc' - `/NOCURRENT_DIRECTORY' - These qualifiers have the same meaning as in calls to GNAT COMPILE. - They define the source search path in the call to GNAT COMPILE - issued by `GNAT STUB' to compile an argument source file. - - `/INDENTATION=N' - (N is a decimal natural number). Set the indentation level in the - generated body sample to n, '/INDENTATION=0' means "no - indentation", the default indentation is 3. - - `/TREE_FILE=SAVE' - Do not remove the tree file (i.e. the snapshot of the compiler - internal structures used by `GNAT STUB') after creating the body - stub. - - `/LINE_LENGTH=N' - (N is a decimal positive number) Set the maximum line length in the - body stub to n, the default is 78. - - `/QUIET' - Quiet mode: do not generate a confirmation when a body is - successfully created or a message when a body is not required for - an argument unit. - - `/TREE_FILE=REUSE' - Reuse the tree file (if it exists) instead of creating it: instead - of creating the tree file for the library unit declaration, GNAT - STUB tries to find it in the current directory and use it for - creating a body. If the tree file is not found, no body is - created. `/REUSE' also implies `/SAVE', whether or not `/SAVE' is - set explicitly. - - `/TREE_FILE=OVERWRITE' - Overwrite the existing tree file: if the current directory already - contains the file which, according to the GNAT file name rules - should be considered as a tree file for the argument source file, - GNAT STUB will refuse to create the tree file needed to create a - body sampler, unless `-t' option is set - - `/VERBOSE' - Verbose mode: generate version information. - -  - File: gnat_ug_vms.info, Node: Reducing the Size of Ada Executables with GNAT ELIM, Next: Other Utility Programs, Prev: Creating Sample Bodies Using GNAT STUB, Up: Top - - Reducing the Size of Ada Executables with `GNAT ELIM' - ***************************************************** - - * Menu: - - * About GNAT ELIM:: - * Eliminate Pragma:: - * Tree Files:: - * Preparing Tree and Bind Files for GNAT ELIM:: - * Running GNAT ELIM:: - * Correcting the List of Eliminate Pragmas:: - * Making Your Executables Smaller:: - * Summary of the GNAT ELIM Usage Cycle:: - -  - File: gnat_ug_vms.info, Node: About GNAT ELIM, Next: Eliminate Pragma, Up: Reducing the Size of Ada Executables with GNAT ELIM - - About `GNAT ELIM' - ================= - - When a program shares a set of Ada packages with other programs, it may - happen that this program uses only a fraction of the subprograms - defined in these packages. The code created for these unused - subprograms increases the size of the executable. - - `GNAT ELIM' tracks unused subprograms in an Ada program and outputs - a list of GNAT-specific `Eliminate' pragmas (see next section) marking - all the subprograms that are declared but never called. By placing the - list of `Eliminate' pragmas in the GNAT configuration file `GNAT.ADC' - and recompiling your program, you may decrease the size of its - executable, because the compiler will not generate the code for - 'eliminated' subprograms. - - `GNAT ELIM' needs as its input data a set of tree files (see *Note - Tree Files::) representing all the components of a program to process - and a bind file for a main subprogram (see *Note Preparing Tree and - Bind Files for GNAT ELIM::). - -  - File: gnat_ug_vms.info, Node: Eliminate Pragma, Next: Tree Files, Prev: About GNAT ELIM, Up: Reducing the Size of Ada Executables with GNAT ELIM - - `Eliminate' Pragma - ================== - - The simplified syntax of the Eliminate pragma used by `GNAT ELIM' is: - - pragma Eliminate (Library_Unit_Name, Subprogram_Name); - - where - `Library_Unit_Name' - full expanded Ada name of a library unit - - `Subprogram_Name' - a simple or expanded name of a subprogram declared within this - compilation unit - - The effect of an `Eliminate' pragma placed in the GNAT configuration - file `GNAT.ADC' is: - - * If the subprogram `Subprogram_Name' is declared within the library - unit `Library_Unit_Name', the compiler will not generate code for - this subprogram. This applies to all overloaded subprograms denoted - by `Subprogram_Name'. - - * If a subprogram marked by the pragma `Eliminate' is used (called) - in a program, the compiler will produce an error message in the - place where it is called. - -  - File: gnat_ug_vms.info, Node: Tree Files, Next: Preparing Tree and Bind Files for GNAT ELIM, Prev: Eliminate Pragma, Up: Reducing the Size of Ada Executables with GNAT ELIM - - Tree Files - ========== - - A tree file stores a snapshot of the compiler internal data structures - at the very end of a successful compilation. It contains all the - syntactic and semantic information for the compiled unit and all the - units upon which it depends semantically. To use tools that make use - of tree files, you need to first produce the right set of tree files. - - GNAT produces correct tree files when /TREE_OUTPUT /NOLOAD options - are set in a GNAT COMPILE call. The tree files have an .adt extension. - Therefore, to produce a tree file for the compilation unit contained in - a file named `FOO.ADB', you must use the command - - $ GNAT COMPILE /NOLOAD /TREE_OUTPUT FOO.ADB - - and you will get the tree file `foo.adt'. compilation. - -  - File: gnat_ug_vms.info, Node: Preparing Tree and Bind Files for GNAT ELIM, Next: Running GNAT ELIM, Prev: Tree Files, Up: Reducing the Size of Ada Executables with GNAT ELIM - - Preparing Tree and Bind Files for `GNAT ELIM' - ============================================= - - A set of tree files covering the program to be analyzed with `GNAT - ELIM' and the bind file for the main subprogram does not have to be in - the current directory. '-T' GNAT ELIM option may be used to provide - the search path for tree files, and '-b' option may be used to point to - the bind file to process (see *Note Running GNAT ELIM::) - - If you do not have the appropriate set of tree files and the right - bind file, you may create them in the current directory using the - following procedure. - - Let `Main_Prog' be the name of a main subprogram, and suppose this - subprogram is in a file named `MAIN_PROG.ADB'. - - To create a bind file for `GNAT ELIM', run `GNAT BIND' for the main - subprogram. `GNAT ELIM' can work with both Ada and C bind files; when - both are present, it uses the Ada bind file. The following commands - will build the program and create the bind file: - - $ GNAT MAKE /ACTIONS=COMPILE MAIN_PROG - $ GNAT BIND main_prog - - To create a minimal set of tree files covering the whole program, call - `GNAT MAKE' for this program as follows: - - $ GNAT MAKE /FORCE_COMPILE /ACTIONS=COMPILE /NOLOAD /TREE_OUTPUT MAIN_PROG - - The `/ACTIONS=COMPILE' GNAT MAKE option turns off the bind and link - steps, that are useless anyway because the sources are compiled with - `/NOLOAD' option which turns off code generation. - - The `/FORCE_COMPILE' GNAT MAKE option forces recompilation of all - the needed sources. - - This sequence of actions will create all the data needed by `GNAT - ELIM' from scratch and therefore guarantee its consistency. If you - would like to use some existing set of files as `GNAT ELIM' output, you - must make sure that the set of files is complete and consistent. You - can use the `-m' qualifier to check if there are missed tree files - - Note, that `GNAT ELIM' needs neither object nor ALI files. - -  - File: gnat_ug_vms.info, Node: Running GNAT ELIM, Next: Correcting the List of Eliminate Pragmas, Prev: Preparing Tree and Bind Files for GNAT ELIM, Up: Reducing the Size of Ada Executables with GNAT ELIM - - Running `GNAT ELIM' - =================== - - `GNAT ELIM' has the following command-line interface: - - $ GNAT ELIM [options] name - - `name' should be a full expanded Ada name of a main subprogram of a - program (partition). - - `GNAT ELIM' options: - - `/QUIET' - Quiet mode: by default `GNAT ELIM' generates to the standard error - stream a trace of the source file names of the compilation units - being processed. This option turns this trace off. - - `/VERBOSE' - Verbose mode: `GNAT ELIM' version information is printed as Ada - comments to the standard output stream. - - `/ALL' - Also look for subprograms from the GNAT run time that can be - eliminated. - - `/MISSED' - Check if any tree files are missing for an accurate result. - - `/TREE_DIRS=DIR' - When looking for tree files also look in directory DIR - - `/BIND_FILE=BIND_FILE' - Specifies BIND_FILE as the bind file to process. If not set, the - name of the bind file is computed from the full expanded Ada name - of a main subprogram. - - `-dX' - Activate internal debugging qualifiers. X is a letter or digit, or - string of letters or digits, which specifies the type of debugging - mode desired. Normally these are used only for internal - development or system debugging purposes. You can find full - documentation for these qualifiers in the body of the `GNAT - ELIM.Options' unit in the compiler source file - `GNATELIM-OPTIONS.ADB'. - - `GNAT ELIM' sends its output to the standard output stream, and all the - tracing and debug information is sent to the standard error stream. In - order to produce a proper GNAT configuration file `GNAT.ADC', - redirection must be used: - - $ PIPE GNAT ELIM MAIN_PROG > GNAT.ADC - - In order to append the `GNAT ELIM' output to the existing contents of - `GNAT.ADC'. - -  - File: gnat_ug_vms.info, Node: Correcting the List of Eliminate Pragmas, Next: Making Your Executables Smaller, Prev: Running GNAT ELIM, Up: Reducing the Size of Ada Executables with GNAT ELIM - - Correcting the List of Eliminate Pragmas - ======================================== - - In some rare cases it may happen that `GNAT ELIM' will try to eliminate - subprograms which are actually called in the program. In this case, the - compiler will generate an error message of the form: - - FILE.ADB:106:07: cannot call eliminated subprogram "My_Prog" - - You will need to manually remove the wrong `Eliminate' pragmas from the - `GNAT.ADC' file. It is advised that you recompile your program from - scratch after that because you need a consistent `GNAT.ADC' file during - the entire compilation. - -  - File: gnat_ug_vms.info, Node: Making Your Executables Smaller, Next: Summary of the GNAT ELIM Usage Cycle, Prev: Correcting the List of Eliminate Pragmas, Up: Reducing the Size of Ada Executables with GNAT ELIM - - Making Your Executables Smaller - =============================== - - In order to get a smaller executable for your program you now have to - recompile the program completely with the new `GNAT.ADC' file created - by `GNAT ELIM' in your current directory: - - $ GNAT MAKE /FORCE_COMPILE MAIN_PROG - - (you will need `/FORCE_COMPILE' option for GNAT MAKE to recompile - everything with the set of pragmas `Eliminate' you have obtained with - `GNAT ELIM'). - - Be aware that the set of `Eliminate' pragmas is specific to each - program. It is not recommended to merge sets of `Eliminate' pragmas - created for different programs in one `GNAT.ADC' file. - -  - File: gnat_ug_vms.info, Node: Summary of the GNAT ELIM Usage Cycle, Prev: Making Your Executables Smaller, Up: Reducing the Size of Ada Executables with GNAT ELIM - - Summary of the GNAT ELIM Usage Cycle - ==================================== - - Here is a quick summary of the steps to be taken in order to reduce the - size of your executables with `GNAT ELIM'. You may use other GNAT - options to control the optimization level, to produce the debugging - information, to set search path, etc. - - 1. Produce a bind file and a set of tree files - - $ GNAT MAKE /ACTIONS=COMPILE MAIN_PROG - $ GNAT BIND main_prog - $ GNAT MAKE /FORCE_COMPILE /NO_LINK /NOLOAD /TREE_OUTPUT MAIN_PROG - - 2. Generate a list of `Eliminate' pragmas - $ PIPE GNAT ELIM MAIN_PROG > GNAT.ADC - - 3. Recompile the application - - $ GNAT MAKE /FORCE_COMPILE MAIN_PROG - - -  - File: gnat_ug_vms.info, Node: Other Utility Programs, Next: Compatibility with DEC Ada, Prev: Reducing the Size of Ada Executables with GNAT ELIM, Up: Top - - Other Utility Programs - ********************** - - This chapter discusses some other utility programs available in the Ada - environment. - - * Menu: - - * Using Other Utility Programs with GNAT:: - * The GNAT STANDARD Utility Program:: - * The External Symbol Naming Scheme of GNAT:: - * Ada Mode for Glide:: - * Converting Ada Files to html with gnathtml:: - * Installing gnathtml:: - * LSE:: - * Profiling:: - -  - File: gnat_ug_vms.info, Node: Using Other Utility Programs with GNAT, Next: The GNAT STANDARD Utility Program, Up: Other Utility Programs - - Using Other Utility Programs with GNAT - ====================================== - - The object files generated by GNAT are in standard system format and in - particular the debugging information uses this format. This means - programs generated by GNAT can be used with existing utilities that - depend on these formats. - -  - File: gnat_ug_vms.info, Node: The GNAT STANDARD Utility Program, Next: The External Symbol Naming Scheme of GNAT, Prev: Using Other Utility Programs with GNAT, Up: Other Utility Programs - - The `GNAT STANDARD' Utility Program - =================================== - - Many of the definitions in package Standard are - implementation-dependent. However, the source of this package does not - exist as an Ada source file, so these values cannot be determined by - inspecting the source. They can be determined by examining in detail - the coding of `CSTAND.ADB' which creates the image of Standard in the - compiler, but this is awkward and requires a great deal of internal - knowledge about the system. - - The `GNAT STANDARD' utility is designed to deal with this situation. - It is an Ada program that dynamically determines the values of all the - relevant parameters in Standard, and prints them out in the form of an - Ada source listing for Standard, displaying all the values of interest. - This output is generated to `SYS$OUTPUT'. - - To determine the value of any parameter in package Standard, simply - run `GNAT STANDARD' with no qualifiers or arguments, and examine the - output. This is preferable to consulting documentation, because you - know that the values you are getting are the actual ones provided by - the executing system. - -  - File: gnat_ug_vms.info, Node: The External Symbol Naming Scheme of GNAT, Next: Ada Mode for Glide, Prev: The GNAT STANDARD Utility Program, Up: Other Utility Programs - - The External Symbol Naming Scheme of GNAT - ========================================= - - In order to interpret the output from GNAT, when using tools that are - originally intended for use with other languages, it is useful to - understand the conventions used to generate link names from the Ada - entity names. - - All link names are in all lowercase letters. With the exception of - library procedure names, the mechanism used is simply to use the full - expanded Ada name with dots replaced by double underscores. For - example, suppose we have the following package spec: - - package QRS is - MN : Integer; - end QRS; - - The variable `MN' has a full expanded Ada name of `QRS.MN', so the - corresponding link name is `qrs__mn'. Of course if a `pragma Export' - is used this may be overridden: - - package Exports is - Var1 : Integer; - pragma Export (Var1, C, External_Name => "var1_name"); - Var2 : Integer; - pragma Export (Var2, C, Link_Name => "var2_link_name"); - end Exports; - - In this case, the link name for VAR1 is whatever link name the C - compiler would assign for the C function VAR1_NAME. This typically - would be either VAR1_NAME or _VAR1_NAME, depending on operating system - conventions, but other possibilities exist. The link name for VAR2 is - VAR2_LINK_NAME, and this is not operating system dependent. - - One exception occurs for library level procedures. A potential - ambiguity arises between the required name `_main' for the C main - program, and the name we would otherwise assign to an Ada library level - procedure called `Main' (which might well not be the main program). - - To avoid this ambiguity, we attach the prefix `_ada_' to such names. - So if we have a library level procedure such as - - procedure Hello (S : String); - - the external name of this procedure will be _ADA_HELLO. - -  - File: gnat_ug_vms.info, Node: Ada Mode for Glide, Next: Converting Ada Files to html with gnathtml, Prev: The External Symbol Naming Scheme of GNAT, Up: Other Utility Programs - - Ada Mode for `Glide' - ==================== - - The Glide mode for programming in Ada (both, Ada83 and Ada95) helps the - user in understanding existing code and facilitates writing new code. It - furthermore provides some utility functions for easier integration of - standard EMACS features when programming in Ada. - - General Features: - ----------------- - - * Full Integrated Development Environment : - - * support of 'project files' for the configuration (directories, - compilation options,...) - - * compiling and stepping through error messages. - - * running and debugging your applications within Glide. - - * easy to use for beginners by pull-down menus, - - * user configurable by many user-option variables. - - Ada Mode Features That Help Understanding Code: - ----------------------------------------------- - - * functions for easy and quick stepping through Ada code, - - * getting cross reference information for identifiers (e.g. find the - defining place by a keystroke), - - * displaying an index menu of types and subprograms and move point to - the chosen one, - - * automatic color highlighting of the various entities in Ada code. - - Glide Support for Writing Ada Code: - ----------------------------------- - - * switching between spec and body files with possible autogeneration - of body files, - - * automatic formating of subprograms parameter lists. - - * automatic smart indentation according to Ada syntax, - - * automatic completion of identifiers, - - * automatic casing of identifiers, keywords, and attributes, - - * insertion of statement templates, - - * filling comment paragraphs like filling normal text, - - For more information, please refer to the online Glide documentation - available in the Glide -> Help Menu. - -  - File: gnat_ug_vms.info, Node: Converting Ada Files to html with gnathtml, Next: Installing gnathtml, Prev: Ada Mode for Glide, Up: Other Utility Programs - - Converting Ada Files to html with `gnathtml' - ============================================ - - This `Perl' script allows Ada source files to be browsed using standard - Web browsers. For installation procedure, see the section *Note - Installing gnathtml::. - - Ada reserved keywords are highlighted in a bold font and Ada - comments in a blue font. Unless your program was compiled with the GNAT - COMPILE `/XREF=SUPPRESS' qualifier to suppress the generation of - cross-referencing information, user defined variables and types will - appear in a different color; you will be able to click on any - identifier and go to its declaration. - - The command line is as follow: - $ perl gnathtml.pl [qualifiers] ada-files - - You can pass it as many Ada files as you want. `gnathtml' will - generate an html file for every ada file, and a global file called - `index.htm'. This file is an index of every identifier defined in the - files. - - The available qualifiers are the following ones : - - `-83' - Only the subset on the Ada 83 keywords will be highlighted, not - the full Ada 95 keywords set. - - `-cc COLOR' - This option allows you to change the color used for comments. The - default value is green. The color argument can be any name - accepted by html. - - `-d' - If the ada files depend on some other files (using for instance the - `with' command, the latter will also be converted to html. Only - the files in the user project will be converted to html, not the - files in the run-time library itself. - - `-D' - This command is the same as -d above, but `gnathtml' will also look - for files in the run-time library, and generate html files for - them. - - `-f' - By default, gnathtml will generate html links only for global - entities ('with'ed units, global variables and types,...). If you - specify the `-f' on the command line, then links will be generated - for local entities too. - - `-l NUMBER' - If this qualifier is provided and NUMBER is not 0, then `gnathtml' - will number the html files every NUMBER line. - - `-I DIR' - Specify a directory to search for library files (`.ALI' files) and - source files. You can provide several -I qualifiers on the command - line, and the directories will be parsed in the order of the - command line. - - `-o DIR' - Specify the output directory for html files. By default, gnathtml - will saved the generated html files in a subdirectory named - `html/'. - - `-p FILE' - If you are using EMACS and the most recent EMACS Ada mode, which - provides a full Integrated Development Environment for compiling, - checking, running and debugging applications, you may be using - `.adp' files to give the directories where EMACS can find sources - and object files. - - Using this qualifier, you can tell gnathtml to use these files. - This allows you to get an html version of your application, even - if it is spread over multiple directories. - - `-sc COLOR' - This option allows you to change the color used for symbol - definitions. The default value is red. The color argument can be - any name accepted by html. - - `-t FILE' - This qualifier provides the name of a file. This file contains a - list of file names to be converted, and the effect is exactly as - though they had appeared explicitly on the command line. This is - the recommended way to work around the command line length limit - on some systems. - -  - File: gnat_ug_vms.info, Node: Installing gnathtml, Next: LSE, Prev: Converting Ada Files to html with gnathtml, Up: Other Utility Programs - - Installing `gnathtml' - ===================== - - `Perl' needs to be installed on your machine to run this script. - `Perl' is freely available for almost every architecture and Operating - System via the Internet. - - On Unix systems, you may want to modify the first line of the - script `gnathtml', to explicitly tell the Operating system where - Perl is. The syntax of this line is : - #!full_path_name_to_perl - - Alternatively, you may run the script using the following command line: - - $ perl gnathtml.pl [qualifiers] files - -  - File: gnat_ug_vms.info, Node: LSE, Next: Profiling, Prev: Installing gnathtml, Up: Other Utility Programs - - LSE - === - - The GNAT distribution provides an Ada 95 template for the Digital - Language Sensitive Editor (LSE), a component of DECset. In order to - access it, invoke LSE with the qualifier - /ENVIRONMENT=GNU:[LIB]ADA95.ENV. - -  - File: gnat_ug_vms.info, Node: Profiling, Prev: LSE, Up: Other Utility Programs - - Profiling - ========= - - GNAT supports The Digital Performance Coverage Analyzer (PCA), a - component of DECset. To use it proceed as outlined under "HELP PCA", - except for running the collection phase with the /DEBUG qualifier. - - $ GNAT MAKE /DEBUG - $ DEFINE LIB$DEBUG PCA$COLLECTOR - $ RUN/DEBUG - -  - File: gnat_ug_vms.info, Node: Running and Debugging Ada Programs, Next: Inline Assembler, Prev: Compatibility with DEC Ada, Up: Top - - Running and Debugging Ada Programs - ********************************** - - This chapter discusses how to debug Ada programs. An incorrect Ada - program may be handled in three ways by the GNAT compiler: - - 1. The illegality may be a violation of the static semantics of Ada. - In that case GNAT diagnoses the constructs in the program that are - illegal. It is then a straightforward matter for the user to - modify those parts of the program. - - 2. The illegality may be a violation of the dynamic semantics of Ada. - In that case the program compiles and executes, but may generate - incorrect results, or may terminate abnormally with some exception. - - 3. When presented with a program that contains convoluted errors, GNAT - itself may terminate abnormally without providing full diagnostics - on the incorrect user program. - - * Menu: - - * The GNAT Debugger GDB:: - * Running GDB:: - * Introduction to GDB Commands:: - * Using Ada Expressions:: - * Calling User-Defined Subprograms:: - * Using the Next Command in a Function:: - * Ada Exceptions:: - * Ada Tasks:: - * Debugging Generic Units:: - * GNAT Abnormal Termination or Failure to Terminate:: - * Naming Conventions for GNAT Source Files:: - * Getting Internal Debugging Information:: - * Stack Traceback:: - -  - File: gnat_ug_vms.info, Node: The GNAT Debugger GDB, Next: Running GDB, Up: Running and Debugging Ada Programs - - The GNAT Debugger GDB - ===================== - - `GDB' is a general purpose, platform-independent debugger that can be - used to debug mixed-language programs compiled with `GCC', and in - particular is capable of debugging Ada programs compiled with GNAT. The - latest versions of `GDB' are Ada-aware and can handle complex Ada data - structures. - - The manual `Debugging with GDB' , located in the GNU:[DOCS] - directory, contains full details on the usage of `GDB', including a - section on its usage on programs. This manual should be consulted for - full details. The section that follows is a brief introduction to the - philosophy and use of `GDB'. - - When GNAT programs are compiled, the compiler optionally writes - debugging information into the generated object file, including - information on line numbers, and on declared types and variables. This - information is separate from the generated code. It makes the object - files considerably larger, but it does not add to the size of the - actual executable that will be loaded into memory, and has no impact on - run-time performance. The generation of debug information is triggered - by the use of the /DEBUG qualifier in the GNAT COMPILE or GNAT MAKE - command used to carry out the compilations. It is important to - emphasize that the use of these options does not change the generated - code. - - The debugging information is written in standard system formats that - are used by many tools, including debuggers and profilers. The format - of the information is typically designed to describe C types and - semantics, but GNAT implements a translation scheme which allows full - details about Ada types and variables to be encoded into these standard - C formats. Details of this encoding scheme may be found in the file - EXP_DBUG.ADS in the GNAT source distribution. However, the details of - this encoding are, in general, of no interest to a user, since `GDB' - automatically performs the necessary decoding. - - When a program is bound and linked, the debugging information is - collected from the object files, and stored in the executable image of - the program. Again, this process significantly increases the size of - the generated executable file, but it does not increase the size of the - executable program itself. Furthermore, if this program is run in the - normal manner, it runs exactly as if the debug information were not - present, and takes no more actual memory. - - However, if the program is run under control of `GDB', the debugger - is activated. The image of the program is loaded, at which point it is - ready to run. If a run command is given, then the program will run - exactly as it would have if `GDB' were not present. This is a crucial - part of the `GDB' design philosophy. `GDB' is entirely non-intrusive - until a breakpoint is encountered. If no breakpoint is ever hit, the - program will run exactly as it would if no debugger were present. When - a breakpoint is hit, `GDB' accesses the debugging information and can - respond to user commands to inspect variables, and more generally to - report on the state of execution. - -  - File: gnat_ug_vms.info, Node: Running GDB, Next: Introduction to GDB Commands, Prev: The GNAT Debugger GDB, Up: Running and Debugging Ada Programs - - Running GDB - =========== - - The debugger can be launched directly and simply from `glide' or - through its graphical interface: `gvd'. It can also be used directly in - text mode. Here is described the basic use of `GDB' in text mode. All - the commands described below can be used in the `gvd' console window - eventhough there is usually other more graphical ways to achieve the - same goals. - - The command to run `GDB' in text mode is - - $ $ GDB PROGRAM - - where `PROGRAM' is the name of the executable file. This activates the - debugger and results in a prompt for debugger commands. The simplest - command is simply `run', which causes the program to run exactly as if - the debugger were not present. The following section describes some of - the additional commands that can be given to `GDB'. - -  - File: gnat_ug_vms.info, Node: Introduction to GDB Commands, Next: Using Ada Expressions, Prev: Running GDB, Up: Running and Debugging Ada Programs - - Introduction to GDB Commands - ============================ - - `GDB' contains a large repertoire of commands. The manual `Debugging - with GDB' , located in the GNU:[DOCS] directory, includes extensive - documentation on the use of these commands, together with examples of - their use. Furthermore, the command HELP invoked from within `GDB' - activates a simple help facility which summarizes the available - commands and their options. In this section we summarize a few of the - most commonly used commands to give an idea of what `GDB' is about. You - should create a simple program with debugging information and - experiment with the use of these `GDB' commands on the program as you - read through the following section. - - `set args ARGUMENTS' - The ARGUMENTS list above is a list of arguments to be passed to - the program on a subsequent run command, just as though the - arguments had been entered on a normal invocation of the program. - The `set args' command is not needed if the program does not - require arguments. - - `run' - The `run' command causes execution of the program to start from - the beginning. If the program is already running, that is to say if - you are currently positioned at a breakpoint, then a prompt will - ask for confirmation that you want to abandon the current - execution and restart. - - `breakpoint LOCATION' - The breakpoint command sets a breakpoint, that is to say a point - at which execution will halt and `GDB' will await further - commands. LOCATION is either a line number within a file, given in - the format `file:linenumber', or it is the name of a subprogram. - If you request that a breakpoint be set on a subprogram that is - overloaded, a prompt will ask you to specify on which of those - subprograms you want to breakpoint. You can also specify that all - of them should be breakpointed. If the program is run and - execution encounters the breakpoint, then the program stops and - `GDB' signals that the breakpoint was encountered by printing the - line of code before which the program is halted. - - `breakpoint exception NAME' - A special form of the breakpoint command which breakpoints whenever - exception NAME is raised. If NAME is omitted, then a breakpoint - will occur when any exception is raised. - - `print EXPRESSION' - This will print the value of the given expression. Most simple Ada - expression formats are properly handled by `GDB', so the expression - can contain function calls, variables, operators, and attribute - references. - - `continue' - Continues execution following a breakpoint, until the next - breakpoint or the termination of the program. - - `step' - Executes a single line after a breakpoint. If the next statement - is a subprogram call, execution continues into (the first - statement of) the called subprogram. - - `next' - Executes a single line. If this line is a subprogram call, - executes and returns from the call. - - `list' - Lists a few lines around the current source location. In practice, - it is usually more convenient to have a separate edit window open - with the relevant source file displayed. Successive applications - of this command print subsequent lines. The command can be given - an argument which is a line number, in which case it displays a - few lines around the specified one. - - `backtrace' - Displays a backtrace of the call chain. This command is typically - used after a breakpoint has occurred, to examine the sequence of - calls that leads to the current breakpoint. The display includes - one line for each activation record (frame) corresponding to an - active subprogram. - - `up' - At a breakpoint, `GDB' can display the values of variables local - to the current frame. The command `up' can be used to examine the - contents of other active frames, by moving the focus up the stack, - that is to say from callee to caller, one frame at a time. - - `down' - Moves the focus of `GDB' down from the frame currently being - examined to the frame of its callee (the reverse of the previous - command), - - `frame N' - Inspect the frame with the given number. The value 0 denotes the - frame of the current breakpoint, that is to say the top of the - call stack. - - The above list is a very short introduction to the commands that - `GDB' provides. Important additional capabilities, including conditional - breakpoints, the ability to execute command sequences on a breakpoint, - the ability to debug at the machine instruction level and many other - features are described in detail in `Debugging with GDB'. Note that - most commands can be abbreviated (for example, c for continue, bt for - backtrace). - -  - File: gnat_ug_vms.info, Node: Using Ada Expressions, Next: Calling User-Defined Subprograms, Prev: Introduction to GDB Commands, Up: Running and Debugging Ada Programs - - Using Ada Expressions - ===================== - - `GDB' supports a fairly large subset of Ada expression syntax, with some - extensions. The philosophy behind the design of this subset is - - * That `GDB' should provide basic literals and access to operations - for arithmetic, dereferencing, field selection, indexing, and - subprogram calls, leaving more sophisticated computations to - subprograms written into the program (which therefore may be - called from `GDB'). - - * That type safety and strict adherence to Ada language restrictions - are not particularly important to the `GDB' user. - - * That brevity is important to the `GDB' user. - - Thus, for brevity, the debugger acts as if there were implicit - `with' and `use' clauses in effect for all user-written packages, thus - making it unnecessary to fully qualify most names with their packages, - regardless of context. Where this causes ambiguity, `GDB' asks the - user's intent. - - For details on the supported Ada syntax, see `Debugging with GDB'. - -  - File: gnat_ug_vms.info, Node: Calling User-Defined Subprograms, Next: Using the Next Command in a Function, Prev: Using Ada Expressions, Up: Running and Debugging Ada Programs - - Calling User-Defined Subprograms - ================================ - - An important capability of `GDB' is the ability to call user-defined - subprograms while debugging. This is achieved simply by entering a - subprogram call statement in the form: - - call subprogram-name (parameters) - - The keyword `call' can be omitted in the normal case where the - `subprogram-name' does not coincide with any of the predefined `GDB' - commands. - - The effect is to invoke the given subprogram, passing it the list of - parameters that is supplied. The parameters can be expressions and can - include variables from the program being debugged. The subprogram must - be defined at the library level within your program, and `GDB' will - call the subprogram within the environment of your program execution - (which means that the subprogram is free to access or even modify - variables within your program). - - The most important use of this facility is in allowing the inclusion - of debugging routines that are tailored to particular data structures - in your program. Such debugging routines can be written to provide a - suitably high-level description of an abstract type, rather than a - low-level dump of its physical layout. After all, the standard `GDB - print' command only knows the physical layout of your types, not their - abstract meaning. Debugging routines can provide information at the - desired semantic level and are thus enormously useful. - - For example, when debugging GNAT itself, it is crucial to have - access to the contents of the tree nodes used to represent the program - internally. But tree nodes are represented simply by an integer value - (which in turn is an index into a table of nodes). Using the `print' - command on a tree node would simply print this integer value, which is - not very useful. But the PN routine (defined in file TREEPR.ADB in the - GNAT sources) takes a tree node as input, and displays a useful high - level representation of the tree node, which includes the syntactic - category of the node, its position in the source, the integers that - denote descendant nodes and parent node, as well as varied semantic - information. To study this example in more detail, you might want to - look at the body of the PN procedure in the stated file. - -  - File: gnat_ug_vms.info, Node: Using the Next Command in a Function, Next: Ada Exceptions, Prev: Calling User-Defined Subprograms, Up: Running and Debugging Ada Programs - - Using the Next Command in a Function - ==================================== - - When you use the `next' command in a function, the current source - location will advance to the next statement as usual. A special case - arises in the case of a `return' statement. - - Part of the code for a return statement is the "epilog" of the - function. This is the code that returns to the caller. There is only - one copy of this epilog code, and it is typically associated with the - last return statement in the function if there is more than one return. - In some implementations, this epilog is associated with the first - statement of the function. - - The result is that if you use the `next' command from a return - statement that is not the last return statement of the function you may - see a strange apparent jump to the last return statement or to the - start of the function. You should simply ignore this odd jump. The - value returned is always that from the first return statement that was - stepped through. - -  - File: gnat_ug_vms.info, Node: Ada Exceptions, Next: Ada Tasks, Prev: Using the Next Command in a Function, Up: Running and Debugging Ada Programs - - Breaking on Ada Exceptions - ========================== - - You can set breakpoints that trip when your program raises selected - exceptions. - - `break exception' - Set a breakpoint that trips whenever (any task in the) program - raises any exception. - - `break exception NAME' - Set a breakpoint that trips whenever (any task in the) program - raises the exception NAME. - - `break exception unhandled' - Set a breakpoint that trips whenever (any task in the) program - raises an exception for which there is no handler. - - `info exceptions' - `info exceptions REGEXP' - The `info exceptions' command permits the user to examine all - defined exceptions within Ada programs. With a regular expression, - REGEXP, as argument, prints out only those exceptions whose name - matches REGEXP. - -  - File: gnat_ug_vms.info, Node: Ada Tasks, Next: Debugging Generic Units, Prev: Ada Exceptions, Up: Running and Debugging Ada Programs - - Ada Tasks - ========= - - `GDB' allows the following task-related commands: - - `info tasks' - This command shows a list of current Ada tasks, as in the - following example: - - (GDB) info tasks - ID TID P-ID Thread Pri State Name - 1 8088000 0 807e000 15 Child Activation Wait main_task - 2 80a4000 1 80ae000 15 Accept/Select Wait b - 3 809a800 1 80a4800 15 Child Activation Wait a - * 4 80ae800 3 80b8000 15 Running c - - In this listing, the asterisk before the first task indicates it - to be the currently running task. The first column lists the task - ID that is used to refer to tasks in the following commands. - - `break LINESPEC task TASKID' - `break LINESPEC task TASKID if ...' - These commands are like the `break ... thread ...'. LINESPEC - specifies source lines. - - Use the qualifier `task TASKID' with a breakpoint command to - specify that you only want `GDB' to stop the program when a - particular Ada task reaches this breakpoint. TASKID is one of the - numeric task identifiers assigned by `GDB', shown in the first - column of the `info tasks' display. - - If you do not specify `task TASKID' when you set a breakpoint, the - breakpoint applies to _all_ tasks of your program. - - You can use the `task' qualifier on conditional breakpoints as - well; in this case, place `task TASKID' before the breakpoint - condition (before the `if'). - - `task TASKNO' - This command allows to qualifier to the task referred by TASKNO. In - particular, This allows to browse the backtrace of the specified - task. It is advised to qualifier back to the original task before - continuing execution otherwise the scheduling of the program may be - perturbated. - - For more detailed information on the tasking support, see `Debugging - with GDB'. - -  - File: gnat_ug_vms.info, Node: Debugging Generic Units, Next: GNAT Abnormal Termination or Failure to Terminate, Prev: Ada Tasks, Up: Running and Debugging Ada Programs - - Debugging Generic Units - ======================= - - GNAT always uses code expansion for generic instantiation. This means - that each time an instantiation occurs, a complete copy of the original - code is made, with appropriate substitutions of formals by actuals. - - It is not possible to refer to the original generic entities in - `GDB', but it is always possible to debug a particular instance of a - generic, by using the appropriate expanded names. For example, if we - have - - procedure g is - - generic package k is - procedure kp (v1 : in out integer); - end k; - - package body k is - procedure kp (v1 : in out integer) is - begin - v1 := v1 + 1; - end kp; - end k; - - package k1 is new k; - package k2 is new k; - - var : integer := 1; - - begin - k1.kp (var); - k2.kp (var); - k1.kp (var); - k2.kp (var); - end; - - Then to break on a call to procedure kp in the k2 instance, simply use - the command: - - (GDB) break g.k2.kp - - When the breakpoint occurs, you can step through the code of the - instance in the normal manner and examine the values of local - variables, as for other units. - -  - File: gnat_ug_vms.info, Node: GNAT Abnormal Termination or Failure to Terminate, Next: Naming Conventions for GNAT Source Files, Prev: Debugging Generic Units, Up: Running and Debugging Ada Programs - - GNAT Abnormal Termination or Failure to Terminate - ================================================= - - When presented with programs that contain serious errors in syntax or - semantics, GNAT may on rare occasions experience problems in - operation, such as aborting with a segmentation fault or illegal memory - access, raising an internal exception, terminating abnormally, or - failing to terminate at all. In such cases, you can activate various - features of GNAT that can help you pinpoint the construct in your - program that is the likely source of the problem. - - The following strategies are presented in increasing order of - difficulty, corresponding to your experience in using GNAT and your - familiarity with compiler internals. - - 1. Run `GNAT COMPILE' with the `/REPORT_ERRORS=FULL'. This first - qualifier causes all errors on a given line to be reported. In its - absence, only the first error on a line is displayed. - - The `/REPORT_ERRORS=IMMEDIATE' qualifier causes errors to be - displayed as soon as they are encountered, rather than after - compilation is terminated. If GNAT terminates prematurely or goes - into an infinite loop, the last error message displayed may help - to pinpoint the culprit. - - 2. Run `GNAT COMPILE' with the `/VERBOSE' qualifier. In this mode, - `GNAT COMPILE' produces ongoing information about the progress of - the compilation and provides the name of each procedure as code is - generated. This qualifier allows you to find which Ada procedure - was being compiled when it encountered a code generation problem. - - 3. Run `GNAT COMPILE' with the `/TRACE_UNITS' qualifier. This is a - GNAT specific qualifier that does for the front-end what `VERBOSE' - does for the back end. The system prints the name of each unit, - either a compilation unit or nested unit, as it is being analyzed. - - 4. Finally, you can start `GDB' directly on the `GNAT1' executable. - `GNAT1' is the front-end of GNAT, and can be run independently - (normally it is just called from `GNAT COMPILE'). You can use - `GDB' on `GNAT1' as you would on a C program (but *note The GNAT - Debugger GDB:: for caveats). The `where' command is the first line - of attack; the variable `lineno' (seen by `print lineno'), used by - the second phase of `GNAT1' and by the `GNAT COMPILE' backend, - indicates the source line at which the execution stopped, and - `input_file name' indicates the name of the source file. - -  - File: gnat_ug_vms.info, Node: Naming Conventions for GNAT Source Files, Next: Getting Internal Debugging Information, Prev: GNAT Abnormal Termination or Failure to Terminate, Up: Running and Debugging Ada Programs - - Naming Conventions for GNAT Source Files - ======================================== - - In order to examine the workings of the GNAT system, the following - brief description of its organization may be helpful: - - * Files with prefix `SC' contain the lexical scanner. - - * All files prefixed with `PAR' are components of the parser. The - numbers correspond to chapters of the Ada 95 Reference Manual. For - example, parsing of select statements can be found in - `PAR-CH9.ADB'. - - * All files prefixed with `SEM' perform semantic analysis. The - numbers correspond to chapters of the Ada standard. For example, - all issues involving context clauses can be found in - `SEM_CH10.ADB'. In addition, some features of the language require - sufficient special processing to justify their own semantic files: - sem_aggr for aggregates, sem_disp for dynamic dispatching, etc. - - * All files prefixed with `EXP' perform normalization and expansion - of the intermediate representation (abstract syntax tree, or AST). - these files use the same numbering scheme as the parser and - semantics files. For example, the construction of record - initialization procedures is done in `EXP_CH3.ADB'. - - * The files prefixed with `BIND' implement the binder, which - verifies the consistency of the compilation, determines an order of - elaboration, and generates the bind file. - - * The files `ATREE.ADS' and `ATREE.ADB' detail the low-level data - structures used by the front-end. - - * The files `SINFO.ADS' and `SINFO.ADB' detail the structure of the - abstract syntax tree as produced by the parser. - - * The files `EINFO.ADS' and `EINFO.ADB' detail the attributes of all - entities, computed during semantic analysis. - - * Library management issues are dealt with in files with prefix - `LIB'. - - * Ada files with the prefix `A-' are children of `Ada', as defined - in Annex A. - - * Files with prefix `I-' are children of `Interfaces', as defined in - Annex B. - - * Files with prefix `S-' are children of `System'. This includes - both language-defined children and GNAT run-time routines. - - * Files with prefix `G-' are children of `GNAT'. These are useful - general-purpose packages, fully documented in their - specifications. All the other `.C' files are modifications of - common `GNAT COMPILE' files. - -  - File: gnat_ug_vms.info, Node: Getting Internal Debugging Information, Next: Stack Traceback, Prev: Naming Conventions for GNAT Source Files, Up: Running and Debugging Ada Programs - - Getting Internal Debugging Information - ====================================== - - Most compilers have internal debugging qualifiers and modes. GNAT does - also, except GNAT internal debugging qualifiers and modes are not - secret. A summary and full description of all the compiler and binder - debug flags are in the file `DEBUG.ADB'. You must obtain the sources of - the compiler to see the full detailed effects of these flags. - - The qualifiers that print the source of the program (reconstructed - from the internal tree) are of general interest for user programs, as - are the options to print the full internal tree, and the entity table - (the symbol table information). The reconstructed source provides a - readable version of the program after the front-end has completed - analysis and expansion, and is useful when studying the performance of - specific constructs. For example, constraint checks are indicated, - complex aggregates are replaced with loops and assignments, and tasking - primitives are replaced with run-time calls. - -  - File: gnat_ug_vms.info, Node: Stack Traceback, Prev: Getting Internal Debugging Information, Up: Running and Debugging Ada Programs - - Stack Traceback - =============== - - Traceback is a mechanism to display the sequence of subprogram calls - that leads to a specified execution point in a program. Often (but not - always) the execution point is an instruction at which an exception has - been raised. This mechanism is also known as stack unwinding because - it obtains its information by scanning the run-time stack and - recovering the activation records of all active subprograms. Stack - unwinding is one of the most important tools for program debugging. - - The first entry stored in traceback corresponds to the deepest calling - level, that is to say the subprogram currently executing the instruction - from which we want to obtain the traceback. - - Note that there is no runtime performance penalty when stack traceback - is enabled and no exception are raised during program execution. - - * Menu: - - * Non-Symbolic Traceback:: - * Symbolic Traceback:: - -  - File: gnat_ug_vms.info, Node: Non-Symbolic Traceback, Next: Symbolic Traceback, Up: Stack Traceback - - Non-Symbolic Traceback - ---------------------- - - Note: this feature is not supported on all platforms. See - `GNAT.Traceback spec in G-TRACEB.ADS' for a complete list of supported - platforms. - - * Menu: - - * Tracebacks From an Unhandled Exception:: - * Tracebacks From Exception Occurrences (non-symbolic):: - * Tracebacks From Anywhere in a Program (non-symbolic):: - -  - File: gnat_ug_vms.info, Node: Tracebacks From an Unhandled Exception, Next: Tracebacks From Exception Occurrences (non-symbolic), Up: Non-Symbolic Traceback - - Tracebacks From an Unhandled Exception - ...................................... - - A runtime non-symbolic traceback is a list of addresses of call - instructions. To enable this feature you must use the `-E' `GNAT - BIND''s option. With this option a stack traceback is stored as part of - exception information. It is possible to retrieve this information - using the standard `Ada.Exception.Exception_Information' routine. - - Let's have a look at a simple example: - - procedure STB is - - procedure P1 is - begin - raise Constraint_Error; - end P1; - - procedure P2 is - begin - P1; - end P2; - - begin - P2; - end STB; - - $ GNAT MAKE stb /BINDER_QUALIFIERS -E - $ stb - - Execution terminated by unhandled exception - Exception name: CONSTRAINT_ERROR - Message: STB.ADB:5 - Call stack traceback locations: - 0x401373 0x40138b 0x40139c 0x401335 0x4011c4 0x4011f1 0x77e892a4 - - As we see the traceback lists a sequence of addresses for the unhandled - exception `CONSTAINT_ERROR' raised in procedure P1. It is easy to guess - that this exception come from procedure P1. To translate these - addresses into the source lines where the calls appear, the `addr2line' - tool, described below, is invaluable. The use of this tool requires the - program to be compiled with debug information. - - $ GNAT MAKE -g stb /BINDER_QUALIFIERS -E - $ stb - - Execution terminated by unhandled exception - Exception name: CONSTRAINT_ERROR - Message: STB.ADB:5 - Call stack traceback locations: - 0x401373 0x40138b 0x40139c 0x401335 0x4011c4 0x4011f1 0x77e892a4 - - $ addr2line --exe=stb 0x401373 0x40138b 0x40139c 0x401335 0x4011c4 - 0x4011f1 0x77e892a4 - - 00401373 at d:/stb/STB.ADB:5 - 0040138B at d:/stb/STB.ADB:10 - 0040139C at d:/stb/STB.ADB:14 - 00401335 at d:/stb/B~STB.ADB:104 - 004011C4 at /build/.../CRT1.C:200 - 004011F1 at /build/.../CRT1.C:222 - 77E892A4 in ?? at ??:0 - - `addr2line' has a number of other useful options: - - `--functions' - to get the function name corresponding to any location - - `--demangle=gnat' - to use the gnat decoding mode for the function names. Note that - for binutils version 2.9.x the option is simply `--demangle'. - - $ addr2line --exe=stb --functions --demangle=gnat 0x401373 0x40138b - 0x40139c 0x401335 0x4011c4 0x4011f1 - - 00401373 in stb.p1 at d:/stb/STB.ADB:5 - 0040138B in stb.p2 at d:/stb/STB.ADB:10 - 0040139C in stb at d:/stb/STB.ADB:14 - 00401335 in main at d:/stb/B~STB.ADB:104 - 004011C4 in <__mingw_CRTStartup> at /build/.../CRT1.C:200 - 004011F1 in at /build/.../CRT1.C:222 - - From this traceback we can see that the exception was raised in - `STB.ADB' at line 5, which was reached from a procedure call in - `STB.ADB' at line 10, and so on. The `B~STD.ADB' is the binder file, - which contains the call to the main program. *note Running GNAT - BIND::. The remaining entries are assorted runtime routines, and the - output will vary from platform to platform. - - It is also possible to use `GDB' with these traceback addresses to debug - the program. For example, we can break at a given code location, as - reported in the stack traceback: - - $ GDB -nw stb - - (GDB) break *0x401373 - Breakpoint 1 at 0x401373: file STB.ADB, line 5. - - It is important to note that the stack traceback addresses do not - change when debug information is included. This is particularly useful - because it makes it possible to release software without debug - information (to minimize object size), get a field report that includes - a stack traceback whenever an internal bug occurs, and then be able to - retrieve the sequence of calls with the same program compiled with - debug information. - -  - File: gnat_ug_vms.info, Node: Tracebacks From Exception Occurrences (non-symbolic), Next: Tracebacks From Anywhere in a Program (non-symbolic), Prev: Tracebacks From an Unhandled Exception, Up: Non-Symbolic Traceback - - Tracebacks From Exception Occurrences - ..................................... - - Non-symbolic tracebacks are obtained by using the `-E' binder argument. - The stack traceback is attached to the exception information string, - and can be retrieved in an exception handler within the Ada program, by - means of the Ada95 facilities defined in `Ada.Exceptions'. Here is a - simple example: - - with Ada.Text_IO; - with Ada.Exceptions; - - procedure STB is - - use Ada; - use Ada.Exceptions; - - procedure P1 is - K : Positive := 1; - begin - K := K - 1; - exception - when E : others => - Text_IO.Put_Line (Exception_Information (E)); - end P1; - - procedure P2 is - begin - P1; - end P2; - - begin - P2; - end STB; - - This program will output: - - $ stb - - Exception name: CONSTRAINT_ERROR - Message: STB.ADB:12 - Call stack traceback locations: - 0x4015e4 0x401633 0x401644 0x401461 0x4011c4 0x4011f1 0x77e892a4 - -  - File: gnat_ug_vms.info, Node: Tracebacks From Anywhere in a Program (non-symbolic), Prev: Tracebacks From Exception Occurrences (non-symbolic), Up: Non-Symbolic Traceback - - Tracebacks From Anywhere in a Program - ..................................... - - It is also possible to retrieve a stack traceback from anywhere in a - program. For this you need to use the `GNAT.Traceback' API. This - package includes a procedure called `Call_Chain' that computes a - complete stack traceback, as well as useful display procedures - described below. It is not necessary to use the `-E GNAT BIND' option - in this case, because the stack traceback mechanism is invoked - explicitly. - - In the following example we compute a traceback at a specific location - in the program, and we display it using `GNAT.Debug_Utilities.Image' to - convert addresses to strings: - - with Ada.Text_IO; - with GNAT.Traceback; - with GNAT.Debug_Utilities; - - procedure STB is - - use Ada; - use GNAT; - use GNAT.Traceback; - - procedure P1 is - TB : Tracebacks_Array (1 .. 10); - -- We are asking for a maximum of 10 stack frames. - Len : Natural; - -- Len will receive the actual number of stack frames returned. - begin - Call_Chain (TB, Len); - - Text_IO.Put ("In STB.P1 : "); - - for K in 1 .. Len loop - Text_IO.Put (Debug_Utilities.Image (TB (K))); - Text_IO.Put (' '); - end loop; - - Text_IO.New_Line; - end P1; - - procedure P2 is - begin - P1; - end P2; - - begin - P2; - end STB; - - $ GNAT MAKE stb - $ stb - - In STB.P1 : 16#0040_F1E4# 16#0040_14F2# 16#0040_170B# 16#0040_171C# - 16#0040_1461# 16#0040_11C4# 16#0040_11F1# 16#77E8_92A4# - -  - File: gnat_ug_vms.info, Node: Symbolic Traceback, Prev: Non-Symbolic Traceback, Up: Stack Traceback - - Symbolic Traceback - ------------------ - - A symbolic traceback is a stack traceback in which procedure names are - associated with each code location. - - Note that this feature is not supported on all platforms. See - `GNAT.Traceback.Symbolic spec in G-TRASYM.ADS' for a complete list of - currently supported platforms. - - Note that the symbolic traceback requires that the program be compiled - with debug information. If it is not compiled with debug information - only the non-symbolic information will be valid. - - * Menu: - - * Tracebacks From Exception Occurrences (symbolic):: - * Tracebacks From Anywhere in a Program (symbolic):: - -  - File: gnat_ug_vms.info, Node: Tracebacks From Exception Occurrences (symbolic), Next: Tracebacks From Anywhere in a Program (symbolic), Up: Symbolic Traceback - - Tracebacks From Exception Occurrences - ..................................... - - with Ada.Text_IO; - with GNAT.Traceback.Symbolic; - - procedure STB is - - procedure P1 is - begin - raise Constraint_Error; - end P1; - - procedure P2 is - begin - P1; - end P2; - - procedure P3 is - begin - P2; - end P3; - - begin - P3; - exception - when E : others => - Ada.Text_IO.Put_Line (GNAT.Traceback.Symbolic.Symbolic_Traceback (E)); - end STB; - - $ GNAT MAKE -g stb /BINDER_QUALIFIERS -E /LINKER_QUALIFIERS -lgnat -laddr2line -lintl - $ stb - - 0040149F in stb.p1 at STB.ADB:8 - 004014B7 in stb.p2 at STB.ADB:13 - 004014CF in stb.p3 at STB.ADB:18 - 004015DD in ada.stb at STB.ADB:22 - 00401461 in main at B~STB.ADB:168 - 004011C4 in __mingw_CRTStartup at CRT1.C:200 - 004011F1 in mainCRTStartup at CRT1.C:222 - 77E892A4 in ?? at ??:0 - - The exact sequence of linker options may vary from platform to platform. - The above `/LINKER_QUALIFIERS' section is for Windows platforms. By - contrast, under Unix there is no need for the `/LINKER_QUALIFIERS' - section. Differences across platforms are due to details of linker - implementation. - -  - File: gnat_ug_vms.info, Node: Tracebacks From Anywhere in a Program (symbolic), Prev: Tracebacks From Exception Occurrences (symbolic), Up: Symbolic Traceback - - Tracebacks From Anywhere in a Program - ..................................... - - It is possible to get a symbolic stack traceback from anywhere in a - program, just as for non-symbolic tracebacks. The first step is to - obtain a non-symbolic traceback, and then call `Symbolic_Traceback' to - compute the symbolic information. Here is an example: - - with Ada.Text_IO; - with GNAT.Traceback; - with GNAT.Traceback.Symbolic; - - procedure STB is - - use Ada; - use GNAT.Traceback; - use GNAT.Traceback.Symbolic; - - procedure P1 is - TB : Tracebacks_Array (1 .. 10); - -- We are asking for a maximum of 10 stack frames. - Len : Natural; - -- Len will receive the actual number of stack frames returned. - begin - Call_Chain (TB, Len); - Text_IO.Put_Line (Symbolic_Traceback (TB (1 .. Len))); - end P1; - - procedure P2 is - begin - P1; - end P2; - - begin - P2; - end STB; - -  - File: gnat_ug_vms.info, Node: Compatibility with DEC Ada, Next: Running and Debugging Ada Programs, Prev: Other Utility Programs, Up: Top - - Compatibility with DEC Ada - ************************** - - This section of the manual compares DEC Ada for OpenVMS Alpha and GNAT - OpenVMS Alpha. GNAT achieves a high level of compatibility with DEC - Ada, and it should generally be straightforward to port code from the - DEC Ada environment to GNAT. However, there are a few language and - implementation differences of which the user must be aware. These - differences are discussed in this section. In addition, the operating - environment and command structure for the compiler are different, and - these differences are also discussed. - - Note that this discussion addresses specifically the implementation - of Ada 83 for DIGITAL OpenVMS Alpha Systems. In cases where the - implementation of DEC Ada differs between OpenVMS Alpha Systems and - OpenVMS VAX Systems, GNAT always follows the Alpha implementation. - - * Menu: - - * Ada 95 Compatibility:: - * Differences in the Definition of Package System:: - * Language-Related Features:: - * The Package STANDARD:: - * The Package SYSTEM:: - * Tasking and Task-Related Features:: - * Implementation of Tasks in DEC Ada for OpenVMS Alpha Systems:: - * Pragmas and Pragma-Related Features:: - * Library of Predefined Units:: - * Bindings:: - * Main Program Definition:: - * Implementation-Defined Attributes:: - * Compiler and Run-Time Interfacing:: - * Program Compilation and Library Management:: - * Input-Output:: - * Implementation Limits:: - * Tools:: - -  - File: gnat_ug_vms.info, Node: Ada 95 Compatibility, Next: Differences in the Definition of Package System, Up: Compatibility with DEC Ada - - Ada 95 Compatibility - ==================== - - GNAT is an Ada 95 compiler, and DEC Ada is an Ada 83 compiler. Ada 95 - is almost completely upwards compatible with Ada 83, and therefore Ada - 83 programs will compile and run under GNAT with no changes or only - minor changes. The Ada 95 Reference Manual (ANSI/ISO/IEC-8652:1995) - provides details on specific incompatibilities. - - GNAT provides the qualifier /83 on the GNAT COMPILE command, as well - as the pragma ADA_83, to force the compiler to operate in Ada 83 mode. - This mode does not guarantee complete conformance to Ada 83, but in - practice is sufficient to eliminate most sources of incompatibilities. - In particular, it eliminates the recognition of the additional Ada 95 - keywords, so that their use as identifiers in Ada83 program is legal, - and handles the cases of packages with optional bodies, and generics - that instantiate unconstrained types without the use of `(<>)'. - -  - File: gnat_ug_vms.info, Node: Differences in the Definition of Package System, Next: Language-Related Features, Prev: Ada 95 Compatibility, Up: Compatibility with DEC Ada - - Differences in the Definition of Package System - =============================================== - - Both the Ada 95 and Ada 83 reference manuals permit a compiler to add - implementation-dependent declarations to package System. In normal mode, - GNAT does not take advantage of this permission, and the version of - System provided by GNAT exactly matches that in the Ada 95 Reference - Manual. - - However, DEC Ada adds an extensive set of declarations to package - System, as fully documented in the DEC Ada manuals. To minimize changes - required for programs that make use of these extensions, GNAT provides - the pragma Extend_System for extending the definition of package - System. By using: - - pragma Extend_System (Aux_DEC); - - The set of definitions in System is extended to include those in package - `System.Aux_DEC'. These definitions are incorporated directly into - package System, as though they had been declared there in the first - place. For a list of the declarations added, see the specification of - this package, which can be found in the file `S-AUXDEC.ADS' in the GNAT - library. The pragma Extend_System is a configuration pragma, which - means that it can be placed in the file `GNAT.ADC', so that it will - automatically apply to all subsequent compilations. See the section on - Configuration Pragmas for further details. - - An alternative approach that avoids the use of the non-standard - Extend_System pragma is to add a context clause to the unit that - references these facilities: - - with System.Aux_DEC; - use System.Aux_DEC; - - The effect is not quite semantically identical to incorporating the - declarations directly into package `System', but most programs will not - notice a difference unless they use prefix notation (e.g. - `System.Integer_8') to reference the entities directly in package - `System'. For units containing such references, the prefixes must - either be removed, or the pragma `Extend_System' must be used. - -  - File: gnat_ug_vms.info, Node: Language-Related Features, Next: The Package STANDARD, Prev: Differences in the Definition of Package System, Up: Compatibility with DEC Ada - - Language-Related Features - ========================= - - The following sections highlight differences in types, representations - of types, operations, alignment, and related topics. - - * Menu: - - * Integer Types and Representations:: - * Floating-Point Types and Representations:: - * Pragmas Float_Representation and Long_Float:: - * Fixed-Point Types and Representations:: - * Record and Array Component Alignment:: - * Address Clauses:: - * Other Representation Clauses:: - -  - File: gnat_ug_vms.info, Node: Integer Types and Representations, Next: Floating-Point Types and Representations, Up: Language-Related Features - - Integer Types and Representations - --------------------------------- - - The set of predefined integer types is identical in DEC Ada and GNAT. - Furthermore the representation of these integer types is also identical, - including the capability of size clauses forcing biased representation. - - In addition, DEC Ada for OpenVMS Alpha systems has defined the - following additional integer types in package System: - - * INTEGER_8 - - * INTEGER_16 - - * INTEGER_32 - - * INTEGER_64 - - * LARGEST_INTEGER - - When using GNAT, the first four of these types may be obtained from the - standard Ada 95 package `Interfaces'. Alternatively, by use of the - pragma `Extend_System', identical declarations can be referenced - directly in package `System'. On both GNAT and DEC Ada, the maximum - integer size is 64 bits. - -  - File: gnat_ug_vms.info, Node: Floating-Point Types and Representations, Next: Pragmas Float_Representation and Long_Float, Prev: Integer Types and Representations, Up: Language-Related Features - - Floating-Point Types and Representations - ---------------------------------------- - - The set of predefined floating-point types is identical in DEC Ada and - GNAT. Furthermore the representation of these floating-point types is - also identical. One important difference is that the default - representation for DEC Ada is VAX_Float, but the default representation - for GNAT is IEEE. - - Specific types may be declared to be VAX_Float or IEEE, using the - pragma `Float_Representation' as described in the DEC Ada documentation. - For example, the declarations: - - type F_Float is digits 6; - pragma Float_Representation (VAX_Float, F_Float); - - declare a type F_Float that will be represented in VAX_Float format. - This set of declarations actually appears in System.Aux_DEC, which - provides the full set of additional floating-point declarations - provided in the DEC Ada version of package System. This and similar - declarations may be accessed in a user program by using pragma - `Extend_System'. The use of this pragma, and the related pragma - `Long_Float' is described in further detail in the following section. - -  - File: gnat_ug_vms.info, Node: Pragmas Float_Representation and Long_Float, Next: Fixed-Point Types and Representations, Prev: Floating-Point Types and Representations, Up: Language-Related Features - - Pragmas Float_Representation and Long_Float - ------------------------------------------- - - DEC Ada provides the pragma `Float_Representation', which acts as a - program library qualifier to allow control over the internal - representation chosen for the predefined floating-point types declared - in the package `Standard'. The format of this pragma is as follows: - - pragma `Float_Representation'(VAX_Float | IEEE_Float); - - This pragma controls the representation of floating-point types as - follows: - - * `VAX_Float' specifies that floating-point types are represented by - default with the VAX hardware types F-floating, D-floating, - G-floating. Note that the H-floating type is available only on - DIGITAL Vax systems, and is not available in either DEC Ada or - GNAT for Alpha systems. - - * `IEEE_Float' specifies that floating-point types are represented - by default with the IEEE single and double floating-point types. - - GNAT provides an identical implementation of the pragma - `Float_Representation', except that it functions as a configuration - pragma, as defined by Ada 95. Note that the notion of configuration - pragma corresponds closely to the DEC Ada notion of a program library - qualifier. - - When no pragma is used in GNAT, the default is IEEE_Float, which is - different from DEC Ada 83, where the default is VAX_Float. In addition, - the predefined libraries in GNAT are built using IEEE_Float, so it is - not advisable to change the format of numbers passed to standard library - routines, and if necessary explicit type conversions may be needed. - - The use of IEEE_Float is recommended in GNAT since it is more - efficient, and (given that it conforms to an international standard) - potentially more portable. The situation in which VAX_Float may be - useful is in interfacing to existing code and data that expects the use - of VAX_Float. There are two possibilities here. If the requirement for - the use of VAX_Float is localized, then the best approach is to use the - predefined VAX_Float types in package `System', as extended by - `Extend_System'. For example, use `System.F_Float' to specify the - 32-bit `F-Float' format. - - Alternatively, if an entire program depends heavily on the use of - the `VAX_Float' and in particular assumes that the types in package - `Standard' are in `Vax_Float' format, then it may be desirable to - reconfigure GNAT to assume Vax_Float by default. This is done by using - the GNAT LIBRARY command to rebuild the library, and then using the - general form of the `Float_Representation' pragma to ensure that this - default format is used throughout. The form of the GNAT LIBRARY - command is: - - GNAT LIBRARY /CONFIG=file /CREATE=directory - - where file contains the new configuration pragmas and directory is the - directory to be created to contain the new library. - - On OpenVMS systems, DEC Ada provides the pragma `Long_Float' to allow - control over the internal representation chosen for the predefined type - `Long_Float' and for floating-point type declarations with digits - specified in the range 7 .. 15. The format of this pragma is as - follows: - - pragma Long_Float (D_FLOAT | G_FLOAT); - -  - File: gnat_ug_vms.info, Node: Fixed-Point Types and Representations, Next: Record and Array Component Alignment, Prev: Pragmas Float_Representation and Long_Float, Up: Language-Related Features - - Fixed-Point Types and Representations - ------------------------------------- - - On DEC Ada for OpenVMS Alpha systems, rounding is away from zero for - both positive and negative numbers. Therefore, +0.5 rounds to 1 and - -0.5 rounds to -1. - - On GNAT for OpenVMS Alpha, the results of operations on fixed-point - types are in accordance with the Ada 95 rules. In particular, results - of operations on decimal fixed-point types are truncated. - -  - File: gnat_ug_vms.info, Node: Record and Array Component Alignment, Next: Address Clauses, Prev: Fixed-Point Types and Representations, Up: Language-Related Features - - Record and Array Component Alignment - ------------------------------------ - - On DEC Ada for OpenVMS Alpha, all non composite components are aligned - on natural boundaries. For example, 1-byte components are aligned on - byte boundaries, 2-byte components on 2-byte boundaries, 4-byte - components on 4-byte byte boundaries, and so on. The OpenVMS Alpha - hardware runs more efficiently with naturally aligned data. - - ON GNAT for OpenVMS Alpha, alignment rules are compatible with DEC - Ada for OpenVMS Alpha. - -  - File: gnat_ug_vms.info, Node: Address Clauses, Next: Other Representation Clauses, Prev: Record and Array Component Alignment, Up: Language-Related Features - - Address Clauses - --------------- - - In DEC Ada and GNAT, address clauses are supported for objects and - imported subprograms. The predefined type `System.Address' is a - private type in both compilers, with the same representation (it is - simply a machine pointer). Addition, subtraction, and comparison - operations are available in the standard Ada 95 package - `System.Storage_Elements', or in package `System' if it is extended to - include `System.Aux_DEC' using a pragma `Extend_System' as previously - described. - - Note that code that with's both this extended package `System' and - the package `System.Storage_Elements' should not `use' both packages, - or ambiguities will result. In general it is better not to mix these - two sets of facilities. The Ada 95 package was designed specifically to - provide the kind of features that DEC Ada adds directly to package - `System'. - - GNAT is compatible with DEC Ada in its handling of address clauses, - except for some limitations in the form of address clauses for - composite objects with initialization. Such address clauses are easily - replaced by the use of an explicitly-defined constant as described in - the Ada 95 Reference Manual (13.1(22)). For example, the sequence of - declarations: - - X, Y : Integer := Init_Func; - Q : String (X .. Y) := "abc"; - ... - for Q'Address use Compute_Address; - - will be rejected by GNAT, since the address cannot be computed at the - time that Q is declared. To achieve the intended effect, write instead: - - X, Y : Integer := Init_Func; - Q_Address : constant Address := Compute_Address; - Q : String (X .. Y) := "abc"; - ... - for Q'Address use Q_Address; - - which will be accepted by GNAT (and other Ada 95 compilers), and is also - backwards compatible with Ada 83. A fuller description of the - restrictions on address specifications is found in the GNAT Reference - Manual. - -  - File: gnat_ug_vms.info, Node: Other Representation Clauses, Prev: Address Clauses, Up: Language-Related Features - - Other Representation Clauses - ---------------------------- - - GNAT supports in a compatible manner all the representation clauses - supported by DEC Ada. In addition, it supports representation clause - forms that are new in Ada 95 including COMPONENT_SIZE and SIZE clauses - for objects. - -  - File: gnat_ug_vms.info, Node: The Package STANDARD, Next: The Package SYSTEM, Prev: Language-Related Features, Up: Compatibility with DEC Ada - - The Package STANDARD - ==================== - - The package STANDARD, as implemented by DEC Ada, is fully described in - the Reference Manual for the Ada Programming Language - (ANSI/MIL-STD-1815A-1983) and in the DEC Ada Language Reference Manual. - As implemented by GNAT, the package STANDARD is described in the Ada 95 - Reference Manual. - - In addition, DEC Ada supports the Latin-1 character set in the type - CHARACTER. GNAT supports the Latin-1 character set in the type - CHARACTER and also Unicode (ISO 10646 BMP) in the type WIDE_CHARACTER. - - The floating-point types supported by GNAT are those supported by - DEC Ada, but defaults are different, and are controlled by pragmas. See - *note Floating-Point Types and Representations:: for details. - -  - File: gnat_ug_vms.info, Node: The Package SYSTEM, Next: Tasking and Task-Related Features, Prev: The Package STANDARD, Up: Compatibility with DEC Ada - - The Package SYSTEM - ================== - - DEC Ada provides a system-specific version of the package SYSTEM for - each platform on which the language ships. For the complete - specification of the package SYSTEM, see Appendix F of the DEC Ada - Language Reference Manual. - - On DEC Ada, the package SYSTEM includes the following conversion - functions: - * TO_ADDRESS(INTEGER) - - * TO_ADDRESS(UNSIGNED_LONGWORD) - - * TO_ADDRESS(universal_integer) - - * TO_INTEGER(ADDRESS) - - * TO_UNSIGNED_LONGWORD(ADDRESS) - - * Function IMPORT_VALUE return UNSIGNED_LONGWORD and the - functions IMPORT_ADDRESS and IMPORT_LARGEST_VALUE - - By default, GNAT supplies a version of SYSTEM that matches the - definition given in the Ada 95 Reference Manual. This is a subset of - the DIGITAL system definitions, which is as close as possible to the - original definitions. The only difference is that the definition of - SYSTEM_NAME is different: - - type Name is (SYSTEM_NAME_GNAT); - System_Name : constant Name := SYSTEM_NAME_GNAT; - - Also, GNAT adds the new Ada 95 declarations for BIT_ORDER and - DEFAULT_BIT_ORDER. - - However, the use of the following pragma causes GNAT to extend the - definition of package SYSTEM so that it encompasses the full set of - DIGITAL-specific extensions, including the functions listed above: - - pragma Extend_System (Aux_DEC); - - The pragma Extend_System is a configuration pragma that is most - conveniently placed in the `GNAT.ADC' file. See the GNAT Reference - Manual for further details. - - DEC Ada does not allow the recompilation of the package SYSTEM. - Instead DEC Ada provides several pragmas (SYSTEM_ NAME, STORAGE_UNIT, - and MEMORY_SIZE) to modify values in the package SYSTEM. On OpenVMS - Alpha systems, the pragma SYSTEM_NAME takes the enumeration literal - OPENVMS_AXP as its single argument. - - GNAT does permit the recompilation of package SYSTEM using a special - qualifier (/STYLE=GNAT) and this qualifier can be used if it is - necessary to change constants in SYSTEM. GNAT does not permit the - specification of SYSTEM_NAME, STORAGE_UNIT or MEMORY_SIZE by any other - means. - - On GNAT systems, the pragma SYSTEM_NAME takes the enumeration - literal SYSTEM_NAME_GNAT. - - The definitions provided by the use of - - pragma Extend_System (AUX_Dec); - - are virtually identical to those provided by the DEC Ada 83 package - System. One important difference is that the name of the TO_ADDRESS - function for type UNSIGNED_LONGWORD is changed to TO_ADDRESS_LONG. See - the GNAT Reference manual for a discussion of why this change was - necessary. - - The version of TO_ADDRESS taking a universal integer argument is in fact - an extension to Ada 83 not strictly compatible with the reference - manual. In GNAT, we are constrained to be exactly compatible with the - standard, and this means we cannot provide this capability. In DEC Ada - 83, the point of this definition is to deal with a call like: - - TO_ADDRESS (16#12777#); - - Normally, according to the Ada 83 standard, one would expect this to be - ambiguous, since it matches both the INTEGER and UNSIGNED_LONGWORD forms - of TO_ADDRESS. However, in DEC Ada 83, there is no ambiguity, since the - definition using universal_integer takes precedence. - - In GNAT, since the version with universal_integer cannot be - supplied, it is not possible to be 100% compatible. Since there are - many programs using numeric constants for the argument to TO_ADDRESS, - the decision in GNAT was to change the name of the function in the - UNSIGNED_LONGWORD case, so the declarations provided in the GNAT - version of AUX_Dec are: - - function To_Address (X : Integer) return Address; - pragma Pure_Function (To_Address); - - function To_Address_Long (X : Unsigned_Longword) return Address; - pragma Pure_Function (To_Address_Long); - - This means that programs using TO_ADDRESS for UNSIGNED_LONGWORD must - change the name to TO_ADDRESS_LONG. - -  - File: gnat_ug_vms.info, Node: Tasking and Task-Related Features, Next: Implementation of Tasks in DEC Ada for OpenVMS Alpha Systems, Prev: The Package SYSTEM, Up: Compatibility with DEC Ada - - Tasking and Task-Related Features - ================================= - - The concepts relevant to a comparison of tasking on GNAT and on DEC Ada - for OpenVMS Alpha systems are discussed in the following sections. - - For detailed information on concepts related to tasking in DEC Ada, - see the DEC Ada Language Reference Manual and the relevant run-time - reference manual. - -  - File: gnat_ug_vms.info, Node: Implementation of Tasks in DEC Ada for OpenVMS Alpha Systems, Next: Pragmas and Pragma-Related Features, Prev: Tasking and Task-Related Features, Up: Compatibility with DEC Ada - - Implementation of Tasks in DEC Ada for OpenVMS Alpha Systems - ============================================================ - - On OpenVMS Alpha systems, each Ada task (except a passive task) is - implemented as a single stream of execution that is created and managed - by the kernel. On these systems, DEC Ada tasking support is based on - DECthreads, an implementation of the POSIX standard for threads. - - Although tasks are implemented as threads, all tasks in an Ada - program are part of the same process. As a result, resources such as - open files and virtual memory can be shared easily among tasks. Having - all tasks in one process allows better integration with the programming - environment (the shell and the debugger, for example). - - Also, on OpenVMS Alpha systems, DEC Ada tasks and foreign code that - calls DECthreads routines can be used together. The interaction - between Ada tasks and DECthreads routines can have some benefits. For - example when on OpenVMS Alpha, DEC Ada can call C code that is already - threaded. GNAT on OpenVMS Alpha uses the facilities of DECthreads, and - Ada tasks are mapped to threads. - - * Menu: - - * Assigning Task IDs:: - * Task IDs and Delays:: - * Task-Related Pragmas:: - * Scheduling and Task Priority:: - * The Task Stack:: - * External Interrupts:: - -  - File: gnat_ug_vms.info, Node: Assigning Task IDs, Next: Task IDs and Delays, Up: Implementation of Tasks in DEC Ada for OpenVMS Alpha Systems - - Assigning Task IDs - ------------------ - - The DEC Ada Run-Time Library always assigns %TASK 1 to the environment - task that executes the main program. On OpenVMS Alpha systems, %TASK 0 - is often used for tasks that have been created but are not yet - activated. - - On OpenVMS Alpha systems, task IDs are assigned at activation. On - GNAT systems, task IDs are also assigned at task creation but do not - have the same form or values as task ID values in DEC Ada. There is no - null task, and the environment task does not have a specific task ID - value. - -  - File: gnat_ug_vms.info, Node: Task IDs and Delays, Next: Task-Related Pragmas, Prev: Assigning Task IDs, Up: Implementation of Tasks in DEC Ada for OpenVMS Alpha Systems - - Task IDs and Delays - ------------------- - - On OpenVMS Alpha systems, tasking delays are implemented using Timer - System Services. The Task ID is used for the identification of the - timer request (the REQIDT parameter). If Timers are used in the - application take care not to use 0 for the identification, because - cancelling such a timer will cancel all timers and may lead to - unpredictable results. - -  - File: gnat_ug_vms.info, Node: Task-Related Pragmas, Next: Scheduling and Task Priority, Prev: Task IDs and Delays, Up: Implementation of Tasks in DEC Ada for OpenVMS Alpha Systems - - Task-Related Pragmas - -------------------- - - Ada supplies the pragma TASK_STORAGE, which allows specification of the - size of the guard area for a task stack. (The guard area forms an area - of memory that has no read or write access and thus helps in the - detection of stack overflow.) On OpenVMS Alpha systems, if the pragma - TASK_STORAGE specifies a value of zero, a minimal guard area is - created. In the absence of a pragma TASK_STORAGE, a default guard area - is created. - - GNAT supplies the following task-related pragmas: - - * TASK_INFO - - This pragma appears within a task definition and - applies to the task in which it appears. The argument - must be of type SYSTEM.TASK_INFO.TASK_INFO_TYPE. - - * TASK_STORAGE - - GNAT implements pragma TASK_STORAGE in the same way as - DEC Ada. Both DEC Ada and GNAT supply the pragmas - PASSIVE, SUPPRESS, and VOLATILE. - -  - File: gnat_ug_vms.info, Node: Scheduling and Task Priority, Next: The Task Stack, Prev: Task-Related Pragmas, Up: Implementation of Tasks in DEC Ada for OpenVMS Alpha Systems - - Scheduling and Task Priority - ---------------------------- - - DEC Ada implements the Ada language requirement that when two tasks are - eligible for execution and they have different priorities, the lower - priority task does not execute while the higher priority task is - waiting. The DEC Ada Run-Time Library keeps a task running until either - the task is suspended or a higher priority task becomes ready. - - On OpenVMS Alpha systems, the default strategy is round- robin with - preemption. Tasks of equal priority take turns at the processor. A task - is run for a certain period of time and then placed at the rear of the - ready queue for its priority level. - - DEC Ada provides the implementation-defined pragma TIME_SLICE, which - can be used to enable or disable round-robin scheduling of tasks with - the same priority. See the relevant DEC Ada run-time reference manual - for information on using the pragmas to control DEC Ada task scheduling. - - GNAT follows the scheduling rules of Annex D (real-time Annex) of - the Ada 95 Reference Manual. In general, this scheduling strategy is - fully compatible with DEC Ada although it provides some additional - constraints (as fully documented in Annex D). GNAT implements time - slicing control in a manner compatible with DEC Ada 83, by means of the - pragma Time_Slice, whose semantics are identical to the DEC Ada 83 - pragma of the same name. Note that it is not possible to mix GNAT - tasking and DEC Ada 83 tasking in the same program, since the two run - times are not compatible. - -  - File: gnat_ug_vms.info, Node: The Task Stack, Next: External Interrupts, Prev: Scheduling and Task Priority, Up: Implementation of Tasks in DEC Ada for OpenVMS Alpha Systems - - The Task Stack - -------------- - - In DEC Ada, a task stack is allocated each time a non passive task is - activated. As soon as the task is terminated, the storage for the task - stack is deallocated. If you specify a size of zero (bytes) with - T'STORAGE_SIZE, a default stack size is used. Also, regardless of the - size specified, some additional space is allocated for task management - purposes. On OpenVMS Alpha systems, at least one page is allocated. - - GNAT handles task stacks in a similar manner. According to the Ada - 95 rules, it provides the pragma STORAGE_SIZE as an alternative method - for controlling the task stack size. The specification of the - attribute T'STORAGE_SIZE is also supported in a manner compatible with - DEC Ada. - -  - File: gnat_ug_vms.info, Node: External Interrupts, Prev: The Task Stack, Up: Implementation of Tasks in DEC Ada for OpenVMS Alpha Systems - - External Interrupts - ------------------- - - On DEC Ada, external interrupts can be associated with task entries. - GNAT is compatible with DEC Ada in its handling of external interrupts. - -  - File: gnat_ug_vms.info, Node: Pragmas and Pragma-Related Features, Next: Library of Predefined Units, Prev: Implementation of Tasks in DEC Ada for OpenVMS Alpha Systems, Up: Compatibility with DEC Ada - - Pragmas and Pragma-Related Features - =================================== - - Both DEC Ada and GNAT supply all language-defined pragmas as specified - by the Ada 83 standard. GNAT also supplies all language-defined pragmas - specified in the Ada 95 Reference Manual. In addition, GNAT implements - the implementation-defined pragmas from DEC Ada 83. - - * AST_ENTRY - - * COMMON_OBJECT - - * COMPONENT_ALIGNMENT - - * EXPORT_EXCEPTION - - * EXPORT_FUNCTION - - * EXPORT_OBJECT - - * EXPORT_PROCEDURE - - * EXPORT_VALUED_PROCEDURE - - * FLOAT_REPRESENTATION - - * IDENT - - * IMPORT_EXCEPTION - - * IMPORT_FUNCTION - - * IMPORT_OBJECT - - * IMPORT_PROCEDURE - - * IMPORT_VALUED_PROCEDURE - - * INLINE_GENERIC - - * INTERFACE_NAME - - * LONG_FLOAT - - * MAIN_STORAGE - - * PASSIVE - - * PSET_OBJECT - - * SHARE_GENERIC - - * SUPPRESS_ALL - - * TASK_STORAGE - - * TIME_SLICE - - * TITLE - - These pragmas are all fully implemented, with the exception of `Title', - `Passive', and `Share_Generic', which are recognized, but which have no - effect in GNAT. The effect of `Passive' may be obtained by the use of - protected objects in Ada 95. In GNAT, all generics are inlined. - - Unlike DEC Ada, the GNAT 'EXPORT_subprogram' pragmas require a - separate subprogram specification which must appear before the - subprogram body. - - GNAT also supplies a number of implementation-defined pragmas as - follows: - * C_PASS_BY_COPY - - * EXTEND_SYSTEM - - * SOURCE_FILE_NAME - - * UNSUPPRESS - - * WARNINGS - - * ABORT_DEFER - - * ADA_83 - - * ADA_95 - - * ANNOTATE - - * ASSERT - - * CPP_CLASS - - * CPP_CONSTRUCTOR - - * CPP_DESTRUCTOR - - * CPP_VIRTUAL - - * CP_VTABLE - - * DEBUG - - * LINKER_ALIAS - - * LINKER_SECTION - - * MACHINE_ATTRIBUTE - - * NO_RETURN - - * PURE_FUNCTION - - * SOURCE_REFERENCE - - * TASK_INFO - - * UNCHECKED_UNION - - * UNIMPLEMENTED_UNIT - - * WEAK_EXTERNAL - - For full details on these GNAT implementation-defined pragmas, see the - GNAT Reference Manual. - - * Menu: - - * Restrictions on the Pragma INLINE:: - * Restrictions on the Pragma INTERFACE:: - * Restrictions on the Pragma SYSTEM_NAME:: - -  - File: gnat_ug_vms.info, Node: Restrictions on the Pragma INLINE, Next: Restrictions on the Pragma INTERFACE, Up: Pragmas and Pragma-Related Features - - Restrictions on the Pragma INLINE - --------------------------------- - - DEC Ada applies the following restrictions to the pragma INLINE: - * Parameters cannot be a task type. - - * Function results cannot be task types, unconstrained array types, - or unconstrained types with discriminants. - - * Bodies cannot declare the following: - * Subprogram body or stub (imported subprogram is allowed) - - * Tasks - - * Generic declarations - - * Instantiations - - * Exceptions - - * Access types (types derived from access types allowed) - - * Array or record types - - * Dependent tasks - - * Direct recursive calls of subprogram or containing - subprogram, directly or via a renaming - - - In GNAT, the only restriction on pragma INLINE is that the body must - occur before the call if both are in the same unit, and the size must - be appropriately small. There are no other specific restrictions which - cause subprograms to be incapable of being inlined. - -  - File: gnat_ug_vms.info, Node: Restrictions on the Pragma INTERFACE, Next: Restrictions on the Pragma SYSTEM_NAME, Prev: Restrictions on the Pragma INLINE, Up: Pragmas and Pragma-Related Features - - Restrictions on the Pragma INTERFACE - ------------------------------------ - - The following lists and describes the restrictions on the pragma - INTERFACE on DEC Ada and GNAT: - * Languages accepted: Ada, Bliss, C, Fortran, Default. Default is - the default on OpenVMS Alpha systems. - - * Parameter passing: Language specifies default mechanisms but can - be overridden with an EXPORT pragma. - - * Ada: Use internal Ada rules. - - * Bliss, C: Parameters must be mode `in'; cannot be record or - task type. Result cannot be a string, an array, or a record. - - * Fortran: Parameters cannot be a task. Result cannot be a - string, an array, or a record. - - GNAT is entirely upwards compatible with DEC Ada, and in addition allows - record parameters for all languages. - -  - File: gnat_ug_vms.info, Node: Restrictions on the Pragma SYSTEM_NAME, Prev: Restrictions on the Pragma INTERFACE, Up: Pragmas and Pragma-Related Features - - Restrictions on the Pragma SYSTEM_NAME - -------------------------------------- - - For DEC Ada for OpenVMS Alpha, the enumeration literal for the type - NAME is OPENVMS_AXP. In GNAT, the enumeration literal for the type NAME - is SYSTEM_NAME_GNAT. - -  - File: gnat_ug_vms.info, Node: Library of Predefined Units, Next: Bindings, Prev: Pragmas and Pragma-Related Features, Up: Compatibility with DEC Ada - - Library of Predefined Units - =========================== - - A library of predefined units is provided as part of the DEC Ada and - GNAT implementations. DEC Ada does not provide the package MACHINE_CODE - but instead recommends importing assembler code. - - The GNAT versions of the DEC Ada Run-Time Library (ADA$PREDEFINED:) - units are taken from the OpenVMS Alpha version, not the OpenVMS VAX - version. During GNAT installation, the DEC Ada Predefined Library units - are copied into the GNU:[LIB.OPENVMS7_x.2_8_x.DECLIB] (aka DECLIB) - directory and patched to remove Ada 95 incompatibilities and to make - them interoperable with GNAT, *note Changes to DECLIB:: for details. - - The GNAT RTL is contained in the GNU:[LIB.OPENVMS7_x.2_8_x.ADALIB] - (aka ADALIB) directory and the default search path is set up to find - DECLIB units in preference to ADALIB units with the same name (TEXT_IO, - SEQUENTIAL_IO, and DIRECT_IO, for example). - - However, it is possible to change the default so that the reverse is - true, or even to mix them using child package notation. The DEC Ada 83 - units are available as DEC.xxx where xxx is the package name, and the - Ada units are available in the standard manner defined for Ada 95, that - is to say as Ada.xxx. To change the default, set ADA_INCLUDE_PATH and - ADA_OBJECTS_PATH appropriately. For example, to change the default to - use the Ada95 versions do: - - $ DEFINE ADA_INCLUDE_PATH GNU:[LIB.OPENVMS7_1.2_8_1.ADAINCLUDE],- - GNU:[LIB.OPENVMS7_1.2_8_1.DECLIB] - $ DEFINE ADA_OBJECTS_PATH GNU:[LIB.OPENVMS7_1.2_8_1.ADALIB],- - GNU:[LIB.OPENVMS7_1.2_8_1.DECLIB] - - * Menu: - - * Changes to DECLIB:: - -  - File: gnat_ug_vms.info, Node: Changes to DECLIB, Up: Library of Predefined Units - - Changes to DECLIB - ----------------- - - The changes made to the DEC Ada predefined library for GNAT and Ada 95 - compatibility are minor and include the following: - - * Adjusting the location of pragmas and record representation - clauses to obey Ada 95 rules - - * Adding the proper notation to generic formal parameters that take - unconstrained types in instantiation - - * Adding pragma ELABORATE_BODY to package specifications that have - package bodies not otherwise allowed - - * Occurrences of the identifier "PROTECTED" are renamed to - "PROTECTD". Currently these are found only in the STARLET package - spec. - - None of the above changes is visible to users. - -  - File: gnat_ug_vms.info, Node: Bindings, Next: Main Program Definition, Prev: Library of Predefined Units, Up: Compatibility with DEC Ada - - Bindings - ======== - - On OpenVMS Alpha, DEC Ada provides the following strongly-typed - bindings: - * Command Language Interpreter (CLI interface) - - * DECtalk Run-Time Library (DTK interface) - - * Librarian utility routines (LBR interface) - - * General Purpose Run-Time Library (LIB interface) - - * Math Run-Time Library (MTH interface) - - * National Character Set Run-Time Library (NCS interface) - - * Compiled Code Support Run-Time Library (OTS interface) - - * Parallel Processing Run-Time Library (PPL interface) - - * Screen Management Run-Time Library (SMG interface) - - * Sort Run-Time Library (SOR interface) - - * String Run-Time Library (STR interface) - - * STARLET System Library - - * X Window System Version 11R4 and 11R5 (X, XLIB interface) - - * X Windows Toolkit (XT interface) - - * X/Motif Version 1.1.3 and 1.2 (XM interface) - - GNAT provides implementations of these DEC bindings in the DECLIB - directory. - - The X/Motif bindings used to build DECLIB are whatever versions are - in the DEC Ada ADA$PREDEFINED directory with extension .ADC. The build - script will automatically add a pragma Linker_Options to packages Xm, - Xt, and X_Lib causing the default X/Motif shareable image libraries to - be linked in. This is done via options files named xm.opt, xt.opt, and - x_lib.opt (also located in the DECLIB directory). - - It may be necessary to edit these options files to update or correct - the library names if, for example, the newer X/Motif bindings from - ADA$EXAMPLES had been (previous to installing GNAT) copied and renamed - to superseded the default ADA$PREDEFINED versions. - - * Menu: - - * Shared Libraries and Options Files:: - * Interfaces to C:: - -  - File: gnat_ug_vms.info, Node: Shared Libraries and Options Files, Next: Interfaces to C, Up: Bindings - - Shared Libraries and Options Files - ---------------------------------- - - When using the DEC Ada predefined X and Motif bindings, the linking - with their shareable images is done automatically by GNAT LINK. When - using other X and Motif bindings, it is necessary to add the - corresponding shareable images to the command line for GNAT LINK. When - linking with shared libraries, or with .OPT files, it is also necessary - to add them to the command line for GNAT LINK. - - A shared library to be used with GNAT is built in the same way as - other libraries under VMS. The VMS Link command can be used in standard - fashion. - -  - File: gnat_ug_vms.info, Node: Interfaces to C, Prev: Shared Libraries and Options Files, Up: Bindings - - Interfaces to C - --------------- - - DEC Ada provides the following Ada types and operations: - - * C types package (C_TYPES) - - * C strings (C_TYPES.NULL_TERMINATED) - - * Other_types (SHORT_INT) - - Interfacing to C with GNAT, one can use the above approach described - for DEC Ada or the facilities of Annex B of the Ada 95 Reference Manual - (packages INTERFACES.C, INTERFACES.C.STRINGS and - INTERFACES.C.POINTERS). For more information, see the section - "Interfacing to C" in the GNAT Reference Manual. - - The `/UPPERCASE_EXTERNALS' qualifier forces default and explicit - `External_Name' parameters in pragmas Import and Export to be - uppercased for compatibility with the default behavior of DEC C. The - qualifier has no effect on `Link_Name' parameters. - -  - File: gnat_ug_vms.info, Node: Main Program Definition, Next: Implementation-Defined Attributes, Prev: Bindings, Up: Compatibility with DEC Ada - - Main Program Definition - ======================= - - The following section discusses differences in the definition of main - programs on DEC Ada and GNAT. On DEC Ada, main programs are defined to - meet the following conditions: - * Procedure with no formal parameters (returns 0 upon normal - completion) - - * Procedure with no formal parameters (returns 42 when - unhandled exceptions are raised) - - * Function with no formal parameters whose returned value is - of a discrete type - - * Procedure with one OUT formal of a discrete type for which - a specification of pragma EXPORT_VALUED_PROCEDURE is given. - - - When declared with the pragma EXPORT_VALUED_PROCEDURE, a main function - or main procedure returns a discrete value whose size is less than 64 - bits (32 on VAX systems), the value is zero- or sign-extended as - appropriate. On GNAT, main programs are defined as follows: - * Must be a non-generic, parameter-less subprogram that is either a - procedure or function returning an Ada STANDARD.INTEGER (the - predefined type) - - * Cannot be a generic subprogram or an instantiation of a generic - subprogram - -  - File: gnat_ug_vms.info, Node: Implementation-Defined Attributes, Next: Compiler and Run-Time Interfacing, Prev: Main Program Definition, Up: Compatibility with DEC Ada - - Implementation-Defined Attributes - ================================= - - GNAT provides all DEC Ada implementation-defined attributes. - -  - File: gnat_ug_vms.info, Node: Compiler and Run-Time Interfacing, Next: Program Compilation and Library Management, Prev: Implementation-Defined Attributes, Up: Compatibility with DEC Ada - - Compiler and Run-Time Interfacing - ================================= - - DEC Ada provides the following ways to pass options to the linker (ACS - LINK): - * /WAIT and /SUBMIT qualifiers - - * /COMMAND qualifier - - * /[NO]MAP qualifier - - * /OUTPUT=file-spec - - * /[NO]DEBUG and /[NO]TRACEBACK qualifiers - - To pass options to the linker, GNAT provides the following qualifiers: - - * /EXECUTABLE=exec-name - - * /VERBOSE qualifier - - * /[NO]DEBUG and /[NO]TRACEBACK qualifiers - - For more information on these qualifiers, see the section "Qualifiers - for GNAT LINK" in the corresponding section of this Guide. In DEC Ada, - the command-line qualifier /OPTIMIZE is available to control - optimization. DEC Ada also supplies the following pragmas: - * OPTIMIZE - - * INLINE - - * INLINE_GENERIC - - * SUPPRESS_ALL - - * PASSIVE - - In GNAT, optimization is controlled strictly by command line - parameters, as described in the corresponding section of this guide. - The DIGITAL pragmas for control of optimization are recognized but - ignored. - - Note that in GNAT, the default is optimization off, whereas in DEC - Ada 83, the default is that optimization is turned on. - -  - File: gnat_ug_vms.info, Node: Program Compilation and Library Management, Next: Input-Output, Prev: Compiler and Run-Time Interfacing, Up: Compatibility with DEC Ada - - Program Compilation and Library Management - ========================================== - - DEC Ada and GNAT provide a comparable set of commands to build - programs. DEC Ada also provides a program library, which is a concept - that does not exist on GNAT. Instead, GNAT provides directories of - sources that are compiled as needed. - - The following table summarizes the DEC Ada commands and provides - equivalent GNAT commands. In this table, some GNAT equivalents reflect - the fact that GNAT does not use the concept of a program library. - Instead, it uses a model in which collections of source and object - files are used in a manner consistent with other languages like C and - Fortran. Therefore, standard system file commands are used to - manipulate these elements. Those GNAT commands are marked with an - asterisk in the table that follows. Note that, unlike DEC Ada, none - of the GNAT commands accepts wild cards. - - *DEC_Ada_Command* *GNAT_Equivalent* *Description* - ADA GNAT COMPILE Invokes the compiler to - compile one or more Ada - source files. - ACS ATTACH No equivalent Qualifiers control of - terminal from current - process running the program - library - manager. - ACS CHECK GNAT MAKE Forms the execution closure - /DEPENDENCY_LIST of one or more - compiled units and checks - completeness and currency. - ACS COMPILE GNAT MAKE Forms the execution closure - /ACTIONS=COMPILE of one or more - specified units, checks - completeness and currency, - identifies units - that have revised source - files, compiles same, - and recompiles units - that are or will become - obsolete. Also - completes incomplete - generic instantiations. - ACS COPY FOREIGN Copy (*) Copies a foreign object - file into the program - library as a - library unit body. - ACS COPY UNIT Copy (*) Copies a compiled unit from - one program library to - another. - ACS CREATE LIBRARY Create /directory (*) Creates a program library. - ACS CREATE SUBLIBRARY Create /directory (*) Creates a program - sublibrary. - ACS DELETE LIBRARY Deletes a program library - and its contents. - ACS DELETE SUBLIBRARY Deletes a program - sublibrary and its contents. - ACS DELETE UNIT Delete file (*) On OpenVMS systems, deletes - one or more compiled units - from the current - program library. - ACS DIRECTORY Directory (*) On OpenVMS systems, lists - units contained in the - current program - library. - ACS ENTER FOREIGN Copy (*) Allows the import of a - foreign body as an Ada - library - specification and enters a - reference to a pointer. - ACS ENTER UNIT Copy (*) Enters a reference - (pointer) from the current - program library to - a unit compiled into - another program library. - ACS EXIT No equivalent Exits from the program - library manager. - ACS EXPORT Copy (*) Creates an object file that - contains system-specific - object code for - one or more units. With - GNAT, object files can - simply be copied - into the desired directory. - ACS EXTRACT SOURCE Copy (*) Allows access to the copied - source file for each Ada - compilation unit - ACS HELP HELP GNAT Provides online help. - ACS LINK GNAT LINK Links an object file - containing Ada units into - an executable - file. - ACS LOAD Copy (*) Loads (partially compiles) - Ada units into the program - library. Allows - loading a program from a - collection of files into a - library without - knowing the relationship - among units. - ACS MERGE Copy (*) Merges into the current - program library, one or - more units from - another library where they - were modified. - ACS RECOMPILE GNAT MAKE Recompiles from external - /ACTIONS=COMPILE or copied source files any - obsolete unit in - the closure. Also, - completes any incomplete - generic - instantiations. - ACS REENTER GNAT MAKE Reenters current references - to units compiled after - last entered - with the ACS ENTER UNIT - command. - ACS SET LIBRARY Set default (*) Defines a program library - to be the compilation - context as well - as the target library for - compiler output and - commands in general. - ACS SET PRAGMA Edit GNAT.ADC (*) Redefines specified values - of the library - characteristics - LONG_ FLOAT, MEMORY_SIZE, - SYSTEM_NAME, and - `Float_Representation'. - ACS SET SOURCE define Defines the source file - ADA_INCLUDE_PATH path search list for the ACS - (*) COMPILE command. - ACS SHOW LIBRARY Directory (*) Lists information about one - or more program libraries. - ACS SHOW PROGRAM No equivalent Lists information about the - execution closure of one or - more units in - the program library. - ACS SHOW SOURCE Show logical Shows the source file - ADA_INCLUDE_PATH search used when compiling - units. - ACS SHOW VERSION Compile with VERBOSE Displays the version number - option of the compiler and program - library manager - used. - ACS SPAWN No equivalent Creates a subprocess of the - current process (same as - DCL SPAWN - command). - ACS VERIFY No equivalent Performs a series of - consistency checks on a - program library to - determine whether the - library structure and - library files are in - valid_form. - -  - File: gnat_ug_vms.info, Node: Input-Output, Next: Implementation Limits, Prev: Program Compilation and Library Management, Up: Compatibility with DEC Ada - - Input-Output - ============ - - On OpenVMS Alpha systems, DEC Ada uses OpenVMS Record Management - Services (RMS) to perform operations on external files. - - DEC Ada and GNAT predefine an identical set of input- output packages. - To make the use of the generic TEXT_IO operations more convenient, DEC - Ada provides predefined library packages that instantiate the integer - and floating-point operations for the predefined integer and - floating-point types as shown in the following table. - - `Package_Name' - Instantiation - - `INTEGER_TEXT_IO' - INTEGER_IO(INTEGER) - - `SHORT_INTEGER_TEXT_IO' - INTEGER_IO(SHORT_INTEGER) - - `SHORT_SHORT_INTEGER_TEXT_IO' - INTEGER_IO(SHORT_SHORT_ INTEGER) - - `FLOAT_TEXT_IO' - FLOAT_IO(FLOAT) - - `LONG_FLOAT_TEXT_IO' - FLOAT_IO(LONG_FLOAT) - - The DEC Ada predefined packages and their operations are implemented - using OpenVMS Alpha files and input- output facilities. DEC Ada - supports asynchronous input- output on OpenVMS Alpha. Familiarity with - the following is recommended: - * RMS file organizations and access methods - - * OpenVMS file specifications and directories - - * OpenVMS File Definition Language (FDL) - - GNAT provides I/O facilities that are completely compatible with DEC - Ada. The distribution includes the standard DEC Ada versions of all I/O - packages, operating in a manner compatible with DEC Ada. In particular, - the following packages are by default the DEC Ada (Ada 83) versions of - these packages rather than the renamings suggested in annex J of the - Ada 95 Reference Manual: - * TEXT_IO - - * SEQUENTIAL_IO - - * DIRECT_IO - - The use of the standard Ada 95 syntax for child packages (for example, - ADA.TEXT_IO) retrieves the Ada 95 versions of these packages, as - defined in the Ada 95 Reference Manual. GNAT provides - DIGITAL-compatible predefined instantiations of the TEXT_IO packages, - and also provides the standard predefined instantiations required by - the Ada 95 Reference Manual. - - For further information on how GNAT interfaces to the file system or - how I/O is implemented in programs written in mixed languages, see the - chapter "Implementation of the Standard I/O" in the GNAT Reference - Manual. This chapter covers the following: - * Standard I/O packages - - * FORM strings - - * DIRECT_IO - - * SEQUENTIAL_IO - - * TEXT_IO - - * Stream pointer positioning - - * Reading and writing non-regular files - - * GET_IMMEDIATE - - * Treating TEXT_IO files as streams - - * Shared files - - * Open modes - -  - File: gnat_ug_vms.info, Node: Implementation Limits, Next: Tools, Prev: Input-Output, Up: Compatibility with DEC Ada - - Implementation Limits - ===================== - - The following table lists implementation limits for DEC Ada and GNAT - systems. - Compilation Parameter DEC Ada GNAT - In a subprogram or entry declaration, 32 No set limit - maximum number of formal parameters - that are of an unconstrained record type - Maximum identifier length (number of 255 255 - characters) - Maximum number of characters in a source 255 255 - line - Maximum collection size (number of bytes) 2**31-1 2**31-1 - Maximum number of discriminants for a 245 No set limit - record type - Maximum number of formal parameters in an 246 No set limit - entry or subprogram declaration - Maximum number of dimensions in an array 255 No set limit - type - Maximum number of library units and 4095 No set limit - subunits in a compilation. - Maximum number of library units and 16383 No set limit - subunits in an execution. - Maximum number of objects declared with 32757 No set limit - the pragma COMMON_OBJECT or - PSECT_OBJECT - Maximum number of enumeration literals in 65535 No set limit - an enumeration type definition - Maximum number of lines in a source file 65534 No set limit - Maximum number of bits in any object 2**31-1 2**31-1 - Maximum size of the static portion of a 2**31-1 2**31-1 - stack frame (approximate) - -  - File: gnat_ug_vms.info, Node: Tools, Prev: Implementation Limits, Up: Compatibility with DEC Ada - - Tools - ===== - -  - File: gnat_ug_vms.info, Node: Inline Assembler, Next: Performance Considerations, Prev: Running and Debugging Ada Programs, Up: Top - - Inline Assembler - **************** - - If you need to write low-level software that interacts directly with - the hardware, Ada provides two ways to incorporate assembly language - code into your program. First, you can import and invoke external - routines written in assembly language, an Ada feature fully supported - by GNAT. However, for small sections of code it may be simpler or more - efficient to include assembly language statements directly in your Ada - source program, using the facilities of the implementation-defined - package `System.Machine_Code', which incorporates the GNAT COMPILE - Inline Assembler. The Inline Assembler approach offers a number of - advantages, including the following: - - * No need to use non-Ada tools - - * Consistent interface over different targets - - * Automatic usage of the proper calling conventions - - * Access to Ada constants and variables - - * Definition of intrinsic routines - - * Possibility of inlining a subprogram comprising assembler code - - * Code optimizer can take Inline Assembler code into account - - This chapter presents a series of examples to show you how to use - the Inline Assembler. Although it focuses on the Intel x86, the - general approach applies also to other processors. It is assumed that - you are familiar with Ada and with assembly language programming. - - * Menu: - - * Basic Assembler Syntax:: - * A Simple Example of Inline Assembler:: - * Output Variables in Inline Assembler:: - * Input Variables in Inline Assembler:: - * Inlining Inline Assembler Code:: - * Other Asm Functionality:: - * A Complete Example:: - -  - File: gnat_ug_vms.info, Node: Basic Assembler Syntax, Next: A Simple Example of Inline Assembler, Up: Inline Assembler - - Basic Assembler Syntax - ====================== - - The assembler used by GNAT and GNAT COMPILE is based not on the Intel - assembly language, but rather on a language that descends from the AT&T - Unix assembler _as_ (and which is often referred to as "AT&T syntax"). - The following table summarizes the main features of _as_ syntax and - points out the differences from the Intel conventions. See the GNAT - COMPILE _as_ and _gas_ (an _as_ macro pre-processor) documentation for - further information. - - Register names - GNAT COMPILE / _as_: Prefix with "%"; for example `%eax' - Intel: No extra punctuation; for example `eax' - - Immediate operand - GNAT COMPILE / _as_: Prefix with "$"; for example `$4' - Intel: No extra punctuation; for example `4' - - Address - GNAT COMPILE / _as_: Prefix with "$"; for example `$loc' - Intel: No extra punctuation; for example `loc' - - Memory contents - GNAT COMPILE / _as_: No extra punctuation; for example `loc' - Intel: Square brackets; for example `[loc]' - - Register contents - GNAT COMPILE / _as_: Parentheses; for example `(%eax)' - Intel: Square brackets; for example `[eax]' - - Hexadecimal numbers - GNAT COMPILE / _as_: Leading "0x" (C language syntax); for example - `0xA0' - Intel: Trailing "h"; for example `A0h' - - Operand size - GNAT COMPILE / _as_: Explicit in op code; for example `movw' to - move a 16-bit word - Intel: Implicit, deduced by assembler; for example `mov' - - Instruction repetition - GNAT COMPILE / _as_: Split into two lines; for example - `rep' - `stosl' - Intel: Keep on one line; for example `rep stosl' - - Order of operands - GNAT COMPILE / _as_: Source first; for example `movw $4, %eax' - Intel: Destination first; for example `mov eax, 4' - -  - File: gnat_ug_vms.info, Node: A Simple Example of Inline Assembler, Next: Output Variables in Inline Assembler, Prev: Basic Assembler Syntax, Up: Inline Assembler - - A Simple Example of Inline Assembler - ==================================== - - The following example will generate a single assembly language - statement, `nop', which does nothing. Despite its lack of run-time - effect, the example will be useful in illustrating the basics of the - Inline Assembler facility. - - with System.Machine_Code; use System.Machine_Code; - procedure Nothing is - begin - Asm ("nop"); - end Nothing; - - `Asm' is a procedure declared in package `System.Machine_Code'; here - it takes one parameter, a _template string_ that must be a static - expression and that will form the generated instruction. `Asm' may be - regarded as a compile-time procedure that parses the template string - and additional parameters (none here), from which it generates a - sequence of assembly language instructions. - - The examples in this chapter will illustrate several of the forms - for invoking `Asm'; a complete specification of the syntax is found in - the `GNAT Reference Manual'. - - Under the standard GNAT conventions, the `Nothing' procedure should - be in a file named `NOTHING.ADB'. You can build the executable in the - usual way: - GNAT MAKE nothing - However, the interesting aspect of this example is not its run-time - behavior but rather the generated assembly code. To see this output, - invoke the compiler as follows: - GNAT COMPILE -S -fomit-frame-pointer /CHECKS=SUPPRESS_ALL `NOTHING.ADB' - where the options are: - - `-c' - compile only (no bind or link) - - `-S' - generate assembler listing - - `-fomit-frame-pointer' - do not set up separate stack frames - - `/CHECKS=SUPPRESS_ALL' - do not add runtime checks - - This gives a human-readable assembler version of the code. The - resulting file will have the same name as the Ada source file, but with - a `.s' extension. In our example, the file `nothing.s' has the - following contents: - - .file "NOTHING.ADB" - gcc2_compiled.: - ___gnu_compiled_ada: - .text - .align 4 - .globl __ada_nothing - __ada_nothing: - #APP - nop - #NO_APP - jmp L1 - .align 2,0x90 - L1: - ret - - The assembly code you included is clearly indicated by the compiler, - between the `#APP' and `#NO_APP' delimiters. The character before the - 'APP' and 'NOAPP' can differ on different targets. For example, Linux - uses '#APP' while on NT you will see '/APP'. - - If you make a mistake in your assembler code (such as using the - wrong size modifier, or using a wrong operand for the instruction) GNAT - will report this error in a temporary file, which will be deleted when - the compilation is finished. Generating an assembler file will help in - such cases, since you can assemble this file separately using the _as_ - assembler that comes with GNAT COMPILE. - - Assembling the file using the command - - as `nothing.s' - - will give you error messages whose lines correspond to the assembler - input file, so you can easily find and correct any mistakes you made. - If there are no errors, _as_ will generate an object file `nothing.out'. - -  - File: gnat_ug_vms.info, Node: Output Variables in Inline Assembler, Next: Input Variables in Inline Assembler, Prev: A Simple Example of Inline Assembler, Up: Inline Assembler - - Output Variables in Inline Assembler - ==================================== - - The examples in this section, showing how to access the processor - flags, illustrate how to specify the destination operands for assembly - language statements. - - with Interfaces; use Interfaces; - with Ada.Text_IO; use Ada.Text_IO; - with System.Machine_Code; use System.Machine_Code; - procedure Get_Flags is - Flags : Unsigned_32; - use ASCII; - begin - Asm ("pushfl" & LF & HT & -- push flags on stack - "popl %%eax" & LF & HT & -- load eax with flags - "movl %%eax, %0", -- store flags in variable - Outputs => Unsigned_32'Asm_Output ("=g", Flags)); - Put_Line ("Flags register:" & Flags'Img); - end Get_Flags; - - In order to have a nicely aligned assembly listing, we have separated - multiple assembler statements in the Asm template string with linefeed - (ASCII.LF) and horizontal tab (ASCII.HT) characters. The resulting - section of the assembly output file is: - - #APP - pushfl - popl %eax - movl %eax, -40(%ebp) - #NO_APP - - It would have been legal to write the Asm invocation as: - - Asm ("pushfl popl %%eax movl %%eax, %0") - - but in the generated assembler file, this would come out as: - - #APP - pushfl popl %eax movl %eax, -40(%ebp) - #NO_APP - - which is not so convenient for the human reader. - - We use Ada comments at the end of each line to explain what the - assembler instructions actually do. This is a useful convention. - - When writing Inline Assembler instructions, you need to precede each - register and variable name with a percent sign. Since the assembler - already requires a percent sign at the beginning of a register name, - you need two consecutive percent signs for such names in the Asm - template string, thus `%%eax'. In the generated assembly code, one of - the percent signs will be stripped off. - - Names such as `%0', `%1', `%2', etc., denote input or output - variables: operands you later define using `Input' or `Output' - parameters to `Asm'. An output variable is illustrated in the third - statement in the Asm template string: - movl %%eax, %0 - The intent is to store the contents of the eax register in a - variable that can be accessed in Ada. Simply writing `movl %%eax, - Flags' would not necessarily work, since the compiler might optimize by - using a register to hold Flags, and the expansion of the `movl' - instruction would not be aware of this optimization. The solution is - not to store the result directly but rather to advise the compiler to - choose the correct operand form; that is the purpose of the `%0' output - variable. - - Information about the output variable is supplied in the `Outputs' - parameter to `Asm': - Outputs => Unsigned_32'Asm_Output ("=g", Flags)); - - The output is defined by the `Asm_Output' attribute of the target - type; the general format is - Type'Asm_Output (constraint_string, variable_name) - - The constraint string directs the compiler how to store/access the - associated variable. In the example - Unsigned_32'Asm_Output ("=m", Flags); - the `"m"' (memory) constraint tells the compiler that the variable - `Flags' should be stored in a memory variable, thus preventing the - optimizer from keeping it in a register. In contrast, - Unsigned_32'Asm_Output ("=r", Flags); - uses the `"r"' (register) constraint, telling the compiler to store - the variable in a register. - - If the constraint is preceded by the equal character (*=*), it tells - the compiler that the variable will be used to store data into it. - - In the `Get_Flags' example, we used the "g" (global) constraint, - allowing the optimizer to choose whatever it deems best. - - There are a fairly large number of constraints, but the ones that - are most useful (for the Intel x86 processor) are the following: - - `=' - output constraint - - `g' - global (i.e. can be stored anywhere) - - `m' - in memory - - `I' - a constant - - `a' - use eax - - `b' - use ebx - - `c' - use ecx - - `d' - use edx - - `S' - use esi - - `D' - use edi - - `r' - use one of eax, ebx, ecx or edx - - `q' - use one of eax, ebx, ecx, edx, esi or edi - - The full set of constraints is described in the GNAT COMPILE and - _as_ documentation; note that it is possible to combine certain - constraints in one constraint string. - - You specify the association of an output variable with an assembler - operand through the `%'_n_ notation, where _n_ is a non-negative - integer. Thus in - Asm ("pushfl" & LF & HT & -- push flags on stack - "popl %%eax" & LF & HT & -- load eax with flags - "movl %%eax, %0", -- store flags in variable - Outputs => Unsigned_32'Asm_Output ("=g", Flags)); - - `%0' will be replaced in the expanded code by the appropriate operand, - whatever the compiler decided for the `Flags' variable. - - In general, you may have any number of output variables: - * Count the operands starting at 0; thus `%0', `%1', etc. - - * Specify the `Outputs' parameter as a parenthesized comma-separated - list of `Asm_Output' attributes - - For example: - Asm ("movl %%eax, %0" & LF & HT & - "movl %%ebx, %1" & LF & HT & - "movl %%ecx, %2", - Outputs => (Unsigned_32'Asm_Output ("=g", Var_A), -- %0 = Var_A - Unsigned_32'Asm_Output ("=g", Var_B), -- %1 = Var_B - Unsigned_32'Asm_Output ("=g", Var_C))); -- %2 = Var_C - - where `Var_A', `Var_B', and `Var_C' are variables in the Ada program. - - As a variation on the `Get_Flags' example, we can use the - constraints string to direct the compiler to store the eax register - into the `Flags' variable, instead of including the store instruction - explicitly in the `Asm' template string: - - with Interfaces; use Interfaces; - with Ada.Text_IO; use Ada.Text_IO; - with System.Machine_Code; use System.Machine_Code; - procedure Get_Flags_2 is - Flags : Unsigned_32; - use ASCII; - begin - Asm ("pushfl" & LF & HT & -- push flags on stack - "popl %%eax", -- save flags in eax - Outputs => Unsigned_32'Asm_Output ("=a", Flags)); - Put_Line ("Flags register:" & Flags'Img); - end Get_Flags_2; - - The `"a"' constraint tells the compiler that the `Flags' variable will - come from the eax register. Here is the resulting code: - - #APP - pushfl - popl %eax - #NO_APP - movl %eax,-40(%ebp) - - The compiler generated the store of eax into Flags after expanding the - assembler code. - - Actually, there was no need to pop the flags into the eax register; - more simply, we could just pop the flags directly into the program - variable: - - with Interfaces; use Interfaces; - with Ada.Text_IO; use Ada.Text_IO; - with System.Machine_Code; use System.Machine_Code; - procedure Get_Flags_3 is - Flags : Unsigned_32; - use ASCII; - begin - Asm ("pushfl" & LF & HT & -- push flags on stack - "pop %0", -- save flags in Flags - Outputs => Unsigned_32'Asm_Output ("=g", Flags)); - Put_Line ("Flags register:" & Flags'Img); - end Get_Flags_3; - -  - File: gnat_ug_vms.info, Node: Input Variables in Inline Assembler, Next: Inlining Inline Assembler Code, Prev: Output Variables in Inline Assembler, Up: Inline Assembler - - Input Variables in Inline Assembler - =================================== - - The example in this section illustrates how to specify the source - operands for assembly language statements. The program simply - increments its input value by 1: - - with Interfaces; use Interfaces; - with Ada.Text_IO; use Ada.Text_IO; - with System.Machine_Code; use System.Machine_Code; - procedure Increment is - - function Incr (Value : Unsigned_32) return Unsigned_32 is - Result : Unsigned_32; - begin - Asm ("incl %0", - Inputs => Unsigned_32'Asm_Input ("a", Value), - Outputs => Unsigned_32'Asm_Output ("=a", Result)); - return Result; - end Incr; - - Value : Unsigned_32; - - begin - Value := 5; - Put_Line ("Value before is" & Value'Img); - Value := Incr (Value); - Put_Line ("Value after is" & Value'Img); - end Increment; - - The `Outputs' parameter to `Asm' specifies that the result will be - in the eax register and that it is to be stored in the `Result' - variable. - - The `Inputs' parameter looks much like the `Outputs' parameter, but - with an `Asm_Input' attribute. The `"="' constraint, indicating an - output value, is not present. - - You can have multiple input variables, in the same way that you can - have more than one output variable. - - The parameter count (%0, %1) etc, now starts at the first input - statement, and continues with the output statements. When both - parameters use the same variable, the compiler will treat them as the - same %n operand, which is the case here. - - Just as the `Outputs' parameter causes the register to be stored - into the target variable after execution of the assembler statements, - so does the `Inputs' parameter cause its variable to be loaded into the - register before execution of the assembler statements. - - Thus the effect of the `Asm' invocation is: - 1. load the 32-bit value of `Value' into eax - - 2. execute the `incl %eax' instruction - - 3. store the contents of eax into the `Result' variable - - The resulting assembler file (with `/OPTIMIZE=ALL' optimization) - contains: - _increment__incr.1: - subl $4,%esp - movl 8(%esp),%eax - #APP - incl %eax - #NO_APP - movl %eax,%edx - movl %ecx,(%esp) - addl $4,%esp - ret - -  - File: gnat_ug_vms.info, Node: Inlining Inline Assembler Code, Next: Other Asm Functionality, Prev: Input Variables in Inline Assembler, Up: Inline Assembler - - Inlining Inline Assembler Code - ============================== - - For a short subprogram such as the `Incr' function in the previous - section, the overhead of the call and return (creating / deleting the - stack frame) can be significant, compared to the amount of code in the - subprogram body. A solution is to apply Ada's `Inline' pragma to the - subprogram, which directs the compiler to expand invocations of the - subprogram at the point(s) of call, instead of setting up a stack frame - for out-of-line calls. Here is the resulting program: - - with Interfaces; use Interfaces; - with Ada.Text_IO; use Ada.Text_IO; - with System.Machine_Code; use System.Machine_Code; - procedure Increment_2 is - - function Incr (Value : Unsigned_32) return Unsigned_32 is - Result : Unsigned_32; - begin - Asm ("incl %0", - Inputs => Unsigned_32'Asm_Input ("a", Value), - Outputs => Unsigned_32'Asm_Output ("=a", Result)); - return Result; - end Incr; - pragma Inline (Increment); - - Value : Unsigned_32; - - begin - Value := 5; - Put_Line ("Value before is" & Value'Img); - Value := Increment (Value); - Put_Line ("Value after is" & Value'Img); - end Increment_2; - - Compile the program with both optimization (`/OPTIMIZE=ALL') and - inlining enabled (`-gnatpn' instead of `/CHECKS=SUPPRESS_ALL'). - - The `Incr' function is still compiled as usual, but at the point in - `Increment' where our function used to be called: - - pushl %edi - call _increment__incr.1 - - the code for the function body directly appears: - - movl %esi,%eax - #APP - incl %eax - #NO_APP - movl %eax,%edx - - thus saving the overhead of stack frame setup and an out-of-line call. - -  - File: gnat_ug_vms.info, Node: Other Asm Functionality, Next: A Complete Example, Prev: Inlining Inline Assembler Code, Up: Inline Assembler - - Other `Asm' Functionality - ========================= - - This section describes two important parameters to the `Asm' procedure: - `Clobber', which identifies register usage; and `Volatile', which - inhibits unwanted optimizations. - - * Menu: - - * The Clobber Parameter:: - * The Volatile Parameter:: - -  - File: gnat_ug_vms.info, Node: The Clobber Parameter, Next: The Volatile Parameter, Up: Other Asm Functionality - - The `Clobber' Parameter - ----------------------- - - One of the dangers of intermixing assembly language and a compiled - language such as Ada is that the compiler needs to be aware of which - registers are being used by the assembly code. In some cases, such as - the earlier examples, the constraint string is sufficient to indicate - register usage (e.g. "a" for the eax register). But more generally, the - compiler needs an explicit identification of the registers that are - used by the Inline Assembly statements. - - Using a register that the compiler doesn't know about could be a - side effect of an instruction (like `mull' storing its result in both - eax and edx). It can also arise from explicit register usage in your - assembly code; for example: - Asm ("movl %0, %%ebx" & LF & HT & - "movl %%ebx, %1", - Inputs => Unsigned_32'Asm_Input ("g", Var_In), - Outputs => Unsigned_32'Asm_Output ("=g", Var_Out)); - - where the compiler (since it does not analyze the `Asm' template string) - does not know you are using the ebx register. - - In such cases you need to supply the `Clobber' parameter to `Asm', - to identify the registers that will be used by your assembly code: - - Asm ("movl %0, %%ebx" & LF & HT & - "movl %%ebx, %1", - Inputs => Unsigned_32'Asm_Input ("g", Var_In), - Outputs => Unsigned_32'Asm_Output ("=g", Var_Out), - Clobber => "ebx"); - - The Clobber parameter is a static string expression specifying the - register(s) you are using. Note that register names are _not_ prefixed - by a percent sign. Also, if more than one register is used then their - names are separated by commas; e.g., `"eax, ebx"' - - The `Clobber' parameter has several additional uses: - 1. Use the "register" name `cc' to indicate that flags might have - changed - - 2. Use the "register" name `memory' if you changed a memory location - -  - File: gnat_ug_vms.info, Node: The Volatile Parameter, Prev: The Clobber Parameter, Up: Other Asm Functionality - - The `Volatile' Parameter - ------------------------ - - Compiler optimizations in the presence of Inline Assembler may - sometimes have unwanted effects. For example, when an `Asm' invocation - with an input variable is inside a loop, the compiler might move the - loading of the input variable outside the loop, regarding it as a - one-time initialization. - - If this effect is not desired, you can disable such optimizations by - setting the `Volatile' parameter to `True'; for example: - - Asm ("movl %0, %%ebx" & LF & HT & - "movl %%ebx, %1", - Inputs => Unsigned_32'Asm_Input ("g", Var_In), - Outputs => Unsigned_32'Asm_Output ("=g", Var_Out), - Clobber => "ebx", - Volatile => True); - - By default, `Volatile' is set to `False' unless there is no `Outputs' - parameter. - - Although setting `Volatile' to `True' prevents unwanted - optimizations, it will also disable other optimizations that might be - important for efficiency. In general, you should set `Volatile' to - `True' only if the compiler's optimizations have created problems. - -  - File: gnat_ug_vms.info, Node: A Complete Example, Prev: Other Asm Functionality, Up: Inline Assembler - - A Complete Example - ================== - - This section contains a complete program illustrating a realistic usage - of GNAT's Inline Assembler capabilities. It comprises a main procedure - `Check_CPU' and a package `Intel_CPU'. The package declares a - collection of functions that detect the properties of the 32-bit x86 - processor that is running the program. The main procedure invokes - these functions and displays the information. - - The Intel_CPU package could be enhanced by adding functions to - detect the type of x386 co-processor, the processor caching options and - special operations such as the SIMD extensions. - - Although the Intel_CPU package has been written for 32-bit Intel - compatible CPUs, it is OS neutral. It has been tested on DOS, - Windows/NT and Linux. - - * Menu: - - * Check_CPU Procedure:: - * Intel_CPU Package Specification:: - * Intel_CPU Package Body:: - -  - File: gnat_ug_vms.info, Node: Check_CPU Procedure, Next: Intel_CPU Package Specification, Up: A Complete Example - - `Check_CPU' Procedure - --------------------- - - --------------------------------------------------------------------- - -- -- - -- Uses the Intel_CPU package to identify the CPU the program is -- - -- running on, and some of the features it supports. -- - -- -- - --------------------------------------------------------------------- - - with Intel_CPU; -- Intel CPU detection functions - with Ada.Text_IO; -- Standard text I/O - with Ada.Command_Line; -- To set the exit status - - procedure Check_CPU is - - Type_Found : Boolean := False; - -- Flag to indicate that processor was identified - - Features : Intel_CPU.Processor_Features; - -- The processor features - - Signature : Intel_CPU.Processor_Signature; - -- The processor type signature - - begin - - ----------------------------------- - -- Display the program banner. -- - ----------------------------------- - - Ada.Text_IO.Put_Line (Ada.Command_Line.Command_Name & - ": check Intel CPU version and features, v1.0"); - Ada.Text_IO.Put_Line ("distribute freely, but no warranty whatsoever"); - Ada.Text_IO.New_Line; - - ----------------------------------------------------------------------- - -- We can safely start with the assumption that we are on at least -- - -- a x386 processor. If the CPUID instruction is present, then we -- - -- have a later processor type. -- - ----------------------------------------------------------------------- - - if Intel_CPU.Has_CPUID = False then - - -- No CPUID instruction, so we assume this is indeed a x386 - -- processor. We can still check if it has a FP co-processor. - if Intel_CPU.Has_FPU then - Ada.Text_IO.Put_Line - ("x386-type processor with a FP co-processor"); - else - Ada.Text_IO.Put_Line - ("x386-type processor without a FP co-processor"); - end if; -- check for FPU - - -- Program done - Ada.Command_Line.Set_Exit_Status (Ada.Command_Line.Success); - return; - - end if; -- check for CPUID - - ----------------------------------------------------------------------- - -- If CPUID is supported, check if this is a true Intel processor, -- - -- if it is not, display a warning. -- - ----------------------------------------------------------------------- - - if Intel_CPU.Vendor_ID /= Intel_CPU.Intel_Processor then - Ada.Text_IO.Put_Line ("*** This is a Intel compatible processor"); - Ada.Text_IO.Put_Line ("*** Some information may be incorrect"); - end if; -- check if Intel - - ---------------------------------------------------------------------- - -- With the CPUID instruction present, we can assume at least a -- - -- x486 processor. If the CPUID support level is < 1 then we have -- - -- to leave it at that. -- - ---------------------------------------------------------------------- - - if Intel_CPU.CPUID_Level < 1 then - - -- Ok, this is a x486 processor. we still can get the Vendor ID - Ada.Text_IO.Put_Line ("x486-type processor"); - Ada.Text_IO.Put_Line ("Vendor ID is " & Intel_CPU.Vendor_ID); - - -- We can also check if there is a FPU present - if Intel_CPU.Has_FPU then - Ada.Text_IO.Put_Line ("Floating-Point support"); - else - Ada.Text_IO.Put_Line ("No Floating-Point support"); - end if; -- check for FPU - - -- Program done - Ada.Command_Line.Set_Exit_Status (Ada.Command_Line.Success); - return; - - end if; -- check CPUID level - - --------------------------------------------------------------------- - -- With a CPUID level of 1 we can use the processor signature to -- - -- determine it's exact type. -- - --------------------------------------------------------------------- - - Signature := Intel_CPU.Signature; - - ---------------------------------------------------------------------- - -- Ok, now we go into a lot of messy comparisons to get the -- - -- processor type. For clarity, no attememt to try to optimize the -- - -- comparisons has been made. Note that since Intel_CPU does not -- - -- support getting cache info, we cannot distinguish between P5 -- - -- and Celeron types yet. -- - ---------------------------------------------------------------------- - - -- x486SL - if Signature.Processor_Type = 2#00# and - Signature.Family = 2#0100# and - Signature.Model = 2#0100# then - Type_Found := True; - Ada.Text_IO.Put_Line ("x486SL processor"); - end if; - - -- x486DX2 Write-Back - if Signature.Processor_Type = 2#00# and - Signature.Family = 2#0100# and - Signature.Model = 2#0111# then - Type_Found := True; - Ada.Text_IO.Put_Line ("Write-Back Enhanced x486DX2 processor"); - end if; - - -- x486DX4 - if Signature.Processor_Type = 2#00# and - Signature.Family = 2#0100# and - Signature.Model = 2#1000# then - Type_Found := True; - Ada.Text_IO.Put_Line ("x486DX4 processor"); - end if; - - -- x486DX4 Overdrive - if Signature.Processor_Type = 2#01# and - Signature.Family = 2#0100# and - Signature.Model = 2#1000# then - Type_Found := True; - Ada.Text_IO.Put_Line ("x486DX4 OverDrive processor"); - end if; - - -- Pentium (60, 66) - if Signature.Processor_Type = 2#00# and - Signature.Family = 2#0101# and - Signature.Model = 2#0001# then - Type_Found := True; - Ada.Text_IO.Put_Line ("Pentium processor (60, 66)"); - end if; - - -- Pentium (75, 90, 100, 120, 133, 150, 166, 200) - if Signature.Processor_Type = 2#00# and - Signature.Family = 2#0101# and - Signature.Model = 2#0010# then - Type_Found := True; - Ada.Text_IO.Put_Line - ("Pentium processor (75, 90, 100, 120, 133, 150, 166, 200)"); - end if; - - -- Pentium OverDrive (60, 66) - if Signature.Processor_Type = 2#01# and - Signature.Family = 2#0101# and - Signature.Model = 2#0001# then - Type_Found := True; - Ada.Text_IO.Put_Line ("Pentium OverDrive processor (60, 66)"); - end if; - - -- Pentium OverDrive (75, 90, 100, 120, 133, 150, 166, 200) - if Signature.Processor_Type = 2#01# and - Signature.Family = 2#0101# and - Signature.Model = 2#0010# then - Type_Found := True; - Ada.Text_IO.Put_Line - ("Pentium OverDrive cpu (75, 90, 100, 120, 133, 150, 166, 200)"); - end if; - - -- Pentium OverDrive processor for x486 processor-based systems - if Signature.Processor_Type = 2#01# and - Signature.Family = 2#0101# and - Signature.Model = 2#0011# then - Type_Found := True; - Ada.Text_IO.Put_Line - ("Pentium OverDrive processor for x486 processor-based systems"); - end if; - - -- Pentium processor with MMX technology (166, 200) - if Signature.Processor_Type = 2#00# and - Signature.Family = 2#0101# and - Signature.Model = 2#0100# then - Type_Found := True; - Ada.Text_IO.Put_Line - ("Pentium processor with MMX technology (166, 200)"); - end if; - - -- Pentium OverDrive with MMX for Pentium (75, 90, 100, 120, 133) - if Signature.Processor_Type = 2#01# and - Signature.Family = 2#0101# and - Signature.Model = 2#0100# then - Type_Found := True; - Ada.Text_IO.Put_Line - ("Pentium OverDrive processor with MMX " & - "technology for Pentium processor (75, 90, 100, 120, 133)"); - end if; - - -- Pentium Pro processor - if Signature.Processor_Type = 2#00# and - Signature.Family = 2#0110# and - Signature.Model = 2#0001# then - Type_Found := True; - Ada.Text_IO.Put_Line ("Pentium Pro processor"); - end if; - - -- Pentium II processor, model 3 - if Signature.Processor_Type = 2#00# and - Signature.Family = 2#0110# and - Signature.Model = 2#0011# then - Type_Found := True; - Ada.Text_IO.Put_Line ("Pentium II processor, model 3"); - end if; - - -- Pentium II processor, model 5 or Celeron processor - if Signature.Processor_Type = 2#00# and - Signature.Family = 2#0110# and - Signature.Model = 2#0101# then - Type_Found := True; - Ada.Text_IO.Put_Line - ("Pentium II processor, model 5 or Celeron processor"); - end if; - - -- Pentium Pro OverDrive processor - if Signature.Processor_Type = 2#01# and - Signature.Family = 2#0110# and - Signature.Model = 2#0011# then - Type_Found := True; - Ada.Text_IO.Put_Line ("Pentium Pro OverDrive processor"); - end if; - - -- If no type recognized, we have an unknown. Display what - -- we _do_ know - if Type_Found = False then - Ada.Text_IO.Put_Line ("Unknown processor"); - end if; - - ----------------------------------------- - -- Display processor stepping level. -- - ----------------------------------------- - - Ada.Text_IO.Put_Line ("Stepping level:" & Signature.Stepping'Img); - - --------------------------------- - -- Display vendor ID string. -- - --------------------------------- - - Ada.Text_IO.Put_Line ("Vendor ID: " & Intel_CPU.Vendor_ID); - - ------------------------------------ - -- Get the processors features. -- - ------------------------------------ - - Features := Intel_CPU.Features; - - ----------------------------- - -- Check for a FPU unit. -- - ----------------------------- - - if Features.FPU = True then - Ada.Text_IO.Put_Line ("Floating-Point unit available"); - else - Ada.Text_IO.Put_Line ("no Floating-Point unit"); - end if; -- check for FPU - - -------------------------------- - -- List processor features. -- - -------------------------------- - - Ada.Text_IO.Put_Line ("Supported features: "); - - -- Virtual Mode Extension - if Features.VME = True then - Ada.Text_IO.Put_Line (" VME - Virtual Mode Extension"); - end if; - - -- Debugging Extension - if Features.DE = True then - Ada.Text_IO.Put_Line (" DE - Debugging Extension"); - end if; - - -- Page Size Extension - if Features.PSE = True then - Ada.Text_IO.Put_Line (" PSE - Page Size Extension"); - end if; - - -- Time Stamp Counter - if Features.TSC = True then - Ada.Text_IO.Put_Line (" TSC - Time Stamp Counter"); - end if; - - -- Model Specific Registers - if Features.MSR = True then - Ada.Text_IO.Put_Line (" MSR - Model Specific Registers"); - end if; - - -- Physical Address Extension - if Features.PAE = True then - Ada.Text_IO.Put_Line (" PAE - Physical Address Extension"); - end if; - - -- Machine Check Extension - if Features.MCE = True then - Ada.Text_IO.Put_Line (" MCE - Machine Check Extension"); - end if; - - -- CMPXCHG8 instruction supported - if Features.CX8 = True then - Ada.Text_IO.Put_Line (" CX8 - CMPXCHG8 instruction"); - end if; - - -- on-chip APIC hardware support - if Features.APIC = True then - Ada.Text_IO.Put_Line (" APIC - on-chip APIC hardware support"); - end if; - - -- Fast System Call - if Features.SEP = True then - Ada.Text_IO.Put_Line (" SEP - Fast System Call"); - end if; - - -- Memory Type Range Registers - if Features.MTRR = True then - Ada.Text_IO.Put_Line (" MTTR - Memory Type Range Registers"); - end if; - - -- Page Global Enable - if Features.PGE = True then - Ada.Text_IO.Put_Line (" PGE - Page Global Enable"); - end if; - - -- Machine Check Architecture - if Features.MCA = True then - Ada.Text_IO.Put_Line (" MCA - Machine Check Architecture"); - end if; - - -- Conditional Move Instruction Supported - if Features.CMOV = True then - Ada.Text_IO.Put_Line - (" CMOV - Conditional Move Instruction Supported"); - end if; - - -- Page Attribute Table - if Features.PAT = True then - Ada.Text_IO.Put_Line (" PAT - Page Attribute Table"); - end if; - - -- 36-bit Page Size Extension - if Features.PSE_36 = True then - Ada.Text_IO.Put_Line (" PSE_36 - 36-bit Page Size Extension"); - end if; - - -- MMX technology supported - if Features.MMX = True then - Ada.Text_IO.Put_Line (" MMX - MMX technology supported"); - end if; - - -- Fast FP Save and Restore - if Features.FXSR = True then - Ada.Text_IO.Put_Line (" FXSR - Fast FP Save and Restore"); - end if; - - --------------------- - -- Program done. -- - --------------------- - - Ada.Command_Line.Set_Exit_Status (Ada.Command_Line.Success); - - exception - - when others => - Ada.Command_Line.Set_Exit_Status (Ada.Command_Line.Failure); - raise; - - end Check_CPU; - -  - File: gnat_ug_vms.info, Node: Intel_CPU Package Specification, Next: Intel_CPU Package Body, Prev: Check_CPU Procedure, Up: A Complete Example - - `Intel_CPU' Package Specification - --------------------------------- - - ------------------------------------------------------------------------- - -- -- - -- file: INTEL_CPU.ADS -- - -- -- - -- ********************************************* -- - -- * WARNING: for 32-bit Intel processors only * -- - -- ********************************************* -- - -- -- - -- This package contains a number of subprograms that are useful in -- - -- determining the Intel x86 CPU (and the features it supports) on -- - -- which the program is running. -- - -- -- - -- The package is based upon the information given in the Intel -- - -- Application Note AP-485: "Intel Processor Identification and the -- - -- CPUID Instruction" as of April 1998. This application note can be -- - -- found on www.intel.com. -- - -- -- - -- It currently deals with 32-bit processors only, will not detect -- - -- features added after april 1998, and does not guarantee proper -- - -- results on Intel-compatible processors. -- - -- -- - -- Cache info and x386 fpu type detection are not supported. -- - -- -- - -- This package does not use any privileged instructions, so should -- - -- work on any OS running on a 32-bit Intel processor. -- - -- -- - ------------------------------------------------------------------------- - - with Interfaces; use Interfaces; - -- for using unsigned types - - with System.Machine_Code; use System.Machine_Code; - -- for using inline assembler code - - with Ada.Characters.Latin_1; use Ada.Characters.Latin_1; - -- for inserting control characters - - package Intel_CPU is - - ---------------------- - -- Processor bits -- - ---------------------- - - subtype Num_Bits is Natural range 0 .. 31; - -- the number of processor bits (32) - - -------------------------- - -- Processor register -- - -------------------------- - - -- define a processor register type for easy access to - -- the individual bits - - type Processor_Register is array (Num_Bits) of Boolean; - pragma Pack (Processor_Register); - for Processor_Register'Size use 32; - - ------------------------- - -- Unsigned register -- - ------------------------- - - -- define a processor register type for easy access to - -- the individual bytes - - type Unsigned_Register is - record - L1 : Unsigned_8; - H1 : Unsigned_8; - L2 : Unsigned_8; - H2 : Unsigned_8; - end record; - - for Unsigned_Register use - record - L1 at 0 range 0 .. 7; - H1 at 0 range 8 .. 15; - L2 at 0 range 16 .. 23; - H2 at 0 range 24 .. 31; - end record; - - for Unsigned_Register'Size use 32; - - --------------------------------- - -- Intel processor vendor ID -- - --------------------------------- - - Intel_Processor : constant String (1 .. 12) := "GenuineIntel"; - -- indicates an Intel manufactured processor - - ------------------------------------ - -- Processor signature register -- - ------------------------------------ - - -- a register type to hold the processor signature - - type Processor_Signature is - record - Stepping : Natural range 0 .. 15; - Model : Natural range 0 .. 15; - Family : Natural range 0 .. 15; - Processor_Type : Natural range 0 .. 3; - Reserved : Natural range 0 .. 262143; - end record; - - for Processor_Signature use - record - Stepping at 0 range 0 .. 3; - Model at 0 range 4 .. 7; - Family at 0 range 8 .. 11; - Processor_Type at 0 range 12 .. 13; - Reserved at 0 range 14 .. 31; - end record; - - for Processor_Signature'Size use 32; - - ----------------------------------- - -- Processor features register -- - ----------------------------------- - - -- a processor register to hold the processor feature flags - - type Processor_Features is - record - FPU : Boolean; -- floating point unit on chip - VME : Boolean; -- virtual mode extension - DE : Boolean; -- debugging extension - PSE : Boolean; -- page size extension - TSC : Boolean; -- time stamp counter - MSR : Boolean; -- model specific registers - PAE : Boolean; -- physical address extension - MCE : Boolean; -- machine check extension - CX8 : Boolean; -- cmpxchg8 instruction - APIC : Boolean; -- on-chip apic hardware - Res_1 : Boolean; -- reserved for extensions - SEP : Boolean; -- fast system call - MTRR : Boolean; -- memory type range registers - PGE : Boolean; -- page global enable - MCA : Boolean; -- machine check architecture - CMOV : Boolean; -- conditional move supported - PAT : Boolean; -- page attribute table - PSE_36 : Boolean; -- 36-bit page size extension - Res_2 : Natural range 0 .. 31; -- reserved for extensions - MMX : Boolean; -- MMX technology supported - FXSR : Boolean; -- fast FP save and restore - Res_3 : Natural range 0 .. 127; -- reserved for extensions - end record; - - for Processor_Features use - record - FPU at 0 range 0 .. 0; - VME at 0 range 1 .. 1; - DE at 0 range 2 .. 2; - PSE at 0 range 3 .. 3; - TSC at 0 range 4 .. 4; - MSR at 0 range 5 .. 5; - PAE at 0 range 6 .. 6; - MCE at 0 range 7 .. 7; - CX8 at 0 range 8 .. 8; - APIC at 0 range 9 .. 9; - Res_1 at 0 range 10 .. 10; - SEP at 0 range 11 .. 11; - MTRR at 0 range 12 .. 12; - PGE at 0 range 13 .. 13; - MCA at 0 range 14 .. 14; - CMOV at 0 range 15 .. 15; - PAT at 0 range 16 .. 16; - PSE_36 at 0 range 17 .. 17; - Res_2 at 0 range 18 .. 22; - MMX at 0 range 23 .. 23; - FXSR at 0 range 24 .. 24; - Res_3 at 0 range 25 .. 31; - end record; - - for Processor_Features'Size use 32; - - ------------------- - -- Subprograms -- - ------------------- - - function Has_FPU return Boolean; - -- return True if a FPU is found - -- use only if CPUID is not supported - - function Has_CPUID return Boolean; - -- return True if the processor supports the CPUID instruction - - function CPUID_Level return Natural; - -- return the CPUID support level (0, 1 or 2) - -- can only be called if the CPUID instruction is supported - - function Vendor_ID return String; - -- return the processor vendor identification string - -- can only be called if the CPUID instruction is supported - - function Signature return Processor_Signature; - -- return the processor signature - -- can only be called if the CPUID instruction is supported - - function Features return Processor_Features; - -- return the processors features - -- can only be called if the CPUID instruction is supported - - private - - ------------------------ - -- EFLAGS bit names -- - ------------------------ - - ID_Flag : constant Num_Bits := 21; - -- ID flag bit - - end Intel_CPU; - -  - File: gnat_ug_vms.info, Node: Intel_CPU Package Body, Prev: Intel_CPU Package Specification, Up: A Complete Example - - `Intel_CPU' Package Body - ------------------------ - - package body Intel_CPU is - - --------------------------- - -- Detect FPU presence -- - --------------------------- - - -- There is a FPU present if we can set values to the FPU Status - -- and Control Words. - - function Has_FPU return Boolean is - - Register : Unsigned_16; - -- processor register to store a word - - begin - - -- check if we can change the status word - Asm ( - - -- the assembler code - "finit" & LF & HT & -- reset status word - "movw $0x5A5A, %%ax" & LF & HT & -- set value status word - "fnstsw %0" & LF & HT & -- save status word - "movw %%ax, %0", -- store status word - - -- output stored in Register - -- register must be a memory location - Outputs => Unsigned_16'Asm_output ("=m", Register), - - -- tell compiler that we used eax - Clobber => "eax"); - - -- if the status word is zero, there is no FPU - if Register = 0 then - return False; -- no status word - end if; -- check status word value - - -- check if we can get the control word - Asm ( - - -- the assembler code - "fnstcw %0", -- save the control word - - -- output into Register - -- register must be a memory location - Outputs => Unsigned_16'Asm_output ("=m", Register)); - - -- check the relevant bits - if (Register and 16#103F#) /= 16#003F# then - return False; -- no control word - end if; -- check control word value - - -- FPU found - return True; - - end Has_FPU; - - -------------------------------- - -- Detect CPUID instruction -- - -------------------------------- - - -- The processor supports the CPUID instruction if it is possible - -- to change the value of ID flag bit in the EFLAGS register. - - function Has_CPUID return Boolean is - - Original_Flags, Modified_Flags : Processor_Register; - -- EFLAG contents before and after changing the ID flag - - begin - - -- try flipping the ID flag in the EFLAGS register - Asm ( - - -- the assembler code - "pushfl" & LF & HT & -- push EFLAGS on stack - "pop %%eax" & LF & HT & -- pop EFLAGS into eax - "movl %%eax, %0" & LF & HT & -- save EFLAGS content - "xor $0x200000, %%eax" & LF & HT & -- flip ID flag - "push %%eax" & LF & HT & -- push EFLAGS on stack - "popfl" & LF & HT & -- load EFLAGS register - "pushfl" & LF & HT & -- push EFLAGS on stack - "pop %1", -- save EFLAGS content - - -- output values, may be anything - -- Original_Flags is %0 - -- Modified_Flags is %1 - Outputs => - (Processor_Register'Asm_output ("=g", Original_Flags), - Processor_Register'Asm_output ("=g", Modified_Flags)), - - -- tell compiler eax is destroyed - Clobber => "eax"); - - -- check if CPUID is supported - if Original_Flags(ID_Flag) /= Modified_Flags(ID_Flag) then - return True; -- ID flag was modified - else - return False; -- ID flag unchanged - end if; -- check for CPUID - - end Has_CPUID; - - ------------------------------- - -- Get CPUID support level -- - ------------------------------- - - function CPUID_Level return Natural is - - Level : Unsigned_32; - -- returned support level - - begin - - -- execute CPUID, storing the results in the Level register - Asm ( - - -- the assembler code - "cpuid", -- execute CPUID - - -- zero is stored in eax - -- returning the support level in eax - Inputs => Unsigned_32'Asm_input ("a", 0), - - -- eax is stored in Level - Outputs => Unsigned_32'Asm_output ("=a", Level), - - -- tell compiler ebx, ecx and edx registers are destroyed - Clobber => "ebx, ecx, edx"); - - -- return the support level - return Natural (Level); - - end CPUID_Level; - - -------------------------------- - -- Get CPU Vendor ID String -- - -------------------------------- - - -- The vendor ID string is returned in the ebx, ecx and edx register - -- after executing the CPUID instruction with eax set to zero. - -- In case of a true Intel processor the string returned is - -- "GenuineIntel" - - function Vendor_ID return String is - - Ebx, Ecx, Edx : Unsigned_Register; - -- registers containing the vendor ID string - - Vendor_ID : String (1 .. 12); - -- the vendor ID string - - begin - - -- execute CPUID, storing the results in the processor registers - Asm ( - - -- the assembler code - "cpuid", -- execute CPUID - - -- zero stored in eax - -- vendor ID string returned in ebx, ecx and edx - Inputs => Unsigned_32'Asm_input ("a", 0), - - -- ebx is stored in Ebx - -- ecx is stored in Ecx - -- edx is stored in Edx - Outputs => (Unsigned_Register'Asm_output ("=b", Ebx), - Unsigned_Register'Asm_output ("=c", Ecx), - Unsigned_Register'Asm_output ("=d", Edx))); - - -- now build the vendor ID string - Vendor_ID( 1) := Character'Val (Ebx.L1); - Vendor_ID( 2) := Character'Val (Ebx.H1); - Vendor_ID( 3) := Character'Val (Ebx.L2); - Vendor_ID( 4) := Character'Val (Ebx.H2); - Vendor_ID( 5) := Character'Val (Edx.L1); - Vendor_ID( 6) := Character'Val (Edx.H1); - Vendor_ID( 7) := Character'Val (Edx.L2); - Vendor_ID( 8) := Character'Val (Edx.H2); - Vendor_ID( 9) := Character'Val (Ecx.L1); - Vendor_ID(10) := Character'Val (Ecx.H1); - Vendor_ID(11) := Character'Val (Ecx.L2); - Vendor_ID(12) := Character'Val (Ecx.H2); - - -- return string - return Vendor_ID; - - end Vendor_ID; - - ------------------------------- - -- Get processor signature -- - ------------------------------- - - function Signature return Processor_Signature is - - Result : Processor_Signature; - -- processor signature returned - - begin - - -- execute CPUID, storing the results in the Result variable - Asm ( - - -- the assembler code - "cpuid", -- execute CPUID - - -- one is stored in eax - -- processor signature returned in eax - Inputs => Unsigned_32'Asm_input ("a", 1), - - -- eax is stored in Result - Outputs => Processor_Signature'Asm_output ("=a", Result), - - -- tell compiler that ebx, ecx and edx are also destroyed - Clobber => "ebx, ecx, edx"); - - -- return processor signature - return Result; - - end Signature; - - ------------------------------ - -- Get processor features -- - ------------------------------ - - function Features return Processor_Features is - - Result : Processor_Features; - -- processor features returned - - begin - - -- execute CPUID, storing the results in the Result variable - Asm ( - - -- the assembler code - "cpuid", -- execute CPUID - - -- one stored in eax - -- processor features returned in edx - Inputs => Unsigned_32'Asm_input ("a", 1), - - -- edx is stored in Result - Outputs => Processor_Features'Asm_output ("=d", Result), - - -- tell compiler that ebx and ecx are also destroyed - Clobber => "ebx, ecx"); - - -- return processor signature - return Result; - - end Features; - - end Intel_CPU; - -  - File: gnat_ug_vms.info, Node: Performance Considerations, Next: GNU Free Documentation License, Prev: Inline Assembler, Up: Top - - Performance Considerations - ************************** - - The GNAT system provides a number of options that allow a trade-off - between - - * performance of the generated code - - * speed of compilation - - * minimization of dependences and recompilation - - * the degree of run-time checking. - - The defaults (if no options are selected) aim at improving the speed of - compilation and minimizing dependences, at the expense of performance - of the generated code: - - * no optimization - - * no inlining of subprogram calls - - * all run-time checks enabled except overflow and elaboration checks - - These options are suitable for most program development purposes. This - chapter describes how you can modify these choices, and also provides - some guidelines on debugging optimized code. - - * Menu: - - * Controlling Run-Time Checks:: - * Optimization Levels:: - * Debugging Optimized Code:: - * Inlining of Subprograms:: - * Coverage Analysis:: - -  - File: gnat_ug_vms.info, Node: Controlling Run-Time Checks, Next: Optimization Levels, Up: Performance Considerations - - Controlling Run-Time Checks - =========================== - - By default, GNAT generates all run-time checks, except arithmetic - overflow checking for integer operations and checks for access before - elaboration on subprogram calls. The latter are not required in default - mode, because all necessary checking is done at compile time. Two gnat - qualifiers, `/CHECKS=SUPPRESS_ALL' and `/CHECKS=OVERFLOW' allow this - default to be modified. *Note Run-Time Checks::. - - Our experience is that the default is suitable for most development - purposes. - - We treat integer overflow specially because these are quite - expensive and in our experience are not as important as other run-time - checks in the development process. Note that division by zero is not - considered an overflow check, and divide by zero checks are generated - where required by default. - - Elaboration checks are off by default, and also not needed by - default, since GNAT uses a static elaboration analysis approach that - avoids the need for run-time checking. This manual contains a full - chapter discussing the issue of elaboration checks, and if the default - is not satisfactory for your use, you should read this chapter. - - For validity checks, the minimal checks required by the Ada Reference - Manual (for case statements and assignments to array elements) are on - by default. These can be suppressed by use of the `-gnatVn' qualifier. - Note that in Ada 83, there were no validity checks, so if the Ada 83 - mode is acceptable (or when comparing GNAT performance with an Ada 83 - compiler), it may be reasonable to routinely use `-gnatVn'. Validity - checks are also suppressed entirely if `/CHECKS=SUPPRESS_ALL' is used. - - Note that the setting of the qualifiers controls the default setting - of the checks. They may be modified using either `pragma Suppress' (to - remove checks) or `pragma Unsuppress' (to add back suppressed checks) - in the program source. - -  - File: gnat_ug_vms.info, Node: Optimization Levels, Next: Debugging Optimized Code, Prev: Controlling Run-Time Checks, Up: Performance Considerations - - Optimization Levels - =================== - - The default is optimization off. This results in the fastest compile - times, but GNAT makes absolutely no attempt to optimize, and the - generated programs are considerably larger and slower than when - optimization is enabled. You can use the `/OPTIMIZE' on the `GNAT - COMPILE' command line to control the optimization level: - - `/OPTIMIZE=NONE' - no optimization (the default) - - `/OPTIMIZE=SOME' - medium level optimization - - `/OPTIMIZE=ALL' - full optimization - - `/OPTIMIZE=INLINING' - full optimization, and also attempt automatic inlining of small - subprograms within a unit (*note Inlining of Subprograms::). - - Higher optimization levels perform more global transformations on the - program and apply more expensive analysis algorithms in order to - generate faster and more compact code. The price in compilation time, - and the resulting improvement in execution time, both depend on the - particular application and the hardware environment. You should - experiment to find the best level for your application. - - Note: Unlike some other compilation systems, `GNAT COMPILE' has been - tested extensively at all optimization levels. There are some bugs - which appear only with optimization turned on, but there have also been - bugs which show up only in _unoptimized_ code. Selecting a lower level - of optimization does not improve the reliability of the code generator, - which in practice is highly reliable at all optimization levels. - - Note regarding the use of `/OPTIMIZE=INLINING': The use of this - optimization level is generally discouraged with GNAT, since it often - results in larger executables which run more slowly. See further - discussion of this point in *note Inlining of Subprograms::. - -  - File: gnat_ug_vms.info, Node: Debugging Optimized Code, Next: Inlining of Subprograms, Prev: Optimization Levels, Up: Performance Considerations - - Debugging Optimized Code - ======================== - - Since the compiler generates debugging tables for a compilation unit - before it performs optimizations, the optimizing transformations may - invalidate some of the debugging data. You therefore need to - anticipate certain anomalous situations that may arise while debugging - optimized code. This section describes the most common cases. - - 1. The "hopping Program Counter": Repeated 'step' or 'next' commands - show the PC bouncing back and forth in the code. This may result - from any of the following optimizations: - - * Common subexpression elimination: using a single instance of - code for a quantity that the source computes several times. - As a result you may not be able to stop on what looks like a - statement. - - * Invariant code motion: moving an expression that does not - change within a loop, to the beginning of the loop. - - * Instruction scheduling: moving instructions so as to overlap - loads and stores (typically) with other code, or in general - to move computations of values closer to their uses. Often - this causes you to pass an assignment statement without the - assignment happening and then later bounce back to the - statement when the value is actually needed. Placing a - breakpoint on a line of code and then stepping over it may, - therefore, not always cause all the expected side-effects. - - 2. The "big leap": More commonly known as cross-jumping, in which two - identical pieces of code are merged and the program counter - suddenly jumps to a statement that is not supposed to be executed, - simply because it (and the code following) translates to the same - thing as the code that _was_ supposed to be executed. This effect - is typically seen in sequences that end in a jump, such as a - `goto', a `return', or a `break' in a C `qualifier' statement. - - 3. The "roving variable": The symptom is an unexpected value in a - variable. There are various reasons for this effect: - - * In a subprogram prologue, a parameter may not yet have been - moved to its "home". - - * A variable may be dead, and its register re-used. This is - probably the most common cause. - - * As mentioned above, the assignment of a value to a variable - may have been moved. - - * A variable may be eliminated entirely by value propagation or - other means. In this case, GCC may incorrectly generate - debugging information for the variable - - In general, when an unexpected value appears for a local variable - or parameter you should first ascertain if that value was actually - computed by your program, as opposed to being incorrectly reported - by the debugger. Record fields or array elements in an object - designated by an access value are generally less of a problem, - once you have ascertained that the access value is sensible. - Typically, this means checking variables in the preceding code and - in the calling subprogram to verify that the value observed is - explainable from other values (one must apply the procedure - recursively to those other values); or re-running the code and - stopping a little earlier (perhaps before the call) and stepping - to better see how the variable obtained the value in question; or - continuing to step _from_ the point of the strange value to see if - code motion had simply moved the variable's assignments later. - -  - File: gnat_ug_vms.info, Node: Inlining of Subprograms, Next: Coverage Analysis, Prev: Debugging Optimized Code, Up: Performance Considerations - - Inlining of Subprograms - ======================= - - A call to a subprogram in the current unit is inlined if all the - following conditions are met: - - * The optimization level is at least `/OPTIMIZE=SOME'. - - * The called subprogram is suitable for inlining: It must be small - enough and not contain nested subprograms or anything else that - `GNAT COMPILE' cannot support in inlined subprograms. - - * The call occurs after the definition of the body of the subprogram. - - * Either `pragma Inline' applies to the subprogram or it is small - and automatic inlining (optimization level `/OPTIMIZE=INLINING') is - specified. - - Calls to subprograms in `with''ed units are normally not inlined. To - achieve this level of inlining, the following conditions must all be - true: - - * The optimization level is at least `/OPTIMIZE=SOME'. - - * The called subprogram is suitable for inlining: It must be small - enough and not contain nested subprograms or anything else `GNAT - COMPILE' cannot support in inlined subprograms. - - * The call appears in a body (not in a package spec). - - * There is a `pragma Inline' for the subprogram. - - * The `/INLINE' qualifier is used in the `GNAT COMPILE' command line - - Note that specifying the `/INLINE=PRAGMA' qualifier causes additional - compilation dependencies. Consider the following: - - package R is - procedure Q; - pragma Inline (Q); - end R; - package body R is - ... - end R; - - with R; - procedure Main is - begin - ... - R.Q; - end Main; - - With the default behavior (no `/INLINE=PRAGMA' qualifier specified), the - compilation of the `Main' procedure depends only on its own source, - `MAIN.ADB', and the spec of the package in file `R.ADS'. This means - that editing the body of `R' does not require recompiling `Main'. - - On the other hand, the call `R.Q' is not inlined under these - circumstances. If the `/INLINE=PRAGMA' qualifier is present when `Main' - is compiled, the call will be inlined if the body of `Q' is small - enough, but now `Main' depends on the body of `R' in `R.ADB' as well as - on the spec. This means that if this body is edited, the main program - must be recompiled. Note that this extra dependency occurs whether or - not the call is in fact inlined by `GNAT COMPILE'. - - The use of front end inlining with `-gnatN' generates similar - additional dependencies. - - Note: The `/INLINE=SUPPRESS' qualifier can be used to prevent all - inlining. This qualifier overrides all other conditions and ensures - that no inlining occurs. The extra dependences resulting from - `/INLINE=PRAGMA' will still be active, even if this qualifier is used - to suppress the resulting inlining actions. - - Note regarding the use of `/OPTIMIZE=INLINING': There is no - difference in inlining behavior between `/OPTIMIZE=ALL' and - `/OPTIMIZE=INLINING' for subprograms with an explicit pragma `Inline' - assuming the use of `/INLINE=PRAGMA' or `-gnatN' (the qualifiers that - activate inlining). If you have used pragma `Inline' in appropriate - cases, then it is usually much better to use `/OPTIMIZE=ALL' and - `/INLINE=PRAGMA' and avoid the use of `/OPTIMIZE=INLINING' which in - this case only has the effect of inlining subprograms you did not think - should be inlined. We often find that the use of `/OPTIMIZE=INLINING' - slows down code by performing excessive inlining, leading to increased - instruction cache pressure from the increased code size. So the bottom - line here is that you should not automatically assume that - `/OPTIMIZE=INLINING' is better than `/OPTIMIZE=ALL', and indeed you - should use `/OPTIMIZE=INLINING' only if tests show that it actually - improves performance. - -  - File: gnat_ug_vms.info, Node: Coverage Analysis, Prev: Inlining of Subprograms, Up: Performance Considerations - - Coverage Analysis - ================= - - GNAT supports the Digital Performance Coverage Analyzer (PCA), which - allows the user to determine the distribution of execution time across - a program, *note Profiling:: for details of usage. - -  - File: gnat_ug_vms.info, Node: GNU Free Documentation License, Next: Index, Prev: Performance Considerations, Up: Top - - GNU Free Documentation License - ****************************** - - Version 1.2, November 2002 - Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA - - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - 0. PREAMBLE - - The purpose of this License is to make a manual, textbook, or other - functional and useful document "free" in the sense of freedom: to - assure everyone the effective freedom to copy and redistribute it, - with or without modifying it, either commercially or - noncommercially. Secondarily, this License preserves for the - author and publisher a way to get credit for their work, while not - being considered responsible for modifications made by others. - - This License is a kind of "copyleft", which means that derivative - works of the document must themselves be free in the same sense. - It complements the GNU General Public License, which is a copyleft - license designed for free software. - - We have designed this License in order to use it for manuals for - free software, because free software needs free documentation: a - free program should come with manuals providing the same freedoms - that the software does. But this License is not limited to - software manuals; it can be used for any textual work, regardless - of subject matter or whether it is published as a printed book. - We recommend this License principally for works whose purpose is - instruction or reference. - - 1. APPLICABILITY AND DEFINITIONS - - This License applies to any manual or other work, in any medium, - that contains a notice placed by the copyright holder saying it - can be distributed under the terms of this License. Such a notice - grants a world-wide, royalty-free license, unlimited in duration, - to use that work under the conditions stated herein. The - "Document", below, refers to any such manual or work. Any member - of the public is a licensee, and is addressed as "you". You - accept the license if you copy, modify or distribute the work in a - way requiring permission under copyright law. - - A "Modified Version" of the Document means any work containing the - Document or a portion of it, either copied verbatim, or with - modifications and/or translated into another language. - - A "Secondary Section" is a named appendix or a front-matter section - of the Document that deals exclusively with the relationship of the - publishers or authors of the Document to the Document's overall - subject (or to related matters) and contains nothing that could - fall directly within that overall subject. (Thus, if the Document - is in part a textbook of mathematics, a Secondary Section may not - explain any mathematics.) The relationship could be a matter of - historical connection with the subject or with related matters, or - of legal, commercial, philosophical, ethical or political position - regarding them. - - The "Invariant Sections" are certain Secondary Sections whose - titles are designated, as being those of Invariant Sections, in - the notice that says that the Document is released under this - License. If a section does not fit the above definition of - Secondary then it is not allowed to be designated as Invariant. - The Document may contain zero Invariant Sections. If the Document - does not identify any Invariant Sections then there are none. - - The "Cover Texts" are certain short passages of text that are - listed, as Front-Cover Texts or Back-Cover Texts, in the notice - that says that the Document is released under this License. A - Front-Cover Text may be at most 5 words, and a Back-Cover Text may - be at most 25 words. - - A "Transparent" copy of the Document means a machine-readable copy, - represented in a format whose specification is available to the - general public, that is suitable for revising the document - straightforwardly with generic text editors or (for images - composed of pixels) generic paint programs or (for drawings) some - widely available drawing editor, and that is suitable for input to - text formatters or for automatic translation to a variety of - formats suitable for input to text formatters. A copy made in an - otherwise Transparent file format whose markup, or absence of - markup, has been arranged to thwart or discourage subsequent - modification by readers is not Transparent. An image format is - not Transparent if used for any substantial amount of text. A - copy that is not "Transparent" is called "Opaque". - - Examples of suitable formats for Transparent copies include plain - ASCII without markup, Texinfo input format, LaTeX input format, - SGML or XML using a publicly available DTD, and - standard-conforming simple HTML, PostScript or PDF designed for - human modification. Examples of transparent image formats include - PNG, XCF and JPG. Opaque formats include proprietary formats that - can be read and edited only by proprietary word processors, SGML or - XML for which the DTD and/or processing tools are not generally - available, and the machine-generated HTML, PostScript or PDF - produced by some word processors for output purposes only. - - The "Title Page" means, for a printed book, the title page itself, - plus such following pages as are needed to hold, legibly, the - material this License requires to appear in the title page. For - works in formats which do not have any title page as such, "Title - Page" means the text near the most prominent appearance of the - work's title, preceding the beginning of the body of the text. - - A section "Entitled XYZ" means a named subunit of the Document - whose title either is precisely XYZ or contains XYZ in parentheses - following text that translates XYZ in another language. (Here XYZ - stands for a specific section name mentioned below, such as - "Acknowledgements", "Dedications", "Endorsements", or "History".) - To "Preserve the Title" of such a section when you modify the - Document means that it remains a section "Entitled XYZ" according - to this definition. - - The Document may include Warranty Disclaimers next to the notice - which states that this License applies to the Document. These - Warranty Disclaimers are considered to be included by reference in - this License, but only as regards disclaiming warranties: any other - implication that these Warranty Disclaimers may have is void and - has no effect on the meaning of this License. - - 2. VERBATIM COPYING - - You may copy and distribute the Document in any medium, either - commercially or noncommercially, provided that this License, the - copyright notices, and the license notice saying this License - applies to the Document are reproduced in all copies, and that you - add no other conditions whatsoever to those of this License. You - may not use technical measures to obstruct or control the reading - or further copying of the copies you make or distribute. However, - you may accept compensation in exchange for copies. If you - distribute a large enough number of copies you must also follow - the conditions in section 3. - - You may also lend copies, under the same conditions stated above, - and you may publicly display copies. - - 3. COPYING IN QUANTITY - - If you publish printed copies (or copies in media that commonly - have printed covers) of the Document, numbering more than 100, and - the Document's license notice requires Cover Texts, you must - enclose the copies in covers that carry, clearly and legibly, all - these Cover Texts: Front-Cover Texts on the front cover, and - Back-Cover Texts on the back cover. Both covers must also clearly - and legibly identify you as the publisher of these copies. The - front cover must present the full title with all words of the - title equally prominent and visible. You may add other material - on the covers in addition. Copying with changes limited to the - covers, as long as they preserve the title of the Document and - satisfy these conditions, can be treated as verbatim copying in - other respects. - - If the required texts for either cover are too voluminous to fit - legibly, you should put the first ones listed (as many as fit - reasonably) on the actual cover, and continue the rest onto - adjacent pages. - - If you publish or distribute Opaque copies of the Document - numbering more than 100, you must either include a - machine-readable Transparent copy along with each Opaque copy, or - state in or with each Opaque copy a computer-network location from - which the general network-using public has access to download - using public-standard network protocols a complete Transparent - copy of the Document, free of added material. If you use the - latter option, you must take reasonably prudent steps, when you - begin distribution of Opaque copies in quantity, to ensure that - this Transparent copy will remain thus accessible at the stated - location until at least one year after the last time you - distribute an Opaque copy (directly or through your agents or - retailers) of that edition to the public. - - It is requested, but not required, that you contact the authors of - the Document well before redistributing any large number of - copies, to give them a chance to provide you with an updated - version of the Document. - - 4. MODIFICATIONS - - You may copy and distribute a Modified Version of the Document - under the conditions of sections 2 and 3 above, provided that you - release the Modified Version under precisely this License, with - the Modified Version filling the role of the Document, thus - licensing distribution and modification of the Modified Version to - whoever possesses a copy of it. In addition, you must do these - things in the Modified Version: - - A. Use in the Title Page (and on the covers, if any) a title - distinct from that of the Document, and from those of - previous versions (which should, if there were any, be listed - in the History section of the Document). You may use the - same title as a previous version if the original publisher of - that version gives permission. - - B. List on the Title Page, as authors, one or more persons or - entities responsible for authorship of the modifications in - the Modified Version, together with at least five of the - principal authors of the Document (all of its principal - authors, if it has fewer than five), unless they release you - from this requirement. - - C. State on the Title page the name of the publisher of the - Modified Version, as the publisher. - - D. Preserve all the copyright notices of the Document. - - E. Add an appropriate copyright notice for your modifications - adjacent to the other copyright notices. - - F. Include, immediately after the copyright notices, a license - notice giving the public permission to use the Modified - Version under the terms of this License, in the form shown in - the Addendum below. - - G. Preserve in that license notice the full lists of Invariant - Sections and required Cover Texts given in the Document's - license notice. - - H. Include an unaltered copy of this License. - - I. Preserve the section Entitled "History", Preserve its Title, - and add to it an item stating at least the title, year, new - authors, and publisher of the Modified Version as given on - the Title Page. If there is no section Entitled "History" in - the Document, create one stating the title, year, authors, - and publisher of the Document as given on its Title Page, - then add an item describing the Modified Version as stated in - the previous sentence. - - J. Preserve the network location, if any, given in the Document - for public access to a Transparent copy of the Document, and - likewise the network locations given in the Document for - previous versions it was based on. These may be placed in - the "History" section. You may omit a network location for a - work that was published at least four years before the - Document itself, or if the original publisher of the version - it refers to gives permission. - - K. For any section Entitled "Acknowledgements" or "Dedications", - Preserve the Title of the section, and preserve in the - section all the substance and tone of each of the contributor - acknowledgements and/or dedications given therein. - - L. Preserve all the Invariant Sections of the Document, - unaltered in their text and in their titles. Section numbers - or the equivalent are not considered part of the section - titles. - - M. Delete any section Entitled "Endorsements". Such a section - may not be included in the Modified Version. - - N. Do not retitle any existing section to be Entitled - "Endorsements" or to conflict in title with any Invariant - Section. - - O. Preserve any Warranty Disclaimers. - - If the Modified Version includes new front-matter sections or - appendices that qualify as Secondary Sections and contain no - material copied from the Document, you may at your option - designate some or all of these sections as invariant. To do this, - add their titles to the list of Invariant Sections in the Modified - Version's license notice. These titles must be distinct from any - other section titles. - - You may add a section Entitled "Endorsements", provided it contains - nothing but endorsements of your Modified Version by various - parties--for example, statements of peer review or that the text - has been approved by an organization as the authoritative - definition of a standard. - - You may add a passage of up to five words as a Front-Cover Text, - and a passage of up to 25 words as a Back-Cover Text, to the end - of the list of Cover Texts in the Modified Version. Only one - passage of Front-Cover Text and one of Back-Cover Text may be - added by (or through arrangements made by) any one entity. If the - Document already includes a cover text for the same cover, - previously added by you or by arrangement made by the same entity - you are acting on behalf of, you may not add another; but you may - replace the old one, on explicit permission from the previous - publisher that added the old one. - - The author(s) and publisher(s) of the Document do not by this - License give permission to use their names for publicity for or to - assert or imply endorsement of any Modified Version. - - 5. COMBINING DOCUMENTS - - You may combine the Document with other documents released under - this License, under the terms defined in section 4 above for - modified versions, provided that you include in the combination - all of the Invariant Sections of all of the original documents, - unmodified, and list them all as Invariant Sections of your - combined work in its license notice, and that you preserve all - their Warranty Disclaimers. - - The combined work need only contain one copy of this License, and - multiple identical Invariant Sections may be replaced with a single - copy. If there are multiple Invariant Sections with the same name - but different contents, make the title of each such section unique - by adding at the end of it, in parentheses, the name of the - original author or publisher of that section if known, or else a - unique number. Make the same adjustment to the section titles in - the list of Invariant Sections in the license notice of the - combined work. - - In the combination, you must combine any sections Entitled - "History" in the various original documents, forming one section - Entitled "History"; likewise combine any sections Entitled - "Acknowledgements", and any sections Entitled "Dedications". You - must delete all sections Entitled "Endorsements." - - 6. COLLECTIONS OF DOCUMENTS - - You may make a collection consisting of the Document and other - documents released under this License, and replace the individual - copies of this License in the various documents with a single copy - that is included in the collection, provided that you follow the - rules of this License for verbatim copying of each of the - documents in all other respects. - - You may extract a single document from such a collection, and - distribute it individually under this License, provided you insert - a copy of this License into the extracted document, and follow - this License in all other respects regarding verbatim copying of - that document. - - 7. AGGREGATION WITH INDEPENDENT WORKS - - A compilation of the Document or its derivatives with other - separate and independent documents or works, in or on a volume of - a storage or distribution medium, is called an "aggregate" if the - copyright resulting from the compilation is not used to limit the - legal rights of the compilation's users beyond what the individual - works permit. When the Document is included an aggregate, this - License does not apply to the other works in the aggregate which - are not themselves derivative works of the Document. - - If the Cover Text requirement of section 3 is applicable to these - copies of the Document, then if the Document is less than one half - of the entire aggregate, the Document's Cover Texts may be placed - on covers that bracket the Document within the aggregate, or the - electronic equivalent of covers if the Document is in electronic - form. Otherwise they must appear on printed covers that bracket - the whole aggregate. - - 8. TRANSLATION - - Translation is considered a kind of modification, so you may - distribute translations of the Document under the terms of section - 4. Replacing Invariant Sections with translations requires special - permission from their copyright holders, but you may include - translations of some or all Invariant Sections in addition to the - original versions of these Invariant Sections. You may include a - translation of this License, and all the license notices in the - Document, and any Warrany Disclaimers, provided that you also - include the original English version of this License and the - original versions of those notices and disclaimers. In case of a - disagreement between the translation and the original version of - this License or a notice or disclaimer, the original version will - prevail. - - If a section in the Document is Entitled "Acknowledgements", - "Dedications", or "History", the requirement (section 4) to - Preserve its Title (section 1) will typically require changing the - actual title. - - 9. TERMINATION - - You may not copy, modify, sublicense, or distribute the Document - except as expressly provided for under this License. Any other - attempt to copy, modify, sublicense or distribute the Document is - void, and will automatically terminate your rights under this - License. However, parties who have received copies, or rights, - from you under this License will not have their licenses - terminated so long as such parties remain in full compliance. - - 10. FUTURE REVISIONS OF THIS LICENSE - - The Free Software Foundation may publish new, revised versions of - the GNU Free Documentation License from time to time. Such new - versions will be similar in spirit to the present version, but may - differ in detail to address new problems or concerns. See - `http://www.gnu.org/copyleft/'. - - Each version of the License is given a distinguishing version - number. If the Document specifies that a particular numbered - version of this License "or any later version" applies to it, you - have the option of following the terms and conditions either of - that specified version or of any later version that has been - published (not as a draft) by the Free Software Foundation. If - the Document does not specify a version number of this License, - you may choose any version ever published (not as a draft) by the - Free Software Foundation. - - ADDENDUM: How to use this License for your documents - ==================================================== - - To use this License in a document you have written, include a copy of - the License in the document and put the following copyright and license - notices just after the title page: - - Copyright (C) YEAR YOUR NAME. - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.2 - or any later version published by the Free Software Foundation; - with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. - A copy of the license is included in the section entitled ``GNU - Free Documentation License''. - - If you have Invariant Sections, Front-Cover Texts and Back-Cover - Texts, replace the "with...Texts." line with this: - - with the Invariant Sections being LIST THEIR TITLES, with - the Front-Cover Texts being LIST, and with the Back-Cover Texts - being LIST. - - If you have Invariant Sections without Cover Texts, or some other - combination of the three, merge those two alternatives to suit the - situation. - - If your document contains nontrivial examples of program code, we - recommend releasing these examples in parallel under your choice of - free software license, such as the GNU General Public License, to - permit their use in free software. - -  - File: gnat_ug_vms.info, Node: Index, Prev: GNU Free Documentation License, Up: Top - - Index - ***** - - * Menu: - - * -83 (gnathtml): Converting Ada Files to html with gnathtml. - * -c (gnatname): Qualifiers for gnatname. - * -d (gnathtml): Converting Ada Files to html with gnathtml. - * -D (gnatname): Qualifiers for gnatname. - * -d (gnatname): Qualifiers for gnatname. - * -f (GNAT LINK): Qualifiers for GNAT LINK. - * -f (gnathtml): Converting Ada Files to html with gnathtml. - * -fstack-check: Stack Overflow Checking. - * -gnatem (GNAT COMPILE): Units to Sources Mapping Files. - * -gnatN (GNAT COMPILE): Subprogram Inlining Control. - * -gnatN qualifier: Source Dependencies. - * -gnatT (GNAT COMPILE): Run-Time Control. - * -gnatwP (GNAT COMPILE): Output and Error Message Control. - * -gnatwp (GNAT COMPILE): Output and Error Message Control. - * -h (gnatname): Qualifiers for gnatname. - * -I (gnathtml): Converting Ada Files to html with gnathtml. - * -l (gnathtml): Converting Ada Files to html with gnathtml. - * -o (gnathtml): Converting Ada Files to html with gnathtml. - * -p (gnathtml): Converting Ada Files to html with gnathtml. - * -P (gnatname): Qualifiers for gnatname. - * -sc (gnathtml): Converting Ada Files to html with gnathtml. - * -t (gnathtml): Converting Ada Files to html with gnathtml. - * -v (gnatname): Qualifiers for gnatname. - * -w: Output and Error Message Control. - * /83 (GNAT COMPILE): Compiling Ada 83 Programs. - * /ACTIONS=BIND (GNAT MAKE): Qualifiers for GNAT MAKE. - * /ACTIONS=COMPILE (GNAT MAKE): Qualifiers for GNAT MAKE. - * /ACTIONS=LINK (GNAT MAKE): Qualifiers for GNAT MAKE. - * /ALL_FILES (GNAT MAKE): Qualifiers for GNAT MAKE. - * /ALL_UNITS (GNAT LIST): Qualifiers for GNAT LIST. - * /ASM (GNAT COMPILE): Qualifiers for GNAT COMPILE. - * /BIND_FILE=ADA (GNAT BIND): Output Control. - * /BIND_FILE=ADA (GNAT LINK): Qualifiers for GNAT LINK. - * /BIND_FILE=C (GNAT BIND): Output Control. - * /BIND_FILE=C (GNAT LINK): Qualifiers for GNAT LINK. - * /BINDER_QUALIFIERS (GNAT MAKE): Mode Qualifiers for GNAT MAKE. - * /CHECKS=ASSERTIONS (GNAT COMPILE): Debugging and Assertion Control. - * /CHECKS=ELABORATION (GNAT COMPILE) <1>: Debugging Control. - * /CHECKS=ELABORATION (GNAT COMPILE): Run-Time Checks. - * /CHECKS=OVERFLOW (GNAT COMPILE) <1>: Controlling Run-Time Checks. - * /CHECKS=OVERFLOW (GNAT COMPILE): Run-Time Checks. - * /CHECKS=SUPPRESS_ALL (GNAT COMPILE) <1>: Controlling Run-Time Checks. - * /CHECKS=SUPPRESS_ALL (GNAT COMPILE): Run-Time Checks. - * /COMPILATION (GNAT CHOP): Qualifiers for GNAT CHOP. - * /COMPILER_QUALIFIERS (GNAT MAKE): Mode Qualifiers for GNAT MAKE. - * /CONDITIONAL_SOURCE_SEARCH (GNAT MAKE): Qualifiers for GNAT MAKE. - * /CONFIG=file (GNAT LIBRARY): Qualifiers for GNAT LIBRARY. - * /CONTINUE_ON_ERROR (GNAT MAKE): Qualifiers for GNAT MAKE. - * /CREATE=directory (GNAT LIBRARY): Qualifiers for GNAT LIBRARY. - * /DEBUG (GNAT COMPILE): Qualifiers for GNAT COMPILE. - * /DEBUG (GNAT LINK): Qualifiers for GNAT LINK. - * /DEBUG=TRACEBACK (GNAT LINK): Qualifiers for GNAT LINK. - * /DELETE=directory (GNAT LIBRARY): Qualifiers for GNAT LIBRARY. - * /DEPENDENCIES (GNAT LIST): Qualifiers for GNAT LIST. - * /DEPENDENCIES_LIST (GNAT MAKE): Qualifiers for GNAT MAKE. - * /DO_OBJECT_CHECK (GNAT MAKE): Qualifiers for GNAT MAKE. - * /ELABORATION_DEPENDENCIES (GNAT BIND): Output Control. - * /ERROR_LIMIT (GNAT COMPILE): Output and Error Message Control. - * /EXECUTABLE (GNAT LINK): Qualifiers for GNAT LINK. - * /EXECUTABLE (GNAT MAKE): Qualifiers for GNAT MAKE. - * /EXPAND_SOURCE (GNAT COMPILE): Debugging Control. - * /FILE_NAME_MAX_LENGTH (GNAT CHOP): Qualifiers for GNAT CHOP. - * /FILE_NAME_MAX_LENGTH (GNAT COMPILE): File Naming Control. - * /FORCE_COMPILE (GNAT MAKE): Qualifiers for GNAT MAKE. - * /HELP (GNAT BIND): Output Control. - * /IDENTIFIER_CHARACTER_SET (GNAT COMPILE): Character Set Control. - * /IN_PLACE (GNAT MAKE): Qualifiers for GNAT MAKE. - * /INLINE=PRAGMA (GNAT COMPILE) <1>: Inlining of Subprograms. - * /INLINE=PRAGMA (GNAT COMPILE): Subprogram Inlining Control. - * /INLINE=PRAGMA qualifier: Source Dependencies. - * /INLINE=SUPPRESS (GNAT COMPILE): Inlining of Subprograms. - * /LIBRARY_SEARCH (GNAT MAKE): Qualifiers for GNAT MAKE. - * /LINKER_OPTION_LIST (GNAT BIND): Output Control. - * /LINKER_QUALIFIERS (GNAT MAKE): Mode Qualifiers for GNAT MAKE. - * /LIST (GNAT COMPILE): Output and Error Message Control. - * /MAPPING (GNAT MAKE): Qualifiers for GNAT MAKE. - * /MINIMAL_RECOMPILATION (GNAT MAKE): Qualifiers for GNAT MAKE. - * /NOCURRENT_DIRECTORY (GNAT COMPILE): Qualifiers for GNAT COMPILE. - * /NOCURRENT_DIRECTORY (GNAT MAKE): Qualifiers for GNAT MAKE. - * /NOLOAD (GNAT COMPILE): Using GNAT COMPILE for Semantic Checking. - * /NOMAIN (GNAT BIND): Binding with Non-Ada Main Programs. - * /NOMAIN (GNAT MAKE): Qualifiers for GNAT MAKE. - * /NOOUTPUT (GNAT BIND): Output Control. - * /NOSTD_INCLUDES (GNAT MAKE): Qualifiers for GNAT MAKE. - * /NOSTD_LIBRARIES (GNAT MAKE): Qualifiers for GNAT MAKE. - * /NOTIME_STAMP_CHECK (GNAT BIND): Binder Error Message Control. - * /OBJECT_LIST (GNAT BIND): Output Control. - * /OBJECT_SEARCH (GNAT MAKE): Qualifiers for GNAT MAKE. - * /OPTIMIZE (GNAT COMPILE): Optimization Levels. - * /ORDER_OF_ELABORATION (GNAT BIND): Output Control. - * /OUTPUT (GNAT BIND): Output Control. - * /OUTPUT=OBJECTS (GNAT LIST): Qualifiers for GNAT LIST. - * /OUTPUT=OPTIONS (GNAT LIST): Qualifiers for GNAT LIST. - * /OUTPUT=SOURCES (GNAT LIST): Qualifiers for GNAT LIST. - * /OUTPUT=UNITS (GNAT LIST): Qualifiers for GNAT LIST. - * /OUTPUT=VERBOSE (GNAT LIST): Qualifiers for GNAT LIST. - * /OVERWRITE (GNAT CHOP): Qualifiers for GNAT CHOP. - * /PESSIMISTIC_ELABORATION (GNAT BIND): Elaboration Control. - * /PRESERVE (GNAT CHOP): Qualifiers for GNAT CHOP. - * /PROCESSES (GNAT MAKE): Qualifiers for GNAT MAKE. - * /QUIET (GNAT CHOP): Qualifiers for GNAT CHOP. - * /QUIET (GNAT MAKE): Qualifiers for GNAT MAKE. - * /READ_SOURCES=ALL (GNAT BIND): Consistency-Checking Modes. - * /READ_SOURCES=NONE (GNAT BIND): Consistency-Checking Modes. - * /REASONS (GNAT MAKE): Qualifiers for GNAT MAKE. - * /REFERENCE (GNAT CHOP): Qualifiers for GNAT CHOP. - * /REPORT_ERRORS=BRIEF (GNAT BIND): Binder Error Message Control. - * /REPORT_ERRORS=FULL (GNAT COMPILE): Output and Error Message Control. - * /REPORT_ERRORS=VERBOSE (GNAT BIND): Binder Error Message Control. - * /REPORT_ERRORS=VERBOSE (GNAT COMPILE): Output and Error Message Control. - * /REPRESENTATION_INFO (GNAT COMPILE): Debugging Control. - * /RESTRICTION_LIST (GNAT BIND): Output Control. - * /RUNTIME_SYSTEM (GNAT BIND): Summary of Binder Qualifiers. - * /RUNTIME_SYSTEM (GNAT COMPILE): Qualifiers for GNAT COMPILE. - * /RUNTIME_SYSTEM (GNAT FIND): GNAT FIND Qualifiers. - * /RUNTIME_SYSTEM (GNAT LIST): Qualifiers for GNAT LIST. - * /RUNTIME_SYSTEM (GNAT MAKE): Qualifiers for GNAT MAKE. - * /RUNTIME_SYSTEM (GNAT XREF): GNAT XREF Qualifiers. - * /SEARCH (GNAT COMPILE): Qualifiers for GNAT COMPILE. - * /SEARCH (GNAT MAKE): Qualifiers for GNAT MAKE. - * /SET=directory (GNAT LIBRARY): Qualifiers for GNAT LIBRARY. - * /SKIP_MISSING (GNAT MAKE): Qualifiers for GNAT MAKE. - * /SOURCE_SEARCH (GNAT MAKE): Qualifiers for GNAT MAKE. - * /SWITCH_CHECK (GNAT MAKE): Qualifiers for GNAT MAKE. - * /SYNTAX_ONLY (GNAT COMPILE): Using GNAT COMPILE for Syntax Checking. - * /TRACE_UNITS qualifier: GNAT Abnormal Termination or Failure to Terminate. - * /TREE_OUTPUT (GNAT COMPILE): Auxiliary Output Control. - * /TRY_SEMANTICS (GNAT COMPILE): Output and Error Message Control. - * /UNIQUE (GNAT MAKE): Qualifiers for GNAT MAKE. - * /UNIQUE_ERROR_TAG (GNAT COMPILE): Output and Error Message Control. - * /UNITS_LIST (GNAT COMPILE): Auxiliary Output Control. - * /VERBOSE (GNAT CHOP): Qualifiers for GNAT CHOP. - * /VERBOSE (GNAT COMPILE): Qualifiers for GNAT COMPILE. - * /VERBOSE (GNAT LINK): Qualifiers for GNAT LINK. - * /WARNINGS=BIASED_ROUNDING (GNAT COMPILE): Output and Error Message Control. - * /WARNINGS=BRIEF (GNAT COMPILE): Output and Error Message Control. - * /WARNINGS=CONDITIONALS (GNAT COMPILE): Output and Error Message Control. - * /WARNINGS=ELABORATION (GNAT COMPILE): Output and Error Message Control. - * /WARNINGS=ERROR (GNAT BIND): Binder Error Message Control. - * /WARNINGS=ERROR (GNAT COMPILE): Output and Error Message Control. - * /WARNINGS=HIDING (GNAT COMPILE): Output and Error Message Control. - * /WARNINGS=IMPLEMENTATION (GNAT COMPILE): Output and Error Message Control. - * /WARNINGS=IMPLICIT_DEREFERENCE (GNAT COMPILE): Output and Error Message Control. - * /WARNINGS=NOBIASED_ROUNDING (GNAT COMPILE): Output and Error Message Control. - * /WARNINGS=NOCONDITIONALS (GNAT COMPILE): Output and Error Message Control. - * /WARNINGS=NOELABORATION (GNAT COMPILE): Output and Error Message Control. - * /WARNINGS=NOHIDING (GNAT COMPILE): Output and Error Message Control. - * /WARNINGS=NOIMPLEMENTATION (GNAT COMPILE): Output and Error Message Control. - * /WARNINGS=NOIMPLICIT_DEREFERENCE (GNAT COMPILE): Output and Error Message Control. - * /WARNINGS=NOOPTIONAL (GNAT COMPILE): Output and Error Message Control. - * /WARNINGS=NOOVERLAYS (GNAT COMPILE): Output and Error Message Control. - * /WARNINGS=NOREDUNDANT (GNAT COMPILE): Output and Error Message Control. - * /WARNINGS=NOUNREFERENCED_FORMALS (GNAT COMPILE): Output and Error Message Control. - * /WARNINGS=NOUNUSED (GNAT COMPILE): Output and Error Message Control. - * /WARNINGS=OPTIONAL (GNAT COMPILE): Output and Error Message Control. - * /WARNINGS=OVERLAYS (GNAT COMPILE): Output and Error Message Control. - * /WARNINGS=REDUNDANT (GNAT COMPILE): Output and Error Message Control. - * /WARNINGS=SUPPRESS (GNAT BIND): Binder Error Message Control. - * /WARNINGS=SUPPRESS (GNAT COMPILE): Output and Error Message Control. - * /WARNINGS=UNREFERENCED_FORMALS (GNAT COMPILE): Output and Error Message Control. - * /WARNINGS=UNUSED (GNAT COMPILE): Output and Error Message Control. - * /WIDE_CHARACTER_ENCODING (GNAT COMPILE): Character Set Control. - * /XDEBUG (GNAT COMPILE): Debugging Control. - * /XREF=SUPPRESS (GNAT COMPILE): Debugging Control. - * /ZERO_MAIN (GNAT BIND): Binding Programs with No Main Subprogram. - * __gnat_finalize: Running GNAT BIND. - * __gnat_initialize: Running GNAT BIND. - * __gnat_set_globals: Running GNAT BIND. - * _main: The External Symbol Naming Scheme of GNAT. - * Access before elaboration: Run-Time Checks. - * Access-to-subprogram: Elaboration for Access-to-Subprogram Values. - * ACVC, Ada 83 tests: Compiling Ada 83 Programs. - * Ada <1>: Naming Conventions for GNAT Source Files. - * Ada: Search Paths for GNAT BIND. - * Ada 83 compatibility: Compiling Ada 83 Programs. - * Ada 95 Language Reference Manual: What You Should Know before Reading This Guide. - * Ada expressions: Using Ada Expressions. - * Ada Library Information files: The Ada Library Information Files. - * Ada.Characters.Latin_1: Latin-1. - * ADA_INCLUDE_PATH: Search Paths and the Run-Time Library (RTL). - * ADA_OBJECTS_PATH: Search Paths for GNAT BIND. - * adafinal <1>: Binding with Non-Ada Main Programs. - * adafinal: Running GNAT BIND. - * adainit <1>: Binding with Non-Ada Main Programs. - * adainit: Running GNAT BIND. - * Address Clauses, warnings: Output and Error Message Control. - * ali files: The Ada Library Information Files. - * Annex A: Naming Conventions for GNAT Source Files. - * Annex B: Naming Conventions for GNAT Source Files. - * Arbitrary File Naming Conventions: Handling Arbitrary File Naming Conventions Using gnatname. - * Asm: Calling Conventions. - * Assert: Debugging and Assertion Control. - * Assertions: Debugging and Assertion Control. - * Biased rounding: Output and Error Message Control. - * Binder consistency checks: Binder Error Message Control. - * Binder output file: Interfacing to C. - * Binder, multiple input files: Binding with Non-Ada Main Programs. - * Breakpoints and tasks: Ada Tasks. - * C: Calling Conventions. - * C++: Calling Conventions. - * Calling Conventions: Calling Conventions. - * Check, elaboration: Run-Time Checks. - * Check, overflow: Run-Time Checks. - * Check_CPU procedure: Check_CPU Procedure. - * Checks, access before elaboration: Run-Time Checks. - * Checks, division by zero: Run-Time Checks. - * Checks, elaboration: Checking the Elaboration Order in Ada 95. - * Checks, overflow: Controlling Run-Time Checks. - * Checks, suppressing: Run-Time Checks. - * COBOL: Calling Conventions. - * code page 437: Other 8-Bit Codes. - * code page 850: Other 8-Bit Codes. - * Command line length: Qualifiers for GNAT LINK. - * Compatibility: Compatibility with DEC Ada. - * Compilation model: The GNAT Compilation Model. - * Conditionals, constant: Output and Error Message Control. - * Configuration pragmas: Configuration Pragmas. - * Consistency checks, in binder: Binder Error Message Control. - * Convention Ada: Calling Conventions. - * Convention Asm: Calling Conventions. - * Convention Assembler: Calling Conventions. - * Convention C: Calling Conventions. - * Convention C++: Calling Conventions. - * Convention COBOL: Calling Conventions. - * Convention Default: Calling Conventions. - * Convention DLL: Calling Conventions. - * Convention External: Calling Conventions. - * Convention Fortran: Calling Conventions. - * Convention Stdcall: Calling Conventions. - * Convention Stubbed: Calling Conventions. - * Convention Win32: Calling Conventions. - * Conventions: Conventions. - * CR: Source Representation. - * Cyrillic: Other 8-Bit Codes. - * Debug: Debugging and Assertion Control. - * Debug Pool: Finding Memory Problems with GNAT Debug Pool. - * Debugger: Running and Debugging Ada Programs. - * Debugging: Running and Debugging Ada Programs. - * Debugging Generic Units: Debugging Generic Units. - * Debugging information, including: Qualifiers for GNAT LINK. - * Debugging options: Debugging Control. - * Default: Calling Conventions. - * Dependencies, producing list: Qualifiers for GNAT MAKE. - * Dependency rules: The GNAT Make Program GNAT MAKE. - * Dereferencing, implicit: Output and Error Message Control. - * Division by zero: Run-Time Checks. - * DLL: Calling Conventions. - * Elaborate: Controlling the Elaboration Order in Ada 95. - * Elaborate_All: Controlling the Elaboration Order in Ada 95. - * Elaborate_Body: Controlling the Elaboration Order in Ada 95. - * Elaboration checks <1>: Checking the Elaboration Order in Ada 95. - * Elaboration checks: Run-Time Checks. - * Elaboration control <1>: Summary of Procedures for Elaboration Control. - * Elaboration control: Elaboration Order Handling in GNAT. - * Elaboration of library tasks: Elaboration Issues for Library Tasks. - * Elaboration order control: Comparison between GNAT and C/C++ Compilation Models. - * Elaboration, warnings: Output and Error Message Control. - * Eliminate: Eliminate Pragma. - * EMACS: Editing with EMACS. - * End of source file: Source Representation. - * Error messages, suppressing: Output and Error Message Control. - * EUC Coding: Wide Character Encodings. - * Exceptions: Ada Exceptions. - * Export: The External Symbol Naming Scheme of GNAT. - * External: Calling Conventions. - * FDL, GNU Free Documentation License: GNU Free Documentation License. - * FF: Source Representation. - * File names <1>: Alternative File Naming Schemes. - * File names: Using Other File Names. - * File naming schemes, alternative: Alternative File Naming Schemes. - * Floating-Point types: Floating-Point Types and Representations. - * Foreign Languages: Calling Conventions. - * Formals, unreferenced: Output and Error Message Control. - * Fortran: Calling Conventions. - * GDB: Running and Debugging Ada Programs. - * Generic formal parameters: Compiling Ada 83 Programs. - * Generics <1>: Debugging Generic Units. - * Generics: Generating Object Files. - * GNAT <1>: Naming Conventions for GNAT Source Files. - * GNAT: Search Paths for GNAT BIND. - * GNAT Abnormal Termination or Failure to Terminate: GNAT Abnormal Termination or Failure to Terminate. - * GNAT BIND: Binding Using GNAT BIND. - * GNAT CHOP: Renaming Files Using GNAT CHOP. - * GNAT compilation model: The GNAT Compilation Model. - * GNAT ELIM: Reducing the Size of Ada Executables with GNAT ELIM. - * GNAT FIND: The Cross-Referencing Tools GNAT XREF and GNAT FIND. - * GNAT KRUNCH: File Name Krunching Using GNAT KRUNCH. - * GNAT LIBRARY: The GNAT Run-Time Library Builder GNAT LIBRARY. - * GNAT library: Comparison between GNAT and Conventional Ada Library Models. - * GNAT LINK: Linking Using GNAT LINK. - * GNAT LIST: The GNAT Library Browser GNAT LIST. - * GNAT MAKE: The GNAT Make Program GNAT MAKE. - * GNAT PREPROCESS: Preprocessing Using GNAT PREPROCESS. - * GNAT STUB: Creating Sample Bodies Using GNAT STUB. - * GNAT XREF: The Cross-Referencing Tools GNAT XREF and GNAT FIND. - * GNAT.ADC <1>: The Configuration Pragmas Files. - * GNAT.ADC: Using Other File Names. - * GNAT1: Compiling Programs. - * gnat_argc: Command-Line Access. - * gnat_argv: Command-Line Access. - * GNAT_STACK_LIMIT: Stack Overflow Checking. - * Hiding of Declarations: Output and Error Message Control. - * HT: Source Representation. - * Implicit dereferencing: Output and Error Message Control. - * Inline <1>: Inlining of Subprograms. - * Inline: Source Dependencies. - * Inlining: Comparison between GNAT and Conventional Ada Library Models. - * Inlining, warnings: Output and Error Message Control. - * Intel_CPU package body: Intel_CPU Package Body. - * Intel_CPU package specification: Intel_CPU Package Specification. - * Interfaces <1>: Naming Conventions for GNAT Source Files. - * Interfaces: Search Paths for GNAT BIND. - * Interfacing to Ada: Calling Conventions. - * Interfacing to Assembly: Calling Conventions. - * Interfacing to C: Calling Conventions. - * Interfacing to C++: Calling Conventions. - * Interfacing to COBOL: Calling Conventions. - * Interfacing to Fortran: Calling Conventions. - * Internal trees, writing to file: Auxiliary Output Control. - * Latin-1 <1>: Latin-1. - * Latin-1: Source Representation. - * Latin-2: Other 8-Bit Codes. - * Latin-3: Other 8-Bit Codes. - * Latin-4: Other 8-Bit Codes. - * Latin-5: Other 8-Bit Codes. - * LF: Source Representation. - * Library browser: The GNAT Library Browser GNAT LIST. - * Library builder: The GNAT Run-Time Library Builder GNAT LIBRARY. - * Library tasks, elaboration issues: Elaboration Issues for Library Tasks. - * Linker libraries: Qualifiers for GNAT MAKE. - * LSE: LSE. - * Machine_Overflows: Run-Time Checks. - * Main Program: Running GNAT BIND. - * Mixed Language Programming: Mixed Language Programming. - * Multiple units, syntax checking: Using GNAT COMPILE for Syntax Checking. - * No code generated: Compiling Programs. - * No_Entry_Calls_In_Elaboration_Code: Elaboration Issues for Library Tasks. - * Object file list: Running GNAT BIND. - * Order of elaboration: Elaboration Order Handling in GNAT. - * Other Ada compilers: Calling Conventions. - * Overflow checks <1>: Controlling Run-Time Checks. - * Overflow checks: Run-Time Checks. - * Parallel make: Qualifiers for GNAT MAKE. - * PCA: Profiling. - * Performance: Performance Considerations. - * pragma Elaborate: Controlling the Elaboration Order in Ada 95. - * pragma Elaborate_All: Controlling the Elaboration Order in Ada 95. - * pragma Elaborate_Body: Controlling the Elaboration Order in Ada 95. - * pragma Inline: Inlining of Subprograms. - * pragma Preelaborate: Controlling the Elaboration Order in Ada 95. - * pragma Pure: Controlling the Elaboration Order in Ada 95. - * pragma Suppress: Controlling Run-Time Checks. - * pragma Unsuppress: Controlling Run-Time Checks. - * Pragmas, configuration: Configuration Pragmas. - * Preelaborate: Controlling the Elaboration Order in Ada 95. - * Pure: Controlling the Elaboration Order in Ada 95. - * Recompilation, by GNAT MAKE: Notes on the Command Line. - * Rounding, biased: Output and Error Message Control. - * RTL: Qualifiers for GNAT COMPILE. - * SDP_Table_Build: Running GNAT BIND. - * Search paths, for GNAT MAKE: Qualifiers for GNAT MAKE. - * Shift JIS Coding: Wide Character Encodings. - * Source file, end: Source Representation. - * Source files, suppressing search: Qualifiers for GNAT MAKE. - * Source files, use by binder: Running GNAT BIND. - * Source_File_Name pragma <1>: Alternative File Naming Schemes. - * Source_File_Name pragma: Using Other File Names. - * Source_Reference: Qualifiers for GNAT CHOP. - * Stack Overflow Checking: Stack Overflow Checking. - * stack traceback: Stack Traceback. - * stack unwinding: Stack Traceback. - * Starlet: Bindings. - * Stdcall: Calling Conventions. - * storage, pool, memory corruption: Finding Memory Problems with GNAT Debug Pool. - * Stubbed: Calling Conventions. - * Style checking: Style Checking. - * SUB: Source Representation. - * Subunits: Generating Object Files. - * Suppress <1>: Controlling Run-Time Checks. - * Suppress: Run-Time Checks. - * Suppressing checks: Run-Time Checks. - * SYS$ERROR: Output and Error Message Control. - * SYS$OUTPUT: Output and Error Message Control. - * System <1>: Naming Conventions for GNAT Source Files. - * System: Search Paths for GNAT BIND. - * System.IO: Search Paths and the Run-Time Library (RTL). - * Task switching: Ada Tasks. - * Tasks: Ada Tasks. - * Time Slicing: Run-Time Control. - * Time stamp checks, in binder: Binder Error Message Control. - * traceback: Stack Traceback. - * traceback, non-symbolic: Non-Symbolic Traceback. - * traceback, symbolic: Symbolic Traceback. - * Tree file: Tree Files. - * Typographical conventions: Conventions. - * Unsuppress <1>: Controlling Run-Time Checks. - * Unsuppress: Run-Time Checks. - * Upper-Half Coding: Wide Character Encodings. - * Validity Checking: Validity Checking. - * Version skew (avoided by GNAT MAKE): Running a Simple Ada Program. - * Volatile parameter: The Volatile Parameter. - * VT: Source Representation. - * Warning messages: Output and Error Message Control. - * Warnings: Binder Error Message Control. - * Warnings, treat as error: Output and Error Message Control. - * Win32: Calling Conventions. - * Writing internal trees: Auxiliary Output Control. - * Zero Cost Exceptions: Running GNAT BIND. - - -  - Tag Table: - Node: Top91 - Node: About This Guide10020 - Node: What This Guide Contains10554 - Node: What You Should Know before Reading This Guide14536 - Node: Related Information14944 - Node: Conventions15780 - Node: Getting Started with GNAT16674 - Node: Running GNAT17105 - Node: Running a Simple Ada Program17708 - Node: Running a Program with Multiple Units20869 - Node: Using the GNAT MAKE Utility23129 - Node: Editing with EMACS25543 - Node: The GNAT Compilation Model26707 - Node: Source Representation28046 - Node: Foreign Language Representation29832 - Node: Latin-130318 - Node: Other 8-Bit Codes31184 - Node: Wide Character Encodings33277 - Node: File Naming Rules37083 - Node: Using Other File Names39385 - Node: Alternative File Naming Schemes41314 - Node: Generating Object Files46546 - Node: Source Dependencies49266 - Node: The Ada Library Information Files52820 - Node: Binding an Ada Program54971 - Node: Mixed Language Programming56819 - Node: Interfacing to C57096 - Node: Calling Conventions59705 - Node: Building Mixed Ada & C++ Programs65629 - Node: Interfacing to C++66710 - Node: Linking a Mixed C++ & Ada Program67750 - Node: A Simple Example70836 - Node: Adapting the Run Time to a New C++ Compiler73755 - Node: Comparison between GNAT and C/C++ Compilation Models74771 - Node: Comparison between GNAT and Conventional Ada Library Models76501 - Node: Compiling Using GNAT COMPILE79152 - Node: Compiling Programs79697 - Node: Qualifiers for GNAT COMPILE82589 - Node: Output and Error Message Control91042 - Node: Debugging and Assertion Control109943 - Node: Validity Checking111955 - Node: Style Checking118232 - Node: Run-Time Checks129939 - Node: Stack Overflow Checking134103 - Node: Run-Time Control136225 - Node: Using GNAT COMPILE for Syntax Checking137153 - Node: Using GNAT COMPILE for Semantic Checking138548 - Node: Compiling Ada 83 Programs140047 - Node: Character Set Control141497 - Node: File Naming Control144580 - Node: Subprogram Inlining Control145115 - Node: Auxiliary Output Control146417 - Node: Debugging Control147160 - Node: Units to Sources Mapping Files154487 - Node: Search Paths and the Run-Time Library (RTL)155897 - Node: Order of Compilation Issues159487 - Node: Examples161197 - Node: Binding Using GNAT BIND161815 - Node: Running GNAT BIND163699 - Node: Generating the Binder Program in C194503 - Node: Consistency-Checking Modes211963 - Node: Binder Error Message Control213659 - Node: Elaboration Control215819 - Node: Output Control217091 - Node: Binding with Non-Ada Main Programs219685 - Node: Binding Programs with No Main Subprogram222852 - Node: Summary of Binder Qualifiers223692 - Node: Command-Line Access227329 - Node: Search Paths for GNAT BIND228354 - Node: Examples of GNAT BIND Usage231584 - Node: Linking Using GNAT LINK233204 - Node: Running GNAT LINK233965 - Node: Qualifiers for GNAT LINK236227 - Node: Setting Stack Size from GNAT LINK239053 - Node: Setting Heap Size from GNAT LINK239918 - Node: The GNAT Make Program GNAT MAKE240741 - Node: Running GNAT MAKE242208 - Node: Qualifiers for GNAT MAKE243930 - Node: Mode Qualifiers for GNAT MAKE256186 - Node: Notes on the Command Line257474 - Node: How GNAT MAKE Works260493 - Node: Examples of GNAT MAKE Usage262676 - Node: Renaming Files Using GNAT CHOP263887 - Node: Handling Files with Multiple Units264487 - Node: Operating GNAT CHOP in Compilation Mode265814 - Node: Command Line for GNAT CHOP269152 - Node: Qualifiers for GNAT CHOP270632 - Node: Examples of GNAT CHOP Usage273948 - Node: Configuration Pragmas275350 - Node: Handling of Configuration Pragmas276903 - Node: The Configuration Pragmas Files277764 - Node: Handling Arbitrary File Naming Conventions Using gnatname279478 - Node: Arbitrary File Naming Conventions279888 - Node: Running gnatname281149 - Node: Qualifiers for gnatname282614 - Node: Examples of gnatname Usage285820 - Node: GNAT Project Manager286627 - Node: Introduction287291 - Node: Project Files288401 - Node: Examples of Project Files291625 - Node: Common Sources with Different Qualifiers and Different Output Directories292101 - Node: Source Files295314 - Node: Specifying the Object Directory295792 - Node: Specifying the Exec Directory296726 - Node: Project File Packages297496 - Node: Specifying Qualifier Settings298511 - Node: Main Subprograms300510 - Node: Source File Naming Conventions301181 - Node: Source Language(s)301683 - Node: Using External Variables302126 - Node: Importing Other Projects305031 - Node: Extending a Project308143 - Node: Project File Syntax310614 - Node: Basic Syntax311976 - Node: Packages312984 - Node: Expressions314141 - Node: String Types316039 - Node: Variables317342 - Node: Attributes320376 - Node: Associative Array Attributes325813 - Node: case Constructions326680 - Node: Objects and Sources in Project Files328490 - Node: Object Directory329070 - Node: Exec Directory330061 - Node: Source Directories330890 - Node: Source File Names332257 - Node: Importing Projects334594 - Node: Project Extension337373 - Node: External References in Project Files339054 - Node: Packages in Project Files340800 - Node: Variables from Imported Projects343218 - Node: Naming Schemes344916 - Node: Library Projects348889 - Node: Qualifiers Related to Project Files351787 - Node: Tools Supporting Project Files353517 - Node: GNAT MAKE and Project Files353824 - Node: Qualifiers and Project Files354286 - Node: Project Files and Main Subprograms360361 - Node: The GNAT Driver and Project Files362309 - Node: An Extended Example366049 - Node: Project File Complete Syntax369063 - Node: Elaboration Order Handling in GNAT371855 - Node: Elaboration Code in Ada 95372877 - Node: Checking the Elaboration Order in Ada 95377523 - Node: Controlling the Elaboration Order in Ada 95381524 - Node: Controlling Elaboration in GNAT - Internal Calls389841 - Node: Controlling Elaboration in GNAT - External Calls395562 - Node: Default Behavior in GNAT - Ensuring Safety399296 - Node: Elaboration Issues for Library Tasks403439 - Node: Mixing Elaboration Models416676 - Node: What to Do If the Default Elaboration Behavior Fails419197 - Node: Elaboration for Access-to-Subprogram Values429623 - Node: Summary of Procedures for Elaboration Control431447 - Node: Other Elaboration Order Considerations432645 - Node: The Cross-Referencing Tools GNAT XREF and GNAT FIND437920 - Node: GNAT XREF Qualifiers439634 - Node: GNAT FIND Qualifiers443018 - Node: Project Files for GNAT XREF and GNAT FIND448927 - Node: Regular Expressions in GNAT FIND and GNAT XREF452172 - Node: Examples of GNAT XREF Usage454963 - Node: Examples of GNAT FIND Usage458168 - Node: File Name Krunching Using GNAT KRUNCH460455 - Node: About GNAT KRUNCH461113 - Node: Using GNAT KRUNCH462490 - Node: Krunching Method463389 - Node: Examples of GNAT KRUNCH Usage466660 - Node: Preprocessing Using GNAT PREPROCESS467004 - Node: Using GNAT PREPROCESS467586 - Node: Qualifiers for GNAT PREPROCESS468496 - Node: Form of Definitions File470719 - Node: Form of Input Text for GNAT PREPROCESS471481 - Node: The GNAT Run-Time Library Builder GNAT LIBRARY475137 - Node: Running GNAT LIBRARY475617 - Node: Qualifiers for GNAT LIBRARY475920 - Node: Examples of GNAT LIBRARY Usage476713 - Node: The GNAT Library Browser GNAT LIST477156 - Node: Running GNAT LIST477752 - Node: Qualifiers for GNAT LIST480305 - Node: Examples of GNAT LIST Usage482393 - Node: Finding Memory Problems with GNAT Debug Pool483628 - Node: Creating Sample Bodies Using GNAT STUB488331 - Node: Running GNAT STUB489140 - Node: Qualifiers for GNAT STUB489909 - Node: Reducing the Size of Ada Executables with GNAT ELIM492222 - Node: About GNAT ELIM492763 - Node: Eliminate Pragma493858 - Node: Tree Files494869 - Node: Preparing Tree and Bind Files for GNAT ELIM495788 - Node: Running GNAT ELIM497887 - Node: Correcting the List of Eliminate Pragmas499897 - Node: Making Your Executables Smaller500681 - Node: Summary of the GNAT ELIM Usage Cycle501533 - Node: Other Utility Programs502405 - Node: Using Other Utility Programs with GNAT502953 - Node: The GNAT STANDARD Utility Program503408 - Node: The External Symbol Naming Scheme of GNAT504730 - Node: Ada Mode for Glide506732 - Node: Converting Ada Files to html with gnathtml508683 - Node: Installing gnathtml512291 - Node: LSE512969 - Node: Profiling513300 - Node: Running and Debugging Ada Programs513718 - Node: The GNAT Debugger GDB515116 - Node: Running GDB518290 - Node: Introduction to GDB Commands519227 - Node: Using Ada Expressions524131 - Node: Calling User-Defined Subprograms525325 - Node: Using the Next Command in a Function527745 - Node: Ada Exceptions528910 - Node: Ada Tasks529864 - Node: Debugging Generic Units531933 - Node: GNAT Abnormal Termination or Failure to Terminate533336 - Node: Naming Conventions for GNAT Source Files536029 - Node: Getting Internal Debugging Information538629 - Node: Stack Traceback539838 - Node: Non-Symbolic Traceback540875 - Node: Tracebacks From an Unhandled Exception541336 - Node: Tracebacks From Exception Occurrences (non-symbolic)545301 - Node: Tracebacks From Anywhere in a Program (non-symbolic)546584 - Node: Symbolic Traceback548429 - Node: Tracebacks From Exception Occurrences (symbolic)549152 - Node: Tracebacks From Anywhere in a Program (symbolic)550610 - Node: Compatibility with DEC Ada551802 - Node: Ada 95 Compatibility553351 - Node: Differences in the Definition of Package System554420 - Node: Language-Related Features556530 - Node: Integer Types and Representations557163 - Node: Floating-Point Types and Representations558107 - Node: Pragmas Float_Representation and Long_Float559412 - Node: Fixed-Point Types and Representations562751 - Node: Record and Array Component Alignment563387 - Node: Address Clauses564061 - Node: Other Representation Clauses566093 - Node: The Package STANDARD566493 - Node: The Package SYSTEM567383 - Node: Tasking and Task-Related Features571415 - Node: Implementation of Tasks in DEC Ada for OpenVMS Alpha Systems571979 - Node: Assigning Task IDs573465 - Node: Task IDs and Delays574155 - Node: Task-Related Pragmas574728 - Node: Scheduling and Task Priority575825 - Node: The Task Stack577522 - Node: External Interrupts578436 - Node: Pragmas and Pragma-Related Features578763 - Node: Restrictions on the Pragma INLINE581055 - Node: Restrictions on the Pragma INTERFACE582212 - Node: Restrictions on the Pragma SYSTEM_NAME583214 - Node: Library of Predefined Units583615 - Node: Changes to DECLIB585446 - Node: Bindings586213 - Node: Shared Libraries and Options Files588022 - Node: Interfaces to C588741 - Node: Main Program Definition589597 - Node: Implementation-Defined Attributes590902 - Node: Compiler and Run-Time Interfacing591208 - Node: Program Compilation and Library Management592554 - Node: Input-Output603019 - Node: Implementation Limits605636 - Node: Tools607703 - Node: Inline Assembler607819 - Node: Basic Assembler Syntax609526 - Node: A Simple Example of Inline Assembler611406 - Node: Output Variables in Inline Assembler614617 - Node: Input Variables in Inline Assembler622006 - Node: Inlining Inline Assembler Code624524 - Node: Other Asm Functionality626482 - Node: The Clobber Parameter626917 - Node: The Volatile Parameter628916 - Node: A Complete Example630108 - Node: Check_CPU Procedure631082 - Node: Intel_CPU Package Specification646129 - Node: Intel_CPU Package Body655557 - Node: Performance Considerations664715 - Node: Controlling Run-Time Checks665771 - Node: Optimization Levels667801 - Node: Debugging Optimized Code669701 - Node: Inlining of Subprograms673437 - Node: Coverage Analysis677262 - Node: GNU Free Documentation License677608 - Node: Index700037 -  - End Tag Table --- 0 ---- diff -Nrc3pad gcc-3.3.2/gcc/ada/gnat_ug_vxw.info gcc-3.3.3/gcc/ada/gnat_ug_vxw.info *** gcc-3.3.2/gcc/ada/gnat_ug_vxw.info Thu Oct 16 20:24:02 2003 --- gcc-3.3.3/gcc/ada/gnat_ug_vxw.info Thu Jan 1 00:00:00 1970 *************** *** 1,18960 **** - This is ada/gnat_ug_vxw.info, produced by makeinfo version 4.2 from - ada/gnat_ug_vxw.texi. - - Copyright (C) 1995-2002, Free Software Foundation - - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.2 or - any later version published by the Free Software Foundation; with the - Invariant Sections being "GNU Free Documentation License", with the - Front-Cover Texts being "GNAT User's Guide for Cross Platforms", and - with no Back-Cover Texts. A copy of the license is included in the - section entitled "GNU Free Documentation License". -  - File: gnat_ug_vxw.info, Node: Top, Next: About This Guide, Prev: (dir), Up: (dir) - - GNAT User's Guide - ***************** - - GNAT User's Guide for Cross Platforms - - GNAT, The GNU Ada 95 Compiler - - GNAT Version for GCC 3.3.2 - - Ada Core Technologies, Inc. - - Copyright (C) 1995-2002, Free Software Foundation - - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.2 or - any later version published by the Free Software Foundation; with the - Invariant Sections being "GNU Free Documentation License", with the - Front-Cover Texts being "GNAT User's Guide for Cross Platforms", and - with no Back-Cover Texts. A copy of the license is included in the - section entitled "GNU Free Documentation License". - * Menu: - - * About This Guide:: - * Preliminary Note for Cross Platform Users:: - * Getting Started with GNAT:: - * The GNAT Compilation Model:: - * Compiling Using gcc:: - * Binding Using gnatbind:: - * Linking Using gnatlink:: - * The GNAT Make Program gnatmake:: - * Renaming Files Using gnatchop:: - * Configuration Pragmas:: - * Handling Arbitrary File Naming Conventions Using gnatname:: - * GNAT Project Manager:: - * Elaboration Order Handling in GNAT:: - * The Cross-Referencing Tools gnatxref and gnatfind:: - * File Name Krunching Using gnatkr:: - * Preprocessing Using gnatprep:: - * The GNAT Library Browser gnatls:: - * GNAT and Libraries:: - * Using the GNU make Utility:: - * Finding Memory Problems with GNAT Debug Pool:: - * Creating Sample Bodies Using gnatstub:: - * Reducing the Size of Ada Executables with gnatelim:: - * Other Utility Programs:: - * Running and Debugging Ada Programs:: - * Inline Assembler:: - * VxWorks Topics:: - * LynxOS Topics:: - * Performance Considerations:: - * GNU Free Documentation License:: - * Index:: - - --- The Detailed Node Listing --- - - About This Guide - - * What This Guide Contains:: - * What You Should Know before Reading This Guide:: - * Related Information:: - * Conventions:: - - Preliminary Note for Cross Platform Users:: - - Getting Started with GNAT - - * Running GNAT:: - * Building a Simple Ada Program:: - * Executing a Program on VxWorks:: - * Running a Program with Multiple Units:: - * Using the gnatmake Utility:: - - The GNAT Compilation Model - - * Source Representation:: - * Foreign Language Representation:: - * File Naming Rules:: - * Using Other File Names:: - * Alternative File Naming Schemes:: - * Generating Object Files:: - * Source Dependencies:: - * The Ada Library Information Files:: - * Binding an Ada Program:: - * Mixed Language Programming:: - * Building Mixed Ada & C++ Programs:: - * Comparison between GNAT and C/C++ Compilation Models:: - * Comparison between GNAT and Conventional Ada Library Models:: - - Foreign Language Representation - - * Latin-1:: - * Other 8-Bit Codes:: - * Wide Character Encodings:: - - Compiling Ada Programs With gcc - - * Compiling Programs:: - * Switches for gcc:: - * Search Paths and the Run-Time Library (RTL):: - * Order of Compilation Issues:: - * Examples:: - - Switches for gcc - - * Output and Error Message Control:: - * Debugging and Assertion Control:: - * Run-Time Checks:: - * Stack Overflow Checking:: - * Run-Time Control:: - * Validity Checking:: - * Style Checking:: - * Using gcc for Syntax Checking:: - * Using gcc for Semantic Checking:: - * Compiling Ada 83 Programs:: - * Character Set Control:: - * File Naming Control:: - * Subprogram Inlining Control:: - * Auxiliary Output Control:: - * Debugging Control:: - * Units to Sources Mapping Files:: - - Binding Ada Programs With gnatbind - - * Running gnatbind:: - * Generating the Binder Program in C:: - * Consistency-Checking Modes:: - * Binder Error Message Control:: - * Elaboration Control:: - * Output Control:: - * Binding with Non-Ada Main Programs:: - * Binding Programs with No Main Subprogram:: - * Summary of Binder Switches:: - * Command-Line Access:: - * Search Paths for gnatbind:: - * Examples of gnatbind Usage:: - - Linking Using gnatlink - - * Running gnatlink:: - * Switches for gnatlink:: - * Setting Stack Size from gnatlink:: - * Setting Heap Size from gnatlink:: - - The GNAT Make Program gnatmake - - * Running gnatmake:: - * Switches for gnatmake:: - * Mode Switches for gnatmake:: - * Notes on the Command Line:: - * How gnatmake Works:: - * Examples of gnatmake Usage:: - - Renaming Files Using gnatchop - - * Handling Files with Multiple Units:: - * Operating gnatchop in Compilation Mode:: - * Command Line for gnatchop:: - * Switches for gnatchop:: - * Examples of gnatchop Usage:: - - Configuration Pragmas - - * Handling of Configuration Pragmas:: - * The Configuration Pragmas Files:: - - Handling Arbitrary File Naming Conventions Using gnatname - - * Arbitrary File Naming Conventions:: - * Running gnatname:: - * Switches for gnatname:: - * Examples of gnatname Usage:: - - GNAT Project Manager - - * Introduction:: - * Examples of Project Files:: - * Project File Syntax:: - * Objects and Sources in Project Files:: - * Importing Projects:: - * Project Extension:: - * External References in Project Files:: - * Packages in Project Files:: - * Variables from Imported Projects:: - * Naming Schemes:: - * Library Projects:: - * Switches Related to Project Files:: - * Tools Supporting Project Files:: - * An Extended Example:: - * Project File Complete Syntax:: - - Elaboration Order Handling in GNAT - - * Elaboration Code in Ada 95:: - * Checking the Elaboration Order in Ada 95:: - * Controlling the Elaboration Order in Ada 95:: - * Controlling Elaboration in GNAT - Internal Calls:: - * Controlling Elaboration in GNAT - External Calls:: - * Default Behavior in GNAT - Ensuring Safety:: - * Elaboration Issues for Library Tasks:: - * Mixing Elaboration Models:: - * What to Do If the Default Elaboration Behavior Fails:: - * Elaboration for Access-to-Subprogram Values:: - * Summary of Procedures for Elaboration Control:: - * Other Elaboration Order Considerations:: - - The Cross-Referencing Tools gnatxref and gnatfind - - * gnatxref Switches:: - * gnatfind Switches:: - * Project Files for gnatxref and gnatfind:: - * Regular Expressions in gnatfind and gnatxref:: - * Examples of gnatxref Usage:: - * Examples of gnatfind Usage:: - - File Name Krunching Using gnatkr - - * About gnatkr:: - * Using gnatkr:: - * Krunching Method:: - * Examples of gnatkr Usage:: - - Preprocessing Using gnatprep - - * Using gnatprep:: - * Switches for gnatprep:: - * Form of Definitions File:: - * Form of Input Text for gnatprep:: - - - The GNAT Library Browser gnatls - - * Running gnatls:: - * Switches for gnatls:: - * Examples of gnatls Usage:: - - - GNAT and Libraries - - * Creating an Ada Library:: - * Installing an Ada Library:: - * Using an Ada Library:: - * Creating an Ada Library to be Used in a Non-Ada Context:: - * Rebuilding the GNAT Run-Time Library:: - - Using the GNU make Utility - - * Using gnatmake in a Makefile:: - * Automatically Creating a List of Directories:: - * Generating the Command Line Switches:: - * Overcoming Command Line Length Limits:: - - - Finding Memory Problems with GNAT Debug Pool - - Creating Sample Bodies Using gnatstub - - * Running gnatstub:: - * Switches for gnatstub:: - - Reducing the Size of Ada Executables with gnatelim - - * About gnatelim:: - * Eliminate Pragma:: - * Tree Files:: - * Preparing Tree and Bind Files for gnatelim:: - * Running gnatelim:: - * Correcting the List of Eliminate Pragmas:: - * Making Your Executables Smaller:: - * Summary of the gnatelim Usage Cycle:: - - Other Utility Programs - - * Using Other Utility Programs with GNAT:: - * The gnatpsta Utility Program:: - * The External Symbol Naming Scheme of GNAT:: - * Ada Mode for Glide:: - * Converting Ada Files to html with gnathtml:: - - - Running and Debugging Ada Programs - - * The GNAT Debugger GDB:: - * Running GDB:: - * Introduction to GDB Commands:: - * Using Ada Expressions:: - * Calling User-Defined Subprograms:: - * Using the Next Command in a Function:: - * Ada Exceptions:: - * Ada Tasks:: - * Debugging Generic Units:: - * GNAT Abnormal Termination or Failure to Terminate:: - * Naming Conventions for GNAT Source Files:: - * Getting Internal Debugging Information:: - * Stack Traceback:: - - Inline Assembler - - * Basic Assembler Syntax:: - * A Simple Example of Inline Assembler:: - * Output Variables in Inline Assembler:: - * Input Variables in Inline Assembler:: - * Inlining Inline Assembler Code:: - * Other Asm Functionality:: - * A Complete Example:: - - - VxWorks Topics - - * Kernel Configuration for VxWorks:: - * Kernel Compilation Issues for VxWorks:: - * Handling Relocation Issues for PowerPc Targets:: - * Support for Software Floating Point on PowerPC Processors:: - * Interrupt Handling for VxWorks:: - * Simulating Command Line Arguments for VxWorks:: - * Debugging Issues for VxWorks:: - * Using GNAT from the Tornado 2 Project Facility:: - * Frequently Asked Questions for VxWorks:: - - LynxOS Topics - - * Getting Started with GNAT on LynxOS:: - * Kernel Configuration for LynxOS:: - * Patch Level Issues for LynxOS:: - * Debugging Issues for LynxOS:: - * An Example Debugging Session for LynxOS:: - - Performance Considerations - - * Controlling Run-Time Checks:: - * Optimization Levels:: - * Debugging Optimized Code:: - * Inlining of Subprograms:: - - * Index:: - -  - File: gnat_ug_vxw.info, Node: About This Guide, Next: Preliminary Note for Cross Platform Users, Prev: Top, Up: Top - - About This Guide - **************** - - This guide describes the use of GNAT, a compiler and software - development toolset for the full Ada 95 programming language. It - describes the features of the compiler and tools, and details how to - use them to build Ada 95 applications. - - * Menu: - - * What This Guide Contains:: - * What You Should Know before Reading This Guide:: - * Related Information:: - * Conventions:: - -  - File: gnat_ug_vxw.info, Node: What This Guide Contains, Next: What You Should Know before Reading This Guide, Up: About This Guide - - What This Guide Contains - ======================== - - This guide contains the following chapters: - * *Note Preliminary Note for Cross Platform Users::, describes the - basic differences between the cross and native versions of GNAT. - - * *Note Getting Started with GNAT::, describes how to get started - compiling and running Ada programs with the GNAT Ada programming - environment. - - * *Note The GNAT Compilation Model::, describes the compilation - model used by GNAT. - - * *Note Compiling Using gcc::, describes how to compile Ada programs - with `gcc', the Ada compiler. - - * *Note Binding Using gnatbind::, describes how to perform binding - of Ada programs with `gnatbind', the GNAT binding utility. - - * *Note Linking Using gnatlink::, describes `gnatlink', a program - that provides for linking using the GNAT run-time library to - construct a program. `gnatlink' can also incorporate foreign - language object units into the executable. - - * *Note The GNAT Make Program gnatmake::, describes `gnatmake', a - utility that automatically determines the set of sources needed by - an Ada compilation unit, and executes the necessary compilations - binding and link. - - * *Note Renaming Files Using gnatchop::, describes `gnatchop', a - utility that allows you to preprocess a file that contains Ada - source code, and split it into one or more new files, one for each - compilation unit. - - * *Note Configuration Pragmas::, describes the configuration pragmas - handled by GNAT. - - * *Note Handling Arbitrary File Naming Conventions Using gnatname::, - shows how to override the default GNAT file naming conventions, - either for an individual unit or globally. - - * *Note GNAT Project Manager::, describes how to use project files - to organize large projects. - - * *Note Elaboration Order Handling in GNAT::, describes how GNAT - helps you deal with elaboration order issues. - - * *Note The Cross-Referencing Tools gnatxref and gnatfind::, - discusses `gnatxref' and `gnatfind', two tools that provide an easy - way to navigate through sources. - - * *Note File Name Krunching Using gnatkr::, describes the `gnatkr' - file name krunching utility, used to handle shortened file names - on operating systems with a limit on the length of names. - - * *Note Preprocessing Using gnatprep::, describes `gnatprep', a - preprocessor utility that allows a single source file to be used to - generate multiple or parameterized source files, by means of macro - substitution. - - * *Note The GNAT Library Browser gnatls::, describes `gnatls', a - utility that displays information about compiled units, including - dependences on the corresponding sources files, and consistency of - compilations. - - * *Note GNAT and Libraries::, describes the process of creating and - using Libraries with GNAT. It also describes how to recompile the - GNAT run-time library. - - * *Note Using the GNU make Utility::, describes some techniques for - using the GNAT toolset in Makefiles. - - * *Note Finding Memory Problems with GNAT Debug Pool::, describes - how to use the GNAT-specific Debug Pool in order to detect as - early as possible the use of incorrect memory references. - - * *Note Creating Sample Bodies Using gnatstub::, discusses - `gnatstub', a utility that generates empty but compilable bodies - for library units. - - * *Note Reducing the Size of Ada Executables with gnatelim::, - describes `gnatelim', a tool which detects unused subprograms and - helps the compiler to create a smaller executable for the program. - - * *Note Other Utility Programs::, discusses several other GNAT - utilities, including `gnatpsta'. - - * *Note Running and Debugging Ada Programs::, describes how to run - and debug Ada programs. - - * *Note Inline Assembler::, shows how to use the inline assembly - facility in an Ada program. - - * *Note VxWorks Topics::, presents information relevant to the - VxWorks target for cross-compilation configurations. - - * *Note LynxOS Topics::, presents information relevant to the LynxOS - target for cross-compilation configurations. - - * *Note Performance Considerations::, reviews the trade offs between - using defaults or options in program development. - -  - File: gnat_ug_vxw.info, Node: What You Should Know before Reading This Guide, Next: Related Information, Prev: What This Guide Contains, Up: About This Guide - - What You Should Know before Reading This Guide - ============================================== - - This user's guide assumes that you are familiar with Ada 95 language, as - described in the International Standard ANSI/ISO/IEC-8652:1995, Jan - 1995. - -  - File: gnat_ug_vxw.info, Node: Related Information, Next: Conventions, Prev: What You Should Know before Reading This Guide, Up: About This Guide - - Related Information - =================== - - For further information about related tools, refer to the following - documents: - - * `GNAT Reference Manual', which contains all reference material for - the GNAT implementation of Ada 95. - - * `Ada 95 Language Reference Manual', which contains all reference - material for the Ada 95 programming language. - - * `Debugging with GDB' contains all details on the use of the GNU - source-level debugger. - - * `GNU Emacs Manual' contains full information on the extensible - editor and programming environment Emacs. - - -  - File: gnat_ug_vxw.info, Node: Conventions, Prev: Related Information, Up: About This Guide - - Conventions - =========== - - Following are examples of the typographical and graphic conventions used - in this guide: - - * `Functions', `utility program names', `standard names', and - `classes'. - - * `Option flags' - - * `File Names', `button names', and `field names'. - - * VARIABLES. - - * _Emphasis_. - - * [optional information or parameters] - - * Examples are described by text - and then shown this way. - - Commands that are entered by the user are preceded in this manual by the - characters "`$ '" (dollar sign followed by space). If your system uses - this sequence as a prompt, then the commands will appear exactly as you - see them in the manual. If your system uses some other prompt, then the - command will appear with the `$' replaced by whatever prompt character - you are using. - -  - File: gnat_ug_vxw.info, Node: Preliminary Note for Cross Platform Users, Next: Getting Started with GNAT, Prev: About This Guide, Up: Top - - Preliminary Note for Cross Platform Users - ***************************************** - - The use of GNAT in a cross environment is very similar to its use in a - native environment. Most of the tools described in this manual have - similar functions and options in both modes. The major difference is - that the name of the cross tools includes the target for which the - cross compiler is configured. For instance, the cross `gnatmake' tool - is called `target-gnatmake' where `target' stands for the name of the - cross target. Thus, in an environment configured for the target - `powerpc-wrs-vxworks', the `gnatmake' command is - `powerpc-wrs-vxworks-gnatmake'. This convention allows the installation - of a native and one or several cross development environments at the - same location. - - The tools that are most relevant in a cross environment are: - `target-gcc', `target-gnatmake', `target-gnatbind', `target-gnatlink' - to build cross applications and `target-gnatls' for cross library - browsing. `target-gdb' is also usually available for cross debugging in - text mode. The graphical debugger interface `gvd' is always a native - tool but it can be configured to drive the above mentioned cross - debugger, thus allowing graphical cross debugging sessions. Some other - tools such as `target-gnatchop', `target-gnatkr', `target-gnatprep', - `target-gnatpsta', `target-gnatxref', `target-gnatfind' and - `target-gnatname' are also provided for completeness even though they - do not differ greatly from their native counterpart. - - In the rest of this manual, the tools are sometimes designated with - their full cross name, and sometimes with their simplified native name. - -  - File: gnat_ug_vxw.info, Node: Getting Started with GNAT, Next: The GNAT Compilation Model, Prev: Preliminary Note for Cross Platform Users, Up: Top - - Getting Started with GNAT - ************************* - - This introduction is a starting point for using GNAT to develop and - execute Ada 95 programs in a cross environment. It provides some - specifics about the GNAT toolchain targeted to the Wind River Sytems' - VxWorks/Tornado platform; for other targets please refer to the - corresponding chapter later in this manual. - - Basic familiarity with use of GNAT in a native environment is - presumed. For the VxWorks specific part, a knowledge of how to start - Tornado's `windsh' tool is also presumed. - - * Menu: - - * Running GNAT:: - * Building a Simple Ada Program:: - * Executing a Program on VxWorks:: - - * Running a Program with Multiple Units:: - - * Using the gnatmake Utility:: - * Introduction to Glide and GVD:: - -  - File: gnat_ug_vxw.info, Node: Running GNAT, Next: Building a Simple Ada Program, Up: Getting Started with GNAT - - Running GNAT - ============ - - Three steps are needed to create an executable file from an Ada source - file: - - 1. The source file(s) must be compiled. - - 2. The file(s) must be bound using the GNAT binder. - - 3. All appropriate object files must be linked to produce a loadable - module. - - All three steps are most commonly handled by using the `gnatmake' - utility program that, given the name of the main program, automatically - performs the necessary compilation, binding and linking steps. - -  - File: gnat_ug_vxw.info, Node: Building a Simple Ada Program, Next: Executing a Program on VxWorks, Prev: Running GNAT, Up: Getting Started with GNAT - - Building a Simple Ada Program - ============================= - - Any text editor may be used to prepare an Ada program. If `Glide' is - used, the optional Ada mode may be helpful in laying out the program. - The program text is a normal text file. We will suppose in our initial - example that you have used your editor to prepare the following - standard format text file: - - with Ada.Text_IO; use Ada.Text_IO; - procedure Hello is - begin - Put_Line ("Hello WORLD!"); - end Hello; - - This file should be named `hello.adb'. With the normal default file - naming conventions, GNAT requires that each file contain a single - compilation unit whose file name is the unit name, with periods - replaced by hyphens; the extension is `ads' for a spec and `adb' for a - body. You can override this default file naming convention by use of - the special pragma `Source_File_Name' (*note Using Other File Names::). - Alternatively, if you want to rename your files according to this - default convention, which is probably more convenient if you will be - using GNAT for all your compilations, then the `gnatchop' utility can - be used to generate correctly-named source files (*note Renaming Files - Using gnatchop::). - - You can compile the program using the following command (`$' is used - as the command prompt in the examples in this document): - - $ target-gcc -c hello.adb - - `gcc' is the command used to run the compiler. This compiler is capable - of compiling programs in several languages, including Ada 95 and C. It - assumes that you have given it an Ada program if the file extension is - either `.ads' or `.adb', and it will then call the GNAT compiler to - compile the specified file. - - The `-c' switch is required. It tells `gcc' to only do a - compilation. (For C programs, `gcc' can also do linking, but this - capability is not used directly for Ada programs, so the `-c' switch - must always be present.) - - This compile command generates a file `hello.o', which is the object - file corresponding to your Ada program. It also generates an "Ada - Library Information" file `hello.ali', which contains additional - information used to check that an Ada program is consistent. To build - a downloadable module, use `gnatbind' to bind the program and - `gnatlink' to link it. The argument to both `gnatbind' and `gnatlink' - is the name of the `ali' file, but the default extension of `.ali' can - be omitted. This means that in the most common case, the argument is - simply the name of the main program: - - $ target-gnatbind hello - $ target-gnatlink hello - - A simpler method of carrying out these steps is to use `gnatmake', a - master program that invokes all the required compilation, binding and - linking tools in the correct order. In particular, `gnatmake' - automatically recompiles any sources that have been modified since they - were last compiled, or sources that depend on such modified sources, so - that "version skew" is avoided. - - $ target-gnatmake hello.adb - - The result is a relocatable object called `hello'. - - _Technical note:_ the result of the linking stage is a relocatable - partially-linked object containing all the relevant GNAT run-time - units, in contrast with the executable-format object file found in - native environments. - -  - File: gnat_ug_vxw.info, Node: Executing a Program on VxWorks, Next: Running a Program with Multiple Units, Prev: Building a Simple Ada Program, Up: Getting Started with GNAT - - Executing a Program on VxWorks - ============================== - - Getting a program to execute involves loading it onto the target, - running it, and then (if re-execution is needed) unloading it. - - * Menu: - - * Loading and Running the Program:: - * Unloading the Program:: - -  - File: gnat_ug_vxw.info, Node: Loading and Running the Program, Next: Unloading the Program, Up: Executing a Program on VxWorks - - Loading and Running the Program - ------------------------------- - - An Ada program is loaded and run in the same way as a C program. - Details may be found in the `Tornado User's Guide'. - - In order to load and run our simple "Hello World" example, we assume - that the target has access to the disk of the host containing this - object and that its working directory has been set to the directory - containing this object. The commands are typed in Tornado's Windshell. - The `windsh' prompt is the `->' sequence. - - -> vf0=open("/vio/0",2,0) - new symbol "vf0" added to symbol table. - vf0 = 0x2cab48: value = 12 = 0xc - -> ioGlobalStdSet(1,vf0) - value = 1 = 0x1 - -> ld < hello - value = 665408 = 0xa2740 - -> hello - Hello World - value = 0 = 0x0 - -> - - The first two commands redirect output to the shell window. They are - only needed if the target server was started without the `-C' option. - The third command loads the module, which is the file `hello' created - previously by the `target-gnatmake' command. Note that for Tornado AE, - the `ml' command replaces `ld'." - - The "Hello World" program comprises a procedure named `hello', and - this is the name entered for the procedure in the target server's - symbol table when the module is loaded. To execute the procedure, type - the symbol name `hello' into `windsh' as shown in the last command - above. - - Note that by default the entry point of an Ada program is the name - of the main Ada subprogram in a VxWorks environment. It is possible to - use an alternative name; see the description of `gnatbind' options for - details. - -  - File: gnat_ug_vxw.info, Node: Unloading the Program, Prev: Loading and Running the Program, Up: Executing a Program on VxWorks - - Unloading the Program - --------------------- - - It is important to remember that you must unload a program once you - have run it. You cannot load it once and run it several times. If you - don't follow this rule, your program's behavior can be unpredictable, - and will most probably crash. - - This effect is due to the implementation of Ada 95's _elaboration_ - semantics. The unit elaboration phase comprises a _static_ elaboration - and a _dynamic_ elaboration. On a native platform they both take place - when the program is run. Thus rerunning the program will repeat the - complete elaboration phase, and the program will run correctly. - - On VxWorks, the process is a bit different. The static elaboration - phase is handled by the loader (typically when you type `ld < - program_name' in `windsh'). The dynamic phase takes place when the - program is run. If the program is run twice and has not been unloaded - and then reloaded, the second time it is run, the static elaboration - phase is skipped. Variables initialized during the static elaboration - phase may have been modified during the first execution of the program. - Thus the second execution isn't performed on a completely initialized - environment. - - Note that in C programs, elaboration isn't systematic. Multiple runs - without reload might work, but, even with C programs, if there is an - elaboration phase, you will have to unload your program before - re-running it. - -  - File: gnat_ug_vxw.info, Node: Running a Program with Multiple Units, Next: Using the gnatmake Utility, Prev: Executing a Program on VxWorks, Up: Getting Started with GNAT - - Running a Program with Multiple Units - ===================================== - - Consider a slightly more complicated example that has three files: a - main program, and the spec and body of a package: - - package Greetings is - procedure Hello; - procedure Goodbye; - end Greetings; - - with Ada.Text_IO; use Ada.Text_IO; - package body Greetings is - procedure Hello is - begin - Put_Line ("Hello WORLD!"); - end Hello; - - procedure Goodbye is - begin - Put_Line ("Goodbye WORLD!"); - end Goodbye; - end Greetings; - - with Greetings; - procedure Gmain is - begin - Greetings.Hello; - Greetings.Goodbye; - end Gmain; - - Following the one-unit-per-file rule, place this program in the - following three separate files: - - `greetings.ads' - spec of package `Greetings' - - `greetings.adb' - body of package `Greetings' - - `gmain.adb' - body of main program - - To build an executable version of this program, we could use four - separate steps to compile, bind, and link the program, as follows: - - $ target-gcc -c gmain.adb - $ target-gcc -c greetings.adb - $ target-gnatbind gmain - $ target-gnatlink gmain - - Note that there is no required order of compilation when using GNAT. - In particular it is perfectly fine to compile the main program first. - Also, it is not necessary to compile package specs in the case where - there is an accompanying body; you only need to compile the body. If - you want to submit these files to the compiler for semantic checking - and not code generation, then use the `-gnatc' switch: - - $ target-gcc -c greetings.ads -gnatc - - Although the compilation can be done in separate steps as in the above - example, in practice it is almost always more convenient to use the - `gnatmake' tool. All you need to know in this case is the name of the - main program's source file. The effect of the above four commands can - be achieved with a single one: - - $ target-gnatmake gmain.adb - - In the next section we discuss the advantages of using `gnatmake' in - more detail. - -  - File: gnat_ug_vxw.info, Node: Using the gnatmake Utility, Next: Introduction to Glide and GVD, Prev: Running a Program with Multiple Units, Up: Getting Started with GNAT - - Using the `gnatmake' Utility - ============================ - - If you work on a program by compiling single components at a time using - `gcc', you typically keep track of the units you modify. In order to - build a consistent system, you compile not only these units, but also - any units that depend on the units you have modified. For example, in - the preceding case, if you edit `gmain.adb', you only need to recompile - that file. But if you edit `greetings.ads', you must recompile both - `greetings.adb' and `gmain.adb', because both files contain units that - depend on `greetings.ads'. - - `gnatbind' will warn you if you forget one of these compilation - steps, so that it is impossible to generate an inconsistent program as a - result of forgetting to do a compilation. Nevertheless it is tedious and - error-prone to keep track of dependencies among units. One approach to - handle the dependency-bookkeeping is to use a makefile. However, - makefiles present maintenance problems of their own: if the - dependencies change as you change the program, you must make sure that - the makefile is kept up-to-date manually, which is also an error-prone - process. - - The `gnatmake' utility takes care of these details automatically. - Invoke it using either one of the following forms: - - $ target-gnatmake gmain.adb - $ target-gnatmake gmain - - The argument is the name of the file containing the main program; you - may omit the extension. `gnatmake' examines the environment, - automatically recompiles any files that need recompiling, and binds and - links the resulting set of object files, generating the executable - file, `gmain'. In a large program, it can be extremely helpful to use - `gnatmake', because working out by hand what needs to be recompiled can - be difficult. - - Note that `gnatmake' takes into account all the Ada 95 rules that - establish dependencies among units. These include dependencies that - result from inlining subprogram bodies, and from generic instantiation. - Unlike some other Ada make tools, `gnatmake' does not rely on the - dependencies that were found by the compiler on a previous compilation, - which may possibly be wrong when sources change. `gnatmake' determines - the exact set of dependencies from scratch each time it is run. - -  - File: gnat_ug_vxw.info, Node: Introduction to Glide and GVD, Prev: Using the gnatmake Utility, Up: Getting Started with GNAT - - Introduction to Glide and GVD - ============================= - - Although it is possible to develop programs using only the command line - interface (`gnatmake', etc.) a graphical Interactive Development - Environment can make it easier for you to compose, navigate, and debug - programs. This section describes the main features of Glide, the GNAT - graphical IDE, and also shows how to use the basic commands in GVD, the - GNU Visual Debugger. Additional information may be found in the - on-line help for these tools. - - * Menu: - - * Building a New Program with Glide:: - * Simple Debugging with GVD:: - * Other Glide Features:: - -  - File: gnat_ug_vxw.info, Node: Building a New Program with Glide, Next: Simple Debugging with GVD, Up: Introduction to Glide and GVD - - Building a New Program with Glide - --------------------------------- - - The simplest way to invoke Glide is to enter `glide' at the command - prompt. It will generally be useful to issue this as a background - command, thus allowing you to continue using your command window for - other purposes while Glide is running: - - $ glide& - - Glide will start up with an initial screen displaying the top-level - menu items as well as some other information. The menu selections are - as follows - * `Buffers' - - * `Files' - - * `Tools' - - * `Edit' - - * `Search' - - * `Mule' - - * `Glide' - - * `Help' - - For this introductory example, you will need to create a new Ada source - file. First, select the `Files' menu. This will pop open a menu with - around a dozen or so items. To create a file, select the `Open - file...' choice. Depending on the platform, you may see a pop-up - window where you can browse to an appropriate directory and then enter - the file name, or else simply see a line at the bottom of the Glide - window where you can likewise enter the file name. Note that in Glide, - when you attempt to open a non-existent file, the effect is to create a - file with that name. For this example enter `hello.adb' as the name of - the file. - - A new buffer will now appear, occupying the entire Glide window, - with the file name at the top. The menu selections are slightly - different from the ones you saw on the opening screen; there is an - `Entities' item, and in place of `Glide' there is now an `Ada' item. - Glide uses the file extension to identify the source language, so `adb' - indicates an Ada source file. - - You will enter some of the source program lines explicitly, and use - the syntax-oriented template mechanism to enter other lines. First, - type the following text: - with Ada.Text_IO; use Ada.Text_IO; - procedure Hello is - begin - - Observe that Glide uses different colors to distinguish reserved words - from identifiers. Also, after the `procedure Hello is' line, the - cursor is automatically indented in anticipation of declarations. When - you enter `begin', Glide recognizes that there are no declarations and - thus places `begin' flush left. But after the `begin' line the cursor - is again indented, where the statement(s) will be placed. - - The main part of the program will be a `for' loop. Instead of - entering the text explicitly, however, use a statement template. - Select the `Ada' item on the top menu bar, move the mouse to the - `Statements' item, and you will see a large selection of alternatives. - Choose `for loop'. You will be prompted (at the bottom of the buffer) - for a loop name; simply press the key since a loop name is not - needed. You should see the beginning of a `for' loop appear in the - source program window. You will now be prompted for the name of the - loop variable; enter a line with the identifier `ind' (lower case). - Note that, by default, Glide capitalizes the name (you can override - such behavior if you wish, although this is outside the scope of this - introduction). Next, Glide prompts you for the loop range; enter a - line containing `1..5' and you will see this also appear in the source - program, together with the remaining elements of the `for' loop syntax. - - Next enter the statement (with an intentional error, a missing - semicolon) that will form the body of the loop: - Put_Line("Hello, World" & Integer'Image(I)) - - Finally, type `end Hello;' as the last line in the program. Now save - the file: choose the `File' menu item, and then the `Save buffer' - selection. You will see a message at the bottom of the buffer - confirming that the file has been saved. - - You are now ready to attempt to build the program. Select the `Ada' - item from the top menu bar. Although we could choose simply to compile - the file, we will instead attempt to do a build (which invokes - `gnatmake') since, if the compile is successful, we want to build an - executable. Thus select `Ada build'. This will fail because of the - compilation error, and you will notice that the Glide window has been - split: the top window contains the source file, and the bottom window - contains the output from the GNAT tools. Glide allows you to navigate - from a compilation error to the source file position corresponding to - the error: click the middle mouse button (or simultaneously press the - left and right buttons, on a two-button mouse) on the diagnostic line - in the tool window. The focus will shift to the source window, and the - cursor will be positioned on the character at which the error was - detected. - - Correct the error: type in a semicolon to terminate the statement. - Although you can again save the file explicitly, you can also simply - invoke `Ada' => `Build' and you will be prompted to save the file. - This time the build will succeed; the tool output window shows you the - options that are supplied by default. The GNAT tools' output (e.g., - object and ALI files, executable) will go in the directory from which - Glide was launched. - - To execute the program, choose `Ada' and then `Run'. You should see - the program's output displayed in the bottom window: - - Hello, world 1 - Hello, world 2 - Hello, world 3 - Hello, world 4 - Hello, world 5 - -  - File: gnat_ug_vxw.info, Node: Simple Debugging with GVD, Next: Other Glide Features, Prev: Building a New Program with Glide, Up: Introduction to Glide and GVD - - Simple Debugging with GVD - ------------------------- - - This section describes how to set breakpoints, examine/modify - variables, and step through execution. - - In order to enable debugging, you need to pass the `-g' switch to - both the compiler and to `gnatlink'. If you are using the command - line, passing `-g' to `gnatmake' will have this effect. You can then - launch GVD, e.g. on the `hello' program, by issuing the command: - - $ gvd hello - - If you are using Glide, then `-g' is passed to the relevant tools by - default when you do a build. Start the debugger by selecting the `Ada' - menu item, and then `Debug'. - - GVD comes up in a multi-part window. One pane shows the names of - files comprising your executable; another pane shows the source code of - the current unit (initially your main subprogram), another pane shows - the debugger output and user interactions, and the fourth pane (the - data canvas at the top of the window) displays data objects that you - have selected. - - To the left of the source file pane, you will notice green dots - adjacent to some lines. These are lines for which object code exists - and where breakpoints can thus be set. You set/reset a breakpoint by - clicking the green dot. When a breakpoint is set, the dot is replaced - by an `X' in a red circle. Clicking the circle toggles the breakpoint - off, and the red circle is replaced by the green dot. - - For this example, set a breakpoint at the statement where `Put_Line' - is invoked. - - Start program execution by selecting the `Run' button on the top - menu bar. (The `Start' button will also start your program, but it - will cause program execution to break at the entry to your main - subprogram.) Evidence of reaching the breakpoint will appear: the - source file line will be highlighted, and the debugger interactions - pane will display a relevant message. - - You can examine the values of variables in several ways. Move the - mouse over an occurrence of `Ind' in the `for' loop, and you will see - the value (now `1') displayed. Alternatively, right-click on `Ind' and - select `Display Ind'; a box showing the variable's name and value will - appear in the data canvas. - - Although a loop index is a constant with respect to Ada semantics, - you can change its value in the debugger. Right-click in the box for - `Ind', and select the `Set Value of Ind' item. Enter `2' as the new - value, and press `OK'. The box for `Ind' shows the update. - - Press the `Step' button on the top menu bar; this will step through - one line of program text (the invocation of `Put_Line'), and you can - observe the effect of having modified `Ind' since the value displayed - is `2'. - - Remove the breakpoint, and resume execution by selecting the `Cont' - button. You will see the remaining output lines displayed in the - debugger interaction window, along with a message confirming normal - program termination. - -  - File: gnat_ug_vxw.info, Node: Other Glide Features, Prev: Simple Debugging with GVD, Up: Introduction to Glide and GVD - - Other Glide Features - -------------------- - - You may have observed that some of the menu selections contain - abbreviations; e.g., `(C-x C-f)' for `Open file...' in the `Files' - menu. These are _shortcut keys_ that you can use instead of selecting - menu items. The stands for ; thus `(C-x C-f)' means - followed by , and this sequence can be used instead of - selecting `Files' and then `Open file...'. - - To abort a Glide command, type . - - If you want Glide to start with an existing source file, you can - either launch Glide as above and then open the file via `Files' => - `Open file...', or else simply pass the name of the source file on the - command line: - - $ glide hello.adb& - - While you are using Glide, a number of _buffers_ exist. You create - some explicitly; e.g., when you open/create a file. Others arise as an - effect of the commands that you issue; e.g., the buffer containing the - output of the tools invoked during a build. If a buffer is hidden, you - can bring it into a visible window by first opening the `Buffers' menu - and then selecting the desired entry. - - If a buffer occupies only part of the Glide screen and you want to - expand it to fill the entire screen, then click in the buffer and then - select `Files' => `One Window'. - - If a window is occupied by one buffer and you want to split the - window to bring up a second buffer, perform the following steps: - * Select `Files' => `Split Window'; this will produce two windows - each of which holds the original buffer (these are not copies, but - rather different views of the same buffer contents) - - * With the focus in one of the windows, select the desired buffer - from the `Buffers' menu - - To exit from Glide, choose `Files' => `Exit'. - -  - File: gnat_ug_vxw.info, Node: The GNAT Compilation Model, Next: Compiling Using gcc, Prev: Getting Started with GNAT, Up: Top - - The GNAT Compilation Model - ************************** - - * Menu: - - * Source Representation:: - * Foreign Language Representation:: - * File Naming Rules:: - * Using Other File Names:: - * Alternative File Naming Schemes:: - * Generating Object Files:: - * Source Dependencies:: - * The Ada Library Information Files:: - * Binding an Ada Program:: - * Mixed Language Programming:: - * Building Mixed Ada & C++ Programs:: - * Comparison between GNAT and C/C++ Compilation Models:: - * Comparison between GNAT and Conventional Ada Library Models:: - - This chapter describes the compilation model used by GNAT. Although - similar to that used by other languages, such as C and C++, this model - is substantially different from the traditional Ada compilation models, - which are based on a library. The model is initially described without - reference to the library-based model. If you have not previously used an - Ada compiler, you need only read the first part of this chapter. The - last section describes and discusses the differences between the GNAT - model and the traditional Ada compiler models. If you have used other - Ada compilers, this section will help you to understand those - differences, and the advantages of the GNAT model. - -  - File: gnat_ug_vxw.info, Node: Source Representation, Next: Foreign Language Representation, Up: The GNAT Compilation Model - - Source Representation - ===================== - - Ada source programs are represented in standard text files, using - Latin-1 coding. Latin-1 is an 8-bit code that includes the familiar - 7-bit ASCII set, plus additional characters used for representing - foreign languages (*note Foreign Language Representation:: for support - of non-USA character sets). The format effector characters are - represented using their standard ASCII encodings, as follows: - - `VT' - Vertical tab, `16#0B#' - - `HT' - Horizontal tab, `16#09#' - - `CR' - Carriage return, `16#0D#' - - `LF' - Line feed, `16#0A#' - - `FF' - Form feed, `16#0C#' - - Source files are in standard text file format. In addition, GNAT will - recognize a wide variety of stream formats, in which the end of physical - physical lines is marked by any of the following sequences: `LF', `CR', - `CR-LF', or `LF-CR'. This is useful in accommodating files that are - imported from other operating systems. - - The end of a source file is normally represented by the physical end - of file. However, the control character `16#1A#' (`SUB') is also - recognized as signalling the end of the source file. Again, this is - provided for compatibility with other operating systems where this code - is used to represent the end of file. - - Each file contains a single Ada compilation unit, including any - pragmas associated with the unit. For example, this means you must - place a package declaration (a package "spec") and the corresponding - body in separate files. An Ada "compilation" (which is a sequence of - compilation units) is represented using a sequence of files. Similarly, - you will place each subunit or child unit in a separate file. - -  - File: gnat_ug_vxw.info, Node: Foreign Language Representation, Next: File Naming Rules, Prev: Source Representation, Up: The GNAT Compilation Model - - Foreign Language Representation - =============================== - - GNAT supports the standard character sets defined in Ada 95 as well as - several other non-standard character sets for use in localized versions - of the compiler (*note Character Set Control::). - - * Menu: - - * Latin-1:: - * Other 8-Bit Codes:: - * Wide Character Encodings:: - -  - File: gnat_ug_vxw.info, Node: Latin-1, Next: Other 8-Bit Codes, Up: Foreign Language Representation - - Latin-1 - ------- - - The basic character set is Latin-1. This character set is defined by ISO - standard 8859, part 1. The lower half (character codes `16#00#' ... - `16#7F#)' is identical to standard ASCII coding, but the upper half is - used to represent additional characters. These include extended letters - used by European languages, such as French accents, the vowels with - umlauts used in German, and the extra letter A-ring used in Swedish. - - For a complete list of Latin-1 codes and their encodings, see the - source file of library unit `Ada.Characters.Latin_1' in file - `a-chlat1.ads'. You may use any of these extended characters freely in - character or string literals. In addition, the extended characters that - represent letters can be used in identifiers. - -  - File: gnat_ug_vxw.info, Node: Other 8-Bit Codes, Next: Wide Character Encodings, Prev: Latin-1, Up: Foreign Language Representation - - Other 8-Bit Codes - ----------------- - - GNAT also supports several other 8-bit coding schemes: - - Latin-2 - Latin-2 letters allowed in identifiers, with uppercase and - lowercase equivalence. - - Latin-3 - Latin-3 letters allowed in identifiers, with uppercase and - lowercase equivalence. - - Latin-4 - Latin-4 letters allowed in identifiers, with uppercase and - lowercase equivalence. - - Latin-5 - Latin-4 letters (Cyrillic) allowed in identifiers, with uppercase - and lowercase equivalence. - - IBM PC (code page 437) - This code page is the normal default for PCs in the U.S. It - corresponds to the original IBM PC character set. This set has - some, but not all, of the extended Latin-1 letters, but these - letters do not have the same encoding as Latin-1. In this mode, - these letters are allowed in identifiers with uppercase and - lowercase equivalence. - - IBM PC (code page 850) - This code page is a modification of 437 extended to include all the - Latin-1 letters, but still not with the usual Latin-1 encoding. In - this mode, all these letters are allowed in identifiers with - uppercase and lowercase equivalence. - - Full Upper 8-bit - Any character in the range 80-FF allowed in identifiers, and all - are considered distinct. In other words, there are no uppercase - and lowercase equivalences in this range. This is useful in - conjunction with certain encoding schemes used for some foreign - character sets (e.g. the typical method of representing Chinese - characters on the PC). - - No Upper-Half - No upper-half characters in the range 80-FF are allowed in - identifiers. This gives Ada 83 compatibility for identifier names. - - For precise data on the encodings permitted, and the uppercase and - lowercase equivalences that are recognized, see the file `csets.adb' in - the GNAT compiler sources. You will need to obtain a full source release - of GNAT to obtain this file. - -  - File: gnat_ug_vxw.info, Node: Wide Character Encodings, Prev: Other 8-Bit Codes, Up: Foreign Language Representation - - Wide Character Encodings - ------------------------ - - GNAT allows wide character codes to appear in character and string - literals, and also optionally in identifiers, by means of the following - possible encoding schemes: - - Hex Coding - In this encoding, a wide character is represented by the following - five character sequence: - - ESC a b c d - - Where `a', `b', `c', `d' are the four hexadecimal characters - (using uppercase letters) of the wide character code. For example, - ESC A345 is used to represent the wide character with code - `16#A345#'. This scheme is compatible with use of the full - Wide_Character set. - - Upper-Half Coding - The wide character with encoding `16#abcd#' where the upper bit is - on (in other words, "a" is in the range 8-F) is represented as two - bytes, `16#ab#' and `16#cd#'. The second byte cannot be a format - control character, but is not required to be in the upper half. - This method can be also used for shift-JIS or EUC, where the - internal coding matches the external coding. - - Shift JIS Coding - A wide character is represented by a two-character sequence, - `16#ab#' and `16#cd#', with the restrictions described for - upper-half encoding as described above. The internal character - code is the corresponding JIS character according to the standard - algorithm for Shift-JIS conversion. Only characters defined in the - JIS code set table can be used with this encoding method. - - EUC Coding - A wide character is represented by a two-character sequence - `16#ab#' and `16#cd#', with both characters being in the upper - half. The internal character code is the corresponding JIS - character according to the EUC encoding algorithm. Only characters - defined in the JIS code set table can be used with this encoding - method. - - UTF-8 Coding - A wide character is represented using UCS Transformation Format 8 - (UTF-8) as defined in Annex R of ISO 10646-1/Am.2. Depending on - the character value, the representation is a one, two, or three - byte sequence: - 16#0000#-16#007f#: 2#0xxxxxxx# - 16#0080#-16#07ff#: 2#110xxxxx# 2#10xxxxxx# - 16#0800#-16#ffff#: 2#1110xxxx# 2#10xxxxxx# 2#10xxxxxx# - - where the xxx bits correspond to the left-padded bits of the - 16-bit character value. Note that all lower half ASCII characters - are represented as ASCII bytes and all upper half characters and - other wide characters are represented as sequences of upper-half - (The full UTF-8 scheme allows for encoding 31-bit characters as - 6-byte sequences, but in this implementation, all UTF-8 sequences - of four or more bytes length will be treated as illegal). - - Brackets Coding - In this encoding, a wide character is represented by the following - eight character sequence: - - [ " a b c d " ] - - Where `a', `b', `c', `d' are the four hexadecimal characters - (using uppercase letters) of the wide character code. For example, - ["A345"] is used to represent the wide character with code - `16#A345#'. It is also possible (though not required) to use the - Brackets coding for upper half characters. For example, the code - `16#A3#' can be represented as `["A3"]'. - - This scheme is compatible with use of the full Wide_Character set, - and is also the method used for wide character encoding in the - standard ACVC (Ada Compiler Validation Capability) test suite - distributions. - - Note: Some of these coding schemes do not permit the full use of the - Ada 95 character set. For example, neither Shift JIS, nor EUC allow the - use of the upper half of the Latin-1 set. - -  - File: gnat_ug_vxw.info, Node: File Naming Rules, Next: Using Other File Names, Prev: Foreign Language Representation, Up: The GNAT Compilation Model - - File Naming Rules - ================= - - The default file name is determined by the name of the unit that the - file contains. The name is formed by taking the full expanded name of - the unit and replacing the separating dots with hyphens and using - lowercase for all letters. - - An exception arises if the file name generated by the above rules - starts with one of the characters a,g,i, or s, and the second character - is a minus. In this case, the character tilde is used in place of the - minus. The reason for this special rule is to avoid clashes with the - standard names for child units of the packages System, Ada, Interfaces, - and GNAT, which use the prefixes s- a- i- and g- respectively. - - The file extension is `.ads' for a spec and `.adb' for a body. The - following list shows some examples of these rules. - - `main.ads' - Main (spec) - - `main.adb' - Main (body) - - `arith_functions.ads' - Arith_Functions (package spec) - - `arith_functions.adb' - Arith_Functions (package body) - - `func-spec.ads' - Func.Spec (child package spec) - - `func-spec.adb' - Func.Spec (child package body) - - `main-sub.adb' - Sub (subunit of Main) - - `a~bad.adb' - A.Bad (child package body) - - Following these rules can result in excessively long file names if - corresponding unit names are long (for example, if child units or - subunits are heavily nested). An option is available to shorten such - long file names (called file name "krunching"). This may be - particularly useful when programs being developed with GNAT are to be - used on operating systems with limited file name lengths. *Note Using - gnatkr::. - - Of course, no file shortening algorithm can guarantee uniqueness over - all possible unit names; if file name krunching is used, it is your - responsibility to ensure no name clashes occur. Alternatively you can - specify the exact file names that you want used, as described in the - next section. Finally, if your Ada programs are migrating from a - compiler with a different naming convention, you can use the gnatchop - utility to produce source files that follow the GNAT naming conventions. - (For details *note Renaming Files Using gnatchop::.) - -  - File: gnat_ug_vxw.info, Node: Using Other File Names, Next: Alternative File Naming Schemes, Prev: File Naming Rules, Up: The GNAT Compilation Model - - Using Other File Names - ====================== - - In the previous section, we have described the default rules used by - GNAT to determine the file name in which a given unit resides. It is - often convenient to follow these default rules, and if you follow them, - the compiler knows without being explicitly told where to find all the - files it needs. - - However, in some cases, particularly when a program is imported from - another Ada compiler environment, it may be more convenient for the - programmer to specify which file names contain which units. GNAT allows - arbitrary file names to be used by means of the Source_File_Name pragma. - The form of this pragma is as shown in the following examples: - - pragma Source_File_Name (My_Utilities.Stacks, - Spec_File_Name => "myutilst_a.ada"); - pragma Source_File_name (My_Utilities.Stacks, - Body_File_Name => "myutilst.ada"); - - As shown in this example, the first argument for the pragma is the unit - name (in this example a child unit). The second argument has the form - of a named association. The identifier indicates whether the file name - is for a spec or a body; the file name itself is given by a string - literal. - - The source file name pragma is a configuration pragma, which means - that normally it will be placed in the `gnat.adc' file used to hold - configuration pragmas that apply to a complete compilation environment. - For more details on how the `gnat.adc' file is created and used *note - Handling of Configuration Pragmas:: - - GNAT allows completely arbitrary file names to be specified using the - source file name pragma. However, if the file name specified has an - extension other than `.ads' or `.adb' it is necessary to use a special - syntax when compiling the file. The name in this case must be preceded - by the special sequence `-x' followed by a space and the name of the - language, here `ada', as in: - - $ gcc -c -x ada peculiar_file_name.sim - - `gnatmake' handles non-standard file names in the usual manner (the - non-standard file name for the main program is simply used as the - argument to gnatmake). Note that if the extension is also non-standard, - then it must be included in the gnatmake command, it may not be omitted. - -  - File: gnat_ug_vxw.info, Node: Alternative File Naming Schemes, Next: Generating Object Files, Prev: Using Other File Names, Up: The GNAT Compilation Model - - Alternative File Naming Schemes - =============================== - - In the previous section, we described the use of the - `Source_File_Name' pragma to allow arbitrary names to be assigned to - individual source files. However, this approach requires one pragma - for each file, and especially in large systems can result in very long - `gnat.adc' files, and also create a maintenance problem. - - GNAT also provides a facility for specifying systematic file naming - schemes other than the standard default naming scheme previously - described. An alternative scheme for naming is specified by the use of - `Source_File_Name' pragmas having the following format: - - pragma Source_File_Name ( - Spec_File_Name => FILE_NAME_PATTERN - [,Casing => CASING_SPEC] - [,Dot_Replacement => STRING_LITERAL]); - - pragma Source_File_Name ( - Body_File_Name => FILE_NAME_PATTERN - [,Casing => CASING_SPEC] - [,Dot_Replacement => STRING_LITERAL]); - - pragma Source_File_Name ( - Subunit_File_Name => FILE_NAME_PATTERN - [,Casing => CASING_SPEC] - [,Dot_Replacement => STRING_LITERAL]); - - FILE_NAME_PATTERN ::= STRING_LITERAL - CASING_SPEC ::= Lowercase | Uppercase | Mixedcase - - The `FILE_NAME_PATTERN' string shows how the file name is constructed. - It contains a single asterisk character, and the unit name is - substituted systematically for this asterisk. The optional parameter - `Casing' indicates whether the unit name is to be all upper-case - letters, all lower-case letters, or mixed-case. If no `Casing' - parameter is used, then the default is all lower-case. - - The optional `Dot_Replacement' string is used to replace any periods - that occur in subunit or child unit names. If no `Dot_Replacement' - argument is used then separating dots appear unchanged in the resulting - file name. Although the above syntax indicates that the `Casing' - argument must appear before the `Dot_Replacement' argument, but it is - also permissible to write these arguments in the opposite order. - - As indicated, it is possible to specify different naming schemes for - bodies, specs, and subunits. Quite often the rule for subunits is the - same as the rule for bodies, in which case, there is no need to give a - separate `Subunit_File_Name' rule, and in this case the - `Body_File_name' rule is used for subunits as well. - - The separate rule for subunits can also be used to implement the - rather unusual case of a compilation environment (e.g. a single - directory) which contains a subunit and a child unit with the same unit - name. Although both units cannot appear in the same partition, the Ada - Reference Manual allows (but does not require) the possibility of the - two units coexisting in the same environment. - - The file name translation works in the following steps: - - * If there is a specific `Source_File_Name' pragma for the given - unit, then this is always used, and any general pattern rules are - ignored. - - * If there is a pattern type `Source_File_Name' pragma that applies - to the unit, then the resulting file name will be used if the file - exists. If more than one pattern matches, the latest one will be - tried first, and the first attempt resulting in a reference to a - file that exists will be used. - - * If no pattern type `Source_File_Name' pragma that applies to the - unit for which the corresponding file exists, then the standard - GNAT default naming rules are used. - - - As an example of the use of this mechanism, consider a commonly used - scheme in which file names are all lower case, with separating periods - copied unchanged to the resulting file name, and specs end with - ".1.ada", and bodies end with ".2.ada". GNAT will follow this scheme if - the following two pragmas appear: - - pragma Source_File_Name - (Spec_File_Name => "*.1.ada"); - pragma Source_File_Name - (Body_File_Name => "*.2.ada"); - - The default GNAT scheme is actually implemented by providing the - following default pragmas internally: - - pragma Source_File_Name - (Spec_File_Name => "*.ads", Dot_Replacement => "-"); - pragma Source_File_Name - (Body_File_Name => "*.adb", Dot_Replacement => "-"); - - Our final example implements a scheme typically used with one of the - Ada 83 compilers, where the separator character for subunits was "__" - (two underscores), specs were identified by adding `_.ADA', bodies by - adding `.ADA', and subunits by adding `.SEP'. All file names were upper - case. Child units were not present of course since this was an Ada 83 - compiler, but it seems reasonable to extend this scheme to use the same - double underscore separator for child units. - - pragma Source_File_Name - (Spec_File_Name => "*_.ADA", - Dot_Replacement => "__", - Casing = Uppercase); - pragma Source_File_Name - (Body_File_Name => "*.ADA", - Dot_Replacement => "__", - Casing = Uppercase); - pragma Source_File_Name - (Subunit_File_Name => "*.SEP", - Dot_Replacement => "__", - Casing = Uppercase); - -  - File: gnat_ug_vxw.info, Node: Generating Object Files, Next: Source Dependencies, Prev: Alternative File Naming Schemes, Up: The GNAT Compilation Model - - Generating Object Files - ======================= - - An Ada program consists of a set of source files, and the first step in - compiling the program is to generate the corresponding object files. - These are generated by compiling a subset of these source files. The - files you need to compile are the following: - - * If a package spec has no body, compile the package spec to produce - the object file for the package. - - * If a package has both a spec and a body, compile the body to - produce the object file for the package. The source file for the - package spec need not be compiled in this case because there is - only one object file, which contains the code for both the spec - and body of the package. - - * For a subprogram, compile the subprogram body to produce the - object file for the subprogram. The spec, if one is present, is as - usual in a separate file, and need not be compiled. - - * In the case of subunits, only compile the parent unit. A single - object file is generated for the entire subunit tree, which - includes all the subunits. - - * Compile child units independently of their parent units (though, - of course, the spec of all the ancestor unit must be present in - order to compile a child unit). - - * Compile generic units in the same manner as any other units. The - object files in this case are small dummy files that contain at - most the flag used for elaboration checking. This is because GNAT - always handles generic instantiation by means of macro expansion. - However, it is still necessary to compile generic units, for - dependency checking and elaboration purposes. - - The preceding rules describe the set of files that must be compiled to - generate the object files for a program. Each object file has the same - name as the corresponding source file, except that the extension is - `.o' as usual. - - You may wish to compile other files for the purpose of checking their - syntactic and semantic correctness. For example, in the case where a - package has a separate spec and body, you would not normally compile the - spec. However, it is convenient in practice to compile the spec to make - sure it is error-free before compiling clients of this spec, because - such compilations will fail if there is an error in the spec. - - GNAT provides an option for compiling such files purely for the - purposes of checking correctness; such compilations are not required as - part of the process of building a program. To compile a file in this - checking mode, use the `-gnatc' switch. - -  - File: gnat_ug_vxw.info, Node: Source Dependencies, Next: The Ada Library Information Files, Prev: Generating Object Files, Up: The GNAT Compilation Model - - Source Dependencies - =================== - - A given object file clearly depends on the source file which is compiled - to produce it. Here we are using "depends" in the sense of a typical - `make' utility; in other words, an object file depends on a source file - if changes to the source file require the object file to be recompiled. - In addition to this basic dependency, a given object may depend on - additional source files as follows: - - * If a file being compiled `with''s a unit X, the object file - depends on the file containing the spec of unit X. This includes - files that are `with''ed implicitly either because they are parents - of `with''ed child units or they are run-time units required by the - language constructs used in a particular unit. - - * If a file being compiled instantiates a library level generic - unit, the object file depends on both the spec and body files for - this generic unit. - - * If a file being compiled instantiates a generic unit defined - within a package, the object file depends on the body file for the - package as well as the spec file. - - * If a file being compiled contains a call to a subprogram for which - pragma `Inline' applies and inlining is activated with the - `-gnatn' switch, the object file depends on the file containing the - body of this subprogram as well as on the file containing the - spec. Note that for inlining to actually occur as a result of the - use of this switch, it is necessary to compile in optimizing mode. - - The use of `-gnatN' activates a more extensive inlining - optimization that is performed by the front end of the compiler. - This inlining does not require that the code generation be - optimized. Like `-gnatn', the use of this switch generates - additional dependencies. - - * If an object file O depends on the proper body of a subunit - through inlining or instantiation, it depends on the parent unit - of the subunit. This means that any modification of the parent - unit or one of its subunits affects the compilation of O. - - * The object file for a parent unit depends on all its subunit body - files. - - * The previous two rules meant that for purposes of computing - dependencies and recompilation, a body and all its subunits are - treated as an indivisible whole. - - These rules are applied transitively: if unit `A' `with''s unit - `B', whose elaboration calls an inlined procedure in package `C', - the object file for unit `A' will depend on the body of `C', in - file `c.adb'. - - The set of dependent files described by these rules includes all - the files on which the unit is semantically dependent, as - described in the Ada 95 Language Reference Manual. However, it is - a superset of what the ARM describes, because it includes generic, - inline, and subunit dependencies. - - An object file must be recreated by recompiling the corresponding - source file if any of the source files on which it depends are - modified. For example, if the `make' utility is used to control - compilation, the rule for an Ada object file must mention all the - source files on which the object file depends, according to the - above definition. The determination of the necessary - recompilations is done automatically when one uses `gnatmake'. - -  - File: gnat_ug_vxw.info, Node: The Ada Library Information Files, Next: Binding an Ada Program, Prev: Source Dependencies, Up: The GNAT Compilation Model - - The Ada Library Information Files - ================================= - - Each compilation actually generates two output files. The first of these - is the normal object file that has a `.o' extension. The second is a - text file containing full dependency information. It has the same name - as the source file, but an `.ali' extension. This file is known as the - Ada Library Information (`ali') file. The following information is - contained in the `ali' file. - - * Version information (indicates which version of GNAT was used to - compile the unit(s) in question) - - * Main program information (including priority and time slice - settings, as well as the wide character encoding used during - compilation). - - * List of arguments used in the `gcc' command for the compilation - - * Attributes of the unit, including configuration pragmas used, an - indication of whether the compilation was successful, exception - model used etc. - - * A list of relevant restrictions applying to the unit (used for - consistency) checking. - - * Categorization information (e.g. use of pragma `Pure'). - - * Information on all `with''ed units, including presence of - `Elaborate' or `Elaborate_All' pragmas. - - * Information from any `Linker_Options' pragmas used in the unit - - * Information on the use of `Body_Version' or `Version' attributes - in the unit. - - * Dependency information. This is a list of files, together with - time stamp and checksum information. These are files on which the - unit depends in the sense that recompilation is required if any of - these units are modified. - - * Cross-reference data. Contains information on all entities - referenced in the unit. Used by tools like `gnatxref' and - `gnatfind' to provide cross-reference information. - - - For a full detailed description of the format of the `ali' file, see - the source of the body of unit `Lib.Writ', contained in file - `lib-writ.adb' in the GNAT compiler sources. - -  - File: gnat_ug_vxw.info, Node: Binding an Ada Program, Next: Mixed Language Programming, Prev: The Ada Library Information Files, Up: The GNAT Compilation Model - - Binding an Ada Program - ====================== - - When using languages such as C and C++, once the source files have been - compiled the only remaining step in building an executable program is - linking the object modules together. This means that it is possible to - link an inconsistent version of a program, in which two units have - included different versions of the same header. - - The rules of Ada do not permit such an inconsistent program to be - built. For example, if two clients have different versions of the same - package, it is illegal to build a program containing these two clients. - These rules are enforced by the GNAT binder, which also determines an - elaboration order consistent with the Ada rules. - - The GNAT binder is run after all the object files for a program have - been created. It is given the name of the main program unit, and from - this it determines the set of units required by the program, by reading - the corresponding ALI files. It generates error messages if the program - is inconsistent or if no valid order of elaboration exists. - - If no errors are detected, the binder produces a main program, in - Ada by default, that contains calls to the elaboration procedures of - those compilation unit that require them, followed by a call to the - main program. This Ada program is compiled to generate the object file - for the main program. The name of the Ada file is `b~XXX.adb' (with the - corresponding spec `b~XXX.ads') where XXX is the name of the main - program unit. - - Finally, the linker is used to build the resulting executable - program, using the object from the main program from the bind step as - well as the object files for the Ada units of the program. - -  - File: gnat_ug_vxw.info, Node: Mixed Language Programming, Next: Building Mixed Ada & C++ Programs, Prev: Binding an Ada Program, Up: The GNAT Compilation Model - - Mixed Language Programming - ========================== - - * Menu: - - * Interfacing to C:: - * Calling Conventions:: - -  - File: gnat_ug_vxw.info, Node: Interfacing to C, Next: Calling Conventions, Up: Mixed Language Programming - - Interfacing to C - ---------------- - - There are two ways to build a program that contains some Ada files and - some other language files depending on whether the main program is in - Ada or not. If the main program is in Ada, you should proceed as - follows: - - 1. Compile the other language files to generate object files. For - instance: - gcc -c file1.c - gcc -c file2.c - - 2. Compile the Ada units to produce a set of object files and ALI - files. For instance: - gnatmake -c my_main.adb - - 3. Run the Ada binder on the Ada main program. For instance: - gnatbind my_main.ali - - 4. Link the Ada main program, the Ada objects and the other language - objects. For instance: - gnatlink my_main.ali file1.o file2.o - - The three last steps can be grouped in a single command: - gnatmake my_main.adb -largs file1.o file2.o - - If the main program is in some language other than Ada, Then you may - have more than one entry point in the Ada subsystem. You must use a - special option of the binder to generate callable routines to initialize - and finalize the Ada units (*note Binding with Non-Ada Main Programs::). - Calls to the initialization and finalization routines must be inserted - in the main program, or some other appropriate point in the code. The - call to initialize the Ada units must occur before the first Ada - subprogram is called, and the call to finalize the Ada units must occur - after the last Ada subprogram returns. You use the same procedure for - building the program as described previously. In this case, however, - the binder only places the initialization and finalization subprograms - into file `b~XXX.adb' instead of the main program. So, if the main - program is not in Ada, you should proceed as follows: - - 1. Compile the other language files to generate object files. For - instance: - gcc -c file1.c - gcc -c file2.c - - 2. Compile the Ada units to produce a set of object files and ALI - files. For instance: - gnatmake -c entry_point1.adb - gnatmake -c entry_point2.adb - - 3. Run the Ada binder on the Ada main program. For instance: - gnatbind -n entry_point1.ali entry_point2.ali - - 4. Link the Ada main program, the Ada objects and the other language - objects. You only need to give the last entry point here. For - instance: - gnatlink entry_point2.ali file1.o file2.o - -  - File: gnat_ug_vxw.info, Node: Calling Conventions, Prev: Interfacing to C, Up: Mixed Language Programming - - Calling Conventions - ------------------- - - GNAT follows standard calling sequence conventions and will thus - interface to any other language that also follows these conventions. - The following Convention identifiers are recognized by GNAT: - - * Ada. This indicates that the standard Ada calling sequence will be - used and all Ada data items may be passed without any limitations - in the case where GNAT is used to generate both the caller and - callee. It is also possible to mix GNAT generated code and code - generated by another Ada compiler. In this case, the data types - should be restricted to simple cases, including primitive types. - Whether complex data types can be passed depends on the situation. - Probably it is safe to pass simple arrays, such as arrays of - integers or floats. Records may or may not work, depending on - whether both compilers lay them out identically. Complex structures - involving variant records, access parameters, tasks, or protected - types, are unlikely to be able to be passed. - - Note that in the case of GNAT running on a platform that supports - DEC Ada 83, a higher degree of compatibility can be guaranteed, - and in particular records are layed out in an identical manner in - the two compilers. Note also that if output from two different - compilers is mixed, the program is responsible for dealing with - elaboration issues. Probably the safest approach is to write the - main program in the version of Ada other than GNAT, so that it - takes care of its own elaboration requirements, and then call the - GNAT-generated adainit procedure to ensure elaboration of the GNAT - components. Consult the documentation of the other Ada compiler - for further details on elaboration. - - However, it is not possible to mix the tasking run time of GNAT and - DEC Ada 83, All the tasking operations must either be entirely - within GNAT compiled sections of the program, or entirely within - DEC Ada 83 compiled sections of the program. - - * Assembler. Specifies assembler as the convention. In practice this - has the same effect as convention Ada (but is not equivalent in - the sense of being considered the same convention). - - * Asm. Equivalent to Assembler. - - * Asm. Equivalent to Assembly. - - * COBOL. Data will be passed according to the conventions described - in section B.4 of the Ada 95 Reference Manual. - - * C. Data will be passed according to the conventions described in - section B.3 of the Ada 95 Reference Manual. - - * Default. Equivalent to C. - - * External. Equivalent to C. - - * CPP. This stands for C++. For most purposes this is identical to C. - See the separate description of the specialized GNAT pragmas - relating to C++ interfacing for further details. - - * Fortran. Data will be passed according to the conventions described - in section B.5 of the Ada 95 Reference Manual. - - * Intrinsic. This applies to an intrinsic operation, as defined in - the Ada 95 Reference Manual. If a a pragma Import (Intrinsic) - applies to a subprogram, this means that the body of the - subprogram is provided by the compiler itself, usually by means of - an efficient code sequence, and that the user does not supply an - explicit body for it. In an application program, the pragma can - only be applied to the following two sets of names, which the GNAT - compiler recognizes. - * Rotate_Left, Rotate_Right, Shift_Left, Shift_Right, - Shift_Right_- Arithmetic. The corresponding subprogram - declaration must have two formal parameters. The first one - must be a signed integer type or a modular type with a binary - modulus, and the second parameter must be of type Natural. - The return type must be the same as the type of the first - argument. The size of this type can only be 8, 16, 32, or 64. - - * binary arithmetic operators: "+", "-", "*", "/" The - corresponding operator declaration must have parameters and - result type that have the same root numeric type (for - example, all three are long_float types). This simplifies the - definition of operations that use type checking to perform - dimensional checks: - type Distance is new Long_Float; - type Time is new Long_Float; - type Velocity is new Long_Float; - function "/" (D : Distance; T : Time) - return Velocity; - pragma Import (Intrinsic, "/"); - - This common idiom is often programmed with a generic - definition and an explicit body. The pragma makes it simpler - to introduce such declarations. It incurs no overhead in - compilation time or code size, because it is implemented as a - single machine instruction. - - * Stdcall. This is relevant only to NT/Win95 implementations of GNAT, - and specifies that the Stdcall calling sequence will be used, as - defined by the NT API. - - * DLL. This is equivalent to Stdcall. - - * Win32. This is equivalent to Stdcall. - - * Stubbed. This is a special convention that indicates that the - compiler should provide a stub body that raises `Program_Error'. - - GNAT additionally provides a useful pragma `Convention_Identifier' that - can be used to parametrize conventions and allow additional synonyms to - be specified. For example if you have legacy code in which the - convention identifier Fortran77 was used for Fortran, you can use the - configuration pragma: - - pragma Convention_Identifier (Fortran77, Fortran); - - And from now on the identifier Fortran77 may be used as a convention - identifier (for example in an `Import' pragma) with the same meaning as - Fortran. - -  - File: gnat_ug_vxw.info, Node: Building Mixed Ada & C++ Programs, Next: Comparison between GNAT and C/C++ Compilation Models, Prev: Mixed Language Programming, Up: The GNAT Compilation Model - - Building Mixed Ada & C++ Programs - ================================= - - Building a mixed application containing both Ada and C++ code may be a - challenge for the unaware programmer. As a matter of fact, this - interfacing has not been standardized in the Ada 95 reference manual due - to the immaturity and lack of standard of C++ at the time. This section - gives a few hints that should make this task easier. In particular the - first section addresses the differences with interfacing with C. The - second section looks into the delicate problem of linking the complete - application from its Ada and C++ parts. The last section give some - hints on how the GNAT run time can be adapted in order to allow - inter-language dispatching with a new C++ compiler. - - * Menu: - - * Interfacing to C++:: - * Linking a Mixed C++ & Ada Program:: - * A Simple Example:: - * Adapting the Run Time to a New C++ Compiler:: - -  - File: gnat_ug_vxw.info, Node: Interfacing to C++, Next: Linking a Mixed C++ & Ada Program, Up: Building Mixed Ada & C++ Programs - - Interfacing to C++ - ------------------ - - GNAT supports interfacing with C++ compilers generating code that is - compatible with the standard Application Binary Interface of the given - platform. - - Interfacing can be done at 3 levels: simple data, subprograms and - classes. In the first 2 cases, GNAT offer a specific CONVENTION CPP - that behaves exactly like CONVENTION C. Usually C++ mangle names of - subprograms and currently GNAT does not provide any help to solve the - demangling problem. This problem can be addressed in 2 ways: - * by modifying the C++ code in order to force a C convention using - the EXTERN "C" syntax. - - * by figuring out the mangled name and use it as the Link_Name - argument of the pragma import. - - Interfacing at the class level can be achieved by using the GNAT - specific pragmas such as `CPP_Class' and `CPP_Virtual'. See the GNAT - Reference Manual for additional information. - -  - File: gnat_ug_vxw.info, Node: Linking a Mixed C++ & Ada Program, Next: A Simple Example, Prev: Interfacing to C++, Up: Building Mixed Ada & C++ Programs - - Linking a Mixed C++ & Ada Program - --------------------------------- - - Usually the linker of the C++ development system must be used to link - mixed applications because most C++ systems will resolve elaboration - issues (such as calling constructors on global class instances) - transparently during the link phase. GNAT has been adapted to ease the - use of a foreign linker for the last phase. Three cases can be - considered: - 1. Using GNAT and G++ (GNU C++ compiler) from the same GCC - installation. The c++ linker can simply be called by using the c++ - specific driver called `c++'. Note that this setup is not very - common because it may request recompiling the whole GCC tree from - sources and it does not allow to upgrade easily to a new version - of one compiler for one of the two languages without taking the - risk of destabilizing the other. - - $ c++ -c file1.C - $ c++ -c file2.C - $ gnatmake ada_unit -largs file1.o file2.o --LINK=c++ - - 2. Using GNAT and G++ from 2 different GCC installations. If both - compilers are on the PATH, the same method can be used. It is - important to be aware that environment variables such as - C_INCLUDE_PATH, GCC_EXEC_PREFIX, BINUTILS_ROOT or GCC_ROOT will - affect both compilers at the same time and thus may make one of - the 2 compilers operate improperly if they are set for the other. - In particular it is important that the link command has access to - the proper gcc library `libgcc.a', that is to say the one that is - part of the C++ compiler installation. The implicit link command - as suggested in the gnatmake command from the former example can - be replaced by an explicit link command with full verbosity in - order to verify which library is used: - $ gnatbind ada_unit - $ gnatlink -v -v ada_unit file1.o file2.o --LINK=c++ - If there is a problem due to interfering environment variables, it - can be workaround by using an intermediate script. The following - example shows the proper script to use when GNAT has not been - installed at its default location and g++ has been installed at - its default location: - - $ gnatlink -v -v ada_unit file1.o file2.o --LINK=./my_script - $ cat ./my_script - #!/bin/sh - unset BINUTILS_ROOT - unset GCC_ROOT - c++ $* - - 3. Using a non GNU C++ compiler. The same set of command as previously - described can be used to insure that the c++ linker is used. - Nonetheless, you need to add the path to libgcc explicitely, since - some libraries needed by GNAT are located in this directory: - - - $ gnatlink ada_unit file1.o file2.o --LINK=./my_script - $ cat ./my_script - #!/bin/sh - CC $* `gcc -print-libgcc-file-name` - - Where CC is the name of the non GNU C++ compiler. - - -  - File: gnat_ug_vxw.info, Node: A Simple Example, Next: Adapting the Run Time to a New C++ Compiler, Prev: Linking a Mixed C++ & Ada Program, Up: Building Mixed Ada & C++ Programs - - A Simple Example - ---------------- - - The following example, provided as part of the GNAT examples, show how - to achieve procedural interfacing between Ada and C++ in both - directions. The C++ class A has 2 methods. The first method is exported - to Ada by the means of an extern C wrapper function. The second method - calls an Ada subprogram. On the Ada side, The C++ calls is modelized by - a limited record with a layout comparable to the C++ class. The Ada - subprogram, in turn, calls the c++ method. So from the C++ main program - the code goes back and forth between the 2 languages. - - Here are the compilation commands for a GNAT VxWorks/PowerPC - configuration: - $ powerpc-wrs-vxworks-gnatmake -c simple_cpp_interface - $ powerpc-wrs-vxworks-gnatbind -n simple_cpp_interface - $ gnatlink simple_cpp_interface -o ada_part - $ c++ppc -c -DCPU=PPC604 -I/usr/windppc/target/h cpp_main.C - $ c++ppc -c -DCPU=PPC604 -I/usr/windppc/target/h ex7.C - $ ldppc -r -o my_main my_main.o ex7.o ada_part - - Here are the corresponding sources: - - //cpp_main.C - - #include "ex7.h" - - extern "C" { - void adainit (void); - void adafinal (void); - void method1 (A *t); - } - - void method1 (A *t) - { - t->method1 (); - } - - int main () - { - A obj; - adainit (); - obj.method2 (3030); - adafinal (); - } - - //ex7.h - - class Origin { - public: - int o_value; - }; - class A : public Origin { - public: - void method1 (void); - virtual void method2 (int v); - A(); - int a_value; - }; - - //ex7.C - - #include "ex7.h" - #include - - extern "C" { void ada_method2 (A *t, int v);} - - void A::method1 (void) - { - a_value = 2020; - printf ("in A::method1, a_value = %d \n",a_value); - - } - - void A::method2 (int v) - { - ada_method2 (this, v); - printf ("in A::method2, a_value = %d \n",a_value); - - } - - A::A(void) - { - a_value = 1010; - printf ("in A::A, a_value = %d \n",a_value); - } - - -- Ada sources - package body Simple_Cpp_Interface is - - procedure Ada_Method2 (This : in out A; V : Integer) is - begin - Method1 (This); - This.A_Value := V; - end Ada_Method2; - - end Simple_Cpp_Interface; - - package Simple_Cpp_Interface is - type A is limited - record - O_Value : Integer; - A_Value : Integer; - end record; - pragma Convention (C, A); - - procedure Method1 (This : in out A); - pragma Import (C, Method1); - - procedure Ada_Method2 (This : in out A; V : Integer); - pragma Export (C, Ada_Method2); - - end Simple_Cpp_Interface; - -  - File: gnat_ug_vxw.info, Node: Adapting the Run Time to a New C++ Compiler, Prev: A Simple Example, Up: Building Mixed Ada & C++ Programs - - Adapting the Run Time to a New C++ Compiler - ------------------------------------------- - - GNAT offers the capability to derive Ada 95 tagged types directly from - preexisting C++ classes and . See "Interfacing with C++" in the GNAT - reference manual. The mechanism used by GNAT for achieving such a goal - has been made user configurable through a GNAT library unit - `Interfaces.CPP'. The default version of this file is adapted to the - GNU c++ compiler. Internal knowledge of the virtual table layout used - by the new C++ compiler is needed to configure properly this unit. The - Interface of this unit is known by the compiler and cannot be changed - except for the value of the constants defining the characteristics of - the virtual table: CPP_DT_Prologue_Size, CPP_DT_Entry_Size, - CPP_TSD_Prologue_Size, CPP_TSD_Entry_Size. Read comments in the source - of this unit for more details. - -  - File: gnat_ug_vxw.info, Node: Comparison between GNAT and C/C++ Compilation Models, Next: Comparison between GNAT and Conventional Ada Library Models, Prev: Building Mixed Ada & C++ Programs, Up: The GNAT Compilation Model - - Comparison between GNAT and C/C++ Compilation Models - ==================================================== - - The GNAT model of compilation is close to the C and C++ models. You can - think of Ada specs as corresponding to header files in C. As in C, you - don't need to compile specs; they are compiled when they are used. The - Ada `with' is similar in effect to the `#include' of a C header. - - One notable difference is that, in Ada, you may compile specs - separately to check them for semantic and syntactic accuracy. This is - not always possible with C headers because they are fragments of - programs that have less specific syntactic or semantic rules. - - The other major difference is the requirement for running the binder, - which performs two important functions. First, it checks for - consistency. In C or C++, the only defense against assembling - inconsistent programs lies outside the compiler, in a makefile, for - example. The binder satisfies the Ada requirement that it be impossible - to construct an inconsistent program when the compiler is used in normal - mode. - - The other important function of the binder is to deal with - elaboration issues. There are also elaboration issues in C++ that are - handled automatically. This automatic handling has the advantage of - being simpler to use, but the C++ programmer has no control over - elaboration. Where `gnatbind' might complain there was no valid order - of elaboration, a C++ compiler would simply construct a program that - malfunctioned at run time. - -  - File: gnat_ug_vxw.info, Node: Comparison between GNAT and Conventional Ada Library Models, Prev: Comparison between GNAT and C/C++ Compilation Models, Up: The GNAT Compilation Model - - Comparison between GNAT and Conventional Ada Library Models - =========================================================== - - This section is intended to be useful to Ada programmers who have - previously used an Ada compiler implementing the traditional Ada library - model, as described in the Ada 95 Language Reference Manual. If you - have not used such a system, please go on to the next section. - - In GNAT, there is no "library" in the normal sense. Instead, the set - of source files themselves acts as the library. Compiling Ada programs - does not generate any centralized information, but rather an object - file and a ALI file, which are of interest only to the binder and - linker. In a traditional system, the compiler reads information not - only from the source file being compiled, but also from the centralized - library. This means that the effect of a compilation depends on what - has been previously compiled. In particular: - - * When a unit is `with''ed, the unit seen by the compiler corresponds - to the version of the unit most recently compiled into the library. - - * Inlining is effective only if the necessary body has already been - compiled into the library. - - * Compiling a unit may obsolete other units in the library. - - In GNAT, compiling one unit never affects the compilation of any other - units because the compiler reads only source files. Only changes to - source files can affect the results of a compilation. In particular: - - * When a unit is `with''ed, the unit seen by the compiler corresponds - to the source version of the unit that is currently accessible to - the compiler. - - * Inlining requires the appropriate source files for the package or - subprogram bodies to be available to the compiler. Inlining is - always effective, independent of the order in which units are - complied. - - * Compiling a unit never affects any other compilations. The editing - of sources may cause previous compilations to be out of date if - they depended on the source file being modified. - - The most important result of these differences is that order of - compilation is never significant in GNAT. There is no situation in - which one is required to do one compilation before another. What shows - up as order of compilation requirements in the traditional Ada library - becomes, in GNAT, simple source dependencies; in other words, there is - only a set of rules saying what source files must be present when a - file is compiled. - -  - File: gnat_ug_vxw.info, Node: Compiling Using gcc, Next: Binding Using gnatbind, Prev: The GNAT Compilation Model, Up: Top - - Compiling Using `gcc' - ********************* - - This chapter discusses how to compile Ada programs using the `gcc' - command. It also describes the set of switches that can be used to - control the behavior of the compiler. - - * Menu: - - * Compiling Programs:: - * Switches for gcc:: - * Search Paths and the Run-Time Library (RTL):: - * Order of Compilation Issues:: - * Examples:: - -  - File: gnat_ug_vxw.info, Node: Compiling Programs, Next: Switches for gcc, Up: Compiling Using gcc - - Compiling Programs - ================== - - The first step in creating an executable program is to compile the units - of the program using the `gcc' command. You must compile the following - files: - - * the body file (`.adb') for a library level subprogram or generic - subprogram - - * the spec file (`.ads') for a library level package or generic - package that has no body - - * the body file (`.adb') for a library level package or generic - package that has a body - - - You need _not_ compile the following files - - * the spec of a library unit which has a body - - * subunits - - because they are compiled as part of compiling related units. GNAT - package specs when the corresponding body is compiled, and subunits - when the parent is compiled. If you attempt to compile any of these - files, you will get one of the following error messages (where fff is - the name of the file you compiled): - - No code generated for file FFF (PACKAGE SPEC) - No code generated for file FFF (SUBUNIT) - - The basic command for compiling a file containing an Ada unit is - - $ gcc -c [SWITCHES] `file name' - - where FILE NAME is the name of the Ada file (usually having an extension - `.ads' for a spec or `.adb' for a body). You specify the `-c' switch - to tell `gcc' to compile, but not link, the file. The result of a - successful compilation is an object file, which has the same name as - the source file but an extension of `.o' and an Ada Library Information - (ALI) file, which also has the same name as the source file, but with - `.ali' as the extension. GNAT creates these two output files in the - current directory, but you may specify a source file in any directory - using an absolute or relative path specification containing the - directory information. - - `gcc' is actually a driver program that looks at the extensions of - the file arguments and loads the appropriate compiler. For example, the - GNU C compiler is `cc1', and the Ada compiler is `gnat1'. These - programs are in directories known to the driver program (in some - configurations via environment variables you set), but need not be in - your path. The `gcc' driver also calls the assembler and any other - utilities needed to complete the generation of the required object - files. - - It is possible to supply several file names on the same `gcc' - command. This causes `gcc' to call the appropriate compiler for each - file. For example, the following command lists three separate files to - be compiled: - - $ gcc -c x.adb y.adb z.c - - calls `gnat1' (the Ada compiler) twice to compile `x.adb' and `y.adb', - and `cc1' (the C compiler) once to compile `z.c'. The compiler - generates three object files `x.o', `y.o' and `z.o' and the two ALI - files `x.ali' and `y.ali' from the Ada compilations. Any switches apply - to all the files listed, except for `-gnatX' switches, which apply only - to Ada compilations. - -  - File: gnat_ug_vxw.info, Node: Switches for gcc, Next: Search Paths and the Run-Time Library (RTL), Prev: Compiling Programs, Up: Compiling Using gcc - - Switches for `gcc' - ================== - - The `gcc' command accepts switches that control the compilation - process. These switches are fully described in this section. First we - briefly list all the switches, in alphabetical order, then we describe - the switches in more detail in functionally grouped sections. - - * Menu: - - * Output and Error Message Control:: - * Debugging and Assertion Control:: - * Run-Time Checks:: - * Stack Overflow Checking:: - * Run-Time Control:: - * Validity Checking:: - * Style Checking:: - * Using gcc for Syntax Checking:: - * Using gcc for Semantic Checking:: - * Compiling Ada 83 Programs:: - * Character Set Control:: - * File Naming Control:: - * Subprogram Inlining Control:: - * Auxiliary Output Control:: - * Debugging Control:: - * Units to Sources Mapping Files:: - - `-b TARGET' - Compile your program to run on TARGET, which is the name of a - system configuration. You must have a GNAT cross-compiler built if - TARGET is not the same as your host system. - - `-BDIR' - Load compiler executables (for example, `gnat1', the Ada compiler) - from DIR instead of the default location. Only use this switch - when multiple versions of the GNAT compiler are available. See the - `gcc' manual page for further details. You would normally use the - `-b' or `-V' switch instead. - - `-c' - Compile. Always use this switch when compiling Ada programs. - - Note: for some other languages when using `gcc', notably in the - case of C and C++, it is possible to use use `gcc' without a `-c' - switch to compile and link in one step. In the case of GNAT, you - cannot use this approach, because the binder must be run and `gcc' - cannot be used to run the GNAT binder. - - `-g' - Generate debugging information. This information is stored in the - object file and copied from there to the final executable file by - the linker, where it can be read by the debugger. You must use the - `-g' switch if you plan on using the debugger. - - `-IDIR' - Direct GNAT to search the DIR directory for source files needed by - the current compilation (*note Search Paths and the Run-Time - Library (RTL)::). - - `-I-' - Except for the source file named in the command line, do not look - for source files in the directory containing the source file named - in the command line (*note Search Paths and the Run-Time Library - (RTL)::). - - `-o FILE' - This switch is used in `gcc' to redirect the generated object file - and its associated ALI file. Beware of this switch with GNAT, - because it may cause the object file and ALI file to have - different names which in turn may confuse the binder and the - linker. - - `-O[N]' - N controls the optimization level. - - n = 0 - No optimization, the default setting if no `-O' appears - - n = 1 - Normal optimization, the default if you specify `-O' without - an operand. - - n = 2 - Extensive optimization - - n = 3 - Extensive optimization with automatic inlining. This applies - only to inlining within a unit. For details on control of - inter-unit inlining see *Note Subprogram Inlining Control::. - - `--RTS=RTS-PATH' - Specifies the default location of the runtime library. Same - meaning as the equivalent `gnatmake' flag (see *Note Switches for - gnatmake::). - - `-S' - Used in place of `-c' to cause the assembler source file to be - generated, using `.s' as the extension, instead of the object file. - This may be useful if you need to examine the generated assembly - code. - - `-v' - Show commands generated by the `gcc' driver. Normally used only for - debugging purposes or if you need to be sure what version of the - compiler you are executing. - - `-V VER' - Execute VER version of the compiler. This is the `gcc' version, - not the GNAT version. - - `-gnata' - Assertions enabled. `Pragma Assert' and `pragma Debug' to be - activated. - - `-gnatA' - Avoid processing `gnat.adc'. If a gnat.adc file is present, it - will be ignored. - - `-gnatb' - Generate brief messages to `stderr' even if verbose mode set. - - `-gnatc' - Check syntax and semantics only (no code generation attempted). - - `-gnatC' - Compress debug information and external symbol name table entries. - - `-gnatD' - Output expanded source files for source level debugging. This - switch also suppress generation of cross-reference information - (see -gnatx). - - `-gnatecPATH' - Specify a configuration pragma file. (see *Note The Configuration - Pragmas Files::) - - `-gnatemPATH' - Specify a mapping file. (see *Note Units to Sources Mapping - Files::) - - `-gnatE' - Full dynamic elaboration checks. - - `-gnatf' - Full errors. Multiple errors per line, all undefined references. - - `-gnatF' - Externals names are folded to all uppercase. - - `-gnatg' - Internal GNAT implementation mode. This should not be used for - applications programs, it is intended only for use by the compiler - and its run-time library. For documentation, see the GNAT sources. - - `-gnatG' - List generated expanded code in source form. - - `-gnatiC' - Identifier character set (C=1/2/3/4/8/9/p/f/n/w). - - `-gnath' - Output usage information. The output is written to `stdout'. - - `-gnatkN' - Limit file names to N (1-999) characters (`k' = krunch). - - `-gnatl' - Output full source listing with embedded error messages. - - `-gnatmN' - Limit number of detected errors to N (1-999). - - `-gnatn' - Activate inlining across unit boundaries for subprograms for which - pragma `inline' is specified. - - `-gnatN' - Activate front end inlining. - - `-fno-inline' - Suppresses all inlining, even if other optimization or inlining - switches are set. - - `-fstack-check' - Activates stack checking. See separate section on stack checking - for details of the use of this option. - - `-gnato' - Enable numeric overflow checking (which is not normally enabled by - default). Not that division by zero is a separate check that is not - controlled by this switch (division by zero checking is on by - default). - - `-gnatp' - Suppress all checks. - - `-gnatq' - Don't quit; try semantics, even if parse errors. - - `-gnatQ' - Don't quit; generate `ali' and tree files even if illegalities. - - `-gnatP' - Enable polling. This is required on some systems (notably Windows - NT) to obtain asynchronous abort and asynchronous transfer of - control capability. See the description of pragma Polling in the - GNAT Reference Manual for full details. - - `-gnatR[0/1/2/3][s]' - Output representation information for declared types and objects. - - `-gnats' - Syntax check only. - - `-gnatt' - Tree output file to be generated. - - `-gnatT nnn' - Set time slice to specified number of microseconds - - `-gnatu' - List units for this compilation. - - `-gnatU' - Tag all error messages with the unique string "error:" - - `-gnatv' - Verbose mode. Full error output with source lines to `stdout'. - - `-gnatV' - Control level of validity checking. See separate section describing - this feature. - - `-gnatwxxxXXX' - Warning mode where XXX is a string of options describing the exact - warnings that are enabled or disabled. See separate section on - warning control. - - `-gnatWE' - Wide character encoding method (E=n/h/u/s/e/8). - - `-gnatx' - Suppress generation of cross-reference information. - - `-gnaty' - Enable built-in style checks. See separate section describing this - feature. - - `-gnatzM' - Distribution stub generation and compilation (M=r/c for - receiver/caller stubs). - - `-gnat83' - Enforce Ada 83 restrictions. - - `-pass-exit-codes' - Catch exit codes from the compiler and use the most meaningful as - exit status. - - You may combine a sequence of GNAT switches into a single switch. For - example, the combined switch - - -gnatofi3 - - is equivalent to specifying the following sequence of switches: - - -gnato -gnatf -gnati3 - - The following restrictions apply to the combination of switches in this - manner: - - * The switch `-gnatc' if combined with other switches must come - first in the string. - - * The switch `-gnats' if combined with other switches must come - first in the string. - - * Once a "y" appears in the string (that is a use of the `-gnaty' - switch), then all further characters in the switch are interpreted - as style modifiers (see description of `-gnaty'). - - * Once a "d" appears in the string (that is a use of the `-gnatd' - switch), then all further characters in the switch are interpreted - as debug flags (see description of `-gnatd'). - - * Once a "w" appears in the string (that is a use of the `-gnatw' - switch), then all further characters in the switch are interpreted - as warning mode modifiers (see description of `-gnatw'). - - * Once a "V" appears in the string (that is a use of the `-gnatV' - switch), then all further characters in the switch are interpreted - as validity checking options (see description of `-gnatV'). - - -  - File: gnat_ug_vxw.info, Node: Output and Error Message Control, Next: Debugging and Assertion Control, Up: Switches for gcc - - Output and Error Message Control - -------------------------------- - - The standard default format for error messages is called "brief format." - Brief format messages are written to `stderr' (the standard error file) - and have the following form: - - e.adb:3:04: Incorrect spelling of keyword "function" - e.adb:4:20: ";" should be "is" - - The first integer after the file name is the line number in the file, - and the second integer is the column number within the line. `glide' - can parse the error messages and point to the referenced character. - The following switches provide control over the error message format: - - `-gnatv' - The v stands for verbose. The effect of this setting is to write - long-format error messages to `stdout' (the standard output file. - The same program compiled with the `-gnatv' switch would generate: - - 3. funcion X (Q : Integer) - | - >>> Incorrect spelling of keyword "function" - 4. return Integer; - | - >>> ";" should be "is" - - The vertical bar indicates the location of the error, and the `>>>' - prefix can be used to search for error messages. When this switch - is used the only source lines output are those with errors. - - `-gnatl' - The `l' stands for list. This switch causes a full listing of the - file to be generated. The output might look as follows: - - 1. procedure E is - 2. V : Integer; - 3. funcion X (Q : Integer) - | - >>> Incorrect spelling of keyword "function" - 4. return Integer; - | - >>> ";" should be "is" - 5. begin - 6. return Q + Q; - 7. end; - 8. begin - 9. V := X + X; - 10.end E; - - When you specify the `-gnatv' or `-gnatl' switches and standard - output is redirected, a brief summary is written to `stderr' - (standard error) giving the number of error messages and warning - messages generated. - - `-gnatU' - This switch forces all error messages to be preceded by the unique - string "error:". This means that error messages take a few more - characters in space, but allows easy searching for and - identification of error messages. - - `-gnatb' - The `b' stands for brief. This switch causes GNAT to generate the - brief format error messages to `stderr' (the standard error file) - as well as the verbose format message or full listing (which as - usual is written to `stdout' (the standard output file). - - `-gnatmN' - The `m' stands for maximum. N is a decimal integer in the range - of 1 to 999 and limits the number of error messages to be - generated. For example, using `-gnatm2' might yield - - e.adb:3:04: Incorrect spelling of keyword "function" - e.adb:5:35: missing ".." - fatal error: maximum errors reached - compilation abandoned - - `-gnatf' - The `f' stands for full. Normally, the compiler suppresses error - messages that are likely to be redundant. This switch causes all - error messages to be generated. In particular, in the case of - references to undefined variables. If a given variable is - referenced several times, the normal format of messages is - e.adb:7:07: "V" is undefined (more references follow) - - where the parenthetical comment warns that there are additional - references to the variable `V'. Compiling the same program with the - `-gnatf' switch yields - - e.adb:7:07: "V" is undefined - e.adb:8:07: "V" is undefined - e.adb:8:12: "V" is undefined - e.adb:8:16: "V" is undefined - e.adb:9:07: "V" is undefined - e.adb:9:12: "V" is undefined - - `-gnatq' - The `q' stands for quit (really "don't quit"). In normal - operation mode, the compiler first parses the program and - determines if there are any syntax errors. If there are, - appropriate error messages are generated and compilation is - immediately terminated. This switch tells GNAT to continue with - semantic analysis even if syntax errors have been found. This may - enable the detection of more errors in a single run. On the other - hand, the semantic analyzer is more likely to encounter some - internal fatal error when given a syntactically invalid tree. - - `-gnatQ' - In normal operation mode, the `ali' file is not generated if any - illegalities are detected in the program. The use of `-gnatQ' - forces generation of the `ali' file. This file is marked as being - in error, so it cannot be used for binding purposes, but it does - contain reasonably complete cross-reference information, and thus - may be useful for use by tools (e.g. semantic browsing tools or - integrated development environments) that are driven from the - `ali' file. - - In addition, if `-gnatt' is also specified, then the tree file is - generated even if there are illegalities. It may be useful in this - case to also specify `-gnatq' to ensure that full semantic - processing occurs. The resulting tree file can be processed by - ASIS, for the purpose of providing partial information about - illegal units, but if the error causes the tree to be badly - malformed, then ASIS may crash during the analysis. - - In addition to error messages, which correspond to illegalities as - defined in the Ada 95 Reference Manual, the compiler detects two kinds - of warning situations. - - First, the compiler considers some constructs suspicious and - generates a warning message to alert you to a possible error. Second, - if the compiler detects a situation that is sure to raise an exception - at run time, it generates a warning message. The following shows an - example of warning messages: - e.adb:4:24: warning: creation of object may raise Storage_Error - e.adb:10:17: warning: static value out of range - e.adb:10:17: warning: "Constraint_Error" will be raised at run time - - GNAT considers a large number of situations as appropriate for the - generation of warning messages. As always, warnings are not definite - indications of errors. For example, if you do an out-of-range - assignment with the deliberate intention of raising a - `Constraint_Error' exception, then the warning that may be issued does - not indicate an error. Some of the situations for which GNAT issues - warnings (at least some of the time) are given in the following list, - which is not necessarily complete. - - * Possible infinitely recursive calls - - * Out-of-range values being assigned - - * Possible order of elaboration problems - - * Unreachable code - - * Fixed-point type declarations with a null range - - * Variables that are never assigned a value - - * Variables that are referenced before being initialized - - * Task entries with no corresponding accept statement - - * Duplicate accepts for the same task entry in a select - - * Objects that take too much storage - - * Unchecked conversion between types of differing sizes - - * Missing return statements along some execution paths in a function - - * Incorrect (unrecognized) pragmas - - * Incorrect external names - - * Allocation from empty storage pool - - * Potentially blocking operations in protected types - - * Suspicious parenthesization of expressions - - * Mismatching bounds in an aggregate - - * Attempt to return local value by reference - - * Unrecognized pragmas - - * Premature instantiation of a generic body - - * Attempt to pack aliased components - - * Out of bounds array subscripts - - * Wrong length on string assignment - - * Violations of style rules if style checking is enabled - - * Unused with clauses - - * Bit_Order usage that does not have any effect - - * Compile time biased rounding of floating-point constant - - * Standard.Duration used to resolve universal fixed expression - - * Dereference of possibly null value - - * Declaration that is likely to cause storage error - - * Internal GNAT unit with'ed by application unit - - * Values known to be out of range at compile time - - * Unreferenced labels and variables - - * Address overlays that could clobber memory - - * Unexpected initialization when address clause present - - * Bad alignment for address clause - - * Useless type conversions - - * Redundant assignment statements - - * Accidental hiding of name by child unit - - * Unreachable code - - * Access before elaboration detected at compile time - - * A range in a `for' loop that is known to be null or might be null - - - The following switches are available to control the handling of warning - messages: - - `-gnatwa (activate all optional errors)' - This switch activates most optional warning messages, see - remaining list in this section for details on optional warning - messages that can be individually controlled. The warnings that - are not turned on by this switch are `-gnatwb' (biased rounding), - `-gnatwd' (implicit dereferencing), and `-gnatwh' (hiding). All - other optional warnings are turned on. - - `-gnatwA (suppress all optional errors)' - This switch suppresses all optional warning messages, see - remaining list in this section for details on optional warning - messages that can be individually controlled. - - `-gnatwb (activate warnings on biased rounding)' - If a static floating-point expression has a value that is exactly - half way between two adjacent machine numbers, then the rules of - Ada (Ada Reference Manual, section 4.9(38)) require that this - rounding be done away from zero, even if the normal unbiased - rounding rules at run time would require rounding towards zero. - This warning message alerts you to such instances where - compile-time rounding and run-time rounding are not equivalent. If - it is important to get proper run-time rounding, then you can - force this by making one of the operands into a variable. The - default is that such warnings are not generated. Note that - `-gnatwa' does not affect the setting of this warning option. - - `-gnatwB (suppress warnings on biased rounding)' - This switch disables warnings on biased rounding. - - `-gnatwc (activate warnings on conditionals)' - This switch activates warnings for conditional expressions used in - tests that are known to be True or False at compile time. The - default is that such warnings are not generated. This warning can - also be turned on using `-gnatwa'. - - `-gnatwC (suppress warnings on conditionals)' - This switch suppresses warnings for conditional expressions used in - tests that are known to be True or False at compile time. - - `-gnatwd (activate warnings on implicit dereferencing)' - If this switch is set, then the use of a prefix of an access type - in an indexed component, slice, or selected component without an - explicit `.all' will generate a warning. With this warning - enabled, access checks occur only at points where an explicit - `.all' appears in the source code (assuming no warnings are - generated as a result of this switch). The default is that such - warnings are not generated. Note that `-gnatwa' does not affect - the setting of this warning option. - - `-gnatwD (suppress warnings on implicit dereferencing)' - This switch suppresses warnings for implicit deferences in indexed - components, slices, and selected components. - - `-gnatwe (treat warnings as errors)' - This switch causes warning messages to be treated as errors. The - warning string still appears, but the warning messages are counted - as errors, and prevent the generation of an object file. - - `-gnatwf (activate warnings on unreferenced formals)' - This switch causes a warning to be generated if a formal parameter - is not referenced in the body of the subprogram. This warning can - also be turned on using `-gnatwa' or `-gnatwu'. - - `-gnatwF (suppress warnings on unreferenced formals)' - This switch suppresses warnings for unreferenced formal - parameters. Note that the combination `-gnatwu' followed by - `-gnatwF' has the effect of warning on unreferenced entities other - than subprogram formals. - - `-gnatwh (activate warnings on hiding)' - This switch activates warnings on hiding declarations. A - declaration is considered hiding if it is for a non-overloadable - entity, and it declares an entity with the same name as some other - entity that is directly or use-visible. The default is that such - warnings are not generated. Note that `-gnatwa' does not affect - the setting of this warning option. - - `-gnatwH (suppress warnings on hiding)' - This switch suppresses warnings on hiding declarations. - - `-gnatwi (activate warnings on implementation units).' - This switch activates warnings for a `with' of an internal GNAT - implementation unit, defined as any unit from the `Ada', - `Interfaces', `GNAT', or `System' hierarchies that is not - documented in either the Ada Reference Manual or the GNAT - Programmer's Reference Manual. Such units are intended only for - internal implementation purposes and should not be `with''ed by - user programs. The default is that such warnings are generated - This warning can also be turned on using `-gnatwa'. - - `-gnatwI (disable warnings on implementation units).' - This switch disables warnings for a `with' of an internal GNAT - implementation unit. - - `-gnatwl (activate warnings on elaboration pragmas)' - This switch activates warnings on missing pragma Elaborate_All - statements. See the section in this guide on elaboration checking - for details on when such pragma should be used. The default is - that such warnings are not generated. This warning can also be - turned on using `-gnatwa'. - - `-gnatwL (suppress warnings on elaboration pragmas)' - This switch suppresses warnings on missing pragma Elaborate_All - statements. See the section in this guide on elaboration checking - for details on when such pragma should be used. - - `-gnatwo (activate warnings on address clause overlays)' - This switch activates warnings for possibly unintended - initialization effects of defining address clauses that cause one - variable to overlap another. The default is that such warnings are - generated. This warning can also be turned on using `-gnatwa'. - - `-gnatwO (suppress warnings on address clause overlays)' - This switch suppresses warnings on possibly unintended - initialization effects of defining address clauses that cause one - variable to overlap another. - - `-gnatwp (activate warnings on ineffective pragma Inlines)' - This switch activates warnings for failure of front end inlining - (activated by `-gnatN') to inline a particular call. There are - many reasons for not being able to inline a call, including most - commonly that the call is too complex to inline. This warning can - also be turned on using `-gnatwa'. - - `-gnatwP (suppress warnings on ineffective pragma Inlines)' - This switch suppresses warnings on ineffective pragma Inlines. If - the inlining mechanism cannot inline a call, it will simply ignore - the request silently. - - `-gnatwr (activate warnings on redundant constructs)' - This switch activates warnings for redundant constructs. The - following is the current list of constructs regarded as redundant: - This warning can also be turned on using `-gnatwa'. - - * Assignment of an item to itself. - - * Type conversion that converts an expression to its own type. - - * Use of the attribute `Base' where `typ'Base' is the same as - `typ'. - - * Use of pragma `Pack' when all components are placed by a - record representation clause. - - `-gnatwR (suppress warnings on redundant constructs)' - This switch suppresses warnings for redundant constructs. - - `-gnatws (suppress all warnings)' - This switch completely suppresses the output of all warning - messages from the GNAT front end. Note that it does not suppress - warnings from the `gcc' back end. To suppress these back end - warnings as well, use the switch `-w' in addition to `-gnatws'. - - `-gnatwu (activate warnings on unused entities)' - This switch activates warnings to be generated for entities that - are defined but not referenced, and for units that are `with''ed - and not referenced. In the case of packages, a warning is also - generated if no entities in the package are referenced. This means - that if the package is referenced but the only references are in - `use' clauses or `renames' declarations, a warning is still - generated. A warning is also generated for a generic package that - is `with''ed but never instantiated. In the case where a package - or subprogram body is compiled, and there is a `with' on the - corresponding spec that is only referenced in the body, a warning - is also generated, noting that the `with' can be moved to the - body. The default is that such warnings are not generated. This - switch also activates warnings on unreferenced formals (it is - includes the effect of `-gnatwf'). This warning can also be - turned on using `-gnatwa'. - - `-gnatwU (suppress warnings on unused entities)' - This switch suppresses warnings for unused entities and packages. - It also turns off warnings on unreferenced formals (and thus - includes the effect of `-gnatwF'). - - A string of warning parameters can be used in the same parameter. - For example: - - -gnatwaLe - - Would turn on all optional warnings except for elaboration pragma - warnings, and also specify that warnings should be treated as - errors. - - `-w' - This switch suppresses warnings from the `gcc' backend. It may be - used in conjunction with `-gnatws' to ensure that all warnings are - suppressed during the entire compilation process. - -  - File: gnat_ug_vxw.info, Node: Debugging and Assertion Control, Next: Run-Time Checks, Prev: Output and Error Message Control, Up: Switches for gcc - - Debugging and Assertion Control - ------------------------------- - - `-gnata' - The pragmas `Assert' and `Debug' normally have no effect and are - ignored. This switch, where `a' stands for assert, causes `Assert' - and `Debug' pragmas to be activated. - - The pragmas have the form: - - pragma Assert (BOOLEAN-EXPRESSION [, - STATIC-STRING-EXPRESSION]) - pragma Debug (PROCEDURE CALL) - - The `Assert' pragma causes BOOLEAN-EXPRESSION to be tested. If - the result is `True', the pragma has no effect (other than - possible side effects from evaluating the expression). If the - result is `False', the exception `Assert_Failure' declared in the - package `System.Assertions' is raised (passing - STATIC-STRING-EXPRESSION, if present, as the message associated - with the exception). If no string expression is given the default - is a string giving the file name and line number of the pragma. - - The `Debug' pragma causes PROCEDURE to be called. Note that - `pragma Debug' may appear within a declaration sequence, allowing - debugging procedures to be called between declarations. - -  - File: gnat_ug_vxw.info, Node: Validity Checking, Next: Style Checking, Prev: Run-Time Control, Up: Switches for gcc - - Validity Checking - ----------------- - - The Ada 95 Reference Manual has specific requirements for checking for - invalid values. In particular, RM 13.9.1 requires that the evaluation - of invalid values (for example from unchecked conversions), not result - in erroneous execution. In GNAT, the result of such an evaluation in - normal default mode is to either use the value unmodified, or to raise - Constraint_Error in those cases where use of the unmodified value would - cause erroneous execution. The cases where unmodified values might lead - to erroneous execution are case statements (where a wild jump might - result from an invalid value), and subscripts on the left hand side - (where memory corruption could occur as a result of an invalid value). - - The `-gnatVx' switch allows more control over the validity checking - mode. The `x' argument here is a string of letters which control which - validity checks are performed in addition to the default checks - described above. - - * `-gnatVc' Validity checks for copies - - The right hand side of assignments, and the initializing values of - object declarations are validity checked. - - * `-gnatVd' Default (RM) validity checks - - Some validity checks are done by default following normal Ada - semantics (RM 13.9.1 (9-11)). A check is done in case statements - that the expression is within the range of the subtype. If it is - not, Constraint_Error is raised. For assignments to array - components, a check is done that the expression used as index is - within the range. If it is not, Constraint_Error is raised. Both - these validity checks may be turned off using switch `-gnatVD'. - They are turned on by default. If `-gnatVD' is specified, a - subsequent switch `-gnatVd' will leave the checks turned on. - Switch `-gnatVD' should be used only if you are sure that all such - expressions have valid values. If you use this switch and invalid - values are present, then the program is erroneous, and wild jumps - or memory overwriting may occur. - - * `-gnatVi' Validity checks for `in' mode parameters - - Arguments for parameters of mode `in' are validity checked in - function and procedure calls at the point of call. - - * `-gnatVm' Validity checks for `in out' mode parameters - - Arguments for parameters of mode `in out' are validity checked in - procedure calls at the point of call. The `'m'' here stands for - modify, since this concerns parameters that can be modified by the - call. Note that there is no specific option to test `out' - parameters, but any reference within the subprogram will be tested - in the usual manner, and if an invalid value is copied back, any - reference to it will be subject to validity checking. - - * `-gnatVo' Validity checks for operator and attribute operands - - Arguments for predefined operators and attributes are validity - checked. This includes all operators in package `Standard', the - shift operators defined as intrinsic in package `Interfaces' and - operands for attributes such as `Pos'. - - * `-gnatVr' Validity checks for function returns - - The expression in `return' statements in functions is validity - checked. - - * `-gnatVs' Validity checks for subscripts - - All subscripts expressions are checked for validity, whether they - appear on the right side or left side (in default mode only left - side subscripts are validity checked). - - * `-gnatVt' Validity checks for tests - - Expressions used as conditions in `if', `while' or `exit' - statements are checked, as well as guard expressions in entry - calls. - - * `-gnatVf' Validity checks for floating-point values - - In the absence of this switch, validity checking occurs only for - discrete values. If `-gnatVf' is specified, then validity checking - also applies for floating-point values, and NaN's and infinities - are considered invalid, as well as out of range values for - constrained types. Note that this means that standard `IEEE' - infinity mode is not allowed. The exact contexts in which - floating-point values are checked depends on the setting of other - options. For example `-gnatVif' or `-gnatVfi' (the order does not - matter) specifies that floating-point parameters of mode `in' - should be validity checked. - - * `-gnatVa' All validity checks - - All the above validity checks are turned on. That is `-gnatVa' is - equivalent to `gnatVcdfimorst'. - - * `-gnatVn' No validity checks - - This switch turns off all validity checking, including the default - checking for case statements and left hand side subscripts. Note - that the use of the switch `-gnatp' supresses all run-time checks, - including validity checks, and thus implies `-gnatVn'. - - - The `-gnatV' switch may be followed by a string of letters to turn on - a series of validity checking options. For example, `-gnatVcr' specifies - that in addition to the default validity checking, copies and function - return expressions be validity checked. In order to make it easier to - specify a set of options, the upper case letters `CDFIMORST' may be - used to turn off the corresponding lower case option, so for example - `-gnatVaM' turns on all validity checking options except for checking - of `in out' procedure arguments. - - The specification of additional validity checking generates extra - code (and in the case of `-gnatva' the code expansion can be - substantial. However, these additional checks can be very useful in - smoking out cases of uninitialized variables, incorrect use of - unchecked conversion, and other errors leading to invalid values. The - use of pragma `Initialize_Scalars' is useful in conjunction with the - extra validity checking, since this ensures that wherever possible - uninitialized variables have invalid values. - - See also the pragma `Validity_Checks' which allows modification of - the validity checking mode at the program source level, and also allows - for temporary disabling of validity checks. - -  - File: gnat_ug_vxw.info, Node: Style Checking, Next: Using gcc for Syntax Checking, Prev: Validity Checking, Up: Switches for gcc - - Style Checking - -------------- - - The -gnatyX switch causes the compiler to enforce specified style - rules. A limited set of style rules has been used in writing the GNAT - sources themselves. This switch allows user programs to activate all or - some of these checks. If the source program fails a specified style - check, an appropriate warning message is given, preceded by the - character sequence "(style)". The string X is a sequence of letters or - digits indicating the particular style checks to be performed. The - following checks are defined: - - `1-9 (specify indentation level)' - If a digit from 1-9 appears in the string after `-gnaty' then - proper indentation is checked, with the digit indicating the - indentation level required. The general style of required - indentation is as specified by the examples in the Ada Reference - Manual. Full line comments must be aligned with the `--' starting - on a column that is a multiple of the alignment level. - - `a (check attribute casing)' - If the letter a appears in the string after `-gnaty' then - attribute names, including the case of keywords such as `digits' - used as attributes names, must be written in mixed case, that is, - the initial letter and any letter following an underscore must be - uppercase. All other letters must be lowercase. - - `b (blanks not allowed at statement end)' - If the letter b appears in the string after `-gnaty' then trailing - blanks are not allowed at the end of statements. The purpose of - this rule, together with h (no horizontal tabs), is to enforce a - canonical format for the use of blanks to separate source tokens. - - `c (check comments)' - If the letter c appears in the string after `-gnaty' then comments - must meet the following set of rules: - - * The "-" that starts the column must either start in column - one, or else at least one blank must precede this sequence. - - * Comments that follow other tokens on a line must have at - least one blank following the "-" at the start of the comment. - - * Full line comments must have two blanks following the "-" - that starts the comment, with the following exceptions. - - * A line consisting only of the "-" characters, possibly - preceded by blanks is permitted. - - * A comment starting with "-x" where x is a special character - is permitted. This alows proper processing of the output - generated by specialized tools including `gnatprep' (where -! - is used) and the SPARK annnotation language (where -# is - used). For the purposes of this rule, a special character is - defined as being in one of the ASCII ranges 16#21#..16#2F# or - 16#3A#..16#3F#. - - * A line consisting entirely of minus signs, possibly preceded - by blanks, is permitted. This allows the construction of box - comments where lines of minus signs are used to form the top - and bottom of the box. - - * If a comment starts and ends with "-" is permitted as long as - at least one blank follows the initial "-". Together with the - preceding rule, this allows the construction of box comments, - as shown in the following example: - --------------------------- - -- This is a box comment -- - -- with two text lines. -- - --------------------------- - - `e (check end/exit labels)' - If the letter e appears in the string after `-gnaty' then optional - labels on `end' statements ending subprograms and on `exit' - statements exiting named loops, are required to be present. - - `f (no form feeds or vertical tabs)' - If the letter f appears in the string after `-gnaty' then neither - form feeds nor vertical tab characters are not permitted in the - source text. - - `h (no horizontal tabs)' - If the letter h appears in the string after `-gnaty' then - horizontal tab characters are not permitted in the source text. - Together with the b (no blanks at end of line) check, this - enforces a canonical form for the use of blanks to separate source - tokens. - - `i (check if-then layout)' - If the letter i appears in the string after `-gnaty', then the - keyword `then' must appear either on the same line as - corresponding `if', or on a line on its own, lined up under the - `if' with at least one non-blank line in between containing all or - part of the condition to be tested. - - `k (check keyword casing)' - If the letter k appears in the string after `-gnaty' then all - keywords must be in lower case (with the exception of keywords - such as `digits' used as attribute names to which this check does - not apply). - - `l (check layout)' - If the letter l appears in the string after `-gnaty' then layout - of statement and declaration constructs must follow the - recommendations in the Ada Reference Manual, as indicated by the - form of the syntax rules. For example an `else' keyword must be - lined up with the corresponding `if' keyword. - - There are two respects in which the style rule enforced by this - check option are more liberal than those in the Ada Reference - Manual. First in the case of record declarations, it is - permissible to put the `record' keyword on the same line as the - `type' keyword, and then the `end' in `end record' must line up - under `type'. For example, either of the following two layouts is - acceptable: - - type q is record - a : integer; - b : integer; - end record; - - type q is - record - a : integer; - b : integer; - end record; - - Second, in the case of a block statement, a permitted alternative - is to put the block label on the same line as the `declare' or - `begin' keyword, and then line the `end' keyword up under the - block label. For example both the following are permitted: - - Block : declare - A : Integer := 3; - begin - Proc (A, A); - end Block; - - Block : - declare - A : Integer := 3; - begin - Proc (A, A); - end Block; - - The same alternative format is allowed for loops. For example, - both of the following are permitted: - - Clear : while J < 10 loop - A (J) := 0; - end loop Clear; - - Clear : - while J < 10 loop - A (J) := 0; - end loop Clear; - - `m (check maximum line length)' - If the letter m appears in the string after `-gnaty' then the - length of source lines must not exceed 79 characters, including - any trailing blanks. The value of 79 allows convenient display on - an 80 character wide device or window, allowing for possible - special treatment of 80 character lines. - - `Mnnn (set maximum line length)' - If the sequence Mnnn, where nnn is a decimal number, appears in - the string after `-gnaty' then the length of lines must not exceed - the given value. - - `n (check casing of entities in Standard)' - If the letter n appears in the string after `-gnaty' then any - identifier from Standard must be cased to match the presentation - in the Ada Reference Manual (for example, `Integer' and - `ASCII.NUL'). - - `o (check order of subprogram bodies)' - If the letter o appears in the string after `-gnaty' then all - subprogram bodies in a given scope (e.g. a package body) must be - in alphabetical order. The ordering rule uses normal Ada rules for - comparing strings, ignoring casing of letters, except that if - there is a trailing numeric suffix, then the value of this suffix - is used in the ordering (e.g. Junk2 comes before Junk10). - - `p (check pragma casing)' - If the letter p appears in the string after `-gnaty' then pragma - names must be written in mixed case, that is, the initial letter - and any letter following an underscore must be uppercase. All - other letters must be lowercase. - - `r (check references)' - If the letter r appears in the string after `-gnaty' then all - identifier references must be cased in the same way as the - corresponding declaration. No specific casing style is imposed on - identifiers. The only requirement is for consistency of references - with declarations. - - `s (check separate specs)' - If the letter s appears in the string after `-gnaty' then separate - declarations ("specs") are required for subprograms (a body is not - allowed to serve as its own declaration). The only exception is - that parameterless library level procedures are not required to - have a separate declaration. This exception covers the most - frequent form of main program procedures. - - `t (check token spacing)' - If the letter t appears in the string after `-gnaty' then the - following token spacing rules are enforced: - - * The keywords `abs' and `not' must be followed by a space. - - * The token `=>' must be surrounded by spaces. - - * The token `<>' must be preceded by a space or a left - parenthesis. - - * Binary operators other than `**' must be surrounded by spaces. - There is no restriction on the layout of the `**' binary - operator. - - * Colon must be surrounded by spaces. - - * Colon-equal (assignment) must be surrounded by spaces. - - * Comma must be the first non-blank character on the line, or be - immediately preceded by a non-blank character, and must be - followed by a space. - - * If the token preceding a left paren ends with a letter or - digit, then a space must separate the two tokens. - - * A right parenthesis must either be the first non-blank - character on a line, or it must be preceded by a non-blank - character. - - * A semicolon must not be preceded by a space, and must not be - followed by a non-blank character. - - * A unary plus or minus may not be followed by a space. - - * A vertical bar must be surrounded by spaces. - - In the above rules, appearing in column one is always permitted, - that is, counts as meeting either a requirement for a required - preceding space, or as meeting a requirement for no preceding - space. - - Appearing at the end of a line is also always permitted, that is, - counts as meeting either a requirement for a following space, or - as meeting a requirement for no following space. - - If any of these style rules is violated, a message is generated giving - details on the violation. The initial characters of such messages are - always "(style)". Note that these messages are treated as warning - messages, so they normally do not prevent the generation of an object - file. The `-gnatwe' switch can be used to treat warning messages, - including style messages, as fatal errors. - - The switch `-gnaty' on its own (that is not followed by any letters or - digits), is equivalent to `gnaty3abcefhiklmprst', that is all checking - options are enabled with the exception of -gnatyo, with an indentation - level of 3. This is the standard checking option that is used for the - GNAT sources. - -  - File: gnat_ug_vxw.info, Node: Run-Time Checks, Next: Stack Overflow Checking, Prev: Debugging and Assertion Control, Up: Switches for gcc - - Run-Time Checks - --------------- - - If you compile with the default options, GNAT will insert many run-time - checks into the compiled code, including code that performs range - checking against constraints, but not arithmetic overflow checking for - integer operations (including division by zero) or checks for access - before elaboration on subprogram calls. All other run-time checks, as - required by the Ada 95 Reference Manual, are generated by default. The - following `gcc' switches refine this default behavior: - - `-gnatp' - Suppress all run-time checks as though `pragma Suppress - (all_checks') had been present in the source. Validity checks are - also suppressed (in other words `-gnatp' also implies `-gnatVn'. - Use this switch to improve the performance of the code at the - expense of safety in the presence of invalid data or program bugs. - - `-gnato' - Enables overflow checking for integer operations. This causes - GNAT to generate slower and larger executable programs by adding - code to check for overflow (resulting in raising - `Constraint_Error' as required by standard Ada semantics). These - overflow checks correspond to situations in which the true value - of the result of an operation may be outside the base range of the - result type. The following example shows the distinction: - - X1 : Integer := Integer'Last; - X2 : Integer range 1 .. 5 := 5; - ... - X1 := X1 + 1; -- `-gnato' required to catch the Constraint_Error - X2 := X2 + 1; -- range check, `-gnato' has no effect here - - Here the first addition results in a value that is outside the - base range of Integer, and hence requires an overflow check for - detection of the constraint error. The second increment operation - results in a violation of the explicit range constraint, and such - range checks are always performed. Basically the compiler can - assume that in the absence of the `-gnato' switch that any value - of type `xxx' is in range of the base type of `xxx'. - - Note that the `-gnato' switch does not affect the code generated - for any floating-point operations; it applies only to integer - semantics). For floating-point, GNAT has the `Machine_Overflows' - attribute set to `False' and the normal mode of operation is to - generate IEEE NaN and infinite values on overflow or invalid - operations (such as dividing 0.0 by 0.0). - - The reason that we distinguish overflow checking from other kinds - of range constraint checking is that a failure of an overflow - check can generate an incorrect value, but cannot cause erroneous - behavior. This is unlike the situation with a constraint check on - an array subscript, where failure to perform the check can result - in random memory description, or the range check on a case - statement, where failure to perform the check can cause a wild - jump. - - Note again that `-gnato' is off by default, so overflow checking is - not performed in default mode. This means that out of the box, - with the default settings, GNAT does not do all the checks - expected from the language description in the Ada Reference - Manual. If you want all constraint checks to be performed, as - described in this Manual, then you must explicitly use the -gnato - switch either on the `gnatmake' or `gcc' command. - - `-gnatE' - Enables dynamic checks for access-before-elaboration on subprogram - calls and generic instantiations. For full details of the effect - and use of this switch, *Note Compiling Using gcc::. - - The setting of these switches only controls the default setting of the - checks. You may modify them using either `Suppress' (to remove checks) - or `Unsuppress' (to add back suppressed checks) pragmas in the program - source. - -  - File: gnat_ug_vxw.info, Node: Stack Overflow Checking, Next: Run-Time Control, Prev: Run-Time Checks, Up: Switches for gcc - - Stack Overflow Checking - ----------------------- - - For most operating systems, `gcc' does not perform stack overflow - checking by default. This means that if the main environment task or - some other task exceeds the available stack space, then unpredictable - behavior will occur. - - To activate stack checking, compile all units with the gcc option - `-fstack-check'. For example: - - gcc -c -fstack-check package1.adb - - Units compiled with this option will generate extra instructions to - check that any use of the stack (for procedure calls or for declaring - local variables in declare blocks) do not exceed the available stack - space. If the space is exceeded, then a `Storage_Error' exception is - raised. - - For declared tasks, the stack size is always controlled by the size - given in an applicable `Storage_Size' pragma (or is set to the default - size if no pragma is used. - - For the environment task, the stack size depends on system defaults - and is unknown to the compiler. The stack may even dynamically grow on - some systems, precluding the normal Ada semantics for stack overflow. - In the worst case, unbounded stack usage, causes unbounded stack - expansion resulting in the system running out of virtual memory. - - The stack checking may still work correctly if a fixed size stack is - allocated, but this cannot be guaranteed. To ensure that a clean - exception is signalled for stack overflow, set the environment variable - `GNAT_STACK_LIMIT' to indicate the maximum stack area that can be used, - as in: - - SET GNAT_STACK_LIMIT 1600 - - The limit is given in kilobytes, so the above declaration would set the - stack limit of the environment task to 1.6 megabytes. Note that the - only purpose of this usage is to limit the amount of stack used by the - environment task. If it is necessary to increase the amount of stack - for the environment task, then this is an operating systems issue, and - must be addressed with the appropriate operating systems commands. - -  - File: gnat_ug_vxw.info, Node: Run-Time Control, Next: Validity Checking, Prev: Stack Overflow Checking, Up: Switches for gcc - - Run-Time Control - ---------------- - - `-gnatT nnn' - The `gnatT' switch can be used to specify the time-slicing value - to be used for task switching between equal priority tasks. The - value `nnn' is given in microseconds as a decimal integer. - - Setting the time-slicing value is only effective if the underlying - thread control system can accommodate time slicing. Check the - documentation of your operating system for details. Note that the - time-slicing value can also be set by use of pragma `Time_Slice' - or by use of the `t' switch in the gnatbind step. The pragma - overrides a command line argument if both are present, and the `t' - switch for gnatbind overrides both the pragma and the `gcc' - command line switch. - -  - File: gnat_ug_vxw.info, Node: Using gcc for Syntax Checking, Next: Using gcc for Semantic Checking, Prev: Style Checking, Up: Switches for gcc - - Using `gcc' for Syntax Checking - ------------------------------- - - `-gnats' - The `s' stands for syntax. - - Run GNAT in syntax checking only mode. For example, the command - - $ gcc -c -gnats x.adb - - compiles file `x.adb' in syntax-check-only mode. You can check a - series of files in a single command , and can use wild cards to - specify such a group of files. Note that you must specify the - `-c' (compile only) flag in addition to the `-gnats' flag. . - - You may use other switches in conjunction with `-gnats'. In - particular, `-gnatl' and `-gnatv' are useful to control the format - of any generated error messages. - - The output is simply the error messages, if any. No object file or - ALI file is generated by a syntax-only compilation. Also, no units - other than the one specified are accessed. For example, if a unit - `X' `with''s a unit `Y', compiling unit `X' in syntax check only - mode does not access the source file containing unit `Y'. - - Normally, GNAT allows only a single unit in a source file. - However, this restriction does not apply in syntax-check-only - mode, and it is possible to check a file containing multiple - compilation units concatenated together. This is primarily used by - the `gnatchop' utility (*note Renaming Files Using gnatchop::). - -  - File: gnat_ug_vxw.info, Node: Using gcc for Semantic Checking, Next: Compiling Ada 83 Programs, Prev: Using gcc for Syntax Checking, Up: Switches for gcc - - Using `gcc' for Semantic Checking - --------------------------------- - - `-gnatc' - The `c' stands for check. Causes the compiler to operate in - semantic check mode, with full checking for all illegalities - specified in the Ada 95 Reference Manual, but without generation - of any object code (no object file is generated). - - Because dependent files must be accessed, you must follow the GNAT - semantic restrictions on file structuring to operate in this mode: - - * The needed source files must be accessible (*note Search - Paths and the Run-Time Library (RTL)::). - - * Each file must contain only one compilation unit. - - * The file name and unit name must match (*note File Naming - Rules::). - - The output consists of error messages as appropriate. No object - file is generated. An `ALI' file is generated for use in the - context of cross-reference tools, but this file is marked as not - being suitable for binding (since no object file is generated). - The checking corresponds exactly to the notion of legality in the - Ada 95 Reference Manual. - - Any unit can be compiled in semantics-checking-only mode, including - units that would not normally be compiled (subunits, and - specifications where a separate body is present). - -  - File: gnat_ug_vxw.info, Node: Compiling Ada 83 Programs, Next: Character Set Control, Prev: Using gcc for Semantic Checking, Up: Switches for gcc - - Compiling Ada 83 Programs - ------------------------- - - `-gnat83' - Although GNAT is primarily an Ada 95 compiler, it accepts this - switch to specify that an Ada 83 program is to be compiled in - Ada83 mode. If you specify this switch, GNAT rejects most Ada 95 - extensions and applies Ada 83 semantics where this can be done - easily. It is not possible to guarantee this switch does a perfect - job; for example, some subtle tests, such as are found in earlier - ACVC tests (that have been removed from the ACVC suite for Ada - 95), may not compile correctly. However, for most purposes, using - this switch should help to ensure that programs that compile - correctly under the `-gnat83' switch can be ported easily to an - Ada 83 compiler. This is the main use of the switch. - - With few exceptions (most notably the need to use `<>' on - unconstrained generic formal parameters, the use of the new Ada 95 - keywords, and the use of packages with optional bodies), it is not - necessary to use the `-gnat83' switch when compiling Ada 83 - programs, because, with rare exceptions, Ada 95 is upwardly - compatible with Ada 83. This means that a correct Ada 83 program - is usually also a correct Ada 95 program. - -  - File: gnat_ug_vxw.info, Node: Character Set Control, Next: File Naming Control, Prev: Compiling Ada 83 Programs, Up: Switches for gcc - - Character Set Control - --------------------- - - `-gnatiC' - Normally GNAT recognizes the Latin-1 character set in source - program identifiers, as described in the Ada 95 Reference Manual. - This switch causes GNAT to recognize alternate character sets in - identifiers. C is a single character indicating the character - set, as follows: - - `1' - Latin-1 identifiers - - `2' - Latin-2 letters allowed in identifiers - - `3' - Latin-3 letters allowed in identifiers - - `4' - Latin-4 letters allowed in identifiers - - `5' - Latin-5 (Cyrillic) letters allowed in identifiers - - `9' - Latin-9 letters allowed in identifiers - - `p' - IBM PC letters (code page 437) allowed in identifiers - - `8' - IBM PC letters (code page 850) allowed in identifiers - - `f' - Full upper-half codes allowed in identifiers - - `n' - No upper-half codes allowed in identifiers - - `w' - Wide-character codes (that is, codes greater than 255) - allowed in identifiers - - *Note Foreign Language Representation::, for full details on the - implementation of these character sets. - - `-gnatWE' - Specify the method of encoding for wide characters. E is one of - the following: - - `h' - Hex encoding (brackets coding also recognized) - - `u' - Upper half encoding (brackets encoding also recognized) - - `s' - Shift/JIS encoding (brackets encoding also recognized) - - `e' - EUC encoding (brackets encoding also recognized) - - `8' - UTF-8 encoding (brackets encoding also recognized) - - `b' - Brackets encoding only (default value) For full details on - the these encoding methods see *Note Wide Character Encodings::. - Note that brackets coding is always accepted, even if one of the - other options is specified, so for example `-gnatW8' specifies - that both brackets and `UTF-8' encodings will be recognized. The - units that are with'ed directly or indirectly will be scanned - using the specified representation scheme, and so if one of the - non-brackets scheme is used, it must be used consistently - throughout the program. However, since brackets encoding is always - recognized, it may be conveniently used in standard libraries, - allowing these libraries to be used with any of the available - coding schemes. scheme. If no `-gnatW?' parameter is present, - then the default representation is Brackets encoding only. - - Note that the wide character representation that is specified - (explicitly or by default) for the main program also acts as the - default encoding used for Wide_Text_IO files if not specifically - overridden by a WCEM form parameter. - -  - File: gnat_ug_vxw.info, Node: File Naming Control, Next: Subprogram Inlining Control, Prev: Character Set Control, Up: Switches for gcc - - File Naming Control - ------------------- - - `-gnatkN' - Activates file name "krunching". N, a decimal integer in the range - 1-999, indicates the maximum allowable length of a file name (not - including the `.ads' or `.adb' extension). The default is not to - enable file name krunching. - - For the source file naming rules, *Note File Naming Rules::. - -  - File: gnat_ug_vxw.info, Node: Subprogram Inlining Control, Next: Auxiliary Output Control, Prev: File Naming Control, Up: Switches for gcc - - Subprogram Inlining Control - --------------------------- - - `-gnatn' - The `n' here is intended to suggest the first syllable of the word - "inline". GNAT recognizes and processes `Inline' pragmas. - However, for the inlining to actually occur, optimization must be - enabled. To enable inlining across unit boundaries, this is, - inlining a call in one unit of a subprogram declared in a - `with''ed unit, you must also specify this switch. In the absence - of this switch, GNAT does not attempt inlining across units and - does not need to access the bodies of subprograms for which - `pragma Inline' is specified if they are not in the current unit. - - If you specify this switch the compiler will access these bodies, - creating an extra source dependency for the resulting object file, - and where possible, the call will be inlined. For further details - on when inlining is possible see *Note Inlining of Subprograms::. - - `-gnatN' - The front end inlining activated by this switch is generally more - extensive, and quite often more effective than the standard - `-gnatn' inlining mode. It will also generate additional - dependencies. - -  - File: gnat_ug_vxw.info, Node: Auxiliary Output Control, Next: Debugging Control, Prev: Subprogram Inlining Control, Up: Switches for gcc - - Auxiliary Output Control - ------------------------ - - `-gnatt' - Causes GNAT to write the internal tree for a unit to a file (with - the extension `.adt'. This not normally required, but is used by - separate analysis tools. Typically these tools do the necessary - compilations automatically, so you should not have to specify this - switch in normal operation. - - `-gnatu' - Print a list of units required by this compilation on `stdout'. - The listing includes all units on which the unit being compiled - depends either directly or indirectly. - - `-pass-exit-codes' - If this switch is not used, the exit code returned by `gcc' when - compiling multiple files indicates whether all source files have - been successfully used to generate object files or not. - - When `-pass-exit-codes' is used, `gcc' exits with an extended exit - status and allows an integrated development environment to better - react to a compilation failure. Those exit status are: - - 5 - There was an error in at least one source file. - - 3 - At least one source file did not generate an object file. - - 2 - The compiler died unexpectedly (internal error for example). - - 0 - An object file has been generated for every source file. - -  - File: gnat_ug_vxw.info, Node: Debugging Control, Next: Units to Sources Mapping Files, Prev: Auxiliary Output Control, Up: Switches for gcc - - Debugging Control - ----------------- - - `-gnatdX' - Activate internal debugging switches. X is a letter or digit, or - string of letters or digits, which specifies the type of debugging - outputs desired. Normally these are used only for internal - development or system debugging purposes. You can find full - documentation for these switches in the body of the `Debug' unit - in the compiler source file `debug.adb'. - - `-gnatG' - This switch causes the compiler to generate auxiliary output - containing a pseudo-source listing of the generated expanded code. - Like most Ada compilers, GNAT works by first transforming the high - level Ada code into lower level constructs. For example, tasking - operations are transformed into calls to the tasking run-time - routines. A unique capability of GNAT is to list this expanded - code in a form very close to normal Ada source. This is very - useful in understanding the implications of various Ada usage on - the efficiency of the generated code. There are many cases in Ada - (e.g. the use of controlled types), where simple Ada statements can - generate a lot of run-time code. By using `-gnatG' you can identify - these cases, and consider whether it may be desirable to modify - the coding approach to improve efficiency. - - The format of the output is very similar to standard Ada source, - and is easily understood by an Ada programmer. The following - special syntactic additions correspond to low level features used - in the generated code that do not have any exact analogies in pure - Ada source form. The following is a partial list of these special - constructions. See the specification of package `Sprint' in file - `sprint.ads' for a full list. - - `new XXX [storage_pool = YYY]' - Shows the storage pool being used for an allocator. - - `at end PROCEDURE-NAME;' - Shows the finalization (cleanup) procedure for a scope. - - `(if EXPR then EXPR else EXPR)' - Conditional expression equivalent to the `x?y:z' construction - in C. - - `TARGET^(SOURCE)' - A conversion with floating-point truncation instead of - rounding. - - `TARGET?(SOURCE)' - A conversion that bypasses normal Ada semantic checking. In - particular enumeration types and fixed-point types are - treated simply as integers. - - `TARGET?^(SOURCE)' - Combines the above two cases. - - `X #/ Y' - `X #mod Y' - `X #* Y' - `X #rem Y' - A division or multiplication of fixed-point values which are - treated as integers without any kind of scaling. - - `free EXPR [storage_pool = XXX]' - Shows the storage pool associated with a `free' statement. - - `freeze TYPENAME [ACTIONS]' - Shows the point at which TYPENAME is frozen, with possible - associated actions to be performed at the freeze point. - - `reference ITYPE' - Reference (and hence definition) to internal type ITYPE. - - `FUNCTION-NAME! (ARG, ARG, ARG)' - Intrinsic function call. - - `LABELNAME : label' - Declaration of label LABELNAME. - - `EXPR && EXPR && EXPR ... && EXPR' - A multiple concatenation (same effect as EXPR & EXPR & EXPR, - but handled more efficiently). - - `[constraint_error]' - Raise the `Constraint_Error' exception. - - `EXPRESSION'reference' - A pointer to the result of evaluating EXPRESSION. - - `TARGET-TYPE!(SOURCE-EXPRESSION)' - An unchecked conversion of SOURCE-EXPRESSION to TARGET-TYPE. - - `[NUMERATOR/DENOMINATOR]' - Used to represent internal real literals (that) have no exact - representation in base 2-16 (for example, the result of - compile time evaluation of the expression 1.0/27.0). - - `-gnatD' - This switch is used in conjunction with `-gnatG' to cause the - expanded source, as described above to be written to files - with names `xxx.dg', where `xxx' is the normal file name, for - example, if the source file name is `hello.adb', then a file - `hello.adb.dg' will be written. The debugging information - generated by the `gcc' `-g' switch will refer to the generated - `xxx.dg' file. This allows you to do source level debugging - using the generated code which is sometimes useful for - complex code, for example to find out exactly which part of a - complex construction raised an exception. This switch also - suppress generation of cross-reference information (see - -gnatx). - - `-gnatC' - In the generated debugging information, and also in the case - of long external names, the compiler uses a compression - mechanism if the name is very long. This compression method - uses a checksum, and avoids trouble on some operating systems - which have difficulty with very long names. The `-gnatC' - switch forces this compression approach to be used on all - external names and names in the debugging information tables. - This reduces the size of the generated executable, at the - expense of making the naming scheme more complex. The - compression only affects the qualification of the name. Thus - a name in the source: - - Very_Long_Package.Very_Long_Inner_Package.Var - - would normally appear in these tables as: - - very_long_package__very_long_inner_package__var - - but if the `-gnatC' switch is used, then the name appears as - - XCb7e0c705__var - - Here b7e0c705 is a compressed encoding of the qualification - prefix. The GNAT Ada aware version of GDB understands these - encoded prefixes, so if this debugger is used, the encoding - is largely hidden from the user of the compiler. - - `-gnatR[0|1|2|3][s]' - This switch controls output from the compiler of a listing showing - representation information for declared types and objects. For - `-gnatR0', no information is output (equivalent to omitting the - `-gnatR' switch). For `-gnatR1' (which is the default, so `-gnatR' - with no parameter has the same effect), size and alignment - information is listed for declared array and record types. For - `-gnatR2', size and alignment information is listed for all - expression information for values that are computed at run time for - variant records. These symbolic expressions have a mostly obvious - format with #n being used to represent the value of the n'th - discriminant. See source files `repinfo.ads/adb' in the `GNAT' - sources for full detalis on the format of `-gnatR3' output. If the - switch is followed by an s (e.g. `-gnatR2s'), then the output is - to a file with the name `file.rep' where file is the name of the - corresponding source file. - - `-gnatx' - Normally the compiler generates full cross-referencing information - in the `ALI' file. This information is used by a number of tools, - including `gnatfind' and `gnatxref'. The -gnatx switch suppresses - this information. This saves some space and may slightly speed up - compilation, but means that these tools cannot be used. - -  - File: gnat_ug_vxw.info, Node: Units to Sources Mapping Files, Prev: Debugging Control, Up: Switches for gcc - - Units to Sources Mapping Files - ------------------------------ - - `-gnatemPATH' - A mapping file is a way to communicate to the compiler two - mappings: from unit names to file names (without any directory - information) and from file names to path names (with full - directory information). These mappings are used by the compiler to - short-circuit the path search. - - A mapping file is a sequence of sets of three lines. In each set, - the first line is the unit name, in lower case, with "%s" appended - for specifications and "%b" appended for bodies; the second line - is the file name; and the third line is the path name. - - Example: - main%b - main.2.ada - /gnat/project1/sources/main.2.ada - - When the switch `-gnatem' is specified, the compiler will create - in memory the two mappings from the specified file. If there is - any problem (non existent file, truncated file or duplicate - entries), no mapping will be created. - - Several `-gnatem' switches may be specified; however, only the last - one on the command line will be taken into account. - - When using a project file, `gnatmake' create a temporary mapping - file and communicates it to the compiler using this switch. - -  - File: gnat_ug_vxw.info, Node: Search Paths and the Run-Time Library (RTL), Next: Order of Compilation Issues, Prev: Switches for gcc, Up: Compiling Using gcc - - Search Paths and the Run-Time Library (RTL) - =========================================== - - With the GNAT source-based library system, the compiler must be able to - find source files for units that are needed by the unit being compiled. - Search paths are used to guide this process. - - The compiler compiles one source file whose name must be given - explicitly on the command line. In other words, no searching is done - for this file. To find all other source files that are needed (the most - common being the specs of units), the compiler examines the following - directories, in the following order: - - 1. The directory containing the source file of the main unit being - compiled (the file name on the command line). - - 2. Each directory named by an `-I' switch given on the `gcc' command - line, in the order given. - - 3. Each of the directories listed in the value of the - `ADA_INCLUDE_PATH' environment variable. Construct this value - exactly as the `PATH' environment variable: a list of directory - names separated by colons (semicolons when working with the NT - version). - - 4. The content of the "ada_source_path" file which is part of the GNAT - installation tree and is used to store standard libraries such as - the GNAT Run Time Library (RTL) source files. *Note Installing an - Ada Library:: - - Specifying the switch `-I-' inhibits the use of the directory - containing the source file named in the command line. You can still - have this directory on your search path, but in this case it must be - explicitly requested with a `-I' switch. - - Specifying the switch `-nostdinc' inhibits the search of the default - location for the GNAT Run Time Library (RTL) source files. - - The compiler outputs its object files and ALI files in the current - working directory. Caution: The object file can be redirected with the - `-o' switch; however, `gcc' and `gnat1' have not been coordinated on - this so the ALI file will not go to the right place. Therefore, you - should avoid using the `-o' switch. - - The packages `Ada', `System', and `Interfaces' and their children - make up the GNAT RTL, together with the simple `System.IO' package used - in the "Hello World" example. The sources for these units are needed by - the compiler and are kept together in one directory. Not all of the - bodies are needed, but all of the sources are kept together anyway. In - a normal installation, you need not specify these directory names when - compiling or binding. Either the environment variables or the built-in - defaults cause these files to be found. - - In addition to the language-defined hierarchies (System, Ada and - Interfaces), the GNAT distribution provides a fourth hierarchy, - consisting of child units of GNAT. This is a collection of generally - useful routines. See the GNAT Reference Manual for further details. - - Besides simplifying access to the RTL, a major use of search paths is - in compiling sources from multiple directories. This can make - development environments much more flexible. - -  - File: gnat_ug_vxw.info, Node: Order of Compilation Issues, Next: Examples, Prev: Search Paths and the Run-Time Library (RTL), Up: Compiling Using gcc - - Order of Compilation Issues - =========================== - - If, in our earlier example, there was a spec for the `hello' procedure, - it would be contained in the file `hello.ads'; yet this file would not - have to be explicitly compiled. This is the result of the model we - chose to implement library management. Some of the consequences of this - model are as follows: - - * There is no point in compiling specs (except for package specs - with no bodies) because these are compiled as needed by clients. If - you attempt a useless compilation, you will receive an error - message. It is also useless to compile subunits because they are - compiled as needed by the parent. - - * There are no order of compilation requirements: performing a - compilation never obsoletes anything. The only way you can obsolete - something and require recompilations is to modify one of the - source files on which it depends. - - * There is no library as such, apart from the ALI files (*note The - Ada Library Information Files::, for information on the format of - these files). For now we find it convenient to create separate ALI - files, but eventually the information therein may be incorporated - into the object file directly. - - * When you compile a unit, the source files for the specs of all - units that it `with''s, all its subunits, and the bodies of any - generics it instantiates must be available (reachable by the - search-paths mechanism described above), or you will receive a - fatal error message. - -  - File: gnat_ug_vxw.info, Node: Examples, Prev: Order of Compilation Issues, Up: Compiling Using gcc - - Examples - ======== - - The following are some typical Ada compilation command line examples: - - `$ gcc -c xyz.adb' - Compile body in file `xyz.adb' with all default options. - - `$ gcc -c -O2 -gnata xyz-def.adb' - Compile the child unit package in file `xyz-def.adb' with extensive - optimizations, and pragma `Assert'/`Debug' statements enabled. - - `$ gcc -c -gnatc abc-def.adb' - Compile the subunit in file `abc-def.adb' in semantic-checking-only - mode. - -  - File: gnat_ug_vxw.info, Node: Binding Using gnatbind, Next: Linking Using gnatlink, Prev: Compiling Using gcc, Up: Top - - Binding Using `gnatbind' - ************************ - - * Menu: - - * Running gnatbind:: - * Generating the Binder Program in C:: - * Consistency-Checking Modes:: - * Binder Error Message Control:: - * Elaboration Control:: - * Output Control:: - * Binding with Non-Ada Main Programs:: - * Binding Programs with No Main Subprogram:: - * Summary of Binder Switches:: - * Command-Line Access:: - * Search Paths for gnatbind:: - * Examples of gnatbind Usage:: - - This chapter describes the GNAT binder, `gnatbind', which is used to - bind compiled GNAT objects. The `gnatbind' program performs four - separate functions: - - 1. Checks that a program is consistent, in accordance with the rules - in Chapter 10 of the Ada 95 Reference Manual. In particular, error - messages are generated if a program uses inconsistent versions of a - given unit. - - 2. Checks that an acceptable order of elaboration exists for the - program and issues an error message if it cannot find an order of - elaboration that satisfies the rules in Chapter 10 of the Ada 95 - Language Manual. - - 3. Generates a main program incorporating the given elaboration order. - This program is a small Ada package (body and spec) that must be - subsequently compiled using the GNAT compiler. The necessary - compilation step is usually performed automatically by `gnatlink'. - The two most important functions of this program are to call the - elaboration routines of units in an appropriate order and to call - the main program. - - 4. Determines the set of object files required by the given main - program. This information is output in the forms of comments in - the generated program, to be read by the `gnatlink' utility used - to link the Ada application. - -  - File: gnat_ug_vxw.info, Node: Running gnatbind, Next: Generating the Binder Program in C, Up: Binding Using gnatbind - - Running `gnatbind' - ================== - - The form of the `gnatbind' command is - - $ gnatbind [SWITCHES] MAINPROG[.ali] [SWITCHES] - - where MAINPROG.adb is the Ada file containing the main program unit - body. If no switches are specified, `gnatbind' constructs an Ada - package in two files which names are `b~ADA_MAIN.ads', and - `b~ADA_MAIN.adb'. For example, if given the parameter `hello.ali', for - a main program contained in file `hello.adb', the binder output files - would be `b~hello.ads' and `b~hello.adb'. - - When doing consistency checking, the binder takes into consideration - any source files it can locate. For example, if the binder determines - that the given main program requires the package `Pack', whose `.ali' - file is `pack.ali' and whose corresponding source spec file is - `pack.ads', it attempts to locate the source file `pack.ads' (using the - same search path conventions as previously described for the `gcc' - command). If it can locate this source file, it checks that the time - stamps or source checksums of the source and its references to in `ali' - files match. In other words, any `ali' files that mentions this spec - must have resulted from compiling this version of the source file (or - in the case where the source checksums match, a version close enough - that the difference does not matter). - - The effect of this consistency checking, which includes source - files, is that the binder ensures that the program is consistent with - the latest version of the source files that can be located at bind - time. Editing a source file without compiling files that depend on the - source file cause error messages to be generated by the binder. - - For example, suppose you have a main program `hello.adb' and a - package `P', from file `p.ads' and you perform the following steps: - - 1. Enter `gcc -c hello.adb' to compile the main program. - - 2. Enter `gcc -c p.ads' to compile package `P'. - - 3. Edit file `p.ads'. - - 4. Enter `gnatbind hello'. - - At this point, the file `p.ali' contains an out-of-date time stamp - because the file `p.ads' has been edited. The attempt at binding fails, - and the binder generates the following error messages: - - error: "hello.adb" must be recompiled ("p.ads" has been modified) - error: "p.ads" has been modified and must be recompiled - - Now both files must be recompiled as indicated, and then the bind can - succeed, generating a main program. You need not normally be concerned - with the contents of this file, but it is similar to the following which - is the binder file generated for a simple "hello world" program. - - -- The package is called Ada_Main unless this name is actually used - -- as a unit name in the partition, in which case some other unique - -- name is used. - - with System; - package ada_main is - - Elab_Final_Code : Integer; - pragma Import (C, Elab_Final_Code, "__gnat_inside_elab_final_code"); - - -- The main program saves the parameters (argument count, - -- argument values, environment pointer) in global variables - -- for later access by other units including - -- Ada.Command_Line. - - gnat_argc : Integer; - gnat_argv : System.Address; - gnat_envp : System.Address; - - -- The actual variables are stored in a library routine. This - -- is useful for some shared library situations, where there - -- are problems if variables are not in the library. - - pragma Import (C, gnat_argc); - pragma Import (C, gnat_argv); - pragma Import (C, gnat_envp); - - -- The exit status is similarly an external location - - gnat_exit_status : Integer; - pragma Import (C, gnat_exit_status); - - GNAT_Version : constant String := - "GNAT Version: 3.15w (20010315)"; - pragma Export (C, GNAT_Version, "__gnat_version"); - - -- This is the generated adafinal routine that performs - -- finalization at the end of execution. In the case where - -- Ada is the main program, this main program makes a call - -- to adafinal at program termination. - - procedure adafinal; - pragma Export (C, adafinal, "adafinal"); - - -- This is the generated adainit routine that performs - -- initialization at the start of execution. In the case - -- where Ada is the main program, this main program makes - -- a call to adainit at program startup. - - procedure adainit; - pragma Export (C, adainit, "adainit"); - - -- This routine is called at the start of execution. It is - -- a dummy routine that is used by the debugger to breakpoint - -- at the start of execution. - - procedure Break_Start; - pragma Import (C, Break_Start, "__gnat_break_start"); - - -- This is the actual generated main program (it would be - -- suppressed if the no main program switch were used). As - -- required by standard system conventions, this program has - -- the external name main. - - function main - (argc : Integer; - argv : System.Address; - envp : System.Address) - return Integer; - pragma Export (C, main, "main"); - - -- The following set of constants give the version - -- identification values for every unit in the bound - -- partition. This identification is computed from all - -- dependent semantic units, and corresponds to the - -- string that would be returned by use of the - -- Body_Version or Version attributes. - - type Version_32 is mod 2 ** 32; - u00001 : constant Version_32 := 16#7880BEB3#; - u00002 : constant Version_32 := 16#0D24CBD0#; - u00003 : constant Version_32 := 16#3283DBEB#; - u00004 : constant Version_32 := 16#2359F9ED#; - u00005 : constant Version_32 := 16#664FB847#; - u00006 : constant Version_32 := 16#68E803DF#; - u00007 : constant Version_32 := 16#5572E604#; - u00008 : constant Version_32 := 16#46B173D8#; - u00009 : constant Version_32 := 16#156A40CF#; - u00010 : constant Version_32 := 16#033DABE0#; - u00011 : constant Version_32 := 16#6AB38FEA#; - u00012 : constant Version_32 := 16#22B6217D#; - u00013 : constant Version_32 := 16#68A22947#; - u00014 : constant Version_32 := 16#18CC4A56#; - u00015 : constant Version_32 := 16#08258E1B#; - u00016 : constant Version_32 := 16#367D5222#; - u00017 : constant Version_32 := 16#20C9ECA4#; - u00018 : constant Version_32 := 16#50D32CB6#; - u00019 : constant Version_32 := 16#39A8BB77#; - u00020 : constant Version_32 := 16#5CF8FA2B#; - u00021 : constant Version_32 := 16#2F1EB794#; - u00022 : constant Version_32 := 16#31AB6444#; - u00023 : constant Version_32 := 16#1574B6E9#; - u00024 : constant Version_32 := 16#5109C189#; - u00025 : constant Version_32 := 16#56D770CD#; - u00026 : constant Version_32 := 16#02F9DE3D#; - u00027 : constant Version_32 := 16#08AB6B2C#; - u00028 : constant Version_32 := 16#3FA37670#; - u00029 : constant Version_32 := 16#476457A0#; - u00030 : constant Version_32 := 16#731E1B6E#; - u00031 : constant Version_32 := 16#23C2E789#; - u00032 : constant Version_32 := 16#0F1BD6A1#; - u00033 : constant Version_32 := 16#7C25DE96#; - u00034 : constant Version_32 := 16#39ADFFA2#; - u00035 : constant Version_32 := 16#571DE3E7#; - u00036 : constant Version_32 := 16#5EB646AB#; - u00037 : constant Version_32 := 16#4249379B#; - u00038 : constant Version_32 := 16#0357E00A#; - u00039 : constant Version_32 := 16#3784FB72#; - u00040 : constant Version_32 := 16#2E723019#; - u00041 : constant Version_32 := 16#623358EA#; - u00042 : constant Version_32 := 16#107F9465#; - u00043 : constant Version_32 := 16#6843F68A#; - u00044 : constant Version_32 := 16#63305874#; - u00045 : constant Version_32 := 16#31E56CE1#; - u00046 : constant Version_32 := 16#02917970#; - u00047 : constant Version_32 := 16#6CCBA70E#; - u00048 : constant Version_32 := 16#41CD4204#; - u00049 : constant Version_32 := 16#572E3F58#; - u00050 : constant Version_32 := 16#20729FF5#; - u00051 : constant Version_32 := 16#1D4F93E8#; - u00052 : constant Version_32 := 16#30B2EC3D#; - u00053 : constant Version_32 := 16#34054F96#; - u00054 : constant Version_32 := 16#5A199860#; - u00055 : constant Version_32 := 16#0E7F912B#; - u00056 : constant Version_32 := 16#5760634A#; - u00057 : constant Version_32 := 16#5D851835#; - - -- The following Export pragmas export the version numbers - -- with symbolic names ending in B (for body) or S - -- (for spec) so that they can be located in a link. The - -- information provided here is sufficient to track down - -- the exact versions of units used in a given build. - - pragma Export (C, u00001, "helloB"); - pragma Export (C, u00002, "system__standard_libraryB"); - pragma Export (C, u00003, "system__standard_libraryS"); - pragma Export (C, u00004, "adaS"); - pragma Export (C, u00005, "ada__text_ioB"); - pragma Export (C, u00006, "ada__text_ioS"); - pragma Export (C, u00007, "ada__exceptionsB"); - pragma Export (C, u00008, "ada__exceptionsS"); - pragma Export (C, u00009, "gnatS"); - pragma Export (C, u00010, "gnat__heap_sort_aB"); - pragma Export (C, u00011, "gnat__heap_sort_aS"); - pragma Export (C, u00012, "systemS"); - pragma Export (C, u00013, "system__exception_tableB"); - pragma Export (C, u00014, "system__exception_tableS"); - pragma Export (C, u00015, "gnat__htableB"); - pragma Export (C, u00016, "gnat__htableS"); - pragma Export (C, u00017, "system__exceptionsS"); - pragma Export (C, u00018, "system__machine_state_operationsB"); - pragma Export (C, u00019, "system__machine_state_operationsS"); - pragma Export (C, u00020, "system__machine_codeS"); - pragma Export (C, u00021, "system__storage_elementsB"); - pragma Export (C, u00022, "system__storage_elementsS"); - pragma Export (C, u00023, "system__secondary_stackB"); - pragma Export (C, u00024, "system__secondary_stackS"); - pragma Export (C, u00025, "system__parametersB"); - pragma Export (C, u00026, "system__parametersS"); - pragma Export (C, u00027, "system__soft_linksB"); - pragma Export (C, u00028, "system__soft_linksS"); - pragma Export (C, u00029, "system__stack_checkingB"); - pragma Export (C, u00030, "system__stack_checkingS"); - pragma Export (C, u00031, "system__tracebackB"); - pragma Export (C, u00032, "system__tracebackS"); - pragma Export (C, u00033, "ada__streamsS"); - pragma Export (C, u00034, "ada__tagsB"); - pragma Export (C, u00035, "ada__tagsS"); - pragma Export (C, u00036, "system__string_opsB"); - pragma Export (C, u00037, "system__string_opsS"); - pragma Export (C, u00038, "interfacesS"); - pragma Export (C, u00039, "interfaces__c_streamsB"); - pragma Export (C, u00040, "interfaces__c_streamsS"); - pragma Export (C, u00041, "system__file_ioB"); - pragma Export (C, u00042, "system__file_ioS"); - pragma Export (C, u00043, "ada__finalizationB"); - pragma Export (C, u00044, "ada__finalizationS"); - pragma Export (C, u00045, "system__finalization_rootB"); - pragma Export (C, u00046, "system__finalization_rootS"); - pragma Export (C, u00047, "system__finalization_implementationB"); - pragma Export (C, u00048, "system__finalization_implementationS"); - pragma Export (C, u00049, "system__string_ops_concat_3B"); - pragma Export (C, u00050, "system__string_ops_concat_3S"); - pragma Export (C, u00051, "system__stream_attributesB"); - pragma Export (C, u00052, "system__stream_attributesS"); - pragma Export (C, u00053, "ada__io_exceptionsS"); - pragma Export (C, u00054, "system__unsigned_typesS"); - pragma Export (C, u00055, "system__file_control_blockS"); - pragma Export (C, u00056, "ada__finalization__list_controllerB"); - pragma Export (C, u00057, "ada__finalization__list_controllerS"); - - -- BEGIN ELABORATION ORDER - -- ada (spec) - -- gnat (spec) - -- gnat.heap_sort_a (spec) - -- gnat.heap_sort_a (body) - -- gnat.htable (spec) - -- gnat.htable (body) - -- interfaces (spec) - -- system (spec) - -- system.machine_code (spec) - -- system.parameters (spec) - -- system.parameters (body) - -- interfaces.c_streams (spec) - -- interfaces.c_streams (body) - -- system.standard_library (spec) - -- ada.exceptions (spec) - -- system.exception_table (spec) - -- system.exception_table (body) - -- ada.io_exceptions (spec) - -- system.exceptions (spec) - -- system.storage_elements (spec) - -- system.storage_elements (body) - -- system.machine_state_operations (spec) - -- system.machine_state_operations (body) - -- system.secondary_stack (spec) - -- system.stack_checking (spec) - -- system.soft_links (spec) - -- system.soft_links (body) - -- system.stack_checking (body) - -- system.secondary_stack (body) - -- system.standard_library (body) - -- system.string_ops (spec) - -- system.string_ops (body) - -- ada.tags (spec) - -- ada.tags (body) - -- ada.streams (spec) - -- system.finalization_root (spec) - -- system.finalization_root (body) - -- system.string_ops_concat_3 (spec) - -- system.string_ops_concat_3 (body) - -- system.traceback (spec) - -- system.traceback (body) - -- ada.exceptions (body) - -- system.unsigned_types (spec) - -- system.stream_attributes (spec) - -- system.stream_attributes (body) - -- system.finalization_implementation (spec) - -- system.finalization_implementation (body) - -- ada.finalization (spec) - -- ada.finalization (body) - -- ada.finalization.list_controller (spec) - -- ada.finalization.list_controller (body) - -- system.file_control_block (spec) - -- system.file_io (spec) - -- system.file_io (body) - -- ada.text_io (spec) - -- ada.text_io (body) - -- hello (body) - -- END ELABORATION ORDER - - end ada_main; - - -- The following source file name pragmas allow the generated file - -- names to be unique for different main programs. They are needed - -- since the package name will always be Ada_Main. - - pragma Source_File_Name (ada_main, Spec_File_Name => "b~hello.ads"); - pragma Source_File_Name (ada_main, Body_File_Name => "b~hello.adb"); - - -- Generated package body for Ada_Main starts here - - package body ada_main is - - -- The actual finalization is performed by calling the - -- library routine in System.Standard_Library.Adafinal - - procedure Do_Finalize; - pragma Import (C, Do_Finalize, "system__standard_library__adafinal"); - - ------------- - -- adainit -- - ------------- - - procedure adainit is - - -- These booleans are set to True once the associated unit has - -- been elaborated. It is also used to avoid elaborating the - -- same unit twice. - - E040 : Boolean; pragma Import (Ada, E040, "interfaces__c_streams_E"); - E008 : Boolean; pragma Import (Ada, E008, "ada__exceptions_E"); - E014 : Boolean; pragma Import (Ada, E014, "system__exception_table_E"); - E053 : Boolean; pragma Import (Ada, E053, "ada__io_exceptions_E"); - E017 : Boolean; pragma Import (Ada, E017, "system__exceptions_E"); - E024 : Boolean; pragma Import (Ada, E024, "system__secondary_stack_E"); - E030 : Boolean; pragma Import (Ada, E030, "system__stack_checking_E"); - E028 : Boolean; pragma Import (Ada, E028, "system__soft_links_E"); - E035 : Boolean; pragma Import (Ada, E035, "ada__tags_E"); - E033 : Boolean; pragma Import (Ada, E033, "ada__streams_E"); - E046 : Boolean; pragma Import (Ada, E046, "system__finalization_root_E"); - E048 : Boolean; pragma Import (Ada, E048, "system__finalization_implementation_E"); - E044 : Boolean; pragma Import (Ada, E044, "ada__finalization_E"); - E057 : Boolean; pragma Import (Ada, E057, "ada__finalization__list_controller_E"); - E055 : Boolean; pragma Import (Ada, E055, "system__file_control_block_E"); - E042 : Boolean; pragma Import (Ada, E042, "system__file_io_E"); - E006 : Boolean; pragma Import (Ada, E006, "ada__text_io_E"); - - -- Set_Globals is a library routine that stores away the - -- value of the indicated set of global values in global - -- variables within the library. - - procedure Set_Globals - (Main_Priority : Integer; - Time_Slice_Value : Integer; - WC_Encoding : Character; - Locking_Policy : Character; - Queuing_Policy : Character; - Task_Dispatching_Policy : Character; - Adafinal : System.Address; - Unreserve_All_Interrupts : Integer; - Exception_Tracebacks : Integer); - pragma Import (C, Set_Globals, "__gnat_set_globals"); - - -- SDP_Table_Build is a library routine used to build the - -- exception tables. See unit Ada.Exceptions in files - -- a-except.ads/adb for full details of how zero cost - -- exception handling works. This procedure, the call to - -- it, and the two following tables are all omitted if the - -- build is in longjmp/setjump exception mode. - - procedure SDP_Table_Build - (SDP_Addresses : System.Address; - SDP_Count : Natural; - Elab_Addresses : System.Address; - Elab_Addr_Count : Natural); - pragma Import (C, SDP_Table_Build, "__gnat_SDP_Table_Build"); - - -- Table of Unit_Exception_Table addresses. Used for zero - -- cost exception handling to build the top level table. - - ST : aliased constant array (1 .. 23) of System.Address := ( - Hello'UET_Address, - Ada.Text_Io'UET_Address, - Ada.Exceptions'UET_Address, - Gnat.Heap_Sort_A'UET_Address, - System.Exception_Table'UET_Address, - System.Machine_State_Operations'UET_Address, - System.Secondary_Stack'UET_Address, - System.Parameters'UET_Address, - System.Soft_Links'UET_Address, - System.Stack_Checking'UET_Address, - System.Traceback'UET_Address, - Ada.Streams'UET_Address, - Ada.Tags'UET_Address, - System.String_Ops'UET_Address, - Interfaces.C_Streams'UET_Address, - System.File_Io'UET_Address, - Ada.Finalization'UET_Address, - System.Finalization_Root'UET_Address, - System.Finalization_Implementation'UET_Address, - System.String_Ops_Concat_3'UET_Address, - System.Stream_Attributes'UET_Address, - System.File_Control_Block'UET_Address, - Ada.Finalization.List_Controller'UET_Address); - - -- Table of addresses of elaboration routines. Used for - -- zero cost exception handling to make sure these - -- addresses are included in the top level procedure - -- address table. - - EA : aliased constant array (1 .. 23) of System.Address := ( - adainit'Code_Address, - Do_Finalize'Code_Address, - Ada.Exceptions'Elab_Spec'Address, - System.Exceptions'Elab_Spec'Address, - Interfaces.C_Streams'Elab_Spec'Address, - System.Exception_Table'Elab_Body'Address, - Ada.Io_Exceptions'Elab_Spec'Address, - System.Stack_Checking'Elab_Spec'Address, - System.Soft_Links'Elab_Body'Address, - System.Secondary_Stack'Elab_Body'Address, - Ada.Tags'Elab_Spec'Address, - Ada.Tags'Elab_Body'Address, - Ada.Streams'Elab_Spec'Address, - System.Finalization_Root'Elab_Spec'Address, - Ada.Exceptions'Elab_Body'Address, - System.Finalization_Implementation'Elab_Spec'Address, - System.Finalization_Implementation'Elab_Body'Address, - Ada.Finalization'Elab_Spec'Address, - Ada.Finalization.List_Controller'Elab_Spec'Address, - System.File_Control_Block'Elab_Spec'Address, - System.File_Io'Elab_Body'Address, - Ada.Text_Io'Elab_Spec'Address, - Ada.Text_Io'Elab_Body'Address); - - -- Start of processing for adainit - - begin - - -- Call SDP_Table_Build to build the top level procedure - -- table for zero cost exception handling (omitted in - -- longjmp/setjump mode). - - SDP_Table_Build (ST'Address, 23, EA'Address, 23); - - -- Call Set_Globals to record various information for - -- this partition. The values are derived by the binder - -- from information stored in the ali files by the compiler. - - Set_Globals - (Main_Priority => -1, - -- Priority of main program, -1 if no pragma Priority used - - Time_Slice_Value => -1, - -- Time slice from Time_Slice pragma, -1 if none used - - WC_Encoding => 'b', - -- Wide_Character encoding used, default is brackets - - Locking_Policy => ' ', - -- Locking_Policy used, default of space means not - -- specified, otherwise it is the first character of - -- the policy name. - - Queuing_Policy => ' ', - -- Queuing_Policy used, default of space means not - -- specified, otherwise it is the first character of - -- the policy name. - - Task_Dispatching_Policy => ' ', - -- Task_Dispatching_Policy used, default of space means - -- not specified, otherwise first character of the - -- policy name. - - Adafinal => System.Null_Address, - -- Address of Adafinal routine, not used anymore - - Unreserve_All_Interrupts => 0, - -- Set true if pragma Unreserve_All_Interrupts was used - - Exception_Tracebacks => 0); - -- Indicates if exception tracebacks are enabled - - Elab_Final_Code := 1; - - -- Now we have the elaboration calls for all units in the partition. - -- The Elab_Spec and Elab_Body attributes generate references to the - -- implicit elaboration procedures generated by the compiler for - -- each unit that requires elaboration. - - if not E040 then - Interfaces.C_Streams'Elab_Spec; - end if; - E040 := True; - if not E008 then - Ada.Exceptions'Elab_Spec; - end if; - if not E014 then - System.Exception_Table'Elab_Body; - E014 := True; - end if; - if not E053 then - Ada.Io_Exceptions'Elab_Spec; - E053 := True; - end if; - if not E017 then - System.Exceptions'Elab_Spec; - E017 := True; - end if; - if not E030 then - System.Stack_Checking'Elab_Spec; - end if; - if not E028 then - System.Soft_Links'Elab_Body; - E028 := True; - end if; - E030 := True; - if not E024 then - System.Secondary_Stack'Elab_Body; - E024 := True; - end if; - if not E035 then - Ada.Tags'Elab_Spec; - end if; - if not E035 then - Ada.Tags'Elab_Body; - E035 := True; - end if; - if not E033 then - Ada.Streams'Elab_Spec; - E033 := True; - end if; - if not E046 then - System.Finalization_Root'Elab_Spec; - end if; - E046 := True; - if not E008 then - Ada.Exceptions'Elab_Body; - E008 := True; - end if; - if not E048 then - System.Finalization_Implementation'Elab_Spec; - end if; - if not E048 then - System.Finalization_Implementation'Elab_Body; - E048 := True; - end if; - if not E044 then - Ada.Finalization'Elab_Spec; - end if; - E044 := True; - if not E057 then - Ada.Finalization.List_Controller'Elab_Spec; - end if; - E057 := True; - if not E055 then - System.File_Control_Block'Elab_Spec; - E055 := True; - end if; - if not E042 then - System.File_Io'Elab_Body; - E042 := True; - end if; - if not E006 then - Ada.Text_Io'Elab_Spec; - end if; - if not E006 then - Ada.Text_Io'Elab_Body; - E006 := True; - end if; - - Elab_Final_Code := 0; - end adainit; - - -------------- - -- adafinal -- - -------------- - - procedure adafinal is - begin - Do_Finalize; - end adafinal; - - ---------- - -- main -- - ---------- - - -- main is actually a function, as in the ANSI C standard, - -- defined to return the exit status. The three parameters - -- are the argument count, argument values and environment - -- pointer. - - function main - (argc : Integer; - argv : System.Address; - envp : System.Address) - return Integer - is - -- The initialize routine performs low level system - -- initialization using a standard library routine which - -- sets up signal handling and performs any other - -- required setup. The routine can be found in file - -- a-init.c. - - procedure initialize; - pragma Import (C, initialize, "__gnat_initialize"); - - -- The finalize routine performs low level system - -- finalization using a standard library routine. The - -- routine is found in file a-final.c and in the standard - -- distribution is a dummy routine that does nothing, so - -- really this is a hook for special user finalization. - - procedure finalize; - pragma Import (C, finalize, "__gnat_finalize"); - - -- We get to the main program of the partition by using - -- pragma Import because if we try to with the unit and - -- call it Ada style, then not only do we waste time - -- recompiling it, but also, we don't really know the right - -- switches (e.g. identifier character set) to be used - -- to compile it. - - procedure Ada_Main_Program; - pragma Import (Ada, Ada_Main_Program, "_ada_hello"); - - -- Start of processing for main - - begin - -- Save global variables - - gnat_argc := argc; - gnat_argv := argv; - gnat_envp := envp; - - -- Call low level system initialization - - Initialize; - - -- Call our generated Ada initialization routine - - adainit; - - -- This is the point at which we want the debugger to get - -- control - - Break_Start; - - -- Now we call the main program of the partition - - Ada_Main_Program; - - -- Perform Ada finalization - - adafinal; - - -- Perform low level system finalization - - Finalize; - - -- Return the proper exit status - return (gnat_exit_status); - end; - - -- This section is entirely comments, so it has no effect on the - -- compilation of the Ada_Main package. It provides the list of - -- object files and linker options, as well as some standard - -- libraries needed for the link. The gnatlink utility parses - -- this b~hello.adb file to read these comment lines to generate - -- the appropriate command line arguments for the call to the - -- system linker. The BEGIN/END lines are used for sentinels for - -- this parsing operation. - - -- The exact file names will of course depend on the environment, - -- host/target and location of files on the host system. - - -- BEGIN Object file/option list - -- ./hello.o - -- -L./ - -- -L/usr/local/gnat/lib/gcc-lib/i686-pc-linux-gnu/2.8.1/adalib/ - -- /usr/local/gnat/lib/gcc-lib/i686-pc-linux-gnu/2.8.1/adalib/libgnat.a - -- END Object file/option list - - end ada_main; - - The Ada code in the above example is exactly what is generated by the - binder. We have added comments to more clearly indicate the function of - each part of the generated `Ada_Main' package. - - The code is standard Ada in all respects, and can be processed by any - tools that handle Ada. In particular, it is possible to use the debugger - in Ada mode to debug the generated Ada_Main package. For example, - suppose that for reasons that you do not understand, your program is - blowing up during elaboration of the body of `Ada.Text_IO'. To chase - this bug down, you can place a breakpoint on the call: - - Ada.Text_Io'Elab_Body; - - and trace the elaboration routine for this package to find out where - the problem might be (more usually of course you would be debugging - elaboration code in your own application). - -  - File: gnat_ug_vxw.info, Node: Generating the Binder Program in C, Next: Consistency-Checking Modes, Prev: Running gnatbind, Up: Binding Using gnatbind - - Generating the Binder Program in C - ================================== - - In most normal usage, the default mode of `gnatbind' which is to - generate the main package in Ada, as described in the previous section. - In particular, this means that any Ada programmer can read and - understand the generated main program. It can also be debugged just - like any other Ada code provided the `-g' switch is used for `gnatbind' - and `gnatlink'. - - However for some purposes it may be convenient to generate the main - program in C rather than Ada. This may for example be helpful when you - are generating a mixed language program with the main program in C. The - GNAT compiler itself is an example. The use of the `-C' switch for both - `gnatbind' and `gnatlink' will cause the program to be generated in C - (and compiled using the gnu C compiler). The following shows the C code - generated for the same "Hello World" program: - - - #ifdef __STDC__ - #define PARAMS(paramlist) paramlist - #else - #define PARAMS(paramlist) () - #endif - - extern void __gnat_set_globals - PARAMS ((int, int, int, int, int, int, - void (*) PARAMS ((void)), int, int)); - extern void adafinal PARAMS ((void)); - extern void adainit PARAMS ((void)); - extern void system__standard_library__adafinal PARAMS ((void)); - extern int main PARAMS ((int, char **, char **)); - extern void exit PARAMS ((int)); - extern void __gnat_break_start PARAMS ((void)); - extern void _ada_hello PARAMS ((void)); - extern void __gnat_initialize PARAMS ((void)); - extern void __gnat_finalize PARAMS ((void)); - - extern void ada__exceptions___elabs PARAMS ((void)); - extern void system__exceptions___elabs PARAMS ((void)); - extern void interfaces__c_streams___elabs PARAMS ((void)); - extern void system__exception_table___elabb PARAMS ((void)); - extern void ada__io_exceptions___elabs PARAMS ((void)); - extern void system__stack_checking___elabs PARAMS ((void)); - extern void system__soft_links___elabb PARAMS ((void)); - extern void system__secondary_stack___elabb PARAMS ((void)); - extern void ada__tags___elabs PARAMS ((void)); - extern void ada__tags___elabb PARAMS ((void)); - extern void ada__streams___elabs PARAMS ((void)); - extern void system__finalization_root___elabs PARAMS ((void)); - extern void ada__exceptions___elabb PARAMS ((void)); - extern void system__finalization_implementation___elabs PARAMS ((void)); - extern void system__finalization_implementation___elabb PARAMS ((void)); - extern void ada__finalization___elabs PARAMS ((void)); - extern void ada__finalization__list_controller___elabs PARAMS ((void)); - extern void system__file_control_block___elabs PARAMS ((void)); - extern void system__file_io___elabb PARAMS ((void)); - extern void ada__text_io___elabs PARAMS ((void)); - extern void ada__text_io___elabb PARAMS ((void)); - - extern int __gnat_inside_elab_final_code; - - extern int gnat_argc; - extern char **gnat_argv; - extern char **gnat_envp; - extern int gnat_exit_status; - - char __gnat_version[] = "GNAT Version: 3.15w (20010315)"; - void adafinal () { - system__standard_library__adafinal (); - } - - void adainit () - { - extern char ada__exceptions_E; - extern char system__exceptions_E; - extern char interfaces__c_streams_E; - extern char system__exception_table_E; - extern char ada__io_exceptions_E; - extern char system__secondary_stack_E; - extern char system__stack_checking_E; - extern char system__soft_links_E; - extern char ada__tags_E; - extern char ada__streams_E; - extern char system__finalization_root_E; - extern char system__finalization_implementation_E; - extern char ada__finalization_E; - extern char ada__finalization__list_controller_E; - extern char system__file_control_block_E; - extern char system__file_io_E; - extern char ada__text_io_E; - - extern void *__gnat_hello__SDP; - extern void *__gnat_ada__text_io__SDP; - extern void *__gnat_ada__exceptions__SDP; - extern void *__gnat_gnat__heap_sort_a__SDP; - extern void *__gnat_system__exception_table__SDP; - extern void *__gnat_system__machine_state_operations__SDP; - extern void *__gnat_system__secondary_stack__SDP; - extern void *__gnat_system__parameters__SDP; - extern void *__gnat_system__soft_links__SDP; - extern void *__gnat_system__stack_checking__SDP; - extern void *__gnat_system__traceback__SDP; - extern void *__gnat_ada__streams__SDP; - extern void *__gnat_ada__tags__SDP; - extern void *__gnat_system__string_ops__SDP; - extern void *__gnat_interfaces__c_streams__SDP; - extern void *__gnat_system__file_io__SDP; - extern void *__gnat_ada__finalization__SDP; - extern void *__gnat_system__finalization_root__SDP; - extern void *__gnat_system__finalization_implementation__SDP; - extern void *__gnat_system__string_ops_concat_3__SDP; - extern void *__gnat_system__stream_attributes__SDP; - extern void *__gnat_system__file_control_block__SDP; - extern void *__gnat_ada__finalization__list_controller__SDP; - - void **st[23] = { - &__gnat_hello__SDP, - &__gnat_ada__text_io__SDP, - &__gnat_ada__exceptions__SDP, - &__gnat_gnat__heap_sort_a__SDP, - &__gnat_system__exception_table__SDP, - &__gnat_system__machine_state_operations__SDP, - &__gnat_system__secondary_stack__SDP, - &__gnat_system__parameters__SDP, - &__gnat_system__soft_links__SDP, - &__gnat_system__stack_checking__SDP, - &__gnat_system__traceback__SDP, - &__gnat_ada__streams__SDP, - &__gnat_ada__tags__SDP, - &__gnat_system__string_ops__SDP, - &__gnat_interfaces__c_streams__SDP, - &__gnat_system__file_io__SDP, - &__gnat_ada__finalization__SDP, - &__gnat_system__finalization_root__SDP, - &__gnat_system__finalization_implementation__SDP, - &__gnat_system__string_ops_concat_3__SDP, - &__gnat_system__stream_attributes__SDP, - &__gnat_system__file_control_block__SDP, - &__gnat_ada__finalization__list_controller__SDP}; - - extern void ada__exceptions___elabs (); - extern void system__exceptions___elabs (); - extern void interfaces__c_streams___elabs (); - extern void system__exception_table___elabb (); - extern void ada__io_exceptions___elabs (); - extern void system__stack_checking___elabs (); - extern void system__soft_links___elabb (); - extern void system__secondary_stack___elabb (); - extern void ada__tags___elabs (); - extern void ada__tags___elabb (); - extern void ada__streams___elabs (); - extern void system__finalization_root___elabs (); - extern void ada__exceptions___elabb (); - extern void system__finalization_implementation___elabs (); - extern void system__finalization_implementation___elabb (); - extern void ada__finalization___elabs (); - extern void ada__finalization__list_controller___elabs (); - extern void system__file_control_block___elabs (); - extern void system__file_io___elabb (); - extern void ada__text_io___elabs (); - extern void ada__text_io___elabb (); - - void (*ea[23]) () = { - adainit, - system__standard_library__adafinal, - ada__exceptions___elabs, - system__exceptions___elabs, - interfaces__c_streams___elabs, - system__exception_table___elabb, - ada__io_exceptions___elabs, - system__stack_checking___elabs, - system__soft_links___elabb, - system__secondary_stack___elabb, - ada__tags___elabs, - ada__tags___elabb, - ada__streams___elabs, - system__finalization_root___elabs, - ada__exceptions___elabb, - system__finalization_implementation___elabs, - system__finalization_implementation___elabb, - ada__finalization___elabs, - ada__finalization__list_controller___elabs, - system__file_control_block___elabs, - system__file_io___elabb, - ada__text_io___elabs, - ada__text_io___elabb}; - - __gnat_SDP_Table_Build (&st, 23, ea, 23); - __gnat_set_globals ( - -1, /* Main_Priority */ - -1, /* Time_Slice_Value */ - 'b', /* WC_Encoding */ - ' ', /* Locking_Policy */ - ' ', /* Queuing_Policy */ - ' ', /* Tasking_Dispatching_Policy */ - 0, /* Finalization routine address, not used anymore */ - 0, /* Unreserve_All_Interrupts */ - 0); /* Exception_Tracebacks */ - - __gnat_inside_elab_final_code = 1; - - if (ada__exceptions_E == 0) { - ada__exceptions___elabs (); - } - if (system__exceptions_E == 0) { - system__exceptions___elabs (); - system__exceptions_E++; - } - if (interfaces__c_streams_E == 0) { - interfaces__c_streams___elabs (); - } - interfaces__c_streams_E = 1; - if (system__exception_table_E == 0) { - system__exception_table___elabb (); - system__exception_table_E++; - } - if (ada__io_exceptions_E == 0) { - ada__io_exceptions___elabs (); - ada__io_exceptions_E++; - } - if (system__stack_checking_E == 0) { - system__stack_checking___elabs (); - } - if (system__soft_links_E == 0) { - system__soft_links___elabb (); - system__soft_links_E++; - } - system__stack_checking_E = 1; - if (system__secondary_stack_E == 0) { - system__secondary_stack___elabb (); - system__secondary_stack_E++; - } - if (ada__tags_E == 0) { - ada__tags___elabs (); - } - if (ada__tags_E == 0) { - ada__tags___elabb (); - ada__tags_E++; - } - if (ada__streams_E == 0) { - ada__streams___elabs (); - ada__streams_E++; - } - if (system__finalization_root_E == 0) { - system__finalization_root___elabs (); - } - system__finalization_root_E = 1; - if (ada__exceptions_E == 0) { - ada__exceptions___elabb (); - ada__exceptions_E++; - } - if (system__finalization_implementation_E == 0) { - system__finalization_implementation___elabs (); - } - if (system__finalization_implementation_E == 0) { - system__finalization_implementation___elabb (); - system__finalization_implementation_E++; - } - if (ada__finalization_E == 0) { - ada__finalization___elabs (); - } - ada__finalization_E = 1; - if (ada__finalization__list_controller_E == 0) { - ada__finalization__list_controller___elabs (); - } - ada__finalization__list_controller_E = 1; - if (system__file_control_block_E == 0) { - system__file_control_block___elabs (); - system__file_control_block_E++; - } - if (system__file_io_E == 0) { - system__file_io___elabb (); - system__file_io_E++; - } - if (ada__text_io_E == 0) { - ada__text_io___elabs (); - } - if (ada__text_io_E == 0) { - ada__text_io___elabb (); - ada__text_io_E++; - } - - __gnat_inside_elab_final_code = 0; - } - int main (argc, argv, envp) - int argc; - char **argv; - char **envp; - { - gnat_argc = argc; - gnat_argv = argv; - gnat_envp = envp; - - __gnat_initialize (); - adainit (); - __gnat_break_start (); - - _ada_hello (); - - system__standard_library__adafinal (); - __gnat_finalize (); - exit (gnat_exit_status); - } - unsigned helloB = 0x7880BEB3; - unsigned system__standard_libraryB = 0x0D24CBD0; - unsigned system__standard_libraryS = 0x3283DBEB; - unsigned adaS = 0x2359F9ED; - unsigned ada__text_ioB = 0x47C85FC4; - unsigned ada__text_ioS = 0x496FE45C; - unsigned ada__exceptionsB = 0x74F50187; - unsigned ada__exceptionsS = 0x6736945B; - unsigned gnatS = 0x156A40CF; - unsigned gnat__heap_sort_aB = 0x033DABE0; - unsigned gnat__heap_sort_aS = 0x6AB38FEA; - unsigned systemS = 0x0331C6FE; - unsigned system__exceptionsS = 0x20C9ECA4; - unsigned system__exception_tableB = 0x68A22947; - unsigned system__exception_tableS = 0x394BADD5; - unsigned gnat__htableB = 0x08258E1B; - unsigned gnat__htableS = 0x367D5222; - unsigned system__machine_state_operationsB = 0x4F3B7492; - unsigned system__machine_state_operationsS = 0x182F5CF4; - unsigned system__storage_elementsB = 0x2F1EB794; - unsigned system__storage_elementsS = 0x102C83C7; - unsigned system__secondary_stackB = 0x1574B6E9; - unsigned system__secondary_stackS = 0x708E260A; - unsigned system__parametersB = 0x56D770CD; - unsigned system__parametersS = 0x237E39BE; - unsigned system__soft_linksB = 0x08AB6B2C; - unsigned system__soft_linksS = 0x1E2491F3; - unsigned system__stack_checkingB = 0x476457A0; - unsigned system__stack_checkingS = 0x5299FCED; - unsigned system__tracebackB = 0x2971EBDE; - unsigned system__tracebackS = 0x2E9C3122; - unsigned ada__streamsS = 0x7C25DE96; - unsigned ada__tagsB = 0x39ADFFA2; - unsigned ada__tagsS = 0x769A0464; - unsigned system__string_opsB = 0x5EB646AB; - unsigned system__string_opsS = 0x63CED018; - unsigned interfacesS = 0x0357E00A; - unsigned interfaces__c_streamsB = 0x3784FB72; - unsigned interfaces__c_streamsS = 0x2E723019; - unsigned system__file_ioB = 0x623358EA; - unsigned system__file_ioS = 0x31F873E6; - unsigned ada__finalizationB = 0x6843F68A; - unsigned ada__finalizationS = 0x63305874; - unsigned system__finalization_rootB = 0x31E56CE1; - unsigned system__finalization_rootS = 0x23169EF3; - unsigned system__finalization_implementationB = 0x6CCBA70E; - unsigned system__finalization_implementationS = 0x604AA587; - unsigned system__string_ops_concat_3B = 0x572E3F58; - unsigned system__string_ops_concat_3S = 0x01F57876; - unsigned system__stream_attributesB = 0x1D4F93E8; - unsigned system__stream_attributesS = 0x30B2EC3D; - unsigned ada__io_exceptionsS = 0x34054F96; - unsigned system__unsigned_typesS = 0x7B9E7FE3; - unsigned system__file_control_blockS = 0x2FF876A8; - unsigned ada__finalization__list_controllerB = 0x5760634A; - unsigned ada__finalization__list_controllerS = 0x5D851835; - - /* BEGIN ELABORATION ORDER - ada (spec) - gnat (spec) - gnat.heap_sort_a (spec) - gnat.htable (spec) - gnat.htable (body) - interfaces (spec) - system (spec) - system.parameters (spec) - system.standard_library (spec) - ada.exceptions (spec) - system.exceptions (spec) - system.parameters (body) - gnat.heap_sort_a (body) - interfaces.c_streams (spec) - interfaces.c_streams (body) - system.exception_table (spec) - system.exception_table (body) - ada.io_exceptions (spec) - system.storage_elements (spec) - system.storage_elements (body) - system.machine_state_operations (spec) - system.machine_state_operations (body) - system.secondary_stack (spec) - system.stack_checking (spec) - system.soft_links (spec) - system.soft_links (body) - system.stack_checking (body) - system.secondary_stack (body) - system.standard_library (body) - system.string_ops (spec) - system.string_ops (body) - ada.tags (spec) - ada.tags (body) - ada.streams (spec) - system.finalization_root (spec) - system.finalization_root (body) - system.string_ops_concat_3 (spec) - system.string_ops_concat_3 (body) - system.traceback (spec) - system.traceback (body) - ada.exceptions (body) - system.unsigned_types (spec) - system.stream_attributes (spec) - system.stream_attributes (body) - system.finalization_implementation (spec) - system.finalization_implementation (body) - ada.finalization (spec) - ada.finalization (body) - ada.finalization.list_controller (spec) - ada.finalization.list_controller (body) - system.file_control_block (spec) - system.file_io (spec) - system.file_io (body) - ada.text_io (spec) - ada.text_io (body) - hello (body) - END ELABORATION ORDER */ - - /* BEGIN Object file/option list - ./hello.o - -L./ - -L/usr/local/gnat/lib/gcc-lib/alpha-dec-osf5.1/2.8.1/adalib/ - /usr/local/gnat/lib/gcc-lib/alpha-dec-osf5.1/2.8.1/adalib/libgnat.a - -lexc - END Object file/option list */ - - Here again, the C code is exactly what is generated by the binder. The - functions of the various parts of this code correspond in an obvious - manner with the commented Ada code shown in the example in the previous - section. - -  - File: gnat_ug_vxw.info, Node: Consistency-Checking Modes, Next: Binder Error Message Control, Prev: Generating the Binder Program in C, Up: Binding Using gnatbind - - Consistency-Checking Modes - ========================== - - As described in the previous section, by default `gnatbind' checks that - object files are consistent with one another and are consistent with - any source files it can locate. The following switches control binder - access to sources. - - `-s' - Require source files to be present. In this mode, the binder must - be able to locate all source files that are referenced, in order - to check their consistency. In normal mode, if a source file - cannot be located it is simply ignored. If you specify this - switch, a missing source file is an error. - - `-x' - Exclude source files. In this mode, the binder only checks that ALI - files are consistent with one another. Source files are not - accessed. The binder runs faster in this mode, and there is still - a guarantee that the resulting program is self-consistent. If a - source file has been edited since it was last compiled, and you - specify this switch, the binder will not detect that the object - file is out of date with respect to the source file. Note that - this is the mode that is automatically used by `gnatmake' because - in this case the checking against sources has already been - performed by `gnatmake' in the course of compilation (i.e. before - binding). - -  - File: gnat_ug_vxw.info, Node: Binder Error Message Control, Next: Elaboration Control, Prev: Consistency-Checking Modes, Up: Binding Using gnatbind - - Binder Error Message Control - ============================ - - The following switches provide control over the generation of error - messages from the binder: - - `-v' - Verbose mode. In the normal mode, brief error messages are - generated to `stderr'. If this switch is present, a header is - written to `stdout' and any error messages are directed to - `stdout'. All that is written to `stderr' is a brief summary - message. - - `-b' - Generate brief error messages to `stderr' even if verbose mode is - specified. This is relevant only when used with the `-v' switch. - - `-mN' - Limits the number of error messages to N, a decimal integer in the - range 1-999. The binder terminates immediately if this limit is - reached. - - `-MXXX' - Renames the generated main program from `main' to `xxx'. This is - useful in the case of some cross-building environments, where the - actual main program is separate from the one generated by - `gnatbind'. - - `-ws' - Suppress all warning messages. - - `-we' - Treat any warning messages as fatal errors. - - `-t' - The binder performs a number of consistency checks including: - - * Check that time stamps of a given source unit are consistent - - * Check that checksums of a given source unit are consistent - - * Check that consistent versions of `GNAT' were used for - compilation - - * Check consistency of configuration pragmas as required - - Normally failure of such checks, in accordance with the consistency - requirements of the Ada Reference Manual, causes error messages to - be generated which abort the binder and prevent the output of a - binder file and subsequent link to obtain an executable. - - The `-t' switch converts these error messages into warnings, so - that binding and linking can continue to completion even in the - presence of such errors. The result may be a failed link (due to - missing symbols), or a non-functional executable which has - undefined semantics. _This means that `-t' should be used only in - unusual situations, with extreme care._ - -  - File: gnat_ug_vxw.info, Node: Elaboration Control, Next: Output Control, Prev: Binder Error Message Control, Up: Binding Using gnatbind - - Elaboration Control - =================== - - The following switches provide additional control over the elaboration - order. For full details see *Note Elaboration Order Handling in GNAT::. - - `-p' - Normally the binder attempts to choose an elaboration order that is - likely to minimize the likelihood of an elaboration order error - resulting in raising a `Program_Error' exception. This switch - reverses the action of the binder, and requests that it - deliberately choose an order that is likely to maximize the - likelihood of an elaboration error. This is useful in ensuring - portability and avoiding dependence on accidental fortuitous - elaboration ordering. - - Normally it only makes sense to use the `-p' switch if dynamic - elaboration checking is used (`-gnatE' switch used for - compilation). This is because in the default static elaboration - mode, all necessary `Elaborate_All' pragmas are implicitly - inserted. These implicit pragmas are still respected by the binder - in `-p' mode, so a safe elaboration order is assured. - -  - File: gnat_ug_vxw.info, Node: Output Control, Next: Binding with Non-Ada Main Programs, Prev: Elaboration Control, Up: Binding Using gnatbind - - Output Control - ============== - - The following switches allow additional control over the output - generated by the binder. - - `-A' - Generate binder program in Ada (default). The binder program is - named `b~MAINPROG.adb' by default. This can be changed with `-o' - `gnatbind' option. - - `-c' - Check only. Do not generate the binder output file. In this mode - the binder performs all error checks but does not generate an - output file. - - `-C' - Generate binder program in C. The binder program is named - `b_MAINPROG.c'. This can be changed with `-o' `gnatbind' option. - - `-e' - Output complete list of elaboration-order dependencies, showing the - reason for each dependency. This output can be rather extensive - but may be useful in diagnosing problems with elaboration order. - The output is written to `stdout'. - - `-h' - Output usage information. The output is written to `stdout'. - - `-K' - Output linker options to `stdout'. Includes library search paths, - contents of pragmas Ident and Linker_Options, and libraries added - by `gnatbind'. - - `-l' - Output chosen elaboration order. The output is written to `stdout'. - - `-O' - Output full names of all the object files that must be linked to - provide the Ada component of the program. The output is written to - `stdout'. This list includes the files explicitly supplied and - referenced by the user as well as implicitly referenced run-time - unit files. The latter are omitted if the corresponding units - reside in shared libraries. The directory names for the run-time - units depend on the system configuration. - - `-o FILE' - Set name of output file to FILE instead of the normal - `b~MAINPROG.adb' default. Note that FILE denote the Ada binder - generated body filename. In C mode you would normally give FILE an - extension of `.c' because it will be a C source program. Note - that if this option is used, then linking must be done manually. - It is not possible to use gnatlink in this case, since it cannot - locate the binder file. - - `-r' - Generate list of `pragma Rerstrictions' that could be applied to - the current unit. This is useful for code audit purposes, and also - may be used to improve code generation in some cases. - -  - File: gnat_ug_vxw.info, Node: Binding with Non-Ada Main Programs, Next: Binding Programs with No Main Subprogram, Prev: Output Control, Up: Binding Using gnatbind - - Binding with Non-Ada Main Programs - ================================== - - In our description so far we have assumed that the main program is in - Ada, and that the task of the binder is to generate a corresponding - function `main' that invokes this Ada main program. GNAT also supports - the building of executable programs where the main program is not in - Ada, but some of the called routines are written in Ada and compiled - using GNAT (*note Mixed Language Programming::). The following switch - is used in this situation: - - `-n' - No main program. The main program is not in Ada. - - In this case, most of the functions of the binder are still required, - but instead of generating a main program, the binder generates a file - containing the following callable routines: - - `adainit' - You must call this routine to initialize the Ada part of the - program by calling the necessary elaboration routines. A call to - `adainit' is required before the first call to an Ada subprogram. - - Note that it is assumed that the basic execution environment must - be setup to be appropriate for Ada execution at the point where - the first Ada subprogram is called. In particular, if the Ada code - will do any floating-point operations, then the FPU must be setup - in an appropriate manner. For the case of the x86, for example, - full precision mode is required. The procedure - GNAT.Float_Control.Reset may be used to ensure that the FPU is in - the right state. - - `adafinal' - You must call this routine to perform any library-level - finalization required by the Ada subprograms. A call to `adafinal' - is required after the last call to an Ada subprogram, and before - the program terminates. - - If the `-n' switch is given, more than one ALI file may appear on the - command line for `gnatbind'. The normal "closure" calculation is - performed for each of the specified units. Calculating the closure - means finding out the set of units involved by tracing `with' - references. The reason it is necessary to be able to specify more than - one ALI file is that a given program may invoke two or more quite - separate groups of Ada units. - - The binder takes the name of its output file from the last specified - ALI file, unless overridden by the use of the `-o file'. The output is - an Ada unit in source form that can be compiled with GNAT unless the -C - switch is used in which case the output is a C source file, which must - be compiled using the C compiler. This compilation occurs - automatically as part of the `gnatlink' processing. - - Currently the GNAT run time requires a FPU using 80 bits mode - precision. Under targets where this is not the default it is required to - call GNAT.Float_Control.Reset before using floating point numbers (this - include float computation, float input and output) in the Ada code. A - side effect is that this could be the wrong mode for the foreign code - where floating point computation could be broken after this call. - -  - File: gnat_ug_vxw.info, Node: Binding Programs with No Main Subprogram, Next: Summary of Binder Switches, Prev: Binding with Non-Ada Main Programs, Up: Binding Using gnatbind - - Binding Programs with No Main Subprogram - ======================================== - - It is possible to have an Ada program which does not have a main - subprogram. This program will call the elaboration routines of all the - packages, then the finalization routines. - - The following switch is used to bind programs organized in this - manner: - - `-z' - Normally the binder checks that the unit name given on the command - line corresponds to a suitable main subprogram. When this switch - is used, a list of ALI files can be given, and the execution of - the program consists of elaboration of these units in an - appropriate order. - -  - File: gnat_ug_vxw.info, Node: Summary of Binder Switches, Next: Command-Line Access, Prev: Binding Programs with No Main Subprogram, Up: Binding Using gnatbind - - Summary of Binder Switches - ========================== - - The following are the switches available with `gnatbind': - - `-aO' - Specify directory to be searched for ALI files. - - `-aI' - Specify directory to be searched for source file. - - `-A' - Generate binder program in Ada (default) - - `-b' - Generate brief messages to `stderr' even if verbose mode set. - - `-c' - Check only, no generation of binder output file. - - `-C' - Generate binder program in C - - `-e' - Output complete list of elaboration-order dependencies. - - `-E' - Store tracebacks in exception occurrences when the target supports - it. This is the default with the zero cost exception mechanism. - This option is currently supported on the following targets: all - x86 ports, Solaris, Windows, HP-UX, AIX, PowerPC VxWorks and Alpha - VxWorks. See also the packages `GNAT.Traceback' and - `GNAT.Traceback.Symbolic' for more information. Note that on x86 - ports, you must not use `-fomit-frame-pointer' `gcc' option. - - `-h' - Output usage (help) information - - `-I' - Specify directory to be searched for source and ALI files. - - `-I-' - Do not look for sources in the current directory where `gnatbind' - was invoked, and do not look for ALI files in the directory - containing the ALI file named in the `gnatbind' command line. - - `-l' - Output chosen elaboration order. - - `-Lxxx' - Binds the units for library building. In this case the adainit and - adafinal procedures (See *note Binding with Non-Ada Main - Programs::) are renamed to xxxinit and xxxfinal. Implies -n. See - *note GNAT and Libraries:: for more details. - - `-Mxyz' - Rename generated main program from main to xyz - - `-mN' - Limit number of detected errors to N (1-999). - - `-n' - No main program. - - `-nostdinc' - Do not look for sources in the system default directory. - - `-nostdlib' - Do not look for library files in the system default directory. - - `--RTS=RTS-PATH' - Specifies the default location of the runtime library. Same - meaning as the equivalent `gnatmake' flag (see *Note Switches for - gnatmake::). - - `-o FILE' - Name the output file FILE (default is `b~XXX.adb'). Note that if - this option is used, then linking must be done manually, gnatlink - cannot be used. - - `-O' - Output object list. - - `-p' - Pessimistic (worst-case) elaboration order - - `-s' - Require all source files to be present. - - `-static' - Link against a static GNAT run time. - - `-shared' - Link against a shared GNAT run time when available. - - `-t' - Tolerate time stamp and other consistency errors - - `-TN' - Set the time slice value to n microseconds. A value of zero means - no time slicing and also indicates to the tasking run time to - match as close as possible to the annex D requirements of the RM. - - `-v' - Verbose mode. Write error messages, header, summary output to - `stdout'. - - `-wX' - Warning mode (X=s/e for suppress/treat as error) - - `-x' - Exclude source files (check object consistency only). - - `-z' - No main subprogram. - - You may obtain this listing by running the program `gnatbind' with - no arguments. - -  - File: gnat_ug_vxw.info, Node: Command-Line Access, Next: Search Paths for gnatbind, Prev: Summary of Binder Switches, Up: Binding Using gnatbind - - Command-Line Access - =================== - - The package `Ada.Command_Line' provides access to the command-line - arguments and program name. In order for this interface to operate - correctly, the two variables - - int gnat_argc; - char **gnat_argv; - - are declared in one of the GNAT library routines. These variables must - be set from the actual `argc' and `argv' values passed to the main - program. With no `n' present, `gnatbind' generates the C main program - to automatically set these variables. If the `n' switch is used, there - is no automatic way to set these variables. If they are not set, the - procedures in `Ada.Command_Line' will not be available, and any attempt - to use them will raise `Constraint_Error'. If command line access is - required, your main program must set `gnat_argc' and `gnat_argv' from - the `argc' and `argv' values passed to it. - -  - File: gnat_ug_vxw.info, Node: Search Paths for gnatbind, Next: Examples of gnatbind Usage, Prev: Command-Line Access, Up: Binding Using gnatbind - - Search Paths for `gnatbind' - =========================== - - The binder takes the name of an ALI file as its argument and needs to - locate source files as well as other ALI files to verify object - consistency. - - For source files, it follows exactly the same search rules as `gcc' - (*note Search Paths and the Run-Time Library (RTL)::). For ALI files the - directories searched are: - - 1. The directory containing the ALI file named in the command line, - unless the switch `-I-' is specified. - - 2. All directories specified by `-I' switches on the `gnatbind' - command line, in the order given. - - 3. Each of the directories listed in the value of the - `ADA_OBJECTS_PATH' environment variable. Construct this value - exactly as the `PATH' environment variable: a list of directory - names separated by colons (semicolons when working with the NT - version of GNAT). - - 4. The content of the "ada_object_path" file which is part of the GNAT - installation tree and is used to store standard libraries such as - the GNAT Run Time Library (RTL) unless the switch `-nostdlib' is - specified. *Note Installing an Ada Library:: - - In the binder the switch `-I' is used to specify both source and - library file paths. Use `-aI' instead if you want to specify source - paths only, and `-aO' if you want to specify library paths only. This - means that for the binder `-I'DIR is equivalent to `-aI'DIR `-aO'DIR. - The binder generates the bind file (a C language source file) in the - current working directory. - - The packages `Ada', `System', and `Interfaces' and their children - make up the GNAT Run-Time Library, together with the package GNAT and - its children, which contain a set of useful additional library - functions provided by GNAT. The sources for these units are needed by - the compiler and are kept together in one directory. The ALI files and - object files generated by compiling the RTL are needed by the binder - and the linker and are kept together in one directory, typically - different from the directory containing the sources. In a normal - installation, you need not specify these directory names when compiling - or binding. Either the environment variables or the built-in defaults - cause these files to be found. - - Besides simplifying access to the RTL, a major use of search paths is - in compiling sources from multiple directories. This can make - development environments much more flexible. - -  - File: gnat_ug_vxw.info, Node: Examples of gnatbind Usage, Prev: Search Paths for gnatbind, Up: Binding Using gnatbind - - Examples of `gnatbind' Usage - ============================ - - This section contains a number of examples of using the GNAT binding - utility `gnatbind'. - - `gnatbind hello' - The main program `Hello' (source program in `hello.adb') is bound - using the standard switch settings. The generated main program is - `b~hello.adb'. This is the normal, default use of the binder. - - `gnatbind hello -o mainprog.adb' - The main program `Hello' (source program in `hello.adb') is bound - using the standard switch settings. The generated main program is - `mainprog.adb' with the associated spec in `mainprog.ads'. Note - that you must specify the body here not the spec, in the case - where the output is in Ada. Note that if this option is used, then - linking must be done manually, since gnatlink will not be able to - find the generated file. - - `gnatbind main -C -o mainprog.c -x' - The main program `Main' (source program in `main.adb') is bound, - excluding source files from the consistency checking, generating - the file `mainprog.c'. - - `gnatbind -x main_program -C -o mainprog.c' - This command is exactly the same as the previous example. Switches - may appear anywhere in the command line, and single letter - switches may be combined into a single switch. - - `gnatbind -n math dbase -C -o ada-control.c' - The main program is in a language other than Ada, but calls to - subprograms in packages `Math' and `Dbase' appear. This call to - `gnatbind' generates the file `ada-control.c' containing the - `adainit' and `adafinal' routines to be called before and after - accessing the Ada units. - -  - File: gnat_ug_vxw.info, Node: Linking Using gnatlink, Next: The GNAT Make Program gnatmake, Prev: Binding Using gnatbind, Up: Top - - Linking Using `gnatlink' - ************************ - - This chapter discusses `gnatlink', a utility program used to link Ada - programs and build an executable file. This is a simple program that - invokes the Unix linker (via the `gcc' command) with a correct list of - object files and library references. `gnatlink' automatically - determines the list of files and references for the Ada part of a - program. It uses the binder file generated by the binder to determine - this list. - - * Menu: - - * Running gnatlink:: - * Switches for gnatlink:: - * Setting Stack Size from gnatlink:: - * Setting Heap Size from gnatlink:: - -  - File: gnat_ug_vxw.info, Node: Running gnatlink, Next: Switches for gnatlink, Up: Linking Using gnatlink - - Running `gnatlink' - ================== - - The form of the `gnatlink' command is - - $ gnatlink [SWITCHES] MAINPROG[.ali] [NON-ADA OBJECTS] - [LINKER OPTIONS] - - `MAINPROG.ali' references the ALI file of the main program. The `.ali' - extension of this file can be omitted. From this reference, `gnatlink' - locates the corresponding binder file `b~MAINPROG.adb' and, using the - information in this file along with the list of non-Ada objects and - linker options, constructs a Unix linker command file to create the - executable. - - The arguments following `MAINPROG.ali' are passed to the linker - uninterpreted. They typically include the names of object files for - units written in other languages than Ada and any library references - required to resolve references in any of these foreign language units, - or in `pragma Import' statements in any Ada units. - - LINKER OPTIONS is an optional list of linker specific switches. The - default linker called by gnatlink is GCC which in turn calls the - appropriate system linker usually called LD. Standard options for the - linker such as `-lmy_lib' or `-Ldir' can be added as is. For options - that are not recognized by GCC as linker options, the GCC switches - `-Xlinker' or `-Wl,' shall be used. Refer to the GCC documentation for - details. Here is an example showing how to generate a linker map - assuming that the underlying linker is GNU ld: - - $ gnatlink my_prog -Wl,-Map,MAPFILE - - Using LINKER OPTIONS it is possible to set the program stack and - heap size. See *note Setting Stack Size from gnatlink:: and *note - Setting Heap Size from gnatlink::. - - `gnatlink' determines the list of objects required by the Ada - program and prepends them to the list of objects passed to the linker. - `gnatlink' also gathers any arguments set by the use of `pragma - Linker_Options' and adds them to the list of arguments presented to the - linker. - -  - File: gnat_ug_vxw.info, Node: Switches for gnatlink, Next: Setting Stack Size from gnatlink, Prev: Running gnatlink, Up: Linking Using gnatlink - - Switches for `gnatlink' - ======================= - - The following switches are available with the `gnatlink' utility: - - `-A' - The binder has generated code in Ada. This is the default. - - `-C' - If instead of generating a file in Ada, the binder has generated - one in C, then the linker needs to know about it. Use this switch - to signal to `gnatlink' that the binder has generated C code - rather than Ada code. - - `-f' - On some targets, the command line length is limited, and `gnatlink' - will generate a separate file for the linker if the list of object - files is too long. The `-f' flag forces this file to be generated - even if the limit is not exceeded. This is useful in some cases to - deal with special situations where the command line length is - exceeded. - - `-g' - The option to include debugging information causes the Ada bind - file (in other words, `b~MAINPROG.adb') to be compiled with `-g'. - In addition, the binder does not delete the `b~MAINPROG.adb', - `b~MAINPROG.o' and `b~MAINPROG.ali' files. Without `-g', the - binder removes these files by default. The same procedure apply if - a C bind file was generated using `-C' `gnatbind' option, in this - case the filenames are `b_MAINPROG.c' and `b_MAINPROG.o'. - - `-n' - Do not compile the file generated by the binder. This may be used - when a link is rerun with different options, but there is no need - to recompile the binder file. - - `-v' - Causes additional information to be output, including a full list - of the included object files. This switch option is most useful - when you want to see what set of object files are being used in - the link step. - - `-v -v' - Very verbose mode. Requests that the compiler operate in verbose - mode when it compiles the binder file, and that the system linker - run in verbose mode. - - `-o EXEC-NAME' - EXEC-NAME specifies an alternate name for the generated executable - program. If this switch is omitted, the executable has the same - name as the main unit. For example, `gnatlink try.ali' creates an - executable called `try'. - - `-b TARGET' - Compile your program to run on TARGET, which is the name of a - system configuration. You must have a GNAT cross-compiler built if - TARGET is not the same as your host system. - - `-BDIR' - Load compiler executables (for example, `gnat1', the Ada compiler) - from DIR instead of the default location. Only use this switch - when multiple versions of the GNAT compiler are available. See the - `gcc' manual page for further details. You would normally use the - `-b' or `-V' switch instead. - - `--GCC=COMPILER_NAME' - Program used for compiling the binder file. The default is - ``gcc''. You need to use quotes around COMPILER_NAME if - `compiler_name' contains spaces or other separator characters. As - an example `--GCC="foo -x -y"' will instruct `gnatlink' to use - `foo -x -y' as your compiler. Note that switch `-c' is always - inserted after your command name. Thus in the above example the - compiler command that will be used by `gnatlink' will be `foo -c - -x -y'. If several `--GCC=compiler_name' are used, only the last - COMPILER_NAME is taken into account. However, all the additional - switches are also taken into account. Thus, `--GCC="foo -x -y" - --GCC="bar -z -t"' is equivalent to `--GCC="bar -x -y -z -t"'. - - `--LINK=NAME' - NAME is the name of the linker to be invoked. This is especially - useful in mixed language programs since languages such as c++ - require their own linker to be used. When this switch is omitted, - the default name for the linker is (`gcc'). When this switch is - used, the specified linker is called instead of (`gcc') with - exactly the same parameters that would have been passed to (`gcc') - so if the desired linker requires different parameters it is - necessary to use a wrapper script that massages the parameters - before invoking the real linker. It may be useful to control the - exact invocation by using the verbose switch. - -  - File: gnat_ug_vxw.info, Node: Setting Stack Size from gnatlink, Next: Setting Heap Size from gnatlink, Prev: Switches for gnatlink, Up: Linking Using gnatlink - - Setting Stack Size from `gnatlink' - ================================== - - It is possible to specify the program stack size from `gnatlink'. - Assuming that the underlying linker is GNU ld there is two ways to do - so: - - * using `-Xlinker' linker option - - $ gnatlink hello -Xlinker --stack=0x10000,0x1000 - - This set the stack reserve size to 0x10000 bytes and the stack - commit size to 0x1000 bytes. - - * using `-Wl' linker option - - $ gnatlink hello -Wl,--stack=0x1000000 - - This set the stack reserve size to 0x1000000 bytes. Note that with - `-Wl' option it is not possible to set the stack commit size - because the coma is a separator for this option. - - -  - File: gnat_ug_vxw.info, Node: Setting Heap Size from gnatlink, Prev: Setting Stack Size from gnatlink, Up: Linking Using gnatlink - - Setting Heap Size from `gnatlink' - ================================= - - It is possible to specify the program heap size from `gnatlink'. - Assuming that the underlying linker is GNU ld there is two ways to do - so: - - * using `-Xlinker' linker option - - $ gnatlink hello -Xlinker --heap=0x10000,0x1000 - - This set the heap reserve size to 0x10000 bytes and the heap commit - size to 0x1000 bytes. - - * using `-Wl' linker option - - $ gnatlink hello -Wl,--heap=0x1000000 - - This set the heap reserve size to 0x1000000 bytes. Note that with - `-Wl' option it is not possible to set the heap commit size - because the coma is a separator for this option. - - -  - File: gnat_ug_vxw.info, Node: The GNAT Make Program gnatmake, Next: Renaming Files Using gnatchop, Prev: Linking Using gnatlink, Up: Top - - The GNAT Make Program `gnatmake' - ******************************** - - * Menu: - - * Running gnatmake:: - * Switches for gnatmake:: - * Mode Switches for gnatmake:: - * Notes on the Command Line:: - * How gnatmake Works:: - * Examples of gnatmake Usage:: - - A typical development cycle when working on an Ada program consists of - the following steps: - - 1. Edit some sources to fix bugs. - - 2. Add enhancements. - - 3. Compile all sources affected. - - 4. Rebind and relink. - - 5. Test. - - The third step can be tricky, because not only do the modified files - have to be compiled, but any files depending on these files must also be - recompiled. The dependency rules in Ada can be quite complex, especially - in the presence of overloading, `use' clauses, generics and inlined - subprograms. - - `gnatmake' automatically takes care of the third and fourth steps of - this process. It determines which sources need to be compiled, compiles - them, and binds and links the resulting object files. - - Unlike some other Ada make programs, the dependencies are always - accurately recomputed from the new sources. The source based approach of - the GNAT compilation model makes this possible. This means that if - changes to the source program cause corresponding changes in - dependencies, they will always be tracked exactly correctly by - `gnatmake'. - -  - File: gnat_ug_vxw.info, Node: Running gnatmake, Next: Switches for gnatmake, Up: The GNAT Make Program gnatmake - - Running `gnatmake' - ================== - - The usual form of the `gnatmake' command is - - $ gnatmake [SWITCHES] FILE_NAME [FILE_NAMES] [MODE_SWITCHES] - - The only required argument is one FILE_NAME, which specifies a - compilation unit that is a main program. Several FILE_NAMES can be - specified: this will result in several executables being built. If - `switches' are present, they can be placed before the first FILE_NAME, - between FILE_NAMES or after the last FILE_NAME. If MODE_SWITCHES are - present, they must always be placed after the last FILE_NAME and all - `switches'. - - If you are using standard file extensions (.adb and .ads), then the - extension may be omitted from the FILE_NAME arguments. However, if you - are using non-standard extensions, then it is required that the - extension be given. A relative or absolute directory path can be - specified in a FILE_NAME, in which case, the input source file will be - searched for in the specified directory only. Otherwise, the input - source file will first be searched in the directory where `gnatmake' - was invoked and if it is not found, it will be search on the source - path of the compiler as described in *Note Search Paths and the - Run-Time Library (RTL)::. - - When several FILE_NAMES are specified, if an executable needs to be - rebuilt and relinked, all subsequent executables will be rebuilt and - relinked, even if this would not be absolutely necessary. - - All `gnatmake' output (except when you specify `-M') is to `stderr'. - The output produced by the `-M' switch is send to `stdout'. - -  - File: gnat_ug_vxw.info, Node: Switches for gnatmake, Next: Mode Switches for gnatmake, Prev: Running gnatmake, Up: The GNAT Make Program gnatmake - - Switches for `gnatmake' - ======================= - - You may specify any of the following switches to `gnatmake': - - `--GCC=COMPILER_NAME' - Program used for compiling. The default is ``gcc''. You need to use - quotes around COMPILER_NAME if `compiler_name' contains spaces or - other separator characters. As an example `--GCC="foo -x -y"' will - instruct `gnatmake' to use `foo -x -y' as your compiler. Note that - switch `-c' is always inserted after your command name. Thus in - the above example the compiler command that will be used by - `gnatmake' will be `foo -c -x -y'. If several - `--GCC=compiler_name' are used, only the last COMPILER_NAME is - taken into account. However, all the additional switches are also - taken into account. Thus, `--GCC="foo -x -y" --GCC="bar -z -t"' is - equivalent to `--GCC="bar -x -y -z -t"'. - - `--GNATBIND=BINDER_NAME' - Program used for binding. The default is ``gnatbind''. You need to - use quotes around BINDER_NAME if BINDER_NAME contains spaces or - other separator characters. As an example `--GNATBIND="bar -x -y"' - will instruct `gnatmake' to use `bar -x -y' as your binder. Binder - switches that are normally appended by `gnatmake' to ``gnatbind'' - are now appended to the end of `bar -x -y'. - - `--GNATLINK=LINKER_NAME' - Program used for linking. The default is ``gnatlink''. You need to - use quotes around LINKER_NAME if LINKER_NAME contains spaces or - other separator characters. As an example `--GNATLINK="lan -x -y"' - will instruct `gnatmake' to use `lan -x -y' as your linker. Linker - switches that are normally appended by `gnatmake' to ``gnatlink'' - are now appended to the end of `lan -x -y'. - - `-a' - Consider all files in the make process, even the GNAT internal - system files (for example, the predefined Ada library files), as - well as any locked files. Locked files are files whose ALI file is - write-protected. By default, `gnatmake' does not check these - files, because the assumption is that the GNAT internal files are - properly up to date, and also that any write protected ALI files - have been properly installed. Note that if there is an - installation problem, such that one of these files is not up to - date, it will be properly caught by the binder. You may have to - specify this switch if you are working on GNAT itself. `-a' is - also useful in conjunction with `-f' if you need to recompile an - entire application, including run-time files, using special - configuration pragma settings, such as a non-standard - `Float_Representation' pragma. By default `gnatmake -a' compiles - all GNAT internal files with `gcc -c -gnatpg' rather than `gcc -c'. - - `-b' - Bind only. Can be combined with `-c' to do compilation and - binding, but no link. Can be combined with `-l' to do binding and - linking. When not combined with `-c' all the units in the closure - of the main program must have been previously compiled and must be - up to date. The root unit specified by FILE_NAME may be given - without extension, with the source extension or, if no GNAT - Project File is specified, with the ALI file extension. - - `-c' - Compile only. Do not perform binding, except when `-b' is also - specified. Do not perform linking, except if both `-b' and `-l' - are also specified. If the root unit specified by FILE_NAME is - not a main unit, this is the default. Otherwise `gnatmake' will - attempt binding and linking unless all objects are up to date and - the executable is more recent than the objects. - - `-C' - Use a mapping file. A mapping file is a way to communicate to the - compiler two mappings: from unit names to file names (without any - directory information) and from file names to path names (with - full directory information). These mappings are used by the - compiler to short-circuit the path search. When `gnatmake' is - invoked with this switch, it will create a mapping file, initially - populated by the project manager, if `-P' is used, otherwise - initially empty. Each invocation of the compiler will add the newly - accessed sources to the mapping file. This will improve the source - search during the next invocation of the compiler. - - `-f' - Force recompilations. Recompile all sources, even though some - object files may be up to date, but don't recompile predefined or - GNAT internal files or locked files (files with a write-protected - ALI file), unless the `-a' switch is also specified. - - `' - - `-i' - In normal mode, `gnatmake' compiles all object files and ALI files - into the current directory. If the `-i' switch is used, then - instead object files and ALI files that already exist are - overwritten in place. This means that once a large project is - organized into separate directories in the desired manner, then - `gnatmake' will automatically maintain and update this - organization. If no ALI files are found on the Ada object path - (*Note Search Paths and the Run-Time Library (RTL)::), the new - object and ALI files are created in the directory containing the - source being compiled. If another organization is desired, where - objects and sources are kept in different directories, a useful - technique is to create dummy ALI files in the desired directories. - When detecting such a dummy file, `gnatmake' will be forced to - recompile the corresponding source file, and it will be put the - resulting object and ALI files in the directory where it found the - dummy file. - - `-jN' - Use N processes to carry out the (re)compilations. On a - multiprocessor machine compilations will occur in parallel. In the - event of compilation errors, messages from various compilations - might get interspersed (but `gnatmake' will give you the full - ordered list of failing compiles at the end). If this is - problematic, rerun the make process with n set to 1 to get a clean - list of messages. - - `-k' - Keep going. Continue as much as possible after a compilation - error. To ease the programmer's task in case of compilation - errors, the list of sources for which the compile fails is given - when `gnatmake' terminates. - - If `gnatmake' is invoked with several `file_names' and with this - switch, if there are compilation errors when building an - executable, `gnatmake' will not attempt to build the following - executables. - - `-l' - Link only. Can be combined with `-b' to binding and linking. - Linking will not be performed if combined with `-c' but not with - `-b'. When not combined with `-b' all the units in the closure of - the main program must have been previously compiled and must be up - to date, and the main program need to have been bound. The root - unit specified by FILE_NAME may be given without extension, with - the source extension or, if no GNAT Project File is specified, - with the ALI file extension. - - `-m' - Specifies that the minimum necessary amount of recompilations be - performed. In this mode `gnatmake' ignores time stamp differences - when the only modifications to a source file consist in - adding/removing comments, empty lines, spaces or tabs. This means - that if you have changed the comments in a source file or have - simply reformatted it, using this switch will tell gnatmake not to - recompile files that depend on it (provided other sources on which - these files depend have undergone no semantic modifications). Note - that the debugging information may be out of date with respect to - the sources if the `-m' switch causes a compilation to be - switched, so the use of this switch represents a trade-off between - compilation time and accurate debugging information. - - `-M' - Check if all objects are up to date. If they are, output the object - dependences to `stdout' in a form that can be directly exploited in - a `Makefile'. By default, each source file is prefixed with its - (relative or absolute) directory name. This name is whatever you - specified in the various `-aI' and `-I' switches. If you use - `gnatmake -M' `-q' (see below), only the source file names, - without relative paths, are output. If you just specify the `-M' - switch, dependencies of the GNAT internal system files are - omitted. This is typically what you want. If you also specify the - `-a' switch, dependencies of the GNAT internal files are also - listed. Note that dependencies of the objects in external Ada - libraries (see switch `-aL'DIR in the following list) are never - reported. - - `-n' - Don't compile, bind, or link. Checks if all objects are up to date. - If they are not, the full name of the first file that needs to be - recompiled is printed. Repeated use of this option, followed by - compiling the indicated source file, will eventually result in - recompiling all required units. - - `-o EXEC_NAME' - Output executable name. The name of the final executable program - will be EXEC_NAME. If the `-o' switch is omitted the default name - for the executable will be the name of the input file in - appropriate form for an executable file on the host system. - - This switch cannot be used when invoking `gnatmake' with several - `file_names'. - - `-q' - Quiet. When this flag is not set, the commands carried out by - `gnatmake' are displayed. - - `-s' - Recompile if compiler switches have changed since last compilation. - All compiler switches but -I and -o are taken into account in the - following way: orders between different "first letter" switches - are ignored, but orders between same switches are taken into - account. For example, `-O -O2' is different than `-O2 -O', but `-g - -O' is equivalent to `-O -g'. - - `-u' - Unique. Recompile at most the main file. It implies -c. Combined - with -f, it is equivalent to calling the compiler directly. - - `-v' - Verbose. Displays the reason for all recompilations `gnatmake' - decides are necessary. - - `-z' - No main subprogram. Bind and link the program even if the unit name - given on the command line is a package name. The resulting - executable will execute the elaboration routines of the package - and its closure, then the finalization routines. - - ``gcc' switches' - The switch `-g' or any uppercase switch (other than `-A', `-L' or - `-S') or any switch that is more than one character is passed to - `gcc' (e.g. `-O', `-gnato,' etc.) - - Source and library search path switches: - - `-aIDIR' - When looking for source files also look in directory DIR. The - order in which source files search is undertaken is described in - *Note Search Paths and the Run-Time Library (RTL)::. - - `-aLDIR' - Consider DIR as being an externally provided Ada library. - Instructs `gnatmake' to skip compilation units whose `.ali' files - have been located in directory DIR. This allows you to have - missing bodies for the units in DIR and to ignore out of date - bodies for the same units. You still need to specify the location - of the specs for these units by using the switches `-aIDIR' or - `-IDIR'. Note: this switch is provided for compatibility with - previous versions of `gnatmake'. The easier method of causing - standard libraries to be excluded from consideration is to - write-protect the corresponding ALI files. - - `-aODIR' - When searching for library and object files, look in directory - DIR. The order in which library files are searched is described in - *Note Search Paths for gnatbind::. - - `-ADIR' - Equivalent to `-aLDIR -aIDIR'. - - `-IDIR' - Equivalent to `-aODIR -aIDIR'. - - `-I-' - Do not look for source files in the directory containing the source - file named in the command line. Do not look for ALI or object - files in the directory where `gnatmake' was invoked. - - `-LDIR' - Add directory DIR to the list of directories in which the linker - will search for libraries. This is equivalent to `-largs -L'DIR. - - `-nostdinc' - Do not look for source files in the system default directory. - - `-nostdlib' - Do not look for library files in the system default directory. - - `--RTS=RTS-PATH' - Specifies the default location of the runtime library. We look for - the runtime in the following directories, and stop as soon as a - valid runtime is found ("adainclude" or "ada_source_path", and - "adalib" or "ada_object_path" present): - - * /$rts_path - - * /$rts_path - - * /rts-$rts_path - - The selected path is handled like a normal RTS path. - -  - File: gnat_ug_vxw.info, Node: Mode Switches for gnatmake, Next: Notes on the Command Line, Prev: Switches for gnatmake, Up: The GNAT Make Program gnatmake - - Mode Switches for `gnatmake' - ============================ - - The mode switches (referred to as `mode_switches') allow the inclusion - of switches that are to be passed to the compiler itself, the binder or - the linker. The effect of a mode switch is to cause all subsequent - switches up to the end of the switch list, or up to the next mode - switch, to be interpreted as switches to be passed on to the designated - component of GNAT. - - `-cargs SWITCHES' - Compiler switches. Here SWITCHES is a list of switches that are - valid switches for `gcc'. They will be passed on to all compile - steps performed by `gnatmake'. - - `-bargs SWITCHES' - Binder switches. Here SWITCHES is a list of switches that are - valid switches for `gcc'. They will be passed on to all bind steps - performed by `gnatmake'. - - `-largs SWITCHES' - Linker switches. Here SWITCHES is a list of switches that are - valid switches for `gcc'. They will be passed on to all link steps - performed by `gnatmake'. - -  - File: gnat_ug_vxw.info, Node: Notes on the Command Line, Next: How gnatmake Works, Prev: Mode Switches for gnatmake, Up: The GNAT Make Program gnatmake - - Notes on the Command Line - ========================= - - This section contains some additional useful notes on the operation of - the `gnatmake' command. - - * If `gnatmake' finds no ALI files, it recompiles the main program - and all other units required by the main program. This means that - `gnatmake' can be used for the initial compile, as well as during - subsequent steps of the development cycle. - - * If you enter `gnatmake FILE.adb', where `FILE.adb' is a subunit or - body of a generic unit, `gnatmake' recompiles `FILE.adb' (because - it finds no ALI) and stops, issuing a warning. - - * In `gnatmake' the switch `-I' is used to specify both source and - library file paths. Use `-aI' instead if you just want to specify - source paths only and `-aO' if you want to specify library paths - only. - - * `gnatmake' examines both an ALI file and its corresponding object - file for consistency. If an ALI is more recent than its - corresponding object, or if the object file is missing, the - corresponding source will be recompiled. Note that `gnatmake' - expects an ALI and the corresponding object file to be in the same - directory. - - * `gnatmake' will ignore any files whose ALI file is write-protected. - This may conveniently be used to exclude standard libraries from - consideration and in particular it means that the use of the `-f' - switch will not recompile these files unless `-a' is also - specified. - - * `gnatmake' has been designed to make the use of Ada libraries - particularly convenient. Assume you have an Ada library organized - as follows: OBJ-DIR contains the objects and ALI files for of your - Ada compilation units, whereas INCLUDE-DIR contains the specs of - these units, but no bodies. Then to compile a unit stored in - `main.adb', which uses this Ada library you would just type - - $ gnatmake -aIINCLUDE-DIR -aLOBJ-DIR main - - * Using `gnatmake' along with the `-m (minimal recompilation)' - switch provides a mechanism for avoiding unnecessary - rcompilations. Using this switch, you can update the - comments/format of your source files without having to recompile - everything. Note, however, that adding or deleting lines in a - source files may render its debugging info obsolete. If the file - in question is a spec, the impact is rather limited, as that - debugging info will only be useful during the elaboration phase of - your program. For bodies the impact can be more significant. In - all events, your debugger will warn you if a source file is more - recent than the corresponding object, and alert you to the fact - that the debugging information may be out of date. - -  - File: gnat_ug_vxw.info, Node: How gnatmake Works, Next: Examples of gnatmake Usage, Prev: Notes on the Command Line, Up: The GNAT Make Program gnatmake - - How `gnatmake' Works - ==================== - - Generally `gnatmake' automatically performs all necessary - recompilations and you don't need to worry about how it works. However, - it may be useful to have some basic understanding of the `gnatmake' - approach and in particular to understand how it uses the results of - previous compilations without incorrectly depending on them. - - First a definition: an object file is considered "up to date" if the - corresponding ALI file exists and its time stamp predates that of the - object file and if all the source files listed in the dependency - section of this ALI file have time stamps matching those in the ALI - file. This means that neither the source file itself nor any files that - it depends on have been modified, and hence there is no need to - recompile this file. - - `gnatmake' works by first checking if the specified main unit is up - to date. If so, no compilations are required for the main unit. If not, - `gnatmake' compiles the main program to build a new ALI file that - reflects the latest sources. Then the ALI file of the main unit is - examined to find all the source files on which the main program depends, - and `gnatmake' recursively applies the above procedure on all these - files. - - This process ensures that `gnatmake' only trusts the dependencies in - an existing ALI file if they are known to be correct. Otherwise it - always recompiles to determine a new, guaranteed accurate set of - dependencies. As a result the program is compiled "upside down" from - what may be more familiar as the required order of compilation in some - other Ada systems. In particular, clients are compiled before the units - on which they depend. The ability of GNAT to compile in any order is - critical in allowing an order of compilation to be chosen that - guarantees that `gnatmake' will recompute a correct set of new - dependencies if necessary. - - When invoking `gnatmake' with several FILE_NAMES, if a unit is - imported by several of the executables, it will be recompiled at most - once. - -  - File: gnat_ug_vxw.info, Node: Examples of gnatmake Usage, Prev: How gnatmake Works, Up: The GNAT Make Program gnatmake - - Examples of `gnatmake' Usage - ============================ - - `gnatmake hello.adb' - Compile all files necessary to bind and link the main program - `hello.adb' (containing unit `Hello') and bind and link the - resulting object files to generate an executable file `hello'. - - `gnatmake main1 main2 main3' - Compile all files necessary to bind and link the main programs - `main1.adb' (containing unit `Main1'), `main2.adb' (containing - unit `Main2') and `main3.adb' (containing unit `Main3') and bind - and link the resulting object files to generate three executable - files `main1', `main2' and `main3'. - - `gnatmake -q Main_Unit -cargs -O2 -bargs -l' - Compile all files necessary to bind and link the main program unit - `Main_Unit' (from file `main_unit.adb'). All compilations will be - done with optimization level 2 and the order of elaboration will be - listed by the binder. `gnatmake' will operate in quiet mode, not - displaying commands it is executing. - -  - File: gnat_ug_vxw.info, Node: Renaming Files Using gnatchop, Next: Configuration Pragmas, Prev: The GNAT Make Program gnatmake, Up: Top - - Renaming Files Using `gnatchop' - ******************************* - - This chapter discusses how to handle files with multiple units by using - the `gnatchop' utility. This utility is also useful in renaming files - to meet the standard GNAT default file naming conventions. - - * Menu: - - * Handling Files with Multiple Units:: - * Operating gnatchop in Compilation Mode:: - * Command Line for gnatchop:: - * Switches for gnatchop:: - * Examples of gnatchop Usage:: - -  - File: gnat_ug_vxw.info, Node: Handling Files with Multiple Units, Next: Operating gnatchop in Compilation Mode, Up: Renaming Files Using gnatchop - - Handling Files with Multiple Units - ================================== - - The basic compilation model of GNAT requires that a file submitted to - the compiler have only one unit and there be a strict correspondence - between the file name and the unit name. - - The `gnatchop' utility allows both of these rules to be relaxed, - allowing GNAT to process files which contain multiple compilation units - and files with arbitrary file names. `gnatchop' reads the specified - file and generates one or more output files, containing one unit per - file. The unit and the file name correspond, as required by GNAT. - - If you want to permanently restructure a set of "foreign" files so - that they match the GNAT rules, and do the remaining development using - the GNAT structure, you can simply use `gnatchop' once, generate the - new set of files and work with them from that point on. - - Alternatively, if you want to keep your files in the "foreign" - format, perhaps to maintain compatibility with some other Ada - compilation system, you can set up a procedure where you use `gnatchop' - each time you compile, regarding the source files that it writes as - temporary files that you throw away. - -  - File: gnat_ug_vxw.info, Node: Operating gnatchop in Compilation Mode, Next: Command Line for gnatchop, Prev: Handling Files with Multiple Units, Up: Renaming Files Using gnatchop - - Operating gnatchop in Compilation Mode - ====================================== - - The basic function of `gnatchop' is to take a file with multiple units - and split it into separate files. The boundary between files is - reasonably clear, except for the issue of comments and pragmas. In - default mode, the rule is that any pragmas between units belong to the - previous unit, except that configuration pragmas always belong to the - following unit. Any comments belong to the following unit. These rules - almost always result in the right choice of the split point without - needing to mark it explicitly and most users will find this default to - be what they want. In this default mode it is incorrect to submit a - file containing only configuration pragmas, or one that ends in - configuration pragmas, to `gnatchop'. - - However, using a special option to activate "compilation mode", - `gnatchop' can perform another function, which is to provide exactly - the semantics required by the RM for handling of configuration pragmas - in a compilation. In the absence of configuration pragmas (at the main - file level), this option has no effect, but it causes such - configuration pragmas to be handled in a quite different manner. - - First, in compilation mode, if `gnatchop' is given a file that - consists of only configuration pragmas, then this file is appended to - the `gnat.adc' file in the current directory. This behavior provides - the required behavior described in the RM for the actions to be taken - on submitting such a file to the compiler, namely that these pragmas - should apply to all subsequent compilations in the same compilation - environment. Using GNAT, the current directory, possibly containing a - `gnat.adc' file is the representation of a compilation environment. For - more information on the `gnat.adc' file, see the section on handling of - configuration pragmas *note Handling of Configuration Pragmas::. - - Second, in compilation mode, if `gnatchop' is given a file that - starts with configuration pragmas, and contains one or more units, then - these configuration pragmas are prepended to each of the chopped files. - This behavior provides the required behavior described in the RM for the - actions to be taken on compiling such a file, namely that the pragmas - apply to all units in the compilation, but not to subsequently compiled - units. - - Finally, if configuration pragmas appear between units, they are - appended to the previous unit. This results in the previous unit being - illegal, since the compiler does not accept configuration pragmas that - follow a unit. This provides the required RM behavior that forbids - configuration pragmas other than those preceding the first compilation - unit of a compilation. - - For most purposes, `gnatchop' will be used in default mode. The - compilation mode described above is used only if you need exactly - accurate behavior with respect to compilations, and you have files that - contain multiple units and configuration pragmas. In this circumstance - the use of `gnatchop' with the compilation mode switch provides the - required behavior, and is for example the mode in which GNAT processes - the ACVC tests. - -  - File: gnat_ug_vxw.info, Node: Command Line for gnatchop, Next: Switches for gnatchop, Prev: Operating gnatchop in Compilation Mode, Up: Renaming Files Using gnatchop - - Command Line for `gnatchop' - =========================== - - The `gnatchop' command has the form: - - $ gnatchop switches FILE NAME [FILE NAME FILE NAME ...] - [DIRECTORY] - - The only required argument is the file name of the file to be chopped. - There are no restrictions on the form of this file name. The file itself - contains one or more Ada units, in normal GNAT format, concatenated - together. As shown, more than one file may be presented to be chopped. - - When run in default mode, `gnatchop' generates one output file in - the current directory for each unit in each of the files. - - DIRECTORY, if specified, gives the name of the directory to which - the output files will be written. If it is not specified, all files are - written to the current directory. - - For example, given a file called `hellofiles' containing - - procedure hello; - - with Text_IO; use Text_IO; - procedure hello is - begin - Put_Line ("Hello"); - end hello; - - the command - - $ gnatchop hellofiles - - generates two files in the current directory, one called `hello.ads' - containing the single line that is the procedure spec, and the other - called `hello.adb' containing the remaining text. The original file is - not affected. The generated files can be compiled in the normal manner. - -  - File: gnat_ug_vxw.info, Node: Switches for gnatchop, Next: Examples of gnatchop Usage, Prev: Command Line for gnatchop, Up: Renaming Files Using gnatchop - - Switches for `gnatchop' - ======================= - - `gnatchop' recognizes the following switches: - - `-c' - Causes `gnatchop' to operate in compilation mode, in which - configuration pragmas are handled according to strict RM rules. See - previous section for a full description of this mode. - - `-gnatxxx' - This passes the given `-gnatxxx' switch to `gnat' which is used to - parse the given file. Not all `xxx' options make sense, but for - example, the use of `-gnati2' allows `gnatchop' to process a - source file that uses Latin-2 coding for identifiers. - - `-h' - Causes `gnatchop' to generate a brief help summary to the standard - output file showing usage information. - - `-kMM' - Limit generated file names to the specified number `mm' of - characters. This is useful if the resulting set of files is - required to be interoperable with systems which limit the length - of file names. No space is allowed between the `-k' and the - numeric value. The numeric value may be omitted in which case a - default of `-k8', suitable for use with DOS-like file systems, is - used. If no `-k' switch is present then there is no limit on the - length of file names. - - `-p' - Causes the file modification time stamp of the input file to be - preserved and used for the time stamp of the output file(s). This - may be useful for preserving coherency of time stamps in an - enviroment where `gnatchop' is used as part of a standard build - process. - - `-q' - Causes output of informational messages indicating the set of - generated files to be suppressed. Warnings and error messages are - unaffected. - - `-r' - Generate `Source_Reference' pragmas. Use this switch if the output - files are regarded as temporary and development is to be done in - terms of the original unchopped file. This switch causes - `Source_Reference' pragmas to be inserted into each of the - generated files to refers back to the original file name and line - number. The result is that all error messages refer back to the - original unchopped file. In addition, the debugging information - placed into the object file (when the `-g' switch of `gcc' or - `gnatmake' is specified) also refers back to this original file so - that tools like profilers and debuggers will give information in - terms of the original unchopped file. - - If the original file to be chopped itself contains a - `Source_Reference' pragma referencing a third file, then gnatchop - respects this pragma, and the generated `Source_Reference' pragmas - in the chopped file refer to the original file, with appropriate - line numbers. This is particularly useful when `gnatchop' is used - in conjunction with `gnatprep' to compile files that contain - preprocessing statements and multiple units. - - `-v' - Causes `gnatchop' to operate in verbose mode. The version number - and copyright notice are output, as well as exact copies of the - gnat1 commands spawned to obtain the chop control information. - - `-w' - Overwrite existing file names. Normally `gnatchop' regards it as a - fatal error if there is already a file with the same name as a - file it would otherwise output, in other words if the files to be - chopped contain duplicated units. This switch bypasses this check, - and causes all but the last instance of such duplicated units to - be skipped. - - `--GCC=xxxx' - Specify the path of the GNAT parser to be used. When this switch - is used, no attempt is made to add the prefix to the GNAT parser - executable. - -  - File: gnat_ug_vxw.info, Node: Examples of gnatchop Usage, Prev: Switches for gnatchop, Up: Renaming Files Using gnatchop - - Examples of `gnatchop' Usage - ============================ - - `gnatchop -w hello_s.ada ichbiah/files' - Chops the source file `hello_s.ada'. The output files will be - placed in the directory `ichbiah/files', overwriting any files - with matching names in that directory (no files in the current - directory are modified). - - `gnatchop archive' - Chops the source file `archive' into the current directory. One - useful application of `gnatchop' is in sending sets of sources - around, for example in email messages. The required sources are - simply concatenated (for example, using a Unix `cat' command), and - then `gnatchop' is used at the other end to reconstitute the - original file names. - - `gnatchop file1 file2 file3 direc' - Chops all units in files `file1', `file2', `file3', placing the - resulting files in the directory `direc'. Note that if any units - occur more than once anywhere within this set of files, an error - message is generated, and no files are written. To override this - check, use the `-w' switch, in which case the last occurrence in - the last file will be the one that is output, and earlier - duplicate occurrences for a given unit will be skipped. - -  - File: gnat_ug_vxw.info, Node: Configuration Pragmas, Next: Handling Arbitrary File Naming Conventions Using gnatname, Prev: Renaming Files Using gnatchop, Up: Top - - Configuration Pragmas - ********************* - - In Ada 95, configuration pragmas include those pragmas described as - such in the Ada 95 Reference Manual, as well as - implementation-dependent pragmas that are configuration pragmas. See the - individual descriptions of pragmas in the GNAT Reference Manual for - details on these additional GNAT-specific configuration pragmas. Most - notably, the pragma `Source_File_Name', which allows specifying - non-default names for source files, is a configuration pragma. The - following is a complete list of configuration pragmas recognized by - `GNAT': - - Ada_83 - Ada_95 - C_Pass_By_Copy - Component_Alignment - Discard_Names - Elaboration_Checks - Eliminate - Extend_System - Extensions_Allowed - External_Name_Casing - Float_Representation - Initialize_Scalars - License - Locking_Policy - Long_Float - No_Run_Time - Normalize_Scalars - Polling - Propagate_Exceptions - Queuing_Policy - Ravenscar - Restricted_Run_Time - Restrictions - Reviewable - Source_File_Name - Style_Checks - Suppress - Task_Dispatching_Policy - Unsuppress - Use_VADS_Size - Warnings - Validity_Checks - - * Menu: - - * Handling of Configuration Pragmas:: - * The Configuration Pragmas Files:: - -  - File: gnat_ug_vxw.info, Node: Handling of Configuration Pragmas, Next: The Configuration Pragmas Files, Up: Configuration Pragmas - - Handling of Configuration Pragmas - ================================= - - Configuration pragmas may either appear at the start of a compilation - unit, in which case they apply only to that unit, or they may apply to - all compilations performed in a given compilation environment. - - GNAT also provides the `gnatchop' utility to provide an automatic - way to handle configuration pragmas following the semantics for - compilations (that is, files with multiple units), described in the RM. - See section *note Operating gnatchop in Compilation Mode:: for details. - However, for most purposes, it will be more convenient to edit the - `gnat.adc' file that contains configuration pragmas directly, as - described in the following section. - -  - File: gnat_ug_vxw.info, Node: The Configuration Pragmas Files, Prev: Handling of Configuration Pragmas, Up: Configuration Pragmas - - The Configuration Pragmas Files - =============================== - - In GNAT a compilation environment is defined by the current directory - at the time that a compile command is given. This current directory is - searched for a file whose name is `gnat.adc'. If this file is present, - it is expected to contain one or more configuration pragmas that will - be applied to the current compilation. However, if the switch `-gnatA' - is used, `gnat.adc' is not considered. - - Configuration pragmas may be entered into the `gnat.adc' file either - by running `gnatchop' on a source file that consists only of - configuration pragmas, or more conveniently by direct editing of the - `gnat.adc' file, which is a standard format source file. - - In addition to `gnat.adc', one additional file containing - configuration pragmas may be applied to the current compilation using - the switch `-gnatec'PATH. PATH must designate an existing file that - contains only configuration pragmas. These configuration pragmas are in - addition to those found in `gnat.adc' (provided `gnat.adc' is present - and switch `-gnatA' is not used). - - It is allowed to specify several switches `-gnatec', however only - the last one on the command line will be taken into account. - -  - File: gnat_ug_vxw.info, Node: Handling Arbitrary File Naming Conventions Using gnatname, Next: GNAT Project Manager, Prev: Configuration Pragmas, Up: Top - - Handling Arbitrary File Naming Conventions Using `gnatname' - *********************************************************** - - * Menu: - - * Arbitrary File Naming Conventions:: - * Running gnatname:: - * Switches for gnatname:: - * Examples of gnatname Usage:: - -  - File: gnat_ug_vxw.info, Node: Arbitrary File Naming Conventions, Next: Running gnatname, Up: Handling Arbitrary File Naming Conventions Using gnatname - - Arbitrary File Naming Conventions - ================================= - - The GNAT compiler must be able to know the source file name of a - compilation unit. When using the standard GNAT default file naming - conventions (`.ads' for specs, `.adb' for bodies), the GNAT compiler - does not need additional information. - - When the source file names do not follow the standard GNAT default file - naming conventions, the GNAT compiler must be given additional - information through a configuration pragmas file (see *Note - Configuration Pragmas::) or a project file. When the non standard file - naming conventions are well-defined, a small number of pragmas - `Source_File_Name' specifying a naming pattern (see *Note Alternative - File Naming Schemes::) may be sufficient. However, if the file naming - conventions are irregular or arbitrary, a number of pragma - `Source_File_Name' for individual compilation units must be defined. - To help maintain the correspondence between compilation unit names and - source file names within the compiler, GNAT provides a tool `gnatname' - to generate the required pragmas for a set of files. - -  - File: gnat_ug_vxw.info, Node: Running gnatname, Next: Switches for gnatname, Prev: Arbitrary File Naming Conventions, Up: Handling Arbitrary File Naming Conventions Using gnatname - - Running `gnatname' - ================== - - The usual form of the `gnatname' command is - - $ gnatname [SWITCHES] NAMING_PATTERN [NAMING_PATTERNS] - - All of the arguments are optional. If invoked without any argument, - `gnatname' will display its usage. - - When used with at least one naming pattern, `gnatname' will attempt to - find all the compilation units in files that follow at least one of the - naming patterns. To find these compilation units, `gnatname' will use - the GNAT compiler in syntax-check-only mode on all regular files. - - One or several Naming Patterns may be given as arguments to `gnatname'. - Each Naming Pattern is enclosed between double quotes. A Naming - Pattern is a regular expression similar to the wildcard patterns used - in file names by the Unix shells or the DOS prompt. - - Examples of Naming Patterns are - - "*.[12].ada" - "*.ad[sb]*" - "body_*" "spec_*" - - For a more complete description of the syntax of Naming Patterns, see - the second kind of regular expressions described in `g-regexp.ads' (the - "Glob" regular expressions). - - When invoked with no switches, `gnatname' will create a configuration - pragmas file `gnat.adc' in the current working directory, with pragmas - `Source_File_Name' for each file that contains a valid Ada unit. - -  - File: gnat_ug_vxw.info, Node: Switches for gnatname, Next: Examples of gnatname Usage, Prev: Running gnatname, Up: Handling Arbitrary File Naming Conventions Using gnatname - - Switches for `gnatname' - ======================= - - Switches for `gnatname' must precede any specified Naming Pattern. - - You may specify any of the following switches to `gnatname': - - `-c`file'' - Create a configuration pragmas file `file' (instead of the default - `gnat.adc'). There may be zero, one or more space between `-c' and - `file'. `file' may include directory information. `file' must be - writeable. There may be only one switch `-c'. When a switch `-c' is - specified, no switch `-P' may be specified (see below). - - `-d`dir'' - Look for source files in directory `dir'. There may be zero, one - or more spaces between `-d' and `dir'. When a switch `-d' is - specified, the current working directory will not be searched for - source files, unless it is explictly specified with a `-d' or `-D' - switch. Several switches `-d' may be specified. If `dir' is a - relative path, it is relative to the directory of the - configuration pragmas file specified with switch `-c', or to the - directory of the project file specified with switch `-P' or, if - neither switch `-c' nor switch `-P' are specified, it is relative - to the current working directory. The directory specified with - switch `-c' must exist and be readable. - - `-D`file'' - Look for source files in all directories listed in text file - `file'. There may be zero, one or more spaces between `-d' and - `dir'. `file' must be an existing, readable text file. Each non - empty line in `file' must be a directory. Specifying switch `-D' - is equivalent to specifying as many switches `-d' as there are non - empty lines in `file'. - - `-h' - Output usage (help) information. The output is written to `stdout'. - - `-P`proj'' - Create or update project file `proj'. There may be zero, one or - more space between `-P' and `proj'. `proj' may include directory - information. `proj' must be writeable. There may be only one - switch `-P'. When a switch `-P' is specified, no switch `-c' may - be specified. - - `-v' - Verbose mode. Output detailed explanation of behavior to `stdout'. - This includes name of the file written, the name of the - directories to search and, for each file in those directories - whose name matches at least one of the Naming Patterns, an - indication of whether the file contains a unit, and if so the name - of the unit. - - `-v -v' - Very Verbose mode. In addition to the output produced in verbose - mode, for each file in the searched directories whose name matches - none of the Naming Patterns, an indication is given that there is - no match. - - `-x`pattern'' - Excluded patterns. Using this switch, it is possible to exclude - some files that would match the name patterns. For example, - `"gnatname -x "*_nt.ada" "*.ada"' will look for Ada units in all - files with the `.ada' extension, except those whose names end with - `_nt.ada'. - -  - File: gnat_ug_vxw.info, Node: Examples of gnatname Usage, Prev: Switches for gnatname, Up: Handling Arbitrary File Naming Conventions Using gnatname - - Examples of `gnatname' Usage - ============================ - - $ gnatname -c /home/me/names.adc -d sources "[a-z]*.ada*" - - In this example, the directory `/home/me' must already exist and be - writeable. In addition, the directory `/home/me/sources' (specified by - `-d sources') must exist and be readable. Note the optional spaces after - `-c' and `-d'. - - $ gnatname -P/home/me/proj -x "*_nt_body.ada" -dsources -dsources/plus -Dcommon_dirs.txt "body_*" "spec_*" - - Note that several switches `-d' may be used, even in conjunction - with one or several switches `-D'. Several Naming Patterns and one - excluded pattern are used in this example. - -  - File: gnat_ug_vxw.info, Node: GNAT Project Manager, Next: Elaboration Order Handling in GNAT, Prev: Handling Arbitrary File Naming Conventions Using gnatname, Up: Top - - GNAT Project Manager - ******************** - - * Menu: - - * Introduction:: - * Examples of Project Files:: - * Project File Syntax:: - * Objects and Sources in Project Files:: - * Importing Projects:: - * Project Extension:: - * External References in Project Files:: - * Packages in Project Files:: - * Variables from Imported Projects:: - * Naming Schemes:: - * Library Projects:: - * Switches Related to Project Files:: - * Tools Supporting Project Files:: - * An Extended Example:: - * Project File Complete Syntax:: - -  - File: gnat_ug_vxw.info, Node: Introduction, Next: Examples of Project Files, Up: GNAT Project Manager - - Introduction - ============ - - This chapter describes GNAT's _Project Manager_, a facility that lets - you configure various properties for a collection of source files. In - particular, you can specify: - * The directory or set of directories containing the source files, - and/or the names of the specific source files themselves - - * The directory in which the compiler's output (`ALI' files, object - files, tree files) will be placed - - * The directory in which the executable programs will be placed - - * Switch settings for any of the project-enabled tools (`gnatmake', - compiler, binder, linker, `gnatls', `gnatxref', `gnatfind'); you - can apply these settings either globally or to individual units - - * The source files containing the main subprogram(s) to be built - - * The source programming language(s) (currently Ada and/or C) - - * Source file naming conventions; you can specify these either - globally or for individual units - - * Menu: - - * Project Files:: - -  - File: gnat_ug_vxw.info, Node: Project Files, Up: Introduction - - Project Files - ------------- - - A "project" is a specific set of values for these properties. You can - define a project's settings in a "project file", a text file with an - Ada-like syntax; a property value is either a string or a list of - strings. Properties that are not explicitly set receive default - values. A project file may interrogate the values of "external - variables" (user-defined command-line switches or environment - variables), and it may specify property settings conditionally, based - on the value of such variables. - - In simple cases, a project's source files depend only on other - source files in the same project, or on the predefined libraries. - ("Dependence" is in the technical sense; for example, one Ada unit - "with"ing another.) However, the Project Manager also allows much more - sophisticated arrangements, with the source files in one project - depending on source files in other projects: - * One project can _import_ other projects containing needed source - files. - - * You can organize GNAT projects in a hierarchy: a _child_ project - can extend a _parent_ project, inheriting the parent's source - files and optionally overriding any of them with alternative - versions - - More generally, the Project Manager lets you structure large development - efforts into hierarchical subsystems, with build decisions deferred to - the subsystem level and thus different compilation environments (switch - settings) used for different subsystems. - - The Project Manager is invoked through the `-P_projectfile_' switch - to `gnatmake' or to the `gnat' front driver. If you want to define (on - the command line) an external variable that is queried by the project - file, additionally use the `-X_vbl_=_value_' switch. The Project - Manager parses and interprets the project file, and drives the invoked - tool based on the project settings. - - The Project Manager supports a wide range of development strategies, - for systems of all sizes. Some typical practices that are easily - handled: - * Using a common set of source files, but generating object files in - different directories via different switch settings - - * Using a mostly-shared set of source files, but with different - versions of some unit or units - - The destination of an executable can be controlled inside a project file - using the `-o' switch. In the absence of such a switch either inside - the project file or on the command line, any executable files generated - by `gnatmake' will be placed in the directory `Exec_Dir' specified in - the project file. If no `Exec_Dir' is specified, they will be placed in - the object directory of the project. - - You can use project files to achieve some of the effects of a source - versioning system (for example, defining separate projects for the - different sets of sources that comprise different releases) but the - Project Manager is independent of any source configuration management - tools that might be used by the developers. - - The next section introduces the main features of GNAT's project - facility through a sequence of examples; subsequent sections will - present the syntax and semantics in more detail. - -  - File: gnat_ug_vxw.info, Node: Examples of Project Files, Next: Project File Syntax, Prev: Introduction, Up: GNAT Project Manager - - Examples of Project Files - ========================= - - This section illustrates some of the typical uses of project files and - explains their basic structure and behavior. - - * Menu: - - * Common Sources with Different Switches and Different Output Directories:: - * Using External Variables:: - * Importing Other Projects:: - * Extending a Project:: - -  - File: gnat_ug_vxw.info, Node: Common Sources with Different Switches and Different Output Directories, Next: Using External Variables, Up: Examples of Project Files - - Common Sources with Different Switches and Different Output Directories - ----------------------------------------------------------------------- - - * Menu: - - * Source Files:: - * Specifying the Object Directory:: - * Specifying the Exec Directory:: - * Project File Packages:: - * Specifying Switch Settings:: - * Main Subprograms:: - * Source File Naming Conventions:: - * Source Language(s):: - - Assume that the Ada source files `pack.ads', `pack.adb', and `proc.adb' - are in the `/common' directory. The file `proc.adb' contains an Ada - main subprogram `Proc' that "with"s package `Pack'. We want to compile - these source files under two sets of switches: - * When debugging, we want to pass the `-g' switch to `gnatmake', and - the `-gnata', `-gnato', and `-gnatE' switches to the compiler; the - compiler's output is to appear in `/common/debug' - - * When preparing a release version, we want to pass the `-O2' switch - to the compiler; the compiler's output is to appear in - `/common/release' - - The GNAT project files shown below, respectively `debug.gpr' and - `release.gpr' in the `/common' directory, achieve these effects. - - Diagrammatically: - /common - debug.gpr - release.gpr - pack.ads - pack.adb - proc.adb - /common/debug {-g, -gnata, -gnato, -gnatE} - proc.ali, proc.o - pack.ali, pack.o - /common/release {-O2} - proc.ali, proc.o - pack.ali, pack.o - Here are the project files: - project Debug is - for Object_Dir use "debug"; - for Main use ("proc"); - - package Builder is - for Default_Switches ("Ada") use ("-g"); - end Builder; - - package Compiler is - for Default_Switches ("Ada") - use ("-fstack-check", "-gnata", "-gnato", "-gnatE"); - end Compiler; - end Debug; - - project Release is - for Object_Dir use "release"; - for Exec_Dir use "."; - for Main use ("proc"); - - package Compiler is - for Default_Switches ("Ada") use ("-O2"); - end Compiler; - end Release; - - The name of the project defined by `debug.gpr' is `"Debug"' (case - insensitive), and analogously the project defined by `release.gpr' is - `"Release"'. For consistency the file should have the same name as the - project, and the project file's extension should be `"gpr"'. These - conventions are not required, but a warning is issued if they are not - followed. - - If the current directory is `/temp', then the command - gnatmake -P/common/debug.gpr - - generates object and ALI files in `/common/debug', and the `proc' - executable also in `/common/debug', using the switch settings defined in - the project file. - - Likewise, the command - gnatmake -P/common/release.gpr - - generates object and ALI files in `/common/release', and the `proc' - executable in `/common', using the switch settings from the project - file. - -  - File: gnat_ug_vxw.info, Node: Source Files, Next: Specifying the Object Directory, Up: Common Sources with Different Switches and Different Output Directories - - Source Files - ............ - - If a project file does not explicitly specify a set of source - directories or a set of source files, then by default the project's - source files are the Ada source files in the project file directory. - Thus `pack.ads', `pack.adb', and `proc.adb' are the source files for - both projects. - -  - File: gnat_ug_vxw.info, Node: Specifying the Object Directory, Next: Specifying the Exec Directory, Prev: Source Files, Up: Common Sources with Different Switches and Different Output Directories - - Specifying the Object Directory - ............................... - - Several project properties are modeled by Ada-style _attributes_; you - define the property by supplying the equivalent of an Ada attribute - definition clause in the project file. A project's object directory is - such a property; the corresponding attribute is `Object_Dir', and its - value is a string expression. A directory may be specified either as - absolute or as relative; in the latter case, it is relative to the - project file directory. Thus the compiler's output is directed to - `/common/debug' (for the `Debug' project) and to `/common/release' (for - the `Release' project). If `Object_Dir' is not specified, then the - default is the project file directory. - -  - File: gnat_ug_vxw.info, Node: Specifying the Exec Directory, Next: Project File Packages, Prev: Specifying the Object Directory, Up: Common Sources with Different Switches and Different Output Directories - - Specifying the Exec Directory - ............................. - - A project's exec directory is another property; the corresponding - attribute is `Exec_Dir', and its value is also a string expression, - either specified as relative or absolute. If `Exec_Dir' is not - specified, then the default is the object directory (which may also be - the project file directory if attribute `Object_Dir' is not specified). - Thus the executable is placed in `/common/debug' for the `Debug' - project (attribute `Exec_Dir' not specified) and in `/common' for the - `Release' project. - -  - File: gnat_ug_vxw.info, Node: Project File Packages, Next: Specifying Switch Settings, Prev: Specifying the Exec Directory, Up: Common Sources with Different Switches and Different Output Directories - - Project File Packages - ..................... - - A GNAT tool integrated with the Project Manager is modeled by a - corresponding package in the project file. The `Debug' project defines - the packages `Builder' (for `gnatmake') and `Compiler'; the `Release' - project defines only the `Compiler' package. - - The Ada package syntax is not to be taken literally. Although - packages in project files bear a surface resemblance to packages in Ada - source code, the notation is simply a way to convey a grouping of - properties for a named entity. Indeed, the package names permitted in - project files are restricted to a predefined set, corresponding to the - project-aware tools, and the contents of packages are limited to a - small set of constructs. The packages in the example above contain - attribute definitions. - -  - File: gnat_ug_vxw.info, Node: Specifying Switch Settings, Next: Main Subprograms, Prev: Project File Packages, Up: Common Sources with Different Switches and Different Output Directories - - Specifying Switch Settings - .......................... - - Switch settings for a project-aware tool can be specified through - attributes in the package corresponding to the tool. The example above - illustrates one of the relevant attributes, `Default_Switches', defined - in the packages in both project files. Unlike simple attributes like - `Source_Dirs', `Default_Switches' is known as an _associative array_. - When you define this attribute, you must supply an "index" (a literal - string), and the effect of the attribute definition is to set the value - of the "array" at the specified "index". For the `Default_Switches' - attribute, the index is a programming language (in our case, Ada) , and - the value specified (after `use') must be a list of string expressions. - - The attributes permitted in project files are restricted to a - predefined set. Some may appear at project level, others in packages. - For any attribute that is an associate array, the index must always be a - literal string, but the restrictions on this string (e.g., a file name - or a language name) depend on the individual attribute. Also depending - on the attribute, its specified value will need to be either a string - or a string list. - - In the `Debug' project, we set the switches for two tools, - `gnatmake' and the compiler, and thus we include corresponding - packages, with each package defining the `Default_Switches' attribute - with index `"Ada"'. Note that the package corresponding to `gnatmake' - is named `Builder'. The `Release' project is similar, but with just - the `Compiler' package. - - In project `Debug' above the switches starting with `-gnat' that are - specified in package `Compiler' could have been placed in package - `Builder', since `gnatmake' transmits all such switches to the compiler. - -  - File: gnat_ug_vxw.info, Node: Main Subprograms, Next: Source File Naming Conventions, Prev: Specifying Switch Settings, Up: Common Sources with Different Switches and Different Output Directories - - Main Subprograms - ................ - - One of the properties of a project is its list of main subprograms - (actually a list of names of source files containing main subprograms, - with the file extension optional. This property is captured in the - `Main' attribute, whose value is a list of strings. If a project - defines the `Main' attribute, then you do not need to identify the main - subprogram(s) when invoking `gnatmake' (see *Note gnatmake and Project - Files::). - -  - File: gnat_ug_vxw.info, Node: Source File Naming Conventions, Next: Source Language(s), Prev: Main Subprograms, Up: Common Sources with Different Switches and Different Output Directories - - Source File Naming Conventions - .............................. - - Since the project files do not specify any source file naming - conventions, the GNAT defaults are used. The mechanism for defining - source file naming conventions - a package named `Naming' - will be - described below (*note Naming Schemes::). - -  - File: gnat_ug_vxw.info, Node: Source Language(s), Prev: Source File Naming Conventions, Up: Common Sources with Different Switches and Different Output Directories - - Source Language(s) - .................. - - Since the project files do not specify a `Languages' attribute, by - default the GNAT tools assume that the language of the project file is - Ada. More generally, a project can comprise source files in Ada, C, - and/or other languages. - -  - File: gnat_ug_vxw.info, Node: Using External Variables, Next: Importing Other Projects, Prev: Common Sources with Different Switches and Different Output Directories, Up: Examples of Project Files - - Using External Variables - ------------------------ - - Instead of supplying different project files for debug and release, we - can define a single project file that queries an external variable (set - either on the command line or via an environment variable) in order to - conditionally define the appropriate settings. Again, assume that the - source files `pack.ads', `pack.adb', and `proc.adb' are located in - directory `/common'. The following project file, `build.gpr', queries - the external variable named `STYLE' and defines an object directory and - switch settings based on whether the value is `"deb"' (debug) or - `"rel"' (release), where the default is `"deb"'. - - project Build is - for Main use ("proc"); - - type Style_Type is ("deb", "rel"); - Style : Style_Type := external ("STYLE", "deb"); - - case Style is - when "deb" => - for Object_Dir use "debug"; - - when "rel" => - for Object_Dir use "release"; - for Exec_Dir use "."; - end case; - - package Builder is - - case Style is - when "deb" => - for Default_Switches ("Ada") use ("-g"); - end case; - - end Builder; - - package Compiler is - - case Style is - when "deb" => - for Default_Switches ("Ada") use ("-gnata", "-gnato", "-gnatE"); - - when "rel" => - for Default_Switches ("Ada") use ("-O2"); - end case; - - end Compiler; - - end Build; - - `Style_Type' is an example of a _string type_, which is the project - file analog of an Ada enumeration type but containing string literals - rather than identifiers. `Style' is declared as a variable of this - type. - - The form `external("STYLE", "deb")' is known as an _external - reference_; its first argument is the name of an _external variable_, - and the second argument is a default value to be used if the external - variable doesn't exist. You can define an external variable on the - command line via the `-X' switch, or you can use an environment - variable as an external variable. - - Each `case' construct is expanded by the Project Manager based on the - value of `Style'. Thus the command - gnatmake -P/common/build.gpr -XSTYLE=deb - - is equivalent to the `gnatmake' invocation using the project file - `debug.gpr' in the earlier example. So is the command - gnatmake -P/common/build.gpr - - since `"deb"' is the default for `STYLE'. - - Analogously, - gnatmake -P/common/build.gpr -XSTYLE=rel - - is equivalent to the `gnatmake' invocation using the project file - `release.gpr' in the earlier example. - -  - File: gnat_ug_vxw.info, Node: Importing Other Projects, Next: Extending a Project, Prev: Using External Variables, Up: Examples of Project Files - - Importing Other Projects - ------------------------ - - A compilation unit in a source file in one project may depend on - compilation units in source files in other projects. To obtain this - behavior, the dependent project must _import_ the projects containing - the needed source files. This effect is embodied in syntax similar to - an Ada `with' clause, but the "with"ed entities are strings denoting - project files. - - As an example, suppose that the two projects `GUI_Proj' and - `Comm_Proj' are defined in the project files `gui_proj.gpr' and - `comm_proj.gpr' in directories `/gui' and `/comm', respectively. - Assume that the source files for `GUI_Proj' are `gui.ads' and - `gui.adb', and that the source files for `Comm_Proj' are `comm.ads' and - `comm.adb', with each set of files located in its respective project - file directory. Diagrammatically: - - /gui - gui_proj.gpr - gui.ads - gui.adb - - /comm - comm_proj.gpr - comm.ads - comm.adb - - We want to develop an application in directory `/app' that "with"s the - packages `GUI' and `Comm', using the properties of the corresponding - project files (e.g. the switch settings and object directory). - Skeletal code for a main procedure might be something like the - following: - - with GUI, Comm; - procedure App_Main is - ... - begin - ... - end App_Main; - - Here is a project file, `app_proj.gpr', that achieves the desired - effect: - - with "/gui/gui_proj", "/comm/comm_proj"; - project App_Proj is - for Main use ("app_main"); - end App_Proj; - - Building an executable is achieved through the command: - gnatmake -P/app/app_proj - - which will generate the `app_main' executable in the directory where - `app_proj.gpr' resides. - - If an imported project file uses the standard extension (`gpr') then - (as illustrated above) the `with' clause can omit the extension. - - Our example specified an absolute path for each imported project - file. Alternatively, you can omit the directory if either - * The imported project file is in the same directory as the - importing project file, or - - * You have defined an environment variable `ADA_PROJECT_PATH' that - includes the directory containing the needed project file. - - Thus, if we define `ADA_PROJECT_PATH' to include `/gui' and `/comm', - then our project file `app_proj.gpr' could be written as follows: - - with "gui_proj", "comm_proj"; - project App_Proj is - for Main use ("app_main"); - end App_Proj; - - Importing other projects raises the possibility of ambiguities. For - example, the same unit might be present in different imported projects, - or it might be present in both the importing project and an imported - project. Both of these conditions are errors. Note that in the - current version of the Project Manager, it is illegal to have an - ambiguous unit even if the unit is never referenced by the importing - project. This restriction may be relaxed in a future release. - -  - File: gnat_ug_vxw.info, Node: Extending a Project, Prev: Importing Other Projects, Up: Examples of Project Files - - Extending a Project - ------------------- - - A common situation in large software systems is to have multiple - implementations for a common interface; in Ada terms, multiple versions - of a package body for the same specification. For example, one - implementation might be safe for use in tasking programs, while another - might only be used in sequential applications. This can be modeled in - GNAT using the concept of _project extension_. If one project (the - "child") _extends_ another project (the "parent") then by default all - source files of the parent project are inherited by the child, but the - child project can override any of the parent's source files with new - versions, and can also add new files. This facility is the project - analog of extension in Object-Oriented Programming. Project - hierarchies are permitted (a child project may be the parent of yet - another project), and a project that inherits one project can also - import other projects. - - As an example, suppose that directory `/seq' contains the project - file `seq_proj.gpr' and the source files `pack.ads', `pack.adb', and - `proc.adb': - - /seq - pack.ads - pack.adb - proc.adb - seq_proj.gpr - - Note that the project file can simply be empty (that is, no attribute or - package is defined): - - project Seq_Proj is - end Seq_Proj; - - implying that its source files are all the Ada source files in the - project directory. - - Suppose we want to supply an alternate version of `pack.adb', in - directory `/tasking', but use the existing versions of `pack.ads' and - `proc.adb'. We can define a project `Tasking_Proj' that inherits - `Seq_Proj': - - /tasking - pack.adb - tasking_proj.gpr - - project Tasking_Proj extends "/seq/seq_proj" is - end Tasking_Proj; - - The version of `pack.adb' used in a build depends on which project file - is specified. - - Note that we could have designed this using project import rather - than project inheritance; a `base' project would contain the sources for - `pack.ads' and `proc.adb', a sequential project would import `base' and - add `pack.adb', and likewise a tasking project would import `base' and - add a different version of `pack.adb'. The choice depends on whether - other sources in the original project need to be overridden. If they - do, then project extension is necessary, otherwise, importing is - sufficient. - -  - File: gnat_ug_vxw.info, Node: Project File Syntax, Next: Objects and Sources in Project Files, Prev: Examples of Project Files, Up: GNAT Project Manager - - Project File Syntax - =================== - - * Menu: - - * Basic Syntax:: - * Packages:: - * Expressions:: - * String Types:: - * Variables:: - * Attributes:: - * Associative Array Attributes:: - * case Constructions:: - - This section describes the structure of project files. - - A project may be an _independent project_, entirely defined by a - single project file. Any Ada source file in an independent project - depends only on the predefined library and other Ada source files in - the same project. - - A project may also "depend on" other projects, in either or both of the - following ways: - * It may import any number of projects - - * It may extend at most one other project - - The dependence relation is a directed acyclic graph (the subgraph - reflecting the "extends" relation is a tree). - - A project's "immediate sources" are the source files directly - defined by that project, either implicitly by residing in the project - file's directory, or explicitly through any of the source-related - attributes described below. More generally, a project PROJ's "sources" - are the immediate sources of PROJ together with the immediate sources - (unless overridden) of any project on which PROJ depends (either - directly or indirectly). - -  - File: gnat_ug_vxw.info, Node: Basic Syntax, Next: Packages, Up: Project File Syntax - - Basic Syntax - ------------ - - As seen in the earlier examples, project files have an Ada-like syntax. - The minimal project file is: - project Empty is - - end Empty; - - The identifier `Empty' is the name of the project. This project name - must be present after the reserved word `end' at the end of the project - file, followed by a semi-colon. - - Any name in a project file, such as the project name or a variable - name, has the same syntax as an Ada identifier. - - The reserved words of project files are the Ada reserved words plus - `extends', `external', and `project'. Note that the only Ada reserved - words currently used in project file syntax are: - - * `case' - - * `end' - - * `for' - - * `is' - - * `others' - - * `package' - - * `renames' - - * `type' - - * `use' - - * `when' - - * `with' - - Comments in project files have the same syntax as in Ada, two - consecutives hyphens through the end of the line. - -  - File: gnat_ug_vxw.info, Node: Packages, Next: Expressions, Prev: Basic Syntax, Up: Project File Syntax - - Packages - -------- - - A project file may contain _packages_. The name of a package must be one - of the identifiers (case insensitive) from a predefined list, and a - package with a given name may only appear once in a project file. The - predefined list includes the following packages: - - * `Naming' - - * `Builder' - - * `Compiler' - - * `Binder' - - * `Linker' - - * `Finder' - - * `Cross_Reference' - - * `gnatls' - - (The complete list of the package names and their attributes can be - found in file `prj-attr.adb'). - - In its simplest form, a package may be empty: - - project Simple is - package Builder is - end Builder; - end Simple; - - A package may contain _attribute declarations_, _variable declarations_ - and _case constructions_, as will be described below. - - When there is ambiguity between a project name and a package name, - the name always designates the project. To avoid possible confusion, it - is always a good idea to avoid naming a project with one of the names - allowed for packages or any name that starts with `gnat'. - -  - File: gnat_ug_vxw.info, Node: Expressions, Next: String Types, Prev: Packages, Up: Project File Syntax - - Expressions - ----------- - - An _expression_ is either a _string expression_ or a _string list - expression_. - - A _string expression_ is either a _simple string expression_ or a - _compound string expression_. - - A _simple string expression_ is one of the following: - * A literal string; e.g.`"comm/my_proj.gpr"' - - * A string-valued variable reference (see *Note Variables::) - - * A string-valued attribute reference (see *Note Attributes::) - - * An external reference (see *Note External References in Project - Files::) - - A _compound string expression_ is a concatenation of string expressions, - using `"&"' - Path & "/" & File_Name & ".ads" - - A _string list expression_ is either a _simple string list expression_ - or a _compound string list expression_. - - A _simple string list expression_ is one of the following: - * A parenthesized list of zero or more string expressions, separated - by commas - File_Names := (File_Name, "gnat.adc", File_Name & ".orig"); - Empty_List := (); - - * A string list-valued variable reference - - * A string list-valued attribute reference - - A _compound string list expression_ is the concatenation (using `"&"') - of a simple string list expression and an expression. Note that each - term in a compound string list expression, except the first, may be - either a string expression or a string list expression. - - File_Name_List := () & File_Name; -- One string in this list - Extended_File_Name_List := File_Name_List & (File_Name & ".orig"); - -- Two strings - Big_List := File_Name_List & Extended_File_Name_List; - -- Concatenation of two string lists: three strings - Illegal_List := "gnat.adc" & Extended_File_Name_List; - -- Illegal: must start with a string list - -  - File: gnat_ug_vxw.info, Node: String Types, Next: Variables, Prev: Expressions, Up: Project File Syntax - - String Types - ------------ - - The value of a variable may be restricted to a list of string literals. - The restricted list of string literals is given in a _string type - declaration_. - - Here is an example of a string type declaration: - - type OS is ("NT, "nt", "Unix", "Linux", "other OS"); - - Variables of a string type are called _typed variables_; all other - variables are called _untyped variables_. Typed variables are - particularly useful in `case' constructions (see *Note case - Constructions::). - - A string type declaration starts with the reserved word `type', - followed by the name of the string type (case-insensitive), followed by - the reserved word `is', followed by a parenthesized list of one or more - string literals separated by commas, followed by a semicolon. - - The string literals in the list are case sensitive and must all be - different. They may include any graphic characters allowed in Ada, - including spaces. - - A string type may only be declared at the project level, not inside - a package. - - A string type may be referenced by its name if it has been declared - in the same project file, or by its project name, followed by a dot, - followed by the string type name. - -  - File: gnat_ug_vxw.info, Node: Variables, Next: Attributes, Prev: String Types, Up: Project File Syntax - - Variables - --------- - - A variable may be declared at the project file level, or in a package. - Here are some examples of variable declarations: - - This_OS : OS := external ("OS"); -- a typed variable declaration - That_OS := "Linux"; -- an untyped variable declaration - - A _typed variable declaration_ includes the variable name, followed by - a colon, followed by the name of a string type, followed by `:=', - followed by a simple string expression. - - An _untyped variable declaration_ includes the variable name, - followed by `:=', followed by an expression. Note that, despite the - terminology, this form of "declaration" resembles more an assignment - than a declaration in Ada. It is a declaration in several senses: - * The variable name does not need to be defined previously - - * The declaration establishes the _kind_ (string versus string list) - of the variable, and later declarations of the same variable need - to be consistent with this - - A string variable declaration (typed or untyped) declares a variable - whose value is a string. This variable may be used as a string - expression. - File_Name := "readme.txt"; - Saved_File_Name := File_Name & ".saved"; - - A string list variable declaration declares a variable whose value is a - list of strings. The list may contain any number (zero or more) of - strings. - - Empty_List := (); - List_With_One_Element := ("-gnaty"); - List_With_Two_Elements := List_With_One_Element & "-gnatg"; - Long_List := ("main.ada", "pack1_.ada", "pack1.ada", "pack2_.ada" - "pack2.ada", "util_.ada", "util.ada"); - - The same typed variable may not be declared more than once at project - level, and it may not be declared more than once in any package; it is - in effect a constant or a readonly variable. - - The same untyped variable may be declared several times. In this - case, the new value replaces the old one, and any subsequent reference - to the variable uses the new value. However, as noted above, if a - variable has been declared as a string, all subsequent declarations - must give it a string value. Similarly, if a variable has been declared - as a string list, all subsequent declarations must give it a string - list value. - - A _variable reference_ may take several forms: - - * The simple variable name, for a variable in the current package - (if any) or in the current project - - * A context name, followed by a dot, followed by the variable name. - - A _context_ may be one of the following: - - * The name of an existing package in the current project - - * The name of an imported project of the current project - - * The name of an ancestor project (i.e., a project extended by the - current project, either directly or indirectly) - - * An imported/parent project name, followed by a dot, followed by a - package name - - A variable reference may be used in an expression. - -  - File: gnat_ug_vxw.info, Node: Attributes, Next: Associative Array Attributes, Prev: Variables, Up: Project File Syntax - - Attributes - ---------- - - A project (and its packages) may have _attributes_ that define the - project's properties. Some attributes have values that are strings; - others have values that are string lists. - - There are two categories of attributes: _simple attributes_ and - _associative arrays_ (see *Note Associative Array Attributes::). - - The names of the attributes are restricted; there is a list of - project attributes, and a list of package attributes for each package. - The names are not case sensitive. - - The project attributes are as follows (all are simple attributes): - - _Attribute Name_ _Value_ - `Source_Files' string list - `Source_Dirs' string list - `Source_List_File' string - `Object_Dir' string - `Exec_Dir' string - `Main' string list - `Languages' string list - `Library_Dir' string - `Library_Name' string - `Library_Kind' string - `Library_Elaboration' string - `Library_Version' string - - The attributes for package `Naming' are as follows (see *Note Naming - Schemes::): - - Attribute Name Category Index Value - `Specification_Suffix' associative language name string - array - `Implementation_Suffix' associative language name string - array - `Separate_Suffix' simple n/a string - attribute - `Casing' simple n/a string - attribute - `Dot_Replacement' simple n/a string - attribute - `Specification' associative Ada unit name string - array - `Implementation' associative Ada unit name string - array - `Specification_Exceptions' associative language name string list - array - `Implementation_Exceptions' associative language name string list - array - - The attributes for package `Builder', `Compiler', `Binder', `Linker', - `Cross_Reference', and `Finder' are as follows (see *Note Switches and - Project Files::). - - Attribute Name Category Index Value - `Default_Switches' associative language name string list - array - `Switches' associative file name string list - array - - In addition, package `Builder' has a single string attribute - `Local_Configuration_Pragmas' and package `Builder' has a single string - attribute `Global_Configuration_Pragmas'. - - The attribute for package `Glide' are not documented: they are for - internal use only. - - Each simple attribute has a default value: the empty string (for - string-valued attributes) and the empty list (for string list-valued - attributes). - - Similar to variable declarations, an attribute declaration defines a - new value for an attribute. - - Examples of simple attribute declarations: - - for Object_Dir use "objects"; - for Source_Dirs use ("units", "test/drivers"); - - A "simple attribute declaration" starts with the reserved word `for', - followed by the name of the attribute, followed by the reserved word - `use', followed by an expression (whose kind depends on the attribute), - followed by a semicolon. - - Attributes may be referenced in expressions. The general form for - such a reference is `'': the entity for which the - attribute is defined, followed by an apostrophe, followed by the name - of the attribute. For associative array attributes, a litteral string - between parentheses need to be supplied as index. - - Examples are: - - project'Object_Dir - Naming'Dot_Replacement - Imported_Project'Source_Dirs - Imported_Project.Naming'Casing - Builder'Default_Switches("Ada") - - The entity may be: - * `project' for an attribute of the current project - - * The name of an existing package of the current project - - * The name of an imported project - - * The name of a parent project (extended by the current project) - - * An imported/parent project name, followed by a dot, followed - by a package name - - Example: - project Prj is - for Source_Dirs use project'Source_Dirs & "units"; - for Source_Dirs use project'Source_Dirs & "test/drivers" - end Prj; - - In the first attribute declaration, initially the attribute - `Source_Dirs' has the default value: an empty string list. After this - declaration, `Source_Dirs' is a string list of one element: "units". - After the second attribute declaration `Source_Dirs' is a string list of - two elements: "units" and "test/drivers". - - Note: this example is for illustration only. In practice, the - project file would contain only one attribute declaration: - - for Source_Dirs use ("units", "test/drivers"); - -  - File: gnat_ug_vxw.info, Node: Associative Array Attributes, Next: case Constructions, Prev: Attributes, Up: Project File Syntax - - Associative Array Attributes - ---------------------------- - - Some attributes are defined as _associative arrays_. An associative - array may be regarded as a function that takes a string as a parameter - and delivers a string or string list value as its result. - - Here are some examples of associative array attribute declarations: - - for Implementation ("main") use "Main.ada"; - for Switches ("main.ada") use ("-v", "-gnatv"); - for Switches ("main.ada") use Builder'Switches ("main.ada") & "-g"; - - Like untyped variables and simple attributes, associative array - attributes may be declared several times. Each declaration supplies a - new value for the attribute, replacing the previous setting. - -  - File: gnat_ug_vxw.info, Node: case Constructions, Prev: Associative Array Attributes, Up: Project File Syntax - - `case' Constructions - -------------------- - - A `case' construction is used in a project file to effect conditional - behavior. Here is a typical example: - - project MyProj is - type OS_Type is ("Linux", "Unix", "NT", "VMS"); - - OS : OS_Type := external ("OS", "Linux"); - - package Compiler is - case OS is - when "Linux" | "Unix" => - for Default_Switches ("Ada") use ("-gnath"); - when "NT" => - for Default_Switches ("Ada") use ("-gnatP"); - when others => - end case; - end Compiler; - end MyProj; - - The syntax of a `case' construction is based on the Ada case statement - (although there is no `null' construction for empty alternatives). - - Following the reserved word `case' there is the case variable (a - typed string variable), the reserved word `is', and then a sequence of - one or more alternatives. Each alternative comprises the reserved word - `when', either a list of literal strings separated by the `"|"' - character or the reserved word `others', and the `"=>"' token. Each - literal string must belong to the string type that is the type of the - case variable. An `others' alternative, if present, must occur last. - The `end case;' sequence terminates the case construction. - - After each `=>', there are zero or more constructions. The only - constructions allowed in a case construction are other case - constructions and attribute declarations. String type declarations, - variable declarations and package declarations are not allowed. - - The value of the case variable is often given by an external - reference (see *Note External References in Project Files::). - -  - File: gnat_ug_vxw.info, Node: Objects and Sources in Project Files, Next: Importing Projects, Prev: Project File Syntax, Up: GNAT Project Manager - - Objects and Sources in Project Files - ==================================== - - * Menu: - - * Object Directory:: - * Exec Directory:: - * Source Directories:: - * Source File Names:: - - Each project has exactly one object directory and one or more source - directories. The source directories must contain at least one source - file, unless the project file explicitly specifies that no source - files are present (see *Note Source File Names::). - -  - File: gnat_ug_vxw.info, Node: Object Directory, Next: Exec Directory, Up: Objects and Sources in Project Files - - Object Directory - ---------------- - - The object directory for a project is the directory containing the - compiler's output (such as `ALI' files and object files) for the - project's immediate sources. Note that for inherited sources (when - extending a parent project) the parent project's object directory is - used. - - The object directory is given by the value of the attribute - `Object_Dir' in the project file. - - for Object_Dir use "objects"; - - The attribute OBJECT_DIR has a string value, the path name of the object - directory. The path name may be absolute or relative to the directory - of the project file. This directory must already exist, and be readable - and writable. - - By default, when the attribute `Object_Dir' is not given an explicit - value or when its value is the empty string, the object directory is - the same as the directory containing the project file. - -  - File: gnat_ug_vxw.info, Node: Exec Directory, Next: Source Directories, Prev: Object Directory, Up: Objects and Sources in Project Files - - Exec Directory - -------------- - - The exec directory for a project is the directory containing the - executables for the project's main subprograms. - - The exec directory is given by the value of the attribute `Exec_Dir' - in the project file. - - for Exec_Dir use "executables"; - - The attribute EXEC_DIR has a string value, the path name of the exec - directory. The path name may be absolute or relative to the directory - of the project file. This directory must already exist, and be writable. - - By default, when the attribute `Exec_Dir' is not given an explicit - value or when its value is the empty string, the exec directory is the - same as the object directory of the project file. - -  - File: gnat_ug_vxw.info, Node: Source Directories, Next: Source File Names, Prev: Exec Directory, Up: Objects and Sources in Project Files - - Source Directories - ------------------ - - The source directories of a project are specified by the project file - attribute `Source_Dirs'. - - This attribute's value is a string list. If the attribute is not - given an explicit value, then there is only one source directory, the - one where the project file resides. - - A `Source_Dirs' attribute that is explicitly defined to be the empty - list, as in - - for Source_Dirs use (); - - indicates that the project contains no source files. - - Otherwise, each string in the string list designates one or more - source directories. - - for Source_Dirs use ("sources", "test/drivers"); - - If a string in the list ends with `"/**"', then the directory whose - path name precedes the two asterisks, as well as all its subdirectories - (recursively), are source directories. - - for Source_Dirs use ("/system/sources/**"); - - Here the directory `/system/sources' and all of its subdirectories - (recursively) are source directories. - - To specify that the source directories are the directory of the - project file and all of its subdirectories, you can declare - `Source_Dirs' as follows: - for Source_Dirs use ("./**"); - - Each of the source directories must exist and be readable. - -  - File: gnat_ug_vxw.info, Node: Source File Names, Prev: Source Directories, Up: Objects and Sources in Project Files - - Source File Names - ----------------- - - In a project that contains source files, their names may be specified - by the attributes `Source_Files' (a string list) or `Source_List_File' - (a string). Source file names never include any directory information. - - If the attribute `Source_Files' is given an explicit value, then each - element of the list is a source file name. - - for Source_Files use ("main.adb"); - for Source_Files use ("main.adb", "pack1.ads", "pack2.adb"); - - If the attribute `Source_Files' is not given an explicit value, but the - attribute `Source_List_File' is given a string value, then the source - file names are contained in the text file whose path name (absolute or - relative to the directory of the project file) is the value of the - attribute `Source_List_File'. - - Each line in the file that is not empty or is not a comment contains - a source file name. A comment line starts with two hyphens. - - for Source_List_File use "source_list.txt"; - - By default, if neither the attribute `Source_Files' nor the attribute - `Source_List_File' is given an explicit value, then each file in the - source directories that conforms to the project's naming scheme (see - *Note Naming Schemes::) is an immediate source of the project. - - A warning is issued if both attributes `Source_Files' and - `Source_List_File' are given explicit values. In this case, the - attribute `Source_Files' prevails. - - Each source file name must be the name of one and only one existing - source file in one of the source directories. - - A `Source_Files' attribute defined with an empty list as its value - indicates that there are no source files in the project. - - Except for projects that are clearly specified as containing no Ada - source files (`Source_Dirs' or `Source_Files' specified as an empty - list, or `Languages' specified without `"Ada"' in the list) - for Source_Dirs use (); - for Source_Files use (); - for Languages use ("C", "C++"); - - a project must contain at least one immediate source. - - Projects with no source files are useful as template packages (see - *Note Packages in Project Files::) for other projects; in particular to - define a package `Naming' (see *Note Naming Schemes::). - -  - File: gnat_ug_vxw.info, Node: Importing Projects, Next: Project Extension, Prev: Objects and Sources in Project Files, Up: GNAT Project Manager - - Importing Projects - ================== - - An immediate source of a project P may depend on source files that are - neither immediate sources of P nor in the predefined library. To get - this effect, P must _import_ the projects that contain the needed - source files. - - with "project1", "utilities.gpr"; - with "/namings/apex.gpr"; - project Main is - ... - - As can be seen in this example, the syntax for importing projects is - similar to the syntax for importing compilation units in Ada. However, - project files use literal strings instead of names, and the `with' - clause identifies project files rather than packages. - - Each literal string is the file name or path name (absolute or - relative) of a project file. If a string is simply a file name, with no - path, then its location is determined by the _project path_: - - * If the environment variable `ADA_PROJECT_PATH' exists, then the - project path includes all the directories in this environment - variable, plus the directory of the project file. - - * If the environment variable `ADA_PROJECT_PATH' does not exist, - then the project path contains only one directory, namely the one - where the project file is located. - - If a relative pathname is used as in - - with "tests/proj"; - - then the path is relative to the directory where the importing project - file is located. Any symbolic link will be fully resolved in the - directory of the importing project file before the imported project - file is looked up. - - When the `with''ed project file name does not have an extension, the - default is `.gpr'. If a file with this extension is not found, then the - file name as specified in the `with' clause (no extension) will be - used. In the above example, if a file `project1.gpr' is found, then it - will be used; otherwise, if a file `project1' exists then it will be - used; if neither file exists, this is an error. - - A warning is issued if the name of the project file does not match - the name of the project; this check is case insensitive. - - Any source file that is an immediate source of the imported project - can be used by the immediate sources of the importing project, and - recursively. Thus if `A' imports `B', and `B' imports `C', the immediate - sources of `A' may depend on the immediate sources of `C', even if `A' - does not import `C' explicitly. However, this is not recommended, - because if and when `B' ceases to import `C', some sources in `A' will - no longer compile. - - A side effect of this capability is that cyclic dependences are not - permitted: if `A' imports `B' (directly or indirectly) then `B' is not - allowed to import `A'. - -  - File: gnat_ug_vxw.info, Node: Project Extension, Next: External References in Project Files, Prev: Importing Projects, Up: GNAT Project Manager - - Project Extension - ================= - - During development of a large system, it is sometimes necessary to use - modified versions of some of the source files without changing the - original sources. This can be achieved through a facility known as - _project extension_. - - project Modified_Utilities extends "/baseline/utilities.gpr" is ... - - The project file for the project being extended (the _parent_) is - identified by the literal string that follows the reserved word - `extends', which itself follows the name of the extending project (the - _child_). - - By default, a child project inherits all the sources of its parent. - However, inherited sources can be overridden: a unit with the same name - as one in the parent will hide the original unit. Inherited sources - are considered to be sources (but not immediate sources) of the child - project; see *Note Project File Syntax::. - - An inherited source file retains any switches specified in the - parent project. - - For example if the project `Utilities' contains the specification - and the body of an Ada package `Util_IO', then the project - `Modified_Utilities' can contain a new body for package `Util_IO'. The - original body of `Util_IO' will not be considered in program builds. - However, the package specification will still be found in the project - `Utilities'. - - A child project can have only one parent but it may import any - number of other projects. - - A project is not allowed to import directly or indirectly at the - same time a child project and any of its ancestors. - -  - File: gnat_ug_vxw.info, Node: External References in Project Files, Next: Packages in Project Files, Prev: Project Extension, Up: GNAT Project Manager - - External References in Project Files - ==================================== - - A project file may contain references to external variables; such - references are called _external references_. - - An external variable is either defined as part of the environment (an - environment variable in Unix, for example) or else specified on the - command line via the `-X_vbl_=_value_' switch. If both, then the - command line value is used. - - An external reference is denoted by the built-in function - `external', which returns a string value. This function has two forms: - * `external (external_variable_name)' - - * `external (external_variable_name, default_value)' - - Each parameter must be a string literal. For example: - - external ("USER") - external ("OS", "Linux") - - In the form with one parameter, the function returns the value of the - external variable given as parameter. If this name is not present in the - environment, then the returned value is an empty string. - - In the form with two string parameters, the second parameter is the - value returned when the variable given as the first parameter is not - present in the environment. In the example above, if `"OS"' is not the - name of an environment variable and is not passed on the command line, - then the returned value will be `"Linux"'. - - An external reference may be part of a string expression or of a - string list expression, to define variables or attributes. - - type Mode_Type is ("Debug", "Release"); - Mode : Mode_Type := external ("MODE"); - case Mode is - when "Debug" => - ... - -  - File: gnat_ug_vxw.info, Node: Packages in Project Files, Next: Variables from Imported Projects, Prev: External References in Project Files, Up: GNAT Project Manager - - Packages in Project Files - ========================= - - The _package_ is the project file feature that defines the settings for - project-aware tools. For each such tool you can declare a - corresponding package; the names for these packages are preset (see - *Note Packages::) but are not case sensitive. A package may contain - variable declarations, attribute declarations, and case constructions. - - project Proj is - package Builder is -- used by gnatmake - for Default_Switches ("Ada") use ("-v", "-g"); - end Builder; - end Proj; - - A package declaration starts with the reserved word `package', followed - by the package name (case insensitive), followed by the reserved word - `is'. It ends with the reserved word `end', followed by the package - name, finally followed by a semi-colon. - - Most of the packages have an attribute `Default_Switches'. This - attribute is an associative array, and its value is a string list. The - index of the associative array is the name of a programming language - (case insensitive). This attribute indicates the switch or switches to - be used with the corresponding tool. - - Some packages also have another attribute, `Switches', an associative - array whose value is a string list. The index is the name of a source - file. This attribute indicates the switch or switches to be used by - the corresponding tool when dealing with this specific file. - - Further information on these switch-related attributes is found in - *Note Switches and Project Files::. - - A package may be declared as a _renaming_ of another package; e.g., - from the project file for an imported project. - - with "/global/apex.gpr"; - project Example is - package Naming renames Apex.Naming; - ... - end Example; - - Packages that are renamed in other project files often come from - project files that have no sources: they are just used as templates. - Any modification in the template will be reflected automatically in all - the project files that rename a package from the template. - - In addition to the tool-oriented packages, you can also declare a - package named `Naming' to establish specialized source file naming - conventions (see *Note Naming Schemes::). - -  - File: gnat_ug_vxw.info, Node: Variables from Imported Projects, Next: Naming Schemes, Prev: Packages in Project Files, Up: GNAT Project Manager - - Variables from Imported Projects - ================================ - - An attribute or variable defined in an imported or parent project can - be used in expressions in the importing / extending project. Such an - attribute or variable is prefixed with the name of the project and (if - relevant) the name of package where it is defined. - - with "imported"; - project Main extends "base" is - Var1 := Imported.Var; - Var2 := Base.Var & ".new"; - - package Builder is - for Default_Switches ("Ada") use Imported.Builder.Ada_Switches & - "-gnatg" & "-v"; - end Builder; - - package Compiler is - for Default_Switches ("Ada") use Base.Compiler.Ada_Switches; - end Compiler; - end Main; - - In this example: - - * `Var1' is a copy of the variable `Var' defined in the project file - `"imported.gpr"' - - * the value of `Var2' is a copy of the value of variable `Var' - defined in the project file `base.gpr', concatenated with `".new"' - - * attribute `Default_Switches ("Ada")' in package `Builder' is a - string list that includes in its value a copy of variable - `Ada_Switches' defined in the `Builder' package in project file - `imported.gpr' plus two new elements: `"-gnatg"' and `"-v"'; - - * attribute `Default_Switches ("Ada")' in package `Compiler' is a - copy of the variable `Ada_Switches' defined in the `Compiler' - package in project file `base.gpr', the project being extended. - -  - File: gnat_ug_vxw.info, Node: Naming Schemes, Next: Library Projects, Prev: Variables from Imported Projects, Up: GNAT Project Manager - - Naming Schemes - ============== - - Sometimes an Ada software system is ported from a foreign compilation - environment to GNAT, with file names that do not use the default GNAT - conventions. Instead of changing all the file names (which for a - variety of reasons might not be possible), you can define the relevant - file naming scheme in the `Naming' package in your project file. For - example, the following package models the Apex file naming rules: - - package Naming is - for Casing use "lowercase"; - for Dot_Replacement use "."; - for Specification_Suffix ("Ada") use ".1.ada"; - for Implementation_Suffix ("Ada") use ".2.ada"; - end Naming; - - You can define the following attributes in package `Naming': - - `CASING' - This must be a string with one of the three values `"lowercase"', - `"uppercase"' or `"mixedcase"'; these strings are case insensitive. - - If CASING is not specified, then the default is `"lowercase"'. - - `DOT_REPLACEMENT' - This must be a string whose value satisfies the following - conditions: - - * It must not be empty - - * It cannot start or end with an alphanumeric character - - * It cannot be a single underscore - - * It cannot start with an underscore followed by an alphanumeric - - * It cannot contain a dot `'.'' except if it the entire string - is `"."' - - If `Dot_Replacement' is not specified, then the default is `"-"'. - - `SPECIFICATION_SUFFIX' - This is an associative array (indexed by the programming language - name, case insensitive) whose value is a string that must satisfy - the following conditions: - - * It must not be empty - - * It cannot start with an alphanumeric character - - * It cannot start with an underscore followed by an - alphanumeric character - - If `Specification_Suffix ("Ada")' is not specified, then the - default is `".ads"'. - - `IMPLEMENTATION_SUFFIX' - This is an associative array (indexed by the programming language - name, case insensitive) whose value is a string that must satisfy - the following conditions: - - * It must not be empty - - * It cannot start with an alphanumeric character - - * It cannot start with an underscore followed by an - alphanumeric character - - * It cannot be a suffix of `Specification_Suffix' - - If `Implementation_Suffix ("Ada")' is not specified, then the - default is `".adb"'. - - `SEPARATE_SUFFIX' - This must be a string whose value satisfies the same conditions as - `Implementation_Suffix'. - - If `Separate_Suffix ("Ada")' is not specified, then it defaults to - same value as `Implementation_Suffix ("Ada")'. - - `SPECIFICATION' - You can use the `Specification' attribute, an associative array, - to define the source file name for an individual Ada compilation - unit's spec. The array index must be a string literal that - identifies the Ada unit (case insensitive). The value of this - attribute must be a string that identifies the file that contains - this unit's spec (case sensitive or insensitive depending on the - operating system). - - for Specification ("MyPack.MyChild") use "mypack.mychild.spec"; - - `IMPLEMENTATION' - You can use the `Implementation' attribute, an associative array, - to define the source file name for an individual Ada compilation - unit's body (possibly a subunit). The array index must be a - string literal that identifies the Ada unit (case insensitive). - The value of this attribute must be a string that identifies the - file that contains this unit's body or subunit (case sensitive or - insensitive depending on the operating system). - - for Implementation ("MyPack.MyChild") use "mypack.mychild.body"; - -  - File: gnat_ug_vxw.info, Node: Library Projects, Next: Switches Related to Project Files, Prev: Naming Schemes, Up: GNAT Project Manager - - Library Projects - ================ - - _Library projects_ are projects whose object code is placed in a - library. (Note that this facility is not yet supported on all - platforms) - - To create a library project, you need to define in its project file - two project-level attributes: `Library_Name' and `Library_Dir'. - Additionally, you may define the library-related attributes - `Library_Kind', `Library_Version' and `Library_Elaboration'. - - The `Library_Name' attribute has a string value that must start with - a letter and include only letters and digits. - - The `Library_Dir' attribute has a string value that designates the - path (absolute or relative) of the directory where the library will - reside. It must designate an existing directory, and this directory - needs to be different from the project's object directory. It also - needs to be writable. - - If both `Library_Name' and `Library_Dir' are specified and are - legal, then the project file defines a library project. The optional - library-related attributes are checked only for such project files. - - The `Library_Kind' attribute has a string value that must be one of - the following (case insensitive): `"static"', `"dynamic"' or - `"relocatable"'. If this attribute is not specified, the library is a - static library. Otherwise, the library may be dynamic or relocatable. - Depending on the operating system, there may or may not be a distinction - between dynamic and relocatable libraries. For example, on Unix there - is no such distinction. - - The `Library_Version' attribute has a string value whose - interpretation is platform dependent. On Unix, it is used only for - dynamic/relocatable libraries as the internal name of the library (the - `"soname"'). If the library file name (built from the `Library_Name') - is different from the `Library_Version', then the library file will be - a symbolic link to the actual file whose name will be `Library_Version'. - - Example (on Unix): - - project Plib is - - Version := "1"; - - for Library_Dir use "lib_dir"; - for Library_Name use "dummy"; - for Library_Kind use "relocatable"; - for Library_Version use "libdummy.so." & Version; - - end Plib; - - Directory `lib_dir' will contain the internal library file whose name - will be `libdummy.so.1', and `libdummy.so' will be a symbolic link to - `libdummy.so.1'. - - When `gnatmake' detects that a project file (not the main project - file) is a library project file, it will check all immediate sources of - the project and rebuild the library if any of the sources have been - recompiled. All `ALI' files will also be copied from the object - directory to the library directory. To build executables, `gnatmake' - will use the library rather than the individual object files. - -  - File: gnat_ug_vxw.info, Node: Switches Related to Project Files, Next: Tools Supporting Project Files, Prev: Library Projects, Up: GNAT Project Manager - - Switches Related to Project Files - ================================= - - The following switches are used by GNAT tools that support project - files: - - ``-PPROJECT'' - Indicates the name of a project file. This project file will be - parsed with the verbosity indicated by `-vP_x_', if any, and using - the external references indicated by `-X' switches, if any. - - There must be only one `-P' switch on the command line. - - Since the Project Manager parses the project file only after all - the switches on the command line are checked, the order of the - switches `-P', `-Vp_x_' or `-X' is not significant. - - ``-XNAME=VALUE'' - Indicates that external variable NAME has the value VALUE. The - Project Manager will use this value for occurrences of - `external(name)' when parsing the project file. - - If NAME or VALUE includes a space, then NAME=VALUE should be put - between quotes. - -XOS=NT - -X"user=John Doe" - - Several `-X' switches can be used simultaneously. If several `-X' - switches specify the same NAME, only the last one is used. - - An external variable specified with a `-X' switch takes precedence - over the value of the same name in the environment. - - ``-vP_x_'' - Indicates the verbosity of the parsing of GNAT project files. - `-vP0' means Default (no output for syntactically correct project - files); `-vP1' means Medium; `-vP2' means High. - - The default is Default. - - If several `-vP_x_' switches are present, only the last one is - used. - -  - File: gnat_ug_vxw.info, Node: Tools Supporting Project Files, Next: An Extended Example, Prev: Switches Related to Project Files, Up: GNAT Project Manager - - Tools Supporting Project Files - ============================== - - * Menu: - - * gnatmake and Project Files:: - * The GNAT Driver and Project Files:: - * Glide and Project Files:: - -  - File: gnat_ug_vxw.info, Node: gnatmake and Project Files, Next: The GNAT Driver and Project Files, Up: Tools Supporting Project Files - - gnatmake and Project Files - -------------------------- - - This section covers two topics related to `gnatmake' and project files: - defining switches for `gnatmake' and for the tools that it invokes; and - the use of the `Main' attribute. - - * Menu: - - * Switches and Project Files:: - * Project Files and Main Subprograms:: - -  - File: gnat_ug_vxw.info, Node: Switches and Project Files, Next: Project Files and Main Subprograms, Up: gnatmake and Project Files - - Switches and Project Files - .......................... - - For each of the packages `Builder', `Compiler', `Binder', and `Linker', - you can specify a `Default_Switches' attribute, a `Switches' attribute, - or both; as their names imply, these switch-related attributes affect - which switches are used for which files when `gnatmake' is invoked. As - will be explained below, these package-contributed switches precede the - switches passed on the `gnatmake' command line. - - The `Default_Switches' attribute is an associative array indexed by - language name (case insensitive) and returning a string list. For - example: - - package Compiler is - for Default_Switches ("Ada") use ("-gnaty", "-v"); - end Compiler; - - The `Switches' attribute is also an associative array, indexed by a file - name (which may or may not be case sensitive, depending on the operating - system) and returning a string list. For example: - - package Builder is - for Switches ("main1.adb") use ("-O2"); - for Switches ("main2.adb") use ("-g"); - end Builder; - - For the `Builder' package, the file names should designate source files - for main subprograms. For the `Binder' and `Linker' packages, the file - names should designate `ALI' or source files for main subprograms. In - each case just the file name (without explicit extension) is acceptable. - - For each tool used in a program build (`gnatmake', the compiler, the - binder, and the linker), its corresponding package "contributes" a set - of switches for each file on which the tool is invoked, based on the - switch-related attributes defined in the package. In particular, the - switches that each of these packages contributes for a given file F - comprise: - - * the value of attribute `Switches (F)', if it is specified in the - package for the given file, - - * otherwise, the value of `Default_Switches ("Ada")', if it is - specified in the package. - - If neither of these attributes is defined in the package, then the - package does not contribute any switches for the given file. - - When `gnatmake' is invoked on a file, the switches comprise two sets, - in the following order: those contributed for the file by the `Builder' - package; and the switches passed on the command line. - - When `gnatmake' invokes a tool (compiler, binder, linker) on a file, - the switches passed to the tool comprise three sets, in the following - order: - - 1. the applicable switches contributed for the file by the `Builder' - package in the project file supplied on the command line; - - 2. those contributed for the file by the package (in the relevant - project file - see below) corresponding to the tool; and - - 3. the applicable switches passed on the command line. - - The term _applicable switches_ reflects the fact that `gnatmake' - switches may or may not be passed to individual tools, depending on the - individual switch. - - `gnatmake' may invoke the compiler on source files from different - projects. The Project Manager will use the appropriate project file to - determine the `Compiler' package for each source file being compiled. - Likewise for the `Binder' and `Linker' packages. - - As an example, consider the following package in a project file: - - project Proj1 is - package Compiler is - for Default_Switches ("Ada") use ("-g"); - for Switches ("a.adb") use ("-O1"); - for Switches ("b.adb") use ("-O2", "-gnaty"); - end Compiler; - end Proj1; - - If `gnatmake' is invoked with this project file, and it needs to - compile, say, the files `a.adb', `b.adb', and `c.adb', then `a.adb' - will be compiled with the switch `-O1', `b.adb' with switches `-O2' and - `-gnaty', and `c.adb' with `-g'. - - Another example illustrates the ordering of the switches contributed - by different packages: - - project Proj2 is - package Builder is - for Switches ("main.adb") use ("-g", "-O1", "-f"); - end Builder; - - package Compiler is - for Switches ("main.adb") use ("-O2"); - end Compiler; - end Proj2; - - If you issue the command: - - gnatmake -PProj2 -O0 main - - then the compiler will be invoked on `main.adb' with the following - sequence of switches - - -g -O1 -O2 -O0 - - with the last `-O' switch having precedence over the earlier ones; - several other switches (such as `-c') are added implicitly. - - The switches `-g' and `-O1' are contributed by package `Builder', - `-O2' is contributed by the package `Compiler' and `-O0' comes from the - command line. - - The `-g' switch will also be passed in the invocation of `gnatlink.' - - A final example illustrates switch contributions from packages in - different project files: - - project Proj3 is - for Source_Files use ("pack.ads", "pack.adb"); - package Compiler is - for Default_Switches ("Ada") use ("-gnata"); - end Compiler; - end Proj3; - - with "Proj3"; - project Proj4 is - for Source_Files use ("foo_main.adb", "bar_main.adb"); - package Builder is - for Switches ("foo_main.adb") use ("-s", "-g"); - end Builder; - end Proj4; - - -- Ada source file: - with Pack; - procedure Foo_Main is - ... - end Foo_Main; - - If the command is - gnatmake -PProj4 foo_main.adb -cargs -gnato - - then the switches passed to the compiler for `foo_main.adb' are `-g' - (contributed by the package `Proj4.Builder') and `-gnato' (passed on - the command line). When the imported package `Pack' is compiled, the - switches used are `-g' from `Proj4.Builder', `-gnata' (contributed from - package `Proj3.Compiler', and `-gnato' from the command line. - -  - File: gnat_ug_vxw.info, Node: Project Files and Main Subprograms, Prev: Switches and Project Files, Up: gnatmake and Project Files - - Project Files and Main Subprograms - .................................. - - When using a project file, you can invoke `gnatmake' with several main - subprograms, by specifying their source files on the command line. - Each of these needs to be an immediate source file of the project. - - gnatmake -Pprj main1 main2 main3 - - When using a project file, you can also invoke `gnatmake' without - explicitly specifying any main, and the effect depends on whether you - have defined the `Main' attribute. This attribute has a string list - value, where each element in the list is the name of a source file (the - file extension is optional) containing a main subprogram. - - If the `Main' attribute is defined in a project file as a non-empty - string list and the switch `-u' is not used on the command line, then - invoking `gnatmake' with this project file but without any main on the - command line is equivalent to invoking `gnatmake' with all the file - names in the `Main' attribute on the command line. - - Example: - project Prj is - for Main use ("main1", "main2", "main3"); - end Prj; - - With this project file, `"gnatmake -Pprj"' is equivalent to `"gnatmake - -Pprj main1 main2 main3"'. - - When the project attribute `Main' is not specified, or is specified - as an empty string list, or when the switch `-u' is used on the command - line, then invoking `gnatmake' with no main on the command line will - result in all immediate sources of the project file being checked, and - potentially recompiled. Depending on the presence of the switch `-u', - sources from other project files on which the immediate sources of the - main project file depend are also checked and potentially recompiled. - In other words, the `-u' switch is applied to all of the immediate - sources of themain project file. - -  - File: gnat_ug_vxw.info, Node: The GNAT Driver and Project Files, Next: Glide and Project Files, Prev: gnatmake and Project Files, Up: Tools Supporting Project Files - - The GNAT Driver and Project Files - --------------------------------- - - A number of GNAT tools, other than `gnatmake' are project-aware: - `gnatbind', `gnatfind', `gnatlink', `gnatls' and `gnatxref'. However, - none of these tools can be invoked directly with a project file switch - (`-P'). They need to be invoke through the `gnat' driver. - - The `gnat' driver is a front-end that accepts a number of commands - and call the corresponding tool. It has been designed initially for VMS - to convert VMS style qualifiers to Unix style switches, but it is now - available to all the GNAT supported platforms. - - On non VMS platforms, the `gnat' driver accepts the following - commands (case insensitive): - - * BIND to invoke `gnatbind' - - * CHOP to invoke `gnatchop' - - * COMP or COMPILE to invoke the compiler - - * ELIM to invoke `gnatelim' - - * FIND to invoke `gnatfind' - - * KR or KRUNCH to invoke `gnatkr' - - * LINK to invoke `gnatlink' - - * LS or LIST to invoke `gnatls' - - * MAKE to invoke `gnatmake' - - * NAME to invoke `gnatname' - - * PREP or PREPROCESS to invoke `gnatprep' - - * PSTA or STANDARD to invoke `gnatpsta' - - * STUB to invoke `gnatstub' - - * XREF to invoke `gnatxref' - - Note that the compiler is invoked using the command `gnatmake -f -u'. - - Following the command, you may put switches and arguments for the - invoked tool. - - gnat bind -C main.ali - gnat ls -a main - gnat chop foo.txt - - In addition, for command BIND, FIND, LS or LIST, LINK and XREF, the - project file related switches (`-P', `-X' and `-vPx') may be used in - addition to the switches of the invoking tool. - - For each of these command, there is possibly a package in the main - project that corresponds to the invoked tool. - - * package `Binder' for command BIND (invoking `gnatbind') - - * package `Finder' for command FIND (invoking `gnatfind') - - * package `Gnatls' for command LS or LIST (invoking `gnatls') - - * package `Linker' for command LINK (invoking `gnatlink') - - * package `Cross_Reference' for command XREF (invoking `gnatlink') - - - Package `Gnatls' has a unique attribute `Switches', a simple variable - with a string list value. It contains switches for the invocation of - `gnatls'. - - project Proj1 is - package gnatls is - for Switches use ("-a", "-v"); - end gnatls; - end Proj1; - - All other packages contains a switch `Default_Switches', an associative - array, indexed by the programming language (case insensitive) and - having a string list value. `Default_Switches ("Ada")' contains the - switches for the invocation of the tool corresponding to the package. - - project Proj is - - for Source_Dirs use ("./**"); - - package gnatls is - for Switches use ("-a", "-v"); - end gnatls; - - package Binder is - for Default_Switches ("Ada") use ("-C", "-e"); - end Binder; - - package Linker is - for Default_Switches ("Ada") use ("-C"); - end Linker; - - package Finder is - for Default_Switches ("Ada") use ("-a", "-f"); - end Finder; - - package Cross_Reference is - for Default_Switches ("Ada") use ("-a", "-f", "-d", "-u"); - end Cross_Reference; - end Proj; - - With the above project file, commands such as - - gnat ls -Pproj main - gnat xref -Pproj main - gnat bind -Pproj main.ali - - will set up the environment properly and invoke the tool with the - switches found in the package corresponding to the tool. - -  - File: gnat_ug_vxw.info, Node: Glide and Project Files, Prev: The GNAT Driver and Project Files, Up: Tools Supporting Project Files - - Glide and Project Files - ----------------------- - - Glide will automatically recognize the `.gpr' extension for project - files, and will convert them to its own internal format automatically. - However, it doesn't provide a syntax-oriented editor for modifying these - files. The project file will be loaded as text when you select the - menu item `Ada' => `Project' => `Edit'. You can edit this text and - save the `gpr' file; when you next select this project file in Glide it - will be automatically reloaded. - - Glide uses the `gnatlist' attribute in the `Ide' package, whose value - is something like `powerpc-wrs-vxworks-gnatls', to compute the - cross-prefix. From this information the correct location for the GNAT - runtime, and thus also the correct cross-references, can be determined. - -  - File: gnat_ug_vxw.info, Node: An Extended Example, Next: Project File Complete Syntax, Prev: Tools Supporting Project Files, Up: GNAT Project Manager - - An Extended Example - =================== - - Suppose that we have two programs, PROG1 and PROG2, with the sources in - the respective directories. We would like to build them with a single - `gnatmake' command, and we would like to place their object files into - `.build' subdirectories of the source directories. Furthermore, we would - like to have to have two separate subdirectories in `.build' - - `release' and `debug' - which will contain the object files compiled - with different set of compilation flags. - - In other words, we have the following structure: - - main - |- prog1 - | |- .build - | | debug - | | release - |- prog2 - |- .build - | debug - | release - - Here are the project files that we need to create in a directory `main' - to maintain this structure: - - 1. We create a `Common' project with a package `Compiler' that - specifies the compilation switches: - - File "common.gpr": - project Common is - - for Source_Dirs use (); -- No source files - - type Build_Type is ("release", "debug"); - Build : Build_Type := External ("BUILD", "debug"); - package Compiler is - case Build is - when "release" => - for Default_Switches ("Ada") use ("-O2"); - when "debug" => - for Default_Switches ("Ada") use ("-g"); - end case; - end Compiler; - - end Common; - - 2. We create separate projects for the two programs: - - File "prog1.gpr": - - with "common"; - project Prog1 is - - for Source_Dirs use ("prog1"); - for Object_Dir use "prog1/.build/" & Common.Build; - - package Compiler renames Common.Compiler; - - end Prog1; - - File "prog2.gpr": - - with "common"; - project Prog2 is - - for Source_Dirs use ("prog2"); - for Object_Dir use "prog2/.build/" & Common.Build; - - package Compiler renames Common.Compiler; - end Prog2; - - 3. We create a wrapping project MAIN: - - File "main.gpr": - - with "common"; - with "prog1"; - with "prog2"; - project Main is - - package Compiler renames Common.Compiler; - - end Main; - - 4. Finally we need to create a dummy procedure that `with's (either - explicitly or implicitly) all the sources of our two programs. - - - Now we can build the programs using the command - - gnatmake -Pmain dummy - - for the Debug mode, or - - gnatmake -Pmain -XBUILD=release - - for the Release mode. - -  - File: gnat_ug_vxw.info, Node: Project File Complete Syntax, Prev: An Extended Example, Up: GNAT Project Manager - - Project File Complete Syntax - ============================ - - project ::= - context_clause project_declaration - - context_clause ::= - {with_clause} - - with_clause ::= - with literal_string { , literal_string } ; - - project_declaration ::= - project simple_name [ extends literal_string ] is - {declarative_item} - end simple_name; - - declarative_item ::= - package_declaration | - typed_string_declaration | - other_declarative_item - - package_declaration ::= - package simple_name package_completion - - package_completion ::= - package_body | package_renaming - - package body ::= - is - {other_declarative_item} - end simple_name ; - - package_renaming ::== - renames simple_name.simple_name ; - - typed_string_declaration ::= - type _simple_name is - ( literal_string {, literal_string} ); - - other_declarative_item ::= - attribute_declaration | - typed_variable_declaration | - variable_declaration | - case_construction - - attribute_declaration ::= - for attribute use expression ; - - attribute ::= - simple_name | - simple_name ( literal_string ) - - typed_variable_declaration ::= - simple_name : name := string_expression ; - - variable_declaration ::= - simple_name := expression; - - expression ::= - term {& term} - - term ::= - literal_string | - string_list | - name | - external_value | - attribute_reference - - literal_string ::= - (same as Ada) - - string_list ::= - ( expression { , expression } ) - - external_value ::= - external ( literal_string [, literal_string] ) - - attribute_reference ::= - attribute_parent ' simple_name [ ( literal_string ) ] - - attribute_parent ::= - project | - simple_name | - simple_name . simple_name - - case_construction ::= - case name is - {case_item} - end case ; - - case_item ::= - when discrete_choice_list => {case_construction | attribute_declaration} - - discrete_choice_list ::= - literal_string {| literal_string} - - name ::= - simple_name {. simple_name} - - simple_name ::= - identifier (same as Ada) - -  - File: gnat_ug_vxw.info, Node: Elaboration Order Handling in GNAT, Next: The Cross-Referencing Tools gnatxref and gnatfind, Prev: GNAT Project Manager, Up: Top - - Elaboration Order Handling in GNAT - ********************************** - - * Menu: - - * Elaboration Code in Ada 95:: - * Checking the Elaboration Order in Ada 95:: - * Controlling the Elaboration Order in Ada 95:: - * Controlling Elaboration in GNAT - Internal Calls:: - * Controlling Elaboration in GNAT - External Calls:: - * Default Behavior in GNAT - Ensuring Safety:: - * Elaboration Issues for Library Tasks:: - * Mixing Elaboration Models:: - * What to Do If the Default Elaboration Behavior Fails:: - * Elaboration for Access-to-Subprogram Values:: - * Summary of Procedures for Elaboration Control:: - * Other Elaboration Order Considerations:: - - This chapter describes the handling of elaboration code in Ada 95 and - in GNAT, and discusses how the order of elaboration of program units can - be controlled in GNAT, either automatically or with explicit programming - features. - -  - File: gnat_ug_vxw.info, Node: Elaboration Code in Ada 95, Next: Checking the Elaboration Order in Ada 95, Up: Elaboration Order Handling in GNAT - - Elaboration Code in Ada 95 - ========================== - - Ada 95 provides rather general mechanisms for executing code at - elaboration time, that is to say before the main program starts - executing. Such code arises in three contexts: - - Initializers for variables. - Variables declared at the library level, in package specs or - bodies, can require initialization that is performed at - elaboration time, as in: - Sqrt_Half : Float := Sqrt (0.5); - - Package initialization code - Code in a `BEGIN-END' section at the outer level of a package body - is executed as part of the package body elaboration code. - - Library level task allocators - Tasks that are declared using task allocators at the library level - start executing immediately and hence can execute at elaboration - time. - - Subprogram calls are possible in any of these contexts, which means that - any arbitrary part of the program may be executed as part of the - elaboration code. It is even possible to write a program which does all - its work at elaboration time, with a null main program, although - stylistically this would usually be considered an inappropriate way to - structure a program. - - An important concern arises in the context of elaboration code: we - have to be sure that it is executed in an appropriate order. What we - have is a series of elaboration code sections, potentially one section - for each unit in the program. It is important that these execute in the - correct order. Correctness here means that, taking the above example of - the declaration of `Sqrt_Half', if some other piece of elaboration code - references `Sqrt_Half', then it must run after the section of - elaboration code that contains the declaration of `Sqrt_Half'. - - There would never be any order of elaboration problem if we made a - rule that whenever you `with' a unit, you must elaborate both the spec - and body of that unit before elaborating the unit doing the `with''ing: - - with Unit_1; - package Unit_2 is ... - - would require that both the body and spec of `Unit_1' be elaborated - before the spec of `Unit_2'. However, a rule like that would be far too - restrictive. In particular, it would make it impossible to have routines - in separate packages that were mutually recursive. - - You might think that a clever enough compiler could look at the - actual elaboration code and determine an appropriate correct order of - elaboration, but in the general case, this is not possible. Consider - the following example. - - In the body of `Unit_1', we have a procedure `Func_1' that references - the variable `Sqrt_1', which is declared in the elaboration code of the - body of `Unit_1': - - Sqrt_1 : Float := Sqrt (0.1); - - The elaboration code of the body of `Unit_1' also contains: - - if expression_1 = 1 then - Q := Unit_2.Func_2; - end if; - - `Unit_2' is exactly parallel, it has a procedure `Func_2' that - references the variable `Sqrt_2', which is declared in the elaboration - code of the body `Unit_2': - - Sqrt_2 : Float := Sqrt (0.1); - - The elaboration code of the body of `Unit_2' also contains: - - if expression_2 = 2 then - Q := Unit_1.Func_1; - end if; - - Now the question is, which of the following orders of elaboration is - acceptable: - - Spec of Unit_1 - Spec of Unit_2 - Body of Unit_1 - Body of Unit_2 - - or - - Spec of Unit_2 - Spec of Unit_1 - Body of Unit_2 - Body of Unit_1 - - If you carefully analyze the flow here, you will see that you cannot - tell at compile time the answer to this question. If `expression_1' is - not equal to 1, and `expression_2' is not equal to 2, then either order - is acceptable, because neither of the function calls is executed. If - both tests evaluate to true, then neither order is acceptable and in - fact there is no correct order. - - If one of the two expressions is true, and the other is false, then - one of the above orders is correct, and the other is incorrect. For - example, if `expression_1' = 1 and `expression_2' /= 2, then the call - to `Func_2' will occur, but not the call to `Func_1.' This means that - it is essential to elaborate the body of `Unit_1' before the body of - `Unit_2', so the first order of elaboration is correct and the second - is wrong. - - By making `expression_1' and `expression_2' depend on input data, or - perhaps the time of day, we can make it impossible for the compiler or - binder to figure out which of these expressions will be true, and hence - it is impossible to guarantee a safe order of elaboration at run time. - -  - File: gnat_ug_vxw.info, Node: Checking the Elaboration Order in Ada 95, Next: Controlling the Elaboration Order in Ada 95, Prev: Elaboration Code in Ada 95, Up: Elaboration Order Handling in GNAT - - Checking the Elaboration Order in Ada 95 - ======================================== - - In some languages that involve the same kind of elaboration problems, - e.g. Java and C++, the programmer is expected to worry about these - ordering problems himself, and it is common to write a program in which - an incorrect elaboration order gives surprising results, because it - references variables before they are initialized. Ada 95 is designed - to be a safe language, and a programmer-beware approach is clearly not - sufficient. Consequently, the language provides three lines of defense: - - Standard rules - Some standard rules restrict the possible choice of elaboration - order. In particular, if you `with' a unit, then its spec is always - elaborated before the unit doing the `with'. Similarly, a parent - spec is always elaborated before the child spec, and finally a - spec is always elaborated before its corresponding body. - - Dynamic elaboration checks - Dynamic checks are made at run time, so that if some entity is - accessed before it is elaborated (typically by means of a - subprogram call) then the exception (`Program_Error') is raised. - - Elaboration control - Facilities are provided for the programmer to specify the desired - order of elaboration. - - Let's look at these facilities in more detail. First, the rules for - dynamic checking. One possible rule would be simply to say that the - exception is raised if you access a variable which has not yet been - elaborated. The trouble with this approach is that it could require - expensive checks on every variable reference. Instead Ada 95 has two - rules which are a little more restrictive, but easier to check, and - easier to state: - - Restrictions on calls - A subprogram can only be called at elaboration time if its body - has been elaborated. The rules for elaboration given above - guarantee that the spec of the subprogram has been elaborated - before the call, but not the body. If this rule is violated, then - the exception `Program_Error' is raised. - - Restrictions on instantiations - A generic unit can only be instantiated if the body of the generic - unit has been elaborated. Again, the rules for elaboration given - above guarantee that the spec of the generic unit has been - elaborated before the instantiation, but not the body. If this - rule is violated, then the exception `Program_Error' is raised. - - The idea is that if the body has been elaborated, then any variables it - references must have been elaborated; by checking for the body being - elaborated we guarantee that none of its references causes any trouble. - As we noted above, this is a little too restrictive, because a - subprogram that has no non-local references in its body may in fact be - safe to call. However, it really would be unsafe to rely on this, - because it would mean that the caller was aware of details of the - implementation in the body. This goes against the basic tenets of Ada. - - A plausible implementation can be described as follows. A Boolean - variable is associated with each subprogram and each generic unit. This - variable is initialized to False, and is set to True at the point body - is elaborated. Every call or instantiation checks the variable, and - raises `Program_Error' if the variable is False. - - Note that one might think that it would be good enough to have one - Boolean variable for each package, but that would not deal with cases - of trying to call a body in the same package as the call that has not - been elaborated yet. Of course a compiler may be able to do enough - analysis to optimize away some of the Boolean variables as unnecessary, - and `GNAT' indeed does such optimizations, but still the easiest - conceptual model is to think of there being one variable per subprogram. - -  - File: gnat_ug_vxw.info, Node: Controlling the Elaboration Order in Ada 95, Next: Controlling Elaboration in GNAT - Internal Calls, Prev: Checking the Elaboration Order in Ada 95, Up: Elaboration Order Handling in GNAT - - Controlling the Elaboration Order in Ada 95 - =========================================== - - In the previous section we discussed the rules in Ada 95 which ensure - that `Program_Error' is raised if an incorrect elaboration order is - chosen. This prevents erroneous executions, but we need mechanisms to - specify a correct execution and avoid the exception altogether. To - achieve this, Ada 95 provides a number of features for controlling the - order of elaboration. We discuss these features in this section. - - First, there are several ways of indicating to the compiler that a - given unit has no elaboration problems: - - packages that do not require a body - In Ada 95, a library package that does not require a body does not - permit a body. This means that if we have a such a package, as in: - - package Definitions is - generic - type m is new integer; - package Subp is - type a is array (1 .. 10) of m; - type b is array (1 .. 20) of m; - end Subp; - end Definitions; - - A package that `with''s `Definitions' may safely instantiate - `Definitions.Subp' because the compiler can determine that there - definitely is no package body to worry about in this case - - pragma Pure - Places sufficient restrictions on a unit to guarantee that no call - to any subprogram in the unit can result in an elaboration - problem. This means that the compiler does not need to worry about - the point of elaboration of such units, and in particular, does - not need to check any calls to any subprograms in this unit. - - pragma Preelaborate - This pragma places slightly less stringent restrictions on a unit - than does pragma Pure, but these restrictions are still sufficient - to ensure that there are no elaboration problems with any calls to - the unit. - - pragma Elaborate_Body - This pragma requires that the body of a unit be elaborated - immediately after its spec. Suppose a unit `A' has such a pragma, - and unit `B' does a `with' of unit `A'. Recall that the standard - rules require the spec of unit `A' to be elaborated before the - `with''ing unit; given the pragma in `A', we also know that the - body of `A' will be elaborated before `B', so that calls to `A' - are safe and do not need a check. - - Note that, unlike pragma `Pure' and pragma `Preelaborate', the use of - `Elaborate_Body' does not guarantee that the program is free of - elaboration problems, because it may not be possible to satisfy the - requested elaboration order. Let's go back to the example with - `Unit_1' and `Unit_2'. If a programmer marks `Unit_1' as - `Elaborate_Body', and not `Unit_2,' then the order of elaboration will - be: - - Spec of Unit_2 - Spec of Unit_1 - Body of Unit_1 - Body of Unit_2 - - Now that means that the call to `Func_1' in `Unit_2' need not be - checked, it must be safe. But the call to `Func_2' in `Unit_1' may - still fail if `Expression_1' is equal to 1, and the programmer must - still take responsibility for this not being the case. - - If all units carry a pragma `Elaborate_Body', then all problems are - eliminated, except for calls entirely within a body, which are in any - case fully under programmer control. However, using the pragma - everywhere is not always possible. In particular, for our - `Unit_1'/`Unit_2' example, if we marked both of them as having pragma - `Elaborate_Body', then clearly there would be no possible elaboration - order. - - The above pragmas allow a server to guarantee safe use by clients, - and clearly this is the preferable approach. Consequently a good rule in - Ada 95 is to mark units as `Pure' or `Preelaborate' if possible, and if - this is not possible, mark them as `Elaborate_Body' if possible. As we - have seen, there are situations where neither of these three pragmas - can be used. So we also provide methods for clients to control the - order of elaboration of the servers on which they depend: - - pragma Elaborate (unit) - This pragma is placed in the context clause, after a `with' clause, - and it requires that the body of the named unit be elaborated - before the unit in which the pragma occurs. The idea is to use - this pragma if the current unit calls at elaboration time, - directly or indirectly, some subprogram in the named unit. - - pragma Elaborate_All (unit) - This is a stronger version of the Elaborate pragma. Consider the - following example: - - Unit A `with''s unit B and calls B.Func in elab code - Unit B `with''s unit C, and B.Func calls C.Func - - Now if we put a pragma `Elaborate (B)' in unit `A', this ensures - that the body of `B' is elaborated before the call, but not the - body of `C', so the call to `C.Func' could still cause - `Program_Error' to be raised. - - The effect of a pragma `Elaborate_All' is stronger, it requires - not only that the body of the named unit be elaborated before the - unit doing the `with', but also the bodies of all units that the - named unit uses, following `with' links transitively. For example, - if we put a pragma `Elaborate_All (B)' in unit `A', then it - requires not only that the body of `B' be elaborated before `A', - but also the body of `C', because `B' `with''s `C'. - - We are now in a position to give a usage rule in Ada 95 for avoiding - elaboration problems, at least if dynamic dispatching and access to - subprogram values are not used. We will handle these cases separately - later. - - The rule is simple. If a unit has elaboration code that can directly - or indirectly make a call to a subprogram in a `with''ed unit, or - instantiate a generic unit in a `with''ed unit, then if the `with''ed - unit does not have pragma `Pure' or `Preelaborate', then the client - should have a pragma `Elaborate_All' for the `with''ed unit. By - following this rule a client is assured that calls can be made without - risk of an exception. If this rule is not followed, then a program may - be in one of four states: - - No order exists - No order of elaboration exists which follows the rules, taking into - account any `Elaborate', `Elaborate_All', or `Elaborate_Body' - pragmas. In this case, an Ada 95 compiler must diagnose the - situation at bind time, and refuse to build an executable program. - - One or more orders exist, all incorrect - One or more acceptable elaboration orders exists, and all of them - generate an elaboration order problem. In this case, the binder - can build an executable program, but `Program_Error' will be raised - when the program is run. - - Several orders exist, some right, some incorrect - One or more acceptable elaboration orders exists, and some of them - work, and some do not. The programmer has not controlled the order - of elaboration, so the binder may or may not pick one of the - correct orders, and the program may or may not raise an exception - when it is run. This is the worst case, because it means that the - program may fail when moved to another compiler, or even another - version of the same compiler. - - One or more orders exists, all correct - One ore more acceptable elaboration orders exist, and all of them - work. In this case the program runs successfully. This state of - affairs can be guaranteed by following the rule we gave above, but - may be true even if the rule is not followed. - - Note that one additional advantage of following our Elaborate_All rule - is that the program continues to stay in the ideal (all orders OK) state - even if maintenance changes some bodies of some subprograms. - Conversely, if a program that does not follow this rule happens to be - safe at some point, this state of affairs may deteriorate silently as a - result of maintenance changes. - - You may have noticed that the above discussion did not mention the - use of `Elaborate_Body'. This was a deliberate omission. If you `with' - an `Elaborate_Body' unit, it still may be the case that code in the - body makes calls to some other unit, so it is still necessary to use - `Elaborate_All' on such units. - -  - File: gnat_ug_vxw.info, Node: Controlling Elaboration in GNAT - Internal Calls, Next: Controlling Elaboration in GNAT - External Calls, Prev: Controlling the Elaboration Order in Ada 95, Up: Elaboration Order Handling in GNAT - - Controlling Elaboration in GNAT - Internal Calls - ================================================ - - In the case of internal calls, i.e. calls within a single package, the - programmer has full control over the order of elaboration, and it is up - to the programmer to elaborate declarations in an appropriate order. For - example writing: - - function One return Float; - - Q : Float := One; - - function One return Float is - begin - return 1.0; - end One; - - will obviously raise `Program_Error' at run time, because function One - will be called before its body is elaborated. In this case GNAT will - generate a warning that the call will raise `Program_Error': - - 1. procedure y is - 2. function One return Float; - 3. - 4. Q : Float := One; - | - >>> warning: cannot call "One" before body is elaborated - >>> warning: Program_Error will be raised at run time - - 5. - 6. function One return Float is - 7. begin - 8. return 1.0; - 9. end One; - 10. - 11. begin - 12. null; - 13. end; - - Note that in this particular case, it is likely that the call is safe, - because the function `One' does not access any global variables. - Nevertheless in Ada 95, we do not want the validity of the check to - depend on the contents of the body (think about the separate - compilation case), so this is still wrong, as we discussed in the - previous sections. - - The error is easily corrected by rearranging the declarations so - that the body of One appears before the declaration containing the call - (note that in Ada 95, declarations can appear in any order, so there is - no restriction that would prevent this reordering, and if we write: - - function One return Float; - - function One return Float is - begin - return 1.0; - end One; - - Q : Float := One; - - then all is well, no warning is generated, and no `Program_Error' - exception will be raised. Things are more complicated when a chain of - subprograms is executed: - - function A return Integer; - function B return Integer; - function C return Integer; - - function B return Integer is begin return A; end; - function C return Integer is begin return B; end; - - X : Integer := C; - - function A return Integer is begin return 1; end; - - Now the call to `C' at elaboration time in the declaration of `X' is - correct, because the body of `C' is already elaborated, and the call to - `B' within the body of `C' is correct, but the call to `A' within the - body of `B' is incorrect, because the body of `A' has not been - elaborated, so `Program_Error' will be raised on the call to `A'. In - this case GNAT will generate a warning that `Program_Error' may be - raised at the point of the call. Let's look at the warning: - - 1. procedure x is - 2. function A return Integer; - 3. function B return Integer; - 4. function C return Integer; - 5. - 6. function B return Integer is begin return A; end; - | - >>> warning: call to "A" before body is elaborated may - raise Program_Error - >>> warning: "B" called at line 7 - >>> warning: "C" called at line 9 - - 7. function C return Integer is begin return B; end; - 8. - 9. X : Integer := C; - 10. - 11. function A return Integer is begin return 1; end; - 12. - 13. begin - 14. null; - 15. end; - - Note that the message here says "may raise", instead of the direct case, - where the message says "will be raised". That's because whether `A' is - actually called depends in general on run-time flow of control. For - example, if the body of `B' said - - function B return Integer is - begin - if some-condition-depending-on-input-data then - return A; - else - return 1; - end if; - end B; - - then we could not know until run time whether the incorrect call to A - would actually occur, so `Program_Error' might or might not be raised. - It is possible for a compiler to do a better job of analyzing bodies, to - determine whether or not `Program_Error' might be raised, but it - certainly couldn't do a perfect job (that would require solving the - halting problem and is provably impossible), and because this is a - warning anyway, it does not seem worth the effort to do the analysis. - Cases in which it would be relevant are rare. - - In practice, warnings of either of the forms given above will - usually correspond to real errors, and should be examined carefully and - eliminated. In the rare case where a warning is bogus, it can be - suppressed by any of the following methods: - - * Compile with the `-gnatws' switch set - - * Suppress `Elaboration_Checks' for the called subprogram - - * Use pragma `Warnings_Off' to turn warnings off for the call - - For the internal elaboration check case, GNAT by default generates the - necessary run-time checks to ensure that `Program_Error' is raised if - any call fails an elaboration check. Of course this can only happen if a - warning has been issued as described above. The use of pragma `Suppress - (Elaboration_Checks)' may (but is not guaranteed to) suppress some of - these checks, meaning that it may be possible (but is not guaranteed) - for a program to be able to call a subprogram whose body is not yet - elaborated, without raising a `Program_Error' exception. - -  - File: gnat_ug_vxw.info, Node: Controlling Elaboration in GNAT - External Calls, Next: Default Behavior in GNAT - Ensuring Safety, Prev: Controlling Elaboration in GNAT - Internal Calls, Up: Elaboration Order Handling in GNAT - - Controlling Elaboration in GNAT - External Calls - ================================================ - - The previous section discussed the case in which the execution of a - particular thread of elaboration code occurred entirely within a single - unit. This is the easy case to handle, because a programmer has direct - and total control over the order of elaboration, and furthermore, - checks need only be generated in cases which are rare and which the - compiler can easily detect. The situation is more complex when - separate compilation is taken into account. Consider the following: - - package Math is - function Sqrt (Arg : Float) return Float; - end Math; - - package body Math is - function Sqrt (Arg : Float) return Float is - begin - ... - end Sqrt; - end Math; - - with Math; - package Stuff is - X : Float := Math.Sqrt (0.5); - end Stuff; - - with Stuff; - procedure Main is - begin - ... - end Main; - - where `Main' is the main program. When this program is executed, the - elaboration code must first be executed, and one of the jobs of the - binder is to determine the order in which the units of a program are to - be elaborated. In this case we have four units: the spec and body of - `Math', the spec of `Stuff' and the body of `Main'). In what order - should the four separate sections of elaboration code be executed? - - There are some restrictions in the order of elaboration that the - binder can choose. In particular, if unit U has a `with' for a package - `X', then you are assured that the spec of `X' is elaborated before U , - but you are not assured that the body of `X' is elaborated before U. - This means that in the above case, the binder is allowed to choose the - order: - - spec of Math - spec of Stuff - body of Math - body of Main - - but that's not good, because now the call to `Math.Sqrt' that happens - during the elaboration of the `Stuff' spec happens before the body of - `Math.Sqrt' is elaborated, and hence causes `Program_Error' exception - to be raised. At first glance, one might say that the binder is - misbehaving, because obviously you want to elaborate the body of - something you `with' first, but that is not a general rule that can be - followed in all cases. Consider - - package X is ... - - package Y is ... - - with X; - package body Y is ... - - with Y; - package body X is ... - - This is a common arrangement, and, apart from the order of elaboration - problems that might arise in connection with elaboration code, this - works fine. A rule that says that you must first elaborate the body of - anything you `with' cannot work in this case: the body of `X' `with''s - `Y', which means you would have to elaborate the body of `Y' first, but - that `with''s `X', which means you have to elaborate the body of `X' - first, but ... and we have a loop that cannot be broken. - - It is true that the binder can in many cases guess an order of - elaboration that is unlikely to cause a `Program_Error' exception to be - raised, and it tries to do so (in the above example of - `Math/Stuff/Spec', the GNAT binder will by default elaborate the body - of `Math' right after its spec, so all will be well). - - However, a program that blindly relies on the binder to be helpful - can get into trouble, as we discussed in the previous sections, so GNAT - provides a number of facilities for assisting the programmer in - developing programs that are robust with respect to elaboration order. - -  - File: gnat_ug_vxw.info, Node: Default Behavior in GNAT - Ensuring Safety, Next: Elaboration Issues for Library Tasks, Prev: Controlling Elaboration in GNAT - External Calls, Up: Elaboration Order Handling in GNAT - - Default Behavior in GNAT - Ensuring Safety - ========================================== - - The default behavior in GNAT ensures elaboration safety. In its default - mode GNAT implements the rule we previously described as the right - approach. Let's restate it: - - * _If a unit has elaboration code that can directly or indirectly - make a call to a subprogram in a `with''ed unit, or instantiate a - generic unit in a `with''ed unit, then if the `with''ed unit does - not have pragma `Pure' or `Preelaborate', then the client should - have an `Elaborate_All' for the `with''ed unit._ - - By following this rule a client is assured that calls and - instantiations can be made without risk of an exception. - - In this mode GNAT traces all calls that are potentially made from - elaboration code, and puts in any missing implicit `Elaborate_All' - pragmas. The advantage of this approach is that no elaboration problems - are possible if the binder can find an elaboration order that is - consistent with these implicit `Elaborate_All' pragmas. The - disadvantage of this approach is that no such order may exist. - - If the binder does not generate any diagnostics, then it means that - it has found an elaboration order that is guaranteed to be safe. - However, the binder may still be relying on implicitly generated - `Elaborate_All' pragmas so portability to other compilers than GNAT is - not guaranteed. - - If it is important to guarantee portability, then the compilations - should use the `-gnatwl' (warn on elaboration problems) switch. This - will cause warning messages to be generated indicating the missing - `Elaborate_All' pragmas. Consider the following source program: - - with k; - package j is - m : integer := k.r; - end; - - where it is clear that there should be a pragma `Elaborate_All' for - unit `k'. An implicit pragma will be generated, and it is likely that - the binder will be able to honor it. However, it is safer to include - the pragma explicitly in the source. If this unit is compiled with the - `-gnatwl' switch, then the compiler outputs a warning: - - 1. with k; - 2. package j is - 3. m : integer := k.r; - | - >>> warning: call to "r" may raise Program_Error - >>> warning: missing pragma Elaborate_All for "k" - - 4. end; - - and these warnings can be used as a guide for supplying manually the - missing pragmas. - - This default mode is more restrictive than the Ada Reference Manual, - and it is possible to construct programs which will compile using the - dynamic model described there, but will run into a circularity using - the safer static model we have described. - - Of course any Ada compiler must be able to operate in a mode - consistent with the requirements of the Ada Reference Manual, and in - particular must have the capability of implementing the standard - dynamic model of elaboration with run-time checks. - - In GNAT, this standard mode can be achieved either by the use of the - `-gnatE' switch on the compiler (`gcc' or `gnatmake') command, or by - the use of the configuration pragma: - - pragma Elaboration_Checks (RM); - - Either approach will cause the unit affected to be compiled using the - standard dynamic run-time elaboration checks described in the Ada - Reference Manual. The static model is generally preferable, since it is - clearly safer to rely on compile and link time checks rather than - run-time checks. However, in the case of legacy code, it may be - difficult to meet the requirements of the static model. This issue is - further discussed in *Note What to Do If the Default Elaboration - Behavior Fails::. - - Note that the static model provides a strict subset of the allowed - behavior and programs of the Ada Reference Manual, so if you do adhere - to the static model and no circularities exist, then you are assured - that your program will work using the dynamic model. - -  - File: gnat_ug_vxw.info, Node: Elaboration Issues for Library Tasks, Next: Mixing Elaboration Models, Prev: Default Behavior in GNAT - Ensuring Safety, Up: Elaboration Order Handling in GNAT - - Elaboration Issues for Library Tasks - ==================================== - - In this section we examine special elaboration issues that arise for - programs that declare library level tasks. - - Generally the model of execution of an Ada program is that all units - are elaborated, and then execution of the program starts. However, the - declaration of library tasks definitely does not fit this model. The - reason for this is that library tasks start as soon as they are declared - (more precisely, as soon as the statement part of the enclosing package - body is reached), that is to say before elaboration of the program is - complete. This means that if such a task calls a subprogram, or an - entry in another task, the callee may or may not be elaborated yet, and - in the standard Reference Manual model of dynamic elaboration checks, - you can even get timing dependent Program_Error exceptions, since there - can be a race between the elaboration code and the task code. - - The static model of elaboration in GNAT seeks to avoid all such - dynamic behavior, by being conservative, and the conservative approach - in this particular case is to assume that all the code in a task body - is potentially executed at elaboration time if a task is declared at - the library level. - - This can definitely result in unexpected circularities. Consider the - following example - - package Decls is - task Lib_Task is - entry Start; - end Lib_Task; - - type My_Int is new Integer; - - function Ident (M : My_Int) return My_Int; - end Decls; - - with Utils; - package body Decls is - task body Lib_Task is - begin - accept Start; - Utils.Put_Val (2); - end Lib_Task; - - function Ident (M : My_Int) return My_Int is - begin - return M; - end Ident; - end Decls; - - with Decls; - package Utils is - procedure Put_Val (Arg : Decls.My_Int); - end Utils; - - with Text_IO; - package body Utils is - procedure Put_Val (Arg : Decls.My_Int) is - begin - Text_IO.Put_Line (Decls.My_Int'Image (Decls.Ident (Arg))); - end Put_Val; - end Utils; - - with Decls; - procedure Main is - begin - Decls.Lib_Task.Start; - end; - - If the above example is compiled in the default static elaboration - mode, then a circularity occurs. The circularity comes from the call - `Utils.Put_Val' in the task body of `Decls.Lib_Task'. Since this call - occurs in elaboration code, we need an implicit pragma `Elaborate_All' - for `Utils'. This means that not only must the spec and body of `Utils' - be elaborated before the body of `Decls', but also the spec and body of - any unit that is `with'ed' by the body of `Utils' must also be - elaborated before the body of `Decls'. This is the transitive - implication of pragma `Elaborate_All' and it makes sense, because in - general the body of `Put_Val' might have a call to something in a - `with'ed' unit. - - In this case, the body of Utils (actually its spec) `with's' - `Decls'. Unfortunately this means that the body of `Decls' must be - elaborated before itself, in case there is a call from the body of - `Utils'. - - Here is the exact chain of events we are worrying about: - - 1. In the body of `Decls' a call is made from within the body of a - library task to a subprogram in the package `Utils'. Since this - call may occur at elaboration time (given that the task is - activated at elaboration time), we have to assume the worst, i.e. - that the call does happen at elaboration time. - - 2. This means that the body and spec of `Util' must be elaborated - before the body of `Decls' so that this call does not cause an - access before elaboration. - - 3. Within the body of `Util', specifically within the body of - `Util.Put_Val' there may be calls to any unit `with''ed by this - package. - - 4. One such `with''ed package is package `Decls', so there might be a - call to a subprogram in `Decls' in `Put_Val'. In fact there is - such a call in this example, but we would have to assume that - there was such a call even if it were not there, since we are not - supposed to write the body of `Decls' knowing what is in the body - of `Utils'; certainly in the case of the static elaboration model, - the compiler does not know what is in other bodies and must assume - the worst. - - 5. This means that the spec and body of `Decls' must also be - elaborated before we elaborate the unit containing the call, but - that unit is `Decls'! This means that the body of `Decls' must be - elaborated before itself, and that's a circularity. - - Indeed, if you add an explicit pragma Elaborate_All for `Utils' in the - body of `Decls' you will get a true Ada Reference Manual circularity - that makes the program illegal. - - In practice, we have found that problems with the static model of - elaboration in existing code often arise from library tasks, so we must - address this particular situation. - - Note that if we compile and run the program above, using the dynamic - model of elaboration (that is to say use the `-gnatE' switch), then it - compiles, binds, links, and runs, printing the expected result of 2. - Therefore in some sense the circularity here is only apparent, and we - need to capture the properties of this program that distinguish it - from other library-level tasks that have real elaboration problems. - - We have four possible answers to this question: - - * Use the dynamic model of elaboration. - - If we use the `-gnatE' switch, then as noted above, the program - works. Why is this? If we examine the task body, it is apparent - that the task cannot proceed past the `accept' statement until - after elaboration has been completed, because the corresponding - entry call comes from the main program, not earlier. This is why - the dynamic model works here. But that's really giving up on a - precise analysis, and we prefer to take this approach only if we - cannot solve the problem in any other manner. So let us examine - two ways to reorganize the program to avoid the potential - elaboration problem. - - * Split library tasks into separate packages. - - Write separate packages, so that library tasks are isolated from - other declarations as much as possible. Let us look at a variation - on the above program. - - package Decls1 is - task Lib_Task is - entry Start; - end Lib_Task; - end Decls1; - - with Utils; - package body Decls1 is - task body Lib_Task is - begin - accept Start; - Utils.Put_Val (2); - end Lib_Task; - end Decls1; - - package Decls2 is - type My_Int is new Integer; - function Ident (M : My_Int) return My_Int; - end Decls2; - - with Utils; - package body Decls2 is - function Ident (M : My_Int) return My_Int is - begin - return M; - end Ident; - end Decls2; - - with Decls2; - package Utils is - procedure Put_Val (Arg : Decls2.My_Int); - end Utils; - - with Text_IO; - package body Utils is - procedure Put_Val (Arg : Decls2.My_Int) is - begin - Text_IO.Put_Line (Decls2.My_Int'Image (Decls2.Ident (Arg))); - end Put_Val; - end Utils; - - with Decls1; - procedure Main is - begin - Decls1.Lib_Task.Start; - end; - - All we have done is to split `Decls' into two packages, one - containing the library task, and one containing everything else. - Now there is no cycle, and the program compiles, binds, links and - executes using the default static model of elaboration. - - * Declare separate task types. - - A significant part of the problem arises because of the use of the - single task declaration form. This means that the elaboration of - the task type, and the elaboration of the task itself (i.e. the - creation of the task) happen at the same time. A good rule of - style in Ada 95 is to always create explicit task types. By - following the additional step of placing task objects in separate - packages from the task type declaration, many elaboration problems - are avoided. Here is another modified example of the example - program: - - package Decls is - task type Lib_Task_Type is - entry Start; - end Lib_Task_Type; - - type My_Int is new Integer; - - function Ident (M : My_Int) return My_Int; - end Decls; - - with Utils; - package body Decls is - task body Lib_Task_Type is - begin - accept Start; - Utils.Put_Val (2); - end Lib_Task_Type; - - function Ident (M : My_Int) return My_Int is - begin - return M; - end Ident; - end Decls; - - with Decls; - package Utils is - procedure Put_Val (Arg : Decls.My_Int); - end Utils; - - with Text_IO; - package body Utils is - procedure Put_Val (Arg : Decls.My_Int) is - begin - Text_IO.Put_Line (Decls.My_Int'Image (Decls.Ident (Arg))); - end Put_Val; - end Utils; - - with Decls; - package Declst is - Lib_Task : Decls.Lib_Task_Type; - end Declst; - - with Declst; - procedure Main is - begin - Declst.Lib_Task.Start; - end; - - What we have done here is to replace the `task' declaration in - package `Decls' with a `task type' declaration. Then we introduce - a separate package `Declst' to contain the actual task object. - This separates the elaboration issues for the `task type' - declaration, which causes no trouble, from the elaboration issues - of the task object, which is also unproblematic, since it is now - independent of the elaboration of `Utils'. This separation of - concerns also corresponds to a generally sound engineering - principle of separating declarations from instances. This version - of the program also compiles, binds, links, and executes, - generating the expected output. - - * Use No_Entry_Calls_In_Elaboration_Code restriction. - - The previous two approaches described how a program can be - restructured to avoid the special problems caused by library task - bodies. in practice, however, such restructuring may be difficult - to apply to existing legacy code, so we must consider solutions - that do not require massive rewriting. - - Let us consider more carefully why our original sample program - works under the dynamic model of elaboration. The reason is that - the code in the task body blocks immediately on the `accept' - statement. Now of course there is nothing to prohibit elaboration - code from making entry calls (for example from another library - level task), so we cannot tell in isolation that the task will not - execute the accept statement during elaboration. - - However, in practice it is very unusual to see elaboration code - make any entry calls, and the pattern of tasks starting at - elaboration time and then immediately blocking on `accept' or - `select' statements is very common. What this means is that the - compiler is being too pessimistic when it analyzes the whole - package body as though it might be executed at elaboration time. - - If we know that the elaboration code contains no entry calls, (a - very safe assumption most of the time, that could almost be made - the default behavior), then we can compile all units of the - program under control of the following configuration pragma: - - pragma Restrictions (No_Entry_Calls_In_Elaboration_Code); - - This pragma can be placed in the `gnat.adc' file in the usual - manner. If we take our original unmodified program and compile it - in the presence of a `gnat.adc' containing the above pragma, then - once again, we can compile, bind, link, and execute, obtaining the - expected result. In the presence of this pragma, the compiler does - not trace calls in a task body, that appear after the first - `accept' or `select' statement, and therefore does not report a - potential circularity in the original program. - - The compiler will check to the extent it can that the above - restriction is not violated, but it is not always possible to do a - complete check at compile time, so it is important to use this - pragma only if the stated restriction is in fact met, that is to - say no task receives an entry call before elaboration of all units - is completed. - - -  - File: gnat_ug_vxw.info, Node: Mixing Elaboration Models, Next: What to Do If the Default Elaboration Behavior Fails, Prev: Elaboration Issues for Library Tasks, Up: Elaboration Order Handling in GNAT - - Mixing Elaboration Models - ========================= - - So far, we have assumed that the entire program is either compiled - using the dynamic model or static model, ensuring consistency. It is - possible to mix the two models, but rules have to be followed if this - mixing is done to ensure that elaboration checks are not omitted. - - The basic rule is that _a unit compiled with the static model cannot - be `with'ed' by a unit compiled with the dynamic model_. The reason for - this is that in the static model, a unit assumes that its clients - guarantee to use (the equivalent of) pragma `Elaborate_All' so that no - elaboration checks are required in inner subprograms, and this - assumption is violated if the client is compiled with dynamic checks. - - The precise rule is as follows. A unit that is compiled with dynamic - checks can only `with' a unit that meets at least one of the following - criteria: - - * The `with'ed' unit is itself compiled with dynamic elaboration - checks (that is with the `-gnatE' switch. - - * The `with'ed' unit is an internal GNAT implementation unit from - the System, Interfaces, Ada, or GNAT hierarchies. - - * The `with'ed' unit has pragma Preelaborate or pragma Pure. - - * The `with'ing' unit (that is the client) has an explicit pragma - `Elaborate_All' for the `with'ed' unit. - - - If this rule is violated, that is if a unit with dynamic elaboration - checks `with's' a unit that does not meet one of the above four - criteria, then the binder (`gnatbind') will issue a warning similar to - that in the following example: - - warning: "x.ads" has dynamic elaboration checks and with's - warning: "y.ads" which has static elaboration checks - - These warnings indicate that the rule has been violated, and that as a - result elaboration checks may be missed in the resulting executable - file. This warning may be suppressed using the `-ws' binder switch in - the usual manner. - - One useful application of this mixing rule is in the case of a - subsystem which does not itself `with' units from the remainder of the - application. In this case, the entire subsystem can be compiled with - dynamic checks to resolve a circularity in the subsystem, while - allowing the main application that uses this subsystem to be compiled - using the more reliable default static model. - -  - File: gnat_ug_vxw.info, Node: What to Do If the Default Elaboration Behavior Fails, Next: Elaboration for Access-to-Subprogram Values, Prev: Mixing Elaboration Models, Up: Elaboration Order Handling in GNAT - - What to Do If the Default Elaboration Behavior Fails - ==================================================== - - If the binder cannot find an acceptable order, it outputs detailed - diagnostics. For example: - error: elaboration circularity detected - info: "proc (body)" must be elaborated before "pack (body)" - info: reason: Elaborate_All probably needed in unit "pack (body)" - info: recompile "pack (body)" with -gnatwl - info: for full details - info: "proc (body)" - info: is needed by its spec: - info: "proc (spec)" - info: which is withed by: - info: "pack (body)" - info: "pack (body)" must be elaborated before "proc (body)" - info: reason: pragma Elaborate in unit "proc (body)" - - - In this case we have a cycle that the binder cannot break. On the one - hand, there is an explicit pragma Elaborate in `proc' for `pack'. This - means that the body of `pack' must be elaborated before the body of - `proc'. On the other hand, there is elaboration code in `pack' that - calls a subprogram in `proc'. This means that for maximum safety, there - should really be a pragma Elaborate_All in `pack' for `proc' which - would require that the body of `proc' be elaborated before the body of - `pack'. Clearly both requirements cannot be satisfied. Faced with a - circularity of this kind, you have three different options. - - Fix the program - The most desirable option from the point of view of long-term - maintenance is to rearrange the program so that the elaboration - problems are avoided. One useful technique is to place the - elaboration code into separate child packages. Another is to move - some of the initialization code to explicitly called subprograms, - where the program controls the order of initialization explicitly. - Although this is the most desirable option, it may be impractical - and involve too much modification, especially in the case of - complex legacy code. - - Perform dynamic checks - If the compilations are done using the `-gnatE' (dynamic - elaboration check) switch, then GNAT behaves in a quite different - manner. Dynamic checks are generated for all calls that could - possibly result in raising an exception. With this switch, the - compiler does not generate implicit `Elaborate_All' pragmas. The - behavior then is exactly as specified in the Ada 95 Reference - Manual. The binder will generate an executable program that may - or may not raise `Program_Error', and then it is the programmer's - job to ensure that it does not raise an exception. Note that it is - important to compile all units with the switch, it cannot be used - selectively. - - Suppress checks - The drawback of dynamic checks is that they generate a significant - overhead at run time, both in space and time. If you are - absolutely sure that your program cannot raise any elaboration - exceptions, and you still want to use the dynamic elaboration - model, then you can use the configuration pragma `Suppress - (Elaboration_Checks)' to suppress all such checks. For example - this pragma could be placed in the `gnat.adc' file. - - Suppress checks selectively - When you know that certain calls in elaboration code cannot - possibly lead to an elaboration error, and the binder nevertheless - generates warnings on those calls and inserts Elaborate_All - pragmas that lead to elaboration circularities, it is possible to - remove those warnings locally and obtain a program that will bind. - Clearly this can be unsafe, and it is the responsibility of the - programmer to make sure that the resulting program has no - elaboration anomalies. The pragma `Suppress (Elaboration_Check)' - can be used with different granularity to suppress warnings and - break elaboration circularities: - - * Place the pragma that names the called subprogram in the - declarative part that contains the call. - - * Place the pragma in the declarative part, without naming an - entity. This disables warnings on all calls in the - corresponding declarative region. - - * Place the pragma in the package spec that declares the called - subprogram, and name the subprogram. This disables warnings - on all elaboration calls to that subprogram. - - * Place the pragma in the package spec that declares the called - subprogram, without naming any entity. This disables warnings - on all elaboration calls to all subprograms declared in this - spec. - - These four cases are listed in order of decreasing safety, and - therefore require increasing programmer care in their application. - Consider the following program: - - package Pack1 is - function F1 return Integer; - X1 : Integer; - end Pack1; - - package Pack2 is - function F2 return Integer; - function Pure (x : integer) return integer; - -- pragma Suppress (Elaboration_Check, On => Pure); -- (3) - -- pragma Suppress (Elaboration_Check); -- (4) - end Pack2; - - with Pack2; - package body Pack1 is - function F1 return Integer is - begin - return 100; - end F1; - Val : integer := Pack2.Pure (11); -- Elab. call (1) - begin - declare - -- pragma Suppress(Elaboration_Check, Pack2.F2); -- (1) - -- pragma Suppress(Elaboration_Check); -- (2) - begin - X1 := Pack2.F2 + 1; -- Elab. call (2) - end; - end Pack1; - - with Pack1; - package body Pack2 is - function F2 return Integer is - begin - return Pack1.F1; - end F2; - function Pure (x : integer) return integer is - begin - return x ** 3 - 3 * x; - end; - end Pack2; - - with Pack1, Ada.Text_IO; - procedure Proc3 is - begin - Ada.Text_IO.Put_Line(Pack1.X1'Img); -- 101 - end Proc3; - In the absence of any pragmas, an attempt to bind this program - produces the following diagnostics: - error: elaboration circularity detected - info: "pack1 (body)" must be elaborated before "pack1 (body)" - info: reason: Elaborate_All probably needed in unit "pack1 (body)" - info: recompile "pack1 (body)" with -gnatwl for full details - info: "pack1 (body)" - info: must be elaborated along with its spec: - info: "pack1 (spec)" - info: which is withed by: - info: "pack2 (body)" - info: which must be elaborated along with its spec: - info: "pack2 (spec)" - info: which is withed by: - info: "pack1 (body)" - The sources of the circularity are the two calls to - `Pack2.Pure' and `Pack2.F2' in the body of `Pack1'. We can see - that the call to F2 is safe, even though F2 calls F1, because the - call appears after the elaboration of the body of F1. Therefore - the pragma (1) is safe, and will remove the warning on the call. - It is also possible to use pragma (2) because there are no other - potentially unsafe calls in the block. - - The call to `Pure' is safe because this function does not depend - on the state of `Pack2'. Therefore any call to this function is - safe, and it is correct to place pragma (3) in the corresponding - package spec. - - Finally, we could place pragma (4) in the spec of `Pack2' to - disable warnings on all calls to functions declared therein. Note - that this is not necessarily safe, and requires more detailed - examination of the subprogram bodies involved. In particular, a - call to `F2' requires that `F1' be already elaborated. - - It is hard to generalize on which of these four approaches should be - taken. Obviously if it is possible to fix the program so that the - default treatment works, this is preferable, but this may not always be - practical. It is certainly simple enough to use `-gnatE' but the - danger in this case is that, even if the GNAT binder finds a correct - elaboration order, it may not always do so, and certainly a binder from - another Ada compiler might not. A combination of testing and analysis - (for which the warnings generated with the `-gnatwl' switch can be - useful) must be used to ensure that the program is free of errors. One - switch that is useful in this testing is the `-p (pessimistic - elaboration order)' switch for `gnatbind'. Normally the binder tries - to find an order that has the best chance of of avoiding elaboration - problems. With this switch, the binder plays a devil's advocate role, - and tries to choose the order that has the best chance of failing. If - your program works even with this switch, then it has a better chance - of being error free, but this is still not a guarantee. - - For an example of this approach in action, consider the C-tests - (executable tests) from the ACVC suite. If these are compiled and run - with the default treatment, then all but one of them succeed without - generating any error diagnostics from the binder. However, there is one - test that fails, and this is not surprising, because the whole point of - this test is to ensure that the compiler can handle cases where it is - impossible to determine a correct order statically, and it checks that - an exception is indeed raised at run time. - - This one test must be compiled and run using the `-gnatE' switch, - and then it passes. Alternatively, the entire suite can be run using - this switch. It is never wrong to run with the dynamic elaboration - switch if your code is correct, and we assume that the C-tests are - indeed correct (it is less efficient, but efficiency is not a factor in - running the ACVC tests.) - -  - File: gnat_ug_vxw.info, Node: Elaboration for Access-to-Subprogram Values, Next: Summary of Procedures for Elaboration Control, Prev: What to Do If the Default Elaboration Behavior Fails, Up: Elaboration Order Handling in GNAT - - Elaboration for Access-to-Subprogram Values - =========================================== - - The introduction of access-to-subprogram types in Ada 95 complicates - the handling of elaboration. The trouble is that it becomes impossible - to tell at compile time which procedure is being called. This means - that it is not possible for the binder to analyze the elaboration - requirements in this case. - - If at the point at which the access value is created (i.e., the - evaluation of `P'Access' for a subprogram `P'), the body of the - subprogram is known to have been elaborated, then the access value is - safe, and its use does not require a check. This may be achieved by - appropriate arrangement of the order of declarations if the subprogram - is in the current unit, or, if the subprogram is in another unit, by - using pragma `Pure', `Preelaborate', or `Elaborate_Body' on the - referenced unit. - - If the referenced body is not known to have been elaborated at the - point the access value is created, then any use of the access value - must do a dynamic check, and this dynamic check will fail and raise a - `Program_Error' exception if the body has not been elaborated yet. - GNAT will generate the necessary checks, and in addition, if the - `-gnatwl' switch is set, will generate warnings that such checks are - required. - - The use of dynamic dispatching for tagged types similarly generates - a requirement for dynamic checks, and premature calls to any primitive - operation of a tagged type before the body of the operation has been - elaborated, will result in the raising of `Program_Error'. - -  - File: gnat_ug_vxw.info, Node: Summary of Procedures for Elaboration Control, Next: Other Elaboration Order Considerations, Prev: Elaboration for Access-to-Subprogram Values, Up: Elaboration Order Handling in GNAT - - Summary of Procedures for Elaboration Control - ============================================= - - First, compile your program with the default options, using none of the - special elaboration control switches. If the binder successfully binds - your program, then you can be confident that, apart from issues raised - by the use of access-to-subprogram types and dynamic dispatching, the - program is free of elaboration errors. If it is important that the - program be portable, then use the `-gnatwl' switch to generate warnings - about missing `Elaborate_All' pragmas, and supply the missing pragmas. - - If the program fails to bind using the default static elaboration - handling, then you can fix the program to eliminate the binder message, - or recompile the entire program with the `-gnatE' switch to generate - dynamic elaboration checks, and, if you are sure there really are no - elaboration problems, use a global pragma `Suppress - (Elaboration_Checks)'. - -  - File: gnat_ug_vxw.info, Node: Other Elaboration Order Considerations, Prev: Summary of Procedures for Elaboration Control, Up: Elaboration Order Handling in GNAT - - Other Elaboration Order Considerations - ====================================== - - This section has been entirely concerned with the issue of finding a - valid elaboration order, as defined by the Ada Reference Manual. In a - case where several elaboration orders are valid, the task is to find one - of the possible valid elaboration orders (and the static model in GNAT - will ensure that this is achieved). - - The purpose of the elaboration rules in the Ada Reference Manual is - to make sure that no entity is accessed before it has been elaborated. - For a subprogram, this means that the spec and body must have been - elaborated before the subprogram is called. For an object, this means - that the object must have been elaborated before its value is read or - written. A violation of either of these two requirements is an access - before elaboration order, and this section has been all about avoiding - such errors. - - In the case where more than one order of elaboration is possible, in - the sense that access before elaboration errors are avoided, then any - one of the orders is "correct" in the sense that it meets the - requirements of the Ada Reference Manual, and no such error occurs. - - However, it may be the case for a given program, that there are - constraints on the order of elaboration that come not from consideration - of avoiding elaboration errors, but rather from extra-lingual logic - requirements. Consider this example: - - with Init_Constants; - package Constants is - X : Integer := 0; - Y : Integer := 0; - end Constants; - - package Init_Constants is - procedure Calc; - end Init_Constants; - - with Constants; - package body Init_Constants is - procedure Calc is begin null; end; - begin - Constants.X := 3; - Constants.Y := 4; - end Init_Constants; - - with Constants; - package Calc is - Z : Integer := Constants.X + Constants.Y; - end Calc; - - with Calc; - with Text_IO; use Text_IO; - procedure Main is - begin - Put_Line (Calc.Z'Img); - end Main; - - In this example, there is more than one valid order of elaboration. For - example both the following are correct orders: - - Init_Constants spec - Constants spec - Calc spec - Main body - Init_Constants body - - and - - Init_Constants spec - Init_Constants body - Constants spec - Calc spec - Main body - - There is no language rule to prefer one or the other, both are correct - from an order of elaboration point of view. But the programmatic effects - of the two orders are very different. In the first, the elaboration - routine of `Calc' initializes `Z' to zero, and then the main program - runs with this value of zero. But in the second order, the elaboration - routine of `Calc' runs after the body of Init_Constants has set `X' and - `Y' and thus `Z' is set to 7 before `Main' runs. - - One could perhaps by applying pretty clever non-artificial - intelligence to the situation guess that it is more likely that the - second order of elaboration is the one desired, but there is no formal - linguistic reason to prefer one over the other. In fact in this - particular case, GNAT will prefer the second order, because of the rule - that bodies are elaborated as soon as possible, but it's just luck that - this is what was wanted (if indeed the second order was preferred). - - If the program cares about the order of elaboration routines in a - case like this, it is important to specify the order required. In this - particular case, that could have been achieved by adding to the spec of - Calc: - - pragma Elaborate_All (Constants); - - which requires that the body (if any) and spec of `Constants', as well - as the body and spec of any unit `with''ed by `Constants' be elaborated - before `Calc' is elaborated. - - Clearly no automatic method can always guess which alternative you - require, and if you are working with legacy code that had constraints - of this kind which were not properly specified by adding `Elaborate' or - `Elaborate_All' pragmas, then indeed it is possible that two different - compilers can choose different orders. - - The `gnatbind' `-p' switch may be useful in smoking out problems. - This switch causes bodies to be elaborated as late as possible instead - of as early as possible. In the example above, it would have forced the - choice of the first elaboration order. If you get different results - when using this switch, and particularly if one set of results is right, - and one is wrong as far as you are concerned, it shows that you have - some missing `Elaborate' pragmas. For the example above, we have the - following output: - - gnatmake -f -q main - main - 7 - gnatmake -f -q main -bargs -p - main - 0 - - It is of course quite unlikely that both these results are correct, so - it is up to you in a case like this to investigate the source of the - difference, by looking at the two elaboration orders that are chosen, - and figuring out which is correct, and then adding the necessary - `Elaborate_All' pragmas to ensure the desired order. - -  - File: gnat_ug_vxw.info, Node: The Cross-Referencing Tools gnatxref and gnatfind, Next: File Name Krunching Using gnatkr, Prev: Elaboration Order Handling in GNAT, Up: Top - - The Cross-Referencing Tools `gnatxref' and `gnatfind' - ***************************************************** - - The compiler generates cross-referencing information (unless you set - the `-gnatx' switch), which are saved in the `.ali' files. This - information indicates where in the source each entity is declared and - referenced. Note that entities in package Standard are not included, but - entities in all other predefined units are included in the output. - - Before using any of these two tools, you need to compile - successfully your application, so that GNAT gets a chance to generate - the cross-referencing information. - - The two tools `gnatxref' and `gnatfind' take advantage of this - information to provide the user with the capability to easily locate the - declaration and references to an entity. These tools are quite similar, - the difference being that `gnatfind' is intended for locating - definitions and/or references to a specified entity or entities, whereas - `gnatxref' is oriented to generating a full report of all - cross-references. - - To use these tools, you must not compile your application using the - `-gnatx' switch on the `gnatmake' command line (*note (gnat_ug)The GNAT - Make Program gnatmake::). Otherwise, cross-referencing information will - not be generated. - - * Menu: - - * gnatxref Switches:: - * gnatfind Switches:: - * Project Files for gnatxref and gnatfind:: - * Regular Expressions in gnatfind and gnatxref:: - * Examples of gnatxref Usage:: - * Examples of gnatfind Usage:: - -  - File: gnat_ug_vxw.info, Node: gnatxref Switches, Next: gnatfind Switches, Up: The Cross-Referencing Tools gnatxref and gnatfind - - `gnatxref' Switches - =================== - - The command lines for `gnatxref' is: - $ gnatxref [switches] sourcefile1 [sourcefile2 ...] - - where - - `sourcefile1, sourcefile2' - identifies the source files for which a report is to be generated. - The 'with'ed units will be processed too. You must provide at - least one file. - - These file names are considered to be regular expressions, so for - instance specifying 'source*.adb' is the same as giving every file - in the current directory whose name starts with 'source' and whose - extension is 'adb'. - - The switches can be : - `-a' - If this switch is present, `gnatfind' and `gnatxref' will parse - the read-only files found in the library search path. Otherwise, - these files will be ignored. This option can be used to protect - Gnat sources or your own libraries from being parsed, thus making - `gnatfind' and `gnatxref' much faster, and their output much - smaller. - - `-aIDIR' - When looking for source files also look in directory DIR. The - order in which source file search is undertaken is the same as for - `gnatmake'. - - `-aODIR' - When searching for library and object files, look in directory - DIR. The order in which library files are searched is the same as - for `gnatmake'. - - `-nostdinc' - Do not look for sources in the system default directory. - - `-nostdlib' - Do not look for library files in the system default directory. - - `--RTS=RTS-PATH' - Specifies the default location of the runtime library. Same - meaning as the equivalent `gnatmake' flag (see *Note Switches for - gnatmake::). - - `-d' - If this switch is set `gnatxref' will output the parent type - reference for each matching derived types. - - `-f' - If this switch is set, the output file names will be preceded by - their directory (if the file was found in the search path). If - this switch is not set, the directory will not be printed. - - `-g' - If this switch is set, information is output only for library-level - entities, ignoring local entities. The use of this switch may - accelerate `gnatfind' and `gnatxref'. - - `-IDIR' - Equivalent to `-aODIR -aIDIR'. - - `-pFILE' - Specify a project file to use *Note Project Files::. By default, - `gnatxref' and `gnatfind' will try to locate a project file in the - current directory. - - If a project file is either specified or found by the tools, then - the content of the source directory and object directory lines are - added as if they had been specified respectively by `-aI' and - `-aO'. - - `-u' - Output only unused symbols. This may be really useful if you give - your main compilation unit on the command line, as `gnatxref' will - then display every unused entity and 'with'ed package. - - `-v' - Instead of producing the default output, `gnatxref' will generate a - `tags' file that can be used by vi. For examples how to use this - feature, see *Note Examples of gnatxref Usage::. The tags file is - output to the standard output, thus you will have to redirect it - to a file. - - All these switches may be in any order on the command line, and may - even appear after the file names. They need not be separated by spaces, - thus you can say `gnatxref -ag' instead of `gnatxref -a -g'. - -  - File: gnat_ug_vxw.info, Node: gnatfind Switches, Next: Project Files for gnatxref and gnatfind, Prev: gnatxref Switches, Up: The Cross-Referencing Tools gnatxref and gnatfind - - `gnatfind' Switches - =================== - - The command line for `gnatfind' is: - - $ gnatfind [switches] pattern[:sourcefile[:line[:column]]] - [file1 file2 ...] - - where - - `pattern' - An entity will be output only if it matches the regular expression - found in `pattern', see *Note Regular Expressions in gnatfind and - gnatxref::. - - Omitting the pattern is equivalent to specifying `*', which will - match any entity. Note that if you do not provide a pattern, you - have to provide both a sourcefile and a line. - - Entity names are given in Latin-1, with uppercase/lowercase - equivalence for matching purposes. At the current time there is no - support for 8-bit codes other than Latin-1, or for wide characters - in identifiers. - - `sourcefile' - `gnatfind' will look for references, bodies or declarations of - symbols referenced in `sourcefile', at line `line' and column - `column'. See *note Examples of gnatfind Usage:: for syntax - examples. - - `line' - is a decimal integer identifying the line number containing the - reference to the entity (or entities) to be located. - - `column' - is a decimal integer identifying the exact location on the line of - the first character of the identifier for the entity reference. - Columns are numbered from 1. - - `file1 file2 ...' - The search will be restricted to these files. If none are given, - then the search will be done for every library file in the search - path. These file must appear only after the pattern or sourcefile. - - These file names are considered to be regular expressions, so for - instance specifying 'source*.adb' is the same as giving every file - in the current directory whose name starts with 'source' and whose - extension is 'adb'. - - Not that if you specify at least one file in this part, `gnatfind' - may sometimes not be able to find the body of the subprograms... - - At least one of 'sourcefile' or 'pattern' has to be present on the - command line. - - The following switches are available: - `-a' - If this switch is present, `gnatfind' and `gnatxref' will parse - the read-only files found in the library search path. Otherwise, - these files will be ignored. This option can be used to protect - Gnat sources or your own libraries from being parsed, thus making - `gnatfind' and `gnatxref' much faster, and their output much - smaller. - - `-aIDIR' - When looking for source files also look in directory DIR. The - order in which source file search is undertaken is the same as for - `gnatmake'. - - `-aODIR' - When searching for library and object files, look in directory - DIR. The order in which library files are searched is the same as - for `gnatmake'. - - `-nostdinc' - Do not look for sources in the system default directory. - - `-nostdlib' - Do not look for library files in the system default directory. - - `--RTS=RTS-PATH' - Specifies the default location of the runtime library. Same - meaning as the equivalent `gnatmake' flag (see *Note Switches for - gnatmake::). - - `-d' - If this switch is set, then `gnatfind' will output the parent type - reference for each matching derived types. - - `-e' - By default, `gnatfind' accept the simple regular expression set for - `pattern'. If this switch is set, then the pattern will be - considered as full Unix-style regular expression. - - `-f' - If this switch is set, the output file names will be preceded by - their directory (if the file was found in the search path). If - this switch is not set, the directory will not be printed. - - `-g' - If this switch is set, information is output only for library-level - entities, ignoring local entities. The use of this switch may - accelerate `gnatfind' and `gnatxref'. - - `-IDIR' - Equivalent to `-aODIR -aIDIR'. - - `-pFILE' - Specify a project file (*note Project Files::) to use. By - default, `gnatxref' and `gnatfind' will try to locate a project - file in the current directory. - - If a project file is either specified or found by the tools, then - the content of the source directory and object directory lines are - added as if they had been specified respectively by `-aI' and - `-aO'. - - `-r' - By default, `gnatfind' will output only the information about the - declaration, body or type completion of the entities. If this - switch is set, the `gnatfind' will locate every reference to the - entities in the files specified on the command line (or in every - file in the search path if no file is given on the command line). - - `-s' - If this switch is set, then `gnatfind' will output the content of - the Ada source file lines were the entity was found. - - `-t' - If this switch is set, then `gnatfind' will output the type - hierarchy for the specified type. It act like -d option but - recursively from parent type to parent type. When this switch is - set it is not possible to specify more than one file. - - All these switches may be in any order on the command line, and may - even appear after the file names. They need not be separated by spaces, - thus you can say `gnatxref -ag' instead of `gnatxref -a -g'. - - As stated previously, gnatfind will search in every directory in the - search path. You can force it to look only in the current directory if - you specify `*' at the end of the command line. - -  - File: gnat_ug_vxw.info, Node: Project Files for gnatxref and gnatfind, Next: Regular Expressions in gnatfind and gnatxref, Prev: gnatfind Switches, Up: The Cross-Referencing Tools gnatxref and gnatfind - - Project Files for `gnatxref' and `gnatfind' - =========================================== - - Project files allow a programmer to specify how to compile its - application, where to find sources,... These files are used primarily by - the Glide Ada mode, but they can also be used by the two tools - `gnatxref' and `gnatfind'. - - A project file name must end with `.adp'. If a single one is present - in the current directory, then `gnatxref' and `gnatfind' will extract - the information from it. If multiple project files are found, none of - them is read, and you have to use the `-p' switch to specify the one - you want to use. - - The following lines can be included, even though most of them have - default values which can be used in most cases. The lines can be - entered in any order in the file. Except for `src_dir' and `obj_dir', - you can only have one instance of each line. If you have multiple - instances, only the last one is taken into account. - - `src_dir=DIR [default: "./"]' - specifies a directory where to look for source files. Multiple - src_dir lines can be specified and they will be searched in the - order they are specified. - - `obj_dir=DIR [default: "./"]' - specifies a directory where to look for object and library files. - Multiple obj_dir lines can be specified and they will be searched - in the order they are specified - - `comp_opt=SWITCHES [default: ""]' - creates a variable which can be referred to subsequently by using - the `${comp_opt}' notation. This is intended to store the default - switches given to `gnatmake' and `gcc'. - - `bind_opt=SWITCHES [default: ""]' - creates a variable which can be referred to subsequently by using - the `${bind_opt}' notation. This is intended to store the default - switches given to `gnatbind'. - - `link_opt=SWITCHES [default: ""]' - creates a variable which can be referred to subsequently by using - the `${link_opt}' notation. This is intended to store the default - switches given to `gnatlink'. - - `main=EXECUTABLE [default: ""]' - specifies the name of the executable for the application. This - variable can be referred to in the following lines by using the - `${main}' notation. - - `comp_cmd=COMMAND [default: "gcc -c -I${src_dir} -g -gnatq"]' - specifies the command used to compile a single file in the - application. - - `make_cmd=COMMAND [default: "gnatmake ${main} -aI${src_dir} -aO${obj_dir} -g -gnatq -cargs ${comp_opt} -bargs ${bind_opt} -largs ${link_opt}"]' - specifies the command used to recompile the whole application. - - `run_cmd=COMMAND [default: "${main}"]' - specifies the command used to run the application. - - `debug_cmd=COMMAND [default: "gdb ${main}"]' - specifies the command used to debug the application - - `gnatxref' and `gnatfind' only take into account the `src_dir' and - `obj_dir' lines, and ignore the others. - -  - File: gnat_ug_vxw.info, Node: Regular Expressions in gnatfind and gnatxref, Next: Examples of gnatxref Usage, Prev: Project Files for gnatxref and gnatfind, Up: The Cross-Referencing Tools gnatxref and gnatfind - - Regular Expressions in `gnatfind' and `gnatxref' - ================================================ - - As specified in the section about `gnatfind', the pattern can be a - regular expression. Actually, there are to set of regular expressions - which are recognized by the program : - - `globbing patterns' - These are the most usual regular expression. They are the same - that you generally used in a Unix shell command line, or in a DOS - session. - - Here is a more formal grammar : - regexp ::= term - term ::= elmt -- matches elmt - term ::= elmt elmt -- concatenation (elmt then elmt) - term ::= * -- any string of 0 or more characters - term ::= ? -- matches any character - term ::= [char {char}] -- matches any character listed - term ::= [char - char] -- matches any character in range - - `full regular expression' - The second set of regular expressions is much more powerful. This - is the type of regular expressions recognized by utilities such a - `grep'. - - The following is the form of a regular expression, expressed in Ada - reference manual style BNF is as follows - - regexp ::= term {| term} -- alternation (term or term ...) - - term ::= item {item} -- concatenation (item then item) - - item ::= elmt -- match elmt - item ::= elmt * -- zero or more elmt's - item ::= elmt + -- one or more elmt's - item ::= elmt ? -- matches elmt or nothing - elmt ::= nschar -- matches given character - elmt ::= [nschar {nschar}] -- matches any character listed - elmt ::= [^ nschar {nschar}] -- matches any character not listed - elmt ::= [char - char] -- matches chars in given range - elmt ::= \ char -- matches given character - elmt ::= . -- matches any single character - elmt ::= ( regexp ) -- parens used for grouping - - char ::= any character, including special characters - nschar ::= any character except ()[].*+?^ - - Following are a few examples : - - `abcde|fghi' - will match any of the two strings 'abcde' and 'fghi'. - - `abc*d' - will match any string like 'abd', 'abcd', 'abccd', 'abcccd', - and so on - - `[a-z]+' - will match any string which has only lowercase characters in - it (and at least one character - -  - File: gnat_ug_vxw.info, Node: Examples of gnatxref Usage, Next: Examples of gnatfind Usage, Prev: Regular Expressions in gnatfind and gnatxref, Up: The Cross-Referencing Tools gnatxref and gnatfind - - Examples of `gnatxref' Usage - ============================ - - General Usage - ------------- - - For the following examples, we will consider the following units : - - main.ads: - 1: with Bar; - 2: package Main is - 3: procedure Foo (B : in Integer); - 4: C : Integer; - 5: private - 6: D : Integer; - 7: end Main; - - main.adb: - 1: package body Main is - 2: procedure Foo (B : in Integer) is - 3: begin - 4: C := B; - 5: D := B; - 6: Bar.Print (B); - 7: Bar.Print (C); - 8: end Foo; - 9: end Main; - - bar.ads: - 1: package Bar is - 2: procedure Print (B : Integer); - 3: end bar; - - The first thing to do is to recompile your application (for - instance, in that case just by doing a `gnatmake main', so that - GNAT generates the cross-referencing information. You can then - issue any of the following commands: - - `gnatxref main.adb' - `gnatxref' generates cross-reference information for main.adb and - every unit 'with'ed by main.adb. - - The output would be: - B Type: Integer - Decl: bar.ads 2:22 - B Type: Integer - Decl: main.ads 3:20 - Body: main.adb 2:20 - Ref: main.adb 4:13 5:13 6:19 - Bar Type: Unit - Decl: bar.ads 1:9 - Ref: main.adb 6:8 7:8 - main.ads 1:6 - C Type: Integer - Decl: main.ads 4:5 - Modi: main.adb 4:8 - Ref: main.adb 7:19 - D Type: Integer - Decl: main.ads 6:5 - Modi: main.adb 5:8 - Foo Type: Unit - Decl: main.ads 3:15 - Body: main.adb 2:15 - Main Type: Unit - Decl: main.ads 2:9 - Body: main.adb 1:14 - Print Type: Unit - Decl: bar.ads 2:15 - Ref: main.adb 6:12 7:12 - - that is the entity `Main' is declared in main.ads, line 2, column - 9, its body is in main.adb, line 1, column 14 and is not - referenced any where. - - The entity `Print' is declared in bar.ads, line 2, column 15 and it - it referenced in main.adb, line 6 column 12 and line 7 column 12. - - `gnatxref package1.adb package2.ads' - `gnatxref' will generates cross-reference information for - package1.adb, package2.ads and any other package 'with'ed by any - of these. - - Using gnatxref with vi - ---------------------- - - `gnatxref' can generate a tags file output, which can be used - directly from `vi'. Note that the standard version of `vi' will not - work properly with overloaded symbols. Consider using another free - implementation of `vi', such as `vim'. - - $ gnatxref -v gnatfind.adb > tags - - will generate the tags file for `gnatfind' itself (if the sources are - in the search path!). - - From `vi', you can then use the command `:tag entity' (replacing - entity by whatever you are looking for), and vi will display a new file - with the corresponding declaration of entity. - -  - File: gnat_ug_vxw.info, Node: Examples of gnatfind Usage, Prev: Examples of gnatxref Usage, Up: The Cross-Referencing Tools gnatxref and gnatfind - - Examples of `gnatfind' Usage - ============================ - - `gnatfind -f xyz:main.adb' - Find declarations for all entities xyz referenced at least once in - main.adb. The references are search in every library file in the - search path. - - The directories will be printed as well (as the `-f' switch is set) - - The output will look like: - directory/main.ads:106:14: xyz <= declaration - directory/main.adb:24:10: xyz <= body - directory/foo.ads:45:23: xyz <= declaration - - that is to say, one of the entities xyz found in main.adb is - declared at line 12 of main.ads (and its body is in main.adb), and - another one is declared at line 45 of foo.ads - - `gnatfind -fs xyz:main.adb' - This is the same command as the previous one, instead `gnatfind' - will display the content of the Ada source file lines. - - The output will look like: - - directory/main.ads:106:14: xyz <= declaration - procedure xyz; - directory/main.adb:24:10: xyz <= body - procedure xyz is - directory/foo.ads:45:23: xyz <= declaration - xyz : Integer; - - This can make it easier to find exactly the location your are - looking for. - - `gnatfind -r "*x*":main.ads:123 foo.adb' - Find references to all entities containing an x that are - referenced on line 123 of main.ads. The references will be - searched only in main.adb and foo.adb. - - `gnatfind main.ads:123' - Find declarations and bodies for all entities that are referenced - on line 123 of main.ads. - - This is the same as `gnatfind "*":main.adb:123'. - - `gnatfind mydir/main.adb:123:45' - Find the declaration for the entity referenced at column 45 in - line 123 of file main.adb in directory mydir. Note that it is - usual to omit the identifier name when the column is given, since - the column position identifies a unique reference. - - The column has to be the beginning of the identifier, and should - not point to any character in the middle of the identifier. - -  - File: gnat_ug_vxw.info, Node: File Name Krunching Using gnatkr, Next: Preprocessing Using gnatprep, Prev: The Cross-Referencing Tools gnatxref and gnatfind, Up: Top - - File Name Krunching Using `gnatkr' - ********************************** - - This chapter discusses the method used by the compiler to shorten the - default file names chosen for Ada units so that they do not exceed the - maximum length permitted. It also describes the `gnatkr' utility that - can be used to determine the result of applying this shortening. - - * Menu: - - * About gnatkr:: - * Using gnatkr:: - * Krunching Method:: - * Examples of gnatkr Usage:: - -  - File: gnat_ug_vxw.info, Node: About gnatkr, Next: Using gnatkr, Up: File Name Krunching Using gnatkr - - About `gnatkr' - ============== - - The default file naming rule in GNAT is that the file name must be - derived from the unit name. The exact default rule is as follows: - * Take the unit name and replace all dots by hyphens. - - * If such a replacement occurs in the second character position of a - name, and the first character is a, g, s, or i then replace the - dot by the character ~ (tilde) instead of a minus. - The reason for this exception is to avoid clashes with the standard - names for children of System, Ada, Interfaces, and GNAT, which use the - prefixes s- a- i- and g- respectively. - - The `-gnatkNN' switch of the compiler activates a "krunching" - circuit that limits file names to nn characters (where nn is a decimal - integer). For example, using OpenVMS, where the maximum file name - length is 39, the value of nn is usually set to 39, but if you want to - generate a set of files that would be usable if ported to a system with - some different maximum file length, then a different value can be - specified. The default value of 39 for OpenVMS need not be specified. - - The `gnatkr' utility can be used to determine the krunched name for - a given file, when krunched to a specified maximum length. - -  - File: gnat_ug_vxw.info, Node: Using gnatkr, Next: Krunching Method, Prev: About gnatkr, Up: File Name Krunching Using gnatkr - - Using `gnatkr' - ============== - - The `gnatkr' command has the form - - $ gnatkr NAME [LENGTH] - - NAME can be an Ada name with dots or the GNAT name of the unit, where - the dots representing child units or subunit are replaced by hyphens. - The only confusion arises if a name ends in `.ads' or `.adb'. `gnatkr' - takes this to be an extension if there are no other dots in the name - and the whole name is in lowercase. - - LENGTH represents the length of the krunched name. The default when - no argument is given is 8 characters. A length of zero stands for - unlimited, in other words do not chop except for system files which are - always 8. - - The output is the krunched name. The output has an extension only if the - original argument was a file name with an extension. - -  - File: gnat_ug_vxw.info, Node: Krunching Method, Next: Examples of gnatkr Usage, Prev: Using gnatkr, Up: File Name Krunching Using gnatkr - - Krunching Method - ================ - - The initial file name is determined by the name of the unit that the - file contains. The name is formed by taking the full expanded name of - the unit and replacing the separating dots with hyphens and using - lowercase for all letters, except that a hyphen in the second character - position is replaced by a tilde if the first character is a, i, g, or s. - The extension is `.ads' for a specification and `.adb' for a body. - Krunching does not affect the extension, but the file name is shortened - to the specified length by following these rules: - - * The name is divided into segments separated by hyphens, tildes or - underscores and all hyphens, tildes, and underscores are - eliminated. If this leaves the name short enough, we are done. - - * If the name is too long, the longest segment is located (left-most - if there are two of equal length), and shortened by dropping its - last character. This is repeated until the name is short enough. - - As an example, consider the krunching of - `our-strings-wide_fixed.adb' to fit the name into 8 characters as - required by some operating systems. - - our-strings-wide_fixed 22 - our strings wide fixed 19 - our string wide fixed 18 - our strin wide fixed 17 - our stri wide fixed 16 - our stri wide fixe 15 - our str wide fixe 14 - our str wid fixe 13 - our str wid fix 12 - ou str wid fix 11 - ou st wid fix 10 - ou st wi fix 9 - ou st wi fi 8 - Final file name: oustwifi.adb - - * The file names for all predefined units are always krunched to - eight characters. The krunching of these predefined units uses the - following special prefix replacements: - - `ada-' - replaced by `a-' - - `gnat-' - replaced by `g-' - - `interfaces-' - replaced by `i-' - - `system-' - replaced by `s-' - - These system files have a hyphen in the second character position. - That is why normal user files replace such a character with a - tilde, to avoid confusion with system file names. - - As an example of this special rule, consider - `ada-strings-wide_fixed.adb', which gets krunched as follows: - - ada-strings-wide_fixed 22 - a- strings wide fixed 18 - a- string wide fixed 17 - a- strin wide fixed 16 - a- stri wide fixed 15 - a- stri wide fixe 14 - a- str wide fixe 13 - a- str wid fixe 12 - a- str wid fix 11 - a- st wid fix 10 - a- st wi fix 9 - a- st wi fi 8 - Final file name: a-stwifi.adb - - Of course no file shortening algorithm can guarantee uniqueness over - all possible unit names, and if file name krunching is used then it is - your responsibility to ensure that no name clashes occur. The utility - program `gnatkr' is supplied for conveniently determining the krunched - name of a file. - -  - File: gnat_ug_vxw.info, Node: Examples of gnatkr Usage, Prev: Krunching Method, Up: File Name Krunching Using gnatkr - - Examples of `gnatkr' Usage - ========================== - - $ gnatkr very_long_unit_name.ads --> velounna.ads - $ gnatkr grandparent-parent-child.ads --> grparchi.ads - $ gnatkr Grandparent.Parent.Child --> grparchi - $ gnatkr very_long_unit_name.ads/count=6 --> vlunna.ads - $ gnatkr very_long_unit_name.ads/count=0 --> very_long_unit_name.ads - -  - File: gnat_ug_vxw.info, Node: Preprocessing Using gnatprep, Next: The GNAT Library Browser gnatls, Prev: File Name Krunching Using gnatkr, Up: Top - - Preprocessing Using `gnatprep' - ****************************** - - The `gnatprep' utility provides a simple preprocessing capability for - Ada programs. It is designed for use with GNAT, but is not dependent - on any special features of GNAT. - - * Menu: - - * Using gnatprep:: - * Switches for gnatprep:: - * Form of Definitions File:: - * Form of Input Text for gnatprep:: - -  - File: gnat_ug_vxw.info, Node: Using gnatprep, Next: Switches for gnatprep, Up: Preprocessing Using gnatprep - - Using `gnatprep' - ================ - - To call `gnatprep' use - - $ gnatprep [-bcrsu] [-Dsymbol=value] infile outfile [deffile] - - where - `infile' - is the full name of the input file, which is an Ada source file - containing preprocessor directives. - - `outfile' - is the full name of the output file, which is an Ada source in - standard Ada form. When used with GNAT, this file name will - normally have an ads or adb suffix. - - `deffile' - is the full name of a text file containing definitions of symbols - to be referenced by the preprocessor. This argument is optional, - and can be replaced by the use of the `-D' switch. - - `switches' - is an optional sequence of switches as described in the next - section. - -  - File: gnat_ug_vxw.info, Node: Switches for gnatprep, Next: Form of Definitions File, Prev: Using gnatprep, Up: Preprocessing Using gnatprep - - Switches for `gnatprep' - ======================= - - `-b' - Causes both preprocessor lines and the lines deleted by - preprocessing to be replaced by blank lines in the output source - file, preserving line numbers in the output file. - - `-c' - Causes both preprocessor lines and the lines deleted by - preprocessing to be retained in the output source as comments - marked with the special string "-! ". This option will result in - line numbers being preserved in the output file. - - `-Dsymbol=value' - Defines a new symbol, associated with value. If no value is given - on the command line, then symbol is considered to be `True'. This - switch can be used in place of a definition file. - - `-r' - Causes a `Source_Reference' pragma to be generated that references - the original input file, so that error messages will use the file - name of this original file. The use of this switch implies that - preprocessor lines are not to be removed from the file, so its use - will force `-b' mode if `-c' has not been specified explicitly. - - Note that if the file to be preprocessed contains multiple units, - then it will be necessary to `gnatchop' the output file from - `gnatprep'. If a `Source_Reference' pragma is present in the - preprocessed file, it will be respected by `gnatchop -r' so that - the final chopped files will correctly refer to the original input - source file for `gnatprep'. - - `-s' - Causes a sorted list of symbol names and values to be listed on - the standard output file. - - `-u' - Causes undefined symbols to be treated as having the value FALSE - in the context of a preprocessor test. In the absence of this - option, an undefined symbol in a `#if' or `#elsif' test will be - treated as an error. - - Note: if neither `-b' nor `-c' is present, then preprocessor lines and - deleted lines are completely removed from the output, unless -r is - specified, in which case -b is assumed. - -  - File: gnat_ug_vxw.info, Node: Form of Definitions File, Next: Form of Input Text for gnatprep, Prev: Switches for gnatprep, Up: Preprocessing Using gnatprep - - Form of Definitions File - ======================== - - The definitions file contains lines of the form - - symbol := value - - where symbol is an identifier, following normal Ada (case-insensitive) - rules for its syntax, and value is one of the following: - - * Empty, corresponding to a null substitution - - * A string literal using normal Ada syntax - - * Any sequence of characters from the set (letters, digits, period, - underline). - - Comment lines may also appear in the definitions file, starting with - the usual `--', and comments may be added to the definitions lines. - -  - File: gnat_ug_vxw.info, Node: Form of Input Text for gnatprep, Prev: Form of Definitions File, Up: Preprocessing Using gnatprep - - Form of Input Text for `gnatprep' - ================================= - - The input text may contain preprocessor conditional inclusion lines, as - well as general symbol substitution sequences. - - The preprocessor conditional inclusion commands have the form - - #if expression [then] - lines - #elsif expression [then] - lines - #elsif expression [then] - lines - ... - #else - lines - #end if; - - In this example, expression is defined by the following grammar: - expression ::= - expression ::= = "" - expression ::= = - expression ::= 'Defined - expression ::= not expression - expression ::= expression and expression - expression ::= expression or expression - expression ::= expression and then expression - expression ::= expression or else expression - expression ::= ( expression ) - - For the first test (expression ::= ) the symbol must have - either the value true or false, that is to say the right-hand of the - symbol definition must be one of the (case-insensitive) literals `True' - or `False'. If the value is true, then the corresponding lines are - included, and if the value is false, they are excluded. - - The test (expression ::= `'Defined') is true only if the - symbol has been defined in the definition file or by a `-D' switch on - the command line. Otherwise, the test is false. - - The equality tests are case insensitive, as are all the preprocessor - lines. - - If the symbol referenced is not defined in the symbol definitions - file, then the effect depends on whether or not switch `-u' is - specified. If so, then the symbol is treated as if it had the value - false and the test fails. If this switch is not specified, then it is - an error to reference an undefined symbol. It is also an error to - reference a symbol that is defined with a value other than `True' or - `False'. - - The use of the `not' operator inverts the sense of this logical - test, so that the lines are included only if the symbol is not defined. - The `then' keyword is optional as shown - - The `#' must be the first non-blank character on a line, but - otherwise the format is free form. Spaces or tabs may appear between - the `#' and the keyword. The keywords and the symbols are case - insensitive as in normal Ada code. Comments may be used on a - preprocessor line, but other than that, no other tokens may appear on a - preprocessor line. Any number of `elsif' clauses can be present, - including none at all. The `else' is optional, as in Ada. - - The `#' marking the start of a preprocessor line must be the first - non-blank character on the line, i.e. it must be preceded only by - spaces or horizontal tabs. - - Symbol substitution outside of preprocessor lines is obtained by - using the sequence - - $symbol - - anywhere within a source line, except in a comment or within a string - literal. The identifier following the `$' must match one of the symbols - defined in the symbol definition file, and the result is to substitute - the value of the symbol in place of `$symbol' in the output file. - - Note that although the substitution of strings within a string - literal is not possible, it is possible to have a symbol whose defined - value is a string literal. So instead of setting XYZ to `hello' and - writing: - - Header : String := "$XYZ"; - - you should set XYZ to `"hello"' and write: - - Header : String := $XYZ; - - and then the substitution will occur as desired. - -  - File: gnat_ug_vxw.info, Node: The GNAT Library Browser gnatls, Next: GNAT and Libraries, Prev: Preprocessing Using gnatprep, Up: Top - - The GNAT Library Browser `gnatls' - ********************************* - - `gnatls' is a tool that outputs information about compiled units. It - gives the relationship between objects, unit names and source files. It - can also be used to check the source dependencies of a unit as well as - various characteristics. - - * Menu: - - * Running gnatls:: - * Switches for gnatls:: - * Examples of gnatls Usage:: - -  - File: gnat_ug_vxw.info, Node: Running gnatls, Next: Switches for gnatls, Up: The GNAT Library Browser gnatls - - Running `gnatls' - ================ - - The `gnatls' command has the form - - $ gnatls switches OBJECT_OR_ALI_FILE - - The main argument is the list of object or `ali' files (*note The Ada - Library Information Files::) for which information is requested. - - In normal mode, without additional option, `gnatls' produces a - four-column listing. Each line represents information for a specific - object. The first column gives the full path of the object, the second - column gives the name of the principal unit in this object, the third - column gives the status of the source and the fourth column gives the - full path of the source representing this unit. Here is a simple - example of use: - - $ gnatls *.o - ./demo1.o demo1 DIF demo1.adb - ./demo2.o demo2 OK demo2.adb - ./hello.o h1 OK hello.adb - ./instr-child.o instr.child MOK instr-child.adb - ./instr.o instr OK instr.adb - ./tef.o tef DIF tef.adb - ./text_io_example.o text_io_example OK text_io_example.adb - ./tgef.o tgef DIF tgef.adb - - The first line can be interpreted as follows: the main unit which is - contained in object file `demo1.o' is demo1, whose main source is in - `demo1.adb'. Furthermore, the version of the source used for the - compilation of demo1 has been modified (DIF). Each source file has a - status qualifier which can be: - - `OK (unchanged)' - The version of the source file used for the compilation of the - specified unit corresponds exactly to the actual source file. - - `MOK (slightly modified)' - The version of the source file used for the compilation of the - specified unit differs from the actual source file but not enough - to require recompilation. If you use gnatmake with the qualifier - `-m (minimal recompilation)', a file marked MOK will not be - recompiled. - - `DIF (modified)' - No version of the source found on the path corresponds to the - source used to build this object. - - `??? (file not found)' - No source file was found for this unit. - - `HID (hidden, unchanged version not first on PATH)' - The version of the source that corresponds exactly to the source - used for compilation has been found on the path but it is hidden - by another version of the same source that has been modified. - -  - File: gnat_ug_vxw.info, Node: Switches for gnatls, Next: Examples of gnatls Usage, Prev: Running gnatls, Up: The GNAT Library Browser gnatls - - Switches for `gnatls' - ===================== - - `gnatls' recognizes the following switches: - - `-a' - Consider all units, including those of the predefined Ada library. - Especially useful with `-d'. - - `-d' - List sources from which specified units depend on. - - `-h' - Output the list of options. - - `-o' - Only output information about object files. - - `-s' - Only output information about source files. - - `-u' - Only output information about compilation units. - - `-aODIR' - `-aIDIR' - `-IDIR' - `-I-' - `-nostdinc' - Source path manipulation. Same meaning as the equivalent - `gnatmake' flags (see *Note Switches for gnatmake::). - - `--RTS=RTS-PATH' - Specifies the default location of the runtime library. Same - meaning as the equivalent `gnatmake' flag (see *Note Switches for - gnatmake::). - - `-v' - Verbose mode. Output the complete source and object paths. Do not - use the default column layout but instead use long format giving - as much as information possible on each requested units, including - special characteristics such as: - - `Preelaborable' - The unit is preelaborable in the Ada 95 sense. - - `No_Elab_Code' - No elaboration code has been produced by the compiler for - this unit. - - `Pure' - The unit is pure in the Ada 95 sense. - - `Elaborate_Body' - The unit contains a pragma Elaborate_Body. - - `Remote_Types' - The unit contains a pragma Remote_Types. - - `Shared_Passive' - The unit contains a pragma Shared_Passive. - - `Predefined' - This unit is part of the predefined environment and cannot be - modified by the user. - - `Remote_Call_Interface' - The unit contains a pragma Remote_Call_Interface. - -  - File: gnat_ug_vxw.info, Node: Examples of gnatls Usage, Prev: Switches for gnatls, Up: The GNAT Library Browser gnatls - - Example of `gnatls' Usage - ========================= - - Example of using the verbose switch. Note how the source and object - paths are affected by the -I switch. - - $ gnatls -v -I.. demo1.o - - GNATLS 3.10w (970212) Copyright 1999 Free Software Foundation, Inc. - - Source Search Path: - - ../ - /home/comar/local/adainclude/ - - Object Search Path: - - ../ - /home/comar/local/lib/gcc-lib/mips-sni-sysv4/2.7.2/adalib/ - - ./demo1.o - Unit => - Name => demo1 - Kind => subprogram body - Flags => No_Elab_Code - Source => demo1.adb modified - - The following is an example of use of the dependency list. Note the - use of the -s switch which gives a straight list of source files. This - can be useful for building specialized scripts. - - $ gnatls -d demo2.o - ./demo2.o demo2 OK demo2.adb - OK gen_list.ads - OK gen_list.adb - OK instr.ads - OK instr-child.ads - - $ gnatls -d -s -a demo1.o - demo1.adb - /home/comar/local/adainclude/ada.ads - /home/comar/local/adainclude/a-finali.ads - /home/comar/local/adainclude/a-filico.ads - /home/comar/local/adainclude/a-stream.ads - /home/comar/local/adainclude/a-tags.ads - gen_list.ads - gen_list.adb - /home/comar/local/adainclude/gnat.ads - /home/comar/local/adainclude/g-io.ads - instr.ads - /home/comar/local/adainclude/system.ads - /home/comar/local/adainclude/s-exctab.ads - /home/comar/local/adainclude/s-finimp.ads - /home/comar/local/adainclude/s-finroo.ads - /home/comar/local/adainclude/s-secsta.ads - /home/comar/local/adainclude/s-stalib.ads - /home/comar/local/adainclude/s-stoele.ads - /home/comar/local/adainclude/s-stratt.ads - /home/comar/local/adainclude/s-tasoli.ads - /home/comar/local/adainclude/s-unstyp.ads - /home/comar/local/adainclude/unchconv.ads - -  - File: gnat_ug_vxw.info, Node: GNAT and Libraries, Next: Using the GNU make Utility, Prev: The GNAT Library Browser gnatls, Up: Top - - GNAT and Libraries - ****************** - - This chapter addresses some of the issues related to building and using - a library with GNAT. It also shows how the GNAT run-time library can be - recompiled. - - * Menu: - - * Creating an Ada Library:: - * Installing an Ada Library:: - * Using an Ada Library:: - * Creating an Ada Library to be Used in a Non-Ada Context:: - * Rebuilding the GNAT Run-Time Library:: - -  - File: gnat_ug_vxw.info, Node: Creating an Ada Library, Next: Installing an Ada Library, Up: GNAT and Libraries - - Creating an Ada Library - ======================= - - In the GNAT environment, a library has two components: - * Source files. - - * Compiled code and Ali files. See *Note The Ada Library Information - Files::. - - In order to use other packages *Note The GNAT Compilation Model:: - requires a certain number of sources to be available to the compiler. - The minimal set of sources required includes the specs of all the - packages that make up the visible part of the library as well as all - the sources upon which they depend. The bodies of all visible generic - units must also be provided. - - Although it is not strictly mandatory, it is recommended that all - sources needed to recompile the library be provided, so that the user - can make full use of inter-unit inlining and source-level debugging. - This can also make the situation easier for users that need to upgrade - their compilation toolchain and thus need to recompile the library from - sources. - - The compiled code can be provided in different ways. The simplest way is - to provide directly the set of objects produced by the compiler during - the compilation of the library. It is also possible to group the objects - into an archive using whatever commands are provided by the operating - system. Finally, it is also possible to create a shared library (see - option -shared in the GCC manual). - - There are various possibilities for compiling the units that make up the - library: for example with a Makefile *Note Using the GNU make Utility::, - or with a conventional script. For simple libraries, it is also - possible to create a dummy main program which depends upon all the - packages that comprise the interface of the library. This dummy main - program can then be given to gnatmake, in order to build all the - necessary objects. Here is an example of such a dummy program and the - generic commands used to build an archive or a shared library. - - with My_Lib.Service1; - with My_Lib.Service2; - with My_Lib.Service3; - procedure My_Lib_Dummy is - begin - null; - end; - - # compiling the library - $ gnatmake -c my_lib_dummy.adb - - # we don't need the dummy object itself - $ rm my_lib_dummy.o my_lib_dummy.ali - - # create an archive with the remaining objects - $ ar rc libmy_lib.a *.o - # some systems may require "ranlib" to be run as well - - # or create a shared library - $ gcc -shared -o libmy_lib.so *.o - # some systems may require the code to have been compiled with -fPIC - - When the objects are grouped in an archive or a shared library, the user - needs to specify the desired library at link time, unless a pragma - linker_options has been used in one of the sources: - pragma Linker_Options ("-lmy_lib"); - -  - File: gnat_ug_vxw.info, Node: Installing an Ada Library, Next: Using an Ada Library, Prev: Creating an Ada Library, Up: GNAT and Libraries - - Installing an Ada Library - ========================= - - In the GNAT model, installing a library consists in copying into a - specific location the files that make up this library. It is possible - to install the sources in a different directory from the other files - (ALI, objects, archives) since the source path and the object path can - easily be specified separately. - - For general purpose libraries, it is possible for the system - administrator to put those libraries in the default compiler paths. To - achieve this, he must specify their location in the configuration files - "ada_source_path" and "ada_object_path" that must be located in the GNAT - installation tree at the same place as the gcc spec file. The location - of the gcc spec file can be determined as follows: - $ gcc -v - - The configuration files mentioned above have simple format: each line - in them must contain one unique directory name. Those names are added - to the corresponding path in their order of appearance in the file. The - names can be either absolute or relative, in the latter case, they are - relative to where theses files are located. - - "ada_source_path" and "ada_object_path" might actually not be present - in a GNAT installation, in which case, GNAT will look for its run-time - library in the directories "adainclude" for the sources and "adalib" - for the objects and ALI files. When the files exist, the compiler does - not look in "adainclude" and "adalib" at all, and thus the - "ada_source_path" file must contain the location for the GNAT run-time - sources (which can simply be "adainclude"). In the same way, the - "ada_object_path" file must contain the location for the GNAT run-time - objects (which can simply be "adalib"). - - You can also specify a new default path to the runtime library at - compilation time with the switch "-RTS=RTS-PATH". You can easily choose - and change the runtime you want your program to be compiled with. This - switch is recognized by gcc, gnatmake, gnatbind, gnatls, gnatfind and - gnatxref. - - It is possible to install a library before or after the standard GNAT - library, by reordering the lines in the configuration files. In - general, a library must be installed before the GNAT library if it - redefines any part of it. - -  - File: gnat_ug_vxw.info, Node: Using an Ada Library, Next: Creating an Ada Library to be Used in a Non-Ada Context, Prev: Installing an Ada Library, Up: GNAT and Libraries - - Using an Ada Library - ==================== - - In order to use a Ada library, you need to make sure that this library - is on both your source and object path *Note Search Paths and the - Run-Time Library (RTL):: and *Note Search Paths for gnatbind::. For - instance, you can use the library "mylib" installed in "/dir/my_lib_src" - and "/dir/my_lib_obj" with the following commands: - - $ gnatmake -aI/dir/my_lib_src -aO/dir/my_lib_obj my_appl \ - -largs -lmy_lib - - This can be simplified down to the following: - $ gnatmake my_appl - when the following conditions are met: - * "/dir/my_lib_src" has been added by the user to the environment - variable "ADA_INCLUDE_PATH", or by the administrator to the file - "ada_source_path" - - * "/dir/my_lib_obj" has been added by the user to the environment - variable "ADA_OBJECTS_PATH", or by the administrator to the file - "ada_object_path" - - * a pragma linker_options, as mentioned in *Note Creating an Ada - Library:: as been added to the sources. - -  - File: gnat_ug_vxw.info, Node: Creating an Ada Library to be Used in a Non-Ada Context, Next: Rebuilding the GNAT Run-Time Library, Prev: Using an Ada Library, Up: GNAT and Libraries - - Creating an Ada Library to be Used in a Non-Ada Context - ======================================================= - - The previous sections detailed how to create and install a library that - was usable from an Ada main program. Using this library in a non-Ada - context is not possible, because the elaboration of the library is - automatically done as part of the main program elaboration. - - GNAT also provides the ability to build libraries that can be used - both in an Ada and non-Ada context. This section describes how to - build such a library, and then how to use it from a C program. The - method for interfacing with the library from other languages such as - Fortran for instance remains the same. - - Creating the Library - -------------------- - - * Identify the units representing the interface of the library. - - Here is an example of simple library interface: - - package Interface is - - procedure Do_Something; - - procedure Do_Something_Else; - - end Interface; - - * Use `pragma Export' or `pragma Convention' for the exported - entities. - - Our package `Interface' is then updated as follow: - package Interface is - - procedure Do_Something; - pragma Export (C, Do_Something, "do_something"); - - procedure Do_Something_Else; - pragma Export (C, Do_Something_Else, "do_something_else"); - - end Interface; - - * Compile all the units composing the library. - - * Bind the library objects. - - This step is performed by invoking gnatbind with the `-L' - switch. `gnatbind' will then generate the library elaboration - procedure (named `init') and the run-time finalization - procedure (named `final'). - - # generate the binder file in Ada - $ gnatbind -Lmylib interface - - # generate the binder file in C - $ gnatbind -C -Lmylib interface - - * Compile the files generated by the binder - - $ gcc -c b~interface.adb - - * Create the library; - - The procedure is identical to the procedure explained in *Note - Creating an Ada Library::, except that `b~interface.o' needs to be - added to the list of objects. - - # create an archive file - $ ar cr libmylib.a b~interface.o - - # create a shared library - $ gcc -shared -o libmylib.so b~interface.o - - * Provide a "foreign" view of the library interface; - - The example below shows the content of `mylib_interface.h' (note - that there is no rule for the naming of this file, any name can be - used) - /* the library elaboration procedure */ - extern void mylibinit (void); - - /* the library finalization procedure */ - extern void mylibfinal (void); - - /* the interface exported by the library */ - extern void do_something (void); - extern void do_something_else (void); - - Using the Library - ----------------- - - Libraries built as explained above can be used from any program, - provided that the elaboration procedures (named `mylibinit' in the - previous example) are called before the library services are used. Any - number of libraries can be used simultaneously, as long as the - elaboration procedure of each library is called. - - Below is an example of C program that uses our `mylib' library. - - #include "mylib_interface.h" - - int - main (void) - { - /* First, elaborate the library before using it */ - mylibinit (); - - /* Main program, using the library exported entities */ - do_something (); - do_something_else (); - - /* Library finalization at the end of the program */ - mylibfinal (); - return 0; - } - - Note that this same library can be used from an equivalent Ada main - program. In addition, if the libraries are installed as detailed in - *Note Installing an Ada Library::, it is not necessary to invoke the - library elaboration and finalization routines. The binder will ensure - that this is done as part of the main program elaboration and - finalization phases. - - The Finalization Phase - ---------------------- - - Invoking any library finalization procedure generated by `gnatbind' - shuts down the Ada run time permanently. Consequently, the finalization - of all Ada libraries must be performed at the end of the program. No - call to these libraries nor the Ada run time should be made past the - finalization phase. - - Restrictions in Libraries - ------------------------- - - The pragmas listed below should be used with caution inside libraries, - as they can create incompatibilities with other Ada libraries: - * pragma `Locking_Policy' - - * pragma `Queuing_Policy' - - * pragma `Task_Dispatching_Policy' - - * pragma `Unreserve_All_Interrupts' - When using a library that contains such pragmas, the user must make - sure that all libraries use the same pragmas with the same values. - Otherwise, a `Program_Error' will be raised during the elaboration of - the conflicting libraries. The usage of these pragmas and its - consequences for the user should therefore be well documented. - - Similarly, the traceback in exception occurrences mechanism should be - enabled or disabled in a consistent manner across all libraries. - Otherwise, a Program_Error will be raised during the elaboration of the - conflicting libraries. - - If the `'Version' and `'Body_Version' attributes are used inside a - library, then it is necessary to perform a `gnatbind' step that - mentions all ali files in all libraries, so that version identifiers - can be properly computed. In practice these attributes are rarely - used, so this is unlikely to be a consideration. - -  - File: gnat_ug_vxw.info, Node: Rebuilding the GNAT Run-Time Library, Prev: Creating an Ada Library to be Used in a Non-Ada Context, Up: GNAT and Libraries - - Rebuilding the GNAT Run-Time Library - ==================================== - - It may be useful to recompile the GNAT library in various contexts, the - most important one being the use of partition-wide configuration pragmas - such as Normalize_Scalar. A special Makefile called `Makefile.adalib' - is provided to that effect and can be found in the directory containing - the GNAT library. The location of this directory depends on the way the - GNAT environment has been installed and can be determined by means of - the command: - - $ gnatls -v - - The last entry in the object search path usually contains the gnat - library. This Makefile contains its own documentation and in particular - the set of instructions needed to rebuild a new library and to use it. - -  - File: gnat_ug_vxw.info, Node: Using the GNU make Utility, Next: Finding Memory Problems with GNAT Debug Pool, Prev: GNAT and Libraries, Up: Top - - Using the GNU `make' Utility - **************************** - - This chapter offers some examples of makefiles that solve specific - problems. It does not explain how to write a makefile (see the GNU make - documentation), nor does it try to replace the `gnatmake' utility - (*note The GNAT Make Program gnatmake::). - - All the examples in this section are specific to the GNU version of - make. Although `make' is a standard utility, and the basic language is - the same, these examples use some advanced features found only in `GNU - make'. - - * Menu: - - * Using gnatmake in a Makefile:: - * Automatically Creating a List of Directories:: - * Generating the Command Line Switches:: - * Overcoming Command Line Length Limits:: - -  - File: gnat_ug_vxw.info, Node: Using gnatmake in a Makefile, Next: Automatically Creating a List of Directories, Up: Using the GNU make Utility - - Using gnatmake in a Makefile - ============================ - - Complex project organizations can be handled in a very powerful way by - using GNU make combined with gnatmake. For instance, here is a Makefile - which allows you to build each subsystem of a big project into a - separate shared library. Such a makefile allows you to significantly - reduce the link time of very big applications while maintaining full - coherence at each step of the build process. - - The list of dependencies are handled automatically by `gnatmake'. - The Makefile is simply used to call gnatmake in each of the appropriate - directories. - - Note that you should also read the example on how to automatically - create the list of directories (*note Automatically Creating a List of - Directories::) which might help you in case your project has a lot of - subdirectories. - - ## This Makefile is intended to be used with the following directory - ## configuration: - ## - The sources are split into a series of csc (computer software components) - ## Each of these csc is put in its own directory. - ## Their name are referenced by the directory names. - ## They will be compiled into shared library (although this would also work - ## with static libraries - ## - The main program (and possibly other packages that do not belong to any - ## csc is put in the top level directory (where the Makefile is). - ## toplevel_dir __ first_csc (sources) __ lib (will contain the library) - ## \_ second_csc (sources) __ lib (will contain the library) - ## \_ ... - ## Although this Makefile is build for shared library, it is easy to modify - ## to build partial link objects instead (modify the lines with -shared and - ## gnatlink below) - ## - ## With this makefile, you can change any file in the system or add any new - ## file, and everything will be recompiled correctly (only the relevant shared - ## objects will be recompiled, and the main program will be re-linked). - - # The list of computer software component for your project. This might be - # generated automatically. - CSC_LIST=aa bb cc - - # Name of the main program (no extension) - MAIN=main - - # If we need to build objects with -fPIC, uncomment the following line - #NEED_FPIC=-fPIC - - # The following variable should give the directory containing libgnat.so - # You can get this directory through 'gnatls -v'. This is usually the last - # directory in the Object_Path. - GLIB=... - - # The directories for the libraries - # (This macro expands the list of CSC to the list of shared libraries, you - # could simply use the expanded form : - # LIB_DIR=aa/lib/libaa.so bb/lib/libbb.so cc/lib/libcc.so - LIB_DIR=${foreach dir,${CSC_LIST},${dir}/lib/lib${dir}.so} - - ${MAIN}: objects ${LIB_DIR} - gnatbind ${MAIN} ${CSC_LIST:%=-aO%/lib} -shared - gnatlink ${MAIN} ${CSC_LIST:%=-l%} - - objects:: - # recompile the sources - gnatmake -c -i ${MAIN}.adb ${NEED_FPIC} ${CSC_LIST:%=-I%} - - # Note: In a future version of GNAT, the following commands will be simplified - # by a new tool, gnatmlib - ${LIB_DIR}: - mkdir -p ${dir $@ } - cd ${dir $@ }; gcc -shared -o ${notdir $@ } ../*.o -L${GLIB} -lgnat - cd ${dir $@ }; cp -f ../*.ali . - - # The dependencies for the modules - # Note that we have to force the expansion of *.o, since in some cases make won't - # be able to do it itself. - aa/lib/libaa.so: ${wildcard aa/*.o} - bb/lib/libbb.so: ${wildcard bb/*.o} - cc/lib/libcc.so: ${wildcard cc/*.o} - - # Make sure all of the shared libraries are in the path before starting the - # program - run:: - LD_LIBRARY_PATH=`pwd`/aa/lib:`pwd`/bb/lib:`pwd`/cc/lib ./${MAIN} - - clean:: - ${RM} -rf ${CSC_LIST:%=%/lib} - ${RM} ${CSC_LIST:%=%/*.ali} - ${RM} ${CSC_LIST:%=%/*.o} - ${RM} *.o *.ali ${MAIN} - -  - File: gnat_ug_vxw.info, Node: Automatically Creating a List of Directories, Next: Generating the Command Line Switches, Prev: Using gnatmake in a Makefile, Up: Using the GNU make Utility - - Automatically Creating a List of Directories - ============================================ - - In most makefiles, you will have to specify a list of directories, and - store it in a variable. For small projects, it is often easier to - specify each of them by hand, since you then have full control over what - is the proper order for these directories, which ones should be - included... - - However, in larger projects, which might involve hundreds of - subdirectories, it might be more convenient to generate this list - automatically. - - The example below presents two methods. The first one, although less - general, gives you more control over the list. It involves wildcard - characters, that are automatically expanded by `make'. Its shortcoming - is that you need to explicitly specify some of the organization of your - project, such as for instance the directory tree depth, whether some - directories are found in a separate tree,... - - The second method is the most general one. It requires an external - program, called `find', which is standard on all Unix systems. All the - directories found under a given root directory will be added to the - list. - - # The examples below are based on the following directory hierarchy: - # All the directories can contain any number of files - # ROOT_DIRECTORY -> a -> aa -> aaa - # -> ab - # -> ac - # -> b -> ba -> baa - # -> bb - # -> bc - # This Makefile creates a variable called DIRS, that can be reused any time - # you need this list (see the other examples in this section) - - # The root of your project's directory hierarchy - ROOT_DIRECTORY=. - - #### - # First method: specify explicitly the list of directories - # This allows you to specify any subset of all the directories you need. - #### - - DIRS := a/aa/ a/ab/ b/ba/ - - #### - # Second method: use wildcards - # Note that the argument(s) to wildcard below should end with a '/'. - # Since wildcards also return file names, we have to filter them out - # to avoid duplicate directory names. - # We thus use make's `dir' and `sort' functions. - # It sets DIRs to the following value (note that the directories aaa and baa - # are not given, unless you change the arguments to wildcard). - # DIRS= ./a/a/ ./b/ ./a/aa/ ./a/ab/ ./a/ac/ ./b/ba/ ./b/bb/ ./b/bc/ - #### - - DIRS := ${sort ${dir ${wildcard ${ROOT_DIRECTORY}/*/ ${ROOT_DIRECTORY}/*/*/}}} - - #### - # Third method: use an external program - # This command is much faster if run on local disks, avoiding NFS slowdowns. - # This is the most complete command: it sets DIRs to the following value: - # DIRS= ./a ./a/aa ./a/aa/aaa ./a/ab ./a/ac ./b ./b/ba ./b/ba/baa ./b/bb ./b/bc - #### - - DIRS := ${shell find ${ROOT_DIRECTORY} -type d -print} - -  - File: gnat_ug_vxw.info, Node: Generating the Command Line Switches, Next: Overcoming Command Line Length Limits, Prev: Automatically Creating a List of Directories, Up: Using the GNU make Utility - - Generating the Command Line Switches - ==================================== - - Once you have created the list of directories as explained in the - previous section (*note Automatically Creating a List of Directories::), - you can easily generate the command line arguments to pass to gnatmake. - - For the sake of completeness, this example assumes that the source - path is not the same as the object path, and that you have two separate - lists of directories. - - # see "Automatically creating a list of directories" to create - # these variables - SOURCE_DIRS= - OBJECT_DIRS= - - GNATMAKE_SWITCHES := ${patsubst %,-aI%,${SOURCE_DIRS}} - GNATMAKE_SWITCHES += ${patsubst %,-aO%,${OBJECT_DIRS}} - - all: - gnatmake ${GNATMAKE_SWITCHES} main_unit - -  - File: gnat_ug_vxw.info, Node: Overcoming Command Line Length Limits, Prev: Generating the Command Line Switches, Up: Using the GNU make Utility - - Overcoming Command Line Length Limits - ===================================== - - One problem that might be encountered on big projects is that many - operating systems limit the length of the command line. It is thus hard - to give gnatmake the list of source and object directories. - - This example shows how you can set up environment variables, which - will make `gnatmake' behave exactly as if the directories had been - specified on the command line, but have a much higher length limit (or - even none on most systems). - - It assumes that you have created a list of directories in your - Makefile, using one of the methods presented in *Note Automatically - Creating a List of Directories::. For the sake of completeness, we - assume that the object path (where the ALI files are found) is - different from the sources patch. - - Note a small trick in the Makefile below: for efficiency reasons, we - create two temporary variables (SOURCE_LIST and OBJECT_LIST), that are - expanded immediately by `make'. This way we overcome the standard make - behavior which is to expand the variables only when they are actually - used. - - # In this example, we create both ADA_INCLUDE_PATH and ADA_OBJECT_PATH. - # This is the same thing as putting the -I arguments on the command line. - # (the equivalent of using -aI on the command line would be to define - # only ADA_INCLUDE_PATH, the equivalent of -aO is ADA_OBJECT_PATH). - # You can of course have different values for these variables. - # - # Note also that we need to keep the previous values of these variables, since - # they might have been set before running 'make' to specify where the GNAT - # library is installed. - - # see "Automatically creating a list of directories" to create these - # variables - SOURCE_DIRS= - OBJECT_DIRS= - - empty:= - space:=${empty} ${empty} - SOURCE_LIST := ${subst ${space},:,${SOURCE_DIRS}} - OBJECT_LIST := ${subst ${space},:,${OBJECT_DIRS}} - ADA_INCLUDE_PATH += ${SOURCE_LIST} - ADA_OBJECT_PATH += ${OBJECT_LIST} - export ADA_INCLUDE_PATH - export ADA_OBJECT_PATH - - all: - gnatmake main_unit - -  - File: gnat_ug_vxw.info, Node: Finding Memory Problems with GNAT Debug Pool, Next: Creating Sample Bodies Using gnatstub, Prev: Using the GNU make Utility, Up: Top - - Finding Memory Problems with GNAT Debug Pool - ******************************************** - - The use of unchecked deallocation and unchecked conversion can easily - lead to incorrect memory references. The problems generated by such - references are usually difficult to tackle because the symptoms can be - very remote from the origin of the problem. In such cases, it is very - helpful to detect the problem as early as possible. This is the purpose - of the Storage Pool provided by `GNAT.Debug_Pools'. - - In order to use the GNAT specific debugging pool, the user must - associate a debug pool object with each of the access types that may be - related to suspected memory problems. See Ada Reference Manual 13.11. - type Ptr is access Some_Type; - Pool : GNAT.Debug_Pools.Debug_Pool; - for Ptr'Storage_Pool use Pool; - - `GNAT.Debug_Pools' is derived from of a GNAT-specific kind of pool: - the Checked_Pool. Such pools, like standard Ada storage pools, allow - the user to redefine allocation and deallocation strategies. They also - provide a checkpoint for each dereference, through the use of the - primitive operation `Dereference' which is implicitly called at each - dereference of an access value. - - Once an access type has been associated with a debug pool, - operations on values of the type may raise four distinct exceptions, - which correspond to four potential kinds of memory corruption: - * `GNAT.Debug_Pools.Accessing_Not_Allocated_Storage' - - * `GNAT.Debug_Pools.Accessing_Deallocated_Storage' - - * `GNAT.Debug_Pools.Freeing_Not_Allocated_Storage' - - * `GNAT.Debug_Pools.Freeing_Deallocated_Storage ' - - For types associated with a Debug_Pool, dynamic allocation is performed - using the standard GNAT allocation routine. References to all allocated - chunks of memory are kept in an internal dictionary. The deallocation - strategy consists in not releasing the memory to the underlying system - but rather to fill it with a memory pattern easily recognizable during - debugging sessions: The memory pattern is the old IBM hexadecimal - convention: 16#DEADBEEF#. Upon each dereference, a check is made that - the access value denotes a properly allocated memory location. Here is - a complete example of use of `Debug_Pools', that includes typical - instances of memory corruption: - with Gnat.Io; use Gnat.Io; - with Unchecked_Deallocation; - with Unchecked_Conversion; - with GNAT.Debug_Pools; - with System.Storage_Elements; - with Ada.Exceptions; use Ada.Exceptions; - procedure Debug_Pool_Test is - - type T is access Integer; - type U is access all T; - - P : GNAT.Debug_Pools.Debug_Pool; - for T'Storage_Pool use P; - - procedure Free is new Unchecked_Deallocation (Integer, T); - function UC is new Unchecked_Conversion (U, T); - A, B : aliased T; - - procedure Info is new GNAT.Debug_Pools.Print_Info(Put_Line); - - begin - Info (P); - A := new Integer; - B := new Integer; - B := A; - Info (P); - Free (A); - begin - Put_Line (Integer'Image(B.all)); - exception - when E : others => Put_Line ("raised: " & Exception_Name (E)); - end; - begin - Free (B); - exception - when E : others => Put_Line ("raised: " & Exception_Name (E)); - end; - B := UC(A'Access); - begin - Put_Line (Integer'Image(B.all)); - exception - when E : others => Put_Line ("raised: " & Exception_Name (E)); - end; - begin - Free (B); - exception - when E : others => Put_Line ("raised: " & Exception_Name (E)); - end; - Info (P); - end Debug_Pool_Test; - - The debug pool mechanism provides the following precise diagnostics on - the execution of this erroneous program: - Debug Pool info: - Total allocated bytes : 0 - Total deallocated bytes : 0 - Current Water Mark: 0 - High Water Mark: 0 - - Debug Pool info: - Total allocated bytes : 8 - Total deallocated bytes : 0 - Current Water Mark: 8 - High Water Mark: 8 - - raised: GNAT.DEBUG_POOLS.ACCESSING_DEALLOCATED_STORAGE - raised: GNAT.DEBUG_POOLS.FREEING_DEALLOCATED_STORAGE - raised: GNAT.DEBUG_POOLS.ACCESSING_NOT_ALLOCATED_STORAGE - raised: GNAT.DEBUG_POOLS.FREEING_NOT_ALLOCATED_STORAGE - Debug Pool info: - Total allocated bytes : 8 - Total deallocated bytes : 4 - Current Water Mark: 4 - High Water Mark: 8 - -  - File: gnat_ug_vxw.info, Node: Creating Sample Bodies Using gnatstub, Next: Reducing the Size of Ada Executables with gnatelim, Prev: Finding Memory Problems with GNAT Debug Pool, Up: Top - - Creating Sample Bodies Using `gnatstub' - *************************************** - - `gnatstub' creates body stubs, that is, empty but compilable bodies for - library unit declarations. - - To create a body stub, `gnatstub' has to compile the library unit - declaration. Therefore, bodies can be created only for legal library - units. Moreover, if a library unit depends semantically upon units - located outside the current directory, you have to provide the source - search path when calling `gnatstub', see the description of `gnatstub' - switches below. - - * Menu: - - * Running gnatstub:: - * Switches for gnatstub:: - -  - File: gnat_ug_vxw.info, Node: Running gnatstub, Next: Switches for gnatstub, Up: Creating Sample Bodies Using gnatstub - - Running `gnatstub' - ================== - - `gnatstub' has the command-line interface of the form - - $ gnatstub [switches] filename [directory] - - where - `filename' - is the name of the source file that contains a library unit - declaration for which a body must be created. This name should - follow the GNAT file name conventions. No crunching is allowed for - this file name. The file name may contain the path information. - - `directory' - indicates the directory to place a body stub (default is the - current directory) - - `switches' - is an optional sequence of switches as described in the next - section - -  - File: gnat_ug_vxw.info, Node: Switches for gnatstub, Prev: Running gnatstub, Up: Creating Sample Bodies Using gnatstub - - Switches for `gnatstub' - ======================= - - `-f' - If the destination directory already contains a file with a name - of the body file for the argument spec file, replace it with the - generated body stub. - - `-hs' - Put the comment header (i.e. all the comments preceding the - compilation unit) from the source of the library unit declaration - into the body stub. - - `-hg' - Put a sample comment header into the body stub. - - `-IDIR' - `-I-' - These switches have the same meaning as in calls to gcc. They - define the source search path in the call to gcc issued by - `gnatstub' to compile an argument source file. - - `-iN' - (N is a decimal natural number). Set the indentation level in the - generated body sample to n, '-i0' means "no indentation", the - default indentation is 3. - - `-k' - Do not remove the tree file (i.e. the snapshot of the compiler - internal structures used by `gnatstub') after creating the body - stub. - - `-lN' - (N is a decimal positive number) Set the maximum line length in the - body stub to n, the default is 78. - - `-q' - Quiet mode: do not generate a confirmation when a body is - successfully created or a message when a body is not required for - an argument unit. - - `-r' - Reuse the tree file (if it exists) instead of creating it: instead - of creating the tree file for the library unit declaration, - gnatstub tries to find it in the current directory and use it for - creating a body. If the tree file is not found, no body is - created. `-r' also implies `-k', whether or not `-k' is set - explicitly. - - `-t' - Overwrite the existing tree file: if the current directory already - contains the file which, according to the GNAT file name rules - should be considered as a tree file for the argument source file, - gnatstub will refuse to create the tree file needed to create a - body sampler, unless `-t' option is set - - `-v' - Verbose mode: generate version information. - -  - File: gnat_ug_vxw.info, Node: Reducing the Size of Ada Executables with gnatelim, Next: Other Utility Programs, Prev: Creating Sample Bodies Using gnatstub, Up: Top - - Reducing the Size of Ada Executables with `gnatelim' - **************************************************** - - * Menu: - - * About gnatelim:: - * Eliminate Pragma:: - * Tree Files:: - * Preparing Tree and Bind Files for gnatelim:: - * Running gnatelim:: - * Correcting the List of Eliminate Pragmas:: - * Making Your Executables Smaller:: - * Summary of the gnatelim Usage Cycle:: - -  - File: gnat_ug_vxw.info, Node: About gnatelim, Next: Eliminate Pragma, Up: Reducing the Size of Ada Executables with gnatelim - - About `gnatelim' - ================ - - When a program shares a set of Ada packages with other programs, it may - happen that this program uses only a fraction of the subprograms - defined in these packages. The code created for these unused - subprograms increases the size of the executable. - - `gnatelim' tracks unused subprograms in an Ada program and outputs a - list of GNAT-specific `Eliminate' pragmas (see next section) marking - all the subprograms that are declared but never called. By placing the - list of `Eliminate' pragmas in the GNAT configuration file `gnat.adc' - and recompiling your program, you may decrease the size of its - executable, because the compiler will not generate the code for - 'eliminated' subprograms. - - `gnatelim' needs as its input data a set of tree files (see *Note - Tree Files::) representing all the components of a program to process - and a bind file for a main subprogram (see *Note Preparing Tree and - Bind Files for gnatelim::). - -  - File: gnat_ug_vxw.info, Node: Eliminate Pragma, Next: Tree Files, Prev: About gnatelim, Up: Reducing the Size of Ada Executables with gnatelim - - `Eliminate' Pragma - ================== - - The simplified syntax of the Eliminate pragma used by `gnatelim' is: - - pragma Eliminate (Library_Unit_Name, Subprogram_Name); - - where - `Library_Unit_Name' - full expanded Ada name of a library unit - - `Subprogram_Name' - a simple or expanded name of a subprogram declared within this - compilation unit - - The effect of an `Eliminate' pragma placed in the GNAT configuration - file `gnat.adc' is: - - * If the subprogram `Subprogram_Name' is declared within the library - unit `Library_Unit_Name', the compiler will not generate code for - this subprogram. This applies to all overloaded subprograms denoted - by `Subprogram_Name'. - - * If a subprogram marked by the pragma `Eliminate' is used (called) - in a program, the compiler will produce an error message in the - place where it is called. - -  - File: gnat_ug_vxw.info, Node: Tree Files, Next: Preparing Tree and Bind Files for gnatelim, Prev: Eliminate Pragma, Up: Reducing the Size of Ada Executables with gnatelim - - Tree Files - ========== - - A tree file stores a snapshot of the compiler internal data structures - at the very end of a successful compilation. It contains all the - syntactic and semantic information for the compiled unit and all the - units upon which it depends semantically. To use tools that make use - of tree files, you need to first produce the right set of tree files. - - GNAT produces correct tree files when -gnatt -gnatc options are set - in a gcc call. The tree files have an .adt extension. Therefore, to - produce a tree file for the compilation unit contained in a file named - `foo.adb', you must use the command - - $ gcc -c -gnatc -gnatt foo.adb - - and you will get the tree file `foo.adt'. compilation. - -  - File: gnat_ug_vxw.info, Node: Preparing Tree and Bind Files for gnatelim, Next: Running gnatelim, Prev: Tree Files, Up: Reducing the Size of Ada Executables with gnatelim - - Preparing Tree and Bind Files for `gnatelim' - ============================================ - - A set of tree files covering the program to be analyzed with `gnatelim' - and the bind file for the main subprogram does not have to be in the - current directory. '-T' gnatelim option may be used to provide the - search path for tree files, and '-b' option may be used to point to the - bind file to process (see *Note Running gnatelim::) - - If you do not have the appropriate set of tree files and the right - bind file, you may create them in the current directory using the - following procedure. - - Let `Main_Prog' be the name of a main subprogram, and suppose this - subprogram is in a file named `main_prog.adb'. - - To create a bind file for `gnatelim', run `gnatbind' for the main - subprogram. `gnatelim' can work with both Ada and C bind files; when - both are present, it uses the Ada bind file. The following commands - will build the program and create the bind file: - - $ gnatmake -c Main_Prog - $ gnatbind main_prog - - To create a minimal set of tree files covering the whole program, call - `gnatmake' for this program as follows: - - $ gnatmake -f -c -gnatc -gnatt Main_Prog - - The `-c' gnatmake option turns off the bind and link steps, that are - useless anyway because the sources are compiled with `-gnatc' option - which turns off code generation. - - The `-f' gnatmake option forces recompilation of all the needed - sources. - - This sequence of actions will create all the data needed by - `gnatelim' from scratch and therefore guarantee its consistency. If you - would like to use some existing set of files as `gnatelim' output, you - must make sure that the set of files is complete and consistent. You - can use the `-m' switch to check if there are missed tree files - - Note, that `gnatelim' needs neither object nor ALI files. - -  - File: gnat_ug_vxw.info, Node: Running gnatelim, Next: Correcting the List of Eliminate Pragmas, Prev: Preparing Tree and Bind Files for gnatelim, Up: Reducing the Size of Ada Executables with gnatelim - - Running `gnatelim' - ================== - - `gnatelim' has the following command-line interface: - - $ gnatelim [options] name - - `name' should be a full expanded Ada name of a main subprogram of a - program (partition). - - `gnatelim' options: - - `-q' - Quiet mode: by default `gnatelim' generates to the standard error - stream a trace of the source file names of the compilation units - being processed. This option turns this trace off. - - `-v' - Verbose mode: `gnatelim' version information is printed as Ada - comments to the standard output stream. - - `-a' - Also look for subprograms from the GNAT run time that can be - eliminated. - - `-m' - Check if any tree files are missing for an accurate result. - - `-TDIR' - When looking for tree files also look in directory DIR - - `-bBIND_FILE' - Specifies BIND_FILE as the bind file to process. If not set, the - name of the bind file is computed from the full expanded Ada name - of a main subprogram. - - `-dX' - Activate internal debugging switches. X is a letter or digit, or - string of letters or digits, which specifies the type of debugging - mode desired. Normally these are used only for internal - development or system debugging purposes. You can find full - documentation for these switches in the body of the - `Gnatelim.Options' unit in the compiler source file - `gnatelim-options.adb'. - - `gnatelim' sends its output to the standard output stream, and all the - tracing and debug information is sent to the standard error stream. In - order to produce a proper GNAT configuration file `gnat.adc', - redirection must be used: - - $ gnatelim Main_Prog > gnat.adc - - or - - $ gnatelim Main_Prog >> gnat.adc - - In order to append the `gnatelim' output to the existing contents of - `gnat.adc'. - -  - File: gnat_ug_vxw.info, Node: Correcting the List of Eliminate Pragmas, Next: Making Your Executables Smaller, Prev: Running gnatelim, Up: Reducing the Size of Ada Executables with gnatelim - - Correcting the List of Eliminate Pragmas - ======================================== - - In some rare cases it may happen that `gnatelim' will try to eliminate - subprograms which are actually called in the program. In this case, the - compiler will generate an error message of the form: - - file.adb:106:07: cannot call eliminated subprogram "My_Prog" - - You will need to manually remove the wrong `Eliminate' pragmas from the - `gnat.adc' file. It is advised that you recompile your program from - scratch after that because you need a consistent `gnat.adc' file during - the entire compilation. - -  - File: gnat_ug_vxw.info, Node: Making Your Executables Smaller, Next: Summary of the gnatelim Usage Cycle, Prev: Correcting the List of Eliminate Pragmas, Up: Reducing the Size of Ada Executables with gnatelim - - Making Your Executables Smaller - =============================== - - In order to get a smaller executable for your program you now have to - recompile the program completely with the new `gnat.adc' file created - by `gnatelim' in your current directory: - - $ gnatmake -f Main_Prog - - (you will need `-f' option for gnatmake to recompile everything with - the set of pragmas `Eliminate' you have obtained with `gnatelim'). - - Be aware that the set of `Eliminate' pragmas is specific to each - program. It is not recommended to merge sets of `Eliminate' pragmas - created for different programs in one `gnat.adc' file. - -  - File: gnat_ug_vxw.info, Node: Summary of the gnatelim Usage Cycle, Prev: Making Your Executables Smaller, Up: Reducing the Size of Ada Executables with gnatelim - - Summary of the gnatelim Usage Cycle - =================================== - - Here is a quick summary of the steps to be taken in order to reduce the - size of your executables with `gnatelim'. You may use other GNAT - options to control the optimization level, to produce the debugging - information, to set search path, etc. - - 1. Produce a bind file and a set of tree files - - $ gnatmake -c Main_Prog - $ gnatbind main_prog - $ gnatmake -f -c -gnatc -gnatt Main_Prog - - 2. Generate a list of `Eliminate' pragmas - $ gnatelim Main_Prog >[>] gnat.adc - - 3. Recompile the application - - $ gnatmake -f Main_Prog - - -  - File: gnat_ug_vxw.info, Node: Other Utility Programs, Next: Running and Debugging Ada Programs, Prev: Reducing the Size of Ada Executables with gnatelim, Up: Top - - Other Utility Programs - ********************** - - This chapter discusses some other utility programs available in the Ada - environment. - - * Menu: - - * Using Other Utility Programs with GNAT:: - * The gnatpsta Utility Program:: - * The External Symbol Naming Scheme of GNAT:: - * Ada Mode for Glide:: - * Converting Ada Files to html with gnathtml:: - * Installing gnathtml:: - -  - File: gnat_ug_vxw.info, Node: Using Other Utility Programs with GNAT, Next: The gnatpsta Utility Program, Up: Other Utility Programs - - Using Other Utility Programs with GNAT - ====================================== - - The object files generated by GNAT are in standard system format and in - particular the debugging information uses this format. This means - programs generated by GNAT can be used with existing utilities that - depend on these formats. - - In general, any utility program that works with C will also often - work with Ada programs generated by GNAT. This includes software - utilities such as gprof (a profiling program), `gdb' (the FSF - debugger), and utilities such as Purify. - -  - File: gnat_ug_vxw.info, Node: The gnatpsta Utility Program, Next: The External Symbol Naming Scheme of GNAT, Prev: Using Other Utility Programs with GNAT, Up: Other Utility Programs - - The `gnatpsta' Utility Program - ============================== - - Many of the definitions in package Standard are - implementation-dependent. However, the source of this package does not - exist as an Ada source file, so these values cannot be determined by - inspecting the source. They can be determined by examining in detail - the coding of `cstand.adb' which creates the image of Standard in the - compiler, but this is awkward and requires a great deal of internal - knowledge about the system. - - The `gnatpsta' utility is designed to deal with this situation. It - is an Ada program that dynamically determines the values of all the - relevant parameters in Standard, and prints them out in the form of an - Ada source listing for Standard, displaying all the values of interest. - This output is generated to `stdout'. - - To determine the value of any parameter in package Standard, simply - run `gnatpsta' with no qualifiers or arguments, and examine the output. - This is preferable to consulting documentation, because you know that - the values you are getting are the actual ones provided by the - executing system. - -  - File: gnat_ug_vxw.info, Node: The External Symbol Naming Scheme of GNAT, Next: Ada Mode for Glide, Prev: The gnatpsta Utility Program, Up: Other Utility Programs - - The External Symbol Naming Scheme of GNAT - ========================================= - - In order to interpret the output from GNAT, when using tools that are - originally intended for use with other languages, it is useful to - understand the conventions used to generate link names from the Ada - entity names. - - All link names are in all lowercase letters. With the exception of - library procedure names, the mechanism used is simply to use the full - expanded Ada name with dots replaced by double underscores. For - example, suppose we have the following package spec: - - package QRS is - MN : Integer; - end QRS; - - The variable `MN' has a full expanded Ada name of `QRS.MN', so the - corresponding link name is `qrs__mn'. Of course if a `pragma Export' - is used this may be overridden: - - package Exports is - Var1 : Integer; - pragma Export (Var1, C, External_Name => "var1_name"); - Var2 : Integer; - pragma Export (Var2, C, Link_Name => "var2_link_name"); - end Exports; - - In this case, the link name for VAR1 is whatever link name the C - compiler would assign for the C function VAR1_NAME. This typically - would be either VAR1_NAME or _VAR1_NAME, depending on operating system - conventions, but other possibilities exist. The link name for VAR2 is - VAR2_LINK_NAME, and this is not operating system dependent. - - One exception occurs for library level procedures. A potential - ambiguity arises between the required name `_main' for the C main - program, and the name we would otherwise assign to an Ada library level - procedure called `Main' (which might well not be the main program). - - To avoid this ambiguity, we attach the prefix `_ada_' to such names. - So if we have a library level procedure such as - - procedure Hello (S : String); - - the external name of this procedure will be _ADA_HELLO. - -  - File: gnat_ug_vxw.info, Node: Ada Mode for Glide, Next: Converting Ada Files to html with gnathtml, Prev: The External Symbol Naming Scheme of GNAT, Up: Other Utility Programs - - Ada Mode for `Glide' - ==================== - - The Glide mode for programming in Ada (both, Ada83 and Ada95) helps the - user in understanding existing code and facilitates writing new code. It - furthermore provides some utility functions for easier integration of - standard Emacs features when programming in Ada. - - General Features: - ----------------- - - * Full Integrated Development Environment : - - * support of 'project files' for the configuration (directories, - compilation options,...) - - * compiling and stepping through error messages. - - * running and debugging your applications within Glide. - - * easy to use for beginners by pull-down menus, - - * user configurable by many user-option variables. - - Ada Mode Features That Help Understanding Code: - ----------------------------------------------- - - * functions for easy and quick stepping through Ada code, - - * getting cross reference information for identifiers (e.g. find the - defining place by a keystroke), - - * displaying an index menu of types and subprograms and move point to - the chosen one, - - * automatic color highlighting of the various entities in Ada code. - - Glide Support for Writing Ada Code: - ----------------------------------- - - * switching between spec and body files with possible autogeneration - of body files, - - * automatic formating of subprograms parameter lists. - - * automatic smart indentation according to Ada syntax, - - * automatic completion of identifiers, - - * automatic casing of identifiers, keywords, and attributes, - - * insertion of statement templates, - - * filling comment paragraphs like filling normal text, - - For more information, please refer to the online Glide documentation - available in the Glide -> Help Menu. - -  - File: gnat_ug_vxw.info, Node: Converting Ada Files to html with gnathtml, Next: Installing gnathtml, Prev: Ada Mode for Glide, Up: Other Utility Programs - - Converting Ada Files to html with `gnathtml' - ============================================ - - This `Perl' script allows Ada source files to be browsed using standard - Web browsers. For installation procedure, see the section *Note - Installing gnathtml::. - - Ada reserved keywords are highlighted in a bold font and Ada - comments in a blue font. Unless your program was compiled with the gcc - `-gnatx' switch to suppress the generation of cross-referencing - information, user defined variables and types will appear in a - different color; you will be able to click on any identifier and go to - its declaration. - - The command line is as follow: - $ perl gnathtml.pl [switches] ada-files - - You can pass it as many Ada files as you want. `gnathtml' will - generate an html file for every ada file, and a global file called - `index.htm'. This file is an index of every identifier defined in the - files. - - The available switches are the following ones : - - `-83' - Only the subset on the Ada 83 keywords will be highlighted, not - the full Ada 95 keywords set. - - `-cc COLOR' - This option allows you to change the color used for comments. The - default value is green. The color argument can be any name - accepted by html. - - `-d' - If the ada files depend on some other files (using for instance the - `with' command, the latter will also be converted to html. Only - the files in the user project will be converted to html, not the - files in the run-time library itself. - - `-D' - This command is the same as -d above, but `gnathtml' will also look - for files in the run-time library, and generate html files for - them. - - `-f' - By default, gnathtml will generate html links only for global - entities ('with'ed units, global variables and types,...). If you - specify the `-f' on the command line, then links will be generated - for local entities too. - - `-l NUMBER' - If this switch is provided and NUMBER is not 0, then `gnathtml' - will number the html files every NUMBER line. - - `-I DIR' - Specify a directory to search for library files (`.ali' files) and - source files. You can provide several -I switches on the command - line, and the directories will be parsed in the order of the - command line. - - `-o DIR' - Specify the output directory for html files. By default, gnathtml - will saved the generated html files in a subdirectory named - `html/'. - - `-p FILE' - If you are using Emacs and the most recent Emacs Ada mode, which - provides a full Integrated Development Environment for compiling, - checking, running and debugging applications, you may be using - `.adp' files to give the directories where Emacs can find sources - and object files. - - Using this switch, you can tell gnathtml to use these files. This - allows you to get an html version of your application, even if it - is spread over multiple directories. - - `-sc COLOR' - This option allows you to change the color used for symbol - definitions. The default value is red. The color argument can be - any name accepted by html. - - `-t FILE' - This switch provides the name of a file. This file contains a list - of file names to be converted, and the effect is exactly as though - they had appeared explicitly on the command line. This is the - recommended way to work around the command line length limit on - some systems. - -  - File: gnat_ug_vxw.info, Node: Installing gnathtml, Prev: Converting Ada Files to html with gnathtml, Up: Other Utility Programs - - Installing `gnathtml' - ===================== - - `Perl' needs to be installed on your machine to run this script. - `Perl' is freely available for almost every architecture and Operating - System via the Internet. - - On Unix systems, you may want to modify the first line of the - script `gnathtml', to explicitly tell the Operating system where - Perl is. The syntax of this line is : - #!full_path_name_to_perl - - Alternatively, you may run the script using the following command line: - - $ perl gnathtml.pl [switches] files - -  - File: gnat_ug_vxw.info, Node: Running and Debugging Ada Programs, Next: Inline Assembler, Prev: Other Utility Programs, Up: Top - - Running and Debugging Ada Programs - ********************************** - - This chapter discusses how to debug Ada programs. An incorrect Ada - program may be handled in three ways by the GNAT compiler: - - 1. The illegality may be a violation of the static semantics of Ada. - In that case GNAT diagnoses the constructs in the program that are - illegal. It is then a straightforward matter for the user to - modify those parts of the program. - - 2. The illegality may be a violation of the dynamic semantics of Ada. - In that case the program compiles and executes, but may generate - incorrect results, or may terminate abnormally with some exception. - - 3. When presented with a program that contains convoluted errors, GNAT - itself may terminate abnormally without providing full diagnostics - on the incorrect user program. - - * Menu: - - * The GNAT Debugger GDB:: - * Running GDB:: - * Introduction to GDB Commands:: - * Using Ada Expressions:: - * Calling User-Defined Subprograms:: - * Using the Next Command in a Function:: - * Ada Exceptions:: - * Ada Tasks:: - * Debugging Generic Units:: - * GNAT Abnormal Termination or Failure to Terminate:: - * Naming Conventions for GNAT Source Files:: - * Getting Internal Debugging Information:: - * Stack Traceback:: - -  - File: gnat_ug_vxw.info, Node: The GNAT Debugger GDB, Next: Running GDB, Up: Running and Debugging Ada Programs - - The GNAT Debugger GDB - ===================== - - `GDB' is a general purpose, platform-independent debugger that can be - used to debug mixed-language programs compiled with `GCC', and in - particular is capable of debugging Ada programs compiled with GNAT. The - latest versions of `GDB' are Ada-aware and can handle complex Ada data - structures. - - The manual `Debugging with GDB' contains full details on the usage - of `GDB', including a section on its usage on programs. This manual - should be consulted for full details. The section that follows is a - brief introduction to the philosophy and use of `GDB'. - - When GNAT programs are compiled, the compiler optionally writes - debugging information into the generated object file, including - information on line numbers, and on declared types and variables. This - information is separate from the generated code. It makes the object - files considerably larger, but it does not add to the size of the - actual executable that will be loaded into memory, and has no impact on - run-time performance. The generation of debug information is triggered - by the use of the -g switch in the gcc or gnatmake command used to - carry out the compilations. It is important to emphasize that the use - of these options does not change the generated code. - - The debugging information is written in standard system formats that - are used by many tools, including debuggers and profilers. The format - of the information is typically designed to describe C types and - semantics, but GNAT implements a translation scheme which allows full - details about Ada types and variables to be encoded into these standard - C formats. Details of this encoding scheme may be found in the file - exp_dbug.ads in the GNAT source distribution. However, the details of - this encoding are, in general, of no interest to a user, since `GDB' - automatically performs the necessary decoding. - - When a program is bound and linked, the debugging information is - collected from the object files, and stored in the executable image of - the program. Again, this process significantly increases the size of - the generated executable file, but it does not increase the size of the - executable program itself. Furthermore, if this program is run in the - normal manner, it runs exactly as if the debug information were not - present, and takes no more actual memory. - - However, if the program is run under control of `GDB', the debugger - is activated. The image of the program is loaded, at which point it is - ready to run. If a run command is given, then the program will run - exactly as it would have if `GDB' were not present. This is a crucial - part of the `GDB' design philosophy. `GDB' is entirely non-intrusive - until a breakpoint is encountered. If no breakpoint is ever hit, the - program will run exactly as it would if no debugger were present. When - a breakpoint is hit, `GDB' accesses the debugging information and can - respond to user commands to inspect variables, and more generally to - report on the state of execution. - -  - File: gnat_ug_vxw.info, Node: Running GDB, Next: Introduction to GDB Commands, Prev: The GNAT Debugger GDB, Up: Running and Debugging Ada Programs - - Running GDB - =========== - - Please refer to the debugging section of the chapter specific to your - cross environment at the end of this manual. - -  - File: gnat_ug_vxw.info, Node: Introduction to GDB Commands, Next: Using Ada Expressions, Prev: Running GDB, Up: Running and Debugging Ada Programs - - Introduction to GDB Commands - ============================ - - `GDB' contains a large repertoire of commands. The manual `Debugging - with GDB' includes extensive documentation on the use of these - commands, together with examples of their use. Furthermore, the command - HELP invoked from within `GDB' activates a simple help facility which - summarizes the available commands and their options. In this section - we summarize a few of the most commonly used commands to give an idea - of what `GDB' is about. You should create a simple program with - debugging information and experiment with the use of these `GDB' - commands on the program as you read through the following section. - - `set args ARGUMENTS' - The ARGUMENTS list above is a list of arguments to be passed to - the program on a subsequent run command, just as though the - arguments had been entered on a normal invocation of the program. - The `set args' command is not needed if the program does not - require arguments. - - `run' - The `run' command causes execution of the program to start from - the beginning. If the program is already running, that is to say if - you are currently positioned at a breakpoint, then a prompt will - ask for confirmation that you want to abandon the current - execution and restart. - - `breakpoint LOCATION' - The breakpoint command sets a breakpoint, that is to say a point - at which execution will halt and `GDB' will await further - commands. LOCATION is either a line number within a file, given in - the format `file:linenumber', or it is the name of a subprogram. - If you request that a breakpoint be set on a subprogram that is - overloaded, a prompt will ask you to specify on which of those - subprograms you want to breakpoint. You can also specify that all - of them should be breakpointed. If the program is run and - execution encounters the breakpoint, then the program stops and - `GDB' signals that the breakpoint was encountered by printing the - line of code before which the program is halted. - - `breakpoint exception NAME' - A special form of the breakpoint command which breakpoints whenever - exception NAME is raised. If NAME is omitted, then a breakpoint - will occur when any exception is raised. - - `print EXPRESSION' - This will print the value of the given expression. Most simple Ada - expression formats are properly handled by `GDB', so the expression - can contain function calls, variables, operators, and attribute - references. - - `continue' - Continues execution following a breakpoint, until the next - breakpoint or the termination of the program. - - `step' - Executes a single line after a breakpoint. If the next statement - is a subprogram call, execution continues into (the first - statement of) the called subprogram. - - `next' - Executes a single line. If this line is a subprogram call, - executes and returns from the call. - - `list' - Lists a few lines around the current source location. In practice, - it is usually more convenient to have a separate edit window open - with the relevant source file displayed. Successive applications - of this command print subsequent lines. The command can be given - an argument which is a line number, in which case it displays a - few lines around the specified one. - - `backtrace' - Displays a backtrace of the call chain. This command is typically - used after a breakpoint has occurred, to examine the sequence of - calls that leads to the current breakpoint. The display includes - one line for each activation record (frame) corresponding to an - active subprogram. - - `up' - At a breakpoint, `GDB' can display the values of variables local - to the current frame. The command `up' can be used to examine the - contents of other active frames, by moving the focus up the stack, - that is to say from callee to caller, one frame at a time. - - `down' - Moves the focus of `GDB' down from the frame currently being - examined to the frame of its callee (the reverse of the previous - command), - - `frame N' - Inspect the frame with the given number. The value 0 denotes the - frame of the current breakpoint, that is to say the top of the - call stack. - - The above list is a very short introduction to the commands that - `GDB' provides. Important additional capabilities, including conditional - breakpoints, the ability to execute command sequences on a breakpoint, - the ability to debug at the machine instruction level and many other - features are described in detail in `Debugging with GDB'. Note that - most commands can be abbreviated (for example, c for continue, bt for - backtrace). - -  - File: gnat_ug_vxw.info, Node: Using Ada Expressions, Next: Calling User-Defined Subprograms, Prev: Introduction to GDB Commands, Up: Running and Debugging Ada Programs - - Using Ada Expressions - ===================== - - `GDB' supports a fairly large subset of Ada expression syntax, with some - extensions. The philosophy behind the design of this subset is - - * That `GDB' should provide basic literals and access to operations - for arithmetic, dereferencing, field selection, indexing, and - subprogram calls, leaving more sophisticated computations to - subprograms written into the program (which therefore may be - called from `GDB'). - - * That type safety and strict adherence to Ada language restrictions - are not particularly important to the `GDB' user. - - * That brevity is important to the `GDB' user. - - Thus, for brevity, the debugger acts as if there were implicit - `with' and `use' clauses in effect for all user-written packages, thus - making it unnecessary to fully qualify most names with their packages, - regardless of context. Where this causes ambiguity, `GDB' asks the - user's intent. - - For details on the supported Ada syntax, see `Debugging with GDB'. - -  - File: gnat_ug_vxw.info, Node: Calling User-Defined Subprograms, Next: Using the Next Command in a Function, Prev: Using Ada Expressions, Up: Running and Debugging Ada Programs - - Calling User-Defined Subprograms - ================================ - - An important capability of `GDB' is the ability to call user-defined - subprograms while debugging. This is achieved simply by entering a - subprogram call statement in the form: - - call subprogram-name (parameters) - - The keyword `call' can be omitted in the normal case where the - `subprogram-name' does not coincide with any of the predefined `GDB' - commands. - - The effect is to invoke the given subprogram, passing it the list of - parameters that is supplied. The parameters can be expressions and can - include variables from the program being debugged. The subprogram must - be defined at the library level within your program, and `GDB' will - call the subprogram within the environment of your program execution - (which means that the subprogram is free to access or even modify - variables within your program). - - The most important use of this facility is in allowing the inclusion - of debugging routines that are tailored to particular data structures - in your program. Such debugging routines can be written to provide a - suitably high-level description of an abstract type, rather than a - low-level dump of its physical layout. After all, the standard `GDB - print' command only knows the physical layout of your types, not their - abstract meaning. Debugging routines can provide information at the - desired semantic level and are thus enormously useful. - - For example, when debugging GNAT itself, it is crucial to have - access to the contents of the tree nodes used to represent the program - internally. But tree nodes are represented simply by an integer value - (which in turn is an index into a table of nodes). Using the `print' - command on a tree node would simply print this integer value, which is - not very useful. But the PN routine (defined in file treepr.adb in the - GNAT sources) takes a tree node as input, and displays a useful high - level representation of the tree node, which includes the syntactic - category of the node, its position in the source, the integers that - denote descendant nodes and parent node, as well as varied semantic - information. To study this example in more detail, you might want to - look at the body of the PN procedure in the stated file. - -  - File: gnat_ug_vxw.info, Node: Using the Next Command in a Function, Next: Ada Exceptions, Prev: Calling User-Defined Subprograms, Up: Running and Debugging Ada Programs - - Using the Next Command in a Function - ==================================== - - When you use the `next' command in a function, the current source - location will advance to the next statement as usual. A special case - arises in the case of a `return' statement. - - Part of the code for a return statement is the "epilog" of the - function. This is the code that returns to the caller. There is only - one copy of this epilog code, and it is typically associated with the - last return statement in the function if there is more than one return. - In some implementations, this epilog is associated with the first - statement of the function. - - The result is that if you use the `next' command from a return - statement that is not the last return statement of the function you may - see a strange apparent jump to the last return statement or to the - start of the function. You should simply ignore this odd jump. The - value returned is always that from the first return statement that was - stepped through. - -  - File: gnat_ug_vxw.info, Node: Ada Exceptions, Next: Ada Tasks, Prev: Using the Next Command in a Function, Up: Running and Debugging Ada Programs - - Breaking on Ada Exceptions - ========================== - - You can set breakpoints that trip when your program raises selected - exceptions. - - `break exception' - Set a breakpoint that trips whenever (any task in the) program - raises any exception. - - `break exception NAME' - Set a breakpoint that trips whenever (any task in the) program - raises the exception NAME. - - `break exception unhandled' - Set a breakpoint that trips whenever (any task in the) program - raises an exception for which there is no handler. - - `info exceptions' - `info exceptions REGEXP' - The `info exceptions' command permits the user to examine all - defined exceptions within Ada programs. With a regular expression, - REGEXP, as argument, prints out only those exceptions whose name - matches REGEXP. - -  - File: gnat_ug_vxw.info, Node: Ada Tasks, Next: Debugging Generic Units, Prev: Ada Exceptions, Up: Running and Debugging Ada Programs - - Ada Tasks - ========= - - `GDB' allows the following task-related commands: - - `info tasks' - This command shows a list of current Ada tasks, as in the - following example: - - (gdb) info tasks - ID TID P-ID Thread Pri State Name - 1 8088000 0 807e000 15 Child Activation Wait main_task - 2 80a4000 1 80ae000 15 Accept/Select Wait b - 3 809a800 1 80a4800 15 Child Activation Wait a - * 4 80ae800 3 80b8000 15 Running c - - In this listing, the asterisk before the first task indicates it - to be the currently running task. The first column lists the task - ID that is used to refer to tasks in the following commands. - - `break LINESPEC task TASKID' - `break LINESPEC task TASKID if ...' - These commands are like the `break ... thread ...'. LINESPEC - specifies source lines. - - Use the qualifier `task TASKID' with a breakpoint command to - specify that you only want `GDB' to stop the program when a - particular Ada task reaches this breakpoint. TASKID is one of the - numeric task identifiers assigned by `GDB', shown in the first - column of the `info tasks' display. - - If you do not specify `task TASKID' when you set a breakpoint, the - breakpoint applies to _all_ tasks of your program. - - You can use the `task' qualifier on conditional breakpoints as - well; in this case, place `task TASKID' before the breakpoint - condition (before the `if'). - - `task TASKNO' - This command allows to switch to the task referred by TASKNO. In - particular, This allows to browse the backtrace of the specified - task. It is advised to switch back to the original task before - continuing execution otherwise the scheduling of the program may be - perturbated. - - For more detailed information on the tasking support, see `Debugging - with GDB'. - -  - File: gnat_ug_vxw.info, Node: Debugging Generic Units, Next: GNAT Abnormal Termination or Failure to Terminate, Prev: Ada Tasks, Up: Running and Debugging Ada Programs - - Debugging Generic Units - ======================= - - GNAT always uses code expansion for generic instantiation. This means - that each time an instantiation occurs, a complete copy of the original - code is made, with appropriate substitutions of formals by actuals. - - It is not possible to refer to the original generic entities in - `GDB', but it is always possible to debug a particular instance of a - generic, by using the appropriate expanded names. For example, if we - have - - procedure g is - - generic package k is - procedure kp (v1 : in out integer); - end k; - - package body k is - procedure kp (v1 : in out integer) is - begin - v1 := v1 + 1; - end kp; - end k; - - package k1 is new k; - package k2 is new k; - - var : integer := 1; - - begin - k1.kp (var); - k2.kp (var); - k1.kp (var); - k2.kp (var); - end; - - Then to break on a call to procedure kp in the k2 instance, simply use - the command: - - (gdb) break g.k2.kp - - When the breakpoint occurs, you can step through the code of the - instance in the normal manner and examine the values of local - variables, as for other units. - -  - File: gnat_ug_vxw.info, Node: GNAT Abnormal Termination or Failure to Terminate, Next: Naming Conventions for GNAT Source Files, Prev: Debugging Generic Units, Up: Running and Debugging Ada Programs - - GNAT Abnormal Termination or Failure to Terminate - ================================================= - - When presented with programs that contain serious errors in syntax or - semantics, GNAT may on rare occasions experience problems in - operation, such as aborting with a segmentation fault or illegal memory - access, raising an internal exception, terminating abnormally, or - failing to terminate at all. In such cases, you can activate various - features of GNAT that can help you pinpoint the construct in your - program that is the likely source of the problem. - - The following strategies are presented in increasing order of - difficulty, corresponding to your experience in using GNAT and your - familiarity with compiler internals. - - 1. Run `gcc' with the `-gnatf'. This first switch causes all errors - on a given line to be reported. In its absence, only the first - error on a line is displayed. - - The `-gnatdO' switch causes errors to be displayed as soon as they - are encountered, rather than after compilation is terminated. If - GNAT terminates prematurely or goes into an infinite loop, the - last error message displayed may help to pinpoint the culprit. - - 2. Run `gcc' with the `-v (verbose)' switch. In this mode, `gcc' - produces ongoing information about the progress of the compilation - and provides the name of each procedure as code is generated. This - switch allows you to find which Ada procedure was being compiled - when it encountered a code generation problem. - - 3. Run `gcc' with the `-gnatdc' switch. This is a GNAT specific - switch that does for the front-end what `-v' does for the back end. - The system prints the name of each unit, either a compilation unit - or nested unit, as it is being analyzed. - - 4. Finally, you can start `gdb' directly on the `gnat1' executable. - `gnat1' is the front-end of GNAT, and can be run independently - (normally it is just called from `gcc'). You can use `gdb' on - `gnat1' as you would on a C program (but *note The GNAT Debugger - GDB:: for caveats). The `where' command is the first line of - attack; the variable `lineno' (seen by `print lineno'), used by - the second phase of `gnat1' and by the `gcc' backend, indicates - the source line at which the execution stopped, and `input_file - name' indicates the name of the source file. - -  - File: gnat_ug_vxw.info, Node: Naming Conventions for GNAT Source Files, Next: Getting Internal Debugging Information, Prev: GNAT Abnormal Termination or Failure to Terminate, Up: Running and Debugging Ada Programs - - Naming Conventions for GNAT Source Files - ======================================== - - In order to examine the workings of the GNAT system, the following - brief description of its organization may be helpful: - - * Files with prefix `sc' contain the lexical scanner. - - * All files prefixed with `par' are components of the parser. The - numbers correspond to chapters of the Ada 95 Reference Manual. For - example, parsing of select statements can be found in - `par-ch9.adb'. - - * All files prefixed with `sem' perform semantic analysis. The - numbers correspond to chapters of the Ada standard. For example, - all issues involving context clauses can be found in - `sem_ch10.adb'. In addition, some features of the language require - sufficient special processing to justify their own semantic files: - sem_aggr for aggregates, sem_disp for dynamic dispatching, etc. - - * All files prefixed with `exp' perform normalization and expansion - of the intermediate representation (abstract syntax tree, or AST). - these files use the same numbering scheme as the parser and - semantics files. For example, the construction of record - initialization procedures is done in `exp_ch3.adb'. - - * The files prefixed with `bind' implement the binder, which - verifies the consistency of the compilation, determines an order of - elaboration, and generates the bind file. - - * The files `atree.ads' and `atree.adb' detail the low-level data - structures used by the front-end. - - * The files `sinfo.ads' and `sinfo.adb' detail the structure of the - abstract syntax tree as produced by the parser. - - * The files `einfo.ads' and `einfo.adb' detail the attributes of all - entities, computed during semantic analysis. - - * Library management issues are dealt with in files with prefix - `lib'. - - * Ada files with the prefix `a-' are children of `Ada', as defined - in Annex A. - - * Files with prefix `i-' are children of `Interfaces', as defined in - Annex B. - - * Files with prefix `s-' are children of `System'. This includes - both language-defined children and GNAT run-time routines. - - * Files with prefix `g-' are children of `GNAT'. These are useful - general-purpose packages, fully documented in their - specifications. All the other `.c' files are modifications of - common `gcc' files. - -  - File: gnat_ug_vxw.info, Node: Getting Internal Debugging Information, Next: Stack Traceback, Prev: Naming Conventions for GNAT Source Files, Up: Running and Debugging Ada Programs - - Getting Internal Debugging Information - ====================================== - - Most compilers have internal debugging switches and modes. GNAT does - also, except GNAT internal debugging switches and modes are not secret. - A summary and full description of all the compiler and binder debug - flags are in the file `debug.adb'. You must obtain the sources of the - compiler to see the full detailed effects of these flags. - - The switches that print the source of the program (reconstructed from - the internal tree) are of general interest for user programs, as are the - options to print the full internal tree, and the entity table (the - symbol table information). The reconstructed source provides a readable - version of the program after the front-end has completed analysis and - expansion, and is useful when studying the performance of specific - constructs. For example, constraint checks are indicated, complex - aggregates are replaced with loops and assignments, and tasking - primitives are replaced with run-time calls. - -  - File: gnat_ug_vxw.info, Node: Stack Traceback, Prev: Getting Internal Debugging Information, Up: Running and Debugging Ada Programs - - Stack Traceback - =============== - - Traceback is a mechanism to display the sequence of subprogram calls - that leads to a specified execution point in a program. Often (but not - always) the execution point is an instruction at which an exception has - been raised. This mechanism is also known as stack unwinding because - it obtains its information by scanning the run-time stack and - recovering the activation records of all active subprograms. Stack - unwinding is one of the most important tools for program debugging. - - The first entry stored in traceback corresponds to the deepest calling - level, that is to say the subprogram currently executing the instruction - from which we want to obtain the traceback. - - Note that there is no runtime performance penalty when stack traceback - is enabled and no exception are raised during program execution. - - * Menu: - - * Non-Symbolic Traceback:: - * Symbolic Traceback:: - -  - File: gnat_ug_vxw.info, Node: Non-Symbolic Traceback, Next: Symbolic Traceback, Up: Stack Traceback - - Non-Symbolic Traceback - ---------------------- - - Note: this feature is not supported on all platforms. See - `GNAT.Traceback spec in g-traceb.ads' for a complete list of supported - platforms. - - * Menu: - - * Tracebacks From an Unhandled Exception:: - * Tracebacks From Exception Occurrences (non-symbolic):: - * Tracebacks From Anywhere in a Program (non-symbolic):: - -  - File: gnat_ug_vxw.info, Node: Tracebacks From an Unhandled Exception, Next: Tracebacks From Exception Occurrences (non-symbolic), Up: Non-Symbolic Traceback - - Tracebacks From an Unhandled Exception - ...................................... - - A runtime non-symbolic traceback is a list of addresses of call - instructions. To enable this feature you must use the `-E' - `gnatbind''s option. With this option a stack traceback is stored as - part of exception information. It is possible to retrieve this - information using the standard `Ada.Exception.Exception_Information' - routine. - - Let's have a look at a simple example: - - procedure STB is - - procedure P1 is - begin - raise Constraint_Error; - end P1; - - procedure P2 is - begin - P1; - end P2; - - begin - P2; - end STB; - - $ gnatmake stb -bargs -E - $ stb - - Execution terminated by unhandled exception - Exception name: CONSTRAINT_ERROR - Message: stb.adb:5 - Call stack traceback locations: - 0x401373 0x40138b 0x40139c 0x401335 0x4011c4 0x4011f1 0x77e892a4 - - As we see the traceback lists a sequence of addresses for the unhandled - exception `CONSTAINT_ERROR' raised in procedure P1. It is easy to guess - that this exception come from procedure P1. To translate these - addresses into the source lines where the calls appear, the `addr2line' - tool, described below, is invaluable. The use of this tool requires the - program to be compiled with debug information. - - $ gnatmake -g stb -bargs -E - $ stb - - Execution terminated by unhandled exception - Exception name: CONSTRAINT_ERROR - Message: stb.adb:5 - Call stack traceback locations: - 0x401373 0x40138b 0x40139c 0x401335 0x4011c4 0x4011f1 0x77e892a4 - - $ addr2line --exe=stb 0x401373 0x40138b 0x40139c 0x401335 0x4011c4 - 0x4011f1 0x77e892a4 - - 00401373 at d:/stb/stb.adb:5 - 0040138B at d:/stb/stb.adb:10 - 0040139C at d:/stb/stb.adb:14 - 00401335 at d:/stb/b~stb.adb:104 - 004011C4 at /build/.../crt1.c:200 - 004011F1 at /build/.../crt1.c:222 - 77E892A4 in ?? at ??:0 - - `addr2line' has a number of other useful options: - - `--functions' - to get the function name corresponding to any location - - `--demangle=gnat' - to use the gnat decoding mode for the function names. Note that - for binutils version 2.9.x the option is simply `--demangle'. - - $ addr2line --exe=stb --functions --demangle=gnat 0x401373 0x40138b - 0x40139c 0x401335 0x4011c4 0x4011f1 - - 00401373 in stb.p1 at d:/stb/stb.adb:5 - 0040138B in stb.p2 at d:/stb/stb.adb:10 - 0040139C in stb at d:/stb/stb.adb:14 - 00401335 in main at d:/stb/b~stb.adb:104 - 004011C4 in <__mingw_CRTStartup> at /build/.../crt1.c:200 - 004011F1 in at /build/.../crt1.c:222 - - From this traceback we can see that the exception was raised in - `stb.adb' at line 5, which was reached from a procedure call in - `stb.adb' at line 10, and so on. The `b~std.adb' is the binder file, - which contains the call to the main program. *note Running gnatbind::. - The remaining entries are assorted runtime routines, and the output - will vary from platform to platform. - - It is also possible to use `GDB' with these traceback addresses to debug - the program. For example, we can break at a given code location, as - reported in the stack traceback: - - $ gdb -nw stb - - (gdb) break *0x401373 - Breakpoint 1 at 0x401373: file stb.adb, line 5. - - It is important to note that the stack traceback addresses do not - change when debug information is included. This is particularly useful - because it makes it possible to release software without debug - information (to minimize object size), get a field report that includes - a stack traceback whenever an internal bug occurs, and then be able to - retrieve the sequence of calls with the same program compiled with - debug information. - -  - File: gnat_ug_vxw.info, Node: Tracebacks From Exception Occurrences (non-symbolic), Next: Tracebacks From Anywhere in a Program (non-symbolic), Prev: Tracebacks From an Unhandled Exception, Up: Non-Symbolic Traceback - - Tracebacks From Exception Occurrences - ..................................... - - Non-symbolic tracebacks are obtained by using the `-E' binder argument. - The stack traceback is attached to the exception information string, - and can be retrieved in an exception handler within the Ada program, by - means of the Ada95 facilities defined in `Ada.Exceptions'. Here is a - simple example: - - with Ada.Text_IO; - with Ada.Exceptions; - - procedure STB is - - use Ada; - use Ada.Exceptions; - - procedure P1 is - K : Positive := 1; - begin - K := K - 1; - exception - when E : others => - Text_IO.Put_Line (Exception_Information (E)); - end P1; - - procedure P2 is - begin - P1; - end P2; - - begin - P2; - end STB; - - This program will output: - - $ stb - - Exception name: CONSTRAINT_ERROR - Message: stb.adb:12 - Call stack traceback locations: - 0x4015e4 0x401633 0x401644 0x401461 0x4011c4 0x4011f1 0x77e892a4 - -  - File: gnat_ug_vxw.info, Node: Tracebacks From Anywhere in a Program (non-symbolic), Prev: Tracebacks From Exception Occurrences (non-symbolic), Up: Non-Symbolic Traceback - - Tracebacks From Anywhere in a Program - ..................................... - - It is also possible to retrieve a stack traceback from anywhere in a - program. For this you need to use the `GNAT.Traceback' API. This - package includes a procedure called `Call_Chain' that computes a - complete stack traceback, as well as useful display procedures - described below. It is not necessary to use the `-E gnatbind' option in - this case, because the stack traceback mechanism is invoked explicitly. - - In the following example we compute a traceback at a specific location - in the program, and we display it using `GNAT.Debug_Utilities.Image' to - convert addresses to strings: - - with Ada.Text_IO; - with GNAT.Traceback; - with GNAT.Debug_Utilities; - - procedure STB is - - use Ada; - use GNAT; - use GNAT.Traceback; - - procedure P1 is - TB : Tracebacks_Array (1 .. 10); - -- We are asking for a maximum of 10 stack frames. - Len : Natural; - -- Len will receive the actual number of stack frames returned. - begin - Call_Chain (TB, Len); - - Text_IO.Put ("In STB.P1 : "); - - for K in 1 .. Len loop - Text_IO.Put (Debug_Utilities.Image (TB (K))); - Text_IO.Put (' '); - end loop; - - Text_IO.New_Line; - end P1; - - procedure P2 is - begin - P1; - end P2; - - begin - P2; - end STB; - - $ gnatmake stb - $ stb - - In STB.P1 : 16#0040_F1E4# 16#0040_14F2# 16#0040_170B# 16#0040_171C# - 16#0040_1461# 16#0040_11C4# 16#0040_11F1# 16#77E8_92A4# - -  - File: gnat_ug_vxw.info, Node: Symbolic Traceback, Prev: Non-Symbolic Traceback, Up: Stack Traceback - - Symbolic Traceback - ------------------ - - A symbolic traceback is a stack traceback in which procedure names are - associated with each code location. - - Note that this feature is not supported on all platforms. See - `GNAT.Traceback.Symbolic spec in g-trasym.ads' for a complete list of - currently supported platforms. - - Note that the symbolic traceback requires that the program be compiled - with debug information. If it is not compiled with debug information - only the non-symbolic information will be valid. - - * Menu: - - * Tracebacks From Exception Occurrences (symbolic):: - * Tracebacks From Anywhere in a Program (symbolic):: - -  - File: gnat_ug_vxw.info, Node: Tracebacks From Exception Occurrences (symbolic), Next: Tracebacks From Anywhere in a Program (symbolic), Up: Symbolic Traceback - - Tracebacks From Exception Occurrences - ..................................... - - with Ada.Text_IO; - with GNAT.Traceback.Symbolic; - - procedure STB is - - procedure P1 is - begin - raise Constraint_Error; - end P1; - - procedure P2 is - begin - P1; - end P2; - - procedure P3 is - begin - P2; - end P3; - - begin - P3; - exception - when E : others => - Ada.Text_IO.Put_Line (GNAT.Traceback.Symbolic.Symbolic_Traceback (E)); - end STB; - - $ gnatmake -g stb -bargs -E -largs -lgnat -laddr2line -lintl - $ stb - - 0040149F in stb.p1 at stb.adb:8 - 004014B7 in stb.p2 at stb.adb:13 - 004014CF in stb.p3 at stb.adb:18 - 004015DD in ada.stb at stb.adb:22 - 00401461 in main at b~stb.adb:168 - 004011C4 in __mingw_CRTStartup at crt1.c:200 - 004011F1 in mainCRTStartup at crt1.c:222 - 77E892A4 in ?? at ??:0 - - The exact sequence of linker options may vary from platform to platform. - The above `-largs' section is for Windows platforms. By contrast, under - Unix there is no need for the `-largs' section. Differences across - platforms are due to details of linker implementation. - -  - File: gnat_ug_vxw.info, Node: Tracebacks From Anywhere in a Program (symbolic), Prev: Tracebacks From Exception Occurrences (symbolic), Up: Symbolic Traceback - - Tracebacks From Anywhere in a Program - ..................................... - - It is possible to get a symbolic stack traceback from anywhere in a - program, just as for non-symbolic tracebacks. The first step is to - obtain a non-symbolic traceback, and then call `Symbolic_Traceback' to - compute the symbolic information. Here is an example: - - with Ada.Text_IO; - with GNAT.Traceback; - with GNAT.Traceback.Symbolic; - - procedure STB is - - use Ada; - use GNAT.Traceback; - use GNAT.Traceback.Symbolic; - - procedure P1 is - TB : Tracebacks_Array (1 .. 10); - -- We are asking for a maximum of 10 stack frames. - Len : Natural; - -- Len will receive the actual number of stack frames returned. - begin - Call_Chain (TB, Len); - Text_IO.Put_Line (Symbolic_Traceback (TB (1 .. Len))); - end P1; - - procedure P2 is - begin - P1; - end P2; - - begin - P2; - end STB; - -  - File: gnat_ug_vxw.info, Node: Inline Assembler, Next: VxWorks Topics, Prev: Running and Debugging Ada Programs, Up: Top - - Inline Assembler - **************** - - If you need to write low-level software that interacts directly with - the hardware, Ada provides two ways to incorporate assembly language - code into your program. First, you can import and invoke external - routines written in assembly language, an Ada feature fully supported - by GNAT. However, for small sections of code it may be simpler or more - efficient to include assembly language statements directly in your Ada - source program, using the facilities of the implementation-defined - package `System.Machine_Code', which incorporates the gcc Inline - Assembler. The Inline Assembler approach offers a number of - advantages, including the following: - - * No need to use non-Ada tools - - * Consistent interface over different targets - - * Automatic usage of the proper calling conventions - - * Access to Ada constants and variables - - * Definition of intrinsic routines - - * Possibility of inlining a subprogram comprising assembler code - - * Code optimizer can take Inline Assembler code into account - - This chapter presents a series of examples to show you how to use - the Inline Assembler. Although it focuses on the Intel x86, the - general approach applies also to other processors. It is assumed that - you are familiar with Ada and with assembly language programming. - - * Menu: - - * Basic Assembler Syntax:: - * A Simple Example of Inline Assembler:: - * Output Variables in Inline Assembler:: - * Input Variables in Inline Assembler:: - * Inlining Inline Assembler Code:: - * Other Asm Functionality:: - * A Complete Example:: - -  - File: gnat_ug_vxw.info, Node: Basic Assembler Syntax, Next: A Simple Example of Inline Assembler, Up: Inline Assembler - - Basic Assembler Syntax - ====================== - - The assembler used by GNAT and gcc is based not on the Intel assembly - language, but rather on a language that descends from the AT&T Unix - assembler _as_ (and which is often referred to as "AT&T syntax"). The - following table summarizes the main features of _as_ syntax and points - out the differences from the Intel conventions. See the gcc _as_ and - _gas_ (an _as_ macro pre-processor) documentation for further - information. - - Register names - gcc / _as_: Prefix with "%"; for example `%eax' - Intel: No extra punctuation; for example `eax' - - Immediate operand - gcc / _as_: Prefix with "$"; for example `$4' - Intel: No extra punctuation; for example `4' - - Address - gcc / _as_: Prefix with "$"; for example `$loc' - Intel: No extra punctuation; for example `loc' - - Memory contents - gcc / _as_: No extra punctuation; for example `loc' - Intel: Square brackets; for example `[loc]' - - Register contents - gcc / _as_: Parentheses; for example `(%eax)' - Intel: Square brackets; for example `[eax]' - - Hexadecimal numbers - gcc / _as_: Leading "0x" (C language syntax); for example `0xA0' - Intel: Trailing "h"; for example `A0h' - - Operand size - gcc / _as_: Explicit in op code; for example `movw' to move a - 16-bit word - Intel: Implicit, deduced by assembler; for example `mov' - - Instruction repetition - gcc / _as_: Split into two lines; for example - `rep' - `stosl' - Intel: Keep on one line; for example `rep stosl' - - Order of operands - gcc / _as_: Source first; for example `movw $4, %eax' - Intel: Destination first; for example `mov eax, 4' - -  - File: gnat_ug_vxw.info, Node: A Simple Example of Inline Assembler, Next: Output Variables in Inline Assembler, Prev: Basic Assembler Syntax, Up: Inline Assembler - - A Simple Example of Inline Assembler - ==================================== - - The following example will generate a single assembly language - statement, `nop', which does nothing. Despite its lack of run-time - effect, the example will be useful in illustrating the basics of the - Inline Assembler facility. - - with System.Machine_Code; use System.Machine_Code; - procedure Nothing is - begin - Asm ("nop"); - end Nothing; - - `Asm' is a procedure declared in package `System.Machine_Code'; here - it takes one parameter, a _template string_ that must be a static - expression and that will form the generated instruction. `Asm' may be - regarded as a compile-time procedure that parses the template string - and additional parameters (none here), from which it generates a - sequence of assembly language instructions. - - The examples in this chapter will illustrate several of the forms - for invoking `Asm'; a complete specification of the syntax is found in - the `GNAT Reference Manual'. - - Under the standard GNAT conventions, the `Nothing' procedure should - be in a file named `nothing.adb'. You can build the executable in the - usual way: - gnatmake nothing - However, the interesting aspect of this example is not its run-time - behavior but rather the generated assembly code. To see this output, - invoke the compiler as follows: - gcc -c -S -fomit-frame-pointer -gnatp `nothing.adb' - where the options are: - - `-c' - compile only (no bind or link) - - `-S' - generate assembler listing - - `-fomit-frame-pointer' - do not set up separate stack frames - - `-gnatp' - do not add runtime checks - - This gives a human-readable assembler version of the code. The - resulting file will have the same name as the Ada source file, but with - a `.s' extension. In our example, the file `nothing.s' has the - following contents: - - .file "nothing.adb" - gcc2_compiled.: - ___gnu_compiled_ada: - .text - .align 4 - .globl __ada_nothing - __ada_nothing: - #APP - nop - #NO_APP - jmp L1 - .align 2,0x90 - L1: - ret - - The assembly code you included is clearly indicated by the compiler, - between the `#APP' and `#NO_APP' delimiters. The character before the - 'APP' and 'NOAPP' can differ on different targets. For example, Linux - uses '#APP' while on NT you will see '/APP'. - - If you make a mistake in your assembler code (such as using the - wrong size modifier, or using a wrong operand for the instruction) GNAT - will report this error in a temporary file, which will be deleted when - the compilation is finished. Generating an assembler file will help in - such cases, since you can assemble this file separately using the _as_ - assembler that comes with gcc. - - Assembling the file using the command - - as `nothing.s' - - will give you error messages whose lines correspond to the assembler - input file, so you can easily find and correct any mistakes you made. - If there are no errors, _as_ will generate an object file `nothing.out'. - -  - File: gnat_ug_vxw.info, Node: Output Variables in Inline Assembler, Next: Input Variables in Inline Assembler, Prev: A Simple Example of Inline Assembler, Up: Inline Assembler - - Output Variables in Inline Assembler - ==================================== - - The examples in this section, showing how to access the processor - flags, illustrate how to specify the destination operands for assembly - language statements. - - with Interfaces; use Interfaces; - with Ada.Text_IO; use Ada.Text_IO; - with System.Machine_Code; use System.Machine_Code; - procedure Get_Flags is - Flags : Unsigned_32; - use ASCII; - begin - Asm ("pushfl" & LF & HT & -- push flags on stack - "popl %%eax" & LF & HT & -- load eax with flags - "movl %%eax, %0", -- store flags in variable - Outputs => Unsigned_32'Asm_Output ("=g", Flags)); - Put_Line ("Flags register:" & Flags'Img); - end Get_Flags; - - In order to have a nicely aligned assembly listing, we have separated - multiple assembler statements in the Asm template string with linefeed - (ASCII.LF) and horizontal tab (ASCII.HT) characters. The resulting - section of the assembly output file is: - - #APP - pushfl - popl %eax - movl %eax, -40(%ebp) - #NO_APP - - It would have been legal to write the Asm invocation as: - - Asm ("pushfl popl %%eax movl %%eax, %0") - - but in the generated assembler file, this would come out as: - - #APP - pushfl popl %eax movl %eax, -40(%ebp) - #NO_APP - - which is not so convenient for the human reader. - - We use Ada comments at the end of each line to explain what the - assembler instructions actually do. This is a useful convention. - - When writing Inline Assembler instructions, you need to precede each - register and variable name with a percent sign. Since the assembler - already requires a percent sign at the beginning of a register name, - you need two consecutive percent signs for such names in the Asm - template string, thus `%%eax'. In the generated assembly code, one of - the percent signs will be stripped off. - - Names such as `%0', `%1', `%2', etc., denote input or output - variables: operands you later define using `Input' or `Output' - parameters to `Asm'. An output variable is illustrated in the third - statement in the Asm template string: - movl %%eax, %0 - The intent is to store the contents of the eax register in a - variable that can be accessed in Ada. Simply writing `movl %%eax, - Flags' would not necessarily work, since the compiler might optimize by - using a register to hold Flags, and the expansion of the `movl' - instruction would not be aware of this optimization. The solution is - not to store the result directly but rather to advise the compiler to - choose the correct operand form; that is the purpose of the `%0' output - variable. - - Information about the output variable is supplied in the `Outputs' - parameter to `Asm': - Outputs => Unsigned_32'Asm_Output ("=g", Flags)); - - The output is defined by the `Asm_Output' attribute of the target - type; the general format is - Type'Asm_Output (constraint_string, variable_name) - - The constraint string directs the compiler how to store/access the - associated variable. In the example - Unsigned_32'Asm_Output ("=m", Flags); - the `"m"' (memory) constraint tells the compiler that the variable - `Flags' should be stored in a memory variable, thus preventing the - optimizer from keeping it in a register. In contrast, - Unsigned_32'Asm_Output ("=r", Flags); - uses the `"r"' (register) constraint, telling the compiler to store - the variable in a register. - - If the constraint is preceded by the equal character (*=*), it tells - the compiler that the variable will be used to store data into it. - - In the `Get_Flags' example, we used the "g" (global) constraint, - allowing the optimizer to choose whatever it deems best. - - There are a fairly large number of constraints, but the ones that - are most useful (for the Intel x86 processor) are the following: - - `=' - output constraint - - `g' - global (i.e. can be stored anywhere) - - `m' - in memory - - `I' - a constant - - `a' - use eax - - `b' - use ebx - - `c' - use ecx - - `d' - use edx - - `S' - use esi - - `D' - use edi - - `r' - use one of eax, ebx, ecx or edx - - `q' - use one of eax, ebx, ecx, edx, esi or edi - - The full set of constraints is described in the gcc and _as_ - documentation; note that it is possible to combine certain constraints - in one constraint string. - - You specify the association of an output variable with an assembler - operand through the `%'_n_ notation, where _n_ is a non-negative - integer. Thus in - Asm ("pushfl" & LF & HT & -- push flags on stack - "popl %%eax" & LF & HT & -- load eax with flags - "movl %%eax, %0", -- store flags in variable - Outputs => Unsigned_32'Asm_Output ("=g", Flags)); - - `%0' will be replaced in the expanded code by the appropriate operand, - whatever the compiler decided for the `Flags' variable. - - In general, you may have any number of output variables: - * Count the operands starting at 0; thus `%0', `%1', etc. - - * Specify the `Outputs' parameter as a parenthesized comma-separated - list of `Asm_Output' attributes - - For example: - Asm ("movl %%eax, %0" & LF & HT & - "movl %%ebx, %1" & LF & HT & - "movl %%ecx, %2", - Outputs => (Unsigned_32'Asm_Output ("=g", Var_A), -- %0 = Var_A - Unsigned_32'Asm_Output ("=g", Var_B), -- %1 = Var_B - Unsigned_32'Asm_Output ("=g", Var_C))); -- %2 = Var_C - - where `Var_A', `Var_B', and `Var_C' are variables in the Ada program. - - As a variation on the `Get_Flags' example, we can use the - constraints string to direct the compiler to store the eax register - into the `Flags' variable, instead of including the store instruction - explicitly in the `Asm' template string: - - with Interfaces; use Interfaces; - with Ada.Text_IO; use Ada.Text_IO; - with System.Machine_Code; use System.Machine_Code; - procedure Get_Flags_2 is - Flags : Unsigned_32; - use ASCII; - begin - Asm ("pushfl" & LF & HT & -- push flags on stack - "popl %%eax", -- save flags in eax - Outputs => Unsigned_32'Asm_Output ("=a", Flags)); - Put_Line ("Flags register:" & Flags'Img); - end Get_Flags_2; - - The `"a"' constraint tells the compiler that the `Flags' variable will - come from the eax register. Here is the resulting code: - - #APP - pushfl - popl %eax - #NO_APP - movl %eax,-40(%ebp) - - The compiler generated the store of eax into Flags after expanding the - assembler code. - - Actually, there was no need to pop the flags into the eax register; - more simply, we could just pop the flags directly into the program - variable: - - with Interfaces; use Interfaces; - with Ada.Text_IO; use Ada.Text_IO; - with System.Machine_Code; use System.Machine_Code; - procedure Get_Flags_3 is - Flags : Unsigned_32; - use ASCII; - begin - Asm ("pushfl" & LF & HT & -- push flags on stack - "pop %0", -- save flags in Flags - Outputs => Unsigned_32'Asm_Output ("=g", Flags)); - Put_Line ("Flags register:" & Flags'Img); - end Get_Flags_3; - -  - File: gnat_ug_vxw.info, Node: Input Variables in Inline Assembler, Next: Inlining Inline Assembler Code, Prev: Output Variables in Inline Assembler, Up: Inline Assembler - - Input Variables in Inline Assembler - =================================== - - The example in this section illustrates how to specify the source - operands for assembly language statements. The program simply - increments its input value by 1: - - with Interfaces; use Interfaces; - with Ada.Text_IO; use Ada.Text_IO; - with System.Machine_Code; use System.Machine_Code; - procedure Increment is - - function Incr (Value : Unsigned_32) return Unsigned_32 is - Result : Unsigned_32; - begin - Asm ("incl %0", - Inputs => Unsigned_32'Asm_Input ("a", Value), - Outputs => Unsigned_32'Asm_Output ("=a", Result)); - return Result; - end Incr; - - Value : Unsigned_32; - - begin - Value := 5; - Put_Line ("Value before is" & Value'Img); - Value := Incr (Value); - Put_Line ("Value after is" & Value'Img); - end Increment; - - The `Outputs' parameter to `Asm' specifies that the result will be - in the eax register and that it is to be stored in the `Result' - variable. - - The `Inputs' parameter looks much like the `Outputs' parameter, but - with an `Asm_Input' attribute. The `"="' constraint, indicating an - output value, is not present. - - You can have multiple input variables, in the same way that you can - have more than one output variable. - - The parameter count (%0, %1) etc, now starts at the first input - statement, and continues with the output statements. When both - parameters use the same variable, the compiler will treat them as the - same %n operand, which is the case here. - - Just as the `Outputs' parameter causes the register to be stored - into the target variable after execution of the assembler statements, - so does the `Inputs' parameter cause its variable to be loaded into the - register before execution of the assembler statements. - - Thus the effect of the `Asm' invocation is: - 1. load the 32-bit value of `Value' into eax - - 2. execute the `incl %eax' instruction - - 3. store the contents of eax into the `Result' variable - - The resulting assembler file (with `-O2' optimization) contains: - _increment__incr.1: - subl $4,%esp - movl 8(%esp),%eax - #APP - incl %eax - #NO_APP - movl %eax,%edx - movl %ecx,(%esp) - addl $4,%esp - ret - -  - File: gnat_ug_vxw.info, Node: Inlining Inline Assembler Code, Next: Other Asm Functionality, Prev: Input Variables in Inline Assembler, Up: Inline Assembler - - Inlining Inline Assembler Code - ============================== - - For a short subprogram such as the `Incr' function in the previous - section, the overhead of the call and return (creating / deleting the - stack frame) can be significant, compared to the amount of code in the - subprogram body. A solution is to apply Ada's `Inline' pragma to the - subprogram, which directs the compiler to expand invocations of the - subprogram at the point(s) of call, instead of setting up a stack frame - for out-of-line calls. Here is the resulting program: - - with Interfaces; use Interfaces; - with Ada.Text_IO; use Ada.Text_IO; - with System.Machine_Code; use System.Machine_Code; - procedure Increment_2 is - - function Incr (Value : Unsigned_32) return Unsigned_32 is - Result : Unsigned_32; - begin - Asm ("incl %0", - Inputs => Unsigned_32'Asm_Input ("a", Value), - Outputs => Unsigned_32'Asm_Output ("=a", Result)); - return Result; - end Incr; - pragma Inline (Increment); - - Value : Unsigned_32; - - begin - Value := 5; - Put_Line ("Value before is" & Value'Img); - Value := Increment (Value); - Put_Line ("Value after is" & Value'Img); - end Increment_2; - - Compile the program with both optimization (`-O2') and inlining - enabled (`-gnatpn' instead of `-gnatp'). - - The `Incr' function is still compiled as usual, but at the point in - `Increment' where our function used to be called: - - pushl %edi - call _increment__incr.1 - - the code for the function body directly appears: - - movl %esi,%eax - #APP - incl %eax - #NO_APP - movl %eax,%edx - - thus saving the overhead of stack frame setup and an out-of-line call. - -  - File: gnat_ug_vxw.info, Node: Other Asm Functionality, Next: A Complete Example, Prev: Inlining Inline Assembler Code, Up: Inline Assembler - - Other `Asm' Functionality - ========================= - - This section describes two important parameters to the `Asm' procedure: - `Clobber', which identifies register usage; and `Volatile', which - inhibits unwanted optimizations. - - * Menu: - - * The Clobber Parameter:: - * The Volatile Parameter:: - -  - File: gnat_ug_vxw.info, Node: The Clobber Parameter, Next: The Volatile Parameter, Up: Other Asm Functionality - - The `Clobber' Parameter - ----------------------- - - One of the dangers of intermixing assembly language and a compiled - language such as Ada is that the compiler needs to be aware of which - registers are being used by the assembly code. In some cases, such as - the earlier examples, the constraint string is sufficient to indicate - register usage (e.g. "a" for the eax register). But more generally, the - compiler needs an explicit identification of the registers that are - used by the Inline Assembly statements. - - Using a register that the compiler doesn't know about could be a - side effect of an instruction (like `mull' storing its result in both - eax and edx). It can also arise from explicit register usage in your - assembly code; for example: - Asm ("movl %0, %%ebx" & LF & HT & - "movl %%ebx, %1", - Inputs => Unsigned_32'Asm_Input ("g", Var_In), - Outputs => Unsigned_32'Asm_Output ("=g", Var_Out)); - - where the compiler (since it does not analyze the `Asm' template string) - does not know you are using the ebx register. - - In such cases you need to supply the `Clobber' parameter to `Asm', - to identify the registers that will be used by your assembly code: - - Asm ("movl %0, %%ebx" & LF & HT & - "movl %%ebx, %1", - Inputs => Unsigned_32'Asm_Input ("g", Var_In), - Outputs => Unsigned_32'Asm_Output ("=g", Var_Out), - Clobber => "ebx"); - - The Clobber parameter is a static string expression specifying the - register(s) you are using. Note that register names are _not_ prefixed - by a percent sign. Also, if more than one register is used then their - names are separated by commas; e.g., `"eax, ebx"' - - The `Clobber' parameter has several additional uses: - 1. Use the "register" name `cc' to indicate that flags might have - changed - - 2. Use the "register" name `memory' if you changed a memory location - -  - File: gnat_ug_vxw.info, Node: The Volatile Parameter, Prev: The Clobber Parameter, Up: Other Asm Functionality - - The `Volatile' Parameter - ------------------------ - - Compiler optimizations in the presence of Inline Assembler may - sometimes have unwanted effects. For example, when an `Asm' invocation - with an input variable is inside a loop, the compiler might move the - loading of the input variable outside the loop, regarding it as a - one-time initialization. - - If this effect is not desired, you can disable such optimizations by - setting the `Volatile' parameter to `True'; for example: - - Asm ("movl %0, %%ebx" & LF & HT & - "movl %%ebx, %1", - Inputs => Unsigned_32'Asm_Input ("g", Var_In), - Outputs => Unsigned_32'Asm_Output ("=g", Var_Out), - Clobber => "ebx", - Volatile => True); - - By default, `Volatile' is set to `False' unless there is no `Outputs' - parameter. - - Although setting `Volatile' to `True' prevents unwanted - optimizations, it will also disable other optimizations that might be - important for efficiency. In general, you should set `Volatile' to - `True' only if the compiler's optimizations have created problems. - -  - File: gnat_ug_vxw.info, Node: A Complete Example, Prev: Other Asm Functionality, Up: Inline Assembler - - A Complete Example - ================== - - This section contains a complete program illustrating a realistic usage - of GNAT's Inline Assembler capabilities. It comprises a main procedure - `Check_CPU' and a package `Intel_CPU'. The package declares a - collection of functions that detect the properties of the 32-bit x86 - processor that is running the program. The main procedure invokes - these functions and displays the information. - - The Intel_CPU package could be enhanced by adding functions to - detect the type of x386 co-processor, the processor caching options and - special operations such as the SIMD extensions. - - Although the Intel_CPU package has been written for 32-bit Intel - compatible CPUs, it is OS neutral. It has been tested on DOS, - Windows/NT and Linux. - - * Menu: - - * Check_CPU Procedure:: - * Intel_CPU Package Specification:: - * Intel_CPU Package Body:: - -  - File: gnat_ug_vxw.info, Node: Check_CPU Procedure, Next: Intel_CPU Package Specification, Up: A Complete Example - - `Check_CPU' Procedure - --------------------- - - --------------------------------------------------------------------- - -- -- - -- Uses the Intel_CPU package to identify the CPU the program is -- - -- running on, and some of the features it supports. -- - -- -- - --------------------------------------------------------------------- - - with Intel_CPU; -- Intel CPU detection functions - with Ada.Text_IO; -- Standard text I/O - with Ada.Command_Line; -- To set the exit status - - procedure Check_CPU is - - Type_Found : Boolean := False; - -- Flag to indicate that processor was identified - - Features : Intel_CPU.Processor_Features; - -- The processor features - - Signature : Intel_CPU.Processor_Signature; - -- The processor type signature - - begin - - ----------------------------------- - -- Display the program banner. -- - ----------------------------------- - - Ada.Text_IO.Put_Line (Ada.Command_Line.Command_Name & - ": check Intel CPU version and features, v1.0"); - Ada.Text_IO.Put_Line ("distribute freely, but no warranty whatsoever"); - Ada.Text_IO.New_Line; - - ----------------------------------------------------------------------- - -- We can safely start with the assumption that we are on at least -- - -- a x386 processor. If the CPUID instruction is present, then we -- - -- have a later processor type. -- - ----------------------------------------------------------------------- - - if Intel_CPU.Has_CPUID = False then - - -- No CPUID instruction, so we assume this is indeed a x386 - -- processor. We can still check if it has a FP co-processor. - if Intel_CPU.Has_FPU then - Ada.Text_IO.Put_Line - ("x386-type processor with a FP co-processor"); - else - Ada.Text_IO.Put_Line - ("x386-type processor without a FP co-processor"); - end if; -- check for FPU - - -- Program done - Ada.Command_Line.Set_Exit_Status (Ada.Command_Line.Success); - return; - - end if; -- check for CPUID - - ----------------------------------------------------------------------- - -- If CPUID is supported, check if this is a true Intel processor, -- - -- if it is not, display a warning. -- - ----------------------------------------------------------------------- - - if Intel_CPU.Vendor_ID /= Intel_CPU.Intel_Processor then - Ada.Text_IO.Put_Line ("*** This is a Intel compatible processor"); - Ada.Text_IO.Put_Line ("*** Some information may be incorrect"); - end if; -- check if Intel - - ---------------------------------------------------------------------- - -- With the CPUID instruction present, we can assume at least a -- - -- x486 processor. If the CPUID support level is < 1 then we have -- - -- to leave it at that. -- - ---------------------------------------------------------------------- - - if Intel_CPU.CPUID_Level < 1 then - - -- Ok, this is a x486 processor. we still can get the Vendor ID - Ada.Text_IO.Put_Line ("x486-type processor"); - Ada.Text_IO.Put_Line ("Vendor ID is " & Intel_CPU.Vendor_ID); - - -- We can also check if there is a FPU present - if Intel_CPU.Has_FPU then - Ada.Text_IO.Put_Line ("Floating-Point support"); - else - Ada.Text_IO.Put_Line ("No Floating-Point support"); - end if; -- check for FPU - - -- Program done - Ada.Command_Line.Set_Exit_Status (Ada.Command_Line.Success); - return; - - end if; -- check CPUID level - - --------------------------------------------------------------------- - -- With a CPUID level of 1 we can use the processor signature to -- - -- determine it's exact type. -- - --------------------------------------------------------------------- - - Signature := Intel_CPU.Signature; - - ---------------------------------------------------------------------- - -- Ok, now we go into a lot of messy comparisons to get the -- - -- processor type. For clarity, no attememt to try to optimize the -- - -- comparisons has been made. Note that since Intel_CPU does not -- - -- support getting cache info, we cannot distinguish between P5 -- - -- and Celeron types yet. -- - ---------------------------------------------------------------------- - - -- x486SL - if Signature.Processor_Type = 2#00# and - Signature.Family = 2#0100# and - Signature.Model = 2#0100# then - Type_Found := True; - Ada.Text_IO.Put_Line ("x486SL processor"); - end if; - - -- x486DX2 Write-Back - if Signature.Processor_Type = 2#00# and - Signature.Family = 2#0100# and - Signature.Model = 2#0111# then - Type_Found := True; - Ada.Text_IO.Put_Line ("Write-Back Enhanced x486DX2 processor"); - end if; - - -- x486DX4 - if Signature.Processor_Type = 2#00# and - Signature.Family = 2#0100# and - Signature.Model = 2#1000# then - Type_Found := True; - Ada.Text_IO.Put_Line ("x486DX4 processor"); - end if; - - -- x486DX4 Overdrive - if Signature.Processor_Type = 2#01# and - Signature.Family = 2#0100# and - Signature.Model = 2#1000# then - Type_Found := True; - Ada.Text_IO.Put_Line ("x486DX4 OverDrive processor"); - end if; - - -- Pentium (60, 66) - if Signature.Processor_Type = 2#00# and - Signature.Family = 2#0101# and - Signature.Model = 2#0001# then - Type_Found := True; - Ada.Text_IO.Put_Line ("Pentium processor (60, 66)"); - end if; - - -- Pentium (75, 90, 100, 120, 133, 150, 166, 200) - if Signature.Processor_Type = 2#00# and - Signature.Family = 2#0101# and - Signature.Model = 2#0010# then - Type_Found := True; - Ada.Text_IO.Put_Line - ("Pentium processor (75, 90, 100, 120, 133, 150, 166, 200)"); - end if; - - -- Pentium OverDrive (60, 66) - if Signature.Processor_Type = 2#01# and - Signature.Family = 2#0101# and - Signature.Model = 2#0001# then - Type_Found := True; - Ada.Text_IO.Put_Line ("Pentium OverDrive processor (60, 66)"); - end if; - - -- Pentium OverDrive (75, 90, 100, 120, 133, 150, 166, 200) - if Signature.Processor_Type = 2#01# and - Signature.Family = 2#0101# and - Signature.Model = 2#0010# then - Type_Found := True; - Ada.Text_IO.Put_Line - ("Pentium OverDrive cpu (75, 90, 100, 120, 133, 150, 166, 200)"); - end if; - - -- Pentium OverDrive processor for x486 processor-based systems - if Signature.Processor_Type = 2#01# and - Signature.Family = 2#0101# and - Signature.Model = 2#0011# then - Type_Found := True; - Ada.Text_IO.Put_Line - ("Pentium OverDrive processor for x486 processor-based systems"); - end if; - - -- Pentium processor with MMX technology (166, 200) - if Signature.Processor_Type = 2#00# and - Signature.Family = 2#0101# and - Signature.Model = 2#0100# then - Type_Found := True; - Ada.Text_IO.Put_Line - ("Pentium processor with MMX technology (166, 200)"); - end if; - - -- Pentium OverDrive with MMX for Pentium (75, 90, 100, 120, 133) - if Signature.Processor_Type = 2#01# and - Signature.Family = 2#0101# and - Signature.Model = 2#0100# then - Type_Found := True; - Ada.Text_IO.Put_Line - ("Pentium OverDrive processor with MMX " & - "technology for Pentium processor (75, 90, 100, 120, 133)"); - end if; - - -- Pentium Pro processor - if Signature.Processor_Type = 2#00# and - Signature.Family = 2#0110# and - Signature.Model = 2#0001# then - Type_Found := True; - Ada.Text_IO.Put_Line ("Pentium Pro processor"); - end if; - - -- Pentium II processor, model 3 - if Signature.Processor_Type = 2#00# and - Signature.Family = 2#0110# and - Signature.Model = 2#0011# then - Type_Found := True; - Ada.Text_IO.Put_Line ("Pentium II processor, model 3"); - end if; - - -- Pentium II processor, model 5 or Celeron processor - if Signature.Processor_Type = 2#00# and - Signature.Family = 2#0110# and - Signature.Model = 2#0101# then - Type_Found := True; - Ada.Text_IO.Put_Line - ("Pentium II processor, model 5 or Celeron processor"); - end if; - - -- Pentium Pro OverDrive processor - if Signature.Processor_Type = 2#01# and - Signature.Family = 2#0110# and - Signature.Model = 2#0011# then - Type_Found := True; - Ada.Text_IO.Put_Line ("Pentium Pro OverDrive processor"); - end if; - - -- If no type recognized, we have an unknown. Display what - -- we _do_ know - if Type_Found = False then - Ada.Text_IO.Put_Line ("Unknown processor"); - end if; - - ----------------------------------------- - -- Display processor stepping level. -- - ----------------------------------------- - - Ada.Text_IO.Put_Line ("Stepping level:" & Signature.Stepping'Img); - - --------------------------------- - -- Display vendor ID string. -- - --------------------------------- - - Ada.Text_IO.Put_Line ("Vendor ID: " & Intel_CPU.Vendor_ID); - - ------------------------------------ - -- Get the processors features. -- - ------------------------------------ - - Features := Intel_CPU.Features; - - ----------------------------- - -- Check for a FPU unit. -- - ----------------------------- - - if Features.FPU = True then - Ada.Text_IO.Put_Line ("Floating-Point unit available"); - else - Ada.Text_IO.Put_Line ("no Floating-Point unit"); - end if; -- check for FPU - - -------------------------------- - -- List processor features. -- - -------------------------------- - - Ada.Text_IO.Put_Line ("Supported features: "); - - -- Virtual Mode Extension - if Features.VME = True then - Ada.Text_IO.Put_Line (" VME - Virtual Mode Extension"); - end if; - - -- Debugging Extension - if Features.DE = True then - Ada.Text_IO.Put_Line (" DE - Debugging Extension"); - end if; - - -- Page Size Extension - if Features.PSE = True then - Ada.Text_IO.Put_Line (" PSE - Page Size Extension"); - end if; - - -- Time Stamp Counter - if Features.TSC = True then - Ada.Text_IO.Put_Line (" TSC - Time Stamp Counter"); - end if; - - -- Model Specific Registers - if Features.MSR = True then - Ada.Text_IO.Put_Line (" MSR - Model Specific Registers"); - end if; - - -- Physical Address Extension - if Features.PAE = True then - Ada.Text_IO.Put_Line (" PAE - Physical Address Extension"); - end if; - - -- Machine Check Extension - if Features.MCE = True then - Ada.Text_IO.Put_Line (" MCE - Machine Check Extension"); - end if; - - -- CMPXCHG8 instruction supported - if Features.CX8 = True then - Ada.Text_IO.Put_Line (" CX8 - CMPXCHG8 instruction"); - end if; - - -- on-chip APIC hardware support - if Features.APIC = True then - Ada.Text_IO.Put_Line (" APIC - on-chip APIC hardware support"); - end if; - - -- Fast System Call - if Features.SEP = True then - Ada.Text_IO.Put_Line (" SEP - Fast System Call"); - end if; - - -- Memory Type Range Registers - if Features.MTRR = True then - Ada.Text_IO.Put_Line (" MTTR - Memory Type Range Registers"); - end if; - - -- Page Global Enable - if Features.PGE = True then - Ada.Text_IO.Put_Line (" PGE - Page Global Enable"); - end if; - - -- Machine Check Architecture - if Features.MCA = True then - Ada.Text_IO.Put_Line (" MCA - Machine Check Architecture"); - end if; - - -- Conditional Move Instruction Supported - if Features.CMOV = True then - Ada.Text_IO.Put_Line - (" CMOV - Conditional Move Instruction Supported"); - end if; - - -- Page Attribute Table - if Features.PAT = True then - Ada.Text_IO.Put_Line (" PAT - Page Attribute Table"); - end if; - - -- 36-bit Page Size Extension - if Features.PSE_36 = True then - Ada.Text_IO.Put_Line (" PSE_36 - 36-bit Page Size Extension"); - end if; - - -- MMX technology supported - if Features.MMX = True then - Ada.Text_IO.Put_Line (" MMX - MMX technology supported"); - end if; - - -- Fast FP Save and Restore - if Features.FXSR = True then - Ada.Text_IO.Put_Line (" FXSR - Fast FP Save and Restore"); - end if; - - --------------------- - -- Program done. -- - --------------------- - - Ada.Command_Line.Set_Exit_Status (Ada.Command_Line.Success); - - exception - - when others => - Ada.Command_Line.Set_Exit_Status (Ada.Command_Line.Failure); - raise; - - end Check_CPU; - -  - File: gnat_ug_vxw.info, Node: Intel_CPU Package Specification, Next: Intel_CPU Package Body, Prev: Check_CPU Procedure, Up: A Complete Example - - `Intel_CPU' Package Specification - --------------------------------- - - ------------------------------------------------------------------------- - -- -- - -- file: intel_cpu.ads -- - -- -- - -- ********************************************* -- - -- * WARNING: for 32-bit Intel processors only * -- - -- ********************************************* -- - -- -- - -- This package contains a number of subprograms that are useful in -- - -- determining the Intel x86 CPU (and the features it supports) on -- - -- which the program is running. -- - -- -- - -- The package is based upon the information given in the Intel -- - -- Application Note AP-485: "Intel Processor Identification and the -- - -- CPUID Instruction" as of April 1998. This application note can be -- - -- found on www.intel.com. -- - -- -- - -- It currently deals with 32-bit processors only, will not detect -- - -- features added after april 1998, and does not guarantee proper -- - -- results on Intel-compatible processors. -- - -- -- - -- Cache info and x386 fpu type detection are not supported. -- - -- -- - -- This package does not use any privileged instructions, so should -- - -- work on any OS running on a 32-bit Intel processor. -- - -- -- - ------------------------------------------------------------------------- - - with Interfaces; use Interfaces; - -- for using unsigned types - - with System.Machine_Code; use System.Machine_Code; - -- for using inline assembler code - - with Ada.Characters.Latin_1; use Ada.Characters.Latin_1; - -- for inserting control characters - - package Intel_CPU is - - ---------------------- - -- Processor bits -- - ---------------------- - - subtype Num_Bits is Natural range 0 .. 31; - -- the number of processor bits (32) - - -------------------------- - -- Processor register -- - -------------------------- - - -- define a processor register type for easy access to - -- the individual bits - - type Processor_Register is array (Num_Bits) of Boolean; - pragma Pack (Processor_Register); - for Processor_Register'Size use 32; - - ------------------------- - -- Unsigned register -- - ------------------------- - - -- define a processor register type for easy access to - -- the individual bytes - - type Unsigned_Register is - record - L1 : Unsigned_8; - H1 : Unsigned_8; - L2 : Unsigned_8; - H2 : Unsigned_8; - end record; - - for Unsigned_Register use - record - L1 at 0 range 0 .. 7; - H1 at 0 range 8 .. 15; - L2 at 0 range 16 .. 23; - H2 at 0 range 24 .. 31; - end record; - - for Unsigned_Register'Size use 32; - - --------------------------------- - -- Intel processor vendor ID -- - --------------------------------- - - Intel_Processor : constant String (1 .. 12) := "GenuineIntel"; - -- indicates an Intel manufactured processor - - ------------------------------------ - -- Processor signature register -- - ------------------------------------ - - -- a register type to hold the processor signature - - type Processor_Signature is - record - Stepping : Natural range 0 .. 15; - Model : Natural range 0 .. 15; - Family : Natural range 0 .. 15; - Processor_Type : Natural range 0 .. 3; - Reserved : Natural range 0 .. 262143; - end record; - - for Processor_Signature use - record - Stepping at 0 range 0 .. 3; - Model at 0 range 4 .. 7; - Family at 0 range 8 .. 11; - Processor_Type at 0 range 12 .. 13; - Reserved at 0 range 14 .. 31; - end record; - - for Processor_Signature'Size use 32; - - ----------------------------------- - -- Processor features register -- - ----------------------------------- - - -- a processor register to hold the processor feature flags - - type Processor_Features is - record - FPU : Boolean; -- floating point unit on chip - VME : Boolean; -- virtual mode extension - DE : Boolean; -- debugging extension - PSE : Boolean; -- page size extension - TSC : Boolean; -- time stamp counter - MSR : Boolean; -- model specific registers - PAE : Boolean; -- physical address extension - MCE : Boolean; -- machine check extension - CX8 : Boolean; -- cmpxchg8 instruction - APIC : Boolean; -- on-chip apic hardware - Res_1 : Boolean; -- reserved for extensions - SEP : Boolean; -- fast system call - MTRR : Boolean; -- memory type range registers - PGE : Boolean; -- page global enable - MCA : Boolean; -- machine check architecture - CMOV : Boolean; -- conditional move supported - PAT : Boolean; -- page attribute table - PSE_36 : Boolean; -- 36-bit page size extension - Res_2 : Natural range 0 .. 31; -- reserved for extensions - MMX : Boolean; -- MMX technology supported - FXSR : Boolean; -- fast FP save and restore - Res_3 : Natural range 0 .. 127; -- reserved for extensions - end record; - - for Processor_Features use - record - FPU at 0 range 0 .. 0; - VME at 0 range 1 .. 1; - DE at 0 range 2 .. 2; - PSE at 0 range 3 .. 3; - TSC at 0 range 4 .. 4; - MSR at 0 range 5 .. 5; - PAE at 0 range 6 .. 6; - MCE at 0 range 7 .. 7; - CX8 at 0 range 8 .. 8; - APIC at 0 range 9 .. 9; - Res_1 at 0 range 10 .. 10; - SEP at 0 range 11 .. 11; - MTRR at 0 range 12 .. 12; - PGE at 0 range 13 .. 13; - MCA at 0 range 14 .. 14; - CMOV at 0 range 15 .. 15; - PAT at 0 range 16 .. 16; - PSE_36 at 0 range 17 .. 17; - Res_2 at 0 range 18 .. 22; - MMX at 0 range 23 .. 23; - FXSR at 0 range 24 .. 24; - Res_3 at 0 range 25 .. 31; - end record; - - for Processor_Features'Size use 32; - - ------------------- - -- Subprograms -- - ------------------- - - function Has_FPU return Boolean; - -- return True if a FPU is found - -- use only if CPUID is not supported - - function Has_CPUID return Boolean; - -- return True if the processor supports the CPUID instruction - - function CPUID_Level return Natural; - -- return the CPUID support level (0, 1 or 2) - -- can only be called if the CPUID instruction is supported - - function Vendor_ID return String; - -- return the processor vendor identification string - -- can only be called if the CPUID instruction is supported - - function Signature return Processor_Signature; - -- return the processor signature - -- can only be called if the CPUID instruction is supported - - function Features return Processor_Features; - -- return the processors features - -- can only be called if the CPUID instruction is supported - - private - - ------------------------ - -- EFLAGS bit names -- - ------------------------ - - ID_Flag : constant Num_Bits := 21; - -- ID flag bit - - end Intel_CPU; - -  - File: gnat_ug_vxw.info, Node: Intel_CPU Package Body, Prev: Intel_CPU Package Specification, Up: A Complete Example - - `Intel_CPU' Package Body - ------------------------ - - package body Intel_CPU is - - --------------------------- - -- Detect FPU presence -- - --------------------------- - - -- There is a FPU present if we can set values to the FPU Status - -- and Control Words. - - function Has_FPU return Boolean is - - Register : Unsigned_16; - -- processor register to store a word - - begin - - -- check if we can change the status word - Asm ( - - -- the assembler code - "finit" & LF & HT & -- reset status word - "movw $0x5A5A, %%ax" & LF & HT & -- set value status word - "fnstsw %0" & LF & HT & -- save status word - "movw %%ax, %0", -- store status word - - -- output stored in Register - -- register must be a memory location - Outputs => Unsigned_16'Asm_output ("=m", Register), - - -- tell compiler that we used eax - Clobber => "eax"); - - -- if the status word is zero, there is no FPU - if Register = 0 then - return False; -- no status word - end if; -- check status word value - - -- check if we can get the control word - Asm ( - - -- the assembler code - "fnstcw %0", -- save the control word - - -- output into Register - -- register must be a memory location - Outputs => Unsigned_16'Asm_output ("=m", Register)); - - -- check the relevant bits - if (Register and 16#103F#) /= 16#003F# then - return False; -- no control word - end if; -- check control word value - - -- FPU found - return True; - - end Has_FPU; - - -------------------------------- - -- Detect CPUID instruction -- - -------------------------------- - - -- The processor supports the CPUID instruction if it is possible - -- to change the value of ID flag bit in the EFLAGS register. - - function Has_CPUID return Boolean is - - Original_Flags, Modified_Flags : Processor_Register; - -- EFLAG contents before and after changing the ID flag - - begin - - -- try flipping the ID flag in the EFLAGS register - Asm ( - - -- the assembler code - "pushfl" & LF & HT & -- push EFLAGS on stack - "pop %%eax" & LF & HT & -- pop EFLAGS into eax - "movl %%eax, %0" & LF & HT & -- save EFLAGS content - "xor $0x200000, %%eax" & LF & HT & -- flip ID flag - "push %%eax" & LF & HT & -- push EFLAGS on stack - "popfl" & LF & HT & -- load EFLAGS register - "pushfl" & LF & HT & -- push EFLAGS on stack - "pop %1", -- save EFLAGS content - - -- output values, may be anything - -- Original_Flags is %0 - -- Modified_Flags is %1 - Outputs => - (Processor_Register'Asm_output ("=g", Original_Flags), - Processor_Register'Asm_output ("=g", Modified_Flags)), - - -- tell compiler eax is destroyed - Clobber => "eax"); - - -- check if CPUID is supported - if Original_Flags(ID_Flag) /= Modified_Flags(ID_Flag) then - return True; -- ID flag was modified - else - return False; -- ID flag unchanged - end if; -- check for CPUID - - end Has_CPUID; - - ------------------------------- - -- Get CPUID support level -- - ------------------------------- - - function CPUID_Level return Natural is - - Level : Unsigned_32; - -- returned support level - - begin - - -- execute CPUID, storing the results in the Level register - Asm ( - - -- the assembler code - "cpuid", -- execute CPUID - - -- zero is stored in eax - -- returning the support level in eax - Inputs => Unsigned_32'Asm_input ("a", 0), - - -- eax is stored in Level - Outputs => Unsigned_32'Asm_output ("=a", Level), - - -- tell compiler ebx, ecx and edx registers are destroyed - Clobber => "ebx, ecx, edx"); - - -- return the support level - return Natural (Level); - - end CPUID_Level; - - -------------------------------- - -- Get CPU Vendor ID String -- - -------------------------------- - - -- The vendor ID string is returned in the ebx, ecx and edx register - -- after executing the CPUID instruction with eax set to zero. - -- In case of a true Intel processor the string returned is - -- "GenuineIntel" - - function Vendor_ID return String is - - Ebx, Ecx, Edx : Unsigned_Register; - -- registers containing the vendor ID string - - Vendor_ID : String (1 .. 12); - -- the vendor ID string - - begin - - -- execute CPUID, storing the results in the processor registers - Asm ( - - -- the assembler code - "cpuid", -- execute CPUID - - -- zero stored in eax - -- vendor ID string returned in ebx, ecx and edx - Inputs => Unsigned_32'Asm_input ("a", 0), - - -- ebx is stored in Ebx - -- ecx is stored in Ecx - -- edx is stored in Edx - Outputs => (Unsigned_Register'Asm_output ("=b", Ebx), - Unsigned_Register'Asm_output ("=c", Ecx), - Unsigned_Register'Asm_output ("=d", Edx))); - - -- now build the vendor ID string - Vendor_ID( 1) := Character'Val (Ebx.L1); - Vendor_ID( 2) := Character'Val (Ebx.H1); - Vendor_ID( 3) := Character'Val (Ebx.L2); - Vendor_ID( 4) := Character'Val (Ebx.H2); - Vendor_ID( 5) := Character'Val (Edx.L1); - Vendor_ID( 6) := Character'Val (Edx.H1); - Vendor_ID( 7) := Character'Val (Edx.L2); - Vendor_ID( 8) := Character'Val (Edx.H2); - Vendor_ID( 9) := Character'Val (Ecx.L1); - Vendor_ID(10) := Character'Val (Ecx.H1); - Vendor_ID(11) := Character'Val (Ecx.L2); - Vendor_ID(12) := Character'Val (Ecx.H2); - - -- return string - return Vendor_ID; - - end Vendor_ID; - - ------------------------------- - -- Get processor signature -- - ------------------------------- - - function Signature return Processor_Signature is - - Result : Processor_Signature; - -- processor signature returned - - begin - - -- execute CPUID, storing the results in the Result variable - Asm ( - - -- the assembler code - "cpuid", -- execute CPUID - - -- one is stored in eax - -- processor signature returned in eax - Inputs => Unsigned_32'Asm_input ("a", 1), - - -- eax is stored in Result - Outputs => Processor_Signature'Asm_output ("=a", Result), - - -- tell compiler that ebx, ecx and edx are also destroyed - Clobber => "ebx, ecx, edx"); - - -- return processor signature - return Result; - - end Signature; - - ------------------------------ - -- Get processor features -- - ------------------------------ - - function Features return Processor_Features is - - Result : Processor_Features; - -- processor features returned - - begin - - -- execute CPUID, storing the results in the Result variable - Asm ( - - -- the assembler code - "cpuid", -- execute CPUID - - -- one stored in eax - -- processor features returned in edx - Inputs => Unsigned_32'Asm_input ("a", 1), - - -- edx is stored in Result - Outputs => Processor_Features'Asm_output ("=d", Result), - - -- tell compiler that ebx and ecx are also destroyed - Clobber => "ebx, ecx"); - - -- return processor signature - return Result; - - end Features; - - end Intel_CPU; - -  - File: gnat_ug_vxw.info, Node: VxWorks Topics, Next: LynxOS Topics, Prev: Inline Assembler, Up: Top - - VxWorks Topics - ************** - - This chapter describes topics that are specific to the GNAT for VxWorks - configurations. - - * Menu: - - * Kernel Configuration for VxWorks:: - * Kernel Compilation Issues for VxWorks:: - * Handling Relocation Issues for PowerPc Targets:: - * Support for Software Floating Point on PowerPC Processors:: - * Interrupt Handling for VxWorks:: - * Simulating Command Line Arguments for VxWorks:: - * Debugging Issues for VxWorks:: - * Using GNAT from the Tornado 2 Project Facility:: - * Frequently Asked Questions for VxWorks:: - -  - File: gnat_ug_vxw.info, Node: Kernel Configuration for VxWorks, Next: Kernel Compilation Issues for VxWorks, Up: VxWorks Topics - - Kernel Configuration for VxWorks - ================================ - - When configuring your VxWorks kernel we recommend including the target - shell. If you omit it from the configuration, you may get undefined - symbols at load time, e.g. - - -> ld < hello.exe - Loading hello.exe - Undefined symbols: - mkdir - - Generally, such undefined symbols are harmless since these are used by - optional parts of the GNAT run time. However if running your application - generates a VxWorks exception or illegal instruction, you should - reconfigure your kernel to resolve these symbols. - -  - File: gnat_ug_vxw.info, Node: Kernel Compilation Issues for VxWorks, Next: Handling Relocation Issues for PowerPc Targets, Prev: Kernel Configuration for VxWorks, Up: VxWorks Topics - - Kernel Compilation Issues for VxWorks - ===================================== - - If you plan to link an Ada module with a Tornado 2 Kernel, follow these - steps. (Note that these recommendations apply to `cygnus-2.7.2-960126', - shipped with Tornado 2 as the C compiler toolchain.) - - * Compile your Ada module without linking it with the VxWorks - Library: - gnatmake foo.adb -largs -nostdlib - - * Edit your makefile and add on the `LIBS' line the exact path and - name of the GCC library file provided with GNAT. - LIBS = $(WIND_BASE)/target/lib/libPPC604gnuvx.a \ - /opt/gnu/gnat/lib/gcc-lib/powerpc-wrs-vxworks/2.8.1/libgcc.a - - To know the exact name and location of this file, type `-gcc - -print-libgcc-file-name' in a console. Note that this version of - GCC is the one provided with GNAT. - ~ >powerpc-wrs-vxworks-gcc -print-libgcc-file-name - /opt/gnu/gnat/lib/gcc-lib/powerpc-wrs-vxworks/2.8.1/libgcc.a - -  - File: gnat_ug_vxw.info, Node: Handling Relocation Issues for PowerPc Targets, Next: Support for Software Floating Point on PowerPC Processors, Prev: Kernel Compilation Issues for VxWorks, Up: VxWorks Topics - - Handling Relocation Issues for PowerPc Targets - ============================================== - - Under certain circumstances, loading a program onto a PowerPC board - will fail with the message _Relocation value does not fit in 24 bits_. - - For some background on this issue, please refer to WRS' SPRs 6040, - 20257, and 22767. In summary, VxWorks on the PowerPC follows the - variation of the SVR4 ABI known as the Embedded ABI (_EABI_). In order - to save space and time in embedded applications, the EABI specifies - that the default for subprogram calls should be the branch instruction - with relative addressing using an immediate operand. The immediate - operand to this instruction (relative address) is 24 bits wide. It is - sign extended and 2#00# is appended for the last 2 bits (all - instructions must be on a 4 byte boundary). The resulting 26 bit - offset means that the target of the branch must be within +/- 32 Mbytes - of the relative branch instruction. When VxWorks is loading a program - it completes the linking phase by resolving all of the unresolved - references in the object being loaded. When one of those references is - a relative address in a branch instruction, and the linker determines - that the target is more than 32 Mbytes away from the branch, the error - occurs. - - This only happens when the BSP is configured to use more than 32 - MBytes of memory. The VxWorks kernel is loaded into low memory - addresses, and the error usually occurs when the target loader is used - (because it loads objects into high memory, and thus calls from the - program to the VxWorks kernel can be too far). - - One way to solve this problem is to use the Tornado host loader; - this will place programs in low memory, close to the kernel. - - Another approach is to make use of the `-mlongcall' option to the - compiler; GNAT has incorporated WRS' gcc modification that implements - this option. If a subprogram call is compiled with the `-mlongcall' - option, then the generated code constructs an absolute address in a - register and uses a branch instruction with absolute addressing mode. - - Starting with release 3.15, the GNAT runtime libraries that are - distributed are compiled with the `-mlongcall' option. In many cases - the use of these libraries is sufficient to avoid the relocation - problem, since it is the runtime library that contains calls to the - VxWorks kernel that need to span the address space gap. If you are - using an earlier GNAT release or a manually-built runtime, you should - recompile the GNAT runtime library with `-mlongcall'; you can use the - `Makefile.adalib' file from the `adalib' directory. - - Application code may need to be compiled with `-mlongcall' if there - are calls directly to the kernel, the application is very large, or in - some specialized linking/loading scenarios. - - You can compile individual files with `-mlongcall' by placing this - option on the `gcc' command line (for brevity we are omitting the - `powerpc-wrs-vxworks-' prefix on the commands shown in this paragraph). - If you provide `-mlongcall' as an option for `gnatmake', it will be - passed to all invocations of `gcc' that `gnatmake' directly performs. - Note that one other compilation is made by `gnatlink', on the file - created by `gnatbind' for the elaboration package body (see *Note - Binding Using gnatbind::). Passing `-mlongcall' to `gnatlink', either - directly on the `gnatlink' command line or by including `-mlongcall' in - the `-largs' list of `gnatmake', will direct `gnatlink' to compile the - binder file with the `-mlongcall' option. - - To see the effect of `-mlongcall', consider the following small - example: - - procedure Proc is - procedure Imported_Proc; - pragma Import (Ada, Imported_Proc); - begin - Imported_Proc; - end; - - If you compile `Proc' with the default options (no `-mlongcall'), the - following code is generated: - - _ada_proc: - ... - bl imported_proc - ... - - In contrast, here is the result with the `-mlongcall' option: - - _ada_proc: - ... - addis 9,0,imported_proc@ha - addi 0,9,imported_proc@l - mtlr 0 - blrl - ... - -  - File: gnat_ug_vxw.info, Node: Support for Software Floating Point on PowerPC Processors, Next: Interrupt Handling for VxWorks, Prev: Handling Relocation Issues for PowerPc Targets, Up: VxWorks Topics - - Support for Software Floating Point on PowerPC Processors - ========================================================= - - The PowerPC 860 processor does not have hardware floating-point support. - In order to build and run GNAT modules properly, you need to install and - invoke software-emulated floating-point support as follows: - - * At installation time: - * Create a file `ada_object_path' under the directory - `BASE\lib\gcc-lib\powerpc-wrs-vxworks\2.8.1' (by default - `BASE'=`c:\gnatpro') containing the following line: - rts-soft-float\adalib - - * Create a file `ada_source_path' under the directory - `BASE\lib\gcc-lib\powerpc-wrs-vxworks\2.8.1' (by default - `BASE'=`c:\gnatpro') containing the following line: - rts-soft-float\adainclude - - * When using the compiler, specify `-msoft-float' as a compiler and - a linker option, e.g.: - $powerpc-wrs-vxworks-gnatmake -msoft-float module -largs -msoft-float - -  - File: gnat_ug_vxw.info, Node: Interrupt Handling for VxWorks, Next: Simulating Command Line Arguments for VxWorks, Prev: Support for Software Floating Point on PowerPC Processors, Up: VxWorks Topics - - Interrupt Handling for VxWorks - ============================== - - GNAT offers a range of options for hardware interrupt handling. In rough - order of latency and lack of restrictions: - - * Directly vectored interrupt procedure handlers - - * Directly vectored interrupt procedures that signal a task using a - suspension object - - * Ada 95 protected procedure handlers for interrupts - - * Ada 83 style interrupt entry handlers for interrupts - - In general, the range of possible solutions trades off latency versus - restrictions in the handler code. Restrictions in direct vectored - interrupt handlers are documented in the `VxWorks Programmer's Guide'. - Protected procedure handlers have only the restriction that no - potentially blocking operations are performed within the handler. - Interrupt entries have no restrictions. We recommend the use of the - protected procedure mechanism as providing the best balance of these - considerations for most applications. - - All handler types must explicitly perform any required hardware - cleanups, such as issuing an end-of-interrupt if necessary. - - For VxWorks/AE, applications that handle interrupts must be loaded - into the kernel protection domain. - - * Direct Vectored Interrupt Routines - - This approach provides the lowest interrupt latency, but has the - most restrictions on what VxWorks and Ada runtime calls can be - made, as well as on what Ada entities are accessible to the - handler code. Such handlers are most useful when there are - stringent latency requirements, and very little processing is to - be performed in the handler. Access to the necessary VxWorks - routines for setting up such handlers is provided in the package - `Interfaces.VxWorks'. - - VxWorks restrictions are described in the `VxWorks Programmer's - Manual'. Note in particular that floating point context is not - automatically saved and restored when interrupts are vectored to - the handler. If the handler is to execute floating point - instructions, the statements involved must be bracketed by a pair - of calls to `fppSave' and `fppRestore' defined in - `Interfaces.VxWorks'. - - In general, it is a good idea to save and restore the handler that - was installed prior to application startup. The routines - `intVecGet' and `intVecSet' are used for this purpose. The Ada - handler code is installed into the vector table using routine - `intConnect', which generates wrapper code to save and restore - registers. - - Example: - - with Interfaces.VxWorks; use Interfaces.VxWorks; - with System; - - package P is - - Count : Natural := 0; - pragma Atomic (Count); - - -- Interrupt level used by this example - Level : constant := 1; - - -- Be sure to use a reasonable interrupt number for the target - -- board! Refer to the BSP for details. - Interrupt : constant := 16#14#; - - procedure Handler (Parameter : System.Address); - - end P; - - package body P is - - procedure Handler (parameter : System.Address) is - S : Status; - begin - Count := Count + 1; - -- Acknowledge interrupt. Not necessary for all interrupts. - S := sysBusIntAck (intLevel => Level); - end Handler; - end P; - - with Interfaces.VxWorks; use Interfaces.VxWorks; - with Ada.Text_IO; use Ada.Text_IO; - - with P; use P; - procedure Useint is - task T; - - S : Status; - - task body T is - begin - for I in 1 .. 10 loop - Put_Line ("Generating an interrupt..."); - delay 1.0; - - -- Generate interrupt, using interrupt number - S := sysBusIntGen (Level, Interrupt); - end loop; - end T; - - -- Save old handler - Old_Handler : VOIDFUNCPTR := intVecGet (INUM_TO_IVEC (Interrupt)); - begin - S := intConnect (INUM_TO_IVEC (Interrupt), Handler'Access); - S := sysIntEnable (intLevel => Level); - - for I in 1 .. 10 loop - delay 2.0; - Put_Line ("value of count:" & P.Count'Img); - end loop; - - -- Restore previous handler - S := sysIntDisable (intLevel => Level); - intVecSet (INUM_TO_IVEC (Interrupt), Old_Handler); - end Useint; - - * Direct Vectored Interrupt Routines - - A variation on the direct vectored routine that allows for less - restrictive handler code is to separate the interrupt processing - into two levels. - - The first level is the same as in the previous section. Here we - perform simple hardware actions and signal a task pending on a - Suspension_Object (defined in `Ada.Synchronous_Task_Control') to - perform the more complex and time-consuming operations. The - routine `Set_True' signals a task whose body loops and pends on - the suspension object using `Suspend_Until_True'. The suspension - object is declared in a scope global to both the handler and the - task. This approach can be thought of as a slightly higher-level - application of the `C' example using a binary semaphore given in - the VxWorks Programmer's Manual. In fact, the implementation of - `Ada.Synchronous_Task_Control' is a very thin wrapper around a - VxWorks binary semaphore. - - This approach has a latency between the direct vectored approach - and the protected procedure approach. There are no restrictions - in the Ada task code, while the handler code has the same - restrictions as any other direct interrupt handler. - - Example: - - with System; - package Sem_Handler is - - Count : Natural := 0; - pragma Atomic (Count); - - -- Interrupt level used by this example - Level : constant := 1; - Interrupt : constant := 16#14#; - - -- Interrupt handler providing "immediate" handling - procedure Handler (Param : System.Address); - - -- Task whose body provides "deferred" handling - task Receiver is - pragma Interrupt_Priority - (System.Interrupt_Priority'First + Level + 1); - end Receiver; - - end Sem_Handler; - - with Ada.Synchronous_Task_Control; use Ada.Synchronous_Task_Control; - with Interfaces.VxWorks; use Interfaces.VxWorks; - package body Sema_Handler is - - SO : Suspension_Object; - - task body Receiver is - begin - loop - -- Wait for notification from immediate handler - Suspend_Until_True (SO); - - -- Interrupt processing - Count := Count + 1; - end loop; - end Receiver; - - procedure Handler (Param : System.Address) is - S : STATUS; - begin - -- Hardware cleanup, if necessary - S := sysBusIntAck (Level); - - -- Signal the task - Set_True (SO); - end Handler; - - end Sem_Handler; - - with Interfaces.VxWorks; use Interfaces.VxWorks; - with Ada.Text_IO; use Ada.Text_IO; - with Sem_Handler; use Sem_Handler; - procedure Useint is - - S : STATUS; - - task T; - - task body T is - begin - for I in 1 .. 10 loop - Put_Line ("Generating an interrupt..."); - delay 1.0; - - -- Generate interrupt, using interrupt number - S := sysBusIntGen (Level, Interrupt); - end loop; - end T; - - -- Save old handler - Old_Handler : VOIDFUNCPTR := intVecGet (INUM_TO_IVEC (Interrupt)); - begin - S := intConnect (INUM_TO_IVEC (Interrupt), Handler'Access); - S := sysIntEnable (intLevel => Level); - - for I in 1 .. 10 loop - delay 2.0; - Put_Line ("value of Count:" & Sem_Handler.Count'Img); - end loop; - - -- Restore handler - S := sysIntDisable (intLevel => Level); - intVecSet (INUM_TO_IVEC (Interrupt), Old_Handler); - abort Receiver; - end Useint; - - * Protected Procedure Handlers for Interrupts - - This is the recommended default mechanism for interrupt handling. - It essentially wraps the hybrid handler / task mechanism in a - higher-level abstraction, and provides a good balance between - latency and capability. - - Vectored interrupts are designated by their interrupt number, - starting from 0 and ranging to the number of entries in the - interrupt vector table - 1. - - In the GNAT VxWorks implementation, the following priority - mappings are used: - * Normal task priorities are in the range 0 .. 245. - - * Interrupt priority 246 is used by the GNAT `Interrupt_Manager' - task. - - * Interrupt priority 247 is used for vectored interrupts that - do not correspond to those generated via an interrupt - controller. - - * Interrupt priorities 248 .. 255 correspond to PIC interrupt - levels 0 .. 7. - - * Priority 256 is reserved to the VxWorks kernel. - - Except for reserved priorities, the above are recommendations for - setting the ceiling priority of a protected object that handles - interrupts, or the priority of a task with interrupt entries. - It's a very good idea to follow these recommendations for vectored - interrupts that come in through the PIC as it will determine the - priority of execution of the code in the protected procedure or - interrupt entry. - - No vectored interrupt numbers are reserved in this implementation, - because dedicated interrupts are determined by the board support - package. Obviously, careful consideration of the hardware is - necessary when handling interrupts. The VxWorks BSP for the board - is the definitive reference for interrupt assignments. - - Example: - - package PO_Handler is - - -- Interrupt level used by this example - Level : constant := 1; - - Interrupt : constant := 16#14#; - - protected Protected_Handler is - procedure Handler; - pragma Attach_Handler (Handler, Interrupt); - - function Count return Natural; - - pragma Interrupt_Priority (248); - private - The_Count : Natural := 0; - end Protected_Handler; - - end PO_Handler; - - with Interfaces.VxWorks; use Interfaces.VxWorks; - package body PO_Handler is - - protected body Protected_Handler is - - procedure Handler is - S : Status; - begin - -- Hardware cleanup if necessary - S := sysBusIntAck (Level); - - -- Interrupt processing - The_Count := The_Count + 1; - end Handler; - - function Count return Natural is - begin - return The_Count; - end Count; - end Protected_Handler; - - end PO_Handler; - - with Interfaces.VxWorks; use Interfaces.VxWorks; - with Ada.Text_IO; use Ada.Text_IO; - - with PO_Handler; use PO_Handler; - procedure Useint is - - task T; - - S : STATUS; - - task body T is - begin - for I in 1 .. 10 loop - Put_Line ("Generating an interrupt..."); - delay 1.0; - - -- Generate interrupt, using interrupt number - S := sysBusIntGen (Level, Interrupt); - end loop; - end T; - - begin - S := sysIntEnable (intLevel => Level); - - for I in 1 .. 10 loop - delay 2.0; - Put_Line ("value of count:" & Protected_Handler.Count'Img); - end loop; - - S := sysIntDisable (intLevel => Level); - end Useint; - - This is obviously significantly higher-level and easier to write - than the previous examples. - - * Ada 83 Style Interrupt Entries - - GNAT provides a full implementation of the Ada 83 interrupt entry - mechanism for vectored interrupts. However, due to latency issues, - we only recommend using these for backward compatibility. The - comments in the previous section regarding interrupt priorities - and reserved interrupts apply here. - - In order to associate an interrupt with an entry, GNAT provides the - standard Ada convenience routine `Ada.Interrupts.Reference'. It - is used as follows: - - Interrupt_Address : constant System.Address := - Ada.Interrupts.Reference (Int_Num); - - task Handler_Task is - pragma Interrupt_Priority (248); -- For instance - entry Handler; - for Handler'Address use Interrupt_Address; - end Handler_Task; - - Since there is no restriction within an interrupt entry on - blocking operations, be sure to perform any hardware interrupt - controller related operations before executing a call that could - block within the entry's accept statements. It is assumed that - interrupt entries are always open alternatives when they appear - within a selective wait statement. The presence of a guard gives - undefined behavior. - - Example: - - with Ada.Interrupts; - with System; - package Task_Handler is - - -- Interrupt level used by this example - Level : constant := 1; - - Interrupt : constant := 16#14#; - - Interrupt_Address : constant System.Address := - Ada.Interrupts.Reference (Int_Num); - - task Handler_Task is - pragma Interrupt_Priority (248); -- For instance - entry Handler; - for Handler'Address use Interrupt_Address; - - entry Count (Value : out Natural); - end Handler_Task; - end Task_Handler; - - with Interfaces.VxWorks; use Interfaces.VxWorks; - package body Task_Handler is - - task body Handler_Task is - The_Count : Natural := 0; - S : STATUS; - begin - loop - select - accept Handler do - -- Hardware cleanup if necessary - S := sysBusIntAck (Level); - - -- Interrupt processing - The_Count := The_Count + 1; - end Handler; - or - accept Count (Value : out Natural) do - Value := The_Count; - end Count; - end select; - end loop; - end Handler_Task; - - end Handler_Task; - - with Interfaces.VxWorks; use Interfaces.VxWorks; - with Ada.Text_IO; use Ada.Text_IO; - - with Handler_Task; use Handler_Task; - procedure Useint is - - task T; - - S : STATUS; - Current_Count : Natural := 0; - - task body T is - begin - for I in 1 .. 10 loop - Put_Line ("Generating an interrupt..."); - delay 1.0; - - -- Generate interrupt, using interrupt number - S := sysBusIntGen (Level, Interrupt); - end loop; - end T; - - begin - S := sysIntEnable (intLevel => Level); - - for I in 1 .. 10 loop - delay 2.0; - Handler_Task.Count (Current_Count); - Put_Line ("value of count:" & Current_Count'Img); - end loop; - - S := sysIntDisable (intLevel => Level); - abort Handler_Task; - end Useint; - -  - File: gnat_ug_vxw.info, Node: Simulating Command Line Arguments for VxWorks, Next: Debugging Issues for VxWorks, Prev: Interrupt Handling for VxWorks, Up: VxWorks Topics - - Simulating Command Line Arguments for VxWorks - ============================================= - - The GNAT implementation of `Ada.Command_Line' relies on the standard C - symbols `argv' and `argc'. The model for invoking "programs" under - VxWorks does not provide these symbols. The typical method for - invoking a program under VxWorks is to call the `sp' function in order - to spawn a thread in which to execute a designated function (in GNAT, - this is the implicit main generated by gnatbind. `sp' provides the - capability to push a variable number of arguments onto the stack when - the function is invoked. But this does not work for the implicit Ada - main, because it has no way of knowing how many arguments might be - required. This eliminates the possibility to use `Ada.Command_Line'. - - One way to solve this problem is to define symbols in the VxWorks - environment, then import them into the Ada application. For example, - we could define the following package that imports two symbols, one an - int and the other a string: - - with Interfaces.C.Strings; - use Interfaces.C.Strings; - package Args is - -- Define and import a variable for each argument - Int_Arg : Interfaces.C.Int; - String_Arg : Chars_Ptr; - private - pragma Import (C, Int_Arg, "intarg"); - pragma Import (C, String_Arg, "stringarg"); - end Args; - - An Ada unit could then use the two imported variables `Int_Arg' and - `String_Arg' as follows: - - with Args; use Args; - with Interfaces.C.Strings; - use Interfaces.C, Interfaces.C.Strings; - with Ada.Text_IO; use Ada.Text_IO; - procedure Argtest is - begin - Put_Line (Int'Image (Int_Arg)); - Put_Line (Value (String_Arg)); - end Argtest; - - When invoking the application from the shell, one will then set the - values to be imported, and spawn the application, as follows: - - -> intarg=10 - -> stringarg="Hello" - -> sp (argtest) - -  - File: gnat_ug_vxw.info, Node: Debugging Issues for VxWorks, Next: Using GNAT from the Tornado 2 Project Facility, Prev: Simulating Command Line Arguments for VxWorks, Up: VxWorks Topics - - Debugging Issues for VxWorks - ============================ - - The debugger can be launched directly from the Tornado environment or - from `glide' through its graphical interface: `gvd'. It can also be used - directly in text mode as shown below: - - The command to run `GDB' in text mode is - - $ target-gdb - - where target is the name of target of the cross GNAT compiler. In - contrast with native `gdb', it is not useful to give the name of the - program to debug on the command line. Before starting a debugging - session, one needs to connect to the VxWorks-configured board and load - the relocatable object produced by `gnatlink'. This can be achieved by - the following commands: - - (vxgdb) target wtx myboard - (vxgdb) load program - - where `myboard' is the host name or IP number of the target board, and - `wtx' is the name of debugging protocol used to communicate with the - VxWorks board. Early versions of VxWorks, up tp 5.2, only support the - `' protocol whereas starting with VxWorks 5.3 and Tornado, - another protocol called `' was made available. The choice of the - protocol can be made when configuring the VxWorks kernel itself. When - available, the `' is greatly preferable and actually the only - supported protocol with GNAT. When the debugger is launched directly - from Tornado, the proper `target' command is automatically generated by - the environment. - - The GNAT debugger can be used for debugging multitasking programs in - two different modes and some minimal understanding of these modes is - necessary in order to use the debugger effectively. The two modes are: - - * Monotask mode: attach to, and debug, a single task. This mode is - equivalent to the capabilities offered by CrossWind. The debugger - interacts with a single task, while not affecting other tasks - (insofar as possible). This is the DEFAULT mode. - - * Multitask mode: The debugger has control over all Ada tasks in an - application. It is possible to gather information about all - application tasks, and to switch from one to another within a - single debugging session. - - It is not advised to switch between the two modes within a debugging - session. A third mode called System mode is also available and can be - used in place of the Multitask mode. Consult the Tornado documentation - for this. - - Among the criteria for selecting the appropriate mode is the effect - of task synchronization on the application's behavior. Debugging a - tasking application affects the timing of the application; minimizing - such effects may be critical in certain situations. The two modes have - different effects: monotask mode only affects the attached task: others - will run normally (if possible). Multitask mode stops all tasks at each - breakpoint and restarts them on single-step, next, finish or continue; - this may help avoid deadlocks in the presence of task synchronization - despite the inherent latency of stopping and restarting the tasks. - - Using the debugger in monotask mode - ----------------------------------- - - There are two ways to begin your debugging session: - - * The program is already running on the board. - - The sequence of commands to use this mode is: - * Launch GVD (possibly from the Tornado menu) - - Verify that the debugger has access to the debug information - of both your program and the kernel. The Console window - should have a message "Looking for all loaded modules:" - followed by the names of the modules on the board and "ok". - If you have some error messages here instead of "ok", the - debugging session may not work as expected. - - * Attach to the desired task using - File --> Attach... - - This task is stopped by the debugger. Other tasks continue to - operate normally (unless they are blocked by synchronization - with the stopped task). The source window should display the - code on which the task has been stopped, and if the stack - display is enabled, it should reflect the stack of the task. - - * The program hasn't been loaded yet on the board - * Launch GVD (possibly from the Tornado menu) - - * Load your program to the board: - File --> Open Program... - - GVD should display: - Downloading your_program ...done. - Reading symbols from your_program...expanding to full symbols...done. - - * Set breakpoints in your program. - - WARNING: they must be set in the main task (if your program - runs several tasks) - - * Run your program using one of the three methods below: - * Click on button or - - * Menu - Program --> Run/Start - - * Type in GVD's Console window - (gdb) run your_program - - * Whichever method you chose to start your debugging session, you - can use the following commands at this point: - * Browse sources and set breakpoints - - * Examine the call stack (Data -> call stack) - - * Go "up" and "down" in the call stack ("up" & "down" buttons) - - * Examine data (Data -> Display local variables, or any of the - other methods for viewing data in GVD) - - * Continue/finish - - Next/step/finish will only work if the top frame in the call stack - has debug information. This is almost never the case when first - attaching to the task since the task is usually stopped by the - attach operation in the GNAT runtime. You can verify which frames - of the call stack have debug information by: - Data --> call stack - (contextual menu inside the call stack window) - add "file location" - - If the current frame does not have a "file location", then there - is no debug information for the frame. We strongly recommended - that you set breakpoints in the source where debug information can - be found and "continue" until a breakpoint is reached before using - "next/step". Another convenient possibility is to use the "continue - until" capability available from the contextual menu of the Source - window. - - You can also examine the state of other tasks using - Data -> tasks - - but you can't "switch" to another task by clicking on the elements - of the task list. If you try to, you will get an error message in - GVD's console: - "Task switching is not allowed when multi-tasks mode is not active" - - Once you have completed your debugging session on the attached - task, you can detach from the task: - File --> detach - - The task resumes normal execution at this stage. WARNING: when you - detach from a task, be sure that you are in a frame where there is - debug information. Otherwise, the task won't resume properly. You - can then start another attach/detach cycle if you wish. - - Note that it is possible to launch several GVD sessions and - simultaneously attach each to a distinct task in monotask mode: - File --> New Debugger... (uncheck the box: Replace Current Debugger) - File --> Attach... (in the new window) - File --> detach - - Using the debugger in Multitask mode - ------------------------------------ - - The steps are as follows - - * Launch GVD (possibly from the Tornado menu) - - There are two possibilities: - * If the program is already loaded on the target board, you - need only verify that debug information has been found by the - debugger as described above. - - * Otherwise, load the program on the board using - File --> Open program - - * Set breakpoints in the desired parts of the program - - * Start the program - - The simplest way to start the debugger in multitask mode is to use - the menu - Program --> Run/Start - - and check the box "enable vxWorks multi-tasks mode". You can also - use the following gdb commands in the console window - (gdb) set multi-tasks-mode on - (gdb) run your_program - - * Debug the stopped program - - Once stopped at a breakpoint (or if you pressed the "stop" - button), you can use all the standard commands listed for monotask - mode + task switching (using Data -> tasks). Using next/step under - this mode is possible with the same restrictions as for monotask - mode, but is not recommended because all tasks are restarted, - leading to the possibility that a different task hits a breakpoint - before the stepping operation has completed. Such an occurrence - can result in a confusing state for both the user and the - debugger. So we strongly suggest the use of only breakpoints and - "continue" in this mode. - - A final reminder: whatever the mode, whether you are debugging or - not, the program has to be reloaded before each new execution, so that - data initialized by the loader is set correctly. For instance, if you - wish to restart the same execution of the same program, you can use the - following sequence of gdb commands in the console window: - (gdb) detach - (gdb) unload your_program(.exe) - (gdb) load your_program(.exe) - (gdb) run your_program - -  - File: gnat_ug_vxw.info, Node: Using GNAT from the Tornado 2 Project Facility, Next: Frequently Asked Questions for VxWorks, Prev: Debugging Issues for VxWorks, Up: VxWorks Topics - - Using GNAT from the Tornado 2 Project Facility - ============================================== - - * Menu: - - * The GNAT Toolchain as Used from the Tornado 2 Project Facility:: - * Building a Simple Application:: - * Mixing C and Ada Code in a Tornado 2 Project:: - * Compilation Switches:: - * Autoscale and Minimal Kernel Configuration:: - * Adapting BSPs to GNAT:: - * Using GNAT Project Files in a Tornado 2 Project:: - - This section describes how to add an Ada module in a Tornado project - using the Tornado 2 Project facility described in `Tornado User's - Guide', Chapter 4. All recommendations apply for both 'Downloadable - Modules' and 'Kernel' project types. - -  - File: gnat_ug_vxw.info, Node: The GNAT Toolchain as Used from the Tornado 2 Project Facility, Next: Building a Simple Application, Up: Using GNAT from the Tornado 2 Project Facility - - The GNAT Toolchain as Used from the Tornado 2 Project Facility - -------------------------------------------------------------- - - Tornado 2 allows you to integrate third-party C toolchains. (`Tornado - 2 API Programmer's Guide', Chapter 7). Thus the GNAT toolchain will be - seen as a new C toolchain when used from the Tornado 2 Project - Facility. For each processor you can compile for, you will find a - gnat toolchain, e.g. PPC604gnat. These toolchains will allow you - to include Ada modules into your projects, and simply build them. - - The name of the so-called C compiler is _cc_gnat__, the name - of the 'linker' is _ld_gnat__, where is an architecture; - e.g., PPC. These scripts will call the correct executables during the - compilation or link processes, thus the C compiler, the C linker, or - the GNAT toolchain, depending on the context. - -  - File: gnat_ug_vxw.info, Node: Building a Simple Application, Next: Mixing C and Ada Code in a Tornado 2 Project, Prev: The GNAT Toolchain as Used from the Tornado 2 Project Facility, Up: Using GNAT from the Tornado 2 Project Facility - - Building a Simple Application - ----------------------------- - - First, create a new project, using one of the gnat toolchains. - - To add an Ada source file to the current project, just click on - `Project -> Add/Include', browse to the relevant file, and include it. - The Ada source file included should be the Ada entry point. Only one - Ada entry point is allowed in a project. Any other required Ada source - files will be automatically compiled and linked by the underlying tools. - - You can now compile the project, `Build->Rebuild all'. A log of the - compilation process can be found in the build directory, in - `gnatbuild.log'. It contains all the calls executed by the scripts, and - associated information. - -  - File: gnat_ug_vxw.info, Node: Mixing C and Ada Code in a Tornado 2 Project, Next: Compilation Switches, Prev: Building a Simple Application, Up: Using GNAT from the Tornado 2 Project Facility - - Mixing C and Ada Code in a Tornado 2 Project - -------------------------------------------- - - You can mix C and Ada code in your projects. Your source files and the - build options should comply with the recommendations from the section - `Interfacing to C'. This means that you can have several or no C - source files, and one or no Ada entry point in your Tornado 2 Project. - -  - File: gnat_ug_vxw.info, Node: Compilation Switches, Next: Autoscale and Minimal Kernel Configuration, Prev: Mixing C and Ada Code in a Tornado 2 Project, Up: Using GNAT from the Tornado 2 Project Facility - - Compilation Switches - -------------------- - - Once you have included all your source files, you may modify some - compilation and linking options. To pass specific options to the GNAT - toolchain, go to the Project's build settings, on the `C/C++ Compiler' - tab, and add your arguments in the input window. - - You must comply with several rules to pass arguments to GNAT. - Arguments to be passed should be - - * after any arguments passed to the C toolchain. - - * prefixed depending on the tool that uses them, with the following - syntax - - * `-cargs _gnatmake-options_' to pass arguments to gnatmake - - * `-bargs _gnatbind-options_' to pass arguments to gnatbind - - * `-largs _gnatlink-options_' to pass arguments to gnatlink - - You will find more information on the compilation process of Ada source - files in the section `The GNAT Compilation Model'. For a list of all - available switches, refer to the sections describing `gnatmake', - `gnatbind' and `gnatlink'. - - Here is an example that passes the option `-v' to the GNAT compiler : - -g -mstrict-align -prjtype $(PRJ_TYPE) -ansi -nostdinc -DRW_MULTI_THREAD -D_REENTRANT - -fvolatile -fno-builtin -fno-for-scope -I. -I/usr/windppc-2.0/target/h -DCPU=PPC604 - -cargs -v - - Here is an example that passes the option `-v' to the GNAT compiler, - binder and linker, and `-v' and `-g' to the compiler : - -g -mstrict-align -prjtype $(PRJ_TYPE) -ansi -nostdinc -DRW_MULTI_THREAD -D_REENTRANT - -fvolatile -fno-builtin -fno-for-scope -I. -I/usr/windppc-2.0/target/h -DCPU=PPC604 - -cargs -v -g -O2 -bargs -v -largs -v - - In both examples, the following arguments have been automatically added - by the Project Facility, and will be used by the C compiler. - -g -mstrict-align -prjtype $(PRJ_TYPE) -ansi -nostdinc -DRW_MULTI_THREAD -D_REENTRANT - -fvolatile -fno-builtin -fno-for-scope -I. -I/usr/windppc-2.0/target/h -DCPU=PPC604 - - Note: The `-prjtype $(PRJ_TYPE)' option present in a few input boxes is - used by the GNAT toolchain. It is required for the compilation process. - You should not remove it from any input box. - -  - File: gnat_ug_vxw.info, Node: Autoscale and Minimal Kernel Configuration, Next: Adapting BSPs to GNAT, Prev: Compilation Switches, Up: Using GNAT from the Tornado 2 Project Facility - - Autoscale and Minimal Kernel Configuration - ------------------------------------------ - - The Autoscale feature, present in the Project Facility can be used on - your VxWorks Kernel projects to determine the minimum set of components - required for your kernel to work. (Please refer to the `Tornado II - User's Guide' Section 4.4 for more details.) This feature is also - available for projects involving Ada code. Just click on - `Project->Autoscale' to launch a check and determine the minimal kernel - configuration. - -  - File: gnat_ug_vxw.info, Node: Adapting BSPs to GNAT, Next: Using GNAT Project Files in a Tornado 2 Project, Prev: Autoscale and Minimal Kernel Configuration, Up: Using GNAT from the Tornado 2 Project Facility - - Adapting BSPs to GNAT - --------------------- - - To use your Board Support Packages with the GNAT toolchain, you will - have to adapt them, either manually or using the `adaptbsp4gnat' script. - This procedure is described in the `Tornado API Programmer's Guide', - Chapter 7. Here is a summary of this setup, depending on the context. - - * To do the adaptation manually: - - * Copy your BSP directory contents into a new directory - - * Go to this directory - - * Edit the file `Makefile', - - * Set tool to gnat, `TOOL=gnat' - - * Reverse the order of the following lines - * `include $(TGT_DIR)/h/make/make.$(CPU)$(TOOL)' - - * `include $(TGT_DIR)/h/make/defs.$(WIND_HOST_TYPE)' - - - - * To do the adaptation automatically, you may use the `adaptbsp4gnat' - script. Its syntax is `adaptbsp4gnat '. - - This script follows the different steps described above to perform - the adaptation. The name of the new bsp is given after the - modification. By default, if `' is the name of your BSP, - `-gnat', will be the name of the BSP created. - -  - File: gnat_ug_vxw.info, Node: Using GNAT Project Files in a Tornado 2 Project, Prev: Adapting BSPs to GNAT, Up: Using GNAT from the Tornado 2 Project Facility - - Using GNAT Project Files in a Tornado 2 Project - ----------------------------------------------- - - You can use GNAT Project files to compile your Ada files. To do so, - you need to use the `-Pproject_file.gpr' option from `gnatmake'. The - path to the project file can be either absolute, or relative to the - build directory, i.e. where the executable will be placed (e.g. - `~/myproject/PPC604gnat'). Your project file should set the - `Object_Dir' variable to a specific value. - project Sample is - - Target := external ("TARGET_DIR"); - for Object_Dir use Target; - - end Sample; - -  - File: gnat_ug_vxw.info, Node: Frequently Asked Questions for VxWorks, Prev: Using GNAT from the Tornado 2 Project Facility, Up: VxWorks Topics - - Frequently Asked Questions for VxWorks - ====================================== - - * When I run my program twice on the board, it does not work, why? - - Usually, Ada programs require elaboration and finalization, so the - compiler creates a wrapper procedure whose name is the same as the - Ada name of the main subprogram, which takes care of calling the - elaboration and finalization routines before and after your - program. But the static part of the elaboration is taken care of - while loading the program itself and thus if you launch it twice - this part of the elaboration will not be performed. This affects - the proper elaboration of the GNAT runtime and thus it is - mandatory to reload your program before relaunching it. - - * Can I load a collection of subprograms rather than a standalone - program? - - It is possible to write Ada programs with multiple entry points - which can be called from the VxWorks shell; you just need to - consider your main program as the VxWorks shell itself and - generate an Ada subsystem callable from outside *Note Binding with - Non-Ada Main Programs::. If you use this method, you need to call - `adainit' manually before calling any Ada entry point. - - * When I use the `break exception' command, I get the message - `"exception" is not a function', why? - - You are not in the proper language mode. Issue the command: - (vxgdb) set language ada - - * When I load a large application from the VxWorks shell using the - "ld" command, the load hangs and never finishes. How can I load - large executables? - - This is a classic VxWorks problem when using the default "rsh" - communication method. Using NFS instead should work. Use the - `nfsShowMount' command to verify that your program is in a NFS - mounted directory. - - * When I load a large application from the debugger using the wtx - target connection, the load never finishes, why? - - Make sure that the memory cache size parameter of the target - server is large enough. (`target -m big_enough_size', or Memory - cache size box in GUI.) See `Tornado 1.01 API Programming Guide', - Section 3.6.2. - - * When I spawn my program under the VxWorks shell, interactive input - does not work, why? - - Only programs directly launched from the shell can have interactive - input. For a program spawned with the `sp' or `taskSpawn' command, - you need to have file redirection for input: - -> # here you can have interactive input - -> main - -> # here you cannot - -> sp main - -> # neither here - -> taskSpawn("ess",100,0,8000000,main) - -> # but you can input from a file: - -> taskSpawn("Bae",100,0,8000000,main) < input_file - -  - File: gnat_ug_vxw.info, Node: LynxOS Topics, Next: Performance Considerations, Prev: VxWorks Topics, Up: Top - - LynxOS Topics - ************* - - This chapter describes topics that are specific to the GNAT for LynxOS - cross configurations. - - * Menu: - - * Getting Started with GNAT on LynxOS:: - * Kernel Configuration for LynxOS:: - * Patch Level Issues for LynxOS:: - * Debugging Issues for LynxOS:: - * An Example Debugging Session for LynxOS:: - -  - File: gnat_ug_vxw.info, Node: Getting Started with GNAT on LynxOS, Next: Kernel Configuration for LynxOS, Up: LynxOS Topics - - Getting Started with GNAT on LynxOS - =================================== - - This section is a starting point for using GNAT to develop and execute - Ada 95 programs for LynuxWorks' LynxOS target environment from a Unix - host environment. We assume that you know how to use GNAT in a native - environment and how to start a telnet or other login session to connect - to your LynxOS board. - - To compile code for a LynxOS system running on a PowerPC board, the - basic compiler command is `powerpc-xcoff-lynxos-gcc'. - - With GNAT, the easiest way to build the basic `Hello World' program - is with `gnatmake'. For the LynxOS PowerPC target this would look like: - - $ powerpc-xcoff-lynxos-gnatmake hello - powerpc-xcoff-lynxos-gcc -c hello.adb - powerpc-xcoff-lynxos-gnatbind -x hello.ali - powerpc-xcoff-lynxos-gnatlink hello.ali - - (The first line is the command entered by the user - the subseqent three - are the programs run by `gnatmake'.) - - This creates the executable `hello'" which you then need to load on - the board (using ftp or an NFS directory for example) to run it. - -  - File: gnat_ug_vxw.info, Node: Kernel Configuration for LynxOS, Next: Patch Level Issues for LynxOS, Prev: Getting Started with GNAT on LynxOS, Up: LynxOS Topics - - Kernel Configuration for LynxOS - =============================== - - The appropriate configuration for your LynxOS kernel depends on the - target system and the requirements of your application. GNAT itself - adds no additional demands; however in some situations it may be - appropriate to increase the conservative resource assumptions made by - the default configuration. - - Kernel parameters limiting the maximum number of file descriptors, - kernel and user threads, synchronization objects, etc., may be set in - the file `uparam.h'. You may also wish to modify the file - `/etc/starttab', which places limits on data, stack, and core file - size. See the documentation provided by LynuxWorks for more information. - -  - File: gnat_ug_vxw.info, Node: Patch Level Issues for LynxOS, Next: Debugging Issues for LynxOS, Prev: Kernel Configuration for LynxOS, Up: LynxOS Topics - - Patch Level Issues for LynxOS - ============================= - - The GNAT runtime requires that your system run at patch level 040 or - later. Please see the file `PatchCompatibility.txt' from the - distribution for more information. - -  - File: gnat_ug_vxw.info, Node: Debugging Issues for LynxOS, Next: An Example Debugging Session for LynxOS, Prev: Patch Level Issues for LynxOS, Up: LynxOS Topics - - Debugging Issues for LynxOS - =========================== - - GNAT's debugger is based on the same GNU gdb technology as the debugger - provided by LynxOS, though with a great number of extensions and - enhancements to support the Ada language and GNAT. The LynxOS - documentation is relevant to understanding how to get the debugger - started if you run into difficulties. - - To demonstrate a debugging session, we will use a slightly more - complex program called `demo1.adb', which can be found in the `examples' - directory of the GNAT distribution. This program is compiled with - debugging information as follows: - - $ powerpc-xcoff-lynxos-gnatmake -g demo1 - powerpc-xcoff-lynxos-gcc -c -g demo1.adb - powerpc-xcoff-lynxos-gcc -c -g gen_list.adb - powerpc-xcoff-lynxos-gcc -c -g instr.adb - powerpc-xcoff-lynxos-gnatbind -x demo1.ali - powerpc-xcoff-lynxos-gnatlink -g demo1.ali - - Once the executable is created, copy it to your working directory on the - board. In this directory, you will have to launch the gdb server and - choose a free port number on your TCP/IP socket. Presuming the Internet - hostname of the board is `myboard' and the port chosen is 2345, issue - the following command: - - myboard> gdbserver myboard:2345 demo1 - - Then return to your host environment. - - The graphical debugger interface, `gvd', supports both native and - cross environments at the same time. `gvd' can be launched from `Glide' - (see `README.Glide' for more information on customizing `Glide' for - LynxOS) or it can be launched from the command line as follows: - - $ gvd --debugger powerpc-xcoff-lynxos-gdb - - Then to attach to the target, enter in `gvd''s command line window: - - (gdb) target remote myboard:2345 - - For more information see the GVD documentation. - - The comments below concern debugging directly from the command line - but they also apply to `gvd', though in most cases an equivalent - graphical command is also available. - - To run the cross debugger from the command line without the visual - interface use the command `powerpc-xcoff-lynxos-gdb'. - - You will see something like: - - GNU gdb 4.17.gnat.3.14a1 - Copyright 1998 Free Software Foundation, Inc. - GDB is free software, covered by the GNU General Public License, and you are - welcome to change it and/or distribute copies of it under certain conditions. - Type "show copying" to see the conditions. - There is absolutely no warranty for GDB. Type "show warranty" for details. - This GDB was configured as "--host=sparc-sun-solaris2.5.1 --target=powerpc-xc - off-lynxos". - (gdb) - - Where `(gdb)' is the debugger's prompt. The first thing to do at the - prompt from within `gdb' is to load the symbol table from the - executable: - - (gdb) file demo1 - Reading symbols from demo1...done. - (gdb) - - You then have to attach to the server running on the board. Issue the - command: - - (gdb) target remote myboard:2345 - - After the server has been started and attached from the host, the - program is running on the target but has halted execution at the very - beginning. The following commands set a breakpoint and continue - execution: - - (gdb) break demo1.adb:37 - Breakpoint 1 at 0x100064d0: file demo1.adb, line 37. - (gdb) cont - Continuing. - - Breakpoint 1, demo1 () at demo1.adb:37 - 37 Set_Name (Fuel, "Fuel"); - (gdb) - - Here the execution has stopped at the breakpoint set above. Now you can - use the standard `gdb' commands to examine the stack and program - variables. - - Note that once execution has completed, the server on the board must - be restarted before a new debugging session may begin. - -  - File: gnat_ug_vxw.info, Node: An Example Debugging Session for LynxOS, Prev: Debugging Issues for LynxOS, Up: LynxOS Topics - - An Example Debugging Session for LynxOS - ======================================= - - Carrying on a little further with the debugging session, the following - example illustrates some of the usual debugging commands for moving - around and seeing where you are: - - (gdb) next - 38 Set_Name (Water, "Water"); - (gdb) bt - #0 demo1 () at demo1.adb:38 - #1 0x10001218 in main (argc=1, argv=2147483640, envp=2147483520) at - b~demo1.adb:118 - #2 0x10017538 in runmainthread () - #3 0x10001048 in __start () - (gdb) up - #1 0x10001218 in main (argc=1, argv=2147483640, envp=2147483520) at - b~demo1.adb:118 - 118 Ada_Main_Program; - (gdb) down - #0 demo1 () at demo1.adb:38 - 38 Set_Name (Water, "Water"); - (gdb) - - To examine and modify variables (of a tagged type here): - - (gdb) print speed - $1 = (name => "Speed ", value => -286331154) - (gdb) ptype speed - type = new instr.instrument with record - value: instr.speed; - end record - (gdb) speed.value := 3 - $2 = 3 - (gdb) print speed - $3 = (name => "Speed ", value => 3) - (gdb) info local - speed = (name => "Speed ", value => 3) - fuel = (name => "Fuel ", value => -286331154) - oil = (name => ' ' , value => -286331154, size => 20, - fill => 42 '*', empty => 46 '.') - water = (name => ' ' , value => -286331154, size => 20, - fill => 42 '*', empty => 46 '.') - time = (name => ' ' , seconds => 0, minutes => 0, hours => - 0) - chrono = (name => ' ' , seconds => 0, minutes => 0, - hours => 0) - db = (access demo1.dash_board.internal) 0x0 - (gdb) - - And finally letting the program it run to completion: - - (gdb) c - Continuing. - - Program exited normally. - (gdb) - -  - File: gnat_ug_vxw.info, Node: Performance Considerations, Next: GNU Free Documentation License, Prev: LynxOS Topics, Up: Top - - Performance Considerations - ************************** - - The GNAT system provides a number of options that allow a trade-off - between - - * performance of the generated code - - * speed of compilation - - * minimization of dependences and recompilation - - * the degree of run-time checking. - - The defaults (if no options are selected) aim at improving the speed of - compilation and minimizing dependences, at the expense of performance - of the generated code: - - * no optimization - - * no inlining of subprogram calls - - * all run-time checks enabled except overflow and elaboration checks - - These options are suitable for most program development purposes. This - chapter describes how you can modify these choices, and also provides - some guidelines on debugging optimized code. - - * Menu: - - * Controlling Run-Time Checks:: - * Optimization Levels:: - * Debugging Optimized Code:: - * Inlining of Subprograms:: - -  - File: gnat_ug_vxw.info, Node: Controlling Run-Time Checks, Next: Optimization Levels, Up: Performance Considerations - - Controlling Run-Time Checks - =========================== - - By default, GNAT generates all run-time checks, except arithmetic - overflow checking for integer operations and checks for access before - elaboration on subprogram calls. The latter are not required in default - mode, because all necessary checking is done at compile time. Two gnat - switches, `-gnatp' and `-gnato' allow this default to be modified. - *Note Run-Time Checks::. - - Our experience is that the default is suitable for most development - purposes. - - We treat integer overflow specially because these are quite - expensive and in our experience are not as important as other run-time - checks in the development process. Note that division by zero is not - considered an overflow check, and divide by zero checks are generated - where required by default. - - Elaboration checks are off by default, and also not needed by - default, since GNAT uses a static elaboration analysis approach that - avoids the need for run-time checking. This manual contains a full - chapter discussing the issue of elaboration checks, and if the default - is not satisfactory for your use, you should read this chapter. - - For validity checks, the minimal checks required by the Ada Reference - Manual (for case statements and assignments to array elements) are on - by default. These can be suppressed by use of the `-gnatVn' switch. - Note that in Ada 83, there were no validity checks, so if the Ada 83 - mode is acceptable (or when comparing GNAT performance with an Ada 83 - compiler), it may be reasonable to routinely use `-gnatVn'. Validity - checks are also suppressed entirely if `-gnatp' is used. - - Note that the setting of the switches controls the default setting of - the checks. They may be modified using either `pragma Suppress' (to - remove checks) or `pragma Unsuppress' (to add back suppressed checks) - in the program source. - -  - File: gnat_ug_vxw.info, Node: Optimization Levels, Next: Debugging Optimized Code, Prev: Controlling Run-Time Checks, Up: Performance Considerations - - Optimization Levels - =================== - - The default is optimization off. This results in the fastest compile - times, but GNAT makes absolutely no attempt to optimize, and the - generated programs are considerably larger and slower than when - optimization is enabled. You can use the `-ON' switch, where N is an - integer from 0 to 3, on the `gcc' command line to control the - optimization level: - - `-O0' - no optimization (the default) - - `-O1' - medium level optimization - - `-O2' - full optimization - - `-O3' - full optimization, and also attempt automatic inlining of small - subprograms within a unit (*note Inlining of Subprograms::). - - Higher optimization levels perform more global transformations on the - program and apply more expensive analysis algorithms in order to - generate faster and more compact code. The price in compilation time, - and the resulting improvement in execution time, both depend on the - particular application and the hardware environment. You should - experiment to find the best level for your application. - - Note: Unlike some other compilation systems, `gcc' has been tested - extensively at all optimization levels. There are some bugs which - appear only with optimization turned on, but there have also been bugs - which show up only in _unoptimized_ code. Selecting a lower level of - optimization does not improve the reliability of the code generator, - which in practice is highly reliable at all optimization levels. - - Note regarding the use of `-O3': The use of this optimization level - is generally discouraged with GNAT, since it often results in larger - executables which run more slowly. See further discussion of this point - in *note Inlining of Subprograms::. - -  - File: gnat_ug_vxw.info, Node: Debugging Optimized Code, Next: Inlining of Subprograms, Prev: Optimization Levels, Up: Performance Considerations - - Debugging Optimized Code - ======================== - - Since the compiler generates debugging tables for a compilation unit - before it performs optimizations, the optimizing transformations may - invalidate some of the debugging data. You therefore need to - anticipate certain anomalous situations that may arise while debugging - optimized code. This section describes the most common cases. - - 1. The "hopping Program Counter": Repeated 'step' or 'next' commands - show the PC bouncing back and forth in the code. This may result - from any of the following optimizations: - - * Common subexpression elimination: using a single instance of - code for a quantity that the source computes several times. - As a result you may not be able to stop on what looks like a - statement. - - * Invariant code motion: moving an expression that does not - change within a loop, to the beginning of the loop. - - * Instruction scheduling: moving instructions so as to overlap - loads and stores (typically) with other code, or in general - to move computations of values closer to their uses. Often - this causes you to pass an assignment statement without the - assignment happening and then later bounce back to the - statement when the value is actually needed. Placing a - breakpoint on a line of code and then stepping over it may, - therefore, not always cause all the expected side-effects. - - 2. The "big leap": More commonly known as cross-jumping, in which two - identical pieces of code are merged and the program counter - suddenly jumps to a statement that is not supposed to be executed, - simply because it (and the code following) translates to the same - thing as the code that _was_ supposed to be executed. This effect - is typically seen in sequences that end in a jump, such as a - `goto', a `return', or a `break' in a C `switch' statement. - - 3. The "roving variable": The symptom is an unexpected value in a - variable. There are various reasons for this effect: - - * In a subprogram prologue, a parameter may not yet have been - moved to its "home". - - * A variable may be dead, and its register re-used. This is - probably the most common cause. - - * As mentioned above, the assignment of a value to a variable - may have been moved. - - * A variable may be eliminated entirely by value propagation or - other means. In this case, GCC may incorrectly generate - debugging information for the variable - - In general, when an unexpected value appears for a local variable - or parameter you should first ascertain if that value was actually - computed by your program, as opposed to being incorrectly reported - by the debugger. Record fields or array elements in an object - designated by an access value are generally less of a problem, - once you have ascertained that the access value is sensible. - Typically, this means checking variables in the preceding code and - in the calling subprogram to verify that the value observed is - explainable from other values (one must apply the procedure - recursively to those other values); or re-running the code and - stopping a little earlier (perhaps before the call) and stepping - to better see how the variable obtained the value in question; or - continuing to step _from_ the point of the strange value to see if - code motion had simply moved the variable's assignments later. - -  - File: gnat_ug_vxw.info, Node: Inlining of Subprograms, Prev: Debugging Optimized Code, Up: Performance Considerations - - Inlining of Subprograms - ======================= - - A call to a subprogram in the current unit is inlined if all the - following conditions are met: - - * The optimization level is at least `-O1'. - - * The called subprogram is suitable for inlining: It must be small - enough and not contain nested subprograms or anything else that - `gcc' cannot support in inlined subprograms. - - * The call occurs after the definition of the body of the subprogram. - - * Either `pragma Inline' applies to the subprogram or it is small - and automatic inlining (optimization level `-O3') is specified. - - Calls to subprograms in `with''ed units are normally not inlined. To - achieve this level of inlining, the following conditions must all be - true: - - * The optimization level is at least `-O1'. - - * The called subprogram is suitable for inlining: It must be small - enough and not contain nested subprograms or anything else `gcc' - cannot support in inlined subprograms. - - * The call appears in a body (not in a package spec). - - * There is a `pragma Inline' for the subprogram. - - * The `-gnatn' switch is used in the `gcc' command line - - Note that specifying the `-gnatn' switch causes additional - compilation dependencies. Consider the following: - - package R is - procedure Q; - pragma Inline (Q); - end R; - package body R is - ... - end R; - - with R; - procedure Main is - begin - ... - R.Q; - end Main; - - With the default behavior (no `-gnatn' switch specified), the - compilation of the `Main' procedure depends only on its own source, - `main.adb', and the spec of the package in file `r.ads'. This means - that editing the body of `R' does not require recompiling `Main'. - - On the other hand, the call `R.Q' is not inlined under these - circumstances. If the `-gnatn' switch is present when `Main' is - compiled, the call will be inlined if the body of `Q' is small enough, - but now `Main' depends on the body of `R' in `r.adb' as well as on the - spec. This means that if this body is edited, the main program must be - recompiled. Note that this extra dependency occurs whether or not the - call is in fact inlined by `gcc'. - - The use of front end inlining with `-gnatN' generates similar - additional dependencies. - - Note: The `-fno-inline' switch can be used to prevent all inlining. - This switch overrides all other conditions and ensures that no inlining - occurs. The extra dependences resulting from `-gnatn' will still be - active, even if this switch is used to suppress the resulting inlining - actions. - - Note regarding the use of `-O3': There is no difference in inlining - behavior between `-O2' and `-O3' for subprograms with an explicit - pragma `Inline' assuming the use of `-gnatn' or `-gnatN' (the switches - that activate inlining). If you have used pragma `Inline' in - appropriate cases, then it is usually much better to use `-O2' and - `-gnatn' and avoid the use of `-O3' which in this case only has the - effect of inlining subprograms you did not think should be inlined. We - often find that the use of `-O3' slows down code by performing - excessive inlining, leading to increased instruction cache pressure - from the increased code size. So the bottom line here is that you - should not automatically assume that `-O3' is better than `-O2', and - indeed you should use `-O3' only if tests show that it actually - improves performance. - -  - File: gnat_ug_vxw.info, Node: GNU Free Documentation License, Next: Index, Prev: Performance Considerations, Up: Top - - GNU Free Documentation License - ****************************** - - Version 1.2, November 2002 - Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA - - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - 0. PREAMBLE - - The purpose of this License is to make a manual, textbook, or other - functional and useful document "free" in the sense of freedom: to - assure everyone the effective freedom to copy and redistribute it, - with or without modifying it, either commercially or - noncommercially. Secondarily, this License preserves for the - author and publisher a way to get credit for their work, while not - being considered responsible for modifications made by others. - - This License is a kind of "copyleft", which means that derivative - works of the document must themselves be free in the same sense. - It complements the GNU General Public License, which is a copyleft - license designed for free software. - - We have designed this License in order to use it for manuals for - free software, because free software needs free documentation: a - free program should come with manuals providing the same freedoms - that the software does. But this License is not limited to - software manuals; it can be used for any textual work, regardless - of subject matter or whether it is published as a printed book. - We recommend this License principally for works whose purpose is - instruction or reference. - - 1. APPLICABILITY AND DEFINITIONS - - This License applies to any manual or other work, in any medium, - that contains a notice placed by the copyright holder saying it - can be distributed under the terms of this License. Such a notice - grants a world-wide, royalty-free license, unlimited in duration, - to use that work under the conditions stated herein. The - "Document", below, refers to any such manual or work. Any member - of the public is a licensee, and is addressed as "you". You - accept the license if you copy, modify or distribute the work in a - way requiring permission under copyright law. - - A "Modified Version" of the Document means any work containing the - Document or a portion of it, either copied verbatim, or with - modifications and/or translated into another language. - - A "Secondary Section" is a named appendix or a front-matter section - of the Document that deals exclusively with the relationship of the - publishers or authors of the Document to the Document's overall - subject (or to related matters) and contains nothing that could - fall directly within that overall subject. (Thus, if the Document - is in part a textbook of mathematics, a Secondary Section may not - explain any mathematics.) The relationship could be a matter of - historical connection with the subject or with related matters, or - of legal, commercial, philosophical, ethical or political position - regarding them. - - The "Invariant Sections" are certain Secondary Sections whose - titles are designated, as being those of Invariant Sections, in - the notice that says that the Document is released under this - License. If a section does not fit the above definition of - Secondary then it is not allowed to be designated as Invariant. - The Document may contain zero Invariant Sections. If the Document - does not identify any Invariant Sections then there are none. - - The "Cover Texts" are certain short passages of text that are - listed, as Front-Cover Texts or Back-Cover Texts, in the notice - that says that the Document is released under this License. A - Front-Cover Text may be at most 5 words, and a Back-Cover Text may - be at most 25 words. - - A "Transparent" copy of the Document means a machine-readable copy, - represented in a format whose specification is available to the - general public, that is suitable for revising the document - straightforwardly with generic text editors or (for images - composed of pixels) generic paint programs or (for drawings) some - widely available drawing editor, and that is suitable for input to - text formatters or for automatic translation to a variety of - formats suitable for input to text formatters. A copy made in an - otherwise Transparent file format whose markup, or absence of - markup, has been arranged to thwart or discourage subsequent - modification by readers is not Transparent. An image format is - not Transparent if used for any substantial amount of text. A - copy that is not "Transparent" is called "Opaque". - - Examples of suitable formats for Transparent copies include plain - ASCII without markup, Texinfo input format, LaTeX input format, - SGML or XML using a publicly available DTD, and - standard-conforming simple HTML, PostScript or PDF designed for - human modification. Examples of transparent image formats include - PNG, XCF and JPG. Opaque formats include proprietary formats that - can be read and edited only by proprietary word processors, SGML or - XML for which the DTD and/or processing tools are not generally - available, and the machine-generated HTML, PostScript or PDF - produced by some word processors for output purposes only. - - The "Title Page" means, for a printed book, the title page itself, - plus such following pages as are needed to hold, legibly, the - material this License requires to appear in the title page. For - works in formats which do not have any title page as such, "Title - Page" means the text near the most prominent appearance of the - work's title, preceding the beginning of the body of the text. - - A section "Entitled XYZ" means a named subunit of the Document - whose title either is precisely XYZ or contains XYZ in parentheses - following text that translates XYZ in another language. (Here XYZ - stands for a specific section name mentioned below, such as - "Acknowledgements", "Dedications", "Endorsements", or "History".) - To "Preserve the Title" of such a section when you modify the - Document means that it remains a section "Entitled XYZ" according - to this definition. - - The Document may include Warranty Disclaimers next to the notice - which states that this License applies to the Document. These - Warranty Disclaimers are considered to be included by reference in - this License, but only as regards disclaiming warranties: any other - implication that these Warranty Disclaimers may have is void and - has no effect on the meaning of this License. - - 2. VERBATIM COPYING - - You may copy and distribute the Document in any medium, either - commercially or noncommercially, provided that this License, the - copyright notices, and the license notice saying this License - applies to the Document are reproduced in all copies, and that you - add no other conditions whatsoever to those of this License. You - may not use technical measures to obstruct or control the reading - or further copying of the copies you make or distribute. However, - you may accept compensation in exchange for copies. If you - distribute a large enough number of copies you must also follow - the conditions in section 3. - - You may also lend copies, under the same conditions stated above, - and you may publicly display copies. - - 3. COPYING IN QUANTITY - - If you publish printed copies (or copies in media that commonly - have printed covers) of the Document, numbering more than 100, and - the Document's license notice requires Cover Texts, you must - enclose the copies in covers that carry, clearly and legibly, all - these Cover Texts: Front-Cover Texts on the front cover, and - Back-Cover Texts on the back cover. Both covers must also clearly - and legibly identify you as the publisher of these copies. The - front cover must present the full title with all words of the - title equally prominent and visible. You may add other material - on the covers in addition. Copying with changes limited to the - covers, as long as they preserve the title of the Document and - satisfy these conditions, can be treated as verbatim copying in - other respects. - - If the required texts for either cover are too voluminous to fit - legibly, you should put the first ones listed (as many as fit - reasonably) on the actual cover, and continue the rest onto - adjacent pages. - - If you publish or distribute Opaque copies of the Document - numbering more than 100, you must either include a - machine-readable Transparent copy along with each Opaque copy, or - state in or with each Opaque copy a computer-network location from - which the general network-using public has access to download - using public-standard network protocols a complete Transparent - copy of the Document, free of added material. If you use the - latter option, you must take reasonably prudent steps, when you - begin distribution of Opaque copies in quantity, to ensure that - this Transparent copy will remain thus accessible at the stated - location until at least one year after the last time you - distribute an Opaque copy (directly or through your agents or - retailers) of that edition to the public. - - It is requested, but not required, that you contact the authors of - the Document well before redistributing any large number of - copies, to give them a chance to provide you with an updated - version of the Document. - - 4. MODIFICATIONS - - You may copy and distribute a Modified Version of the Document - under the conditions of sections 2 and 3 above, provided that you - release the Modified Version under precisely this License, with - the Modified Version filling the role of the Document, thus - licensing distribution and modification of the Modified Version to - whoever possesses a copy of it. In addition, you must do these - things in the Modified Version: - - A. Use in the Title Page (and on the covers, if any) a title - distinct from that of the Document, and from those of - previous versions (which should, if there were any, be listed - in the History section of the Document). You may use the - same title as a previous version if the original publisher of - that version gives permission. - - B. List on the Title Page, as authors, one or more persons or - entities responsible for authorship of the modifications in - the Modified Version, together with at least five of the - principal authors of the Document (all of its principal - authors, if it has fewer than five), unless they release you - from this requirement. - - C. State on the Title page the name of the publisher of the - Modified Version, as the publisher. - - D. Preserve all the copyright notices of the Document. - - E. Add an appropriate copyright notice for your modifications - adjacent to the other copyright notices. - - F. Include, immediately after the copyright notices, a license - notice giving the public permission to use the Modified - Version under the terms of this License, in the form shown in - the Addendum below. - - G. Preserve in that license notice the full lists of Invariant - Sections and required Cover Texts given in the Document's - license notice. - - H. Include an unaltered copy of this License. - - I. Preserve the section Entitled "History", Preserve its Title, - and add to it an item stating at least the title, year, new - authors, and publisher of the Modified Version as given on - the Title Page. If there is no section Entitled "History" in - the Document, create one stating the title, year, authors, - and publisher of the Document as given on its Title Page, - then add an item describing the Modified Version as stated in - the previous sentence. - - J. Preserve the network location, if any, given in the Document - for public access to a Transparent copy of the Document, and - likewise the network locations given in the Document for - previous versions it was based on. These may be placed in - the "History" section. You may omit a network location for a - work that was published at least four years before the - Document itself, or if the original publisher of the version - it refers to gives permission. - - K. For any section Entitled "Acknowledgements" or "Dedications", - Preserve the Title of the section, and preserve in the - section all the substance and tone of each of the contributor - acknowledgements and/or dedications given therein. - - L. Preserve all the Invariant Sections of the Document, - unaltered in their text and in their titles. Section numbers - or the equivalent are not considered part of the section - titles. - - M. Delete any section Entitled "Endorsements". Such a section - may not be included in the Modified Version. - - N. Do not retitle any existing section to be Entitled - "Endorsements" or to conflict in title with any Invariant - Section. - - O. Preserve any Warranty Disclaimers. - - If the Modified Version includes new front-matter sections or - appendices that qualify as Secondary Sections and contain no - material copied from the Document, you may at your option - designate some or all of these sections as invariant. To do this, - add their titles to the list of Invariant Sections in the Modified - Version's license notice. These titles must be distinct from any - other section titles. - - You may add a section Entitled "Endorsements", provided it contains - nothing but endorsements of your Modified Version by various - parties--for example, statements of peer review or that the text - has been approved by an organization as the authoritative - definition of a standard. - - You may add a passage of up to five words as a Front-Cover Text, - and a passage of up to 25 words as a Back-Cover Text, to the end - of the list of Cover Texts in the Modified Version. Only one - passage of Front-Cover Text and one of Back-Cover Text may be - added by (or through arrangements made by) any one entity. If the - Document already includes a cover text for the same cover, - previously added by you or by arrangement made by the same entity - you are acting on behalf of, you may not add another; but you may - replace the old one, on explicit permission from the previous - publisher that added the old one. - - The author(s) and publisher(s) of the Document do not by this - License give permission to use their names for publicity for or to - assert or imply endorsement of any Modified Version. - - 5. COMBINING DOCUMENTS - - You may combine the Document with other documents released under - this License, under the terms defined in section 4 above for - modified versions, provided that you include in the combination - all of the Invariant Sections of all of the original documents, - unmodified, and list them all as Invariant Sections of your - combined work in its license notice, and that you preserve all - their Warranty Disclaimers. - - The combined work need only contain one copy of this License, and - multiple identical Invariant Sections may be replaced with a single - copy. If there are multiple Invariant Sections with the same name - but different contents, make the title of each such section unique - by adding at the end of it, in parentheses, the name of the - original author or publisher of that section if known, or else a - unique number. Make the same adjustment to the section titles in - the list of Invariant Sections in the license notice of the - combined work. - - In the combination, you must combine any sections Entitled - "History" in the various original documents, forming one section - Entitled "History"; likewise combine any sections Entitled - "Acknowledgements", and any sections Entitled "Dedications". You - must delete all sections Entitled "Endorsements." - - 6. COLLECTIONS OF DOCUMENTS - - You may make a collection consisting of the Document and other - documents released under this License, and replace the individual - copies of this License in the various documents with a single copy - that is included in the collection, provided that you follow the - rules of this License for verbatim copying of each of the - documents in all other respects. - - You may extract a single document from such a collection, and - distribute it individually under this License, provided you insert - a copy of this License into the extracted document, and follow - this License in all other respects regarding verbatim copying of - that document. - - 7. AGGREGATION WITH INDEPENDENT WORKS - - A compilation of the Document or its derivatives with other - separate and independent documents or works, in or on a volume of - a storage or distribution medium, is called an "aggregate" if the - copyright resulting from the compilation is not used to limit the - legal rights of the compilation's users beyond what the individual - works permit. When the Document is included an aggregate, this - License does not apply to the other works in the aggregate which - are not themselves derivative works of the Document. - - If the Cover Text requirement of section 3 is applicable to these - copies of the Document, then if the Document is less than one half - of the entire aggregate, the Document's Cover Texts may be placed - on covers that bracket the Document within the aggregate, or the - electronic equivalent of covers if the Document is in electronic - form. Otherwise they must appear on printed covers that bracket - the whole aggregate. - - 8. TRANSLATION - - Translation is considered a kind of modification, so you may - distribute translations of the Document under the terms of section - 4. Replacing Invariant Sections with translations requires special - permission from their copyright holders, but you may include - translations of some or all Invariant Sections in addition to the - original versions of these Invariant Sections. You may include a - translation of this License, and all the license notices in the - Document, and any Warrany Disclaimers, provided that you also - include the original English version of this License and the - original versions of those notices and disclaimers. In case of a - disagreement between the translation and the original version of - this License or a notice or disclaimer, the original version will - prevail. - - If a section in the Document is Entitled "Acknowledgements", - "Dedications", or "History", the requirement (section 4) to - Preserve its Title (section 1) will typically require changing the - actual title. - - 9. TERMINATION - - You may not copy, modify, sublicense, or distribute the Document - except as expressly provided for under this License. Any other - attempt to copy, modify, sublicense or distribute the Document is - void, and will automatically terminate your rights under this - License. However, parties who have received copies, or rights, - from you under this License will not have their licenses - terminated so long as such parties remain in full compliance. - - 10. FUTURE REVISIONS OF THIS LICENSE - - The Free Software Foundation may publish new, revised versions of - the GNU Free Documentation License from time to time. Such new - versions will be similar in spirit to the present version, but may - differ in detail to address new problems or concerns. See - `http://www.gnu.org/copyleft/'. - - Each version of the License is given a distinguishing version - number. If the Document specifies that a particular numbered - version of this License "or any later version" applies to it, you - have the option of following the terms and conditions either of - that specified version or of any later version that has been - published (not as a draft) by the Free Software Foundation. If - the Document does not specify a version number of this License, - you may choose any version ever published (not as a draft) by the - Free Software Foundation. - - ADDENDUM: How to use this License for your documents - ==================================================== - - To use this License in a document you have written, include a copy of - the License in the document and put the following copyright and license - notices just after the title page: - - Copyright (C) YEAR YOUR NAME. - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.2 - or any later version published by the Free Software Foundation; - with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. - A copy of the license is included in the section entitled ``GNU - Free Documentation License''. - - If you have Invariant Sections, Front-Cover Texts and Back-Cover - Texts, replace the "with...Texts." line with this: - - with the Invariant Sections being LIST THEIR TITLES, with - the Front-Cover Texts being LIST, and with the Back-Cover Texts - being LIST. - - If you have Invariant Sections without Cover Texts, or some other - combination of the three, merge those two alternatives to suit the - situation. - - If your document contains nontrivial examples of program code, we - recommend releasing these examples in parallel under your choice of - free software license, such as the GNU General Public License, to - permit their use in free software. - -  - File: gnat_ug_vxw.info, Node: Index, Prev: GNU Free Documentation License, Up: Top - - Index - ***** - - * Menu: - - * --GCC= (gnatchop): Switches for gnatchop. - * --GCC=compiler_name (gnatlink): Switches for gnatlink. - * --GCC=compiler_name (gnatmake): Switches for gnatmake. - * --GNATBIND=binder_name (gnatmake): Switches for gnatmake. - * --GNATLINK=linker_name (gnatmake): Switches for gnatmake. - * --LINK= (gnatlink): Switches for gnatlink. - * --RTS (gcc): Switches for gcc. - * --RTS (gnatbind): Summary of Binder Switches. - * --RTS (gnatfind): gnatfind Switches. - * --RTS (gnatls): Switches for gnatls. - * --RTS (gnatmake): Switches for gnatmake. - * --RTS (gnatxref): gnatxref Switches. - * -83 (gnathtml): Converting Ada Files to html with gnathtml. - * -A (gnatbind): Output Control. - * -A (gnatlink): Switches for gnatlink. - * -a (gnatls): Switches for gnatls. - * -A (gnatmake): Switches for gnatmake. - * -a (gnatmake): Switches for gnatmake. - * -aI (gnatmake): Switches for gnatmake. - * -aL (gnatmake): Switches for gnatmake. - * -aO (gnatmake): Switches for gnatmake. - * -B (gcc): Switches for gcc. - * -b (gcc): Switches for gcc. - * -b (gnatbind): Binder Error Message Control. - * -B (gnatlink): Switches for gnatlink. - * -b (gnatlink): Switches for gnatlink. - * -b (gnatmake): Switches for gnatmake. - * -bargs (gnatmake): Mode Switches for gnatmake. - * -c (gcc): Switches for gcc. - * -C (gnatbind): Output Control. - * -c (gnatbind): Output Control. - * -c (gnatchop): Switches for gnatchop. - * -C (gnatlink): Switches for gnatlink. - * -C (gnatmake): Switches for gnatmake. - * -c (gnatmake): Switches for gnatmake. - * -c (gnatname): Switches for gnatname. - * -cargs (gnatmake): Mode Switches for gnatmake. - * -d (gnathtml): Converting Ada Files to html with gnathtml. - * -d (gnatls): Switches for gnatls. - * -D (gnatname): Switches for gnatname. - * -d (gnatname): Switches for gnatname. - * -e (gnatbind): Output Control. - * -f (gnathtml): Converting Ada Files to html with gnathtml. - * -f (gnatlink): Switches for gnatlink. - * -f (gnatmake): Switches for gnatmake. - * -fno-inline (gcc): Inlining of Subprograms. - * -fstack-check: Stack Overflow Checking. - * -g (gcc): Switches for gcc. - * -g (gnatlink): Switches for gnatlink. - * -gnat83 (gcc): Compiling Ada 83 Programs. - * -gnata (gcc): Debugging and Assertion Control. - * -gnatb (gcc): Output and Error Message Control. - * -gnatc (gcc): Using gcc for Semantic Checking. - * -gnatD (gcc): Debugging Control. - * -gnatdc switch: GNAT Abnormal Termination or Failure to Terminate. - * -gnatE (gcc) <1>: Debugging Control. - * -gnatE (gcc): Run-Time Checks. - * -gnatem (gcc): Units to Sources Mapping Files. - * -gnatf (gcc): Output and Error Message Control. - * -gnatG (gcc): Debugging Control. - * -gnati (gcc): Character Set Control. - * -gnatk (gcc): File Naming Control. - * -gnatl (gcc): Output and Error Message Control. - * -gnatm (gcc): Output and Error Message Control. - * -gnatn (gcc): Inlining of Subprograms. - * -gnatN (gcc): Subprogram Inlining Control. - * -gnatn (gcc): Subprogram Inlining Control. - * -gnatN switch: Source Dependencies. - * -gnatn switch: Source Dependencies. - * -gnato (gcc) <1>: Controlling Run-Time Checks. - * -gnato (gcc): Run-Time Checks. - * -gnatp (gcc) <1>: Controlling Run-Time Checks. - * -gnatp (gcc): Run-Time Checks. - * -gnatq (gcc): Output and Error Message Control. - * -gnatR (gcc): Debugging Control. - * -gnats (gcc): Using gcc for Syntax Checking. - * -gnatt (gcc): Auxiliary Output Control. - * -gnatT (gcc): Run-Time Control. - * -gnatu (gcc): Auxiliary Output Control. - * -gnatU (gcc): Output and Error Message Control. - * -gnatv (gcc): Output and Error Message Control. - * -gnatW (gcc): Character Set Control. - * -gnatwA (gcc): Output and Error Message Control. - * -gnatwa (gcc): Output and Error Message Control. - * -gnatwB (gcc): Output and Error Message Control. - * -gnatwb (gcc): Output and Error Message Control. - * -gnatwC (gcc): Output and Error Message Control. - * -gnatwc (gcc): Output and Error Message Control. - * -gnatwD (gcc): Output and Error Message Control. - * -gnatwd (gcc): Output and Error Message Control. - * -gnatwe (gcc): Output and Error Message Control. - * -gnatwF (gcc): Output and Error Message Control. - * -gnatwf (gcc): Output and Error Message Control. - * -gnatwH (gcc): Output and Error Message Control. - * -gnatwh (gcc): Output and Error Message Control. - * -gnatwI (gcc): Output and Error Message Control. - * -gnatwi (gcc): Output and Error Message Control. - * -gnatwL (gcc): Output and Error Message Control. - * -gnatwl (gcc): Output and Error Message Control. - * -gnatwO (gcc): Output and Error Message Control. - * -gnatwo (gcc): Output and Error Message Control. - * -gnatwP (gcc): Output and Error Message Control. - * -gnatwp (gcc): Output and Error Message Control. - * -gnatwR (gcc): Output and Error Message Control. - * -gnatwr (gcc): Output and Error Message Control. - * -gnatws (gcc): Output and Error Message Control. - * -gnatwU (gcc): Output and Error Message Control. - * -gnatwu (gcc): Output and Error Message Control. - * -gnatx (gcc): Debugging Control. - * -h (gnatbind) <1>: Output Control. - * -h (gnatbind): Elaboration Control. - * -h (gnatls): Switches for gnatls. - * -h (gnatname): Switches for gnatname. - * -I (gcc): Switches for gcc. - * -I (gnathtml): Converting Ada Files to html with gnathtml. - * -I (gnatmake): Switches for gnatmake. - * -i (gnatmake): Switches for gnatmake. - * -I- (gcc): Switches for gcc. - * -I- (gnatmake): Switches for gnatmake. - * -j (gnatmake): Switches for gnatmake. - * -K (gnatbind): Output Control. - * -k (gnatchop): Switches for gnatchop. - * -k (gnatmake): Switches for gnatmake. - * -l (gnatbind): Output Control. - * -l (gnathtml): Converting Ada Files to html with gnathtml. - * -L (gnatmake): Switches for gnatmake. - * -l (gnatmake): Switches for gnatmake. - * -largs (gnatmake): Mode Switches for gnatmake. - * -M (gnatbind): Binder Error Message Control. - * -m (gnatbind): Binder Error Message Control. - * -M (gnatmake): Switches for gnatmake. - * -m (gnatmake): Switches for gnatmake. - * -mlongcall (gcc): Handling Relocation Issues for PowerPc Targets. - * -n (gnatbind): Binding with Non-Ada Main Programs. - * -n (gnatlink): Switches for gnatlink. - * -n (gnatmake): Switches for gnatmake. - * -nostdinc (gnatmake): Switches for gnatmake. - * -nostdlib (gnatmake): Switches for gnatmake. - * -O (gcc) <1>: Optimization Levels. - * -O (gcc): Switches for gcc. - * -o (gcc): Switches for gcc. - * -o (gnatbind): Output Control. - * -O (gnatbind): Output Control. - * -o (gnathtml): Converting Ada Files to html with gnathtml. - * -o (gnatlink): Switches for gnatlink. - * -o (gnatls): Switches for gnatls. - * -o (gnatmake): Switches for gnatmake. - * -p (gnatchop): Switches for gnatchop. - * -p (gnathtml): Converting Ada Files to html with gnathtml. - * -P (gnatname): Switches for gnatname. - * -pass-exit-codes (gcc): Auxiliary Output Control. - * -q (gnatchop): Switches for gnatchop. - * -q (gnatmake): Switches for gnatmake. - * -r (gnatbind): Output Control. - * -r (gnatchop): Switches for gnatchop. - * -S (gcc): Switches for gcc. - * -s (gnatbind): Consistency-Checking Modes. - * -s (gnatls): Switches for gnatls. - * -s (gnatmake): Switches for gnatmake. - * -sc (gnathtml): Converting Ada Files to html with gnathtml. - * -t (gnatbind): Binder Error Message Control. - * -t (gnathtml): Converting Ada Files to html with gnathtml. - * -u (gnatls): Switches for gnatls. - * -u (gnatmake): Switches for gnatmake. - * -V (gcc): Switches for gcc. - * -v (gcc): Switches for gcc. - * -v (gnatbind): Binder Error Message Control. - * -v (gnatchop): Switches for gnatchop. - * -v (gnatlink): Switches for gnatlink. - * -v (gnatmake): Switches for gnatmake. - * -v (gnatname): Switches for gnatname. - * -v -v (gnatlink): Switches for gnatlink. - * -w: Output and Error Message Control. - * -w (gnatchop): Switches for gnatchop. - * -we (gnatbind): Binder Error Message Control. - * -ws (gnatbind): Binder Error Message Control. - * -x (gnatbind): Consistency-Checking Modes. - * -z (gnatbind): Binding Programs with No Main Subprogram. - * -z (gnatmake): Switches for gnatmake. - * __gnat_finalize: Running gnatbind. - * __gnat_initialize: Running gnatbind. - * __gnat_set_globals: Running gnatbind. - * _main: The External Symbol Naming Scheme of GNAT. - * Access before elaboration: Run-Time Checks. - * Access-to-subprogram: Elaboration for Access-to-Subprogram Values. - * ACVC, Ada 83 tests: Compiling Ada 83 Programs. - * Ada <1>: Naming Conventions for GNAT Source Files. - * Ada: Search Paths for gnatbind. - * Ada 83 compatibility: Compiling Ada 83 Programs. - * Ada 95 Language Reference Manual: What You Should Know before Reading This Guide. - * Ada expressions: Using Ada Expressions. - * Ada Library Information files: The Ada Library Information Files. - * Ada.Characters.Latin_1: Latin-1. - * ADA_INCLUDE_PATH: Search Paths and the Run-Time Library (RTL). - * ADA_OBJECTS_PATH: Search Paths for gnatbind. - * adafinal <1>: Binding with Non-Ada Main Programs. - * adafinal: Running gnatbind. - * adainit <1>: Binding with Non-Ada Main Programs. - * adainit: Running gnatbind. - * Address Clauses, warnings: Output and Error Message Control. - * ali files: The Ada Library Information Files. - * Annex A: Naming Conventions for GNAT Source Files. - * Annex B: Naming Conventions for GNAT Source Files. - * Arbitrary File Naming Conventions: Handling Arbitrary File Naming Conventions Using gnatname. - * Asm: Calling Conventions. - * Assert: Debugging and Assertion Control. - * Assertions: Debugging and Assertion Control. - * Biased rounding: Output and Error Message Control. - * Binder consistency checks: Binder Error Message Control. - * Binder output file: Interfacing to C. - * Binder, multiple input files: Binding with Non-Ada Main Programs. - * Breakpoints and tasks: Ada Tasks. - * C: Calling Conventions. - * C++: Calling Conventions. - * Calling Conventions: Calling Conventions. - * Check, elaboration: Run-Time Checks. - * Check, overflow: Run-Time Checks. - * Check_CPU procedure: Check_CPU Procedure. - * Checks, access before elaboration: Run-Time Checks. - * Checks, division by zero: Run-Time Checks. - * Checks, elaboration: Checking the Elaboration Order in Ada 95. - * Checks, overflow: Controlling Run-Time Checks. - * Checks, suppressing: Run-Time Checks. - * COBOL: Calling Conventions. - * code page 437: Other 8-Bit Codes. - * code page 850: Other 8-Bit Codes. - * Combining GNAT switches: Switches for gcc. - * Command line length: Switches for gnatlink. - * Compilation model: The GNAT Compilation Model. - * Conditionals, constant: Output and Error Message Control. - * Configuration pragmas: Configuration Pragmas. - * Consistency checks, in binder: Binder Error Message Control. - * Convention Ada: Calling Conventions. - * Convention Asm: Calling Conventions. - * Convention Assembler: Calling Conventions. - * Convention C: Calling Conventions. - * Convention C++: Calling Conventions. - * Convention COBOL: Calling Conventions. - * Convention Default: Calling Conventions. - * Convention DLL: Calling Conventions. - * Convention External: Calling Conventions. - * Convention Fortran: Calling Conventions. - * Convention Stdcall: Calling Conventions. - * Convention Stubbed: Calling Conventions. - * Convention Win32: Calling Conventions. - * Conventions: Conventions. - * CR: Source Representation. - * Cyrillic: Other 8-Bit Codes. - * Debug: Debugging and Assertion Control. - * Debug Pool: Finding Memory Problems with GNAT Debug Pool. - * Debugger: Running and Debugging Ada Programs. - * Debugging: Running and Debugging Ada Programs. - * Debugging Generic Units: Debugging Generic Units. - * Debugging information, including: Switches for gnatlink. - * Debugging options: Debugging Control. - * Default: Calling Conventions. - * Dependencies, producing list: Switches for gnatmake. - * Dependency rules: The GNAT Make Program gnatmake. - * Dereferencing, implicit: Output and Error Message Control. - * Division by zero: Run-Time Checks. - * DLL: Calling Conventions. - * EABI (for VxWorks on PowerPc): Handling Relocation Issues for PowerPc Targets. - * Elaborate: Controlling the Elaboration Order in Ada 95. - * Elaborate_All: Controlling the Elaboration Order in Ada 95. - * Elaborate_Body: Controlling the Elaboration Order in Ada 95. - * Elaboration checks <1>: Checking the Elaboration Order in Ada 95. - * Elaboration checks: Run-Time Checks. - * Elaboration control <1>: Summary of Procedures for Elaboration Control. - * Elaboration control: Elaboration Order Handling in GNAT. - * Elaboration of library tasks: Elaboration Issues for Library Tasks. - * Elaboration order control: Comparison between GNAT and C/C++ Compilation Models. - * Elaboration, warnings: Output and Error Message Control. - * Eliminate: Eliminate Pragma. - * Embedded ABI (for VxWorks on PowerPc): Handling Relocation Issues for PowerPc Targets. - * End of source file: Source Representation. - * Error messages, suppressing: Output and Error Message Control. - * EUC Coding: Wide Character Encodings. - * Exceptions: Ada Exceptions. - * Export: The External Symbol Naming Scheme of GNAT. - * External: Calling Conventions. - * FDL, GNU Free Documentation License: GNU Free Documentation License. - * FF: Source Representation. - * File names <1>: Alternative File Naming Schemes. - * File names: Using Other File Names. - * File naming schemes, alternative: Alternative File Naming Schemes. - * Foreign Languages: Calling Conventions. - * Formals, unreferenced: Output and Error Message Control. - * Fortran: Calling Conventions. - * gdb: Running and Debugging Ada Programs. - * Generic formal parameters: Compiling Ada 83 Programs. - * Generics <1>: Debugging Generic Units. - * Generics: Generating Object Files. - * Glide: Introduction to Glide and GVD. - * GNAT <1>: Naming Conventions for GNAT Source Files. - * GNAT: Search Paths for gnatbind. - * GNAT Abnormal Termination or Failure to Terminate: GNAT Abnormal Termination or Failure to Terminate. - * GNAT compilation model: The GNAT Compilation Model. - * GNAT library: Comparison between GNAT and Conventional Ada Library Models. - * gnat.adc <1>: The Configuration Pragmas Files. - * gnat.adc: Using Other File Names. - * gnat1: Compiling Programs. - * gnat_argc: Command-Line Access. - * gnat_argv: Command-Line Access. - * GNAT_STACK_LIMIT: Stack Overflow Checking. - * gnatbind: Binding Using gnatbind. - * gnatchop: Renaming Files Using gnatchop. - * gnatelim: Reducing the Size of Ada Executables with gnatelim. - * gnatfind: The Cross-Referencing Tools gnatxref and gnatfind. - * gnatkr: File Name Krunching Using gnatkr. - * gnatlink: Linking Using gnatlink. - * gnatls: The GNAT Library Browser gnatls. - * gnatmake: The GNAT Make Program gnatmake. - * gnatprep: Preprocessing Using gnatprep. - * gnatstub: Creating Sample Bodies Using gnatstub. - * gnatxref: The Cross-Referencing Tools gnatxref and gnatfind. - * GNU make: Using gnatmake in a Makefile. - * GVD: Introduction to Glide and GVD. - * Hiding of Declarations: Output and Error Message Control. - * HT: Source Representation. - * Implicit dereferencing: Output and Error Message Control. - * Inline <1>: Inlining of Subprograms. - * Inline: Source Dependencies. - * Inlining: Comparison between GNAT and Conventional Ada Library Models. - * Inlining, warnings: Output and Error Message Control. - * Intel_CPU package body: Intel_CPU Package Body. - * Intel_CPU package specification: Intel_CPU Package Specification. - * Interfaces <1>: Naming Conventions for GNAT Source Files. - * Interfaces: Search Paths for gnatbind. - * Interfacing to Ada: Calling Conventions. - * Interfacing to Assembly: Calling Conventions. - * Interfacing to C: Calling Conventions. - * Interfacing to C++: Calling Conventions. - * Interfacing to COBOL: Calling Conventions. - * Interfacing to Fortran: Calling Conventions. - * Internal trees, writing to file: Auxiliary Output Control. - * Latin-1 <1>: Latin-1. - * Latin-1: Source Representation. - * Latin-2: Other 8-Bit Codes. - * Latin-3: Other 8-Bit Codes. - * Latin-4: Other 8-Bit Codes. - * Latin-5: Other 8-Bit Codes. - * LF: Source Representation. - * Library browser: The GNAT Library Browser gnatls. - * Library tasks, elaboration issues: Elaboration Issues for Library Tasks. - * Library, building, installing: GNAT and Libraries. - * Linker libraries: Switches for gnatmake. - * Machine_Overflows: Run-Time Checks. - * Main Program: Running gnatbind. - * make: Using the GNU make Utility. - * makefile: Using gnatmake in a Makefile. - * Mixed Language Programming: Mixed Language Programming. - * Multiple units, syntax checking: Using gcc for Syntax Checking. - * No code generated: Compiling Programs. - * No_Entry_Calls_In_Elaboration_Code: Elaboration Issues for Library Tasks. - * Object file list: Running gnatbind. - * Order of elaboration: Elaboration Order Handling in GNAT. - * Other Ada compilers: Calling Conventions. - * Overflow checks <1>: Controlling Run-Time Checks. - * Overflow checks: Run-Time Checks. - * Parallel make: Switches for gnatmake. - * Performance: Performance Considerations. - * PowerPc VxWorks, relocation issues: Handling Relocation Issues for PowerPc Targets. - * pragma Elaborate: Controlling the Elaboration Order in Ada 95. - * pragma Elaborate_All: Controlling the Elaboration Order in Ada 95. - * pragma Elaborate_Body: Controlling the Elaboration Order in Ada 95. - * pragma Inline: Inlining of Subprograms. - * pragma Preelaborate: Controlling the Elaboration Order in Ada 95. - * pragma Pure: Controlling the Elaboration Order in Ada 95. - * pragma Suppress: Controlling Run-Time Checks. - * pragma Unsuppress: Controlling Run-Time Checks. - * Pragmas, configuration: Configuration Pragmas. - * Preelaborate: Controlling the Elaboration Order in Ada 95. - * Pure: Controlling the Elaboration Order in Ada 95. - * Recompilation, by gnatmake: Notes on the Command Line. - * Relocation issues for PowerPc VxWorks targets: Handling Relocation Issues for PowerPc Targets. - * Rounding, biased: Output and Error Message Control. - * RTL: Switches for gcc. - * SDP_Table_Build: Running gnatbind. - * Search paths, for gnatmake: Switches for gnatmake. - * Shift JIS Coding: Wide Character Encodings. - * Source file, end: Source Representation. - * Source files, suppressing search: Switches for gnatmake. - * Source files, use by binder: Running gnatbind. - * Source_File_Name pragma <1>: Alternative File Naming Schemes. - * Source_File_Name pragma: Using Other File Names. - * Source_Reference: Switches for gnatchop. - * Stack Overflow Checking: Stack Overflow Checking. - * stack traceback: Stack Traceback. - * stack unwinding: Stack Traceback. - * Stdcall: Calling Conventions. - * stderr: Output and Error Message Control. - * stdout: Output and Error Message Control. - * storage, pool, memory corruption: Finding Memory Problems with GNAT Debug Pool. - * Stubbed: Calling Conventions. - * Style checking: Style Checking. - * SUB: Source Representation. - * Subunits: Generating Object Files. - * Suppress <1>: Controlling Run-Time Checks. - * Suppress: Run-Time Checks. - * Suppressing checks: Run-Time Checks. - * System <1>: Naming Conventions for GNAT Source Files. - * System: Search Paths for gnatbind. - * System.IO: Search Paths and the Run-Time Library (RTL). - * Task switching: Ada Tasks. - * Tasks: Ada Tasks. - * Time Slicing: Run-Time Control. - * Time stamp checks, in binder: Binder Error Message Control. - * Tornado II Project: Using GNAT from the Tornado 2 Project Facility. - * traceback: Stack Traceback. - * traceback, non-symbolic: Non-Symbolic Traceback. - * traceback, symbolic: Symbolic Traceback. - * Tree file: Tree Files. - * Typographical conventions: Conventions. - * Unsuppress <1>: Controlling Run-Time Checks. - * Unsuppress: Run-Time Checks. - * Upper-Half Coding: Wide Character Encodings. - * Validity Checking: Validity Checking. - * Version skew (avoided by gnatmake): Building a Simple Ada Program. - * Volatile parameter: The Volatile Parameter. - * VT: Source Representation. - * VxWorks kernel (relocation issues on PowerPc): Handling Relocation Issues for PowerPc Targets. - * VxWorks PowerPc, relocation issues: Handling Relocation Issues for PowerPc Targets. - * Warning messages: Output and Error Message Control. - * Warnings: Binder Error Message Control. - * Warnings, treat as error: Output and Error Message Control. - * Win32: Calling Conventions. - * Writing internal trees: Auxiliary Output Control. - * Zero Cost Exceptions: Running gnatbind. - - -  - Tag Table: - Node: Top91 - Node: About This Guide9418 - Node: What This Guide Contains9943 - Node: What You Should Know before Reading This Guide14413 - Node: Related Information14821 - Node: Conventions15544 - Node: Preliminary Note for Cross Platform Users16438 - Node: Getting Started with GNAT18228 - Node: Running GNAT19131 - Node: Building a Simple Ada Program19738 - Node: Executing a Program on VxWorks23118 - Node: Loading and Running the Program23564 - Node: Unloading the Program25297 - Node: Running a Program with Multiple Units26846 - Node: Using the gnatmake Utility29118 - Node: Introduction to Glide and GVD31532 - Node: Building a New Program with Glide32274 - Node: Simple Debugging with GVD37612 - Node: Other Glide Features40649 - Node: The GNAT Compilation Model42532 - Node: Source Representation43862 - Node: Foreign Language Representation45648 - Node: Latin-146134 - Node: Other 8-Bit Codes47000 - Node: Wide Character Encodings49093 - Node: File Naming Rules52899 - Node: Using Other File Names55188 - Node: Alternative File Naming Schemes57541 - Node: Generating Object Files62773 - Node: Source Dependencies65487 - Node: The Ada Library Information Files69010 - Node: Binding an Ada Program71143 - Node: Mixed Language Programming72991 - Node: Interfacing to C73268 - Node: Calling Conventions75774 - Node: Building Mixed Ada & C++ Programs81698 - Node: Interfacing to C++82779 - Node: Linking a Mixed C++ & Ada Program83819 - Node: A Simple Example86853 - Node: Adapting the Run Time to a New C++ Compiler89899 - Node: Comparison between GNAT and C/C++ Compilation Models90915 - Node: Comparison between GNAT and Conventional Ada Library Models92644 - Node: Compiling Using gcc95295 - Node: Compiling Programs95790 - Node: Switches for gcc98740 - Node: Output and Error Message Control107924 - Node: Debugging and Assertion Control126010 - Node: Validity Checking127340 - Node: Style Checking133487 - Node: Run-Time Checks144960 - Node: Stack Overflow Checking148944 - Node: Run-Time Control151031 - Node: Using gcc for Syntax Checking151925 - Node: Using gcc for Semantic Checking153424 - Node: Compiling Ada 83 Programs154902 - Node: Character Set Control156323 - Node: File Naming Control159250 - Node: Subprogram Inlining Control159758 - Node: Auxiliary Output Control161099 - Node: Debugging Control162530 - Node: Units to Sources Mapping Files169970 - Node: Search Paths and the Run-Time Library (RTL)171360 - Node: Order of Compilation Issues174531 - Node: Examples176232 - Node: Binding Using gnatbind176800 - Node: Running gnatbind178662 - Node: Generating the Binder Program in C209423 - Node: Consistency-Checking Modes226868 - Node: Binder Error Message Control228363 - Node: Elaboration Control230629 - Node: Output Control231854 - Node: Binding with Non-Ada Main Programs234295 - Node: Binding Programs with No Main Subprogram237435 - Node: Summary of Binder Switches238258 - Node: Command-Line Access241581 - Node: Search Paths for gnatbind242586 - Node: Examples of gnatbind Usage245152 - Node: Linking Using gnatlink246923 - Node: Running gnatlink247662 - Node: Switches for gnatlink249647 - Node: Setting Stack Size from gnatlink253920 - Node: Setting Heap Size from gnatlink254774 - Node: The GNAT Make Program gnatmake255589 - Node: Running gnatmake257040 - Node: Switches for gnatmake258699 - Node: Mode Switches for gnatmake271663 - Node: Notes on the Command Line272821 - Node: How gnatmake Works275717 - Node: Examples of gnatmake Usage277887 - Node: Renaming Files Using gnatchop279014 - Node: Handling Files with Multiple Units279603 - Node: Operating gnatchop in Compilation Mode280924 - Node: Command Line for gnatchop284247 - Node: Switches for gnatchop285712 - Node: Examples of gnatchop Usage289493 - Node: Configuration Pragmas290852 - Node: Handling of Configuration Pragmas292404 - Node: The Configuration Pragmas Files293263 - Node: Handling Arbitrary File Naming Conventions Using gnatname294626 - Node: Arbitrary File Naming Conventions295034 - Node: Running gnatname296295 - Node: Switches for gnatname297754 - Node: Examples of gnatname Usage300888 - Node: GNAT Project Manager301689 - Node: Introduction302351 - Node: Project Files303447 - Node: Examples of Project Files306650 - Node: Common Sources with Different Switches and Different Output Directories307124 - Node: Source Files310155 - Node: Specifying the Object Directory310631 - Node: Specifying the Exec Directory311563 - Node: Project File Packages312331 - Node: Specifying Switch Settings313340 - Node: Main Subprograms315308 - Node: Source File Naming Conventions315972 - Node: Source Language(s)316472 - Node: Using External Variables316913 - Node: Importing Other Projects319754 - Node: Extending a Project322862 - Node: Project File Syntax325333 - Node: Basic Syntax326695 - Node: Packages327703 - Node: Expressions328857 - Node: String Types330755 - Node: Variables332058 - Node: Attributes335086 - Node: Associative Array Attributes340519 - Node: case Constructions341364 - Node: Objects and Sources in Project Files343161 - Node: Object Directory343741 - Node: Exec Directory344732 - Node: Source Directories345561 - Node: Source File Names346928 - Node: Importing Projects349265 - Node: Project Extension352044 - Node: External References in Project Files353723 - Node: Packages in Project Files355466 - Node: Variables from Imported Projects357862 - Node: Naming Schemes359534 - Node: Library Projects363507 - Node: Switches Related to Project Files366401 - Node: Tools Supporting Project Files368105 - Node: gnatmake and Project Files368437 - Node: Switches and Project Files368890 - Node: Project Files and Main Subprograms374634 - Node: The GNAT Driver and Project Files376559 - Node: Glide and Project Files380227 - Node: An Extended Example381146 - Node: Project File Complete Syntax384141 - Node: Elaboration Order Handling in GNAT386933 - Node: Elaboration Code in Ada 95387953 - Node: Checking the Elaboration Order in Ada 95392599 - Node: Controlling the Elaboration Order in Ada 95396600 - Node: Controlling Elaboration in GNAT - Internal Calls404917 - Node: Controlling Elaboration in GNAT - External Calls410624 - Node: Default Behavior in GNAT - Ensuring Safety414358 - Node: Elaboration Issues for Library Tasks418441 - Node: Mixing Elaboration Models431646 - Node: What to Do If the Default Elaboration Behavior Fails434147 - Node: Elaboration for Access-to-Subprogram Values444462 - Node: Summary of Procedures for Elaboration Control446269 - Node: Other Elaboration Order Considerations447432 - Node: The Cross-Referencing Tools gnatxref and gnatfind452661 - Node: gnatxref Switches454325 - Node: gnatfind Switches457764 - Node: Project Files for gnatxref and gnatfind463360 - Node: Regular Expressions in gnatfind and gnatxref466466 - Node: Examples of gnatxref Usage469245 - Node: Examples of gnatfind Usage473044 - Node: File Name Krunching Using gnatkr475247 - Node: About gnatkr475861 - Node: Using gnatkr477183 - Node: Krunching Method478074 - Node: Examples of gnatkr Usage481311 - Node: Preprocessing Using gnatprep481801 - Node: Using gnatprep482312 - Node: Switches for gnatprep483164 - Node: Form of Definitions File485286 - Node: Form of Input Text for gnatprep486025 - Node: The GNAT Library Browser gnatls489644 - Node: Running gnatls490173 - Node: Switches for gnatls492683 - Node: Examples of gnatls Usage494578 - Node: GNAT and Libraries496767 - Node: Creating an Ada Library497295 - Node: Installing an Ada Library500135 - Node: Using an Ada Library502492 - Node: Creating an Ada Library to be Used in a Non-Ada Context503683 - Node: Rebuilding the GNAT Run-Time Library509651 - Node: Using the GNU make Utility510558 - Node: Using gnatmake in a Makefile511412 - Node: Automatically Creating a List of Directories515620 - Node: Generating the Command Line Switches518758 - Node: Overcoming Command Line Length Limits519736 - Node: Finding Memory Problems with GNAT Debug Pool522041 - Node: Creating Sample Bodies Using gnatstub526735 - Node: Running gnatstub527530 - Node: Switches for gnatstub528284 - Node: Reducing the Size of Ada Executables with gnatelim530416 - Node: About gnatelim530949 - Node: Eliminate Pragma532037 - Node: Tree Files533045 - Node: Preparing Tree and Bind Files for gnatelim533934 - Node: Running gnatelim535936 - Node: Correcting the List of Eliminate Pragmas537931 - Node: Making Your Executables Smaller538712 - Node: Summary of the gnatelim Usage Cycle539534 - Node: Other Utility Programs540343 - Node: Using Other Utility Programs with GNAT540871 - Node: The gnatpsta Utility Program541559 - Node: The External Symbol Naming Scheme of GNAT542853 - Node: Ada Mode for Glide544850 - Node: Converting Ada Files to html with gnathtml546801 - Node: Installing gnathtml550374 - Node: Running and Debugging Ada Programs551038 - Node: The GNAT Debugger GDB552432 - Node: Running GDB555550 - Node: Introduction to GDB Commands555848 - Node: Using Ada Expressions560713 - Node: Calling User-Defined Subprograms561907 - Node: Using the Next Command in a Function564327 - Node: Ada Exceptions565492 - Node: Ada Tasks566446 - Node: Debugging Generic Units568509 - Node: GNAT Abnormal Termination or Failure to Terminate569912 - Node: Naming Conventions for GNAT Source Files572491 - Node: Getting Internal Debugging Information575082 - Node: Stack Traceback576284 - Node: Non-Symbolic Traceback577321 - Node: Tracebacks From an Unhandled Exception577782 - Node: Tracebacks From Exception Occurrences (non-symbolic)581719 - Node: Tracebacks From Anywhere in a Program (non-symbolic)583002 - Node: Symbolic Traceback584845 - Node: Tracebacks From Exception Occurrences (symbolic)585568 - Node: Tracebacks From Anywhere in a Program (symbolic)586977 - Node: Inline Assembler588169 - Node: Basic Assembler Syntax589855 - Node: A Simple Example of Inline Assembler591632 - Node: Output Variables in Inline Assembler594799 - Node: Input Variables in Inline Assembler602179 - Node: Inlining Inline Assembler Code604687 - Node: Other Asm Functionality606621 - Node: The Clobber Parameter607056 - Node: The Volatile Parameter609055 - Node: A Complete Example610247 - Node: Check_CPU Procedure611221 - Node: Intel_CPU Package Specification626268 - Node: Intel_CPU Package Body635696 - Node: VxWorks Topics644854 - Node: Kernel Configuration for VxWorks645494 - Node: Kernel Compilation Issues for VxWorks646204 - Node: Handling Relocation Issues for PowerPc Targets647376 - Node: Support for Software Floating Point on PowerPC Processors651803 - Node: Interrupt Handling for VxWorks653003 - Node: Simulating Command Line Arguments for VxWorks670248 - Node: Debugging Issues for VxWorks672353 - Node: Using GNAT from the Tornado 2 Project Facility681774 - Node: The GNAT Toolchain as Used from the Tornado 2 Project Facility682607 - Node: Building a Simple Application683658 - Node: Mixing C and Ada Code in a Tornado 2 Project684605 - Node: Compilation Switches685174 - Node: Autoscale and Minimal Kernel Configuration687485 - Node: Adapting BSPs to GNAT688184 - Node: Using GNAT Project Files in a Tornado 2 Project689537 - Node: Frequently Asked Questions for VxWorks690305 - Node: LynxOS Topics693270 - Node: Getting Started with GNAT on LynxOS693705 - Node: Kernel Configuration for LynxOS694913 - Node: Patch Level Issues for LynxOS695784 - Node: Debugging Issues for LynxOS696171 - Node: An Example Debugging Session for LynxOS699967 - Node: Performance Considerations701986 - Node: Controlling Run-Time Checks703017 - Node: Optimization Levels705002 - Node: Debugging Optimized Code706859 - Node: Inlining of Subprograms710592 - Node: GNU Free Documentation License714116 - Node: Index736545 -  - End Tag Table --- 0 ---- diff -Nrc3pad gcc-3.3.2/gcc/ada/gnat_ug_wnt.info gcc-3.3.3/gcc/ada/gnat_ug_wnt.info *** gcc-3.3.2/gcc/ada/gnat_ug_wnt.info Thu Oct 16 20:23:59 2003 --- gcc-3.3.3/gcc/ada/gnat_ug_wnt.info Thu Jan 1 00:00:00 1970 *************** *** 1,19316 **** - This is ada/gnat_ug_wnt.info, produced by makeinfo version 4.2 from - ada/gnat_ug_wnt.texi. - - Copyright (C) 1995-2002, Free Software Foundation - - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.2 or - any later version published by the Free Software Foundation; with the - Invariant Sections being "GNU Free Documentation License", with the - Front-Cover Texts being "GNAT User's Guide for Windows NT", and with no - Back-Cover Texts. A copy of the license is included in the section - entitled "GNU Free Documentation License". -  - File: gnat_ug_wnt.info, Node: Top, Next: About This Guide, Prev: (dir), Up: (dir) - - GNAT User's Guide - ***************** - - GNAT User's Guide for Windows NT - - GNAT, The GNU Ada 95 Compiler - - GNAT Version for GCC 3.3.2 - - Ada Core Technologies, Inc. - - Copyright (C) 1995-2002, Free Software Foundation - - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.2 or - any later version published by the Free Software Foundation; with the - Invariant Sections being "GNU Free Documentation License", with the - Front-Cover Texts being "GNAT User's Guide for Windows NT", and with no - Back-Cover Texts. A copy of the license is included in the section - entitled "GNU Free Documentation License". - * Menu: - - * About This Guide:: - * Getting Started with GNAT:: - * The GNAT Compilation Model:: - * Compiling Using gcc:: - * Binding Using gnatbind:: - * Linking Using gnatlink:: - * The GNAT Make Program gnatmake:: - * Renaming Files Using gnatchop:: - * Configuration Pragmas:: - * Handling Arbitrary File Naming Conventions Using gnatname:: - * GNAT Project Manager:: - * Elaboration Order Handling in GNAT:: - * The Cross-Referencing Tools gnatxref and gnatfind:: - * File Name Krunching Using gnatkr:: - * Preprocessing Using gnatprep:: - * The GNAT Library Browser gnatls:: - * GNAT and Libraries:: - * Using the GNU make Utility:: - * Finding Memory Problems with gnatmem:: - * Finding Memory Problems with GNAT Debug Pool:: - * Creating Sample Bodies Using gnatstub:: - * Reducing the Size of Ada Executables with gnatelim:: - * Other Utility Programs:: - * Running and Debugging Ada Programs:: - * Inline Assembler:: - * Microsoft Windows Topics:: - * Performance Considerations:: - * GNU Free Documentation License:: - * Index:: - - --- The Detailed Node Listing --- - - About This Guide - - * What This Guide Contains:: - * What You Should Know before Reading This Guide:: - * Related Information:: - * Conventions:: - - - Getting Started with GNAT - - * Running GNAT:: - * Running a Simple Ada Program:: - * Running a Program with Multiple Units:: - * Using the gnatmake Utility:: - - The GNAT Compilation Model - - * Source Representation:: - * Foreign Language Representation:: - * File Naming Rules:: - * Using Other File Names:: - * Alternative File Naming Schemes:: - * Generating Object Files:: - * Source Dependencies:: - * The Ada Library Information Files:: - * Binding an Ada Program:: - * Mixed Language Programming:: - * Building Mixed Ada & C++ Programs:: - * Comparison between GNAT and C/C++ Compilation Models:: - * Comparison between GNAT and Conventional Ada Library Models:: - - Foreign Language Representation - - * Latin-1:: - * Other 8-Bit Codes:: - * Wide Character Encodings:: - - Compiling Ada Programs With gcc - - * Compiling Programs:: - * Switches for gcc:: - * Search Paths and the Run-Time Library (RTL):: - * Order of Compilation Issues:: - * Examples:: - - Switches for gcc - - * Output and Error Message Control:: - * Debugging and Assertion Control:: - * Run-Time Checks:: - * Stack Overflow Checking:: - * Run-Time Control:: - * Validity Checking:: - * Style Checking:: - * Using gcc for Syntax Checking:: - * Using gcc for Semantic Checking:: - * Compiling Ada 83 Programs:: - * Character Set Control:: - * File Naming Control:: - * Subprogram Inlining Control:: - * Auxiliary Output Control:: - * Debugging Control:: - * Units to Sources Mapping Files:: - - Binding Ada Programs With gnatbind - - * Running gnatbind:: - * Generating the Binder Program in C:: - * Consistency-Checking Modes:: - * Binder Error Message Control:: - * Elaboration Control:: - * Output Control:: - * Binding with Non-Ada Main Programs:: - * Binding Programs with No Main Subprogram:: - * Summary of Binder Switches:: - * Command-Line Access:: - * Search Paths for gnatbind:: - * Examples of gnatbind Usage:: - - Linking Using gnatlink - - * Running gnatlink:: - * Switches for gnatlink:: - * Setting Stack Size from gnatlink:: - * Setting Heap Size from gnatlink:: - - The GNAT Make Program gnatmake - - * Running gnatmake:: - * Switches for gnatmake:: - * Mode Switches for gnatmake:: - * Notes on the Command Line:: - * How gnatmake Works:: - * Examples of gnatmake Usage:: - - Renaming Files Using gnatchop - - * Handling Files with Multiple Units:: - * Operating gnatchop in Compilation Mode:: - * Command Line for gnatchop:: - * Switches for gnatchop:: - * Examples of gnatchop Usage:: - - Configuration Pragmas - - * Handling of Configuration Pragmas:: - * The Configuration Pragmas Files:: - - Handling Arbitrary File Naming Conventions Using gnatname - - * Arbitrary File Naming Conventions:: - * Running gnatname:: - * Switches for gnatname:: - * Examples of gnatname Usage:: - - GNAT Project Manager - - * Introduction:: - * Examples of Project Files:: - * Project File Syntax:: - * Objects and Sources in Project Files:: - * Importing Projects:: - * Project Extension:: - * External References in Project Files:: - * Packages in Project Files:: - * Variables from Imported Projects:: - * Naming Schemes:: - * Library Projects:: - * Switches Related to Project Files:: - * Tools Supporting Project Files:: - * An Extended Example:: - * Project File Complete Syntax:: - - Elaboration Order Handling in GNAT - - * Elaboration Code in Ada 95:: - * Checking the Elaboration Order in Ada 95:: - * Controlling the Elaboration Order in Ada 95:: - * Controlling Elaboration in GNAT - Internal Calls:: - * Controlling Elaboration in GNAT - External Calls:: - * Default Behavior in GNAT - Ensuring Safety:: - * Elaboration Issues for Library Tasks:: - * Mixing Elaboration Models:: - * What to Do If the Default Elaboration Behavior Fails:: - * Elaboration for Access-to-Subprogram Values:: - * Summary of Procedures for Elaboration Control:: - * Other Elaboration Order Considerations:: - - The Cross-Referencing Tools gnatxref and gnatfind - - * gnatxref Switches:: - * gnatfind Switches:: - * Project Files for gnatxref and gnatfind:: - * Regular Expressions in gnatfind and gnatxref:: - * Examples of gnatxref Usage:: - * Examples of gnatfind Usage:: - - File Name Krunching Using gnatkr - - * About gnatkr:: - * Using gnatkr:: - * Krunching Method:: - * Examples of gnatkr Usage:: - - Preprocessing Using gnatprep - - * Using gnatprep:: - * Switches for gnatprep:: - * Form of Definitions File:: - * Form of Input Text for gnatprep:: - - - The GNAT Library Browser gnatls - - * Running gnatls:: - * Switches for gnatls:: - * Examples of gnatls Usage:: - - - GNAT and Libraries - - * Creating an Ada Library:: - * Installing an Ada Library:: - * Using an Ada Library:: - * Creating an Ada Library to be Used in a Non-Ada Context:: - * Rebuilding the GNAT Run-Time Library:: - - Using the GNU make Utility - - * Using gnatmake in a Makefile:: - * Automatically Creating a List of Directories:: - * Generating the Command Line Switches:: - * Overcoming Command Line Length Limits:: - - Finding Memory Problems with gnatmem - - * Running gnatmem (GDB Mode):: - * Running gnatmem (GMEM Mode):: - * Switches for gnatmem:: - * Examples of gnatmem Usage:: - * GDB and GMEM Modes:: - * Implementation Note:: - - - Finding Memory Problems with GNAT Debug Pool - - Creating Sample Bodies Using gnatstub - - * Running gnatstub:: - * Switches for gnatstub:: - - Reducing the Size of Ada Executables with gnatelim - - * About gnatelim:: - * Eliminate Pragma:: - * Tree Files:: - * Preparing Tree and Bind Files for gnatelim:: - * Running gnatelim:: - * Correcting the List of Eliminate Pragmas:: - * Making Your Executables Smaller:: - * Summary of the gnatelim Usage Cycle:: - - Other Utility Programs - - * Using Other Utility Programs with GNAT:: - * The gnatpsta Utility Program:: - * The External Symbol Naming Scheme of GNAT:: - * Ada Mode for Glide:: - * Converting Ada Files to html with gnathtml:: - - - Running and Debugging Ada Programs - - * The GNAT Debugger GDB:: - * Running GDB:: - * Introduction to GDB Commands:: - * Using Ada Expressions:: - * Calling User-Defined Subprograms:: - * Using the Next Command in a Function:: - * Ada Exceptions:: - * Ada Tasks:: - * Debugging Generic Units:: - * GNAT Abnormal Termination or Failure to Terminate:: - * Naming Conventions for GNAT Source Files:: - * Getting Internal Debugging Information:: - * Stack Traceback:: - - Inline Assembler - - * Basic Assembler Syntax:: - * A Simple Example of Inline Assembler:: - * Output Variables in Inline Assembler:: - * Input Variables in Inline Assembler:: - * Inlining Inline Assembler Code:: - * Other Asm Functionality:: - * A Complete Example:: - - Microsoft Windows Topics - - * Using GNAT on Windows:: - * GNAT Setup Tool:: - * CONSOLE and WINDOWS subsystems:: - * Temporary Files:: - * Mixed-Language Programming on Windows:: - * Windows Calling Conventions:: - * Introduction to Dynamic Link Libraries (DLLs):: - * Using DLLs with GNAT:: - * Building DLLs with GNAT:: - * GNAT and Windows Resources:: - * GNAT and COM/DCOM Objects:: - - - Performance Considerations - - * Controlling Run-Time Checks:: - * Optimization Levels:: - * Debugging Optimized Code:: - * Inlining of Subprograms:: - - * Index:: - -  - File: gnat_ug_wnt.info, Node: About This Guide, Next: Getting Started with GNAT, Prev: Top, Up: Top - - About This Guide - **************** - - This guide describes the use of GNAT, a compiler and software - development toolset for the full Ada 95 programming language. It - describes the features of the compiler and tools, and details how to - use them to build Ada 95 applications. - - * Menu: - - * What This Guide Contains:: - * What You Should Know before Reading This Guide:: - * Related Information:: - * Conventions:: - -  - File: gnat_ug_wnt.info, Node: What This Guide Contains, Next: What You Should Know before Reading This Guide, Up: About This Guide - - What This Guide Contains - ======================== - - This guide contains the following chapters: - * *Note Getting Started with GNAT::, describes how to get started - compiling and running Ada programs with the GNAT Ada programming - environment. - - * *Note The GNAT Compilation Model::, describes the compilation - model used by GNAT. - - * *Note Compiling Using gcc::, describes how to compile Ada programs - with `gcc', the Ada compiler. - - * *Note Binding Using gnatbind::, describes how to perform binding - of Ada programs with `gnatbind', the GNAT binding utility. - - * *Note Linking Using gnatlink::, describes `gnatlink', a program - that provides for linking using the GNAT run-time library to - construct a program. `gnatlink' can also incorporate foreign - language object units into the executable. - - * *Note The GNAT Make Program gnatmake::, describes `gnatmake', a - utility that automatically determines the set of sources needed by - an Ada compilation unit, and executes the necessary compilations - binding and link. - - * *Note Renaming Files Using gnatchop::, describes `gnatchop', a - utility that allows you to preprocess a file that contains Ada - source code, and split it into one or more new files, one for each - compilation unit. - - * *Note Configuration Pragmas::, describes the configuration pragmas - handled by GNAT. - - * *Note Handling Arbitrary File Naming Conventions Using gnatname::, - shows how to override the default GNAT file naming conventions, - either for an individual unit or globally. - - * *Note GNAT Project Manager::, describes how to use project files - to organize large projects. - - * *Note Elaboration Order Handling in GNAT::, describes how GNAT - helps you deal with elaboration order issues. - - * *Note The Cross-Referencing Tools gnatxref and gnatfind::, - discusses `gnatxref' and `gnatfind', two tools that provide an easy - way to navigate through sources. - - * *Note File Name Krunching Using gnatkr::, describes the `gnatkr' - file name krunching utility, used to handle shortened file names - on operating systems with a limit on the length of names. - - * *Note Preprocessing Using gnatprep::, describes `gnatprep', a - preprocessor utility that allows a single source file to be used to - generate multiple or parameterized source files, by means of macro - substitution. - - * *Note The GNAT Library Browser gnatls::, describes `gnatls', a - utility that displays information about compiled units, including - dependences on the corresponding sources files, and consistency of - compilations. - - * *Note GNAT and Libraries::, describes the process of creating and - using Libraries with GNAT. It also describes how to recompile the - GNAT run-time library. - - * *Note Using the GNU make Utility::, describes some techniques for - using the GNAT toolset in Makefiles. - - * *Note Finding Memory Problems with gnatmem::, describes `gnatmem', - a utility that monitors dynamic allocation and deallocation - activity in a program, and displays information about incorrect - deallocations and sources of possible memory leaks. - - * *Note Finding Memory Problems with GNAT Debug Pool::, describes - how to use the GNAT-specific Debug Pool in order to detect as - early as possible the use of incorrect memory references. - - * *Note Creating Sample Bodies Using gnatstub::, discusses - `gnatstub', a utility that generates empty but compilable bodies - for library units. - - * *Note Reducing the Size of Ada Executables with gnatelim::, - describes `gnatelim', a tool which detects unused subprograms and - helps the compiler to create a smaller executable for the program. - - * *Note Other Utility Programs::, discusses several other GNAT - utilities, including `gnatpsta'. - - * *Note Running and Debugging Ada Programs::, describes how to run - and debug Ada programs. - - * *Note Inline Assembler::, shows how to use the inline assembly - facility in an Ada program. - - * *Note Performance Considerations::, reviews the trade offs between - using defaults or options in program development. - -  - File: gnat_ug_wnt.info, Node: What You Should Know before Reading This Guide, Next: Related Information, Prev: What This Guide Contains, Up: About This Guide - - What You Should Know before Reading This Guide - ============================================== - - This user's guide assumes that you are familiar with Ada 95 language, as - described in the International Standard ANSI/ISO/IEC-8652:1995, Jan - 1995. - -  - File: gnat_ug_wnt.info, Node: Related Information, Next: Conventions, Prev: What You Should Know before Reading This Guide, Up: About This Guide - - Related Information - =================== - - For further information about related tools, refer to the following - documents: - - * `GNAT Reference Manual', which contains all reference material for - the GNAT implementation of Ada 95. - - * `Ada 95 Language Reference Manual', which contains all reference - material for the Ada 95 programming language. - - * `Debugging with GDB' contains all details on the use of the GNU - source-level debugger. - - * `GNU Emacs Manual' contains full information on the extensible - editor and programming environment Emacs. - - -  - File: gnat_ug_wnt.info, Node: Conventions, Prev: Related Information, Up: About This Guide - - Conventions - =========== - - Following are examples of the typographical and graphic conventions used - in this guide: - - * `Functions', `utility program names', `standard names', and - `classes'. - - * `Option flags' - - * `File Names', `button names', and `field names'. - - * VARIABLES. - - * _Emphasis_. - - * [optional information or parameters] - - * Examples are described by text - and then shown this way. - - Commands that are entered by the user are preceded in this manual by the - characters "`$ '" (dollar sign followed by space). If your system uses - this sequence as a prompt, then the commands will appear exactly as you - see them in the manual. If your system uses some other prompt, then the - command will appear with the `$' replaced by whatever prompt character - you are using. - -  - File: gnat_ug_wnt.info, Node: Getting Started with GNAT, Next: The GNAT Compilation Model, Prev: About This Guide, Up: Top - - Getting Started with GNAT - ************************* - - This chapter describes some simple ways of using GNAT to build - executable Ada programs. - - * Menu: - - * Running GNAT:: - * Running a Simple Ada Program:: - - * Running a Program with Multiple Units:: - - * Using the gnatmake Utility:: - * Introduction to Glide and GVD:: - -  - File: gnat_ug_wnt.info, Node: Running GNAT, Next: Running a Simple Ada Program, Up: Getting Started with GNAT - - Running GNAT - ============ - - Three steps are needed to create an executable file from an Ada source - file: - - 1. The source file(s) must be compiled. - - 2. The file(s) must be bound using the GNAT binder. - - 3. All appropriate object files must be linked to produce an - executable. - - All three steps are most commonly handled by using the `gnatmake' - utility program that, given the name of the main program, automatically - performs the necessary compilation, binding and linking steps. - -  - File: gnat_ug_wnt.info, Node: Running a Simple Ada Program, Next: Running a Program with Multiple Units, Prev: Running GNAT, Up: Getting Started with GNAT - - Running a Simple Ada Program - ============================ - - Any text editor may be used to prepare an Ada program. If `Glide' is - used, the optional Ada mode may be helpful in laying out the program. - The program text is a normal text file. We will suppose in our initial - example that you have used your editor to prepare the following - standard format text file: - - with Ada.Text_IO; use Ada.Text_IO; - procedure Hello is - begin - Put_Line ("Hello WORLD!"); - end Hello; - - This file should be named `hello.adb'. With the normal default file - naming conventions, GNAT requires that each file contain a single - compilation unit whose file name is the unit name, with periods - replaced by hyphens; the extension is `ads' for a spec and `adb' for a - body. You can override this default file naming convention by use of - the special pragma `Source_File_Name' (*note Using Other File Names::). - Alternatively, if you want to rename your files according to this - default convention, which is probably more convenient if you will be - using GNAT for all your compilations, then the `gnatchop' utility can - be used to generate correctly-named source files (*note Renaming Files - Using gnatchop::). - - You can compile the program using the following command (`$' is used - as the command prompt in the examples in this document): - - $ gcc -c hello.adb - - `gcc' is the command used to run the compiler. This compiler is capable - of compiling programs in several languages, including Ada 95 and C. It - assumes that you have given it an Ada program if the file extension is - either `.ads' or `.adb', and it will then call the GNAT compiler to - compile the specified file. - - The `-c' switch is required. It tells `gcc' to only do a - compilation. (For C programs, `gcc' can also do linking, but this - capability is not used directly for Ada programs, so the `-c' switch - must always be present.) - - This compile command generates a file `hello.o', which is the object - file corresponding to your Ada program. It also generates an "Ada - Library Information" file `hello.ali', which contains additional - information used to check that an Ada program is consistent. To build - an executable file, use `gnatbind' to bind the program and `gnatlink' - to link it. The argument to both `gnatbind' and `gnatlink' is the name - of the `ali' file, but the default extension of `.ali' can be omitted. - This means that in the most common case, the argument is simply the - name of the main program: - - $ gnatbind hello - $ gnatlink hello - - A simpler method of carrying out these steps is to use `gnatmake', a - master program that invokes all the required compilation, binding and - linking tools in the correct order. In particular, `gnatmake' - automatically recompiles any sources that have been modified since they - were last compiled, or sources that depend on such modified sources, so - that "version skew" is avoided. - - $ gnatmake hello.adb - - The result is an executable program called `hello', which can be run by - entering: - - $ hello - - assuming that the current directory is on the search path for - executable programs. - - and, if all has gone well, you will see - - Hello WORLD! - - appear in response to this command. - -  - File: gnat_ug_wnt.info, Node: Running a Program with Multiple Units, Next: Using the gnatmake Utility, Prev: Running a Simple Ada Program, Up: Getting Started with GNAT - - Running a Program with Multiple Units - ===================================== - - Consider a slightly more complicated example that has three files: a - main program, and the spec and body of a package: - - package Greetings is - procedure Hello; - procedure Goodbye; - end Greetings; - - with Ada.Text_IO; use Ada.Text_IO; - package body Greetings is - procedure Hello is - begin - Put_Line ("Hello WORLD!"); - end Hello; - - procedure Goodbye is - begin - Put_Line ("Goodbye WORLD!"); - end Goodbye; - end Greetings; - - with Greetings; - procedure Gmain is - begin - Greetings.Hello; - Greetings.Goodbye; - end Gmain; - - Following the one-unit-per-file rule, place this program in the - following three separate files: - - `greetings.ads' - spec of package `Greetings' - - `greetings.adb' - body of package `Greetings' - - `gmain.adb' - body of main program - - To build an executable version of this program, we could use four - separate steps to compile, bind, and link the program, as follows: - - $ gcc -c gmain.adb - $ gcc -c greetings.adb - $ gnatbind gmain - $ gnatlink gmain - - Note that there is no required order of compilation when using GNAT. - In particular it is perfectly fine to compile the main program first. - Also, it is not necessary to compile package specs in the case where - there is an accompanying body; you only need to compile the body. If - you want to submit these files to the compiler for semantic checking - and not code generation, then use the `-gnatc' switch: - - $ gcc -c greetings.ads -gnatc - - Although the compilation can be done in separate steps as in the above - example, in practice it is almost always more convenient to use the - `gnatmake' tool. All you need to know in this case is the name of the - main program's source file. The effect of the above four commands can - be achieved with a single one: - - $ gnatmake gmain.adb - - In the next section we discuss the advantages of using `gnatmake' in - more detail. - -  - File: gnat_ug_wnt.info, Node: Using the gnatmake Utility, Next: Introduction to Glide and GVD, Prev: Running a Program with Multiple Units, Up: Getting Started with GNAT - - Using the `gnatmake' Utility - ============================ - - If you work on a program by compiling single components at a time using - `gcc', you typically keep track of the units you modify. In order to - build a consistent system, you compile not only these units, but also - any units that depend on the units you have modified. For example, in - the preceding case, if you edit `gmain.adb', you only need to recompile - that file. But if you edit `greetings.ads', you must recompile both - `greetings.adb' and `gmain.adb', because both files contain units that - depend on `greetings.ads'. - - `gnatbind' will warn you if you forget one of these compilation - steps, so that it is impossible to generate an inconsistent program as a - result of forgetting to do a compilation. Nevertheless it is tedious and - error-prone to keep track of dependencies among units. One approach to - handle the dependency-bookkeeping is to use a makefile. However, - makefiles present maintenance problems of their own: if the - dependencies change as you change the program, you must make sure that - the makefile is kept up-to-date manually, which is also an error-prone - process. - - The `gnatmake' utility takes care of these details automatically. - Invoke it using either one of the following forms: - - $ gnatmake gmain.adb - $ gnatmake gmain - - The argument is the name of the file containing the main program; you - may omit the extension. `gnatmake' examines the environment, - automatically recompiles any files that need recompiling, and binds and - links the resulting set of object files, generating the executable - file, `gmain'. In a large program, it can be extremely helpful to use - `gnatmake', because working out by hand what needs to be recompiled can - be difficult. - - Note that `gnatmake' takes into account all the Ada 95 rules that - establish dependencies among units. These include dependencies that - result from inlining subprogram bodies, and from generic instantiation. - Unlike some other Ada make tools, `gnatmake' does not rely on the - dependencies that were found by the compiler on a previous compilation, - which may possibly be wrong when sources change. `gnatmake' determines - the exact set of dependencies from scratch each time it is run. - -  - File: gnat_ug_wnt.info, Node: Introduction to Glide and GVD, Prev: Using the gnatmake Utility, Up: Getting Started with GNAT - - Introduction to Glide and GVD - ============================= - - Although it is possible to develop programs using only the command line - interface (`gnatmake', etc.) a graphical Interactive Development - Environment can make it easier for you to compose, navigate, and debug - programs. This section describes the main features of Glide, the GNAT - graphical IDE, and also shows how to use the basic commands in GVD, the - GNU Visual Debugger. Additional information may be found in the - on-line help for these tools. - - * Menu: - - * Building a New Program with Glide:: - * Simple Debugging with GVD:: - * Other Glide Features:: - -  - File: gnat_ug_wnt.info, Node: Building a New Program with Glide, Next: Simple Debugging with GVD, Up: Introduction to Glide and GVD - - Building a New Program with Glide - --------------------------------- - - The simplest way to invoke Glide is to enter `glide' at the command - prompt. It will generally be useful to issue this as a background - command, thus allowing you to continue using your command window for - other purposes while Glide is running: - - $ glide& - - Glide will start up with an initial screen displaying the top-level - menu items as well as some other information. The menu selections are - as follows - * `Buffers' - - * `Files' - - * `Tools' - - * `Edit' - - * `Search' - - * `Mule' - - * `Glide' - - * `Help' - - For this introductory example, you will need to create a new Ada source - file. First, select the `Files' menu. This will pop open a menu with - around a dozen or so items. To create a file, select the `Open - file...' choice. Depending on the platform, you may see a pop-up - window where you can browse to an appropriate directory and then enter - the file name, or else simply see a line at the bottom of the Glide - window where you can likewise enter the file name. Note that in Glide, - when you attempt to open a non-existent file, the effect is to create a - file with that name. For this example enter `hello.adb' as the name of - the file. - - A new buffer will now appear, occupying the entire Glide window, - with the file name at the top. The menu selections are slightly - different from the ones you saw on the opening screen; there is an - `Entities' item, and in place of `Glide' there is now an `Ada' item. - Glide uses the file extension to identify the source language, so `adb' - indicates an Ada source file. - - You will enter some of the source program lines explicitly, and use - the syntax-oriented template mechanism to enter other lines. First, - type the following text: - with Ada.Text_IO; use Ada.Text_IO; - procedure Hello is - begin - - Observe that Glide uses different colors to distinguish reserved words - from identifiers. Also, after the `procedure Hello is' line, the - cursor is automatically indented in anticipation of declarations. When - you enter `begin', Glide recognizes that there are no declarations and - thus places `begin' flush left. But after the `begin' line the cursor - is again indented, where the statement(s) will be placed. - - The main part of the program will be a `for' loop. Instead of - entering the text explicitly, however, use a statement template. - Select the `Ada' item on the top menu bar, move the mouse to the - `Statements' item, and you will see a large selection of alternatives. - Choose `for loop'. You will be prompted (at the bottom of the buffer) - for a loop name; simply press the key since a loop name is not - needed. You should see the beginning of a `for' loop appear in the - source program window. You will now be prompted for the name of the - loop variable; enter a line with the identifier `ind' (lower case). - Note that, by default, Glide capitalizes the name (you can override - such behavior if you wish, although this is outside the scope of this - introduction). Next, Glide prompts you for the loop range; enter a - line containing `1..5' and you will see this also appear in the source - program, together with the remaining elements of the `for' loop syntax. - - Next enter the statement (with an intentional error, a missing - semicolon) that will form the body of the loop: - Put_Line("Hello, World" & Integer'Image(I)) - - Finally, type `end Hello;' as the last line in the program. Now save - the file: choose the `File' menu item, and then the `Save buffer' - selection. You will see a message at the bottom of the buffer - confirming that the file has been saved. - - You are now ready to attempt to build the program. Select the `Ada' - item from the top menu bar. Although we could choose simply to compile - the file, we will instead attempt to do a build (which invokes - `gnatmake') since, if the compile is successful, we want to build an - executable. Thus select `Ada build'. This will fail because of the - compilation error, and you will notice that the Glide window has been - split: the top window contains the source file, and the bottom window - contains the output from the GNAT tools. Glide allows you to navigate - from a compilation error to the source file position corresponding to - the error: click the middle mouse button (or simultaneously press the - left and right buttons, on a two-button mouse) on the diagnostic line - in the tool window. The focus will shift to the source window, and the - cursor will be positioned on the character at which the error was - detected. - - Correct the error: type in a semicolon to terminate the statement. - Although you can again save the file explicitly, you can also simply - invoke `Ada' => `Build' and you will be prompted to save the file. - This time the build will succeed; the tool output window shows you the - options that are supplied by default. The GNAT tools' output (e.g., - object and ALI files, executable) will go in the directory from which - Glide was launched. - - To execute the program, choose `Ada' and then `Run'. You should see - the program's output displayed in the bottom window: - - Hello, world 1 - Hello, world 2 - Hello, world 3 - Hello, world 4 - Hello, world 5 - -  - File: gnat_ug_wnt.info, Node: Simple Debugging with GVD, Next: Other Glide Features, Prev: Building a New Program with Glide, Up: Introduction to Glide and GVD - - Simple Debugging with GVD - ------------------------- - - This section describes how to set breakpoints, examine/modify - variables, and step through execution. - - In order to enable debugging, you need to pass the `-g' switch to - both the compiler and to `gnatlink'. If you are using the command - line, passing `-g' to `gnatmake' will have this effect. You can then - launch GVD, e.g. on the `hello' program, by issuing the command: - - $ gvd hello - - If you are using Glide, then `-g' is passed to the relevant tools by - default when you do a build. Start the debugger by selecting the `Ada' - menu item, and then `Debug'. - - GVD comes up in a multi-part window. One pane shows the names of - files comprising your executable; another pane shows the source code of - the current unit (initially your main subprogram), another pane shows - the debugger output and user interactions, and the fourth pane (the - data canvas at the top of the window) displays data objects that you - have selected. - - To the left of the source file pane, you will notice green dots - adjacent to some lines. These are lines for which object code exists - and where breakpoints can thus be set. You set/reset a breakpoint by - clicking the green dot. When a breakpoint is set, the dot is replaced - by an `X' in a red circle. Clicking the circle toggles the breakpoint - off, and the red circle is replaced by the green dot. - - For this example, set a breakpoint at the statement where `Put_Line' - is invoked. - - Start program execution by selecting the `Run' button on the top - menu bar. (The `Start' button will also start your program, but it - will cause program execution to break at the entry to your main - subprogram.) Evidence of reaching the breakpoint will appear: the - source file line will be highlighted, and the debugger interactions - pane will display a relevant message. - - You can examine the values of variables in several ways. Move the - mouse over an occurrence of `Ind' in the `for' loop, and you will see - the value (now `1') displayed. Alternatively, right-click on `Ind' and - select `Display Ind'; a box showing the variable's name and value will - appear in the data canvas. - - Although a loop index is a constant with respect to Ada semantics, - you can change its value in the debugger. Right-click in the box for - `Ind', and select the `Set Value of Ind' item. Enter `2' as the new - value, and press `OK'. The box for `Ind' shows the update. - - Press the `Step' button on the top menu bar; this will step through - one line of program text (the invocation of `Put_Line'), and you can - observe the effect of having modified `Ind' since the value displayed - is `2'. - - Remove the breakpoint, and resume execution by selecting the `Cont' - button. You will see the remaining output lines displayed in the - debugger interaction window, along with a message confirming normal - program termination. - -  - File: gnat_ug_wnt.info, Node: Other Glide Features, Prev: Simple Debugging with GVD, Up: Introduction to Glide and GVD - - Other Glide Features - -------------------- - - You may have observed that some of the menu selections contain - abbreviations; e.g., `(C-x C-f)' for `Open file...' in the `Files' - menu. These are _shortcut keys_ that you can use instead of selecting - menu items. The stands for ; thus `(C-x C-f)' means - followed by , and this sequence can be used instead of - selecting `Files' and then `Open file...'. - - To abort a Glide command, type . - - If you want Glide to start with an existing source file, you can - either launch Glide as above and then open the file via `Files' => - `Open file...', or else simply pass the name of the source file on the - command line: - - $ glide hello.adb& - - While you are using Glide, a number of _buffers_ exist. You create - some explicitly; e.g., when you open/create a file. Others arise as an - effect of the commands that you issue; e.g., the buffer containing the - output of the tools invoked during a build. If a buffer is hidden, you - can bring it into a visible window by first opening the `Buffers' menu - and then selecting the desired entry. - - If a buffer occupies only part of the Glide screen and you want to - expand it to fill the entire screen, then click in the buffer and then - select `Files' => `One Window'. - - If a window is occupied by one buffer and you want to split the - window to bring up a second buffer, perform the following steps: - * Select `Files' => `Split Window'; this will produce two windows - each of which holds the original buffer (these are not copies, but - rather different views of the same buffer contents) - - * With the focus in one of the windows, select the desired buffer - from the `Buffers' menu - - To exit from Glide, choose `Files' => `Exit'. - -  - File: gnat_ug_wnt.info, Node: The GNAT Compilation Model, Next: Compiling Using gcc, Prev: Getting Started with GNAT, Up: Top - - The GNAT Compilation Model - ************************** - - * Menu: - - * Source Representation:: - * Foreign Language Representation:: - * File Naming Rules:: - * Using Other File Names:: - * Alternative File Naming Schemes:: - * Generating Object Files:: - * Source Dependencies:: - * The Ada Library Information Files:: - * Binding an Ada Program:: - * Mixed Language Programming:: - * Building Mixed Ada & C++ Programs:: - * Comparison between GNAT and C/C++ Compilation Models:: - * Comparison between GNAT and Conventional Ada Library Models:: - - This chapter describes the compilation model used by GNAT. Although - similar to that used by other languages, such as C and C++, this model - is substantially different from the traditional Ada compilation models, - which are based on a library. The model is initially described without - reference to the library-based model. If you have not previously used an - Ada compiler, you need only read the first part of this chapter. The - last section describes and discusses the differences between the GNAT - model and the traditional Ada compiler models. If you have used other - Ada compilers, this section will help you to understand those - differences, and the advantages of the GNAT model. - -  - File: gnat_ug_wnt.info, Node: Source Representation, Next: Foreign Language Representation, Up: The GNAT Compilation Model - - Source Representation - ===================== - - Ada source programs are represented in standard text files, using - Latin-1 coding. Latin-1 is an 8-bit code that includes the familiar - 7-bit ASCII set, plus additional characters used for representing - foreign languages (*note Foreign Language Representation:: for support - of non-USA character sets). The format effector characters are - represented using their standard ASCII encodings, as follows: - - `VT' - Vertical tab, `16#0B#' - - `HT' - Horizontal tab, `16#09#' - - `CR' - Carriage return, `16#0D#' - - `LF' - Line feed, `16#0A#' - - `FF' - Form feed, `16#0C#' - - Source files are in standard text file format. In addition, GNAT will - recognize a wide variety of stream formats, in which the end of physical - physical lines is marked by any of the following sequences: `LF', `CR', - `CR-LF', or `LF-CR'. This is useful in accommodating files that are - imported from other operating systems. - - The end of a source file is normally represented by the physical end - of file. However, the control character `16#1A#' (`SUB') is also - recognized as signalling the end of the source file. Again, this is - provided for compatibility with other operating systems where this code - is used to represent the end of file. - - Each file contains a single Ada compilation unit, including any - pragmas associated with the unit. For example, this means you must - place a package declaration (a package "spec") and the corresponding - body in separate files. An Ada "compilation" (which is a sequence of - compilation units) is represented using a sequence of files. Similarly, - you will place each subunit or child unit in a separate file. - -  - File: gnat_ug_wnt.info, Node: Foreign Language Representation, Next: File Naming Rules, Prev: Source Representation, Up: The GNAT Compilation Model - - Foreign Language Representation - =============================== - - GNAT supports the standard character sets defined in Ada 95 as well as - several other non-standard character sets for use in localized versions - of the compiler (*note Character Set Control::). - - * Menu: - - * Latin-1:: - * Other 8-Bit Codes:: - * Wide Character Encodings:: - -  - File: gnat_ug_wnt.info, Node: Latin-1, Next: Other 8-Bit Codes, Up: Foreign Language Representation - - Latin-1 - ------- - - The basic character set is Latin-1. This character set is defined by ISO - standard 8859, part 1. The lower half (character codes `16#00#' ... - `16#7F#)' is identical to standard ASCII coding, but the upper half is - used to represent additional characters. These include extended letters - used by European languages, such as French accents, the vowels with - umlauts used in German, and the extra letter A-ring used in Swedish. - - For a complete list of Latin-1 codes and their encodings, see the - source file of library unit `Ada.Characters.Latin_1' in file - `a-chlat1.ads'. You may use any of these extended characters freely in - character or string literals. In addition, the extended characters that - represent letters can be used in identifiers. - -  - File: gnat_ug_wnt.info, Node: Other 8-Bit Codes, Next: Wide Character Encodings, Prev: Latin-1, Up: Foreign Language Representation - - Other 8-Bit Codes - ----------------- - - GNAT also supports several other 8-bit coding schemes: - - Latin-2 - Latin-2 letters allowed in identifiers, with uppercase and - lowercase equivalence. - - Latin-3 - Latin-3 letters allowed in identifiers, with uppercase and - lowercase equivalence. - - Latin-4 - Latin-4 letters allowed in identifiers, with uppercase and - lowercase equivalence. - - Latin-5 - Latin-4 letters (Cyrillic) allowed in identifiers, with uppercase - and lowercase equivalence. - - IBM PC (code page 437) - This code page is the normal default for PCs in the U.S. It - corresponds to the original IBM PC character set. This set has - some, but not all, of the extended Latin-1 letters, but these - letters do not have the same encoding as Latin-1. In this mode, - these letters are allowed in identifiers with uppercase and - lowercase equivalence. - - IBM PC (code page 850) - This code page is a modification of 437 extended to include all the - Latin-1 letters, but still not with the usual Latin-1 encoding. In - this mode, all these letters are allowed in identifiers with - uppercase and lowercase equivalence. - - Full Upper 8-bit - Any character in the range 80-FF allowed in identifiers, and all - are considered distinct. In other words, there are no uppercase - and lowercase equivalences in this range. This is useful in - conjunction with certain encoding schemes used for some foreign - character sets (e.g. the typical method of representing Chinese - characters on the PC). - - No Upper-Half - No upper-half characters in the range 80-FF are allowed in - identifiers. This gives Ada 83 compatibility for identifier names. - - For precise data on the encodings permitted, and the uppercase and - lowercase equivalences that are recognized, see the file `csets.adb' in - the GNAT compiler sources. You will need to obtain a full source release - of GNAT to obtain this file. - -  - File: gnat_ug_wnt.info, Node: Wide Character Encodings, Prev: Other 8-Bit Codes, Up: Foreign Language Representation - - Wide Character Encodings - ------------------------ - - GNAT allows wide character codes to appear in character and string - literals, and also optionally in identifiers, by means of the following - possible encoding schemes: - - Hex Coding - In this encoding, a wide character is represented by the following - five character sequence: - - ESC a b c d - - Where `a', `b', `c', `d' are the four hexadecimal characters - (using uppercase letters) of the wide character code. For example, - ESC A345 is used to represent the wide character with code - `16#A345#'. This scheme is compatible with use of the full - Wide_Character set. - - Upper-Half Coding - The wide character with encoding `16#abcd#' where the upper bit is - on (in other words, "a" is in the range 8-F) is represented as two - bytes, `16#ab#' and `16#cd#'. The second byte cannot be a format - control character, but is not required to be in the upper half. - This method can be also used for shift-JIS or EUC, where the - internal coding matches the external coding. - - Shift JIS Coding - A wide character is represented by a two-character sequence, - `16#ab#' and `16#cd#', with the restrictions described for - upper-half encoding as described above. The internal character - code is the corresponding JIS character according to the standard - algorithm for Shift-JIS conversion. Only characters defined in the - JIS code set table can be used with this encoding method. - - EUC Coding - A wide character is represented by a two-character sequence - `16#ab#' and `16#cd#', with both characters being in the upper - half. The internal character code is the corresponding JIS - character according to the EUC encoding algorithm. Only characters - defined in the JIS code set table can be used with this encoding - method. - - UTF-8 Coding - A wide character is represented using UCS Transformation Format 8 - (UTF-8) as defined in Annex R of ISO 10646-1/Am.2. Depending on - the character value, the representation is a one, two, or three - byte sequence: - 16#0000#-16#007f#: 2#0xxxxxxx# - 16#0080#-16#07ff#: 2#110xxxxx# 2#10xxxxxx# - 16#0800#-16#ffff#: 2#1110xxxx# 2#10xxxxxx# 2#10xxxxxx# - - where the xxx bits correspond to the left-padded bits of the - 16-bit character value. Note that all lower half ASCII characters - are represented as ASCII bytes and all upper half characters and - other wide characters are represented as sequences of upper-half - (The full UTF-8 scheme allows for encoding 31-bit characters as - 6-byte sequences, but in this implementation, all UTF-8 sequences - of four or more bytes length will be treated as illegal). - - Brackets Coding - In this encoding, a wide character is represented by the following - eight character sequence: - - [ " a b c d " ] - - Where `a', `b', `c', `d' are the four hexadecimal characters - (using uppercase letters) of the wide character code. For example, - ["A345"] is used to represent the wide character with code - `16#A345#'. It is also possible (though not required) to use the - Brackets coding for upper half characters. For example, the code - `16#A3#' can be represented as `["A3"]'. - - This scheme is compatible with use of the full Wide_Character set, - and is also the method used for wide character encoding in the - standard ACVC (Ada Compiler Validation Capability) test suite - distributions. - - Note: Some of these coding schemes do not permit the full use of the - Ada 95 character set. For example, neither Shift JIS, nor EUC allow the - use of the upper half of the Latin-1 set. - -  - File: gnat_ug_wnt.info, Node: File Naming Rules, Next: Using Other File Names, Prev: Foreign Language Representation, Up: The GNAT Compilation Model - - File Naming Rules - ================= - - The default file name is determined by the name of the unit that the - file contains. The name is formed by taking the full expanded name of - the unit and replacing the separating dots with hyphens and using - lowercase for all letters. - - An exception arises if the file name generated by the above rules - starts with one of the characters a,g,i, or s, and the second character - is a minus. In this case, the character tilde is used in place of the - minus. The reason for this special rule is to avoid clashes with the - standard names for child units of the packages System, Ada, Interfaces, - and GNAT, which use the prefixes s- a- i- and g- respectively. - - The file extension is `.ads' for a spec and `.adb' for a body. The - following list shows some examples of these rules. - - `main.ads' - Main (spec) - - `main.adb' - Main (body) - - `arith_functions.ads' - Arith_Functions (package spec) - - `arith_functions.adb' - Arith_Functions (package body) - - `func-spec.ads' - Func.Spec (child package spec) - - `func-spec.adb' - Func.Spec (child package body) - - `main-sub.adb' - Sub (subunit of Main) - - `a~bad.adb' - A.Bad (child package body) - - Following these rules can result in excessively long file names if - corresponding unit names are long (for example, if child units or - subunits are heavily nested). An option is available to shorten such - long file names (called file name "krunching"). This may be - particularly useful when programs being developed with GNAT are to be - used on operating systems with limited file name lengths. *Note Using - gnatkr::. - - Of course, no file shortening algorithm can guarantee uniqueness over - all possible unit names; if file name krunching is used, it is your - responsibility to ensure no name clashes occur. Alternatively you can - specify the exact file names that you want used, as described in the - next section. Finally, if your Ada programs are migrating from a - compiler with a different naming convention, you can use the gnatchop - utility to produce source files that follow the GNAT naming conventions. - (For details *note Renaming Files Using gnatchop::.) - -  - File: gnat_ug_wnt.info, Node: Using Other File Names, Next: Alternative File Naming Schemes, Prev: File Naming Rules, Up: The GNAT Compilation Model - - Using Other File Names - ====================== - - In the previous section, we have described the default rules used by - GNAT to determine the file name in which a given unit resides. It is - often convenient to follow these default rules, and if you follow them, - the compiler knows without being explicitly told where to find all the - files it needs. - - However, in some cases, particularly when a program is imported from - another Ada compiler environment, it may be more convenient for the - programmer to specify which file names contain which units. GNAT allows - arbitrary file names to be used by means of the Source_File_Name pragma. - The form of this pragma is as shown in the following examples: - - pragma Source_File_Name (My_Utilities.Stacks, - Spec_File_Name => "myutilst_a.ada"); - pragma Source_File_name (My_Utilities.Stacks, - Body_File_Name => "myutilst.ada"); - - As shown in this example, the first argument for the pragma is the unit - name (in this example a child unit). The second argument has the form - of a named association. The identifier indicates whether the file name - is for a spec or a body; the file name itself is given by a string - literal. - - The source file name pragma is a configuration pragma, which means - that normally it will be placed in the `gnat.adc' file used to hold - configuration pragmas that apply to a complete compilation environment. - For more details on how the `gnat.adc' file is created and used *note - Handling of Configuration Pragmas:: - - GNAT allows completely arbitrary file names to be specified using the - source file name pragma. However, if the file name specified has an - extension other than `.ads' or `.adb' it is necessary to use a special - syntax when compiling the file. The name in this case must be preceded - by the special sequence `-x' followed by a space and the name of the - language, here `ada', as in: - - $ gcc -c -x ada peculiar_file_name.sim - - `gnatmake' handles non-standard file names in the usual manner (the - non-standard file name for the main program is simply used as the - argument to gnatmake). Note that if the extension is also non-standard, - then it must be included in the gnatmake command, it may not be omitted. - -  - File: gnat_ug_wnt.info, Node: Alternative File Naming Schemes, Next: Generating Object Files, Prev: Using Other File Names, Up: The GNAT Compilation Model - - Alternative File Naming Schemes - =============================== - - In the previous section, we described the use of the - `Source_File_Name' pragma to allow arbitrary names to be assigned to - individual source files. However, this approach requires one pragma - for each file, and especially in large systems can result in very long - `gnat.adc' files, and also create a maintenance problem. - - GNAT also provides a facility for specifying systematic file naming - schemes other than the standard default naming scheme previously - described. An alternative scheme for naming is specified by the use of - `Source_File_Name' pragmas having the following format: - - pragma Source_File_Name ( - Spec_File_Name => FILE_NAME_PATTERN - [,Casing => CASING_SPEC] - [,Dot_Replacement => STRING_LITERAL]); - - pragma Source_File_Name ( - Body_File_Name => FILE_NAME_PATTERN - [,Casing => CASING_SPEC] - [,Dot_Replacement => STRING_LITERAL]); - - pragma Source_File_Name ( - Subunit_File_Name => FILE_NAME_PATTERN - [,Casing => CASING_SPEC] - [,Dot_Replacement => STRING_LITERAL]); - - FILE_NAME_PATTERN ::= STRING_LITERAL - CASING_SPEC ::= Lowercase | Uppercase | Mixedcase - - The `FILE_NAME_PATTERN' string shows how the file name is constructed. - It contains a single asterisk character, and the unit name is - substituted systematically for this asterisk. The optional parameter - `Casing' indicates whether the unit name is to be all upper-case - letters, all lower-case letters, or mixed-case. If no `Casing' - parameter is used, then the default is all lower-case. - - The optional `Dot_Replacement' string is used to replace any periods - that occur in subunit or child unit names. If no `Dot_Replacement' - argument is used then separating dots appear unchanged in the resulting - file name. Although the above syntax indicates that the `Casing' - argument must appear before the `Dot_Replacement' argument, but it is - also permissible to write these arguments in the opposite order. - - As indicated, it is possible to specify different naming schemes for - bodies, specs, and subunits. Quite often the rule for subunits is the - same as the rule for bodies, in which case, there is no need to give a - separate `Subunit_File_Name' rule, and in this case the - `Body_File_name' rule is used for subunits as well. - - The separate rule for subunits can also be used to implement the - rather unusual case of a compilation environment (e.g. a single - directory) which contains a subunit and a child unit with the same unit - name. Although both units cannot appear in the same partition, the Ada - Reference Manual allows (but does not require) the possibility of the - two units coexisting in the same environment. - - The file name translation works in the following steps: - - * If there is a specific `Source_File_Name' pragma for the given - unit, then this is always used, and any general pattern rules are - ignored. - - * If there is a pattern type `Source_File_Name' pragma that applies - to the unit, then the resulting file name will be used if the file - exists. If more than one pattern matches, the latest one will be - tried first, and the first attempt resulting in a reference to a - file that exists will be used. - - * If no pattern type `Source_File_Name' pragma that applies to the - unit for which the corresponding file exists, then the standard - GNAT default naming rules are used. - - - As an example of the use of this mechanism, consider a commonly used - scheme in which file names are all lower case, with separating periods - copied unchanged to the resulting file name, and specs end with - ".1.ada", and bodies end with ".2.ada". GNAT will follow this scheme if - the following two pragmas appear: - - pragma Source_File_Name - (Spec_File_Name => "*.1.ada"); - pragma Source_File_Name - (Body_File_Name => "*.2.ada"); - - The default GNAT scheme is actually implemented by providing the - following default pragmas internally: - - pragma Source_File_Name - (Spec_File_Name => "*.ads", Dot_Replacement => "-"); - pragma Source_File_Name - (Body_File_Name => "*.adb", Dot_Replacement => "-"); - - Our final example implements a scheme typically used with one of the - Ada 83 compilers, where the separator character for subunits was "__" - (two underscores), specs were identified by adding `_.ADA', bodies by - adding `.ADA', and subunits by adding `.SEP'. All file names were upper - case. Child units were not present of course since this was an Ada 83 - compiler, but it seems reasonable to extend this scheme to use the same - double underscore separator for child units. - - pragma Source_File_Name - (Spec_File_Name => "*_.ADA", - Dot_Replacement => "__", - Casing = Uppercase); - pragma Source_File_Name - (Body_File_Name => "*.ADA", - Dot_Replacement => "__", - Casing = Uppercase); - pragma Source_File_Name - (Subunit_File_Name => "*.SEP", - Dot_Replacement => "__", - Casing = Uppercase); - -  - File: gnat_ug_wnt.info, Node: Generating Object Files, Next: Source Dependencies, Prev: Alternative File Naming Schemes, Up: The GNAT Compilation Model - - Generating Object Files - ======================= - - An Ada program consists of a set of source files, and the first step in - compiling the program is to generate the corresponding object files. - These are generated by compiling a subset of these source files. The - files you need to compile are the following: - - * If a package spec has no body, compile the package spec to produce - the object file for the package. - - * If a package has both a spec and a body, compile the body to - produce the object file for the package. The source file for the - package spec need not be compiled in this case because there is - only one object file, which contains the code for both the spec - and body of the package. - - * For a subprogram, compile the subprogram body to produce the - object file for the subprogram. The spec, if one is present, is as - usual in a separate file, and need not be compiled. - - * In the case of subunits, only compile the parent unit. A single - object file is generated for the entire subunit tree, which - includes all the subunits. - - * Compile child units independently of their parent units (though, - of course, the spec of all the ancestor unit must be present in - order to compile a child unit). - - * Compile generic units in the same manner as any other units. The - object files in this case are small dummy files that contain at - most the flag used for elaboration checking. This is because GNAT - always handles generic instantiation by means of macro expansion. - However, it is still necessary to compile generic units, for - dependency checking and elaboration purposes. - - The preceding rules describe the set of files that must be compiled to - generate the object files for a program. Each object file has the same - name as the corresponding source file, except that the extension is - `.o' as usual. - - You may wish to compile other files for the purpose of checking their - syntactic and semantic correctness. For example, in the case where a - package has a separate spec and body, you would not normally compile the - spec. However, it is convenient in practice to compile the spec to make - sure it is error-free before compiling clients of this spec, because - such compilations will fail if there is an error in the spec. - - GNAT provides an option for compiling such files purely for the - purposes of checking correctness; such compilations are not required as - part of the process of building a program. To compile a file in this - checking mode, use the `-gnatc' switch. - -  - File: gnat_ug_wnt.info, Node: Source Dependencies, Next: The Ada Library Information Files, Prev: Generating Object Files, Up: The GNAT Compilation Model - - Source Dependencies - =================== - - A given object file clearly depends on the source file which is compiled - to produce it. Here we are using "depends" in the sense of a typical - `make' utility; in other words, an object file depends on a source file - if changes to the source file require the object file to be recompiled. - In addition to this basic dependency, a given object may depend on - additional source files as follows: - - * If a file being compiled `with''s a unit X, the object file - depends on the file containing the spec of unit X. This includes - files that are `with''ed implicitly either because they are parents - of `with''ed child units or they are run-time units required by the - language constructs used in a particular unit. - - * If a file being compiled instantiates a library level generic - unit, the object file depends on both the spec and body files for - this generic unit. - - * If a file being compiled instantiates a generic unit defined - within a package, the object file depends on the body file for the - package as well as the spec file. - - * If a file being compiled contains a call to a subprogram for which - pragma `Inline' applies and inlining is activated with the - `-gnatn' switch, the object file depends on the file containing the - body of this subprogram as well as on the file containing the - spec. Note that for inlining to actually occur as a result of the - use of this switch, it is necessary to compile in optimizing mode. - - The use of `-gnatN' activates a more extensive inlining - optimization that is performed by the front end of the compiler. - This inlining does not require that the code generation be - optimized. Like `-gnatn', the use of this switch generates - additional dependencies. - - * If an object file O depends on the proper body of a subunit - through inlining or instantiation, it depends on the parent unit - of the subunit. This means that any modification of the parent - unit or one of its subunits affects the compilation of O. - - * The object file for a parent unit depends on all its subunit body - files. - - * The previous two rules meant that for purposes of computing - dependencies and recompilation, a body and all its subunits are - treated as an indivisible whole. - - These rules are applied transitively: if unit `A' `with''s unit - `B', whose elaboration calls an inlined procedure in package `C', - the object file for unit `A' will depend on the body of `C', in - file `c.adb'. - - The set of dependent files described by these rules includes all - the files on which the unit is semantically dependent, as - described in the Ada 95 Language Reference Manual. However, it is - a superset of what the ARM describes, because it includes generic, - inline, and subunit dependencies. - - An object file must be recreated by recompiling the corresponding - source file if any of the source files on which it depends are - modified. For example, if the `make' utility is used to control - compilation, the rule for an Ada object file must mention all the - source files on which the object file depends, according to the - above definition. The determination of the necessary - recompilations is done automatically when one uses `gnatmake'. - -  - File: gnat_ug_wnt.info, Node: The Ada Library Information Files, Next: Binding an Ada Program, Prev: Source Dependencies, Up: The GNAT Compilation Model - - The Ada Library Information Files - ================================= - - Each compilation actually generates two output files. The first of these - is the normal object file that has a `.o' extension. The second is a - text file containing full dependency information. It has the same name - as the source file, but an `.ali' extension. This file is known as the - Ada Library Information (`ali') file. The following information is - contained in the `ali' file. - - * Version information (indicates which version of GNAT was used to - compile the unit(s) in question) - - * Main program information (including priority and time slice - settings, as well as the wide character encoding used during - compilation). - - * List of arguments used in the `gcc' command for the compilation - - * Attributes of the unit, including configuration pragmas used, an - indication of whether the compilation was successful, exception - model used etc. - - * A list of relevant restrictions applying to the unit (used for - consistency) checking. - - * Categorization information (e.g. use of pragma `Pure'). - - * Information on all `with''ed units, including presence of - `Elaborate' or `Elaborate_All' pragmas. - - * Information from any `Linker_Options' pragmas used in the unit - - * Information on the use of `Body_Version' or `Version' attributes - in the unit. - - * Dependency information. This is a list of files, together with - time stamp and checksum information. These are files on which the - unit depends in the sense that recompilation is required if any of - these units are modified. - - * Cross-reference data. Contains information on all entities - referenced in the unit. Used by tools like `gnatxref' and - `gnatfind' to provide cross-reference information. - - - For a full detailed description of the format of the `ali' file, see - the source of the body of unit `Lib.Writ', contained in file - `lib-writ.adb' in the GNAT compiler sources. - -  - File: gnat_ug_wnt.info, Node: Binding an Ada Program, Next: Mixed Language Programming, Prev: The Ada Library Information Files, Up: The GNAT Compilation Model - - Binding an Ada Program - ====================== - - When using languages such as C and C++, once the source files have been - compiled the only remaining step in building an executable program is - linking the object modules together. This means that it is possible to - link an inconsistent version of a program, in which two units have - included different versions of the same header. - - The rules of Ada do not permit such an inconsistent program to be - built. For example, if two clients have different versions of the same - package, it is illegal to build a program containing these two clients. - These rules are enforced by the GNAT binder, which also determines an - elaboration order consistent with the Ada rules. - - The GNAT binder is run after all the object files for a program have - been created. It is given the name of the main program unit, and from - this it determines the set of units required by the program, by reading - the corresponding ALI files. It generates error messages if the program - is inconsistent or if no valid order of elaboration exists. - - If no errors are detected, the binder produces a main program, in - Ada by default, that contains calls to the elaboration procedures of - those compilation unit that require them, followed by a call to the - main program. This Ada program is compiled to generate the object file - for the main program. The name of the Ada file is `b~XXX.adb' (with the - corresponding spec `b~XXX.ads') where XXX is the name of the main - program unit. - - Finally, the linker is used to build the resulting executable - program, using the object from the main program from the bind step as - well as the object files for the Ada units of the program. - -  - File: gnat_ug_wnt.info, Node: Mixed Language Programming, Next: Building Mixed Ada & C++ Programs, Prev: Binding an Ada Program, Up: The GNAT Compilation Model - - Mixed Language Programming - ========================== - - * Menu: - - * Interfacing to C:: - * Calling Conventions:: - -  - File: gnat_ug_wnt.info, Node: Interfacing to C, Next: Calling Conventions, Up: Mixed Language Programming - - Interfacing to C - ---------------- - - There are two ways to build a program that contains some Ada files and - some other language files depending on whether the main program is in - Ada or not. If the main program is in Ada, you should proceed as - follows: - - 1. Compile the other language files to generate object files. For - instance: - gcc -c file1.c - gcc -c file2.c - - 2. Compile the Ada units to produce a set of object files and ALI - files. For instance: - gnatmake -c my_main.adb - - 3. Run the Ada binder on the Ada main program. For instance: - gnatbind my_main.ali - - 4. Link the Ada main program, the Ada objects and the other language - objects. For instance: - gnatlink my_main.ali file1.o file2.o - - The three last steps can be grouped in a single command: - gnatmake my_main.adb -largs file1.o file2.o - - If the main program is in some language other than Ada, Then you may - have more than one entry point in the Ada subsystem. You must use a - special option of the binder to generate callable routines to initialize - and finalize the Ada units (*note Binding with Non-Ada Main Programs::). - Calls to the initialization and finalization routines must be inserted - in the main program, or some other appropriate point in the code. The - call to initialize the Ada units must occur before the first Ada - subprogram is called, and the call to finalize the Ada units must occur - after the last Ada subprogram returns. You use the same procedure for - building the program as described previously. In this case, however, - the binder only places the initialization and finalization subprograms - into file `b~XXX.adb' instead of the main program. So, if the main - program is not in Ada, you should proceed as follows: - - 1. Compile the other language files to generate object files. For - instance: - gcc -c file1.c - gcc -c file2.c - - 2. Compile the Ada units to produce a set of object files and ALI - files. For instance: - gnatmake -c entry_point1.adb - gnatmake -c entry_point2.adb - - 3. Run the Ada binder on the Ada main program. For instance: - gnatbind -n entry_point1.ali entry_point2.ali - - 4. Link the Ada main program, the Ada objects and the other language - objects. You only need to give the last entry point here. For - instance: - gnatlink entry_point2.ali file1.o file2.o - -  - File: gnat_ug_wnt.info, Node: Calling Conventions, Prev: Interfacing to C, Up: Mixed Language Programming - - Calling Conventions - ------------------- - - GNAT follows standard calling sequence conventions and will thus - interface to any other language that also follows these conventions. - The following Convention identifiers are recognized by GNAT: - - * Ada. This indicates that the standard Ada calling sequence will be - used and all Ada data items may be passed without any limitations - in the case where GNAT is used to generate both the caller and - callee. It is also possible to mix GNAT generated code and code - generated by another Ada compiler. In this case, the data types - should be restricted to simple cases, including primitive types. - Whether complex data types can be passed depends on the situation. - Probably it is safe to pass simple arrays, such as arrays of - integers or floats. Records may or may not work, depending on - whether both compilers lay them out identically. Complex structures - involving variant records, access parameters, tasks, or protected - types, are unlikely to be able to be passed. - - Note that in the case of GNAT running on a platform that supports - DEC Ada 83, a higher degree of compatibility can be guaranteed, - and in particular records are layed out in an identical manner in - the two compilers. Note also that if output from two different - compilers is mixed, the program is responsible for dealing with - elaboration issues. Probably the safest approach is to write the - main program in the version of Ada other than GNAT, so that it - takes care of its own elaboration requirements, and then call the - GNAT-generated adainit procedure to ensure elaboration of the GNAT - components. Consult the documentation of the other Ada compiler - for further details on elaboration. - - However, it is not possible to mix the tasking run time of GNAT and - DEC Ada 83, All the tasking operations must either be entirely - within GNAT compiled sections of the program, or entirely within - DEC Ada 83 compiled sections of the program. - - * Assembler. Specifies assembler as the convention. In practice this - has the same effect as convention Ada (but is not equivalent in - the sense of being considered the same convention). - - * Asm. Equivalent to Assembler. - - * Asm. Equivalent to Assembly. - - * COBOL. Data will be passed according to the conventions described - in section B.4 of the Ada 95 Reference Manual. - - * C. Data will be passed according to the conventions described in - section B.3 of the Ada 95 Reference Manual. - - * Default. Equivalent to C. - - * External. Equivalent to C. - - * CPP. This stands for C++. For most purposes this is identical to C. - See the separate description of the specialized GNAT pragmas - relating to C++ interfacing for further details. - - * Fortran. Data will be passed according to the conventions described - in section B.5 of the Ada 95 Reference Manual. - - * Intrinsic. This applies to an intrinsic operation, as defined in - the Ada 95 Reference Manual. If a a pragma Import (Intrinsic) - applies to a subprogram, this means that the body of the - subprogram is provided by the compiler itself, usually by means of - an efficient code sequence, and that the user does not supply an - explicit body for it. In an application program, the pragma can - only be applied to the following two sets of names, which the GNAT - compiler recognizes. - * Rotate_Left, Rotate_Right, Shift_Left, Shift_Right, - Shift_Right_- Arithmetic. The corresponding subprogram - declaration must have two formal parameters. The first one - must be a signed integer type or a modular type with a binary - modulus, and the second parameter must be of type Natural. - The return type must be the same as the type of the first - argument. The size of this type can only be 8, 16, 32, or 64. - - * binary arithmetic operators: "+", "-", "*", "/" The - corresponding operator declaration must have parameters and - result type that have the same root numeric type (for - example, all three are long_float types). This simplifies the - definition of operations that use type checking to perform - dimensional checks: - type Distance is new Long_Float; - type Time is new Long_Float; - type Velocity is new Long_Float; - function "/" (D : Distance; T : Time) - return Velocity; - pragma Import (Intrinsic, "/"); - - This common idiom is often programmed with a generic - definition and an explicit body. The pragma makes it simpler - to introduce such declarations. It incurs no overhead in - compilation time or code size, because it is implemented as a - single machine instruction. - - * Stdcall. This is relevant only to NT/Win95 implementations of GNAT, - and specifies that the Stdcall calling sequence will be used, as - defined by the NT API. - - * DLL. This is equivalent to Stdcall. - - * Win32. This is equivalent to Stdcall. - - * Stubbed. This is a special convention that indicates that the - compiler should provide a stub body that raises `Program_Error'. - - GNAT additionally provides a useful pragma `Convention_Identifier' that - can be used to parametrize conventions and allow additional synonyms to - be specified. For example if you have legacy code in which the - convention identifier Fortran77 was used for Fortran, you can use the - configuration pragma: - - pragma Convention_Identifier (Fortran77, Fortran); - - And from now on the identifier Fortran77 may be used as a convention - identifier (for example in an `Import' pragma) with the same meaning as - Fortran. - -  - File: gnat_ug_wnt.info, Node: Building Mixed Ada & C++ Programs, Next: Comparison between GNAT and C/C++ Compilation Models, Prev: Mixed Language Programming, Up: The GNAT Compilation Model - - Building Mixed Ada & C++ Programs - ================================= - - Building a mixed application containing both Ada and C++ code may be a - challenge for the unaware programmer. As a matter of fact, this - interfacing has not been standardized in the Ada 95 reference manual due - to the immaturity and lack of standard of C++ at the time. This section - gives a few hints that should make this task easier. In particular the - first section addresses the differences with interfacing with C. The - second section looks into the delicate problem of linking the complete - application from its Ada and C++ parts. The last section give some - hints on how the GNAT run time can be adapted in order to allow - inter-language dispatching with a new C++ compiler. - - * Menu: - - * Interfacing to C++:: - * Linking a Mixed C++ & Ada Program:: - * A Simple Example:: - * Adapting the Run Time to a New C++ Compiler:: - -  - File: gnat_ug_wnt.info, Node: Interfacing to C++, Next: Linking a Mixed C++ & Ada Program, Up: Building Mixed Ada & C++ Programs - - Interfacing to C++ - ------------------ - - GNAT supports interfacing with C++ compilers generating code that is - compatible with the standard Application Binary Interface of the given - platform. - - Interfacing can be done at 3 levels: simple data, subprograms and - classes. In the first 2 cases, GNAT offer a specific CONVENTION CPP - that behaves exactly like CONVENTION C. Usually C++ mangle names of - subprograms and currently GNAT does not provide any help to solve the - demangling problem. This problem can be addressed in 2 ways: - * by modifying the C++ code in order to force a C convention using - the EXTERN "C" syntax. - - * by figuring out the mangled name and use it as the Link_Name - argument of the pragma import. - - Interfacing at the class level can be achieved by using the GNAT - specific pragmas such as `CPP_Class' and `CPP_Virtual'. See the GNAT - Reference Manual for additional information. - -  - File: gnat_ug_wnt.info, Node: Linking a Mixed C++ & Ada Program, Next: A Simple Example, Prev: Interfacing to C++, Up: Building Mixed Ada & C++ Programs - - Linking a Mixed C++ & Ada Program - --------------------------------- - - Usually the linker of the C++ development system must be used to link - mixed applications because most C++ systems will resolve elaboration - issues (such as calling constructors on global class instances) - transparently during the link phase. GNAT has been adapted to ease the - use of a foreign linker for the last phase. Three cases can be - considered: - 1. Using GNAT and G++ (GNU C++ compiler) from the same GCC - installation. The c++ linker can simply be called by using the c++ - specific driver called `c++'. Note that this setup is not very - common because it may request recompiling the whole GCC tree from - sources and it does not allow to upgrade easily to a new version - of one compiler for one of the two languages without taking the - risk of destabilizing the other. - - $ c++ -c file1.C - $ c++ -c file2.C - $ gnatmake ada_unit -largs file1.o file2.o --LINK=c++ - - 2. Using GNAT and G++ from 2 different GCC installations. If both - compilers are on the PATH, the same method can be used. It is - important to be aware that environment variables such as - C_INCLUDE_PATH, GCC_EXEC_PREFIX, BINUTILS_ROOT or GCC_ROOT will - affect both compilers at the same time and thus may make one of - the 2 compilers operate improperly if they are set for the other. - In particular it is important that the link command has access to - the proper gcc library `libgcc.a', that is to say the one that is - part of the C++ compiler installation. The implicit link command - as suggested in the gnatmake command from the former example can - be replaced by an explicit link command with full verbosity in - order to verify which library is used: - $ gnatbind ada_unit - $ gnatlink -v -v ada_unit file1.o file2.o --LINK=c++ - If there is a problem due to interfering environment variables, it - can be workaround by using an intermediate script. The following - example shows the proper script to use when GNAT has not been - installed at its default location and g++ has been installed at - its default location: - - $ gnatlink -v -v ada_unit file1.o file2.o --LINK=./my_script - $ cat ./my_script - #!/bin/sh - unset BINUTILS_ROOT - unset GCC_ROOT - c++ $* - - 3. Using a non GNU C++ compiler. The same set of command as previously - described can be used to insure that the c++ linker is used. - Nonetheless, you need to add the path to libgcc explicitely, since - some libraries needed by GNAT are located in this directory: - - - $ gnatlink ada_unit file1.o file2.o --LINK=./my_script - $ cat ./my_script - #!/bin/sh - CC $* `gcc -print-libgcc-file-name` - - Where CC is the name of the non GNU C++ compiler. - - -  - File: gnat_ug_wnt.info, Node: A Simple Example, Next: Adapting the Run Time to a New C++ Compiler, Prev: Linking a Mixed C++ & Ada Program, Up: Building Mixed Ada & C++ Programs - - A Simple Example - ---------------- - - The following example, provided as part of the GNAT examples, show how - to achieve procedural interfacing between Ada and C++ in both - directions. The C++ class A has 2 methods. The first method is exported - to Ada by the means of an extern C wrapper function. The second method - calls an Ada subprogram. On the Ada side, The C++ calls is modelized by - a limited record with a layout comparable to the C++ class. The Ada - subprogram, in turn, calls the c++ method. So from the C++ main program - the code goes back and forth between the 2 languages. - - Here are the compilation commands for native configurations: - $ gnatmake -c simple_cpp_interface - $ c++ -c cpp_main.C - $ c++ -c ex7.C - $ gnatbind -n simple_cpp_interface - $ gnatlink simple_cpp_interface -o cpp_main --LINK=$(CPLUSPLUS) - -lstdc++ ex7.o cpp_main.o - - Here are the corresponding sources: - - //cpp_main.C - - #include "ex7.h" - - extern "C" { - void adainit (void); - void adafinal (void); - void method1 (A *t); - } - - void method1 (A *t) - { - t->method1 (); - } - - int main () - { - A obj; - adainit (); - obj.method2 (3030); - adafinal (); - } - - //ex7.h - - class Origin { - public: - int o_value; - }; - class A : public Origin { - public: - void method1 (void); - virtual void method2 (int v); - A(); - int a_value; - }; - - //ex7.C - - #include "ex7.h" - #include - - extern "C" { void ada_method2 (A *t, int v);} - - void A::method1 (void) - { - a_value = 2020; - printf ("in A::method1, a_value = %d \n",a_value); - - } - - void A::method2 (int v) - { - ada_method2 (this, v); - printf ("in A::method2, a_value = %d \n",a_value); - - } - - A::A(void) - { - a_value = 1010; - printf ("in A::A, a_value = %d \n",a_value); - } - - -- Ada sources - package body Simple_Cpp_Interface is - - procedure Ada_Method2 (This : in out A; V : Integer) is - begin - Method1 (This); - This.A_Value := V; - end Ada_Method2; - - end Simple_Cpp_Interface; - - package Simple_Cpp_Interface is - type A is limited - record - O_Value : Integer; - A_Value : Integer; - end record; - pragma Convention (C, A); - - procedure Method1 (This : in out A); - pragma Import (C, Method1); - - procedure Ada_Method2 (This : in out A; V : Integer); - pragma Export (C, Ada_Method2); - - end Simple_Cpp_Interface; - -  - File: gnat_ug_wnt.info, Node: Adapting the Run Time to a New C++ Compiler, Prev: A Simple Example, Up: Building Mixed Ada & C++ Programs - - Adapting the Run Time to a New C++ Compiler - ------------------------------------------- - - GNAT offers the capability to derive Ada 95 tagged types directly from - preexisting C++ classes and . See "Interfacing with C++" in the GNAT - reference manual. The mechanism used by GNAT for achieving such a goal - has been made user configurable through a GNAT library unit - `Interfaces.CPP'. The default version of this file is adapted to the - GNU c++ compiler. Internal knowledge of the virtual table layout used - by the new C++ compiler is needed to configure properly this unit. The - Interface of this unit is known by the compiler and cannot be changed - except for the value of the constants defining the characteristics of - the virtual table: CPP_DT_Prologue_Size, CPP_DT_Entry_Size, - CPP_TSD_Prologue_Size, CPP_TSD_Entry_Size. Read comments in the source - of this unit for more details. - -  - File: gnat_ug_wnt.info, Node: Comparison between GNAT and C/C++ Compilation Models, Next: Comparison between GNAT and Conventional Ada Library Models, Prev: Building Mixed Ada & C++ Programs, Up: The GNAT Compilation Model - - Comparison between GNAT and C/C++ Compilation Models - ==================================================== - - The GNAT model of compilation is close to the C and C++ models. You can - think of Ada specs as corresponding to header files in C. As in C, you - don't need to compile specs; they are compiled when they are used. The - Ada `with' is similar in effect to the `#include' of a C header. - - One notable difference is that, in Ada, you may compile specs - separately to check them for semantic and syntactic accuracy. This is - not always possible with C headers because they are fragments of - programs that have less specific syntactic or semantic rules. - - The other major difference is the requirement for running the binder, - which performs two important functions. First, it checks for - consistency. In C or C++, the only defense against assembling - inconsistent programs lies outside the compiler, in a makefile, for - example. The binder satisfies the Ada requirement that it be impossible - to construct an inconsistent program when the compiler is used in normal - mode. - - The other important function of the binder is to deal with - elaboration issues. There are also elaboration issues in C++ that are - handled automatically. This automatic handling has the advantage of - being simpler to use, but the C++ programmer has no control over - elaboration. Where `gnatbind' might complain there was no valid order - of elaboration, a C++ compiler would simply construct a program that - malfunctioned at run time. - -  - File: gnat_ug_wnt.info, Node: Comparison between GNAT and Conventional Ada Library Models, Prev: Comparison between GNAT and C/C++ Compilation Models, Up: The GNAT Compilation Model - - Comparison between GNAT and Conventional Ada Library Models - =========================================================== - - This section is intended to be useful to Ada programmers who have - previously used an Ada compiler implementing the traditional Ada library - model, as described in the Ada 95 Language Reference Manual. If you - have not used such a system, please go on to the next section. - - In GNAT, there is no "library" in the normal sense. Instead, the set - of source files themselves acts as the library. Compiling Ada programs - does not generate any centralized information, but rather an object - file and a ALI file, which are of interest only to the binder and - linker. In a traditional system, the compiler reads information not - only from the source file being compiled, but also from the centralized - library. This means that the effect of a compilation depends on what - has been previously compiled. In particular: - - * When a unit is `with''ed, the unit seen by the compiler corresponds - to the version of the unit most recently compiled into the library. - - * Inlining is effective only if the necessary body has already been - compiled into the library. - - * Compiling a unit may obsolete other units in the library. - - In GNAT, compiling one unit never affects the compilation of any other - units because the compiler reads only source files. Only changes to - source files can affect the results of a compilation. In particular: - - * When a unit is `with''ed, the unit seen by the compiler corresponds - to the source version of the unit that is currently accessible to - the compiler. - - * Inlining requires the appropriate source files for the package or - subprogram bodies to be available to the compiler. Inlining is - always effective, independent of the order in which units are - complied. - - * Compiling a unit never affects any other compilations. The editing - of sources may cause previous compilations to be out of date if - they depended on the source file being modified. - - The most important result of these differences is that order of - compilation is never significant in GNAT. There is no situation in - which one is required to do one compilation before another. What shows - up as order of compilation requirements in the traditional Ada library - becomes, in GNAT, simple source dependencies; in other words, there is - only a set of rules saying what source files must be present when a - file is compiled. - -  - File: gnat_ug_wnt.info, Node: Compiling Using gcc, Next: Binding Using gnatbind, Prev: The GNAT Compilation Model, Up: Top - - Compiling Using `gcc' - ********************* - - This chapter discusses how to compile Ada programs using the `gcc' - command. It also describes the set of switches that can be used to - control the behavior of the compiler. - - * Menu: - - * Compiling Programs:: - * Switches for gcc:: - * Search Paths and the Run-Time Library (RTL):: - * Order of Compilation Issues:: - * Examples:: - -  - File: gnat_ug_wnt.info, Node: Compiling Programs, Next: Switches for gcc, Up: Compiling Using gcc - - Compiling Programs - ================== - - The first step in creating an executable program is to compile the units - of the program using the `gcc' command. You must compile the following - files: - - * the body file (`.adb') for a library level subprogram or generic - subprogram - - * the spec file (`.ads') for a library level package or generic - package that has no body - - * the body file (`.adb') for a library level package or generic - package that has a body - - - You need _not_ compile the following files - - * the spec of a library unit which has a body - - * subunits - - because they are compiled as part of compiling related units. GNAT - package specs when the corresponding body is compiled, and subunits - when the parent is compiled. If you attempt to compile any of these - files, you will get one of the following error messages (where fff is - the name of the file you compiled): - - No code generated for file FFF (PACKAGE SPEC) - No code generated for file FFF (SUBUNIT) - - The basic command for compiling a file containing an Ada unit is - - $ gcc -c [SWITCHES] `file name' - - where FILE NAME is the name of the Ada file (usually having an extension - `.ads' for a spec or `.adb' for a body). You specify the `-c' switch - to tell `gcc' to compile, but not link, the file. The result of a - successful compilation is an object file, which has the same name as - the source file but an extension of `.o' and an Ada Library Information - (ALI) file, which also has the same name as the source file, but with - `.ali' as the extension. GNAT creates these two output files in the - current directory, but you may specify a source file in any directory - using an absolute or relative path specification containing the - directory information. - - `gcc' is actually a driver program that looks at the extensions of - the file arguments and loads the appropriate compiler. For example, the - GNU C compiler is `cc1', and the Ada compiler is `gnat1'. These - programs are in directories known to the driver program (in some - configurations via environment variables you set), but need not be in - your path. The `gcc' driver also calls the assembler and any other - utilities needed to complete the generation of the required object - files. - - It is possible to supply several file names on the same `gcc' - command. This causes `gcc' to call the appropriate compiler for each - file. For example, the following command lists three separate files to - be compiled: - - $ gcc -c x.adb y.adb z.c - - calls `gnat1' (the Ada compiler) twice to compile `x.adb' and `y.adb', - and `cc1' (the C compiler) once to compile `z.c'. The compiler - generates three object files `x.o', `y.o' and `z.o' and the two ALI - files `x.ali' and `y.ali' from the Ada compilations. Any switches apply - to all the files listed, except for `-gnatX' switches, which apply only - to Ada compilations. - -  - File: gnat_ug_wnt.info, Node: Switches for gcc, Next: Search Paths and the Run-Time Library (RTL), Prev: Compiling Programs, Up: Compiling Using gcc - - Switches for `gcc' - ================== - - The `gcc' command accepts switches that control the compilation - process. These switches are fully described in this section. First we - briefly list all the switches, in alphabetical order, then we describe - the switches in more detail in functionally grouped sections. - - * Menu: - - * Output and Error Message Control:: - * Debugging and Assertion Control:: - * Run-Time Checks:: - * Stack Overflow Checking:: - * Run-Time Control:: - * Validity Checking:: - * Style Checking:: - * Using gcc for Syntax Checking:: - * Using gcc for Semantic Checking:: - * Compiling Ada 83 Programs:: - * Character Set Control:: - * File Naming Control:: - * Subprogram Inlining Control:: - * Auxiliary Output Control:: - * Debugging Control:: - * Units to Sources Mapping Files:: - - `-b TARGET' - Compile your program to run on TARGET, which is the name of a - system configuration. You must have a GNAT cross-compiler built if - TARGET is not the same as your host system. - - `-BDIR' - Load compiler executables (for example, `gnat1', the Ada compiler) - from DIR instead of the default location. Only use this switch - when multiple versions of the GNAT compiler are available. See the - `gcc' manual page for further details. You would normally use the - `-b' or `-V' switch instead. - - `-c' - Compile. Always use this switch when compiling Ada programs. - - Note: for some other languages when using `gcc', notably in the - case of C and C++, it is possible to use use `gcc' without a `-c' - switch to compile and link in one step. In the case of GNAT, you - cannot use this approach, because the binder must be run and `gcc' - cannot be used to run the GNAT binder. - - `-g' - Generate debugging information. This information is stored in the - object file and copied from there to the final executable file by - the linker, where it can be read by the debugger. You must use the - `-g' switch if you plan on using the debugger. - - `-IDIR' - Direct GNAT to search the DIR directory for source files needed by - the current compilation (*note Search Paths and the Run-Time - Library (RTL)::). - - `-I-' - Except for the source file named in the command line, do not look - for source files in the directory containing the source file named - in the command line (*note Search Paths and the Run-Time Library - (RTL)::). - - `-o FILE' - This switch is used in `gcc' to redirect the generated object file - and its associated ALI file. Beware of this switch with GNAT, - because it may cause the object file and ALI file to have - different names which in turn may confuse the binder and the - linker. - - `-O[N]' - N controls the optimization level. - - n = 0 - No optimization, the default setting if no `-O' appears - - n = 1 - Normal optimization, the default if you specify `-O' without - an operand. - - n = 2 - Extensive optimization - - n = 3 - Extensive optimization with automatic inlining. This applies - only to inlining within a unit. For details on control of - inter-unit inlining see *Note Subprogram Inlining Control::. - - `--RTS=RTS-PATH' - Specifies the default location of the runtime library. Same - meaning as the equivalent `gnatmake' flag (see *Note Switches for - gnatmake::). - - `-S' - Used in place of `-c' to cause the assembler source file to be - generated, using `.s' as the extension, instead of the object file. - This may be useful if you need to examine the generated assembly - code. - - `-v' - Show commands generated by the `gcc' driver. Normally used only for - debugging purposes or if you need to be sure what version of the - compiler you are executing. - - `-V VER' - Execute VER version of the compiler. This is the `gcc' version, - not the GNAT version. - - `-gnata' - Assertions enabled. `Pragma Assert' and `pragma Debug' to be - activated. - - `-gnatA' - Avoid processing `gnat.adc'. If a gnat.adc file is present, it - will be ignored. - - `-gnatb' - Generate brief messages to `stderr' even if verbose mode set. - - `-gnatc' - Check syntax and semantics only (no code generation attempted). - - `-gnatC' - Compress debug information and external symbol name table entries. - - `-gnatD' - Output expanded source files for source level debugging. This - switch also suppress generation of cross-reference information - (see -gnatx). - - `-gnatecPATH' - Specify a configuration pragma file. (see *Note The Configuration - Pragmas Files::) - - `-gnatemPATH' - Specify a mapping file. (see *Note Units to Sources Mapping - Files::) - - `-gnatE' - Full dynamic elaboration checks. - - `-gnatf' - Full errors. Multiple errors per line, all undefined references. - - `-gnatF' - Externals names are folded to all uppercase. - - `-gnatg' - Internal GNAT implementation mode. This should not be used for - applications programs, it is intended only for use by the compiler - and its run-time library. For documentation, see the GNAT sources. - - `-gnatG' - List generated expanded code in source form. - - `-gnatiC' - Identifier character set (C=1/2/3/4/8/9/p/f/n/w). - - `-gnath' - Output usage information. The output is written to `stdout'. - - `-gnatkN' - Limit file names to N (1-999) characters (`k' = krunch). - - `-gnatl' - Output full source listing with embedded error messages. - - `-gnatmN' - Limit number of detected errors to N (1-999). - - `-gnatn' - Activate inlining across unit boundaries for subprograms for which - pragma `inline' is specified. - - `-gnatN' - Activate front end inlining. - - `-fno-inline' - Suppresses all inlining, even if other optimization or inlining - switches are set. - - `-fstack-check' - Activates stack checking. See separate section on stack checking - for details of the use of this option. - - `-gnato' - Enable numeric overflow checking (which is not normally enabled by - default). Not that division by zero is a separate check that is not - controlled by this switch (division by zero checking is on by - default). - - `-gnatp' - Suppress all checks. - - `-gnatq' - Don't quit; try semantics, even if parse errors. - - `-gnatQ' - Don't quit; generate `ali' and tree files even if illegalities. - - `-gnatP' - Enable polling. This is required on some systems (notably Windows - NT) to obtain asynchronous abort and asynchronous transfer of - control capability. See the description of pragma Polling in the - GNAT Reference Manual for full details. - - `-gnatR[0/1/2/3][s]' - Output representation information for declared types and objects. - - `-gnats' - Syntax check only. - - `-gnatt' - Tree output file to be generated. - - `-gnatT nnn' - Set time slice to specified number of microseconds - - `-gnatu' - List units for this compilation. - - `-gnatU' - Tag all error messages with the unique string "error:" - - `-gnatv' - Verbose mode. Full error output with source lines to `stdout'. - - `-gnatV' - Control level of validity checking. See separate section describing - this feature. - - `-gnatwxxxXXX' - Warning mode where XXX is a string of options describing the exact - warnings that are enabled or disabled. See separate section on - warning control. - - `-gnatWE' - Wide character encoding method (E=n/h/u/s/e/8). - - `-gnatx' - Suppress generation of cross-reference information. - - `-gnaty' - Enable built-in style checks. See separate section describing this - feature. - - `-gnatzM' - Distribution stub generation and compilation (M=r/c for - receiver/caller stubs). - - `-gnat83' - Enforce Ada 83 restrictions. - - `-pass-exit-codes' - Catch exit codes from the compiler and use the most meaningful as - exit status. - - You may combine a sequence of GNAT switches into a single switch. For - example, the combined switch - - -gnatofi3 - - is equivalent to specifying the following sequence of switches: - - -gnato -gnatf -gnati3 - - The following restrictions apply to the combination of switches in this - manner: - - * The switch `-gnatc' if combined with other switches must come - first in the string. - - * The switch `-gnats' if combined with other switches must come - first in the string. - - * Once a "y" appears in the string (that is a use of the `-gnaty' - switch), then all further characters in the switch are interpreted - as style modifiers (see description of `-gnaty'). - - * Once a "d" appears in the string (that is a use of the `-gnatd' - switch), then all further characters in the switch are interpreted - as debug flags (see description of `-gnatd'). - - * Once a "w" appears in the string (that is a use of the `-gnatw' - switch), then all further characters in the switch are interpreted - as warning mode modifiers (see description of `-gnatw'). - - * Once a "V" appears in the string (that is a use of the `-gnatV' - switch), then all further characters in the switch are interpreted - as validity checking options (see description of `-gnatV'). - - -  - File: gnat_ug_wnt.info, Node: Output and Error Message Control, Next: Debugging and Assertion Control, Up: Switches for gcc - - Output and Error Message Control - -------------------------------- - - The standard default format for error messages is called "brief format." - Brief format messages are written to `stderr' (the standard error file) - and have the following form: - - e.adb:3:04: Incorrect spelling of keyword "function" - e.adb:4:20: ";" should be "is" - - The first integer after the file name is the line number in the file, - and the second integer is the column number within the line. `glide' - can parse the error messages and point to the referenced character. - The following switches provide control over the error message format: - - `-gnatv' - The v stands for verbose. The effect of this setting is to write - long-format error messages to `stdout' (the standard output file. - The same program compiled with the `-gnatv' switch would generate: - - 3. funcion X (Q : Integer) - | - >>> Incorrect spelling of keyword "function" - 4. return Integer; - | - >>> ";" should be "is" - - The vertical bar indicates the location of the error, and the `>>>' - prefix can be used to search for error messages. When this switch - is used the only source lines output are those with errors. - - `-gnatl' - The `l' stands for list. This switch causes a full listing of the - file to be generated. The output might look as follows: - - 1. procedure E is - 2. V : Integer; - 3. funcion X (Q : Integer) - | - >>> Incorrect spelling of keyword "function" - 4. return Integer; - | - >>> ";" should be "is" - 5. begin - 6. return Q + Q; - 7. end; - 8. begin - 9. V := X + X; - 10.end E; - - When you specify the `-gnatv' or `-gnatl' switches and standard - output is redirected, a brief summary is written to `stderr' - (standard error) giving the number of error messages and warning - messages generated. - - `-gnatU' - This switch forces all error messages to be preceded by the unique - string "error:". This means that error messages take a few more - characters in space, but allows easy searching for and - identification of error messages. - - `-gnatb' - The `b' stands for brief. This switch causes GNAT to generate the - brief format error messages to `stderr' (the standard error file) - as well as the verbose format message or full listing (which as - usual is written to `stdout' (the standard output file). - - `-gnatmN' - The `m' stands for maximum. N is a decimal integer in the range - of 1 to 999 and limits the number of error messages to be - generated. For example, using `-gnatm2' might yield - - e.adb:3:04: Incorrect spelling of keyword "function" - e.adb:5:35: missing ".." - fatal error: maximum errors reached - compilation abandoned - - `-gnatf' - The `f' stands for full. Normally, the compiler suppresses error - messages that are likely to be redundant. This switch causes all - error messages to be generated. In particular, in the case of - references to undefined variables. If a given variable is - referenced several times, the normal format of messages is - e.adb:7:07: "V" is undefined (more references follow) - - where the parenthetical comment warns that there are additional - references to the variable `V'. Compiling the same program with the - `-gnatf' switch yields - - e.adb:7:07: "V" is undefined - e.adb:8:07: "V" is undefined - e.adb:8:12: "V" is undefined - e.adb:8:16: "V" is undefined - e.adb:9:07: "V" is undefined - e.adb:9:12: "V" is undefined - - `-gnatq' - The `q' stands for quit (really "don't quit"). In normal - operation mode, the compiler first parses the program and - determines if there are any syntax errors. If there are, - appropriate error messages are generated and compilation is - immediately terminated. This switch tells GNAT to continue with - semantic analysis even if syntax errors have been found. This may - enable the detection of more errors in a single run. On the other - hand, the semantic analyzer is more likely to encounter some - internal fatal error when given a syntactically invalid tree. - - `-gnatQ' - In normal operation mode, the `ali' file is not generated if any - illegalities are detected in the program. The use of `-gnatQ' - forces generation of the `ali' file. This file is marked as being - in error, so it cannot be used for binding purposes, but it does - contain reasonably complete cross-reference information, and thus - may be useful for use by tools (e.g. semantic browsing tools or - integrated development environments) that are driven from the - `ali' file. - - In addition, if `-gnatt' is also specified, then the tree file is - generated even if there are illegalities. It may be useful in this - case to also specify `-gnatq' to ensure that full semantic - processing occurs. The resulting tree file can be processed by - ASIS, for the purpose of providing partial information about - illegal units, but if the error causes the tree to be badly - malformed, then ASIS may crash during the analysis. - - In addition to error messages, which correspond to illegalities as - defined in the Ada 95 Reference Manual, the compiler detects two kinds - of warning situations. - - First, the compiler considers some constructs suspicious and - generates a warning message to alert you to a possible error. Second, - if the compiler detects a situation that is sure to raise an exception - at run time, it generates a warning message. The following shows an - example of warning messages: - e.adb:4:24: warning: creation of object may raise Storage_Error - e.adb:10:17: warning: static value out of range - e.adb:10:17: warning: "Constraint_Error" will be raised at run time - - GNAT considers a large number of situations as appropriate for the - generation of warning messages. As always, warnings are not definite - indications of errors. For example, if you do an out-of-range - assignment with the deliberate intention of raising a - `Constraint_Error' exception, then the warning that may be issued does - not indicate an error. Some of the situations for which GNAT issues - warnings (at least some of the time) are given in the following list, - which is not necessarily complete. - - * Possible infinitely recursive calls - - * Out-of-range values being assigned - - * Possible order of elaboration problems - - * Unreachable code - - * Fixed-point type declarations with a null range - - * Variables that are never assigned a value - - * Variables that are referenced before being initialized - - * Task entries with no corresponding accept statement - - * Duplicate accepts for the same task entry in a select - - * Objects that take too much storage - - * Unchecked conversion between types of differing sizes - - * Missing return statements along some execution paths in a function - - * Incorrect (unrecognized) pragmas - - * Incorrect external names - - * Allocation from empty storage pool - - * Potentially blocking operations in protected types - - * Suspicious parenthesization of expressions - - * Mismatching bounds in an aggregate - - * Attempt to return local value by reference - - * Unrecognized pragmas - - * Premature instantiation of a generic body - - * Attempt to pack aliased components - - * Out of bounds array subscripts - - * Wrong length on string assignment - - * Violations of style rules if style checking is enabled - - * Unused with clauses - - * Bit_Order usage that does not have any effect - - * Compile time biased rounding of floating-point constant - - * Standard.Duration used to resolve universal fixed expression - - * Dereference of possibly null value - - * Declaration that is likely to cause storage error - - * Internal GNAT unit with'ed by application unit - - * Values known to be out of range at compile time - - * Unreferenced labels and variables - - * Address overlays that could clobber memory - - * Unexpected initialization when address clause present - - * Bad alignment for address clause - - * Useless type conversions - - * Redundant assignment statements - - * Accidental hiding of name by child unit - - * Unreachable code - - * Access before elaboration detected at compile time - - * A range in a `for' loop that is known to be null or might be null - - - The following switches are available to control the handling of warning - messages: - - `-gnatwa (activate all optional errors)' - This switch activates most optional warning messages, see - remaining list in this section for details on optional warning - messages that can be individually controlled. The warnings that - are not turned on by this switch are `-gnatwb' (biased rounding), - `-gnatwd' (implicit dereferencing), and `-gnatwh' (hiding). All - other optional warnings are turned on. - - `-gnatwA (suppress all optional errors)' - This switch suppresses all optional warning messages, see - remaining list in this section for details on optional warning - messages that can be individually controlled. - - `-gnatwb (activate warnings on biased rounding)' - If a static floating-point expression has a value that is exactly - half way between two adjacent machine numbers, then the rules of - Ada (Ada Reference Manual, section 4.9(38)) require that this - rounding be done away from zero, even if the normal unbiased - rounding rules at run time would require rounding towards zero. - This warning message alerts you to such instances where - compile-time rounding and run-time rounding are not equivalent. If - it is important to get proper run-time rounding, then you can - force this by making one of the operands into a variable. The - default is that such warnings are not generated. Note that - `-gnatwa' does not affect the setting of this warning option. - - `-gnatwB (suppress warnings on biased rounding)' - This switch disables warnings on biased rounding. - - `-gnatwc (activate warnings on conditionals)' - This switch activates warnings for conditional expressions used in - tests that are known to be True or False at compile time. The - default is that such warnings are not generated. This warning can - also be turned on using `-gnatwa'. - - `-gnatwC (suppress warnings on conditionals)' - This switch suppresses warnings for conditional expressions used in - tests that are known to be True or False at compile time. - - `-gnatwd (activate warnings on implicit dereferencing)' - If this switch is set, then the use of a prefix of an access type - in an indexed component, slice, or selected component without an - explicit `.all' will generate a warning. With this warning - enabled, access checks occur only at points where an explicit - `.all' appears in the source code (assuming no warnings are - generated as a result of this switch). The default is that such - warnings are not generated. Note that `-gnatwa' does not affect - the setting of this warning option. - - `-gnatwD (suppress warnings on implicit dereferencing)' - This switch suppresses warnings for implicit deferences in indexed - components, slices, and selected components. - - `-gnatwe (treat warnings as errors)' - This switch causes warning messages to be treated as errors. The - warning string still appears, but the warning messages are counted - as errors, and prevent the generation of an object file. - - `-gnatwf (activate warnings on unreferenced formals)' - This switch causes a warning to be generated if a formal parameter - is not referenced in the body of the subprogram. This warning can - also be turned on using `-gnatwa' or `-gnatwu'. - - `-gnatwF (suppress warnings on unreferenced formals)' - This switch suppresses warnings for unreferenced formal - parameters. Note that the combination `-gnatwu' followed by - `-gnatwF' has the effect of warning on unreferenced entities other - than subprogram formals. - - `-gnatwh (activate warnings on hiding)' - This switch activates warnings on hiding declarations. A - declaration is considered hiding if it is for a non-overloadable - entity, and it declares an entity with the same name as some other - entity that is directly or use-visible. The default is that such - warnings are not generated. Note that `-gnatwa' does not affect - the setting of this warning option. - - `-gnatwH (suppress warnings on hiding)' - This switch suppresses warnings on hiding declarations. - - `-gnatwi (activate warnings on implementation units).' - This switch activates warnings for a `with' of an internal GNAT - implementation unit, defined as any unit from the `Ada', - `Interfaces', `GNAT', or `System' hierarchies that is not - documented in either the Ada Reference Manual or the GNAT - Programmer's Reference Manual. Such units are intended only for - internal implementation purposes and should not be `with''ed by - user programs. The default is that such warnings are generated - This warning can also be turned on using `-gnatwa'. - - `-gnatwI (disable warnings on implementation units).' - This switch disables warnings for a `with' of an internal GNAT - implementation unit. - - `-gnatwl (activate warnings on elaboration pragmas)' - This switch activates warnings on missing pragma Elaborate_All - statements. See the section in this guide on elaboration checking - for details on when such pragma should be used. The default is - that such warnings are not generated. This warning can also be - turned on using `-gnatwa'. - - `-gnatwL (suppress warnings on elaboration pragmas)' - This switch suppresses warnings on missing pragma Elaborate_All - statements. See the section in this guide on elaboration checking - for details on when such pragma should be used. - - `-gnatwo (activate warnings on address clause overlays)' - This switch activates warnings for possibly unintended - initialization effects of defining address clauses that cause one - variable to overlap another. The default is that such warnings are - generated. This warning can also be turned on using `-gnatwa'. - - `-gnatwO (suppress warnings on address clause overlays)' - This switch suppresses warnings on possibly unintended - initialization effects of defining address clauses that cause one - variable to overlap another. - - `-gnatwp (activate warnings on ineffective pragma Inlines)' - This switch activates warnings for failure of front end inlining - (activated by `-gnatN') to inline a particular call. There are - many reasons for not being able to inline a call, including most - commonly that the call is too complex to inline. This warning can - also be turned on using `-gnatwa'. - - `-gnatwP (suppress warnings on ineffective pragma Inlines)' - This switch suppresses warnings on ineffective pragma Inlines. If - the inlining mechanism cannot inline a call, it will simply ignore - the request silently. - - `-gnatwr (activate warnings on redundant constructs)' - This switch activates warnings for redundant constructs. The - following is the current list of constructs regarded as redundant: - This warning can also be turned on using `-gnatwa'. - - * Assignment of an item to itself. - - * Type conversion that converts an expression to its own type. - - * Use of the attribute `Base' where `typ'Base' is the same as - `typ'. - - * Use of pragma `Pack' when all components are placed by a - record representation clause. - - `-gnatwR (suppress warnings on redundant constructs)' - This switch suppresses warnings for redundant constructs. - - `-gnatws (suppress all warnings)' - This switch completely suppresses the output of all warning - messages from the GNAT front end. Note that it does not suppress - warnings from the `gcc' back end. To suppress these back end - warnings as well, use the switch `-w' in addition to `-gnatws'. - - `-gnatwu (activate warnings on unused entities)' - This switch activates warnings to be generated for entities that - are defined but not referenced, and for units that are `with''ed - and not referenced. In the case of packages, a warning is also - generated if no entities in the package are referenced. This means - that if the package is referenced but the only references are in - `use' clauses or `renames' declarations, a warning is still - generated. A warning is also generated for a generic package that - is `with''ed but never instantiated. In the case where a package - or subprogram body is compiled, and there is a `with' on the - corresponding spec that is only referenced in the body, a warning - is also generated, noting that the `with' can be moved to the - body. The default is that such warnings are not generated. This - switch also activates warnings on unreferenced formals (it is - includes the effect of `-gnatwf'). This warning can also be - turned on using `-gnatwa'. - - `-gnatwU (suppress warnings on unused entities)' - This switch suppresses warnings for unused entities and packages. - It also turns off warnings on unreferenced formals (and thus - includes the effect of `-gnatwF'). - - A string of warning parameters can be used in the same parameter. - For example: - - -gnatwaLe - - Would turn on all optional warnings except for elaboration pragma - warnings, and also specify that warnings should be treated as - errors. - - `-w' - This switch suppresses warnings from the `gcc' backend. It may be - used in conjunction with `-gnatws' to ensure that all warnings are - suppressed during the entire compilation process. - -  - File: gnat_ug_wnt.info, Node: Debugging and Assertion Control, Next: Run-Time Checks, Prev: Output and Error Message Control, Up: Switches for gcc - - Debugging and Assertion Control - ------------------------------- - - `-gnata' - The pragmas `Assert' and `Debug' normally have no effect and are - ignored. This switch, where `a' stands for assert, causes `Assert' - and `Debug' pragmas to be activated. - - The pragmas have the form: - - pragma Assert (BOOLEAN-EXPRESSION [, - STATIC-STRING-EXPRESSION]) - pragma Debug (PROCEDURE CALL) - - The `Assert' pragma causes BOOLEAN-EXPRESSION to be tested. If - the result is `True', the pragma has no effect (other than - possible side effects from evaluating the expression). If the - result is `False', the exception `Assert_Failure' declared in the - package `System.Assertions' is raised (passing - STATIC-STRING-EXPRESSION, if present, as the message associated - with the exception). If no string expression is given the default - is a string giving the file name and line number of the pragma. - - The `Debug' pragma causes PROCEDURE to be called. Note that - `pragma Debug' may appear within a declaration sequence, allowing - debugging procedures to be called between declarations. - -  - File: gnat_ug_wnt.info, Node: Validity Checking, Next: Style Checking, Prev: Run-Time Control, Up: Switches for gcc - - Validity Checking - ----------------- - - The Ada 95 Reference Manual has specific requirements for checking for - invalid values. In particular, RM 13.9.1 requires that the evaluation - of invalid values (for example from unchecked conversions), not result - in erroneous execution. In GNAT, the result of such an evaluation in - normal default mode is to either use the value unmodified, or to raise - Constraint_Error in those cases where use of the unmodified value would - cause erroneous execution. The cases where unmodified values might lead - to erroneous execution are case statements (where a wild jump might - result from an invalid value), and subscripts on the left hand side - (where memory corruption could occur as a result of an invalid value). - - The `-gnatVx' switch allows more control over the validity checking - mode. The `x' argument here is a string of letters which control which - validity checks are performed in addition to the default checks - described above. - - * `-gnatVc' Validity checks for copies - - The right hand side of assignments, and the initializing values of - object declarations are validity checked. - - * `-gnatVd' Default (RM) validity checks - - Some validity checks are done by default following normal Ada - semantics (RM 13.9.1 (9-11)). A check is done in case statements - that the expression is within the range of the subtype. If it is - not, Constraint_Error is raised. For assignments to array - components, a check is done that the expression used as index is - within the range. If it is not, Constraint_Error is raised. Both - these validity checks may be turned off using switch `-gnatVD'. - They are turned on by default. If `-gnatVD' is specified, a - subsequent switch `-gnatVd' will leave the checks turned on. - Switch `-gnatVD' should be used only if you are sure that all such - expressions have valid values. If you use this switch and invalid - values are present, then the program is erroneous, and wild jumps - or memory overwriting may occur. - - * `-gnatVi' Validity checks for `in' mode parameters - - Arguments for parameters of mode `in' are validity checked in - function and procedure calls at the point of call. - - * `-gnatVm' Validity checks for `in out' mode parameters - - Arguments for parameters of mode `in out' are validity checked in - procedure calls at the point of call. The `'m'' here stands for - modify, since this concerns parameters that can be modified by the - call. Note that there is no specific option to test `out' - parameters, but any reference within the subprogram will be tested - in the usual manner, and if an invalid value is copied back, any - reference to it will be subject to validity checking. - - * `-gnatVo' Validity checks for operator and attribute operands - - Arguments for predefined operators and attributes are validity - checked. This includes all operators in package `Standard', the - shift operators defined as intrinsic in package `Interfaces' and - operands for attributes such as `Pos'. - - * `-gnatVr' Validity checks for function returns - - The expression in `return' statements in functions is validity - checked. - - * `-gnatVs' Validity checks for subscripts - - All subscripts expressions are checked for validity, whether they - appear on the right side or left side (in default mode only left - side subscripts are validity checked). - - * `-gnatVt' Validity checks for tests - - Expressions used as conditions in `if', `while' or `exit' - statements are checked, as well as guard expressions in entry - calls. - - * `-gnatVf' Validity checks for floating-point values - - In the absence of this switch, validity checking occurs only for - discrete values. If `-gnatVf' is specified, then validity checking - also applies for floating-point values, and NaN's and infinities - are considered invalid, as well as out of range values for - constrained types. Note that this means that standard `IEEE' - infinity mode is not allowed. The exact contexts in which - floating-point values are checked depends on the setting of other - options. For example `-gnatVif' or `-gnatVfi' (the order does not - matter) specifies that floating-point parameters of mode `in' - should be validity checked. - - * `-gnatVa' All validity checks - - All the above validity checks are turned on. That is `-gnatVa' is - equivalent to `gnatVcdfimorst'. - - * `-gnatVn' No validity checks - - This switch turns off all validity checking, including the default - checking for case statements and left hand side subscripts. Note - that the use of the switch `-gnatp' supresses all run-time checks, - including validity checks, and thus implies `-gnatVn'. - - - The `-gnatV' switch may be followed by a string of letters to turn on - a series of validity checking options. For example, `-gnatVcr' specifies - that in addition to the default validity checking, copies and function - return expressions be validity checked. In order to make it easier to - specify a set of options, the upper case letters `CDFIMORST' may be - used to turn off the corresponding lower case option, so for example - `-gnatVaM' turns on all validity checking options except for checking - of `in out' procedure arguments. - - The specification of additional validity checking generates extra - code (and in the case of `-gnatva' the code expansion can be - substantial. However, these additional checks can be very useful in - smoking out cases of uninitialized variables, incorrect use of - unchecked conversion, and other errors leading to invalid values. The - use of pragma `Initialize_Scalars' is useful in conjunction with the - extra validity checking, since this ensures that wherever possible - uninitialized variables have invalid values. - - See also the pragma `Validity_Checks' which allows modification of - the validity checking mode at the program source level, and also allows - for temporary disabling of validity checks. - -  - File: gnat_ug_wnt.info, Node: Style Checking, Next: Using gcc for Syntax Checking, Prev: Validity Checking, Up: Switches for gcc - - Style Checking - -------------- - - The -gnatyX switch causes the compiler to enforce specified style - rules. A limited set of style rules has been used in writing the GNAT - sources themselves. This switch allows user programs to activate all or - some of these checks. If the source program fails a specified style - check, an appropriate warning message is given, preceded by the - character sequence "(style)". The string X is a sequence of letters or - digits indicating the particular style checks to be performed. The - following checks are defined: - - `1-9 (specify indentation level)' - If a digit from 1-9 appears in the string after `-gnaty' then - proper indentation is checked, with the digit indicating the - indentation level required. The general style of required - indentation is as specified by the examples in the Ada Reference - Manual. Full line comments must be aligned with the `--' starting - on a column that is a multiple of the alignment level. - - `a (check attribute casing)' - If the letter a appears in the string after `-gnaty' then - attribute names, including the case of keywords such as `digits' - used as attributes names, must be written in mixed case, that is, - the initial letter and any letter following an underscore must be - uppercase. All other letters must be lowercase. - - `b (blanks not allowed at statement end)' - If the letter b appears in the string after `-gnaty' then trailing - blanks are not allowed at the end of statements. The purpose of - this rule, together with h (no horizontal tabs), is to enforce a - canonical format for the use of blanks to separate source tokens. - - `c (check comments)' - If the letter c appears in the string after `-gnaty' then comments - must meet the following set of rules: - - * The "-" that starts the column must either start in column - one, or else at least one blank must precede this sequence. - - * Comments that follow other tokens on a line must have at - least one blank following the "-" at the start of the comment. - - * Full line comments must have two blanks following the "-" - that starts the comment, with the following exceptions. - - * A line consisting only of the "-" characters, possibly - preceded by blanks is permitted. - - * A comment starting with "-x" where x is a special character - is permitted. This alows proper processing of the output - generated by specialized tools including `gnatprep' (where -! - is used) and the SPARK annnotation language (where -# is - used). For the purposes of this rule, a special character is - defined as being in one of the ASCII ranges 16#21#..16#2F# or - 16#3A#..16#3F#. - - * A line consisting entirely of minus signs, possibly preceded - by blanks, is permitted. This allows the construction of box - comments where lines of minus signs are used to form the top - and bottom of the box. - - * If a comment starts and ends with "-" is permitted as long as - at least one blank follows the initial "-". Together with the - preceding rule, this allows the construction of box comments, - as shown in the following example: - --------------------------- - -- This is a box comment -- - -- with two text lines. -- - --------------------------- - - `e (check end/exit labels)' - If the letter e appears in the string after `-gnaty' then optional - labels on `end' statements ending subprograms and on `exit' - statements exiting named loops, are required to be present. - - `f (no form feeds or vertical tabs)' - If the letter f appears in the string after `-gnaty' then neither - form feeds nor vertical tab characters are not permitted in the - source text. - - `h (no horizontal tabs)' - If the letter h appears in the string after `-gnaty' then - horizontal tab characters are not permitted in the source text. - Together with the b (no blanks at end of line) check, this - enforces a canonical form for the use of blanks to separate source - tokens. - - `i (check if-then layout)' - If the letter i appears in the string after `-gnaty', then the - keyword `then' must appear either on the same line as - corresponding `if', or on a line on its own, lined up under the - `if' with at least one non-blank line in between containing all or - part of the condition to be tested. - - `k (check keyword casing)' - If the letter k appears in the string after `-gnaty' then all - keywords must be in lower case (with the exception of keywords - such as `digits' used as attribute names to which this check does - not apply). - - `l (check layout)' - If the letter l appears in the string after `-gnaty' then layout - of statement and declaration constructs must follow the - recommendations in the Ada Reference Manual, as indicated by the - form of the syntax rules. For example an `else' keyword must be - lined up with the corresponding `if' keyword. - - There are two respects in which the style rule enforced by this - check option are more liberal than those in the Ada Reference - Manual. First in the case of record declarations, it is - permissible to put the `record' keyword on the same line as the - `type' keyword, and then the `end' in `end record' must line up - under `type'. For example, either of the following two layouts is - acceptable: - - type q is record - a : integer; - b : integer; - end record; - - type q is - record - a : integer; - b : integer; - end record; - - Second, in the case of a block statement, a permitted alternative - is to put the block label on the same line as the `declare' or - `begin' keyword, and then line the `end' keyword up under the - block label. For example both the following are permitted: - - Block : declare - A : Integer := 3; - begin - Proc (A, A); - end Block; - - Block : - declare - A : Integer := 3; - begin - Proc (A, A); - end Block; - - The same alternative format is allowed for loops. For example, - both of the following are permitted: - - Clear : while J < 10 loop - A (J) := 0; - end loop Clear; - - Clear : - while J < 10 loop - A (J) := 0; - end loop Clear; - - `m (check maximum line length)' - If the letter m appears in the string after `-gnaty' then the - length of source lines must not exceed 79 characters, including - any trailing blanks. The value of 79 allows convenient display on - an 80 character wide device or window, allowing for possible - special treatment of 80 character lines. - - `Mnnn (set maximum line length)' - If the sequence Mnnn, where nnn is a decimal number, appears in - the string after `-gnaty' then the length of lines must not exceed - the given value. - - `n (check casing of entities in Standard)' - If the letter n appears in the string after `-gnaty' then any - identifier from Standard must be cased to match the presentation - in the Ada Reference Manual (for example, `Integer' and - `ASCII.NUL'). - - `o (check order of subprogram bodies)' - If the letter o appears in the string after `-gnaty' then all - subprogram bodies in a given scope (e.g. a package body) must be - in alphabetical order. The ordering rule uses normal Ada rules for - comparing strings, ignoring casing of letters, except that if - there is a trailing numeric suffix, then the value of this suffix - is used in the ordering (e.g. Junk2 comes before Junk10). - - `p (check pragma casing)' - If the letter p appears in the string after `-gnaty' then pragma - names must be written in mixed case, that is, the initial letter - and any letter following an underscore must be uppercase. All - other letters must be lowercase. - - `r (check references)' - If the letter r appears in the string after `-gnaty' then all - identifier references must be cased in the same way as the - corresponding declaration. No specific casing style is imposed on - identifiers. The only requirement is for consistency of references - with declarations. - - `s (check separate specs)' - If the letter s appears in the string after `-gnaty' then separate - declarations ("specs") are required for subprograms (a body is not - allowed to serve as its own declaration). The only exception is - that parameterless library level procedures are not required to - have a separate declaration. This exception covers the most - frequent form of main program procedures. - - `t (check token spacing)' - If the letter t appears in the string after `-gnaty' then the - following token spacing rules are enforced: - - * The keywords `abs' and `not' must be followed by a space. - - * The token `=>' must be surrounded by spaces. - - * The token `<>' must be preceded by a space or a left - parenthesis. - - * Binary operators other than `**' must be surrounded by spaces. - There is no restriction on the layout of the `**' binary - operator. - - * Colon must be surrounded by spaces. - - * Colon-equal (assignment) must be surrounded by spaces. - - * Comma must be the first non-blank character on the line, or be - immediately preceded by a non-blank character, and must be - followed by a space. - - * If the token preceding a left paren ends with a letter or - digit, then a space must separate the two tokens. - - * A right parenthesis must either be the first non-blank - character on a line, or it must be preceded by a non-blank - character. - - * A semicolon must not be preceded by a space, and must not be - followed by a non-blank character. - - * A unary plus or minus may not be followed by a space. - - * A vertical bar must be surrounded by spaces. - - In the above rules, appearing in column one is always permitted, - that is, counts as meeting either a requirement for a required - preceding space, or as meeting a requirement for no preceding - space. - - Appearing at the end of a line is also always permitted, that is, - counts as meeting either a requirement for a following space, or - as meeting a requirement for no following space. - - If any of these style rules is violated, a message is generated giving - details on the violation. The initial characters of such messages are - always "(style)". Note that these messages are treated as warning - messages, so they normally do not prevent the generation of an object - file. The `-gnatwe' switch can be used to treat warning messages, - including style messages, as fatal errors. - - The switch `-gnaty' on its own (that is not followed by any letters or - digits), is equivalent to `gnaty3abcefhiklmprst', that is all checking - options are enabled with the exception of -gnatyo, with an indentation - level of 3. This is the standard checking option that is used for the - GNAT sources. - -  - File: gnat_ug_wnt.info, Node: Run-Time Checks, Next: Stack Overflow Checking, Prev: Debugging and Assertion Control, Up: Switches for gcc - - Run-Time Checks - --------------- - - If you compile with the default options, GNAT will insert many run-time - checks into the compiled code, including code that performs range - checking against constraints, but not arithmetic overflow checking for - integer operations (including division by zero) or checks for access - before elaboration on subprogram calls. All other run-time checks, as - required by the Ada 95 Reference Manual, are generated by default. The - following `gcc' switches refine this default behavior: - - `-gnatp' - Suppress all run-time checks as though `pragma Suppress - (all_checks') had been present in the source. Validity checks are - also suppressed (in other words `-gnatp' also implies `-gnatVn'. - Use this switch to improve the performance of the code at the - expense of safety in the presence of invalid data or program bugs. - - `-gnato' - Enables overflow checking for integer operations. This causes - GNAT to generate slower and larger executable programs by adding - code to check for overflow (resulting in raising - `Constraint_Error' as required by standard Ada semantics). These - overflow checks correspond to situations in which the true value - of the result of an operation may be outside the base range of the - result type. The following example shows the distinction: - - X1 : Integer := Integer'Last; - X2 : Integer range 1 .. 5 := 5; - ... - X1 := X1 + 1; -- `-gnato' required to catch the Constraint_Error - X2 := X2 + 1; -- range check, `-gnato' has no effect here - - Here the first addition results in a value that is outside the - base range of Integer, and hence requires an overflow check for - detection of the constraint error. The second increment operation - results in a violation of the explicit range constraint, and such - range checks are always performed. Basically the compiler can - assume that in the absence of the `-gnato' switch that any value - of type `xxx' is in range of the base type of `xxx'. - - Note that the `-gnato' switch does not affect the code generated - for any floating-point operations; it applies only to integer - semantics). For floating-point, GNAT has the `Machine_Overflows' - attribute set to `False' and the normal mode of operation is to - generate IEEE NaN and infinite values on overflow or invalid - operations (such as dividing 0.0 by 0.0). - - The reason that we distinguish overflow checking from other kinds - of range constraint checking is that a failure of an overflow - check can generate an incorrect value, but cannot cause erroneous - behavior. This is unlike the situation with a constraint check on - an array subscript, where failure to perform the check can result - in random memory description, or the range check on a case - statement, where failure to perform the check can cause a wild - jump. - - Note again that `-gnato' is off by default, so overflow checking is - not performed in default mode. This means that out of the box, - with the default settings, GNAT does not do all the checks - expected from the language description in the Ada Reference - Manual. If you want all constraint checks to be performed, as - described in this Manual, then you must explicitly use the -gnato - switch either on the `gnatmake' or `gcc' command. - - `-gnatE' - Enables dynamic checks for access-before-elaboration on subprogram - calls and generic instantiations. For full details of the effect - and use of this switch, *Note Compiling Using gcc::. - - The setting of these switches only controls the default setting of the - checks. You may modify them using either `Suppress' (to remove checks) - or `Unsuppress' (to add back suppressed checks) pragmas in the program - source. - -  - File: gnat_ug_wnt.info, Node: Stack Overflow Checking, Next: Run-Time Control, Prev: Run-Time Checks, Up: Switches for gcc - - Stack Overflow Checking - ----------------------- - - For most operating systems, `gcc' does not perform stack overflow - checking by default. This means that if the main environment task or - some other task exceeds the available stack space, then unpredictable - behavior will occur. - - To activate stack checking, compile all units with the gcc option - `-fstack-check'. For example: - - gcc -c -fstack-check package1.adb - - Units compiled with this option will generate extra instructions to - check that any use of the stack (for procedure calls or for declaring - local variables in declare blocks) do not exceed the available stack - space. If the space is exceeded, then a `Storage_Error' exception is - raised. - - For declared tasks, the stack size is always controlled by the size - given in an applicable `Storage_Size' pragma (or is set to the default - size if no pragma is used. - - For the environment task, the stack size depends on system defaults - and is unknown to the compiler. The stack may even dynamically grow on - some systems, precluding the normal Ada semantics for stack overflow. - In the worst case, unbounded stack usage, causes unbounded stack - expansion resulting in the system running out of virtual memory. - - The stack checking may still work correctly if a fixed size stack is - allocated, but this cannot be guaranteed. To ensure that a clean - exception is signalled for stack overflow, set the environment variable - `GNAT_STACK_LIMIT' to indicate the maximum stack area that can be used, - as in: - - SET GNAT_STACK_LIMIT 1600 - - The limit is given in kilobytes, so the above declaration would set the - stack limit of the environment task to 1.6 megabytes. Note that the - only purpose of this usage is to limit the amount of stack used by the - environment task. If it is necessary to increase the amount of stack - for the environment task, then this is an operating systems issue, and - must be addressed with the appropriate operating systems commands. - -  - File: gnat_ug_wnt.info, Node: Run-Time Control, Next: Validity Checking, Prev: Stack Overflow Checking, Up: Switches for gcc - - Run-Time Control - ---------------- - - `-gnatT nnn' - The `gnatT' switch can be used to specify the time-slicing value - to be used for task switching between equal priority tasks. The - value `nnn' is given in microseconds as a decimal integer. - - Setting the time-slicing value is only effective if the underlying - thread control system can accommodate time slicing. Check the - documentation of your operating system for details. Note that the - time-slicing value can also be set by use of pragma `Time_Slice' - or by use of the `t' switch in the gnatbind step. The pragma - overrides a command line argument if both are present, and the `t' - switch for gnatbind overrides both the pragma and the `gcc' - command line switch. - -  - File: gnat_ug_wnt.info, Node: Using gcc for Syntax Checking, Next: Using gcc for Semantic Checking, Prev: Style Checking, Up: Switches for gcc - - Using `gcc' for Syntax Checking - ------------------------------- - - `-gnats' - The `s' stands for syntax. - - Run GNAT in syntax checking only mode. For example, the command - - $ gcc -c -gnats x.adb - - compiles file `x.adb' in syntax-check-only mode. You can check a - series of files in a single command , and can use wild cards to - specify such a group of files. Note that you must specify the - `-c' (compile only) flag in addition to the `-gnats' flag. . - - You may use other switches in conjunction with `-gnats'. In - particular, `-gnatl' and `-gnatv' are useful to control the format - of any generated error messages. - - The output is simply the error messages, if any. No object file or - ALI file is generated by a syntax-only compilation. Also, no units - other than the one specified are accessed. For example, if a unit - `X' `with''s a unit `Y', compiling unit `X' in syntax check only - mode does not access the source file containing unit `Y'. - - Normally, GNAT allows only a single unit in a source file. - However, this restriction does not apply in syntax-check-only - mode, and it is possible to check a file containing multiple - compilation units concatenated together. This is primarily used by - the `gnatchop' utility (*note Renaming Files Using gnatchop::). - -  - File: gnat_ug_wnt.info, Node: Using gcc for Semantic Checking, Next: Compiling Ada 83 Programs, Prev: Using gcc for Syntax Checking, Up: Switches for gcc - - Using `gcc' for Semantic Checking - --------------------------------- - - `-gnatc' - The `c' stands for check. Causes the compiler to operate in - semantic check mode, with full checking for all illegalities - specified in the Ada 95 Reference Manual, but without generation - of any object code (no object file is generated). - - Because dependent files must be accessed, you must follow the GNAT - semantic restrictions on file structuring to operate in this mode: - - * The needed source files must be accessible (*note Search - Paths and the Run-Time Library (RTL)::). - - * Each file must contain only one compilation unit. - - * The file name and unit name must match (*note File Naming - Rules::). - - The output consists of error messages as appropriate. No object - file is generated. An `ALI' file is generated for use in the - context of cross-reference tools, but this file is marked as not - being suitable for binding (since no object file is generated). - The checking corresponds exactly to the notion of legality in the - Ada 95 Reference Manual. - - Any unit can be compiled in semantics-checking-only mode, including - units that would not normally be compiled (subunits, and - specifications where a separate body is present). - -  - File: gnat_ug_wnt.info, Node: Compiling Ada 83 Programs, Next: Character Set Control, Prev: Using gcc for Semantic Checking, Up: Switches for gcc - - Compiling Ada 83 Programs - ------------------------- - - `-gnat83' - Although GNAT is primarily an Ada 95 compiler, it accepts this - switch to specify that an Ada 83 program is to be compiled in - Ada83 mode. If you specify this switch, GNAT rejects most Ada 95 - extensions and applies Ada 83 semantics where this can be done - easily. It is not possible to guarantee this switch does a perfect - job; for example, some subtle tests, such as are found in earlier - ACVC tests (that have been removed from the ACVC suite for Ada - 95), may not compile correctly. However, for most purposes, using - this switch should help to ensure that programs that compile - correctly under the `-gnat83' switch can be ported easily to an - Ada 83 compiler. This is the main use of the switch. - - With few exceptions (most notably the need to use `<>' on - unconstrained generic formal parameters, the use of the new Ada 95 - keywords, and the use of packages with optional bodies), it is not - necessary to use the `-gnat83' switch when compiling Ada 83 - programs, because, with rare exceptions, Ada 95 is upwardly - compatible with Ada 83. This means that a correct Ada 83 program - is usually also a correct Ada 95 program. - -  - File: gnat_ug_wnt.info, Node: Character Set Control, Next: File Naming Control, Prev: Compiling Ada 83 Programs, Up: Switches for gcc - - Character Set Control - --------------------- - - `-gnatiC' - Normally GNAT recognizes the Latin-1 character set in source - program identifiers, as described in the Ada 95 Reference Manual. - This switch causes GNAT to recognize alternate character sets in - identifiers. C is a single character indicating the character - set, as follows: - - `1' - Latin-1 identifiers - - `2' - Latin-2 letters allowed in identifiers - - `3' - Latin-3 letters allowed in identifiers - - `4' - Latin-4 letters allowed in identifiers - - `5' - Latin-5 (Cyrillic) letters allowed in identifiers - - `9' - Latin-9 letters allowed in identifiers - - `p' - IBM PC letters (code page 437) allowed in identifiers - - `8' - IBM PC letters (code page 850) allowed in identifiers - - `f' - Full upper-half codes allowed in identifiers - - `n' - No upper-half codes allowed in identifiers - - `w' - Wide-character codes (that is, codes greater than 255) - allowed in identifiers - - *Note Foreign Language Representation::, for full details on the - implementation of these character sets. - - `-gnatWE' - Specify the method of encoding for wide characters. E is one of - the following: - - `h' - Hex encoding (brackets coding also recognized) - - `u' - Upper half encoding (brackets encoding also recognized) - - `s' - Shift/JIS encoding (brackets encoding also recognized) - - `e' - EUC encoding (brackets encoding also recognized) - - `8' - UTF-8 encoding (brackets encoding also recognized) - - `b' - Brackets encoding only (default value) For full details on - the these encoding methods see *Note Wide Character Encodings::. - Note that brackets coding is always accepted, even if one of the - other options is specified, so for example `-gnatW8' specifies - that both brackets and `UTF-8' encodings will be recognized. The - units that are with'ed directly or indirectly will be scanned - using the specified representation scheme, and so if one of the - non-brackets scheme is used, it must be used consistently - throughout the program. However, since brackets encoding is always - recognized, it may be conveniently used in standard libraries, - allowing these libraries to be used with any of the available - coding schemes. scheme. If no `-gnatW?' parameter is present, - then the default representation is Brackets encoding only. - - Note that the wide character representation that is specified - (explicitly or by default) for the main program also acts as the - default encoding used for Wide_Text_IO files if not specifically - overridden by a WCEM form parameter. - -  - File: gnat_ug_wnt.info, Node: File Naming Control, Next: Subprogram Inlining Control, Prev: Character Set Control, Up: Switches for gcc - - File Naming Control - ------------------- - - `-gnatkN' - Activates file name "krunching". N, a decimal integer in the range - 1-999, indicates the maximum allowable length of a file name (not - including the `.ads' or `.adb' extension). The default is not to - enable file name krunching. - - For the source file naming rules, *Note File Naming Rules::. - -  - File: gnat_ug_wnt.info, Node: Subprogram Inlining Control, Next: Auxiliary Output Control, Prev: File Naming Control, Up: Switches for gcc - - Subprogram Inlining Control - --------------------------- - - `-gnatn' - The `n' here is intended to suggest the first syllable of the word - "inline". GNAT recognizes and processes `Inline' pragmas. - However, for the inlining to actually occur, optimization must be - enabled. To enable inlining across unit boundaries, this is, - inlining a call in one unit of a subprogram declared in a - `with''ed unit, you must also specify this switch. In the absence - of this switch, GNAT does not attempt inlining across units and - does not need to access the bodies of subprograms for which - `pragma Inline' is specified if they are not in the current unit. - - If you specify this switch the compiler will access these bodies, - creating an extra source dependency for the resulting object file, - and where possible, the call will be inlined. For further details - on when inlining is possible see *Note Inlining of Subprograms::. - - `-gnatN' - The front end inlining activated by this switch is generally more - extensive, and quite often more effective than the standard - `-gnatn' inlining mode. It will also generate additional - dependencies. - -  - File: gnat_ug_wnt.info, Node: Auxiliary Output Control, Next: Debugging Control, Prev: Subprogram Inlining Control, Up: Switches for gcc - - Auxiliary Output Control - ------------------------ - - `-gnatt' - Causes GNAT to write the internal tree for a unit to a file (with - the extension `.adt'. This not normally required, but is used by - separate analysis tools. Typically these tools do the necessary - compilations automatically, so you should not have to specify this - switch in normal operation. - - `-gnatu' - Print a list of units required by this compilation on `stdout'. - The listing includes all units on which the unit being compiled - depends either directly or indirectly. - - `-pass-exit-codes' - If this switch is not used, the exit code returned by `gcc' when - compiling multiple files indicates whether all source files have - been successfully used to generate object files or not. - - When `-pass-exit-codes' is used, `gcc' exits with an extended exit - status and allows an integrated development environment to better - react to a compilation failure. Those exit status are: - - 5 - There was an error in at least one source file. - - 3 - At least one source file did not generate an object file. - - 2 - The compiler died unexpectedly (internal error for example). - - 0 - An object file has been generated for every source file. - -  - File: gnat_ug_wnt.info, Node: Debugging Control, Next: Units to Sources Mapping Files, Prev: Auxiliary Output Control, Up: Switches for gcc - - Debugging Control - ----------------- - - `-gnatdX' - Activate internal debugging switches. X is a letter or digit, or - string of letters or digits, which specifies the type of debugging - outputs desired. Normally these are used only for internal - development or system debugging purposes. You can find full - documentation for these switches in the body of the `Debug' unit - in the compiler source file `debug.adb'. - - `-gnatG' - This switch causes the compiler to generate auxiliary output - containing a pseudo-source listing of the generated expanded code. - Like most Ada compilers, GNAT works by first transforming the high - level Ada code into lower level constructs. For example, tasking - operations are transformed into calls to the tasking run-time - routines. A unique capability of GNAT is to list this expanded - code in a form very close to normal Ada source. This is very - useful in understanding the implications of various Ada usage on - the efficiency of the generated code. There are many cases in Ada - (e.g. the use of controlled types), where simple Ada statements can - generate a lot of run-time code. By using `-gnatG' you can identify - these cases, and consider whether it may be desirable to modify - the coding approach to improve efficiency. - - The format of the output is very similar to standard Ada source, - and is easily understood by an Ada programmer. The following - special syntactic additions correspond to low level features used - in the generated code that do not have any exact analogies in pure - Ada source form. The following is a partial list of these special - constructions. See the specification of package `Sprint' in file - `sprint.ads' for a full list. - - `new XXX [storage_pool = YYY]' - Shows the storage pool being used for an allocator. - - `at end PROCEDURE-NAME;' - Shows the finalization (cleanup) procedure for a scope. - - `(if EXPR then EXPR else EXPR)' - Conditional expression equivalent to the `x?y:z' construction - in C. - - `TARGET^(SOURCE)' - A conversion with floating-point truncation instead of - rounding. - - `TARGET?(SOURCE)' - A conversion that bypasses normal Ada semantic checking. In - particular enumeration types and fixed-point types are - treated simply as integers. - - `TARGET?^(SOURCE)' - Combines the above two cases. - - `X #/ Y' - `X #mod Y' - `X #* Y' - `X #rem Y' - A division or multiplication of fixed-point values which are - treated as integers without any kind of scaling. - - `free EXPR [storage_pool = XXX]' - Shows the storage pool associated with a `free' statement. - - `freeze TYPENAME [ACTIONS]' - Shows the point at which TYPENAME is frozen, with possible - associated actions to be performed at the freeze point. - - `reference ITYPE' - Reference (and hence definition) to internal type ITYPE. - - `FUNCTION-NAME! (ARG, ARG, ARG)' - Intrinsic function call. - - `LABELNAME : label' - Declaration of label LABELNAME. - - `EXPR && EXPR && EXPR ... && EXPR' - A multiple concatenation (same effect as EXPR & EXPR & EXPR, - but handled more efficiently). - - `[constraint_error]' - Raise the `Constraint_Error' exception. - - `EXPRESSION'reference' - A pointer to the result of evaluating EXPRESSION. - - `TARGET-TYPE!(SOURCE-EXPRESSION)' - An unchecked conversion of SOURCE-EXPRESSION to TARGET-TYPE. - - `[NUMERATOR/DENOMINATOR]' - Used to represent internal real literals (that) have no exact - representation in base 2-16 (for example, the result of - compile time evaluation of the expression 1.0/27.0). - - `-gnatD' - This switch is used in conjunction with `-gnatG' to cause the - expanded source, as described above to be written to files - with names `xxx.dg', where `xxx' is the normal file name, for - example, if the source file name is `hello.adb', then a file - `hello.adb.dg' will be written. The debugging information - generated by the `gcc' `-g' switch will refer to the generated - `xxx.dg' file. This allows you to do source level debugging - using the generated code which is sometimes useful for - complex code, for example to find out exactly which part of a - complex construction raised an exception. This switch also - suppress generation of cross-reference information (see - -gnatx). - - `-gnatC' - In the generated debugging information, and also in the case - of long external names, the compiler uses a compression - mechanism if the name is very long. This compression method - uses a checksum, and avoids trouble on some operating systems - which have difficulty with very long names. The `-gnatC' - switch forces this compression approach to be used on all - external names and names in the debugging information tables. - This reduces the size of the generated executable, at the - expense of making the naming scheme more complex. The - compression only affects the qualification of the name. Thus - a name in the source: - - Very_Long_Package.Very_Long_Inner_Package.Var - - would normally appear in these tables as: - - very_long_package__very_long_inner_package__var - - but if the `-gnatC' switch is used, then the name appears as - - XCb7e0c705__var - - Here b7e0c705 is a compressed encoding of the qualification - prefix. The GNAT Ada aware version of GDB understands these - encoded prefixes, so if this debugger is used, the encoding - is largely hidden from the user of the compiler. - - `-gnatR[0|1|2|3][s]' - This switch controls output from the compiler of a listing showing - representation information for declared types and objects. For - `-gnatR0', no information is output (equivalent to omitting the - `-gnatR' switch). For `-gnatR1' (which is the default, so `-gnatR' - with no parameter has the same effect), size and alignment - information is listed for declared array and record types. For - `-gnatR2', size and alignment information is listed for all - expression information for values that are computed at run time for - variant records. These symbolic expressions have a mostly obvious - format with #n being used to represent the value of the n'th - discriminant. See source files `repinfo.ads/adb' in the `GNAT' - sources for full detalis on the format of `-gnatR3' output. If the - switch is followed by an s (e.g. `-gnatR2s'), then the output is - to a file with the name `file.rep' where file is the name of the - corresponding source file. - - `-gnatx' - Normally the compiler generates full cross-referencing information - in the `ALI' file. This information is used by a number of tools, - including `gnatfind' and `gnatxref'. The -gnatx switch suppresses - this information. This saves some space and may slightly speed up - compilation, but means that these tools cannot be used. - -  - File: gnat_ug_wnt.info, Node: Units to Sources Mapping Files, Prev: Debugging Control, Up: Switches for gcc - - Units to Sources Mapping Files - ------------------------------ - - `-gnatemPATH' - A mapping file is a way to communicate to the compiler two - mappings: from unit names to file names (without any directory - information) and from file names to path names (with full - directory information). These mappings are used by the compiler to - short-circuit the path search. - - A mapping file is a sequence of sets of three lines. In each set, - the first line is the unit name, in lower case, with "%s" appended - for specifications and "%b" appended for bodies; the second line - is the file name; and the third line is the path name. - - Example: - main%b - main.2.ada - /gnat/project1/sources/main.2.ada - - When the switch `-gnatem' is specified, the compiler will create - in memory the two mappings from the specified file. If there is - any problem (non existent file, truncated file or duplicate - entries), no mapping will be created. - - Several `-gnatem' switches may be specified; however, only the last - one on the command line will be taken into account. - - When using a project file, `gnatmake' create a temporary mapping - file and communicates it to the compiler using this switch. - -  - File: gnat_ug_wnt.info, Node: Search Paths and the Run-Time Library (RTL), Next: Order of Compilation Issues, Prev: Switches for gcc, Up: Compiling Using gcc - - Search Paths and the Run-Time Library (RTL) - =========================================== - - With the GNAT source-based library system, the compiler must be able to - find source files for units that are needed by the unit being compiled. - Search paths are used to guide this process. - - The compiler compiles one source file whose name must be given - explicitly on the command line. In other words, no searching is done - for this file. To find all other source files that are needed (the most - common being the specs of units), the compiler examines the following - directories, in the following order: - - 1. The directory containing the source file of the main unit being - compiled (the file name on the command line). - - 2. Each directory named by an `-I' switch given on the `gcc' command - line, in the order given. - - 3. Each of the directories listed in the value of the - `ADA_INCLUDE_PATH' environment variable. Construct this value - exactly as the `PATH' environment variable: a list of directory - names separated by colons (semicolons when working with the NT - version). - - 4. The content of the "ada_source_path" file which is part of the GNAT - installation tree and is used to store standard libraries such as - the GNAT Run Time Library (RTL) source files. *Note Installing an - Ada Library:: - - Specifying the switch `-I-' inhibits the use of the directory - containing the source file named in the command line. You can still - have this directory on your search path, but in this case it must be - explicitly requested with a `-I' switch. - - Specifying the switch `-nostdinc' inhibits the search of the default - location for the GNAT Run Time Library (RTL) source files. - - The compiler outputs its object files and ALI files in the current - working directory. Caution: The object file can be redirected with the - `-o' switch; however, `gcc' and `gnat1' have not been coordinated on - this so the ALI file will not go to the right place. Therefore, you - should avoid using the `-o' switch. - - The packages `Ada', `System', and `Interfaces' and their children - make up the GNAT RTL, together with the simple `System.IO' package used - in the "Hello World" example. The sources for these units are needed by - the compiler and are kept together in one directory. Not all of the - bodies are needed, but all of the sources are kept together anyway. In - a normal installation, you need not specify these directory names when - compiling or binding. Either the environment variables or the built-in - defaults cause these files to be found. - - In addition to the language-defined hierarchies (System, Ada and - Interfaces), the GNAT distribution provides a fourth hierarchy, - consisting of child units of GNAT. This is a collection of generally - useful routines. See the GNAT Reference Manual for further details. - - Besides simplifying access to the RTL, a major use of search paths is - in compiling sources from multiple directories. This can make - development environments much more flexible. - -  - File: gnat_ug_wnt.info, Node: Order of Compilation Issues, Next: Examples, Prev: Search Paths and the Run-Time Library (RTL), Up: Compiling Using gcc - - Order of Compilation Issues - =========================== - - If, in our earlier example, there was a spec for the `hello' procedure, - it would be contained in the file `hello.ads'; yet this file would not - have to be explicitly compiled. This is the result of the model we - chose to implement library management. Some of the consequences of this - model are as follows: - - * There is no point in compiling specs (except for package specs - with no bodies) because these are compiled as needed by clients. If - you attempt a useless compilation, you will receive an error - message. It is also useless to compile subunits because they are - compiled as needed by the parent. - - * There are no order of compilation requirements: performing a - compilation never obsoletes anything. The only way you can obsolete - something and require recompilations is to modify one of the - source files on which it depends. - - * There is no library as such, apart from the ALI files (*note The - Ada Library Information Files::, for information on the format of - these files). For now we find it convenient to create separate ALI - files, but eventually the information therein may be incorporated - into the object file directly. - - * When you compile a unit, the source files for the specs of all - units that it `with''s, all its subunits, and the bodies of any - generics it instantiates must be available (reachable by the - search-paths mechanism described above), or you will receive a - fatal error message. - -  - File: gnat_ug_wnt.info, Node: Examples, Prev: Order of Compilation Issues, Up: Compiling Using gcc - - Examples - ======== - - The following are some typical Ada compilation command line examples: - - `$ gcc -c xyz.adb' - Compile body in file `xyz.adb' with all default options. - - `$ gcc -c -O2 -gnata xyz-def.adb' - Compile the child unit package in file `xyz-def.adb' with extensive - optimizations, and pragma `Assert'/`Debug' statements enabled. - - `$ gcc -c -gnatc abc-def.adb' - Compile the subunit in file `abc-def.adb' in semantic-checking-only - mode. - -  - File: gnat_ug_wnt.info, Node: Binding Using gnatbind, Next: Linking Using gnatlink, Prev: Compiling Using gcc, Up: Top - - Binding Using `gnatbind' - ************************ - - * Menu: - - * Running gnatbind:: - * Generating the Binder Program in C:: - * Consistency-Checking Modes:: - * Binder Error Message Control:: - * Elaboration Control:: - * Output Control:: - * Binding with Non-Ada Main Programs:: - * Binding Programs with No Main Subprogram:: - * Summary of Binder Switches:: - * Command-Line Access:: - * Search Paths for gnatbind:: - * Examples of gnatbind Usage:: - - This chapter describes the GNAT binder, `gnatbind', which is used to - bind compiled GNAT objects. The `gnatbind' program performs four - separate functions: - - 1. Checks that a program is consistent, in accordance with the rules - in Chapter 10 of the Ada 95 Reference Manual. In particular, error - messages are generated if a program uses inconsistent versions of a - given unit. - - 2. Checks that an acceptable order of elaboration exists for the - program and issues an error message if it cannot find an order of - elaboration that satisfies the rules in Chapter 10 of the Ada 95 - Language Manual. - - 3. Generates a main program incorporating the given elaboration order. - This program is a small Ada package (body and spec) that must be - subsequently compiled using the GNAT compiler. The necessary - compilation step is usually performed automatically by `gnatlink'. - The two most important functions of this program are to call the - elaboration routines of units in an appropriate order and to call - the main program. - - 4. Determines the set of object files required by the given main - program. This information is output in the forms of comments in - the generated program, to be read by the `gnatlink' utility used - to link the Ada application. - -  - File: gnat_ug_wnt.info, Node: Running gnatbind, Next: Generating the Binder Program in C, Up: Binding Using gnatbind - - Running `gnatbind' - ================== - - The form of the `gnatbind' command is - - $ gnatbind [SWITCHES] MAINPROG[.ali] [SWITCHES] - - where MAINPROG.adb is the Ada file containing the main program unit - body. If no switches are specified, `gnatbind' constructs an Ada - package in two files which names are `b~ADA_MAIN.ads', and - `b~ADA_MAIN.adb'. For example, if given the parameter `hello.ali', for - a main program contained in file `hello.adb', the binder output files - would be `b~hello.ads' and `b~hello.adb'. - - When doing consistency checking, the binder takes into consideration - any source files it can locate. For example, if the binder determines - that the given main program requires the package `Pack', whose `.ali' - file is `pack.ali' and whose corresponding source spec file is - `pack.ads', it attempts to locate the source file `pack.ads' (using the - same search path conventions as previously described for the `gcc' - command). If it can locate this source file, it checks that the time - stamps or source checksums of the source and its references to in `ali' - files match. In other words, any `ali' files that mentions this spec - must have resulted from compiling this version of the source file (or - in the case where the source checksums match, a version close enough - that the difference does not matter). - - The effect of this consistency checking, which includes source - files, is that the binder ensures that the program is consistent with - the latest version of the source files that can be located at bind - time. Editing a source file without compiling files that depend on the - source file cause error messages to be generated by the binder. - - For example, suppose you have a main program `hello.adb' and a - package `P', from file `p.ads' and you perform the following steps: - - 1. Enter `gcc -c hello.adb' to compile the main program. - - 2. Enter `gcc -c p.ads' to compile package `P'. - - 3. Edit file `p.ads'. - - 4. Enter `gnatbind hello'. - - At this point, the file `p.ali' contains an out-of-date time stamp - because the file `p.ads' has been edited. The attempt at binding fails, - and the binder generates the following error messages: - - error: "hello.adb" must be recompiled ("p.ads" has been modified) - error: "p.ads" has been modified and must be recompiled - - Now both files must be recompiled as indicated, and then the bind can - succeed, generating a main program. You need not normally be concerned - with the contents of this file, but it is similar to the following which - is the binder file generated for a simple "hello world" program. - - -- The package is called Ada_Main unless this name is actually used - -- as a unit name in the partition, in which case some other unique - -- name is used. - - with System; - package ada_main is - - Elab_Final_Code : Integer; - pragma Import (C, Elab_Final_Code, "__gnat_inside_elab_final_code"); - - -- The main program saves the parameters (argument count, - -- argument values, environment pointer) in global variables - -- for later access by other units including - -- Ada.Command_Line. - - gnat_argc : Integer; - gnat_argv : System.Address; - gnat_envp : System.Address; - - -- The actual variables are stored in a library routine. This - -- is useful for some shared library situations, where there - -- are problems if variables are not in the library. - - pragma Import (C, gnat_argc); - pragma Import (C, gnat_argv); - pragma Import (C, gnat_envp); - - -- The exit status is similarly an external location - - gnat_exit_status : Integer; - pragma Import (C, gnat_exit_status); - - GNAT_Version : constant String := - "GNAT Version: 3.15w (20010315)"; - pragma Export (C, GNAT_Version, "__gnat_version"); - - -- This is the generated adafinal routine that performs - -- finalization at the end of execution. In the case where - -- Ada is the main program, this main program makes a call - -- to adafinal at program termination. - - procedure adafinal; - pragma Export (C, adafinal, "adafinal"); - - -- This is the generated adainit routine that performs - -- initialization at the start of execution. In the case - -- where Ada is the main program, this main program makes - -- a call to adainit at program startup. - - procedure adainit; - pragma Export (C, adainit, "adainit"); - - -- This routine is called at the start of execution. It is - -- a dummy routine that is used by the debugger to breakpoint - -- at the start of execution. - - procedure Break_Start; - pragma Import (C, Break_Start, "__gnat_break_start"); - - -- This is the actual generated main program (it would be - -- suppressed if the no main program switch were used). As - -- required by standard system conventions, this program has - -- the external name main. - - function main - (argc : Integer; - argv : System.Address; - envp : System.Address) - return Integer; - pragma Export (C, main, "main"); - - -- The following set of constants give the version - -- identification values for every unit in the bound - -- partition. This identification is computed from all - -- dependent semantic units, and corresponds to the - -- string that would be returned by use of the - -- Body_Version or Version attributes. - - type Version_32 is mod 2 ** 32; - u00001 : constant Version_32 := 16#7880BEB3#; - u00002 : constant Version_32 := 16#0D24CBD0#; - u00003 : constant Version_32 := 16#3283DBEB#; - u00004 : constant Version_32 := 16#2359F9ED#; - u00005 : constant Version_32 := 16#664FB847#; - u00006 : constant Version_32 := 16#68E803DF#; - u00007 : constant Version_32 := 16#5572E604#; - u00008 : constant Version_32 := 16#46B173D8#; - u00009 : constant Version_32 := 16#156A40CF#; - u00010 : constant Version_32 := 16#033DABE0#; - u00011 : constant Version_32 := 16#6AB38FEA#; - u00012 : constant Version_32 := 16#22B6217D#; - u00013 : constant Version_32 := 16#68A22947#; - u00014 : constant Version_32 := 16#18CC4A56#; - u00015 : constant Version_32 := 16#08258E1B#; - u00016 : constant Version_32 := 16#367D5222#; - u00017 : constant Version_32 := 16#20C9ECA4#; - u00018 : constant Version_32 := 16#50D32CB6#; - u00019 : constant Version_32 := 16#39A8BB77#; - u00020 : constant Version_32 := 16#5CF8FA2B#; - u00021 : constant Version_32 := 16#2F1EB794#; - u00022 : constant Version_32 := 16#31AB6444#; - u00023 : constant Version_32 := 16#1574B6E9#; - u00024 : constant Version_32 := 16#5109C189#; - u00025 : constant Version_32 := 16#56D770CD#; - u00026 : constant Version_32 := 16#02F9DE3D#; - u00027 : constant Version_32 := 16#08AB6B2C#; - u00028 : constant Version_32 := 16#3FA37670#; - u00029 : constant Version_32 := 16#476457A0#; - u00030 : constant Version_32 := 16#731E1B6E#; - u00031 : constant Version_32 := 16#23C2E789#; - u00032 : constant Version_32 := 16#0F1BD6A1#; - u00033 : constant Version_32 := 16#7C25DE96#; - u00034 : constant Version_32 := 16#39ADFFA2#; - u00035 : constant Version_32 := 16#571DE3E7#; - u00036 : constant Version_32 := 16#5EB646AB#; - u00037 : constant Version_32 := 16#4249379B#; - u00038 : constant Version_32 := 16#0357E00A#; - u00039 : constant Version_32 := 16#3784FB72#; - u00040 : constant Version_32 := 16#2E723019#; - u00041 : constant Version_32 := 16#623358EA#; - u00042 : constant Version_32 := 16#107F9465#; - u00043 : constant Version_32 := 16#6843F68A#; - u00044 : constant Version_32 := 16#63305874#; - u00045 : constant Version_32 := 16#31E56CE1#; - u00046 : constant Version_32 := 16#02917970#; - u00047 : constant Version_32 := 16#6CCBA70E#; - u00048 : constant Version_32 := 16#41CD4204#; - u00049 : constant Version_32 := 16#572E3F58#; - u00050 : constant Version_32 := 16#20729FF5#; - u00051 : constant Version_32 := 16#1D4F93E8#; - u00052 : constant Version_32 := 16#30B2EC3D#; - u00053 : constant Version_32 := 16#34054F96#; - u00054 : constant Version_32 := 16#5A199860#; - u00055 : constant Version_32 := 16#0E7F912B#; - u00056 : constant Version_32 := 16#5760634A#; - u00057 : constant Version_32 := 16#5D851835#; - - -- The following Export pragmas export the version numbers - -- with symbolic names ending in B (for body) or S - -- (for spec) so that they can be located in a link. The - -- information provided here is sufficient to track down - -- the exact versions of units used in a given build. - - pragma Export (C, u00001, "helloB"); - pragma Export (C, u00002, "system__standard_libraryB"); - pragma Export (C, u00003, "system__standard_libraryS"); - pragma Export (C, u00004, "adaS"); - pragma Export (C, u00005, "ada__text_ioB"); - pragma Export (C, u00006, "ada__text_ioS"); - pragma Export (C, u00007, "ada__exceptionsB"); - pragma Export (C, u00008, "ada__exceptionsS"); - pragma Export (C, u00009, "gnatS"); - pragma Export (C, u00010, "gnat__heap_sort_aB"); - pragma Export (C, u00011, "gnat__heap_sort_aS"); - pragma Export (C, u00012, "systemS"); - pragma Export (C, u00013, "system__exception_tableB"); - pragma Export (C, u00014, "system__exception_tableS"); - pragma Export (C, u00015, "gnat__htableB"); - pragma Export (C, u00016, "gnat__htableS"); - pragma Export (C, u00017, "system__exceptionsS"); - pragma Export (C, u00018, "system__machine_state_operationsB"); - pragma Export (C, u00019, "system__machine_state_operationsS"); - pragma Export (C, u00020, "system__machine_codeS"); - pragma Export (C, u00021, "system__storage_elementsB"); - pragma Export (C, u00022, "system__storage_elementsS"); - pragma Export (C, u00023, "system__secondary_stackB"); - pragma Export (C, u00024, "system__secondary_stackS"); - pragma Export (C, u00025, "system__parametersB"); - pragma Export (C, u00026, "system__parametersS"); - pragma Export (C, u00027, "system__soft_linksB"); - pragma Export (C, u00028, "system__soft_linksS"); - pragma Export (C, u00029, "system__stack_checkingB"); - pragma Export (C, u00030, "system__stack_checkingS"); - pragma Export (C, u00031, "system__tracebackB"); - pragma Export (C, u00032, "system__tracebackS"); - pragma Export (C, u00033, "ada__streamsS"); - pragma Export (C, u00034, "ada__tagsB"); - pragma Export (C, u00035, "ada__tagsS"); - pragma Export (C, u00036, "system__string_opsB"); - pragma Export (C, u00037, "system__string_opsS"); - pragma Export (C, u00038, "interfacesS"); - pragma Export (C, u00039, "interfaces__c_streamsB"); - pragma Export (C, u00040, "interfaces__c_streamsS"); - pragma Export (C, u00041, "system__file_ioB"); - pragma Export (C, u00042, "system__file_ioS"); - pragma Export (C, u00043, "ada__finalizationB"); - pragma Export (C, u00044, "ada__finalizationS"); - pragma Export (C, u00045, "system__finalization_rootB"); - pragma Export (C, u00046, "system__finalization_rootS"); - pragma Export (C, u00047, "system__finalization_implementationB"); - pragma Export (C, u00048, "system__finalization_implementationS"); - pragma Export (C, u00049, "system__string_ops_concat_3B"); - pragma Export (C, u00050, "system__string_ops_concat_3S"); - pragma Export (C, u00051, "system__stream_attributesB"); - pragma Export (C, u00052, "system__stream_attributesS"); - pragma Export (C, u00053, "ada__io_exceptionsS"); - pragma Export (C, u00054, "system__unsigned_typesS"); - pragma Export (C, u00055, "system__file_control_blockS"); - pragma Export (C, u00056, "ada__finalization__list_controllerB"); - pragma Export (C, u00057, "ada__finalization__list_controllerS"); - - -- BEGIN ELABORATION ORDER - -- ada (spec) - -- gnat (spec) - -- gnat.heap_sort_a (spec) - -- gnat.heap_sort_a (body) - -- gnat.htable (spec) - -- gnat.htable (body) - -- interfaces (spec) - -- system (spec) - -- system.machine_code (spec) - -- system.parameters (spec) - -- system.parameters (body) - -- interfaces.c_streams (spec) - -- interfaces.c_streams (body) - -- system.standard_library (spec) - -- ada.exceptions (spec) - -- system.exception_table (spec) - -- system.exception_table (body) - -- ada.io_exceptions (spec) - -- system.exceptions (spec) - -- system.storage_elements (spec) - -- system.storage_elements (body) - -- system.machine_state_operations (spec) - -- system.machine_state_operations (body) - -- system.secondary_stack (spec) - -- system.stack_checking (spec) - -- system.soft_links (spec) - -- system.soft_links (body) - -- system.stack_checking (body) - -- system.secondary_stack (body) - -- system.standard_library (body) - -- system.string_ops (spec) - -- system.string_ops (body) - -- ada.tags (spec) - -- ada.tags (body) - -- ada.streams (spec) - -- system.finalization_root (spec) - -- system.finalization_root (body) - -- system.string_ops_concat_3 (spec) - -- system.string_ops_concat_3 (body) - -- system.traceback (spec) - -- system.traceback (body) - -- ada.exceptions (body) - -- system.unsigned_types (spec) - -- system.stream_attributes (spec) - -- system.stream_attributes (body) - -- system.finalization_implementation (spec) - -- system.finalization_implementation (body) - -- ada.finalization (spec) - -- ada.finalization (body) - -- ada.finalization.list_controller (spec) - -- ada.finalization.list_controller (body) - -- system.file_control_block (spec) - -- system.file_io (spec) - -- system.file_io (body) - -- ada.text_io (spec) - -- ada.text_io (body) - -- hello (body) - -- END ELABORATION ORDER - - end ada_main; - - -- The following source file name pragmas allow the generated file - -- names to be unique for different main programs. They are needed - -- since the package name will always be Ada_Main. - - pragma Source_File_Name (ada_main, Spec_File_Name => "b~hello.ads"); - pragma Source_File_Name (ada_main, Body_File_Name => "b~hello.adb"); - - -- Generated package body for Ada_Main starts here - - package body ada_main is - - -- The actual finalization is performed by calling the - -- library routine in System.Standard_Library.Adafinal - - procedure Do_Finalize; - pragma Import (C, Do_Finalize, "system__standard_library__adafinal"); - - ------------- - -- adainit -- - ------------- - - procedure adainit is - - -- These booleans are set to True once the associated unit has - -- been elaborated. It is also used to avoid elaborating the - -- same unit twice. - - E040 : Boolean; pragma Import (Ada, E040, "interfaces__c_streams_E"); - E008 : Boolean; pragma Import (Ada, E008, "ada__exceptions_E"); - E014 : Boolean; pragma Import (Ada, E014, "system__exception_table_E"); - E053 : Boolean; pragma Import (Ada, E053, "ada__io_exceptions_E"); - E017 : Boolean; pragma Import (Ada, E017, "system__exceptions_E"); - E024 : Boolean; pragma Import (Ada, E024, "system__secondary_stack_E"); - E030 : Boolean; pragma Import (Ada, E030, "system__stack_checking_E"); - E028 : Boolean; pragma Import (Ada, E028, "system__soft_links_E"); - E035 : Boolean; pragma Import (Ada, E035, "ada__tags_E"); - E033 : Boolean; pragma Import (Ada, E033, "ada__streams_E"); - E046 : Boolean; pragma Import (Ada, E046, "system__finalization_root_E"); - E048 : Boolean; pragma Import (Ada, E048, "system__finalization_implementation_E"); - E044 : Boolean; pragma Import (Ada, E044, "ada__finalization_E"); - E057 : Boolean; pragma Import (Ada, E057, "ada__finalization__list_controller_E"); - E055 : Boolean; pragma Import (Ada, E055, "system__file_control_block_E"); - E042 : Boolean; pragma Import (Ada, E042, "system__file_io_E"); - E006 : Boolean; pragma Import (Ada, E006, "ada__text_io_E"); - - -- Set_Globals is a library routine that stores away the - -- value of the indicated set of global values in global - -- variables within the library. - - procedure Set_Globals - (Main_Priority : Integer; - Time_Slice_Value : Integer; - WC_Encoding : Character; - Locking_Policy : Character; - Queuing_Policy : Character; - Task_Dispatching_Policy : Character; - Adafinal : System.Address; - Unreserve_All_Interrupts : Integer; - Exception_Tracebacks : Integer); - pragma Import (C, Set_Globals, "__gnat_set_globals"); - - -- SDP_Table_Build is a library routine used to build the - -- exception tables. See unit Ada.Exceptions in files - -- a-except.ads/adb for full details of how zero cost - -- exception handling works. This procedure, the call to - -- it, and the two following tables are all omitted if the - -- build is in longjmp/setjump exception mode. - - procedure SDP_Table_Build - (SDP_Addresses : System.Address; - SDP_Count : Natural; - Elab_Addresses : System.Address; - Elab_Addr_Count : Natural); - pragma Import (C, SDP_Table_Build, "__gnat_SDP_Table_Build"); - - -- Table of Unit_Exception_Table addresses. Used for zero - -- cost exception handling to build the top level table. - - ST : aliased constant array (1 .. 23) of System.Address := ( - Hello'UET_Address, - Ada.Text_Io'UET_Address, - Ada.Exceptions'UET_Address, - Gnat.Heap_Sort_A'UET_Address, - System.Exception_Table'UET_Address, - System.Machine_State_Operations'UET_Address, - System.Secondary_Stack'UET_Address, - System.Parameters'UET_Address, - System.Soft_Links'UET_Address, - System.Stack_Checking'UET_Address, - System.Traceback'UET_Address, - Ada.Streams'UET_Address, - Ada.Tags'UET_Address, - System.String_Ops'UET_Address, - Interfaces.C_Streams'UET_Address, - System.File_Io'UET_Address, - Ada.Finalization'UET_Address, - System.Finalization_Root'UET_Address, - System.Finalization_Implementation'UET_Address, - System.String_Ops_Concat_3'UET_Address, - System.Stream_Attributes'UET_Address, - System.File_Control_Block'UET_Address, - Ada.Finalization.List_Controller'UET_Address); - - -- Table of addresses of elaboration routines. Used for - -- zero cost exception handling to make sure these - -- addresses are included in the top level procedure - -- address table. - - EA : aliased constant array (1 .. 23) of System.Address := ( - adainit'Code_Address, - Do_Finalize'Code_Address, - Ada.Exceptions'Elab_Spec'Address, - System.Exceptions'Elab_Spec'Address, - Interfaces.C_Streams'Elab_Spec'Address, - System.Exception_Table'Elab_Body'Address, - Ada.Io_Exceptions'Elab_Spec'Address, - System.Stack_Checking'Elab_Spec'Address, - System.Soft_Links'Elab_Body'Address, - System.Secondary_Stack'Elab_Body'Address, - Ada.Tags'Elab_Spec'Address, - Ada.Tags'Elab_Body'Address, - Ada.Streams'Elab_Spec'Address, - System.Finalization_Root'Elab_Spec'Address, - Ada.Exceptions'Elab_Body'Address, - System.Finalization_Implementation'Elab_Spec'Address, - System.Finalization_Implementation'Elab_Body'Address, - Ada.Finalization'Elab_Spec'Address, - Ada.Finalization.List_Controller'Elab_Spec'Address, - System.File_Control_Block'Elab_Spec'Address, - System.File_Io'Elab_Body'Address, - Ada.Text_Io'Elab_Spec'Address, - Ada.Text_Io'Elab_Body'Address); - - -- Start of processing for adainit - - begin - - -- Call SDP_Table_Build to build the top level procedure - -- table for zero cost exception handling (omitted in - -- longjmp/setjump mode). - - SDP_Table_Build (ST'Address, 23, EA'Address, 23); - - -- Call Set_Globals to record various information for - -- this partition. The values are derived by the binder - -- from information stored in the ali files by the compiler. - - Set_Globals - (Main_Priority => -1, - -- Priority of main program, -1 if no pragma Priority used - - Time_Slice_Value => -1, - -- Time slice from Time_Slice pragma, -1 if none used - - WC_Encoding => 'b', - -- Wide_Character encoding used, default is brackets - - Locking_Policy => ' ', - -- Locking_Policy used, default of space means not - -- specified, otherwise it is the first character of - -- the policy name. - - Queuing_Policy => ' ', - -- Queuing_Policy used, default of space means not - -- specified, otherwise it is the first character of - -- the policy name. - - Task_Dispatching_Policy => ' ', - -- Task_Dispatching_Policy used, default of space means - -- not specified, otherwise first character of the - -- policy name. - - Adafinal => System.Null_Address, - -- Address of Adafinal routine, not used anymore - - Unreserve_All_Interrupts => 0, - -- Set true if pragma Unreserve_All_Interrupts was used - - Exception_Tracebacks => 0); - -- Indicates if exception tracebacks are enabled - - Elab_Final_Code := 1; - - -- Now we have the elaboration calls for all units in the partition. - -- The Elab_Spec and Elab_Body attributes generate references to the - -- implicit elaboration procedures generated by the compiler for - -- each unit that requires elaboration. - - if not E040 then - Interfaces.C_Streams'Elab_Spec; - end if; - E040 := True; - if not E008 then - Ada.Exceptions'Elab_Spec; - end if; - if not E014 then - System.Exception_Table'Elab_Body; - E014 := True; - end if; - if not E053 then - Ada.Io_Exceptions'Elab_Spec; - E053 := True; - end if; - if not E017 then - System.Exceptions'Elab_Spec; - E017 := True; - end if; - if not E030 then - System.Stack_Checking'Elab_Spec; - end if; - if not E028 then - System.Soft_Links'Elab_Body; - E028 := True; - end if; - E030 := True; - if not E024 then - System.Secondary_Stack'Elab_Body; - E024 := True; - end if; - if not E035 then - Ada.Tags'Elab_Spec; - end if; - if not E035 then - Ada.Tags'Elab_Body; - E035 := True; - end if; - if not E033 then - Ada.Streams'Elab_Spec; - E033 := True; - end if; - if not E046 then - System.Finalization_Root'Elab_Spec; - end if; - E046 := True; - if not E008 then - Ada.Exceptions'Elab_Body; - E008 := True; - end if; - if not E048 then - System.Finalization_Implementation'Elab_Spec; - end if; - if not E048 then - System.Finalization_Implementation'Elab_Body; - E048 := True; - end if; - if not E044 then - Ada.Finalization'Elab_Spec; - end if; - E044 := True; - if not E057 then - Ada.Finalization.List_Controller'Elab_Spec; - end if; - E057 := True; - if not E055 then - System.File_Control_Block'Elab_Spec; - E055 := True; - end if; - if not E042 then - System.File_Io'Elab_Body; - E042 := True; - end if; - if not E006 then - Ada.Text_Io'Elab_Spec; - end if; - if not E006 then - Ada.Text_Io'Elab_Body; - E006 := True; - end if; - - Elab_Final_Code := 0; - end adainit; - - -------------- - -- adafinal -- - -------------- - - procedure adafinal is - begin - Do_Finalize; - end adafinal; - - ---------- - -- main -- - ---------- - - -- main is actually a function, as in the ANSI C standard, - -- defined to return the exit status. The three parameters - -- are the argument count, argument values and environment - -- pointer. - - function main - (argc : Integer; - argv : System.Address; - envp : System.Address) - return Integer - is - -- The initialize routine performs low level system - -- initialization using a standard library routine which - -- sets up signal handling and performs any other - -- required setup. The routine can be found in file - -- a-init.c. - - procedure initialize; - pragma Import (C, initialize, "__gnat_initialize"); - - -- The finalize routine performs low level system - -- finalization using a standard library routine. The - -- routine is found in file a-final.c and in the standard - -- distribution is a dummy routine that does nothing, so - -- really this is a hook for special user finalization. - - procedure finalize; - pragma Import (C, finalize, "__gnat_finalize"); - - -- We get to the main program of the partition by using - -- pragma Import because if we try to with the unit and - -- call it Ada style, then not only do we waste time - -- recompiling it, but also, we don't really know the right - -- switches (e.g. identifier character set) to be used - -- to compile it. - - procedure Ada_Main_Program; - pragma Import (Ada, Ada_Main_Program, "_ada_hello"); - - -- Start of processing for main - - begin - -- Save global variables - - gnat_argc := argc; - gnat_argv := argv; - gnat_envp := envp; - - -- Call low level system initialization - - Initialize; - - -- Call our generated Ada initialization routine - - adainit; - - -- This is the point at which we want the debugger to get - -- control - - Break_Start; - - -- Now we call the main program of the partition - - Ada_Main_Program; - - -- Perform Ada finalization - - adafinal; - - -- Perform low level system finalization - - Finalize; - - -- Return the proper exit status - return (gnat_exit_status); - end; - - -- This section is entirely comments, so it has no effect on the - -- compilation of the Ada_Main package. It provides the list of - -- object files and linker options, as well as some standard - -- libraries needed for the link. The gnatlink utility parses - -- this b~hello.adb file to read these comment lines to generate - -- the appropriate command line arguments for the call to the - -- system linker. The BEGIN/END lines are used for sentinels for - -- this parsing operation. - - -- The exact file names will of course depend on the environment, - -- host/target and location of files on the host system. - - -- BEGIN Object file/option list - -- ./hello.o - -- -L./ - -- -L/usr/local/gnat/lib/gcc-lib/i686-pc-linux-gnu/2.8.1/adalib/ - -- /usr/local/gnat/lib/gcc-lib/i686-pc-linux-gnu/2.8.1/adalib/libgnat.a - -- END Object file/option list - - end ada_main; - - The Ada code in the above example is exactly what is generated by the - binder. We have added comments to more clearly indicate the function of - each part of the generated `Ada_Main' package. - - The code is standard Ada in all respects, and can be processed by any - tools that handle Ada. In particular, it is possible to use the debugger - in Ada mode to debug the generated Ada_Main package. For example, - suppose that for reasons that you do not understand, your program is - blowing up during elaboration of the body of `Ada.Text_IO'. To chase - this bug down, you can place a breakpoint on the call: - - Ada.Text_Io'Elab_Body; - - and trace the elaboration routine for this package to find out where - the problem might be (more usually of course you would be debugging - elaboration code in your own application). - -  - File: gnat_ug_wnt.info, Node: Generating the Binder Program in C, Next: Consistency-Checking Modes, Prev: Running gnatbind, Up: Binding Using gnatbind - - Generating the Binder Program in C - ================================== - - In most normal usage, the default mode of `gnatbind' which is to - generate the main package in Ada, as described in the previous section. - In particular, this means that any Ada programmer can read and - understand the generated main program. It can also be debugged just - like any other Ada code provided the `-g' switch is used for `gnatbind' - and `gnatlink'. - - However for some purposes it may be convenient to generate the main - program in C rather than Ada. This may for example be helpful when you - are generating a mixed language program with the main program in C. The - GNAT compiler itself is an example. The use of the `-C' switch for both - `gnatbind' and `gnatlink' will cause the program to be generated in C - (and compiled using the gnu C compiler). The following shows the C code - generated for the same "Hello World" program: - - - #ifdef __STDC__ - #define PARAMS(paramlist) paramlist - #else - #define PARAMS(paramlist) () - #endif - - extern void __gnat_set_globals - PARAMS ((int, int, int, int, int, int, - void (*) PARAMS ((void)), int, int)); - extern void adafinal PARAMS ((void)); - extern void adainit PARAMS ((void)); - extern void system__standard_library__adafinal PARAMS ((void)); - extern int main PARAMS ((int, char **, char **)); - extern void exit PARAMS ((int)); - extern void __gnat_break_start PARAMS ((void)); - extern void _ada_hello PARAMS ((void)); - extern void __gnat_initialize PARAMS ((void)); - extern void __gnat_finalize PARAMS ((void)); - - extern void ada__exceptions___elabs PARAMS ((void)); - extern void system__exceptions___elabs PARAMS ((void)); - extern void interfaces__c_streams___elabs PARAMS ((void)); - extern void system__exception_table___elabb PARAMS ((void)); - extern void ada__io_exceptions___elabs PARAMS ((void)); - extern void system__stack_checking___elabs PARAMS ((void)); - extern void system__soft_links___elabb PARAMS ((void)); - extern void system__secondary_stack___elabb PARAMS ((void)); - extern void ada__tags___elabs PARAMS ((void)); - extern void ada__tags___elabb PARAMS ((void)); - extern void ada__streams___elabs PARAMS ((void)); - extern void system__finalization_root___elabs PARAMS ((void)); - extern void ada__exceptions___elabb PARAMS ((void)); - extern void system__finalization_implementation___elabs PARAMS ((void)); - extern void system__finalization_implementation___elabb PARAMS ((void)); - extern void ada__finalization___elabs PARAMS ((void)); - extern void ada__finalization__list_controller___elabs PARAMS ((void)); - extern void system__file_control_block___elabs PARAMS ((void)); - extern void system__file_io___elabb PARAMS ((void)); - extern void ada__text_io___elabs PARAMS ((void)); - extern void ada__text_io___elabb PARAMS ((void)); - - extern int __gnat_inside_elab_final_code; - - extern int gnat_argc; - extern char **gnat_argv; - extern char **gnat_envp; - extern int gnat_exit_status; - - char __gnat_version[] = "GNAT Version: 3.15w (20010315)"; - void adafinal () { - system__standard_library__adafinal (); - } - - void adainit () - { - extern char ada__exceptions_E; - extern char system__exceptions_E; - extern char interfaces__c_streams_E; - extern char system__exception_table_E; - extern char ada__io_exceptions_E; - extern char system__secondary_stack_E; - extern char system__stack_checking_E; - extern char system__soft_links_E; - extern char ada__tags_E; - extern char ada__streams_E; - extern char system__finalization_root_E; - extern char system__finalization_implementation_E; - extern char ada__finalization_E; - extern char ada__finalization__list_controller_E; - extern char system__file_control_block_E; - extern char system__file_io_E; - extern char ada__text_io_E; - - extern void *__gnat_hello__SDP; - extern void *__gnat_ada__text_io__SDP; - extern void *__gnat_ada__exceptions__SDP; - extern void *__gnat_gnat__heap_sort_a__SDP; - extern void *__gnat_system__exception_table__SDP; - extern void *__gnat_system__machine_state_operations__SDP; - extern void *__gnat_system__secondary_stack__SDP; - extern void *__gnat_system__parameters__SDP; - extern void *__gnat_system__soft_links__SDP; - extern void *__gnat_system__stack_checking__SDP; - extern void *__gnat_system__traceback__SDP; - extern void *__gnat_ada__streams__SDP; - extern void *__gnat_ada__tags__SDP; - extern void *__gnat_system__string_ops__SDP; - extern void *__gnat_interfaces__c_streams__SDP; - extern void *__gnat_system__file_io__SDP; - extern void *__gnat_ada__finalization__SDP; - extern void *__gnat_system__finalization_root__SDP; - extern void *__gnat_system__finalization_implementation__SDP; - extern void *__gnat_system__string_ops_concat_3__SDP; - extern void *__gnat_system__stream_attributes__SDP; - extern void *__gnat_system__file_control_block__SDP; - extern void *__gnat_ada__finalization__list_controller__SDP; - - void **st[23] = { - &__gnat_hello__SDP, - &__gnat_ada__text_io__SDP, - &__gnat_ada__exceptions__SDP, - &__gnat_gnat__heap_sort_a__SDP, - &__gnat_system__exception_table__SDP, - &__gnat_system__machine_state_operations__SDP, - &__gnat_system__secondary_stack__SDP, - &__gnat_system__parameters__SDP, - &__gnat_system__soft_links__SDP, - &__gnat_system__stack_checking__SDP, - &__gnat_system__traceback__SDP, - &__gnat_ada__streams__SDP, - &__gnat_ada__tags__SDP, - &__gnat_system__string_ops__SDP, - &__gnat_interfaces__c_streams__SDP, - &__gnat_system__file_io__SDP, - &__gnat_ada__finalization__SDP, - &__gnat_system__finalization_root__SDP, - &__gnat_system__finalization_implementation__SDP, - &__gnat_system__string_ops_concat_3__SDP, - &__gnat_system__stream_attributes__SDP, - &__gnat_system__file_control_block__SDP, - &__gnat_ada__finalization__list_controller__SDP}; - - extern void ada__exceptions___elabs (); - extern void system__exceptions___elabs (); - extern void interfaces__c_streams___elabs (); - extern void system__exception_table___elabb (); - extern void ada__io_exceptions___elabs (); - extern void system__stack_checking___elabs (); - extern void system__soft_links___elabb (); - extern void system__secondary_stack___elabb (); - extern void ada__tags___elabs (); - extern void ada__tags___elabb (); - extern void ada__streams___elabs (); - extern void system__finalization_root___elabs (); - extern void ada__exceptions___elabb (); - extern void system__finalization_implementation___elabs (); - extern void system__finalization_implementation___elabb (); - extern void ada__finalization___elabs (); - extern void ada__finalization__list_controller___elabs (); - extern void system__file_control_block___elabs (); - extern void system__file_io___elabb (); - extern void ada__text_io___elabs (); - extern void ada__text_io___elabb (); - - void (*ea[23]) () = { - adainit, - system__standard_library__adafinal, - ada__exceptions___elabs, - system__exceptions___elabs, - interfaces__c_streams___elabs, - system__exception_table___elabb, - ada__io_exceptions___elabs, - system__stack_checking___elabs, - system__soft_links___elabb, - system__secondary_stack___elabb, - ada__tags___elabs, - ada__tags___elabb, - ada__streams___elabs, - system__finalization_root___elabs, - ada__exceptions___elabb, - system__finalization_implementation___elabs, - system__finalization_implementation___elabb, - ada__finalization___elabs, - ada__finalization__list_controller___elabs, - system__file_control_block___elabs, - system__file_io___elabb, - ada__text_io___elabs, - ada__text_io___elabb}; - - __gnat_SDP_Table_Build (&st, 23, ea, 23); - __gnat_set_globals ( - -1, /* Main_Priority */ - -1, /* Time_Slice_Value */ - 'b', /* WC_Encoding */ - ' ', /* Locking_Policy */ - ' ', /* Queuing_Policy */ - ' ', /* Tasking_Dispatching_Policy */ - 0, /* Finalization routine address, not used anymore */ - 0, /* Unreserve_All_Interrupts */ - 0); /* Exception_Tracebacks */ - - __gnat_inside_elab_final_code = 1; - - if (ada__exceptions_E == 0) { - ada__exceptions___elabs (); - } - if (system__exceptions_E == 0) { - system__exceptions___elabs (); - system__exceptions_E++; - } - if (interfaces__c_streams_E == 0) { - interfaces__c_streams___elabs (); - } - interfaces__c_streams_E = 1; - if (system__exception_table_E == 0) { - system__exception_table___elabb (); - system__exception_table_E++; - } - if (ada__io_exceptions_E == 0) { - ada__io_exceptions___elabs (); - ada__io_exceptions_E++; - } - if (system__stack_checking_E == 0) { - system__stack_checking___elabs (); - } - if (system__soft_links_E == 0) { - system__soft_links___elabb (); - system__soft_links_E++; - } - system__stack_checking_E = 1; - if (system__secondary_stack_E == 0) { - system__secondary_stack___elabb (); - system__secondary_stack_E++; - } - if (ada__tags_E == 0) { - ada__tags___elabs (); - } - if (ada__tags_E == 0) { - ada__tags___elabb (); - ada__tags_E++; - } - if (ada__streams_E == 0) { - ada__streams___elabs (); - ada__streams_E++; - } - if (system__finalization_root_E == 0) { - system__finalization_root___elabs (); - } - system__finalization_root_E = 1; - if (ada__exceptions_E == 0) { - ada__exceptions___elabb (); - ada__exceptions_E++; - } - if (system__finalization_implementation_E == 0) { - system__finalization_implementation___elabs (); - } - if (system__finalization_implementation_E == 0) { - system__finalization_implementation___elabb (); - system__finalization_implementation_E++; - } - if (ada__finalization_E == 0) { - ada__finalization___elabs (); - } - ada__finalization_E = 1; - if (ada__finalization__list_controller_E == 0) { - ada__finalization__list_controller___elabs (); - } - ada__finalization__list_controller_E = 1; - if (system__file_control_block_E == 0) { - system__file_control_block___elabs (); - system__file_control_block_E++; - } - if (system__file_io_E == 0) { - system__file_io___elabb (); - system__file_io_E++; - } - if (ada__text_io_E == 0) { - ada__text_io___elabs (); - } - if (ada__text_io_E == 0) { - ada__text_io___elabb (); - ada__text_io_E++; - } - - __gnat_inside_elab_final_code = 0; - } - int main (argc, argv, envp) - int argc; - char **argv; - char **envp; - { - gnat_argc = argc; - gnat_argv = argv; - gnat_envp = envp; - - __gnat_initialize (); - adainit (); - __gnat_break_start (); - - _ada_hello (); - - system__standard_library__adafinal (); - __gnat_finalize (); - exit (gnat_exit_status); - } - unsigned helloB = 0x7880BEB3; - unsigned system__standard_libraryB = 0x0D24CBD0; - unsigned system__standard_libraryS = 0x3283DBEB; - unsigned adaS = 0x2359F9ED; - unsigned ada__text_ioB = 0x47C85FC4; - unsigned ada__text_ioS = 0x496FE45C; - unsigned ada__exceptionsB = 0x74F50187; - unsigned ada__exceptionsS = 0x6736945B; - unsigned gnatS = 0x156A40CF; - unsigned gnat__heap_sort_aB = 0x033DABE0; - unsigned gnat__heap_sort_aS = 0x6AB38FEA; - unsigned systemS = 0x0331C6FE; - unsigned system__exceptionsS = 0x20C9ECA4; - unsigned system__exception_tableB = 0x68A22947; - unsigned system__exception_tableS = 0x394BADD5; - unsigned gnat__htableB = 0x08258E1B; - unsigned gnat__htableS = 0x367D5222; - unsigned system__machine_state_operationsB = 0x4F3B7492; - unsigned system__machine_state_operationsS = 0x182F5CF4; - unsigned system__storage_elementsB = 0x2F1EB794; - unsigned system__storage_elementsS = 0x102C83C7; - unsigned system__secondary_stackB = 0x1574B6E9; - unsigned system__secondary_stackS = 0x708E260A; - unsigned system__parametersB = 0x56D770CD; - unsigned system__parametersS = 0x237E39BE; - unsigned system__soft_linksB = 0x08AB6B2C; - unsigned system__soft_linksS = 0x1E2491F3; - unsigned system__stack_checkingB = 0x476457A0; - unsigned system__stack_checkingS = 0x5299FCED; - unsigned system__tracebackB = 0x2971EBDE; - unsigned system__tracebackS = 0x2E9C3122; - unsigned ada__streamsS = 0x7C25DE96; - unsigned ada__tagsB = 0x39ADFFA2; - unsigned ada__tagsS = 0x769A0464; - unsigned system__string_opsB = 0x5EB646AB; - unsigned system__string_opsS = 0x63CED018; - unsigned interfacesS = 0x0357E00A; - unsigned interfaces__c_streamsB = 0x3784FB72; - unsigned interfaces__c_streamsS = 0x2E723019; - unsigned system__file_ioB = 0x623358EA; - unsigned system__file_ioS = 0x31F873E6; - unsigned ada__finalizationB = 0x6843F68A; - unsigned ada__finalizationS = 0x63305874; - unsigned system__finalization_rootB = 0x31E56CE1; - unsigned system__finalization_rootS = 0x23169EF3; - unsigned system__finalization_implementationB = 0x6CCBA70E; - unsigned system__finalization_implementationS = 0x604AA587; - unsigned system__string_ops_concat_3B = 0x572E3F58; - unsigned system__string_ops_concat_3S = 0x01F57876; - unsigned system__stream_attributesB = 0x1D4F93E8; - unsigned system__stream_attributesS = 0x30B2EC3D; - unsigned ada__io_exceptionsS = 0x34054F96; - unsigned system__unsigned_typesS = 0x7B9E7FE3; - unsigned system__file_control_blockS = 0x2FF876A8; - unsigned ada__finalization__list_controllerB = 0x5760634A; - unsigned ada__finalization__list_controllerS = 0x5D851835; - - /* BEGIN ELABORATION ORDER - ada (spec) - gnat (spec) - gnat.heap_sort_a (spec) - gnat.htable (spec) - gnat.htable (body) - interfaces (spec) - system (spec) - system.parameters (spec) - system.standard_library (spec) - ada.exceptions (spec) - system.exceptions (spec) - system.parameters (body) - gnat.heap_sort_a (body) - interfaces.c_streams (spec) - interfaces.c_streams (body) - system.exception_table (spec) - system.exception_table (body) - ada.io_exceptions (spec) - system.storage_elements (spec) - system.storage_elements (body) - system.machine_state_operations (spec) - system.machine_state_operations (body) - system.secondary_stack (spec) - system.stack_checking (spec) - system.soft_links (spec) - system.soft_links (body) - system.stack_checking (body) - system.secondary_stack (body) - system.standard_library (body) - system.string_ops (spec) - system.string_ops (body) - ada.tags (spec) - ada.tags (body) - ada.streams (spec) - system.finalization_root (spec) - system.finalization_root (body) - system.string_ops_concat_3 (spec) - system.string_ops_concat_3 (body) - system.traceback (spec) - system.traceback (body) - ada.exceptions (body) - system.unsigned_types (spec) - system.stream_attributes (spec) - system.stream_attributes (body) - system.finalization_implementation (spec) - system.finalization_implementation (body) - ada.finalization (spec) - ada.finalization (body) - ada.finalization.list_controller (spec) - ada.finalization.list_controller (body) - system.file_control_block (spec) - system.file_io (spec) - system.file_io (body) - ada.text_io (spec) - ada.text_io (body) - hello (body) - END ELABORATION ORDER */ - - /* BEGIN Object file/option list - ./hello.o - -L./ - -L/usr/local/gnat/lib/gcc-lib/alpha-dec-osf5.1/2.8.1/adalib/ - /usr/local/gnat/lib/gcc-lib/alpha-dec-osf5.1/2.8.1/adalib/libgnat.a - -lexc - END Object file/option list */ - - Here again, the C code is exactly what is generated by the binder. The - functions of the various parts of this code correspond in an obvious - manner with the commented Ada code shown in the example in the previous - section. - -  - File: gnat_ug_wnt.info, Node: Consistency-Checking Modes, Next: Binder Error Message Control, Prev: Generating the Binder Program in C, Up: Binding Using gnatbind - - Consistency-Checking Modes - ========================== - - As described in the previous section, by default `gnatbind' checks that - object files are consistent with one another and are consistent with - any source files it can locate. The following switches control binder - access to sources. - - `-s' - Require source files to be present. In this mode, the binder must - be able to locate all source files that are referenced, in order - to check their consistency. In normal mode, if a source file - cannot be located it is simply ignored. If you specify this - switch, a missing source file is an error. - - `-x' - Exclude source files. In this mode, the binder only checks that ALI - files are consistent with one another. Source files are not - accessed. The binder runs faster in this mode, and there is still - a guarantee that the resulting program is self-consistent. If a - source file has been edited since it was last compiled, and you - specify this switch, the binder will not detect that the object - file is out of date with respect to the source file. Note that - this is the mode that is automatically used by `gnatmake' because - in this case the checking against sources has already been - performed by `gnatmake' in the course of compilation (i.e. before - binding). - -  - File: gnat_ug_wnt.info, Node: Binder Error Message Control, Next: Elaboration Control, Prev: Consistency-Checking Modes, Up: Binding Using gnatbind - - Binder Error Message Control - ============================ - - The following switches provide control over the generation of error - messages from the binder: - - `-v' - Verbose mode. In the normal mode, brief error messages are - generated to `stderr'. If this switch is present, a header is - written to `stdout' and any error messages are directed to - `stdout'. All that is written to `stderr' is a brief summary - message. - - `-b' - Generate brief error messages to `stderr' even if verbose mode is - specified. This is relevant only when used with the `-v' switch. - - `-mN' - Limits the number of error messages to N, a decimal integer in the - range 1-999. The binder terminates immediately if this limit is - reached. - - `-MXXX' - Renames the generated main program from `main' to `xxx'. This is - useful in the case of some cross-building environments, where the - actual main program is separate from the one generated by - `gnatbind'. - - `-ws' - Suppress all warning messages. - - `-we' - Treat any warning messages as fatal errors. - - `-t' - The binder performs a number of consistency checks including: - - * Check that time stamps of a given source unit are consistent - - * Check that checksums of a given source unit are consistent - - * Check that consistent versions of `GNAT' were used for - compilation - - * Check consistency of configuration pragmas as required - - Normally failure of such checks, in accordance with the consistency - requirements of the Ada Reference Manual, causes error messages to - be generated which abort the binder and prevent the output of a - binder file and subsequent link to obtain an executable. - - The `-t' switch converts these error messages into warnings, so - that binding and linking can continue to completion even in the - presence of such errors. The result may be a failed link (due to - missing symbols), or a non-functional executable which has - undefined semantics. _This means that `-t' should be used only in - unusual situations, with extreme care._ - -  - File: gnat_ug_wnt.info, Node: Elaboration Control, Next: Output Control, Prev: Binder Error Message Control, Up: Binding Using gnatbind - - Elaboration Control - =================== - - The following switches provide additional control over the elaboration - order. For full details see *Note Elaboration Order Handling in GNAT::. - - `-p' - Normally the binder attempts to choose an elaboration order that is - likely to minimize the likelihood of an elaboration order error - resulting in raising a `Program_Error' exception. This switch - reverses the action of the binder, and requests that it - deliberately choose an order that is likely to maximize the - likelihood of an elaboration error. This is useful in ensuring - portability and avoiding dependence on accidental fortuitous - elaboration ordering. - - Normally it only makes sense to use the `-p' switch if dynamic - elaboration checking is used (`-gnatE' switch used for - compilation). This is because in the default static elaboration - mode, all necessary `Elaborate_All' pragmas are implicitly - inserted. These implicit pragmas are still respected by the binder - in `-p' mode, so a safe elaboration order is assured. - -  - File: gnat_ug_wnt.info, Node: Output Control, Next: Binding with Non-Ada Main Programs, Prev: Elaboration Control, Up: Binding Using gnatbind - - Output Control - ============== - - The following switches allow additional control over the output - generated by the binder. - - `-A' - Generate binder program in Ada (default). The binder program is - named `b~MAINPROG.adb' by default. This can be changed with `-o' - `gnatbind' option. - - `-c' - Check only. Do not generate the binder output file. In this mode - the binder performs all error checks but does not generate an - output file. - - `-C' - Generate binder program in C. The binder program is named - `b_MAINPROG.c'. This can be changed with `-o' `gnatbind' option. - - `-e' - Output complete list of elaboration-order dependencies, showing the - reason for each dependency. This output can be rather extensive - but may be useful in diagnosing problems with elaboration order. - The output is written to `stdout'. - - `-h' - Output usage information. The output is written to `stdout'. - - `-K' - Output linker options to `stdout'. Includes library search paths, - contents of pragmas Ident and Linker_Options, and libraries added - by `gnatbind'. - - `-l' - Output chosen elaboration order. The output is written to `stdout'. - - `-O' - Output full names of all the object files that must be linked to - provide the Ada component of the program. The output is written to - `stdout'. This list includes the files explicitly supplied and - referenced by the user as well as implicitly referenced run-time - unit files. The latter are omitted if the corresponding units - reside in shared libraries. The directory names for the run-time - units depend on the system configuration. - - `-o FILE' - Set name of output file to FILE instead of the normal - `b~MAINPROG.adb' default. Note that FILE denote the Ada binder - generated body filename. In C mode you would normally give FILE an - extension of `.c' because it will be a C source program. Note - that if this option is used, then linking must be done manually. - It is not possible to use gnatlink in this case, since it cannot - locate the binder file. - - `-r' - Generate list of `pragma Rerstrictions' that could be applied to - the current unit. This is useful for code audit purposes, and also - may be used to improve code generation in some cases. - -  - File: gnat_ug_wnt.info, Node: Binding with Non-Ada Main Programs, Next: Binding Programs with No Main Subprogram, Prev: Output Control, Up: Binding Using gnatbind - - Binding with Non-Ada Main Programs - ================================== - - In our description so far we have assumed that the main program is in - Ada, and that the task of the binder is to generate a corresponding - function `main' that invokes this Ada main program. GNAT also supports - the building of executable programs where the main program is not in - Ada, but some of the called routines are written in Ada and compiled - using GNAT (*note Mixed Language Programming::). The following switch - is used in this situation: - - `-n' - No main program. The main program is not in Ada. - - In this case, most of the functions of the binder are still required, - but instead of generating a main program, the binder generates a file - containing the following callable routines: - - `adainit' - You must call this routine to initialize the Ada part of the - program by calling the necessary elaboration routines. A call to - `adainit' is required before the first call to an Ada subprogram. - - Note that it is assumed that the basic execution environment must - be setup to be appropriate for Ada execution at the point where - the first Ada subprogram is called. In particular, if the Ada code - will do any floating-point operations, then the FPU must be setup - in an appropriate manner. For the case of the x86, for example, - full precision mode is required. The procedure - GNAT.Float_Control.Reset may be used to ensure that the FPU is in - the right state. - - `adafinal' - You must call this routine to perform any library-level - finalization required by the Ada subprograms. A call to `adafinal' - is required after the last call to an Ada subprogram, and before - the program terminates. - - If the `-n' switch is given, more than one ALI file may appear on the - command line for `gnatbind'. The normal "closure" calculation is - performed for each of the specified units. Calculating the closure - means finding out the set of units involved by tracing `with' - references. The reason it is necessary to be able to specify more than - one ALI file is that a given program may invoke two or more quite - separate groups of Ada units. - - The binder takes the name of its output file from the last specified - ALI file, unless overridden by the use of the `-o file'. The output is - an Ada unit in source form that can be compiled with GNAT unless the -C - switch is used in which case the output is a C source file, which must - be compiled using the C compiler. This compilation occurs - automatically as part of the `gnatlink' processing. - - Currently the GNAT run time requires a FPU using 80 bits mode - precision. Under targets where this is not the default it is required to - call GNAT.Float_Control.Reset before using floating point numbers (this - include float computation, float input and output) in the Ada code. A - side effect is that this could be the wrong mode for the foreign code - where floating point computation could be broken after this call. - -  - File: gnat_ug_wnt.info, Node: Binding Programs with No Main Subprogram, Next: Summary of Binder Switches, Prev: Binding with Non-Ada Main Programs, Up: Binding Using gnatbind - - Binding Programs with No Main Subprogram - ======================================== - - It is possible to have an Ada program which does not have a main - subprogram. This program will call the elaboration routines of all the - packages, then the finalization routines. - - The following switch is used to bind programs organized in this - manner: - - `-z' - Normally the binder checks that the unit name given on the command - line corresponds to a suitable main subprogram. When this switch - is used, a list of ALI files can be given, and the execution of - the program consists of elaboration of these units in an - appropriate order. - -  - File: gnat_ug_wnt.info, Node: Summary of Binder Switches, Next: Command-Line Access, Prev: Binding Programs with No Main Subprogram, Up: Binding Using gnatbind - - Summary of Binder Switches - ========================== - - The following are the switches available with `gnatbind': - - `-aO' - Specify directory to be searched for ALI files. - - `-aI' - Specify directory to be searched for source file. - - `-A' - Generate binder program in Ada (default) - - `-b' - Generate brief messages to `stderr' even if verbose mode set. - - `-c' - Check only, no generation of binder output file. - - `-C' - Generate binder program in C - - `-e' - Output complete list of elaboration-order dependencies. - - `-E' - Store tracebacks in exception occurrences when the target supports - it. This is the default with the zero cost exception mechanism. - This option is currently supported on the following targets: all - x86 ports, Solaris, Windows, HP-UX, AIX, PowerPC VxWorks and Alpha - VxWorks. See also the packages `GNAT.Traceback' and - `GNAT.Traceback.Symbolic' for more information. Note that on x86 - ports, you must not use `-fomit-frame-pointer' `gcc' option. - - `-h' - Output usage (help) information - - `-I' - Specify directory to be searched for source and ALI files. - - `-I-' - Do not look for sources in the current directory where `gnatbind' - was invoked, and do not look for ALI files in the directory - containing the ALI file named in the `gnatbind' command line. - - `-l' - Output chosen elaboration order. - - `-Lxxx' - Binds the units for library building. In this case the adainit and - adafinal procedures (See *note Binding with Non-Ada Main - Programs::) are renamed to xxxinit and xxxfinal. Implies -n. See - *note GNAT and Libraries:: for more details. - - `-Mxyz' - Rename generated main program from main to xyz - - `-mN' - Limit number of detected errors to N (1-999). Furthermore, under - Windows, the sources pointed to by the libraries path set in the - registry are not searched for. - - `-n' - No main program. - - `-nostdinc' - Do not look for sources in the system default directory. - - `-nostdlib' - Do not look for library files in the system default directory. - - `--RTS=RTS-PATH' - Specifies the default location of the runtime library. Same - meaning as the equivalent `gnatmake' flag (see *Note Switches for - gnatmake::). - - `-o FILE' - Name the output file FILE (default is `b~XXX.adb'). Note that if - this option is used, then linking must be done manually, gnatlink - cannot be used. - - `-O' - Output object list. - - `-p' - Pessimistic (worst-case) elaboration order - - `-s' - Require all source files to be present. - - `-static' - Link against a static GNAT run time. - - `-shared' - Link against a shared GNAT run time when available. - - `-t' - Tolerate time stamp and other consistency errors - - `-TN' - Set the time slice value to n microseconds. A value of zero means - no time slicing and also indicates to the tasking run time to - match as close as possible to the annex D requirements of the RM. - - `-v' - Verbose mode. Write error messages, header, summary output to - `stdout'. - - `-wX' - Warning mode (X=s/e for suppress/treat as error) - - `-x' - Exclude source files (check object consistency only). - - `-z' - No main subprogram. - - You may obtain this listing by running the program `gnatbind' with - no arguments. - -  - File: gnat_ug_wnt.info, Node: Command-Line Access, Next: Search Paths for gnatbind, Prev: Summary of Binder Switches, Up: Binding Using gnatbind - - Command-Line Access - =================== - - The package `Ada.Command_Line' provides access to the command-line - arguments and program name. In order for this interface to operate - correctly, the two variables - - int gnat_argc; - char **gnat_argv; - - are declared in one of the GNAT library routines. These variables must - be set from the actual `argc' and `argv' values passed to the main - program. With no `n' present, `gnatbind' generates the C main program - to automatically set these variables. If the `n' switch is used, there - is no automatic way to set these variables. If they are not set, the - procedures in `Ada.Command_Line' will not be available, and any attempt - to use them will raise `Constraint_Error'. If command line access is - required, your main program must set `gnat_argc' and `gnat_argv' from - the `argc' and `argv' values passed to it. - -  - File: gnat_ug_wnt.info, Node: Search Paths for gnatbind, Next: Examples of gnatbind Usage, Prev: Command-Line Access, Up: Binding Using gnatbind - - Search Paths for `gnatbind' - =========================== - - The binder takes the name of an ALI file as its argument and needs to - locate source files as well as other ALI files to verify object - consistency. - - For source files, it follows exactly the same search rules as `gcc' - (*note Search Paths and the Run-Time Library (RTL)::). For ALI files the - directories searched are: - - 1. The directory containing the ALI file named in the command line, - unless the switch `-I-' is specified. - - 2. All directories specified by `-I' switches on the `gnatbind' - command line, in the order given. - - 3. Each of the directories listed in the value of the - `ADA_OBJECTS_PATH' environment variable. Construct this value - exactly as the `PATH' environment variable: a list of directory - names separated by colons (semicolons when working with the NT - version of GNAT). - - 4. The content of the "ada_object_path" file which is part of the GNAT - installation tree and is used to store standard libraries such as - the GNAT Run Time Library (RTL) unless the switch `-nostdlib' is - specified. *Note Installing an Ada Library:: - - In the binder the switch `-I' is used to specify both source and - library file paths. Use `-aI' instead if you want to specify source - paths only, and `-aO' if you want to specify library paths only. This - means that for the binder `-I'DIR is equivalent to `-aI'DIR `-aO'DIR. - The binder generates the bind file (a C language source file) in the - current working directory. - - The packages `Ada', `System', and `Interfaces' and their children - make up the GNAT Run-Time Library, together with the package GNAT and - its children, which contain a set of useful additional library - functions provided by GNAT. The sources for these units are needed by - the compiler and are kept together in one directory. The ALI files and - object files generated by compiling the RTL are needed by the binder - and the linker and are kept together in one directory, typically - different from the directory containing the sources. In a normal - installation, you need not specify these directory names when compiling - or binding. Either the environment variables or the built-in defaults - cause these files to be found. - - Besides simplifying access to the RTL, a major use of search paths is - in compiling sources from multiple directories. This can make - development environments much more flexible. - -  - File: gnat_ug_wnt.info, Node: Examples of gnatbind Usage, Prev: Search Paths for gnatbind, Up: Binding Using gnatbind - - Examples of `gnatbind' Usage - ============================ - - This section contains a number of examples of using the GNAT binding - utility `gnatbind'. - - `gnatbind hello' - The main program `Hello' (source program in `hello.adb') is bound - using the standard switch settings. The generated main program is - `b~hello.adb'. This is the normal, default use of the binder. - - `gnatbind hello -o mainprog.adb' - The main program `Hello' (source program in `hello.adb') is bound - using the standard switch settings. The generated main program is - `mainprog.adb' with the associated spec in `mainprog.ads'. Note - that you must specify the body here not the spec, in the case - where the output is in Ada. Note that if this option is used, then - linking must be done manually, since gnatlink will not be able to - find the generated file. - - `gnatbind main -C -o mainprog.c -x' - The main program `Main' (source program in `main.adb') is bound, - excluding source files from the consistency checking, generating - the file `mainprog.c'. - - `gnatbind -x main_program -C -o mainprog.c' - This command is exactly the same as the previous example. Switches - may appear anywhere in the command line, and single letter - switches may be combined into a single switch. - - `gnatbind -n math dbase -C -o ada-control.c' - The main program is in a language other than Ada, but calls to - subprograms in packages `Math' and `Dbase' appear. This call to - `gnatbind' generates the file `ada-control.c' containing the - `adainit' and `adafinal' routines to be called before and after - accessing the Ada units. - -  - File: gnat_ug_wnt.info, Node: Linking Using gnatlink, Next: The GNAT Make Program gnatmake, Prev: Binding Using gnatbind, Up: Top - - Linking Using `gnatlink' - ************************ - - This chapter discusses `gnatlink', a utility program used to link Ada - programs and build an executable file. This is a simple program that - invokes the Unix linker (via the `gcc' command) with a correct list of - object files and library references. `gnatlink' automatically - determines the list of files and references for the Ada part of a - program. It uses the binder file generated by the binder to determine - this list. - - * Menu: - - * Running gnatlink:: - * Switches for gnatlink:: - * Setting Stack Size from gnatlink:: - * Setting Heap Size from gnatlink:: - -  - File: gnat_ug_wnt.info, Node: Running gnatlink, Next: Switches for gnatlink, Up: Linking Using gnatlink - - Running `gnatlink' - ================== - - The form of the `gnatlink' command is - - $ gnatlink [SWITCHES] MAINPROG[.ali] [NON-ADA OBJECTS] - [LINKER OPTIONS] - - `MAINPROG.ali' references the ALI file of the main program. The `.ali' - extension of this file can be omitted. From this reference, `gnatlink' - locates the corresponding binder file `b~MAINPROG.adb' and, using the - information in this file along with the list of non-Ada objects and - linker options, constructs a Unix linker command file to create the - executable. - - The arguments following `MAINPROG.ali' are passed to the linker - uninterpreted. They typically include the names of object files for - units written in other languages than Ada and any library references - required to resolve references in any of these foreign language units, - or in `pragma Import' statements in any Ada units. - - LINKER OPTIONS is an optional list of linker specific switches. The - default linker called by gnatlink is GCC which in turn calls the - appropriate system linker usually called LD. Standard options for the - linker such as `-lmy_lib' or `-Ldir' can be added as is. For options - that are not recognized by GCC as linker options, the GCC switches - `-Xlinker' or `-Wl,' shall be used. Refer to the GCC documentation for - details. Here is an example showing how to generate a linker map - assuming that the underlying linker is GNU ld: - - $ gnatlink my_prog -Wl,-Map,MAPFILE - - Using LINKER OPTIONS it is possible to set the program stack and - heap size. See *note Setting Stack Size from gnatlink:: and *note - Setting Heap Size from gnatlink::. - - `gnatlink' determines the list of objects required by the Ada - program and prepends them to the list of objects passed to the linker. - `gnatlink' also gathers any arguments set by the use of `pragma - Linker_Options' and adds them to the list of arguments presented to the - linker. - -  - File: gnat_ug_wnt.info, Node: Switches for gnatlink, Next: Setting Stack Size from gnatlink, Prev: Running gnatlink, Up: Linking Using gnatlink - - Switches for `gnatlink' - ======================= - - The following switches are available with the `gnatlink' utility: - - `-A' - The binder has generated code in Ada. This is the default. - - `-C' - If instead of generating a file in Ada, the binder has generated - one in C, then the linker needs to know about it. Use this switch - to signal to `gnatlink' that the binder has generated C code - rather than Ada code. - - `-f' - On some targets, the command line length is limited, and `gnatlink' - will generate a separate file for the linker if the list of object - files is too long. The `-f' flag forces this file to be generated - even if the limit is not exceeded. This is useful in some cases to - deal with special situations where the command line length is - exceeded. - - `-g' - The option to include debugging information causes the Ada bind - file (in other words, `b~MAINPROG.adb') to be compiled with `-g'. - In addition, the binder does not delete the `b~MAINPROG.adb', - `b~MAINPROG.o' and `b~MAINPROG.ali' files. Without `-g', the - binder removes these files by default. The same procedure apply if - a C bind file was generated using `-C' `gnatbind' option, in this - case the filenames are `b_MAINPROG.c' and `b_MAINPROG.o'. - - `-n' - Do not compile the file generated by the binder. This may be used - when a link is rerun with different options, but there is no need - to recompile the binder file. - - `-v' - Causes additional information to be output, including a full list - of the included object files. This switch option is most useful - when you want to see what set of object files are being used in - the link step. - - `-v -v' - Very verbose mode. Requests that the compiler operate in verbose - mode when it compiles the binder file, and that the system linker - run in verbose mode. - - `-o EXEC-NAME' - EXEC-NAME specifies an alternate name for the generated executable - program. If this switch is omitted, the executable has the same - name as the main unit. For example, `gnatlink try.ali' creates an - executable called `try'. - - `-b TARGET' - Compile your program to run on TARGET, which is the name of a - system configuration. You must have a GNAT cross-compiler built if - TARGET is not the same as your host system. - - `-BDIR' - Load compiler executables (for example, `gnat1', the Ada compiler) - from DIR instead of the default location. Only use this switch - when multiple versions of the GNAT compiler are available. See the - `gcc' manual page for further details. You would normally use the - `-b' or `-V' switch instead. - - `--GCC=COMPILER_NAME' - Program used for compiling the binder file. The default is - ``gcc''. You need to use quotes around COMPILER_NAME if - `compiler_name' contains spaces or other separator characters. As - an example `--GCC="foo -x -y"' will instruct `gnatlink' to use - `foo -x -y' as your compiler. Note that switch `-c' is always - inserted after your command name. Thus in the above example the - compiler command that will be used by `gnatlink' will be `foo -c - -x -y'. If several `--GCC=compiler_name' are used, only the last - COMPILER_NAME is taken into account. However, all the additional - switches are also taken into account. Thus, `--GCC="foo -x -y" - --GCC="bar -z -t"' is equivalent to `--GCC="bar -x -y -z -t"'. - - `--LINK=NAME' - NAME is the name of the linker to be invoked. This is especially - useful in mixed language programs since languages such as c++ - require their own linker to be used. When this switch is omitted, - the default name for the linker is (`gcc'). When this switch is - used, the specified linker is called instead of (`gcc') with - exactly the same parameters that would have been passed to (`gcc') - so if the desired linker requires different parameters it is - necessary to use a wrapper script that massages the parameters - before invoking the real linker. It may be useful to control the - exact invocation by using the verbose switch. - -  - File: gnat_ug_wnt.info, Node: Setting Stack Size from gnatlink, Next: Setting Heap Size from gnatlink, Prev: Switches for gnatlink, Up: Linking Using gnatlink - - Setting Stack Size from `gnatlink' - ================================== - - It is possible to specify the program stack size from `gnatlink'. - Assuming that the underlying linker is GNU ld there is two ways to do - so: - - * using `-Xlinker' linker option - - $ gnatlink hello -Xlinker --stack=0x10000,0x1000 - - This set the stack reserve size to 0x10000 bytes and the stack - commit size to 0x1000 bytes. - - * using `-Wl' linker option - - $ gnatlink hello -Wl,--stack=0x1000000 - - This set the stack reserve size to 0x1000000 bytes. Note that with - `-Wl' option it is not possible to set the stack commit size - because the coma is a separator for this option. - - -  - File: gnat_ug_wnt.info, Node: Setting Heap Size from gnatlink, Prev: Setting Stack Size from gnatlink, Up: Linking Using gnatlink - - Setting Heap Size from `gnatlink' - ================================= - - It is possible to specify the program heap size from `gnatlink'. - Assuming that the underlying linker is GNU ld there is two ways to do - so: - - * using `-Xlinker' linker option - - $ gnatlink hello -Xlinker --heap=0x10000,0x1000 - - This set the heap reserve size to 0x10000 bytes and the heap commit - size to 0x1000 bytes. - - * using `-Wl' linker option - - $ gnatlink hello -Wl,--heap=0x1000000 - - This set the heap reserve size to 0x1000000 bytes. Note that with - `-Wl' option it is not possible to set the heap commit size - because the coma is a separator for this option. - - -  - File: gnat_ug_wnt.info, Node: The GNAT Make Program gnatmake, Next: Renaming Files Using gnatchop, Prev: Linking Using gnatlink, Up: Top - - The GNAT Make Program `gnatmake' - ******************************** - - * Menu: - - * Running gnatmake:: - * Switches for gnatmake:: - * Mode Switches for gnatmake:: - * Notes on the Command Line:: - * How gnatmake Works:: - * Examples of gnatmake Usage:: - - A typical development cycle when working on an Ada program consists of - the following steps: - - 1. Edit some sources to fix bugs. - - 2. Add enhancements. - - 3. Compile all sources affected. - - 4. Rebind and relink. - - 5. Test. - - The third step can be tricky, because not only do the modified files - have to be compiled, but any files depending on these files must also be - recompiled. The dependency rules in Ada can be quite complex, especially - in the presence of overloading, `use' clauses, generics and inlined - subprograms. - - `gnatmake' automatically takes care of the third and fourth steps of - this process. It determines which sources need to be compiled, compiles - them, and binds and links the resulting object files. - - Unlike some other Ada make programs, the dependencies are always - accurately recomputed from the new sources. The source based approach of - the GNAT compilation model makes this possible. This means that if - changes to the source program cause corresponding changes in - dependencies, they will always be tracked exactly correctly by - `gnatmake'. - -  - File: gnat_ug_wnt.info, Node: Running gnatmake, Next: Switches for gnatmake, Up: The GNAT Make Program gnatmake - - Running `gnatmake' - ================== - - The usual form of the `gnatmake' command is - - $ gnatmake [SWITCHES] FILE_NAME [FILE_NAMES] [MODE_SWITCHES] - - The only required argument is one FILE_NAME, which specifies a - compilation unit that is a main program. Several FILE_NAMES can be - specified: this will result in several executables being built. If - `switches' are present, they can be placed before the first FILE_NAME, - between FILE_NAMES or after the last FILE_NAME. If MODE_SWITCHES are - present, they must always be placed after the last FILE_NAME and all - `switches'. - - If you are using standard file extensions (.adb and .ads), then the - extension may be omitted from the FILE_NAME arguments. However, if you - are using non-standard extensions, then it is required that the - extension be given. A relative or absolute directory path can be - specified in a FILE_NAME, in which case, the input source file will be - searched for in the specified directory only. Otherwise, the input - source file will first be searched in the directory where `gnatmake' - was invoked and if it is not found, it will be search on the source - path of the compiler as described in *Note Search Paths and the - Run-Time Library (RTL)::. - - When several FILE_NAMES are specified, if an executable needs to be - rebuilt and relinked, all subsequent executables will be rebuilt and - relinked, even if this would not be absolutely necessary. - - All `gnatmake' output (except when you specify `-M') is to `stderr'. - The output produced by the `-M' switch is send to `stdout'. - -  - File: gnat_ug_wnt.info, Node: Switches for gnatmake, Next: Mode Switches for gnatmake, Prev: Running gnatmake, Up: The GNAT Make Program gnatmake - - Switches for `gnatmake' - ======================= - - You may specify any of the following switches to `gnatmake': - - `--GCC=COMPILER_NAME' - Program used for compiling. The default is ``gcc''. You need to use - quotes around COMPILER_NAME if `compiler_name' contains spaces or - other separator characters. As an example `--GCC="foo -x -y"' will - instruct `gnatmake' to use `foo -x -y' as your compiler. Note that - switch `-c' is always inserted after your command name. Thus in - the above example the compiler command that will be used by - `gnatmake' will be `foo -c -x -y'. If several - `--GCC=compiler_name' are used, only the last COMPILER_NAME is - taken into account. However, all the additional switches are also - taken into account. Thus, `--GCC="foo -x -y" --GCC="bar -z -t"' is - equivalent to `--GCC="bar -x -y -z -t"'. - - `--GNATBIND=BINDER_NAME' - Program used for binding. The default is ``gnatbind''. You need to - use quotes around BINDER_NAME if BINDER_NAME contains spaces or - other separator characters. As an example `--GNATBIND="bar -x -y"' - will instruct `gnatmake' to use `bar -x -y' as your binder. Binder - switches that are normally appended by `gnatmake' to ``gnatbind'' - are now appended to the end of `bar -x -y'. - - `--GNATLINK=LINKER_NAME' - Program used for linking. The default is ``gnatlink''. You need to - use quotes around LINKER_NAME if LINKER_NAME contains spaces or - other separator characters. As an example `--GNATLINK="lan -x -y"' - will instruct `gnatmake' to use `lan -x -y' as your linker. Linker - switches that are normally appended by `gnatmake' to ``gnatlink'' - are now appended to the end of `lan -x -y'. - - `-a' - Consider all files in the make process, even the GNAT internal - system files (for example, the predefined Ada library files), as - well as any locked files. Locked files are files whose ALI file is - write-protected. By default, `gnatmake' does not check these - files, because the assumption is that the GNAT internal files are - properly up to date, and also that any write protected ALI files - have been properly installed. Note that if there is an - installation problem, such that one of these files is not up to - date, it will be properly caught by the binder. You may have to - specify this switch if you are working on GNAT itself. `-a' is - also useful in conjunction with `-f' if you need to recompile an - entire application, including run-time files, using special - configuration pragma settings, such as a non-standard - `Float_Representation' pragma. By default `gnatmake -a' compiles - all GNAT internal files with `gcc -c -gnatpg' rather than `gcc -c'. - - `-b' - Bind only. Can be combined with `-c' to do compilation and - binding, but no link. Can be combined with `-l' to do binding and - linking. When not combined with `-c' all the units in the closure - of the main program must have been previously compiled and must be - up to date. The root unit specified by FILE_NAME may be given - without extension, with the source extension or, if no GNAT - Project File is specified, with the ALI file extension. - - `-c' - Compile only. Do not perform binding, except when `-b' is also - specified. Do not perform linking, except if both `-b' and `-l' - are also specified. If the root unit specified by FILE_NAME is - not a main unit, this is the default. Otherwise `gnatmake' will - attempt binding and linking unless all objects are up to date and - the executable is more recent than the objects. - - `-C' - Use a mapping file. A mapping file is a way to communicate to the - compiler two mappings: from unit names to file names (without any - directory information) and from file names to path names (with - full directory information). These mappings are used by the - compiler to short-circuit the path search. When `gnatmake' is - invoked with this switch, it will create a mapping file, initially - populated by the project manager, if `-P' is used, otherwise - initially empty. Each invocation of the compiler will add the newly - accessed sources to the mapping file. This will improve the source - search during the next invocation of the compiler. - - `-f' - Force recompilations. Recompile all sources, even though some - object files may be up to date, but don't recompile predefined or - GNAT internal files or locked files (files with a write-protected - ALI file), unless the `-a' switch is also specified. - - `' - - `-i' - In normal mode, `gnatmake' compiles all object files and ALI files - into the current directory. If the `-i' switch is used, then - instead object files and ALI files that already exist are - overwritten in place. This means that once a large project is - organized into separate directories in the desired manner, then - `gnatmake' will automatically maintain and update this - organization. If no ALI files are found on the Ada object path - (*Note Search Paths and the Run-Time Library (RTL)::), the new - object and ALI files are created in the directory containing the - source being compiled. If another organization is desired, where - objects and sources are kept in different directories, a useful - technique is to create dummy ALI files in the desired directories. - When detecting such a dummy file, `gnatmake' will be forced to - recompile the corresponding source file, and it will be put the - resulting object and ALI files in the directory where it found the - dummy file. - - `-jN' - Use N processes to carry out the (re)compilations. On a - multiprocessor machine compilations will occur in parallel. In the - event of compilation errors, messages from various compilations - might get interspersed (but `gnatmake' will give you the full - ordered list of failing compiles at the end). If this is - problematic, rerun the make process with n set to 1 to get a clean - list of messages. - - `-k' - Keep going. Continue as much as possible after a compilation - error. To ease the programmer's task in case of compilation - errors, the list of sources for which the compile fails is given - when `gnatmake' terminates. - - If `gnatmake' is invoked with several `file_names' and with this - switch, if there are compilation errors when building an - executable, `gnatmake' will not attempt to build the following - executables. - - `-l' - Link only. Can be combined with `-b' to binding and linking. - Linking will not be performed if combined with `-c' but not with - `-b'. When not combined with `-b' all the units in the closure of - the main program must have been previously compiled and must be up - to date, and the main program need to have been bound. The root - unit specified by FILE_NAME may be given without extension, with - the source extension or, if no GNAT Project File is specified, - with the ALI file extension. - - `-m' - Specifies that the minimum necessary amount of recompilations be - performed. In this mode `gnatmake' ignores time stamp differences - when the only modifications to a source file consist in - adding/removing comments, empty lines, spaces or tabs. This means - that if you have changed the comments in a source file or have - simply reformatted it, using this switch will tell gnatmake not to - recompile files that depend on it (provided other sources on which - these files depend have undergone no semantic modifications). Note - that the debugging information may be out of date with respect to - the sources if the `-m' switch causes a compilation to be - switched, so the use of this switch represents a trade-off between - compilation time and accurate debugging information. - - `-M' - Check if all objects are up to date. If they are, output the object - dependences to `stdout' in a form that can be directly exploited in - a `Makefile'. By default, each source file is prefixed with its - (relative or absolute) directory name. This name is whatever you - specified in the various `-aI' and `-I' switches. If you use - `gnatmake -M' `-q' (see below), only the source file names, - without relative paths, are output. If you just specify the `-M' - switch, dependencies of the GNAT internal system files are - omitted. This is typically what you want. If you also specify the - `-a' switch, dependencies of the GNAT internal files are also - listed. Note that dependencies of the objects in external Ada - libraries (see switch `-aL'DIR in the following list) are never - reported. - - `-n' - Don't compile, bind, or link. Checks if all objects are up to date. - If they are not, the full name of the first file that needs to be - recompiled is printed. Repeated use of this option, followed by - compiling the indicated source file, will eventually result in - recompiling all required units. - - `-o EXEC_NAME' - Output executable name. The name of the final executable program - will be EXEC_NAME. If the `-o' switch is omitted the default name - for the executable will be the name of the input file in - appropriate form for an executable file on the host system. - - This switch cannot be used when invoking `gnatmake' with several - `file_names'. - - `-q' - Quiet. When this flag is not set, the commands carried out by - `gnatmake' are displayed. - - `-s' - Recompile if compiler switches have changed since last compilation. - All compiler switches but -I and -o are taken into account in the - following way: orders between different "first letter" switches - are ignored, but orders between same switches are taken into - account. For example, `-O -O2' is different than `-O2 -O', but `-g - -O' is equivalent to `-O -g'. - - `-u' - Unique. Recompile at most the main file. It implies -c. Combined - with -f, it is equivalent to calling the compiler directly. - - `-v' - Verbose. Displays the reason for all recompilations `gnatmake' - decides are necessary. - - `-z' - No main subprogram. Bind and link the program even if the unit name - given on the command line is a package name. The resulting - executable will execute the elaboration routines of the package - and its closure, then the finalization routines. - - ``gcc' switches' - The switch `-g' or any uppercase switch (other than `-A', `-L' or - `-S') or any switch that is more than one character is passed to - `gcc' (e.g. `-O', `-gnato,' etc.) - - Source and library search path switches: - - `-aIDIR' - When looking for source files also look in directory DIR. The - order in which source files search is undertaken is described in - *Note Search Paths and the Run-Time Library (RTL)::. - - `-aLDIR' - Consider DIR as being an externally provided Ada library. - Instructs `gnatmake' to skip compilation units whose `.ali' files - have been located in directory DIR. This allows you to have - missing bodies for the units in DIR and to ignore out of date - bodies for the same units. You still need to specify the location - of the specs for these units by using the switches `-aIDIR' or - `-IDIR'. Note: this switch is provided for compatibility with - previous versions of `gnatmake'. The easier method of causing - standard libraries to be excluded from consideration is to - write-protect the corresponding ALI files. - - `-aODIR' - When searching for library and object files, look in directory - DIR. The order in which library files are searched is described in - *Note Search Paths for gnatbind::. - - `-ADIR' - Equivalent to `-aLDIR -aIDIR'. - - `-IDIR' - Equivalent to `-aODIR -aIDIR'. - - `-I-' - Do not look for source files in the directory containing the source - file named in the command line. Do not look for ALI or object - files in the directory where `gnatmake' was invoked. - - `-LDIR' - Add directory DIR to the list of directories in which the linker - Furthermore, under Windows, the sources pointed to by the - libraries path set in the registry are not searched for. will - search for libraries. This is equivalent to `-largs -L'DIR. - - `-nostdinc' - Do not look for source files in the system default directory. - - `-nostdlib' - Do not look for library files in the system default directory. - - `--RTS=RTS-PATH' - Specifies the default location of the runtime library. We look for - the runtime in the following directories, and stop as soon as a - valid runtime is found ("adainclude" or "ada_source_path", and - "adalib" or "ada_object_path" present): - - * /$rts_path - - * /$rts_path - - * /rts-$rts_path - - The selected path is handled like a normal RTS path. - -  - File: gnat_ug_wnt.info, Node: Mode Switches for gnatmake, Next: Notes on the Command Line, Prev: Switches for gnatmake, Up: The GNAT Make Program gnatmake - - Mode Switches for `gnatmake' - ============================ - - The mode switches (referred to as `mode_switches') allow the inclusion - of switches that are to be passed to the compiler itself, the binder or - the linker. The effect of a mode switch is to cause all subsequent - switches up to the end of the switch list, or up to the next mode - switch, to be interpreted as switches to be passed on to the designated - component of GNAT. - - `-cargs SWITCHES' - Compiler switches. Here SWITCHES is a list of switches that are - valid switches for `gcc'. They will be passed on to all compile - steps performed by `gnatmake'. - - `-bargs SWITCHES' - Binder switches. Here SWITCHES is a list of switches that are - valid switches for `gcc'. They will be passed on to all bind steps - performed by `gnatmake'. - - `-largs SWITCHES' - Linker switches. Here SWITCHES is a list of switches that are - valid switches for `gcc'. They will be passed on to all link steps - performed by `gnatmake'. - -  - File: gnat_ug_wnt.info, Node: Notes on the Command Line, Next: How gnatmake Works, Prev: Mode Switches for gnatmake, Up: The GNAT Make Program gnatmake - - Notes on the Command Line - ========================= - - This section contains some additional useful notes on the operation of - the `gnatmake' command. - - * If `gnatmake' finds no ALI files, it recompiles the main program - and all other units required by the main program. This means that - `gnatmake' can be used for the initial compile, as well as during - subsequent steps of the development cycle. - - * If you enter `gnatmake FILE.adb', where `FILE.adb' is a subunit or - body of a generic unit, `gnatmake' recompiles `FILE.adb' (because - it finds no ALI) and stops, issuing a warning. - - * In `gnatmake' the switch `-I' is used to specify both source and - library file paths. Use `-aI' instead if you just want to specify - source paths only and `-aO' if you want to specify library paths - only. - - * `gnatmake' examines both an ALI file and its corresponding object - file for consistency. If an ALI is more recent than its - corresponding object, or if the object file is missing, the - corresponding source will be recompiled. Note that `gnatmake' - expects an ALI and the corresponding object file to be in the same - directory. - - * `gnatmake' will ignore any files whose ALI file is write-protected. - This may conveniently be used to exclude standard libraries from - consideration and in particular it means that the use of the `-f' - switch will not recompile these files unless `-a' is also - specified. - - * `gnatmake' has been designed to make the use of Ada libraries - particularly convenient. Assume you have an Ada library organized - as follows: OBJ-DIR contains the objects and ALI files for of your - Ada compilation units, whereas INCLUDE-DIR contains the specs of - these units, but no bodies. Then to compile a unit stored in - `main.adb', which uses this Ada library you would just type - - $ gnatmake -aIINCLUDE-DIR -aLOBJ-DIR main - - * Using `gnatmake' along with the `-m (minimal recompilation)' - switch provides a mechanism for avoiding unnecessary - rcompilations. Using this switch, you can update the - comments/format of your source files without having to recompile - everything. Note, however, that adding or deleting lines in a - source files may render its debugging info obsolete. If the file - in question is a spec, the impact is rather limited, as that - debugging info will only be useful during the elaboration phase of - your program. For bodies the impact can be more significant. In - all events, your debugger will warn you if a source file is more - recent than the corresponding object, and alert you to the fact - that the debugging information may be out of date. - -  - File: gnat_ug_wnt.info, Node: How gnatmake Works, Next: Examples of gnatmake Usage, Prev: Notes on the Command Line, Up: The GNAT Make Program gnatmake - - How `gnatmake' Works - ==================== - - Generally `gnatmake' automatically performs all necessary - recompilations and you don't need to worry about how it works. However, - it may be useful to have some basic understanding of the `gnatmake' - approach and in particular to understand how it uses the results of - previous compilations without incorrectly depending on them. - - First a definition: an object file is considered "up to date" if the - corresponding ALI file exists and its time stamp predates that of the - object file and if all the source files listed in the dependency - section of this ALI file have time stamps matching those in the ALI - file. This means that neither the source file itself nor any files that - it depends on have been modified, and hence there is no need to - recompile this file. - - `gnatmake' works by first checking if the specified main unit is up - to date. If so, no compilations are required for the main unit. If not, - `gnatmake' compiles the main program to build a new ALI file that - reflects the latest sources. Then the ALI file of the main unit is - examined to find all the source files on which the main program depends, - and `gnatmake' recursively applies the above procedure on all these - files. - - This process ensures that `gnatmake' only trusts the dependencies in - an existing ALI file if they are known to be correct. Otherwise it - always recompiles to determine a new, guaranteed accurate set of - dependencies. As a result the program is compiled "upside down" from - what may be more familiar as the required order of compilation in some - other Ada systems. In particular, clients are compiled before the units - on which they depend. The ability of GNAT to compile in any order is - critical in allowing an order of compilation to be chosen that - guarantees that `gnatmake' will recompute a correct set of new - dependencies if necessary. - - When invoking `gnatmake' with several FILE_NAMES, if a unit is - imported by several of the executables, it will be recompiled at most - once. - -  - File: gnat_ug_wnt.info, Node: Examples of gnatmake Usage, Prev: How gnatmake Works, Up: The GNAT Make Program gnatmake - - Examples of `gnatmake' Usage - ============================ - - `gnatmake hello.adb' - Compile all files necessary to bind and link the main program - `hello.adb' (containing unit `Hello') and bind and link the - resulting object files to generate an executable file `hello'. - - `gnatmake main1 main2 main3' - Compile all files necessary to bind and link the main programs - `main1.adb' (containing unit `Main1'), `main2.adb' (containing - unit `Main2') and `main3.adb' (containing unit `Main3') and bind - and link the resulting object files to generate three executable - files `main1', `main2' and `main3'. - - `gnatmake -q Main_Unit -cargs -O2 -bargs -l' - Compile all files necessary to bind and link the main program unit - `Main_Unit' (from file `main_unit.adb'). All compilations will be - done with optimization level 2 and the order of elaboration will be - listed by the binder. `gnatmake' will operate in quiet mode, not - displaying commands it is executing. - -  - File: gnat_ug_wnt.info, Node: Renaming Files Using gnatchop, Next: Configuration Pragmas, Prev: The GNAT Make Program gnatmake, Up: Top - - Renaming Files Using `gnatchop' - ******************************* - - This chapter discusses how to handle files with multiple units by using - the `gnatchop' utility. This utility is also useful in renaming files - to meet the standard GNAT default file naming conventions. - - * Menu: - - * Handling Files with Multiple Units:: - * Operating gnatchop in Compilation Mode:: - * Command Line for gnatchop:: - * Switches for gnatchop:: - * Examples of gnatchop Usage:: - -  - File: gnat_ug_wnt.info, Node: Handling Files with Multiple Units, Next: Operating gnatchop in Compilation Mode, Up: Renaming Files Using gnatchop - - Handling Files with Multiple Units - ================================== - - The basic compilation model of GNAT requires that a file submitted to - the compiler have only one unit and there be a strict correspondence - between the file name and the unit name. - - The `gnatchop' utility allows both of these rules to be relaxed, - allowing GNAT to process files which contain multiple compilation units - and files with arbitrary file names. `gnatchop' reads the specified - file and generates one or more output files, containing one unit per - file. The unit and the file name correspond, as required by GNAT. - - If you want to permanently restructure a set of "foreign" files so - that they match the GNAT rules, and do the remaining development using - the GNAT structure, you can simply use `gnatchop' once, generate the - new set of files and work with them from that point on. - - Alternatively, if you want to keep your files in the "foreign" - format, perhaps to maintain compatibility with some other Ada - compilation system, you can set up a procedure where you use `gnatchop' - each time you compile, regarding the source files that it writes as - temporary files that you throw away. - -  - File: gnat_ug_wnt.info, Node: Operating gnatchop in Compilation Mode, Next: Command Line for gnatchop, Prev: Handling Files with Multiple Units, Up: Renaming Files Using gnatchop - - Operating gnatchop in Compilation Mode - ====================================== - - The basic function of `gnatchop' is to take a file with multiple units - and split it into separate files. The boundary between files is - reasonably clear, except for the issue of comments and pragmas. In - default mode, the rule is that any pragmas between units belong to the - previous unit, except that configuration pragmas always belong to the - following unit. Any comments belong to the following unit. These rules - almost always result in the right choice of the split point without - needing to mark it explicitly and most users will find this default to - be what they want. In this default mode it is incorrect to submit a - file containing only configuration pragmas, or one that ends in - configuration pragmas, to `gnatchop'. - - However, using a special option to activate "compilation mode", - `gnatchop' can perform another function, which is to provide exactly - the semantics required by the RM for handling of configuration pragmas - in a compilation. In the absence of configuration pragmas (at the main - file level), this option has no effect, but it causes such - configuration pragmas to be handled in a quite different manner. - - First, in compilation mode, if `gnatchop' is given a file that - consists of only configuration pragmas, then this file is appended to - the `gnat.adc' file in the current directory. This behavior provides - the required behavior described in the RM for the actions to be taken - on submitting such a file to the compiler, namely that these pragmas - should apply to all subsequent compilations in the same compilation - environment. Using GNAT, the current directory, possibly containing a - `gnat.adc' file is the representation of a compilation environment. For - more information on the `gnat.adc' file, see the section on handling of - configuration pragmas *note Handling of Configuration Pragmas::. - - Second, in compilation mode, if `gnatchop' is given a file that - starts with configuration pragmas, and contains one or more units, then - these configuration pragmas are prepended to each of the chopped files. - This behavior provides the required behavior described in the RM for the - actions to be taken on compiling such a file, namely that the pragmas - apply to all units in the compilation, but not to subsequently compiled - units. - - Finally, if configuration pragmas appear between units, they are - appended to the previous unit. This results in the previous unit being - illegal, since the compiler does not accept configuration pragmas that - follow a unit. This provides the required RM behavior that forbids - configuration pragmas other than those preceding the first compilation - unit of a compilation. - - For most purposes, `gnatchop' will be used in default mode. The - compilation mode described above is used only if you need exactly - accurate behavior with respect to compilations, and you have files that - contain multiple units and configuration pragmas. In this circumstance - the use of `gnatchop' with the compilation mode switch provides the - required behavior, and is for example the mode in which GNAT processes - the ACVC tests. - -  - File: gnat_ug_wnt.info, Node: Command Line for gnatchop, Next: Switches for gnatchop, Prev: Operating gnatchop in Compilation Mode, Up: Renaming Files Using gnatchop - - Command Line for `gnatchop' - =========================== - - The `gnatchop' command has the form: - - $ gnatchop switches FILE NAME [FILE NAME FILE NAME ...] - [DIRECTORY] - - The only required argument is the file name of the file to be chopped. - There are no restrictions on the form of this file name. The file itself - contains one or more Ada units, in normal GNAT format, concatenated - together. As shown, more than one file may be presented to be chopped. - - When run in default mode, `gnatchop' generates one output file in - the current directory for each unit in each of the files. - - DIRECTORY, if specified, gives the name of the directory to which - the output files will be written. If it is not specified, all files are - written to the current directory. - - For example, given a file called `hellofiles' containing - - procedure hello; - - with Text_IO; use Text_IO; - procedure hello is - begin - Put_Line ("Hello"); - end hello; - - the command - - $ gnatchop hellofiles - - generates two files in the current directory, one called `hello.ads' - containing the single line that is the procedure spec, and the other - called `hello.adb' containing the remaining text. The original file is - not affected. The generated files can be compiled in the normal manner. - -  - File: gnat_ug_wnt.info, Node: Switches for gnatchop, Next: Examples of gnatchop Usage, Prev: Command Line for gnatchop, Up: Renaming Files Using gnatchop - - Switches for `gnatchop' - ======================= - - `gnatchop' recognizes the following switches: - - `-c' - Causes `gnatchop' to operate in compilation mode, in which - configuration pragmas are handled according to strict RM rules. See - previous section for a full description of this mode. - - `-gnatxxx' - This passes the given `-gnatxxx' switch to `gnat' which is used to - parse the given file. Not all `xxx' options make sense, but for - example, the use of `-gnati2' allows `gnatchop' to process a - source file that uses Latin-2 coding for identifiers. - - `-h' - Causes `gnatchop' to generate a brief help summary to the standard - output file showing usage information. - - `-kMM' - Limit generated file names to the specified number `mm' of - characters. This is useful if the resulting set of files is - required to be interoperable with systems which limit the length - of file names. No space is allowed between the `-k' and the - numeric value. The numeric value may be omitted in which case a - default of `-k8', suitable for use with DOS-like file systems, is - used. If no `-k' switch is present then there is no limit on the - length of file names. - - `-p' - Causes the file modification time stamp of the input file to be - preserved and used for the time stamp of the output file(s). This - may be useful for preserving coherency of time stamps in an - enviroment where `gnatchop' is used as part of a standard build - process. - - `-q' - Causes output of informational messages indicating the set of - generated files to be suppressed. Warnings and error messages are - unaffected. - - `-r' - Generate `Source_Reference' pragmas. Use this switch if the output - files are regarded as temporary and development is to be done in - terms of the original unchopped file. This switch causes - `Source_Reference' pragmas to be inserted into each of the - generated files to refers back to the original file name and line - number. The result is that all error messages refer back to the - original unchopped file. In addition, the debugging information - placed into the object file (when the `-g' switch of `gcc' or - `gnatmake' is specified) also refers back to this original file so - that tools like profilers and debuggers will give information in - terms of the original unchopped file. - - If the original file to be chopped itself contains a - `Source_Reference' pragma referencing a third file, then gnatchop - respects this pragma, and the generated `Source_Reference' pragmas - in the chopped file refer to the original file, with appropriate - line numbers. This is particularly useful when `gnatchop' is used - in conjunction with `gnatprep' to compile files that contain - preprocessing statements and multiple units. - - `-v' - Causes `gnatchop' to operate in verbose mode. The version number - and copyright notice are output, as well as exact copies of the - gnat1 commands spawned to obtain the chop control information. - - `-w' - Overwrite existing file names. Normally `gnatchop' regards it as a - fatal error if there is already a file with the same name as a - file it would otherwise output, in other words if the files to be - chopped contain duplicated units. This switch bypasses this check, - and causes all but the last instance of such duplicated units to - be skipped. - - `--GCC=xxxx' - Specify the path of the GNAT parser to be used. When this switch - is used, no attempt is made to add the prefix to the GNAT parser - executable. - -  - File: gnat_ug_wnt.info, Node: Examples of gnatchop Usage, Prev: Switches for gnatchop, Up: Renaming Files Using gnatchop - - Examples of `gnatchop' Usage - ============================ - - `gnatchop -w hello_s.ada ichbiah/files' - Chops the source file `hello_s.ada'. The output files will be - placed in the directory `ichbiah/files', overwriting any files - with matching names in that directory (no files in the current - directory are modified). - - `gnatchop archive' - Chops the source file `archive' into the current directory. One - useful application of `gnatchop' is in sending sets of sources - around, for example in email messages. The required sources are - simply concatenated (for example, using a Unix `cat' command), and - then `gnatchop' is used at the other end to reconstitute the - original file names. - - `gnatchop file1 file2 file3 direc' - Chops all units in files `file1', `file2', `file3', placing the - resulting files in the directory `direc'. Note that if any units - occur more than once anywhere within this set of files, an error - message is generated, and no files are written. To override this - check, use the `-w' switch, in which case the last occurrence in - the last file will be the one that is output, and earlier - duplicate occurrences for a given unit will be skipped. - -  - File: gnat_ug_wnt.info, Node: Configuration Pragmas, Next: Handling Arbitrary File Naming Conventions Using gnatname, Prev: Renaming Files Using gnatchop, Up: Top - - Configuration Pragmas - ********************* - - In Ada 95, configuration pragmas include those pragmas described as - such in the Ada 95 Reference Manual, as well as - implementation-dependent pragmas that are configuration pragmas. See the - individual descriptions of pragmas in the GNAT Reference Manual for - details on these additional GNAT-specific configuration pragmas. Most - notably, the pragma `Source_File_Name', which allows specifying - non-default names for source files, is a configuration pragma. The - following is a complete list of configuration pragmas recognized by - `GNAT': - - Ada_83 - Ada_95 - C_Pass_By_Copy - Component_Alignment - Discard_Names - Elaboration_Checks - Eliminate - Extend_System - Extensions_Allowed - External_Name_Casing - Float_Representation - Initialize_Scalars - License - Locking_Policy - Long_Float - No_Run_Time - Normalize_Scalars - Polling - Propagate_Exceptions - Queuing_Policy - Ravenscar - Restricted_Run_Time - Restrictions - Reviewable - Source_File_Name - Style_Checks - Suppress - Task_Dispatching_Policy - Unsuppress - Use_VADS_Size - Warnings - Validity_Checks - - * Menu: - - * Handling of Configuration Pragmas:: - * The Configuration Pragmas Files:: - -  - File: gnat_ug_wnt.info, Node: Handling of Configuration Pragmas, Next: The Configuration Pragmas Files, Up: Configuration Pragmas - - Handling of Configuration Pragmas - ================================= - - Configuration pragmas may either appear at the start of a compilation - unit, in which case they apply only to that unit, or they may apply to - all compilations performed in a given compilation environment. - - GNAT also provides the `gnatchop' utility to provide an automatic - way to handle configuration pragmas following the semantics for - compilations (that is, files with multiple units), described in the RM. - See section *note Operating gnatchop in Compilation Mode:: for details. - However, for most purposes, it will be more convenient to edit the - `gnat.adc' file that contains configuration pragmas directly, as - described in the following section. - -  - File: gnat_ug_wnt.info, Node: The Configuration Pragmas Files, Prev: Handling of Configuration Pragmas, Up: Configuration Pragmas - - The Configuration Pragmas Files - =============================== - - In GNAT a compilation environment is defined by the current directory - at the time that a compile command is given. This current directory is - searched for a file whose name is `gnat.adc'. If this file is present, - it is expected to contain one or more configuration pragmas that will - be applied to the current compilation. However, if the switch `-gnatA' - is used, `gnat.adc' is not considered. - - Configuration pragmas may be entered into the `gnat.adc' file either - by running `gnatchop' on a source file that consists only of - configuration pragmas, or more conveniently by direct editing of the - `gnat.adc' file, which is a standard format source file. - - In addition to `gnat.adc', one additional file containing - configuration pragmas may be applied to the current compilation using - the switch `-gnatec'PATH. PATH must designate an existing file that - contains only configuration pragmas. These configuration pragmas are in - addition to those found in `gnat.adc' (provided `gnat.adc' is present - and switch `-gnatA' is not used). - - It is allowed to specify several switches `-gnatec', however only - the last one on the command line will be taken into account. - -  - File: gnat_ug_wnt.info, Node: Handling Arbitrary File Naming Conventions Using gnatname, Next: GNAT Project Manager, Prev: Configuration Pragmas, Up: Top - - Handling Arbitrary File Naming Conventions Using `gnatname' - *********************************************************** - - * Menu: - - * Arbitrary File Naming Conventions:: - * Running gnatname:: - * Switches for gnatname:: - * Examples of gnatname Usage:: - -  - File: gnat_ug_wnt.info, Node: Arbitrary File Naming Conventions, Next: Running gnatname, Up: Handling Arbitrary File Naming Conventions Using gnatname - - Arbitrary File Naming Conventions - ================================= - - The GNAT compiler must be able to know the source file name of a - compilation unit. When using the standard GNAT default file naming - conventions (`.ads' for specs, `.adb' for bodies), the GNAT compiler - does not need additional information. - - When the source file names do not follow the standard GNAT default file - naming conventions, the GNAT compiler must be given additional - information through a configuration pragmas file (see *Note - Configuration Pragmas::) or a project file. When the non standard file - naming conventions are well-defined, a small number of pragmas - `Source_File_Name' specifying a naming pattern (see *Note Alternative - File Naming Schemes::) may be sufficient. However, if the file naming - conventions are irregular or arbitrary, a number of pragma - `Source_File_Name' for individual compilation units must be defined. - To help maintain the correspondence between compilation unit names and - source file names within the compiler, GNAT provides a tool `gnatname' - to generate the required pragmas for a set of files. - -  - File: gnat_ug_wnt.info, Node: Running gnatname, Next: Switches for gnatname, Prev: Arbitrary File Naming Conventions, Up: Handling Arbitrary File Naming Conventions Using gnatname - - Running `gnatname' - ================== - - The usual form of the `gnatname' command is - - $ gnatname [SWITCHES] NAMING_PATTERN [NAMING_PATTERNS] - - All of the arguments are optional. If invoked without any argument, - `gnatname' will display its usage. - - When used with at least one naming pattern, `gnatname' will attempt to - find all the compilation units in files that follow at least one of the - naming patterns. To find these compilation units, `gnatname' will use - the GNAT compiler in syntax-check-only mode on all regular files. - - One or several Naming Patterns may be given as arguments to `gnatname'. - Each Naming Pattern is enclosed between double quotes. A Naming - Pattern is a regular expression similar to the wildcard patterns used - in file names by the Unix shells or the DOS prompt. - - Examples of Naming Patterns are - - "*.[12].ada" - "*.ad[sb]*" - "body_*" "spec_*" - - For a more complete description of the syntax of Naming Patterns, see - the second kind of regular expressions described in `g-regexp.ads' (the - "Glob" regular expressions). - - When invoked with no switches, `gnatname' will create a configuration - pragmas file `gnat.adc' in the current working directory, with pragmas - `Source_File_Name' for each file that contains a valid Ada unit. - -  - File: gnat_ug_wnt.info, Node: Switches for gnatname, Next: Examples of gnatname Usage, Prev: Running gnatname, Up: Handling Arbitrary File Naming Conventions Using gnatname - - Switches for `gnatname' - ======================= - - Switches for `gnatname' must precede any specified Naming Pattern. - - You may specify any of the following switches to `gnatname': - - `-c`file'' - Create a configuration pragmas file `file' (instead of the default - `gnat.adc'). There may be zero, one or more space between `-c' and - `file'. `file' may include directory information. `file' must be - writeable. There may be only one switch `-c'. When a switch `-c' is - specified, no switch `-P' may be specified (see below). - - `-d`dir'' - Look for source files in directory `dir'. There may be zero, one - or more spaces between `-d' and `dir'. When a switch `-d' is - specified, the current working directory will not be searched for - source files, unless it is explictly specified with a `-d' or `-D' - switch. Several switches `-d' may be specified. If `dir' is a - relative path, it is relative to the directory of the - configuration pragmas file specified with switch `-c', or to the - directory of the project file specified with switch `-P' or, if - neither switch `-c' nor switch `-P' are specified, it is relative - to the current working directory. The directory specified with - switch `-c' must exist and be readable. - - `-D`file'' - Look for source files in all directories listed in text file - `file'. There may be zero, one or more spaces between `-d' and - `dir'. `file' must be an existing, readable text file. Each non - empty line in `file' must be a directory. Specifying switch `-D' - is equivalent to specifying as many switches `-d' as there are non - empty lines in `file'. - - `-h' - Output usage (help) information. The output is written to `stdout'. - - `-P`proj'' - Create or update project file `proj'. There may be zero, one or - more space between `-P' and `proj'. `proj' may include directory - information. `proj' must be writeable. There may be only one - switch `-P'. When a switch `-P' is specified, no switch `-c' may - be specified. - - `-v' - Verbose mode. Output detailed explanation of behavior to `stdout'. - This includes name of the file written, the name of the - directories to search and, for each file in those directories - whose name matches at least one of the Naming Patterns, an - indication of whether the file contains a unit, and if so the name - of the unit. - - `-v -v' - Very Verbose mode. In addition to the output produced in verbose - mode, for each file in the searched directories whose name matches - none of the Naming Patterns, an indication is given that there is - no match. - - `-x`pattern'' - Excluded patterns. Using this switch, it is possible to exclude - some files that would match the name patterns. For example, - `"gnatname -x "*_nt.ada" "*.ada"' will look for Ada units in all - files with the `.ada' extension, except those whose names end with - `_nt.ada'. - -  - File: gnat_ug_wnt.info, Node: Examples of gnatname Usage, Prev: Switches for gnatname, Up: Handling Arbitrary File Naming Conventions Using gnatname - - Examples of `gnatname' Usage - ============================ - - $ gnatname -c /home/me/names.adc -d sources "[a-z]*.ada*" - - In this example, the directory `/home/me' must already exist and be - writeable. In addition, the directory `/home/me/sources' (specified by - `-d sources') must exist and be readable. Note the optional spaces after - `-c' and `-d'. - - $ gnatname -P/home/me/proj -x "*_nt_body.ada" -dsources -dsources/plus -Dcommon_dirs.txt "body_*" "spec_*" - - Note that several switches `-d' may be used, even in conjunction - with one or several switches `-D'. Several Naming Patterns and one - excluded pattern are used in this example. - -  - File: gnat_ug_wnt.info, Node: GNAT Project Manager, Next: Elaboration Order Handling in GNAT, Prev: Handling Arbitrary File Naming Conventions Using gnatname, Up: Top - - GNAT Project Manager - ******************** - - * Menu: - - * Introduction:: - * Examples of Project Files:: - * Project File Syntax:: - * Objects and Sources in Project Files:: - * Importing Projects:: - * Project Extension:: - * External References in Project Files:: - * Packages in Project Files:: - * Variables from Imported Projects:: - * Naming Schemes:: - * Library Projects:: - * Switches Related to Project Files:: - * Tools Supporting Project Files:: - * An Extended Example:: - * Project File Complete Syntax:: - -  - File: gnat_ug_wnt.info, Node: Introduction, Next: Examples of Project Files, Up: GNAT Project Manager - - Introduction - ============ - - This chapter describes GNAT's _Project Manager_, a facility that lets - you configure various properties for a collection of source files. In - particular, you can specify: - * The directory or set of directories containing the source files, - and/or the names of the specific source files themselves - - * The directory in which the compiler's output (`ALI' files, object - files, tree files) will be placed - - * The directory in which the executable programs will be placed - - * Switch settings for any of the project-enabled tools (`gnatmake', - compiler, binder, linker, `gnatls', `gnatxref', `gnatfind'); you - can apply these settings either globally or to individual units - - * The source files containing the main subprogram(s) to be built - - * The source programming language(s) (currently Ada and/or C) - - * Source file naming conventions; you can specify these either - globally or for individual units - - * Menu: - - * Project Files:: - -  - File: gnat_ug_wnt.info, Node: Project Files, Up: Introduction - - Project Files - ------------- - - A "project" is a specific set of values for these properties. You can - define a project's settings in a "project file", a text file with an - Ada-like syntax; a property value is either a string or a list of - strings. Properties that are not explicitly set receive default - values. A project file may interrogate the values of "external - variables" (user-defined command-line switches or environment - variables), and it may specify property settings conditionally, based - on the value of such variables. - - In simple cases, a project's source files depend only on other - source files in the same project, or on the predefined libraries. - ("Dependence" is in the technical sense; for example, one Ada unit - "with"ing another.) However, the Project Manager also allows much more - sophisticated arrangements, with the source files in one project - depending on source files in other projects: - * One project can _import_ other projects containing needed source - files. - - * You can organize GNAT projects in a hierarchy: a _child_ project - can extend a _parent_ project, inheriting the parent's source - files and optionally overriding any of them with alternative - versions - - More generally, the Project Manager lets you structure large development - efforts into hierarchical subsystems, with build decisions deferred to - the subsystem level and thus different compilation environments (switch - settings) used for different subsystems. - - The Project Manager is invoked through the `-P_projectfile_' switch - to `gnatmake' or to the `gnat' front driver. If you want to define (on - the command line) an external variable that is queried by the project - file, additionally use the `-X_vbl_=_value_' switch. The Project - Manager parses and interprets the project file, and drives the invoked - tool based on the project settings. - - The Project Manager supports a wide range of development strategies, - for systems of all sizes. Some typical practices that are easily - handled: - * Using a common set of source files, but generating object files in - different directories via different switch settings - - * Using a mostly-shared set of source files, but with different - versions of some unit or units - - The destination of an executable can be controlled inside a project file - using the `-o' switch. In the absence of such a switch either inside - the project file or on the command line, any executable files generated - by `gnatmake' will be placed in the directory `Exec_Dir' specified in - the project file. If no `Exec_Dir' is specified, they will be placed in - the object directory of the project. - - You can use project files to achieve some of the effects of a source - versioning system (for example, defining separate projects for the - different sets of sources that comprise different releases) but the - Project Manager is independent of any source configuration management - tools that might be used by the developers. - - The next section introduces the main features of GNAT's project - facility through a sequence of examples; subsequent sections will - present the syntax and semantics in more detail. - -  - File: gnat_ug_wnt.info, Node: Examples of Project Files, Next: Project File Syntax, Prev: Introduction, Up: GNAT Project Manager - - Examples of Project Files - ========================= - - This section illustrates some of the typical uses of project files and - explains their basic structure and behavior. - - * Menu: - - * Common Sources with Different Switches and Different Output Directories:: - * Using External Variables:: - * Importing Other Projects:: - * Extending a Project:: - -  - File: gnat_ug_wnt.info, Node: Common Sources with Different Switches and Different Output Directories, Next: Using External Variables, Up: Examples of Project Files - - Common Sources with Different Switches and Different Output Directories - ----------------------------------------------------------------------- - - * Menu: - - * Source Files:: - * Specifying the Object Directory:: - * Specifying the Exec Directory:: - * Project File Packages:: - * Specifying Switch Settings:: - * Main Subprograms:: - * Source File Naming Conventions:: - * Source Language(s):: - - Assume that the Ada source files `pack.ads', `pack.adb', and `proc.adb' - are in the `/common' directory. The file `proc.adb' contains an Ada - main subprogram `Proc' that "with"s package `Pack'. We want to compile - these source files under two sets of switches: - * When debugging, we want to pass the `-g' switch to `gnatmake', and - the `-gnata', `-gnato', and `-gnatE' switches to the compiler; the - compiler's output is to appear in `/common/debug' - - * When preparing a release version, we want to pass the `-O2' switch - to the compiler; the compiler's output is to appear in - `/common/release' - - The GNAT project files shown below, respectively `debug.gpr' and - `release.gpr' in the `/common' directory, achieve these effects. - - Diagrammatically: - /common - debug.gpr - release.gpr - pack.ads - pack.adb - proc.adb - /common/debug {-g, -gnata, -gnato, -gnatE} - proc.ali, proc.o - pack.ali, pack.o - /common/release {-O2} - proc.ali, proc.o - pack.ali, pack.o - Here are the project files: - project Debug is - for Object_Dir use "debug"; - for Main use ("proc"); - - package Builder is - for Default_Switches ("Ada") use ("-g"); - end Builder; - - package Compiler is - for Default_Switches ("Ada") - use ("-fstack-check", "-gnata", "-gnato", "-gnatE"); - end Compiler; - end Debug; - - project Release is - for Object_Dir use "release"; - for Exec_Dir use "."; - for Main use ("proc"); - - package Compiler is - for Default_Switches ("Ada") use ("-O2"); - end Compiler; - end Release; - - The name of the project defined by `debug.gpr' is `"Debug"' (case - insensitive), and analogously the project defined by `release.gpr' is - `"Release"'. For consistency the file should have the same name as the - project, and the project file's extension should be `"gpr"'. These - conventions are not required, but a warning is issued if they are not - followed. - - If the current directory is `/temp', then the command - gnatmake -P/common/debug.gpr - - generates object and ALI files in `/common/debug', and the `proc' - executable also in `/common/debug', using the switch settings defined in - the project file. - - Likewise, the command - gnatmake -P/common/release.gpr - - generates object and ALI files in `/common/release', and the `proc' - executable in `/common', using the switch settings from the project - file. - -  - File: gnat_ug_wnt.info, Node: Source Files, Next: Specifying the Object Directory, Up: Common Sources with Different Switches and Different Output Directories - - Source Files - ............ - - If a project file does not explicitly specify a set of source - directories or a set of source files, then by default the project's - source files are the Ada source files in the project file directory. - Thus `pack.ads', `pack.adb', and `proc.adb' are the source files for - both projects. - -  - File: gnat_ug_wnt.info, Node: Specifying the Object Directory, Next: Specifying the Exec Directory, Prev: Source Files, Up: Common Sources with Different Switches and Different Output Directories - - Specifying the Object Directory - ............................... - - Several project properties are modeled by Ada-style _attributes_; you - define the property by supplying the equivalent of an Ada attribute - definition clause in the project file. A project's object directory is - such a property; the corresponding attribute is `Object_Dir', and its - value is a string expression. A directory may be specified either as - absolute or as relative; in the latter case, it is relative to the - project file directory. Thus the compiler's output is directed to - `/common/debug' (for the `Debug' project) and to `/common/release' (for - the `Release' project). If `Object_Dir' is not specified, then the - default is the project file directory. - -  - File: gnat_ug_wnt.info, Node: Specifying the Exec Directory, Next: Project File Packages, Prev: Specifying the Object Directory, Up: Common Sources with Different Switches and Different Output Directories - - Specifying the Exec Directory - ............................. - - A project's exec directory is another property; the corresponding - attribute is `Exec_Dir', and its value is also a string expression, - either specified as relative or absolute. If `Exec_Dir' is not - specified, then the default is the object directory (which may also be - the project file directory if attribute `Object_Dir' is not specified). - Thus the executable is placed in `/common/debug' for the `Debug' - project (attribute `Exec_Dir' not specified) and in `/common' for the - `Release' project. - -  - File: gnat_ug_wnt.info, Node: Project File Packages, Next: Specifying Switch Settings, Prev: Specifying the Exec Directory, Up: Common Sources with Different Switches and Different Output Directories - - Project File Packages - ..................... - - A GNAT tool integrated with the Project Manager is modeled by a - corresponding package in the project file. The `Debug' project defines - the packages `Builder' (for `gnatmake') and `Compiler'; the `Release' - project defines only the `Compiler' package. - - The Ada package syntax is not to be taken literally. Although - packages in project files bear a surface resemblance to packages in Ada - source code, the notation is simply a way to convey a grouping of - properties for a named entity. Indeed, the package names permitted in - project files are restricted to a predefined set, corresponding to the - project-aware tools, and the contents of packages are limited to a - small set of constructs. The packages in the example above contain - attribute definitions. - -  - File: gnat_ug_wnt.info, Node: Specifying Switch Settings, Next: Main Subprograms, Prev: Project File Packages, Up: Common Sources with Different Switches and Different Output Directories - - Specifying Switch Settings - .......................... - - Switch settings for a project-aware tool can be specified through - attributes in the package corresponding to the tool. The example above - illustrates one of the relevant attributes, `Default_Switches', defined - in the packages in both project files. Unlike simple attributes like - `Source_Dirs', `Default_Switches' is known as an _associative array_. - When you define this attribute, you must supply an "index" (a literal - string), and the effect of the attribute definition is to set the value - of the "array" at the specified "index". For the `Default_Switches' - attribute, the index is a programming language (in our case, Ada) , and - the value specified (after `use') must be a list of string expressions. - - The attributes permitted in project files are restricted to a - predefined set. Some may appear at project level, others in packages. - For any attribute that is an associate array, the index must always be a - literal string, but the restrictions on this string (e.g., a file name - or a language name) depend on the individual attribute. Also depending - on the attribute, its specified value will need to be either a string - or a string list. - - In the `Debug' project, we set the switches for two tools, - `gnatmake' and the compiler, and thus we include corresponding - packages, with each package defining the `Default_Switches' attribute - with index `"Ada"'. Note that the package corresponding to `gnatmake' - is named `Builder'. The `Release' project is similar, but with just - the `Compiler' package. - - In project `Debug' above the switches starting with `-gnat' that are - specified in package `Compiler' could have been placed in package - `Builder', since `gnatmake' transmits all such switches to the compiler. - -  - File: gnat_ug_wnt.info, Node: Main Subprograms, Next: Source File Naming Conventions, Prev: Specifying Switch Settings, Up: Common Sources with Different Switches and Different Output Directories - - Main Subprograms - ................ - - One of the properties of a project is its list of main subprograms - (actually a list of names of source files containing main subprograms, - with the file extension optional. This property is captured in the - `Main' attribute, whose value is a list of strings. If a project - defines the `Main' attribute, then you do not need to identify the main - subprogram(s) when invoking `gnatmake' (see *Note gnatmake and Project - Files::). - -  - File: gnat_ug_wnt.info, Node: Source File Naming Conventions, Next: Source Language(s), Prev: Main Subprograms, Up: Common Sources with Different Switches and Different Output Directories - - Source File Naming Conventions - .............................. - - Since the project files do not specify any source file naming - conventions, the GNAT defaults are used. The mechanism for defining - source file naming conventions - a package named `Naming' - will be - described below (*note Naming Schemes::). - -  - File: gnat_ug_wnt.info, Node: Source Language(s), Prev: Source File Naming Conventions, Up: Common Sources with Different Switches and Different Output Directories - - Source Language(s) - .................. - - Since the project files do not specify a `Languages' attribute, by - default the GNAT tools assume that the language of the project file is - Ada. More generally, a project can comprise source files in Ada, C, - and/or other languages. - -  - File: gnat_ug_wnt.info, Node: Using External Variables, Next: Importing Other Projects, Prev: Common Sources with Different Switches and Different Output Directories, Up: Examples of Project Files - - Using External Variables - ------------------------ - - Instead of supplying different project files for debug and release, we - can define a single project file that queries an external variable (set - either on the command line or via an environment variable) in order to - conditionally define the appropriate settings. Again, assume that the - source files `pack.ads', `pack.adb', and `proc.adb' are located in - directory `/common'. The following project file, `build.gpr', queries - the external variable named `STYLE' and defines an object directory and - switch settings based on whether the value is `"deb"' (debug) or - `"rel"' (release), where the default is `"deb"'. - - project Build is - for Main use ("proc"); - - type Style_Type is ("deb", "rel"); - Style : Style_Type := external ("STYLE", "deb"); - - case Style is - when "deb" => - for Object_Dir use "debug"; - - when "rel" => - for Object_Dir use "release"; - for Exec_Dir use "."; - end case; - - package Builder is - - case Style is - when "deb" => - for Default_Switches ("Ada") use ("-g"); - end case; - - end Builder; - - package Compiler is - - case Style is - when "deb" => - for Default_Switches ("Ada") use ("-gnata", "-gnato", "-gnatE"); - - when "rel" => - for Default_Switches ("Ada") use ("-O2"); - end case; - - end Compiler; - - end Build; - - `Style_Type' is an example of a _string type_, which is the project - file analog of an Ada enumeration type but containing string literals - rather than identifiers. `Style' is declared as a variable of this - type. - - The form `external("STYLE", "deb")' is known as an _external - reference_; its first argument is the name of an _external variable_, - and the second argument is a default value to be used if the external - variable doesn't exist. You can define an external variable on the - command line via the `-X' switch, or you can use an environment - variable as an external variable. - - Each `case' construct is expanded by the Project Manager based on the - value of `Style'. Thus the command - gnatmake -P/common/build.gpr -XSTYLE=deb - - is equivalent to the `gnatmake' invocation using the project file - `debug.gpr' in the earlier example. So is the command - gnatmake -P/common/build.gpr - - since `"deb"' is the default for `STYLE'. - - Analogously, - gnatmake -P/common/build.gpr -XSTYLE=rel - - is equivalent to the `gnatmake' invocation using the project file - `release.gpr' in the earlier example. - -  - File: gnat_ug_wnt.info, Node: Importing Other Projects, Next: Extending a Project, Prev: Using External Variables, Up: Examples of Project Files - - Importing Other Projects - ------------------------ - - A compilation unit in a source file in one project may depend on - compilation units in source files in other projects. To obtain this - behavior, the dependent project must _import_ the projects containing - the needed source files. This effect is embodied in syntax similar to - an Ada `with' clause, but the "with"ed entities are strings denoting - project files. - - As an example, suppose that the two projects `GUI_Proj' and - `Comm_Proj' are defined in the project files `gui_proj.gpr' and - `comm_proj.gpr' in directories `/gui' and `/comm', respectively. - Assume that the source files for `GUI_Proj' are `gui.ads' and - `gui.adb', and that the source files for `Comm_Proj' are `comm.ads' and - `comm.adb', with each set of files located in its respective project - file directory. Diagrammatically: - - /gui - gui_proj.gpr - gui.ads - gui.adb - - /comm - comm_proj.gpr - comm.ads - comm.adb - - We want to develop an application in directory `/app' that "with"s the - packages `GUI' and `Comm', using the properties of the corresponding - project files (e.g. the switch settings and object directory). - Skeletal code for a main procedure might be something like the - following: - - with GUI, Comm; - procedure App_Main is - ... - begin - ... - end App_Main; - - Here is a project file, `app_proj.gpr', that achieves the desired - effect: - - with "/gui/gui_proj", "/comm/comm_proj"; - project App_Proj is - for Main use ("app_main"); - end App_Proj; - - Building an executable is achieved through the command: - gnatmake -P/app/app_proj - - which will generate the `app_main' executable in the directory where - `app_proj.gpr' resides. - - If an imported project file uses the standard extension (`gpr') then - (as illustrated above) the `with' clause can omit the extension. - - Our example specified an absolute path for each imported project - file. Alternatively, you can omit the directory if either - * The imported project file is in the same directory as the - importing project file, or - - * You have defined an environment variable `ADA_PROJECT_PATH' that - includes the directory containing the needed project file. - - Thus, if we define `ADA_PROJECT_PATH' to include `/gui' and `/comm', - then our project file `app_proj.gpr' could be written as follows: - - with "gui_proj", "comm_proj"; - project App_Proj is - for Main use ("app_main"); - end App_Proj; - - Importing other projects raises the possibility of ambiguities. For - example, the same unit might be present in different imported projects, - or it might be present in both the importing project and an imported - project. Both of these conditions are errors. Note that in the - current version of the Project Manager, it is illegal to have an - ambiguous unit even if the unit is never referenced by the importing - project. This restriction may be relaxed in a future release. - -  - File: gnat_ug_wnt.info, Node: Extending a Project, Prev: Importing Other Projects, Up: Examples of Project Files - - Extending a Project - ------------------- - - A common situation in large software systems is to have multiple - implementations for a common interface; in Ada terms, multiple versions - of a package body for the same specification. For example, one - implementation might be safe for use in tasking programs, while another - might only be used in sequential applications. This can be modeled in - GNAT using the concept of _project extension_. If one project (the - "child") _extends_ another project (the "parent") then by default all - source files of the parent project are inherited by the child, but the - child project can override any of the parent's source files with new - versions, and can also add new files. This facility is the project - analog of extension in Object-Oriented Programming. Project - hierarchies are permitted (a child project may be the parent of yet - another project), and a project that inherits one project can also - import other projects. - - As an example, suppose that directory `/seq' contains the project - file `seq_proj.gpr' and the source files `pack.ads', `pack.adb', and - `proc.adb': - - /seq - pack.ads - pack.adb - proc.adb - seq_proj.gpr - - Note that the project file can simply be empty (that is, no attribute or - package is defined): - - project Seq_Proj is - end Seq_Proj; - - implying that its source files are all the Ada source files in the - project directory. - - Suppose we want to supply an alternate version of `pack.adb', in - directory `/tasking', but use the existing versions of `pack.ads' and - `proc.adb'. We can define a project `Tasking_Proj' that inherits - `Seq_Proj': - - /tasking - pack.adb - tasking_proj.gpr - - project Tasking_Proj extends "/seq/seq_proj" is - end Tasking_Proj; - - The version of `pack.adb' used in a build depends on which project file - is specified. - - Note that we could have designed this using project import rather - than project inheritance; a `base' project would contain the sources for - `pack.ads' and `proc.adb', a sequential project would import `base' and - add `pack.adb', and likewise a tasking project would import `base' and - add a different version of `pack.adb'. The choice depends on whether - other sources in the original project need to be overridden. If they - do, then project extension is necessary, otherwise, importing is - sufficient. - -  - File: gnat_ug_wnt.info, Node: Project File Syntax, Next: Objects and Sources in Project Files, Prev: Examples of Project Files, Up: GNAT Project Manager - - Project File Syntax - =================== - - * Menu: - - * Basic Syntax:: - * Packages:: - * Expressions:: - * String Types:: - * Variables:: - * Attributes:: - * Associative Array Attributes:: - * case Constructions:: - - This section describes the structure of project files. - - A project may be an _independent project_, entirely defined by a - single project file. Any Ada source file in an independent project - depends only on the predefined library and other Ada source files in - the same project. - - A project may also "depend on" other projects, in either or both of the - following ways: - * It may import any number of projects - - * It may extend at most one other project - - The dependence relation is a directed acyclic graph (the subgraph - reflecting the "extends" relation is a tree). - - A project's "immediate sources" are the source files directly - defined by that project, either implicitly by residing in the project - file's directory, or explicitly through any of the source-related - attributes described below. More generally, a project PROJ's "sources" - are the immediate sources of PROJ together with the immediate sources - (unless overridden) of any project on which PROJ depends (either - directly or indirectly). - -  - File: gnat_ug_wnt.info, Node: Basic Syntax, Next: Packages, Up: Project File Syntax - - Basic Syntax - ------------ - - As seen in the earlier examples, project files have an Ada-like syntax. - The minimal project file is: - project Empty is - - end Empty; - - The identifier `Empty' is the name of the project. This project name - must be present after the reserved word `end' at the end of the project - file, followed by a semi-colon. - - Any name in a project file, such as the project name or a variable - name, has the same syntax as an Ada identifier. - - The reserved words of project files are the Ada reserved words plus - `extends', `external', and `project'. Note that the only Ada reserved - words currently used in project file syntax are: - - * `case' - - * `end' - - * `for' - - * `is' - - * `others' - - * `package' - - * `renames' - - * `type' - - * `use' - - * `when' - - * `with' - - Comments in project files have the same syntax as in Ada, two - consecutives hyphens through the end of the line. - -  - File: gnat_ug_wnt.info, Node: Packages, Next: Expressions, Prev: Basic Syntax, Up: Project File Syntax - - Packages - -------- - - A project file may contain _packages_. The name of a package must be one - of the identifiers (case insensitive) from a predefined list, and a - package with a given name may only appear once in a project file. The - predefined list includes the following packages: - - * `Naming' - - * `Builder' - - * `Compiler' - - * `Binder' - - * `Linker' - - * `Finder' - - * `Cross_Reference' - - * `gnatls' - - (The complete list of the package names and their attributes can be - found in file `prj-attr.adb'). - - In its simplest form, a package may be empty: - - project Simple is - package Builder is - end Builder; - end Simple; - - A package may contain _attribute declarations_, _variable declarations_ - and _case constructions_, as will be described below. - - When there is ambiguity between a project name and a package name, - the name always designates the project. To avoid possible confusion, it - is always a good idea to avoid naming a project with one of the names - allowed for packages or any name that starts with `gnat'. - -  - File: gnat_ug_wnt.info, Node: Expressions, Next: String Types, Prev: Packages, Up: Project File Syntax - - Expressions - ----------- - - An _expression_ is either a _string expression_ or a _string list - expression_. - - A _string expression_ is either a _simple string expression_ or a - _compound string expression_. - - A _simple string expression_ is one of the following: - * A literal string; e.g.`"comm/my_proj.gpr"' - - * A string-valued variable reference (see *Note Variables::) - - * A string-valued attribute reference (see *Note Attributes::) - - * An external reference (see *Note External References in Project - Files::) - - A _compound string expression_ is a concatenation of string expressions, - using `"&"' - Path & "/" & File_Name & ".ads" - - A _string list expression_ is either a _simple string list expression_ - or a _compound string list expression_. - - A _simple string list expression_ is one of the following: - * A parenthesized list of zero or more string expressions, separated - by commas - File_Names := (File_Name, "gnat.adc", File_Name & ".orig"); - Empty_List := (); - - * A string list-valued variable reference - - * A string list-valued attribute reference - - A _compound string list expression_ is the concatenation (using `"&"') - of a simple string list expression and an expression. Note that each - term in a compound string list expression, except the first, may be - either a string expression or a string list expression. - - File_Name_List := () & File_Name; -- One string in this list - Extended_File_Name_List := File_Name_List & (File_Name & ".orig"); - -- Two strings - Big_List := File_Name_List & Extended_File_Name_List; - -- Concatenation of two string lists: three strings - Illegal_List := "gnat.adc" & Extended_File_Name_List; - -- Illegal: must start with a string list - -  - File: gnat_ug_wnt.info, Node: String Types, Next: Variables, Prev: Expressions, Up: Project File Syntax - - String Types - ------------ - - The value of a variable may be restricted to a list of string literals. - The restricted list of string literals is given in a _string type - declaration_. - - Here is an example of a string type declaration: - - type OS is ("NT, "nt", "Unix", "Linux", "other OS"); - - Variables of a string type are called _typed variables_; all other - variables are called _untyped variables_. Typed variables are - particularly useful in `case' constructions (see *Note case - Constructions::). - - A string type declaration starts with the reserved word `type', - followed by the name of the string type (case-insensitive), followed by - the reserved word `is', followed by a parenthesized list of one or more - string literals separated by commas, followed by a semicolon. - - The string literals in the list are case sensitive and must all be - different. They may include any graphic characters allowed in Ada, - including spaces. - - A string type may only be declared at the project level, not inside - a package. - - A string type may be referenced by its name if it has been declared - in the same project file, or by its project name, followed by a dot, - followed by the string type name. - -  - File: gnat_ug_wnt.info, Node: Variables, Next: Attributes, Prev: String Types, Up: Project File Syntax - - Variables - --------- - - A variable may be declared at the project file level, or in a package. - Here are some examples of variable declarations: - - This_OS : OS := external ("OS"); -- a typed variable declaration - That_OS := "Linux"; -- an untyped variable declaration - - A _typed variable declaration_ includes the variable name, followed by - a colon, followed by the name of a string type, followed by `:=', - followed by a simple string expression. - - An _untyped variable declaration_ includes the variable name, - followed by `:=', followed by an expression. Note that, despite the - terminology, this form of "declaration" resembles more an assignment - than a declaration in Ada. It is a declaration in several senses: - * The variable name does not need to be defined previously - - * The declaration establishes the _kind_ (string versus string list) - of the variable, and later declarations of the same variable need - to be consistent with this - - A string variable declaration (typed or untyped) declares a variable - whose value is a string. This variable may be used as a string - expression. - File_Name := "readme.txt"; - Saved_File_Name := File_Name & ".saved"; - - A string list variable declaration declares a variable whose value is a - list of strings. The list may contain any number (zero or more) of - strings. - - Empty_List := (); - List_With_One_Element := ("-gnaty"); - List_With_Two_Elements := List_With_One_Element & "-gnatg"; - Long_List := ("main.ada", "pack1_.ada", "pack1.ada", "pack2_.ada" - "pack2.ada", "util_.ada", "util.ada"); - - The same typed variable may not be declared more than once at project - level, and it may not be declared more than once in any package; it is - in effect a constant or a readonly variable. - - The same untyped variable may be declared several times. In this - case, the new value replaces the old one, and any subsequent reference - to the variable uses the new value. However, as noted above, if a - variable has been declared as a string, all subsequent declarations - must give it a string value. Similarly, if a variable has been declared - as a string list, all subsequent declarations must give it a string - list value. - - A _variable reference_ may take several forms: - - * The simple variable name, for a variable in the current package - (if any) or in the current project - - * A context name, followed by a dot, followed by the variable name. - - A _context_ may be one of the following: - - * The name of an existing package in the current project - - * The name of an imported project of the current project - - * The name of an ancestor project (i.e., a project extended by the - current project, either directly or indirectly) - - * An imported/parent project name, followed by a dot, followed by a - package name - - A variable reference may be used in an expression. - -  - File: gnat_ug_wnt.info, Node: Attributes, Next: Associative Array Attributes, Prev: Variables, Up: Project File Syntax - - Attributes - ---------- - - A project (and its packages) may have _attributes_ that define the - project's properties. Some attributes have values that are strings; - others have values that are string lists. - - There are two categories of attributes: _simple attributes_ and - _associative arrays_ (see *Note Associative Array Attributes::). - - The names of the attributes are restricted; there is a list of - project attributes, and a list of package attributes for each package. - The names are not case sensitive. - - The project attributes are as follows (all are simple attributes): - - _Attribute Name_ _Value_ - `Source_Files' string list - `Source_Dirs' string list - `Source_List_File' string - `Object_Dir' string - `Exec_Dir' string - `Main' string list - `Languages' string list - `Library_Dir' string - `Library_Name' string - `Library_Kind' string - `Library_Elaboration' string - `Library_Version' string - - The attributes for package `Naming' are as follows (see *Note Naming - Schemes::): - - Attribute Name Category Index Value - `Specification_Suffix' associative language name string - array - `Implementation_Suffix' associative language name string - array - `Separate_Suffix' simple n/a string - attribute - `Casing' simple n/a string - attribute - `Dot_Replacement' simple n/a string - attribute - `Specification' associative Ada unit name string - array - `Implementation' associative Ada unit name string - array - `Specification_Exceptions' associative language name string list - array - `Implementation_Exceptions' associative language name string list - array - - The attributes for package `Builder', `Compiler', `Binder', `Linker', - `Cross_Reference', and `Finder' are as follows (see *Note Switches and - Project Files::). - - Attribute Name Category Index Value - `Default_Switches' associative language name string list - array - `Switches' associative file name string list - array - - In addition, package `Builder' has a single string attribute - `Local_Configuration_Pragmas' and package `Builder' has a single string - attribute `Global_Configuration_Pragmas'. - - The attribute for package `Glide' are not documented: they are for - internal use only. - - Each simple attribute has a default value: the empty string (for - string-valued attributes) and the empty list (for string list-valued - attributes). - - Similar to variable declarations, an attribute declaration defines a - new value for an attribute. - - Examples of simple attribute declarations: - - for Object_Dir use "objects"; - for Source_Dirs use ("units", "test/drivers"); - - A "simple attribute declaration" starts with the reserved word `for', - followed by the name of the attribute, followed by the reserved word - `use', followed by an expression (whose kind depends on the attribute), - followed by a semicolon. - - Attributes may be referenced in expressions. The general form for - such a reference is `'': the entity for which the - attribute is defined, followed by an apostrophe, followed by the name - of the attribute. For associative array attributes, a litteral string - between parentheses need to be supplied as index. - - Examples are: - - project'Object_Dir - Naming'Dot_Replacement - Imported_Project'Source_Dirs - Imported_Project.Naming'Casing - Builder'Default_Switches("Ada") - - The entity may be: - * `project' for an attribute of the current project - - * The name of an existing package of the current project - - * The name of an imported project - - * The name of a parent project (extended by the current project) - - * An imported/parent project name, followed by a dot, followed - by a package name - - Example: - project Prj is - for Source_Dirs use project'Source_Dirs & "units"; - for Source_Dirs use project'Source_Dirs & "test/drivers" - end Prj; - - In the first attribute declaration, initially the attribute - `Source_Dirs' has the default value: an empty string list. After this - declaration, `Source_Dirs' is a string list of one element: "units". - After the second attribute declaration `Source_Dirs' is a string list of - two elements: "units" and "test/drivers". - - Note: this example is for illustration only. In practice, the - project file would contain only one attribute declaration: - - for Source_Dirs use ("units", "test/drivers"); - -  - File: gnat_ug_wnt.info, Node: Associative Array Attributes, Next: case Constructions, Prev: Attributes, Up: Project File Syntax - - Associative Array Attributes - ---------------------------- - - Some attributes are defined as _associative arrays_. An associative - array may be regarded as a function that takes a string as a parameter - and delivers a string or string list value as its result. - - Here are some examples of associative array attribute declarations: - - for Implementation ("main") use "Main.ada"; - for Switches ("main.ada") use ("-v", "-gnatv"); - for Switches ("main.ada") use Builder'Switches ("main.ada") & "-g"; - - Like untyped variables and simple attributes, associative array - attributes may be declared several times. Each declaration supplies a - new value for the attribute, replacing the previous setting. - -  - File: gnat_ug_wnt.info, Node: case Constructions, Prev: Associative Array Attributes, Up: Project File Syntax - - `case' Constructions - -------------------- - - A `case' construction is used in a project file to effect conditional - behavior. Here is a typical example: - - project MyProj is - type OS_Type is ("Linux", "Unix", "NT", "VMS"); - - OS : OS_Type := external ("OS", "Linux"); - - package Compiler is - case OS is - when "Linux" | "Unix" => - for Default_Switches ("Ada") use ("-gnath"); - when "NT" => - for Default_Switches ("Ada") use ("-gnatP"); - when others => - end case; - end Compiler; - end MyProj; - - The syntax of a `case' construction is based on the Ada case statement - (although there is no `null' construction for empty alternatives). - - Following the reserved word `case' there is the case variable (a - typed string variable), the reserved word `is', and then a sequence of - one or more alternatives. Each alternative comprises the reserved word - `when', either a list of literal strings separated by the `"|"' - character or the reserved word `others', and the `"=>"' token. Each - literal string must belong to the string type that is the type of the - case variable. An `others' alternative, if present, must occur last. - The `end case;' sequence terminates the case construction. - - After each `=>', there are zero or more constructions. The only - constructions allowed in a case construction are other case - constructions and attribute declarations. String type declarations, - variable declarations and package declarations are not allowed. - - The value of the case variable is often given by an external - reference (see *Note External References in Project Files::). - -  - File: gnat_ug_wnt.info, Node: Objects and Sources in Project Files, Next: Importing Projects, Prev: Project File Syntax, Up: GNAT Project Manager - - Objects and Sources in Project Files - ==================================== - - * Menu: - - * Object Directory:: - * Exec Directory:: - * Source Directories:: - * Source File Names:: - - Each project has exactly one object directory and one or more source - directories. The source directories must contain at least one source - file, unless the project file explicitly specifies that no source - files are present (see *Note Source File Names::). - -  - File: gnat_ug_wnt.info, Node: Object Directory, Next: Exec Directory, Up: Objects and Sources in Project Files - - Object Directory - ---------------- - - The object directory for a project is the directory containing the - compiler's output (such as `ALI' files and object files) for the - project's immediate sources. Note that for inherited sources (when - extending a parent project) the parent project's object directory is - used. - - The object directory is given by the value of the attribute - `Object_Dir' in the project file. - - for Object_Dir use "objects"; - - The attribute OBJECT_DIR has a string value, the path name of the object - directory. The path name may be absolute or relative to the directory - of the project file. This directory must already exist, and be readable - and writable. - - By default, when the attribute `Object_Dir' is not given an explicit - value or when its value is the empty string, the object directory is - the same as the directory containing the project file. - -  - File: gnat_ug_wnt.info, Node: Exec Directory, Next: Source Directories, Prev: Object Directory, Up: Objects and Sources in Project Files - - Exec Directory - -------------- - - The exec directory for a project is the directory containing the - executables for the project's main subprograms. - - The exec directory is given by the value of the attribute `Exec_Dir' - in the project file. - - for Exec_Dir use "executables"; - - The attribute EXEC_DIR has a string value, the path name of the exec - directory. The path name may be absolute or relative to the directory - of the project file. This directory must already exist, and be writable. - - By default, when the attribute `Exec_Dir' is not given an explicit - value or when its value is the empty string, the exec directory is the - same as the object directory of the project file. - -  - File: gnat_ug_wnt.info, Node: Source Directories, Next: Source File Names, Prev: Exec Directory, Up: Objects and Sources in Project Files - - Source Directories - ------------------ - - The source directories of a project are specified by the project file - attribute `Source_Dirs'. - - This attribute's value is a string list. If the attribute is not - given an explicit value, then there is only one source directory, the - one where the project file resides. - - A `Source_Dirs' attribute that is explicitly defined to be the empty - list, as in - - for Source_Dirs use (); - - indicates that the project contains no source files. - - Otherwise, each string in the string list designates one or more - source directories. - - for Source_Dirs use ("sources", "test/drivers"); - - If a string in the list ends with `"/**"', then the directory whose - path name precedes the two asterisks, as well as all its subdirectories - (recursively), are source directories. - - for Source_Dirs use ("/system/sources/**"); - - Here the directory `/system/sources' and all of its subdirectories - (recursively) are source directories. - - To specify that the source directories are the directory of the - project file and all of its subdirectories, you can declare - `Source_Dirs' as follows: - for Source_Dirs use ("./**"); - - Each of the source directories must exist and be readable. - -  - File: gnat_ug_wnt.info, Node: Source File Names, Prev: Source Directories, Up: Objects and Sources in Project Files - - Source File Names - ----------------- - - In a project that contains source files, their names may be specified - by the attributes `Source_Files' (a string list) or `Source_List_File' - (a string). Source file names never include any directory information. - - If the attribute `Source_Files' is given an explicit value, then each - element of the list is a source file name. - - for Source_Files use ("main.adb"); - for Source_Files use ("main.adb", "pack1.ads", "pack2.adb"); - - If the attribute `Source_Files' is not given an explicit value, but the - attribute `Source_List_File' is given a string value, then the source - file names are contained in the text file whose path name (absolute or - relative to the directory of the project file) is the value of the - attribute `Source_List_File'. - - Each line in the file that is not empty or is not a comment contains - a source file name. A comment line starts with two hyphens. - - for Source_List_File use "source_list.txt"; - - By default, if neither the attribute `Source_Files' nor the attribute - `Source_List_File' is given an explicit value, then each file in the - source directories that conforms to the project's naming scheme (see - *Note Naming Schemes::) is an immediate source of the project. - - A warning is issued if both attributes `Source_Files' and - `Source_List_File' are given explicit values. In this case, the - attribute `Source_Files' prevails. - - Each source file name must be the name of one and only one existing - source file in one of the source directories. - - A `Source_Files' attribute defined with an empty list as its value - indicates that there are no source files in the project. - - Except for projects that are clearly specified as containing no Ada - source files (`Source_Dirs' or `Source_Files' specified as an empty - list, or `Languages' specified without `"Ada"' in the list) - for Source_Dirs use (); - for Source_Files use (); - for Languages use ("C", "C++"); - - a project must contain at least one immediate source. - - Projects with no source files are useful as template packages (see - *Note Packages in Project Files::) for other projects; in particular to - define a package `Naming' (see *Note Naming Schemes::). - -  - File: gnat_ug_wnt.info, Node: Importing Projects, Next: Project Extension, Prev: Objects and Sources in Project Files, Up: GNAT Project Manager - - Importing Projects - ================== - - An immediate source of a project P may depend on source files that are - neither immediate sources of P nor in the predefined library. To get - this effect, P must _import_ the projects that contain the needed - source files. - - with "project1", "utilities.gpr"; - with "/namings/apex.gpr"; - project Main is - ... - - As can be seen in this example, the syntax for importing projects is - similar to the syntax for importing compilation units in Ada. However, - project files use literal strings instead of names, and the `with' - clause identifies project files rather than packages. - - Each literal string is the file name or path name (absolute or - relative) of a project file. If a string is simply a file name, with no - path, then its location is determined by the _project path_: - - * If the environment variable `ADA_PROJECT_PATH' exists, then the - project path includes all the directories in this environment - variable, plus the directory of the project file. - - * If the environment variable `ADA_PROJECT_PATH' does not exist, - then the project path contains only one directory, namely the one - where the project file is located. - - If a relative pathname is used as in - - with "tests/proj"; - - then the path is relative to the directory where the importing project - file is located. Any symbolic link will be fully resolved in the - directory of the importing project file before the imported project - file is looked up. - - When the `with''ed project file name does not have an extension, the - default is `.gpr'. If a file with this extension is not found, then the - file name as specified in the `with' clause (no extension) will be - used. In the above example, if a file `project1.gpr' is found, then it - will be used; otherwise, if a file `project1' exists then it will be - used; if neither file exists, this is an error. - - A warning is issued if the name of the project file does not match - the name of the project; this check is case insensitive. - - Any source file that is an immediate source of the imported project - can be used by the immediate sources of the importing project, and - recursively. Thus if `A' imports `B', and `B' imports `C', the immediate - sources of `A' may depend on the immediate sources of `C', even if `A' - does not import `C' explicitly. However, this is not recommended, - because if and when `B' ceases to import `C', some sources in `A' will - no longer compile. - - A side effect of this capability is that cyclic dependences are not - permitted: if `A' imports `B' (directly or indirectly) then `B' is not - allowed to import `A'. - -  - File: gnat_ug_wnt.info, Node: Project Extension, Next: External References in Project Files, Prev: Importing Projects, Up: GNAT Project Manager - - Project Extension - ================= - - During development of a large system, it is sometimes necessary to use - modified versions of some of the source files without changing the - original sources. This can be achieved through a facility known as - _project extension_. - - project Modified_Utilities extends "/baseline/utilities.gpr" is ... - - The project file for the project being extended (the _parent_) is - identified by the literal string that follows the reserved word - `extends', which itself follows the name of the extending project (the - _child_). - - By default, a child project inherits all the sources of its parent. - However, inherited sources can be overridden: a unit with the same name - as one in the parent will hide the original unit. Inherited sources - are considered to be sources (but not immediate sources) of the child - project; see *Note Project File Syntax::. - - An inherited source file retains any switches specified in the - parent project. - - For example if the project `Utilities' contains the specification - and the body of an Ada package `Util_IO', then the project - `Modified_Utilities' can contain a new body for package `Util_IO'. The - original body of `Util_IO' will not be considered in program builds. - However, the package specification will still be found in the project - `Utilities'. - - A child project can have only one parent but it may import any - number of other projects. - - A project is not allowed to import directly or indirectly at the - same time a child project and any of its ancestors. - -  - File: gnat_ug_wnt.info, Node: External References in Project Files, Next: Packages in Project Files, Prev: Project Extension, Up: GNAT Project Manager - - External References in Project Files - ==================================== - - A project file may contain references to external variables; such - references are called _external references_. - - An external variable is either defined as part of the environment (an - environment variable in Unix, for example) or else specified on the - command line via the `-X_vbl_=_value_' switch. If both, then the - command line value is used. - - An external reference is denoted by the built-in function - `external', which returns a string value. This function has two forms: - * `external (external_variable_name)' - - * `external (external_variable_name, default_value)' - - Each parameter must be a string literal. For example: - - external ("USER") - external ("OS", "Linux") - - In the form with one parameter, the function returns the value of the - external variable given as parameter. If this name is not present in the - environment, then the returned value is an empty string. - - In the form with two string parameters, the second parameter is the - value returned when the variable given as the first parameter is not - present in the environment. In the example above, if `"OS"' is not the - name of an environment variable and is not passed on the command line, - then the returned value will be `"Linux"'. - - An external reference may be part of a string expression or of a - string list expression, to define variables or attributes. - - type Mode_Type is ("Debug", "Release"); - Mode : Mode_Type := external ("MODE"); - case Mode is - when "Debug" => - ... - -  - File: gnat_ug_wnt.info, Node: Packages in Project Files, Next: Variables from Imported Projects, Prev: External References in Project Files, Up: GNAT Project Manager - - Packages in Project Files - ========================= - - The _package_ is the project file feature that defines the settings for - project-aware tools. For each such tool you can declare a - corresponding package; the names for these packages are preset (see - *Note Packages::) but are not case sensitive. A package may contain - variable declarations, attribute declarations, and case constructions. - - project Proj is - package Builder is -- used by gnatmake - for Default_Switches ("Ada") use ("-v", "-g"); - end Builder; - end Proj; - - A package declaration starts with the reserved word `package', followed - by the package name (case insensitive), followed by the reserved word - `is'. It ends with the reserved word `end', followed by the package - name, finally followed by a semi-colon. - - Most of the packages have an attribute `Default_Switches'. This - attribute is an associative array, and its value is a string list. The - index of the associative array is the name of a programming language - (case insensitive). This attribute indicates the switch or switches to - be used with the corresponding tool. - - Some packages also have another attribute, `Switches', an associative - array whose value is a string list. The index is the name of a source - file. This attribute indicates the switch or switches to be used by - the corresponding tool when dealing with this specific file. - - Further information on these switch-related attributes is found in - *Note Switches and Project Files::. - - A package may be declared as a _renaming_ of another package; e.g., - from the project file for an imported project. - - with "/global/apex.gpr"; - project Example is - package Naming renames Apex.Naming; - ... - end Example; - - Packages that are renamed in other project files often come from - project files that have no sources: they are just used as templates. - Any modification in the template will be reflected automatically in all - the project files that rename a package from the template. - - In addition to the tool-oriented packages, you can also declare a - package named `Naming' to establish specialized source file naming - conventions (see *Note Naming Schemes::). - -  - File: gnat_ug_wnt.info, Node: Variables from Imported Projects, Next: Naming Schemes, Prev: Packages in Project Files, Up: GNAT Project Manager - - Variables from Imported Projects - ================================ - - An attribute or variable defined in an imported or parent project can - be used in expressions in the importing / extending project. Such an - attribute or variable is prefixed with the name of the project and (if - relevant) the name of package where it is defined. - - with "imported"; - project Main extends "base" is - Var1 := Imported.Var; - Var2 := Base.Var & ".new"; - - package Builder is - for Default_Switches ("Ada") use Imported.Builder.Ada_Switches & - "-gnatg" & "-v"; - end Builder; - - package Compiler is - for Default_Switches ("Ada") use Base.Compiler.Ada_Switches; - end Compiler; - end Main; - - In this example: - - * `Var1' is a copy of the variable `Var' defined in the project file - `"imported.gpr"' - - * the value of `Var2' is a copy of the value of variable `Var' - defined in the project file `base.gpr', concatenated with `".new"' - - * attribute `Default_Switches ("Ada")' in package `Builder' is a - string list that includes in its value a copy of variable - `Ada_Switches' defined in the `Builder' package in project file - `imported.gpr' plus two new elements: `"-gnatg"' and `"-v"'; - - * attribute `Default_Switches ("Ada")' in package `Compiler' is a - copy of the variable `Ada_Switches' defined in the `Compiler' - package in project file `base.gpr', the project being extended. - -  - File: gnat_ug_wnt.info, Node: Naming Schemes, Next: Library Projects, Prev: Variables from Imported Projects, Up: GNAT Project Manager - - Naming Schemes - ============== - - Sometimes an Ada software system is ported from a foreign compilation - environment to GNAT, with file names that do not use the default GNAT - conventions. Instead of changing all the file names (which for a - variety of reasons might not be possible), you can define the relevant - file naming scheme in the `Naming' package in your project file. For - example, the following package models the Apex file naming rules: - - package Naming is - for Casing use "lowercase"; - for Dot_Replacement use "."; - for Specification_Suffix ("Ada") use ".1.ada"; - for Implementation_Suffix ("Ada") use ".2.ada"; - end Naming; - - You can define the following attributes in package `Naming': - - `CASING' - This must be a string with one of the three values `"lowercase"', - `"uppercase"' or `"mixedcase"'; these strings are case insensitive. - - If CASING is not specified, then the default is `"lowercase"'. - - `DOT_REPLACEMENT' - This must be a string whose value satisfies the following - conditions: - - * It must not be empty - - * It cannot start or end with an alphanumeric character - - * It cannot be a single underscore - - * It cannot start with an underscore followed by an alphanumeric - - * It cannot contain a dot `'.'' except if it the entire string - is `"."' - - If `Dot_Replacement' is not specified, then the default is `"-"'. - - `SPECIFICATION_SUFFIX' - This is an associative array (indexed by the programming language - name, case insensitive) whose value is a string that must satisfy - the following conditions: - - * It must not be empty - - * It cannot start with an alphanumeric character - - * It cannot start with an underscore followed by an - alphanumeric character - - If `Specification_Suffix ("Ada")' is not specified, then the - default is `".ads"'. - - `IMPLEMENTATION_SUFFIX' - This is an associative array (indexed by the programming language - name, case insensitive) whose value is a string that must satisfy - the following conditions: - - * It must not be empty - - * It cannot start with an alphanumeric character - - * It cannot start with an underscore followed by an - alphanumeric character - - * It cannot be a suffix of `Specification_Suffix' - - If `Implementation_Suffix ("Ada")' is not specified, then the - default is `".adb"'. - - `SEPARATE_SUFFIX' - This must be a string whose value satisfies the same conditions as - `Implementation_Suffix'. - - If `Separate_Suffix ("Ada")' is not specified, then it defaults to - same value as `Implementation_Suffix ("Ada")'. - - `SPECIFICATION' - You can use the `Specification' attribute, an associative array, - to define the source file name for an individual Ada compilation - unit's spec. The array index must be a string literal that - identifies the Ada unit (case insensitive). The value of this - attribute must be a string that identifies the file that contains - this unit's spec (case sensitive or insensitive depending on the - operating system). - - for Specification ("MyPack.MyChild") use "mypack.mychild.spec"; - - `IMPLEMENTATION' - You can use the `Implementation' attribute, an associative array, - to define the source file name for an individual Ada compilation - unit's body (possibly a subunit). The array index must be a - string literal that identifies the Ada unit (case insensitive). - The value of this attribute must be a string that identifies the - file that contains this unit's body or subunit (case sensitive or - insensitive depending on the operating system). - - for Implementation ("MyPack.MyChild") use "mypack.mychild.body"; - -  - File: gnat_ug_wnt.info, Node: Library Projects, Next: Switches Related to Project Files, Prev: Naming Schemes, Up: GNAT Project Manager - - Library Projects - ================ - - _Library projects_ are projects whose object code is placed in a - library. (Note that this facility is not yet supported on all - platforms) - - To create a library project, you need to define in its project file - two project-level attributes: `Library_Name' and `Library_Dir'. - Additionally, you may define the library-related attributes - `Library_Kind', `Library_Version' and `Library_Elaboration'. - - The `Library_Name' attribute has a string value that must start with - a letter and include only letters and digits. - - The `Library_Dir' attribute has a string value that designates the - path (absolute or relative) of the directory where the library will - reside. It must designate an existing directory, and this directory - needs to be different from the project's object directory. It also - needs to be writable. - - If both `Library_Name' and `Library_Dir' are specified and are - legal, then the project file defines a library project. The optional - library-related attributes are checked only for such project files. - - The `Library_Kind' attribute has a string value that must be one of - the following (case insensitive): `"static"', `"dynamic"' or - `"relocatable"'. If this attribute is not specified, the library is a - static library. Otherwise, the library may be dynamic or relocatable. - Depending on the operating system, there may or may not be a distinction - between dynamic and relocatable libraries. For example, on Unix there - is no such distinction. - - The `Library_Version' attribute has a string value whose - interpretation is platform dependent. On Unix, it is used only for - dynamic/relocatable libraries as the internal name of the library (the - `"soname"'). If the library file name (built from the `Library_Name') - is different from the `Library_Version', then the library file will be - a symbolic link to the actual file whose name will be `Library_Version'. - - Example (on Unix): - - project Plib is - - Version := "1"; - - for Library_Dir use "lib_dir"; - for Library_Name use "dummy"; - for Library_Kind use "relocatable"; - for Library_Version use "libdummy.so." & Version; - - end Plib; - - Directory `lib_dir' will contain the internal library file whose name - will be `libdummy.so.1', and `libdummy.so' will be a symbolic link to - `libdummy.so.1'. - - When `gnatmake' detects that a project file (not the main project - file) is a library project file, it will check all immediate sources of - the project and rebuild the library if any of the sources have been - recompiled. All `ALI' files will also be copied from the object - directory to the library directory. To build executables, `gnatmake' - will use the library rather than the individual object files. - -  - File: gnat_ug_wnt.info, Node: Switches Related to Project Files, Next: Tools Supporting Project Files, Prev: Library Projects, Up: GNAT Project Manager - - Switches Related to Project Files - ================================= - - The following switches are used by GNAT tools that support project - files: - - ``-PPROJECT'' - Indicates the name of a project file. This project file will be - parsed with the verbosity indicated by `-vP_x_', if any, and using - the external references indicated by `-X' switches, if any. - - There must be only one `-P' switch on the command line. - - Since the Project Manager parses the project file only after all - the switches on the command line are checked, the order of the - switches `-P', `-Vp_x_' or `-X' is not significant. - - ``-XNAME=VALUE'' - Indicates that external variable NAME has the value VALUE. The - Project Manager will use this value for occurrences of - `external(name)' when parsing the project file. - - If NAME or VALUE includes a space, then NAME=VALUE should be put - between quotes. - -XOS=NT - -X"user=John Doe" - - Several `-X' switches can be used simultaneously. If several `-X' - switches specify the same NAME, only the last one is used. - - An external variable specified with a `-X' switch takes precedence - over the value of the same name in the environment. - - ``-vP_x_'' - Indicates the verbosity of the parsing of GNAT project files. - `-vP0' means Default (no output for syntactically correct project - files); `-vP1' means Medium; `-vP2' means High. - - The default is Default. - - If several `-vP_x_' switches are present, only the last one is - used. - -  - File: gnat_ug_wnt.info, Node: Tools Supporting Project Files, Next: An Extended Example, Prev: Switches Related to Project Files, Up: GNAT Project Manager - - Tools Supporting Project Files - ============================== - - * Menu: - - * gnatmake and Project Files:: - * The GNAT Driver and Project Files:: - * Glide and Project Files:: - -  - File: gnat_ug_wnt.info, Node: gnatmake and Project Files, Next: The GNAT Driver and Project Files, Up: Tools Supporting Project Files - - gnatmake and Project Files - -------------------------- - - This section covers two topics related to `gnatmake' and project files: - defining switches for `gnatmake' and for the tools that it invokes; and - the use of the `Main' attribute. - - * Menu: - - * Switches and Project Files:: - * Project Files and Main Subprograms:: - -  - File: gnat_ug_wnt.info, Node: Switches and Project Files, Next: Project Files and Main Subprograms, Up: gnatmake and Project Files - - Switches and Project Files - .......................... - - For each of the packages `Builder', `Compiler', `Binder', and `Linker', - you can specify a `Default_Switches' attribute, a `Switches' attribute, - or both; as their names imply, these switch-related attributes affect - which switches are used for which files when `gnatmake' is invoked. As - will be explained below, these package-contributed switches precede the - switches passed on the `gnatmake' command line. - - The `Default_Switches' attribute is an associative array indexed by - language name (case insensitive) and returning a string list. For - example: - - package Compiler is - for Default_Switches ("Ada") use ("-gnaty", "-v"); - end Compiler; - - The `Switches' attribute is also an associative array, indexed by a file - name (which may or may not be case sensitive, depending on the operating - system) and returning a string list. For example: - - package Builder is - for Switches ("main1.adb") use ("-O2"); - for Switches ("main2.adb") use ("-g"); - end Builder; - - For the `Builder' package, the file names should designate source files - for main subprograms. For the `Binder' and `Linker' packages, the file - names should designate `ALI' or source files for main subprograms. In - each case just the file name (without explicit extension) is acceptable. - - For each tool used in a program build (`gnatmake', the compiler, the - binder, and the linker), its corresponding package "contributes" a set - of switches for each file on which the tool is invoked, based on the - switch-related attributes defined in the package. In particular, the - switches that each of these packages contributes for a given file F - comprise: - - * the value of attribute `Switches (F)', if it is specified in the - package for the given file, - - * otherwise, the value of `Default_Switches ("Ada")', if it is - specified in the package. - - If neither of these attributes is defined in the package, then the - package does not contribute any switches for the given file. - - When `gnatmake' is invoked on a file, the switches comprise two sets, - in the following order: those contributed for the file by the `Builder' - package; and the switches passed on the command line. - - When `gnatmake' invokes a tool (compiler, binder, linker) on a file, - the switches passed to the tool comprise three sets, in the following - order: - - 1. the applicable switches contributed for the file by the `Builder' - package in the project file supplied on the command line; - - 2. those contributed for the file by the package (in the relevant - project file - see below) corresponding to the tool; and - - 3. the applicable switches passed on the command line. - - The term _applicable switches_ reflects the fact that `gnatmake' - switches may or may not be passed to individual tools, depending on the - individual switch. - - `gnatmake' may invoke the compiler on source files from different - projects. The Project Manager will use the appropriate project file to - determine the `Compiler' package for each source file being compiled. - Likewise for the `Binder' and `Linker' packages. - - As an example, consider the following package in a project file: - - project Proj1 is - package Compiler is - for Default_Switches ("Ada") use ("-g"); - for Switches ("a.adb") use ("-O1"); - for Switches ("b.adb") use ("-O2", "-gnaty"); - end Compiler; - end Proj1; - - If `gnatmake' is invoked with this project file, and it needs to - compile, say, the files `a.adb', `b.adb', and `c.adb', then `a.adb' - will be compiled with the switch `-O1', `b.adb' with switches `-O2' and - `-gnaty', and `c.adb' with `-g'. - - Another example illustrates the ordering of the switches contributed - by different packages: - - project Proj2 is - package Builder is - for Switches ("main.adb") use ("-g", "-O1", "-f"); - end Builder; - - package Compiler is - for Switches ("main.adb") use ("-O2"); - end Compiler; - end Proj2; - - If you issue the command: - - gnatmake -PProj2 -O0 main - - then the compiler will be invoked on `main.adb' with the following - sequence of switches - - -g -O1 -O2 -O0 - - with the last `-O' switch having precedence over the earlier ones; - several other switches (such as `-c') are added implicitly. - - The switches `-g' and `-O1' are contributed by package `Builder', - `-O2' is contributed by the package `Compiler' and `-O0' comes from the - command line. - - The `-g' switch will also be passed in the invocation of `gnatlink.' - - A final example illustrates switch contributions from packages in - different project files: - - project Proj3 is - for Source_Files use ("pack.ads", "pack.adb"); - package Compiler is - for Default_Switches ("Ada") use ("-gnata"); - end Compiler; - end Proj3; - - with "Proj3"; - project Proj4 is - for Source_Files use ("foo_main.adb", "bar_main.adb"); - package Builder is - for Switches ("foo_main.adb") use ("-s", "-g"); - end Builder; - end Proj4; - - -- Ada source file: - with Pack; - procedure Foo_Main is - ... - end Foo_Main; - - If the command is - gnatmake -PProj4 foo_main.adb -cargs -gnato - - then the switches passed to the compiler for `foo_main.adb' are `-g' - (contributed by the package `Proj4.Builder') and `-gnato' (passed on - the command line). When the imported package `Pack' is compiled, the - switches used are `-g' from `Proj4.Builder', `-gnata' (contributed from - package `Proj3.Compiler', and `-gnato' from the command line. - -  - File: gnat_ug_wnt.info, Node: Project Files and Main Subprograms, Prev: Switches and Project Files, Up: gnatmake and Project Files - - Project Files and Main Subprograms - .................................. - - When using a project file, you can invoke `gnatmake' with several main - subprograms, by specifying their source files on the command line. - Each of these needs to be an immediate source file of the project. - - gnatmake -Pprj main1 main2 main3 - - When using a project file, you can also invoke `gnatmake' without - explicitly specifying any main, and the effect depends on whether you - have defined the `Main' attribute. This attribute has a string list - value, where each element in the list is the name of a source file (the - file extension is optional) containing a main subprogram. - - If the `Main' attribute is defined in a project file as a non-empty - string list and the switch `-u' is not used on the command line, then - invoking `gnatmake' with this project file but without any main on the - command line is equivalent to invoking `gnatmake' with all the file - names in the `Main' attribute on the command line. - - Example: - project Prj is - for Main use ("main1", "main2", "main3"); - end Prj; - - With this project file, `"gnatmake -Pprj"' is equivalent to `"gnatmake - -Pprj main1 main2 main3"'. - - When the project attribute `Main' is not specified, or is specified - as an empty string list, or when the switch `-u' is used on the command - line, then invoking `gnatmake' with no main on the command line will - result in all immediate sources of the project file being checked, and - potentially recompiled. Depending on the presence of the switch `-u', - sources from other project files on which the immediate sources of the - main project file depend are also checked and potentially recompiled. - In other words, the `-u' switch is applied to all of the immediate - sources of themain project file. - -  - File: gnat_ug_wnt.info, Node: The GNAT Driver and Project Files, Next: Glide and Project Files, Prev: gnatmake and Project Files, Up: Tools Supporting Project Files - - The GNAT Driver and Project Files - --------------------------------- - - A number of GNAT tools, other than `gnatmake' are project-aware: - `gnatbind', `gnatfind', `gnatlink', `gnatls' and `gnatxref'. However, - none of these tools can be invoked directly with a project file switch - (`-P'). They need to be invoke through the `gnat' driver. - - The `gnat' driver is a front-end that accepts a number of commands - and call the corresponding tool. It has been designed initially for VMS - to convert VMS style qualifiers to Unix style switches, but it is now - available to all the GNAT supported platforms. - - On non VMS platforms, the `gnat' driver accepts the following - commands (case insensitive): - - * BIND to invoke `gnatbind' - - * CHOP to invoke `gnatchop' - - * COMP or COMPILE to invoke the compiler - - * ELIM to invoke `gnatelim' - - * FIND to invoke `gnatfind' - - * KR or KRUNCH to invoke `gnatkr' - - * LINK to invoke `gnatlink' - - * LS or LIST to invoke `gnatls' - - * MAKE to invoke `gnatmake' - - * NAME to invoke `gnatname' - - * PREP or PREPROCESS to invoke `gnatprep' - - * PSTA or STANDARD to invoke `gnatpsta' - - * STUB to invoke `gnatstub' - - * XREF to invoke `gnatxref' - - Note that the compiler is invoked using the command `gnatmake -f -u'. - - Following the command, you may put switches and arguments for the - invoked tool. - - gnat bind -C main.ali - gnat ls -a main - gnat chop foo.txt - - In addition, for command BIND, FIND, LS or LIST, LINK and XREF, the - project file related switches (`-P', `-X' and `-vPx') may be used in - addition to the switches of the invoking tool. - - For each of these command, there is possibly a package in the main - project that corresponds to the invoked tool. - - * package `Binder' for command BIND (invoking `gnatbind') - - * package `Finder' for command FIND (invoking `gnatfind') - - * package `Gnatls' for command LS or LIST (invoking `gnatls') - - * package `Linker' for command LINK (invoking `gnatlink') - - * package `Cross_Reference' for command XREF (invoking `gnatlink') - - - Package `Gnatls' has a unique attribute `Switches', a simple variable - with a string list value. It contains switches for the invocation of - `gnatls'. - - project Proj1 is - package gnatls is - for Switches use ("-a", "-v"); - end gnatls; - end Proj1; - - All other packages contains a switch `Default_Switches', an associative - array, indexed by the programming language (case insensitive) and - having a string list value. `Default_Switches ("Ada")' contains the - switches for the invocation of the tool corresponding to the package. - - project Proj is - - for Source_Dirs use ("./**"); - - package gnatls is - for Switches use ("-a", "-v"); - end gnatls; - - package Binder is - for Default_Switches ("Ada") use ("-C", "-e"); - end Binder; - - package Linker is - for Default_Switches ("Ada") use ("-C"); - end Linker; - - package Finder is - for Default_Switches ("Ada") use ("-a", "-f"); - end Finder; - - package Cross_Reference is - for Default_Switches ("Ada") use ("-a", "-f", "-d", "-u"); - end Cross_Reference; - end Proj; - - With the above project file, commands such as - - gnat ls -Pproj main - gnat xref -Pproj main - gnat bind -Pproj main.ali - - will set up the environment properly and invoke the tool with the - switches found in the package corresponding to the tool. - -  - File: gnat_ug_wnt.info, Node: Glide and Project Files, Prev: The GNAT Driver and Project Files, Up: Tools Supporting Project Files - - Glide and Project Files - ----------------------- - - Glide will automatically recognize the `.gpr' extension for project - files, and will convert them to its own internal format automatically. - However, it doesn't provide a syntax-oriented editor for modifying these - files. The project file will be loaded as text when you select the - menu item `Ada' => `Project' => `Edit'. You can edit this text and - save the `gpr' file; when you next select this project file in Glide it - will be automatically reloaded. - -  - File: gnat_ug_wnt.info, Node: An Extended Example, Next: Project File Complete Syntax, Prev: Tools Supporting Project Files, Up: GNAT Project Manager - - An Extended Example - =================== - - Suppose that we have two programs, PROG1 and PROG2, with the sources in - the respective directories. We would like to build them with a single - `gnatmake' command, and we would like to place their object files into - `.build' subdirectories of the source directories. Furthermore, we would - like to have to have two separate subdirectories in `.build' - - `release' and `debug' - which will contain the object files compiled - with different set of compilation flags. - - In other words, we have the following structure: - - main - |- prog1 - | |- .build - | | debug - | | release - |- prog2 - |- .build - | debug - | release - - Here are the project files that we need to create in a directory `main' - to maintain this structure: - - 1. We create a `Common' project with a package `Compiler' that - specifies the compilation switches: - - File "common.gpr": - project Common is - - for Source_Dirs use (); -- No source files - - type Build_Type is ("release", "debug"); - Build : Build_Type := External ("BUILD", "debug"); - package Compiler is - case Build is - when "release" => - for Default_Switches ("Ada") use ("-O2"); - when "debug" => - for Default_Switches ("Ada") use ("-g"); - end case; - end Compiler; - - end Common; - - 2. We create separate projects for the two programs: - - File "prog1.gpr": - - with "common"; - project Prog1 is - - for Source_Dirs use ("prog1"); - for Object_Dir use "prog1/.build/" & Common.Build; - - package Compiler renames Common.Compiler; - - end Prog1; - - File "prog2.gpr": - - with "common"; - project Prog2 is - - for Source_Dirs use ("prog2"); - for Object_Dir use "prog2/.build/" & Common.Build; - - package Compiler renames Common.Compiler; - end Prog2; - - 3. We create a wrapping project MAIN: - - File "main.gpr": - - with "common"; - with "prog1"; - with "prog2"; - project Main is - - package Compiler renames Common.Compiler; - - end Main; - - 4. Finally we need to create a dummy procedure that `with's (either - explicitly or implicitly) all the sources of our two programs. - - - Now we can build the programs using the command - - gnatmake -Pmain dummy - - for the Debug mode, or - - gnatmake -Pmain -XBUILD=release - - for the Release mode. - -  - File: gnat_ug_wnt.info, Node: Project File Complete Syntax, Prev: An Extended Example, Up: GNAT Project Manager - - Project File Complete Syntax - ============================ - - project ::= - context_clause project_declaration - - context_clause ::= - {with_clause} - - with_clause ::= - with literal_string { , literal_string } ; - - project_declaration ::= - project simple_name [ extends literal_string ] is - {declarative_item} - end simple_name; - - declarative_item ::= - package_declaration | - typed_string_declaration | - other_declarative_item - - package_declaration ::= - package simple_name package_completion - - package_completion ::= - package_body | package_renaming - - package body ::= - is - {other_declarative_item} - end simple_name ; - - package_renaming ::== - renames simple_name.simple_name ; - - typed_string_declaration ::= - type _simple_name is - ( literal_string {, literal_string} ); - - other_declarative_item ::= - attribute_declaration | - typed_variable_declaration | - variable_declaration | - case_construction - - attribute_declaration ::= - for attribute use expression ; - - attribute ::= - simple_name | - simple_name ( literal_string ) - - typed_variable_declaration ::= - simple_name : name := string_expression ; - - variable_declaration ::= - simple_name := expression; - - expression ::= - term {& term} - - term ::= - literal_string | - string_list | - name | - external_value | - attribute_reference - - literal_string ::= - (same as Ada) - - string_list ::= - ( expression { , expression } ) - - external_value ::= - external ( literal_string [, literal_string] ) - - attribute_reference ::= - attribute_parent ' simple_name [ ( literal_string ) ] - - attribute_parent ::= - project | - simple_name | - simple_name . simple_name - - case_construction ::= - case name is - {case_item} - end case ; - - case_item ::= - when discrete_choice_list => {case_construction | attribute_declaration} - - discrete_choice_list ::= - literal_string {| literal_string} - - name ::= - simple_name {. simple_name} - - simple_name ::= - identifier (same as Ada) - -  - File: gnat_ug_wnt.info, Node: Elaboration Order Handling in GNAT, Next: The Cross-Referencing Tools gnatxref and gnatfind, Prev: GNAT Project Manager, Up: Top - - Elaboration Order Handling in GNAT - ********************************** - - * Menu: - - * Elaboration Code in Ada 95:: - * Checking the Elaboration Order in Ada 95:: - * Controlling the Elaboration Order in Ada 95:: - * Controlling Elaboration in GNAT - Internal Calls:: - * Controlling Elaboration in GNAT - External Calls:: - * Default Behavior in GNAT - Ensuring Safety:: - * Elaboration Issues for Library Tasks:: - * Mixing Elaboration Models:: - * What to Do If the Default Elaboration Behavior Fails:: - * Elaboration for Access-to-Subprogram Values:: - * Summary of Procedures for Elaboration Control:: - * Other Elaboration Order Considerations:: - - This chapter describes the handling of elaboration code in Ada 95 and - in GNAT, and discusses how the order of elaboration of program units can - be controlled in GNAT, either automatically or with explicit programming - features. - -  - File: gnat_ug_wnt.info, Node: Elaboration Code in Ada 95, Next: Checking the Elaboration Order in Ada 95, Up: Elaboration Order Handling in GNAT - - Elaboration Code in Ada 95 - ========================== - - Ada 95 provides rather general mechanisms for executing code at - elaboration time, that is to say before the main program starts - executing. Such code arises in three contexts: - - Initializers for variables. - Variables declared at the library level, in package specs or - bodies, can require initialization that is performed at - elaboration time, as in: - Sqrt_Half : Float := Sqrt (0.5); - - Package initialization code - Code in a `BEGIN-END' section at the outer level of a package body - is executed as part of the package body elaboration code. - - Library level task allocators - Tasks that are declared using task allocators at the library level - start executing immediately and hence can execute at elaboration - time. - - Subprogram calls are possible in any of these contexts, which means that - any arbitrary part of the program may be executed as part of the - elaboration code. It is even possible to write a program which does all - its work at elaboration time, with a null main program, although - stylistically this would usually be considered an inappropriate way to - structure a program. - - An important concern arises in the context of elaboration code: we - have to be sure that it is executed in an appropriate order. What we - have is a series of elaboration code sections, potentially one section - for each unit in the program. It is important that these execute in the - correct order. Correctness here means that, taking the above example of - the declaration of `Sqrt_Half', if some other piece of elaboration code - references `Sqrt_Half', then it must run after the section of - elaboration code that contains the declaration of `Sqrt_Half'. - - There would never be any order of elaboration problem if we made a - rule that whenever you `with' a unit, you must elaborate both the spec - and body of that unit before elaborating the unit doing the `with''ing: - - with Unit_1; - package Unit_2 is ... - - would require that both the body and spec of `Unit_1' be elaborated - before the spec of `Unit_2'. However, a rule like that would be far too - restrictive. In particular, it would make it impossible to have routines - in separate packages that were mutually recursive. - - You might think that a clever enough compiler could look at the - actual elaboration code and determine an appropriate correct order of - elaboration, but in the general case, this is not possible. Consider - the following example. - - In the body of `Unit_1', we have a procedure `Func_1' that references - the variable `Sqrt_1', which is declared in the elaboration code of the - body of `Unit_1': - - Sqrt_1 : Float := Sqrt (0.1); - - The elaboration code of the body of `Unit_1' also contains: - - if expression_1 = 1 then - Q := Unit_2.Func_2; - end if; - - `Unit_2' is exactly parallel, it has a procedure `Func_2' that - references the variable `Sqrt_2', which is declared in the elaboration - code of the body `Unit_2': - - Sqrt_2 : Float := Sqrt (0.1); - - The elaboration code of the body of `Unit_2' also contains: - - if expression_2 = 2 then - Q := Unit_1.Func_1; - end if; - - Now the question is, which of the following orders of elaboration is - acceptable: - - Spec of Unit_1 - Spec of Unit_2 - Body of Unit_1 - Body of Unit_2 - - or - - Spec of Unit_2 - Spec of Unit_1 - Body of Unit_2 - Body of Unit_1 - - If you carefully analyze the flow here, you will see that you cannot - tell at compile time the answer to this question. If `expression_1' is - not equal to 1, and `expression_2' is not equal to 2, then either order - is acceptable, because neither of the function calls is executed. If - both tests evaluate to true, then neither order is acceptable and in - fact there is no correct order. - - If one of the two expressions is true, and the other is false, then - one of the above orders is correct, and the other is incorrect. For - example, if `expression_1' = 1 and `expression_2' /= 2, then the call - to `Func_2' will occur, but not the call to `Func_1.' This means that - it is essential to elaborate the body of `Unit_1' before the body of - `Unit_2', so the first order of elaboration is correct and the second - is wrong. - - By making `expression_1' and `expression_2' depend on input data, or - perhaps the time of day, we can make it impossible for the compiler or - binder to figure out which of these expressions will be true, and hence - it is impossible to guarantee a safe order of elaboration at run time. - -  - File: gnat_ug_wnt.info, Node: Checking the Elaboration Order in Ada 95, Next: Controlling the Elaboration Order in Ada 95, Prev: Elaboration Code in Ada 95, Up: Elaboration Order Handling in GNAT - - Checking the Elaboration Order in Ada 95 - ======================================== - - In some languages that involve the same kind of elaboration problems, - e.g. Java and C++, the programmer is expected to worry about these - ordering problems himself, and it is common to write a program in which - an incorrect elaboration order gives surprising results, because it - references variables before they are initialized. Ada 95 is designed - to be a safe language, and a programmer-beware approach is clearly not - sufficient. Consequently, the language provides three lines of defense: - - Standard rules - Some standard rules restrict the possible choice of elaboration - order. In particular, if you `with' a unit, then its spec is always - elaborated before the unit doing the `with'. Similarly, a parent - spec is always elaborated before the child spec, and finally a - spec is always elaborated before its corresponding body. - - Dynamic elaboration checks - Dynamic checks are made at run time, so that if some entity is - accessed before it is elaborated (typically by means of a - subprogram call) then the exception (`Program_Error') is raised. - - Elaboration control - Facilities are provided for the programmer to specify the desired - order of elaboration. - - Let's look at these facilities in more detail. First, the rules for - dynamic checking. One possible rule would be simply to say that the - exception is raised if you access a variable which has not yet been - elaborated. The trouble with this approach is that it could require - expensive checks on every variable reference. Instead Ada 95 has two - rules which are a little more restrictive, but easier to check, and - easier to state: - - Restrictions on calls - A subprogram can only be called at elaboration time if its body - has been elaborated. The rules for elaboration given above - guarantee that the spec of the subprogram has been elaborated - before the call, but not the body. If this rule is violated, then - the exception `Program_Error' is raised. - - Restrictions on instantiations - A generic unit can only be instantiated if the body of the generic - unit has been elaborated. Again, the rules for elaboration given - above guarantee that the spec of the generic unit has been - elaborated before the instantiation, but not the body. If this - rule is violated, then the exception `Program_Error' is raised. - - The idea is that if the body has been elaborated, then any variables it - references must have been elaborated; by checking for the body being - elaborated we guarantee that none of its references causes any trouble. - As we noted above, this is a little too restrictive, because a - subprogram that has no non-local references in its body may in fact be - safe to call. However, it really would be unsafe to rely on this, - because it would mean that the caller was aware of details of the - implementation in the body. This goes against the basic tenets of Ada. - - A plausible implementation can be described as follows. A Boolean - variable is associated with each subprogram and each generic unit. This - variable is initialized to False, and is set to True at the point body - is elaborated. Every call or instantiation checks the variable, and - raises `Program_Error' if the variable is False. - - Note that one might think that it would be good enough to have one - Boolean variable for each package, but that would not deal with cases - of trying to call a body in the same package as the call that has not - been elaborated yet. Of course a compiler may be able to do enough - analysis to optimize away some of the Boolean variables as unnecessary, - and `GNAT' indeed does such optimizations, but still the easiest - conceptual model is to think of there being one variable per subprogram. - -  - File: gnat_ug_wnt.info, Node: Controlling the Elaboration Order in Ada 95, Next: Controlling Elaboration in GNAT - Internal Calls, Prev: Checking the Elaboration Order in Ada 95, Up: Elaboration Order Handling in GNAT - - Controlling the Elaboration Order in Ada 95 - =========================================== - - In the previous section we discussed the rules in Ada 95 which ensure - that `Program_Error' is raised if an incorrect elaboration order is - chosen. This prevents erroneous executions, but we need mechanisms to - specify a correct execution and avoid the exception altogether. To - achieve this, Ada 95 provides a number of features for controlling the - order of elaboration. We discuss these features in this section. - - First, there are several ways of indicating to the compiler that a - given unit has no elaboration problems: - - packages that do not require a body - In Ada 95, a library package that does not require a body does not - permit a body. This means that if we have a such a package, as in: - - package Definitions is - generic - type m is new integer; - package Subp is - type a is array (1 .. 10) of m; - type b is array (1 .. 20) of m; - end Subp; - end Definitions; - - A package that `with''s `Definitions' may safely instantiate - `Definitions.Subp' because the compiler can determine that there - definitely is no package body to worry about in this case - - pragma Pure - Places sufficient restrictions on a unit to guarantee that no call - to any subprogram in the unit can result in an elaboration - problem. This means that the compiler does not need to worry about - the point of elaboration of such units, and in particular, does - not need to check any calls to any subprograms in this unit. - - pragma Preelaborate - This pragma places slightly less stringent restrictions on a unit - than does pragma Pure, but these restrictions are still sufficient - to ensure that there are no elaboration problems with any calls to - the unit. - - pragma Elaborate_Body - This pragma requires that the body of a unit be elaborated - immediately after its spec. Suppose a unit `A' has such a pragma, - and unit `B' does a `with' of unit `A'. Recall that the standard - rules require the spec of unit `A' to be elaborated before the - `with''ing unit; given the pragma in `A', we also know that the - body of `A' will be elaborated before `B', so that calls to `A' - are safe and do not need a check. - - Note that, unlike pragma `Pure' and pragma `Preelaborate', the use of - `Elaborate_Body' does not guarantee that the program is free of - elaboration problems, because it may not be possible to satisfy the - requested elaboration order. Let's go back to the example with - `Unit_1' and `Unit_2'. If a programmer marks `Unit_1' as - `Elaborate_Body', and not `Unit_2,' then the order of elaboration will - be: - - Spec of Unit_2 - Spec of Unit_1 - Body of Unit_1 - Body of Unit_2 - - Now that means that the call to `Func_1' in `Unit_2' need not be - checked, it must be safe. But the call to `Func_2' in `Unit_1' may - still fail if `Expression_1' is equal to 1, and the programmer must - still take responsibility for this not being the case. - - If all units carry a pragma `Elaborate_Body', then all problems are - eliminated, except for calls entirely within a body, which are in any - case fully under programmer control. However, using the pragma - everywhere is not always possible. In particular, for our - `Unit_1'/`Unit_2' example, if we marked both of them as having pragma - `Elaborate_Body', then clearly there would be no possible elaboration - order. - - The above pragmas allow a server to guarantee safe use by clients, - and clearly this is the preferable approach. Consequently a good rule in - Ada 95 is to mark units as `Pure' or `Preelaborate' if possible, and if - this is not possible, mark them as `Elaborate_Body' if possible. As we - have seen, there are situations where neither of these three pragmas - can be used. So we also provide methods for clients to control the - order of elaboration of the servers on which they depend: - - pragma Elaborate (unit) - This pragma is placed in the context clause, after a `with' clause, - and it requires that the body of the named unit be elaborated - before the unit in which the pragma occurs. The idea is to use - this pragma if the current unit calls at elaboration time, - directly or indirectly, some subprogram in the named unit. - - pragma Elaborate_All (unit) - This is a stronger version of the Elaborate pragma. Consider the - following example: - - Unit A `with''s unit B and calls B.Func in elab code - Unit B `with''s unit C, and B.Func calls C.Func - - Now if we put a pragma `Elaborate (B)' in unit `A', this ensures - that the body of `B' is elaborated before the call, but not the - body of `C', so the call to `C.Func' could still cause - `Program_Error' to be raised. - - The effect of a pragma `Elaborate_All' is stronger, it requires - not only that the body of the named unit be elaborated before the - unit doing the `with', but also the bodies of all units that the - named unit uses, following `with' links transitively. For example, - if we put a pragma `Elaborate_All (B)' in unit `A', then it - requires not only that the body of `B' be elaborated before `A', - but also the body of `C', because `B' `with''s `C'. - - We are now in a position to give a usage rule in Ada 95 for avoiding - elaboration problems, at least if dynamic dispatching and access to - subprogram values are not used. We will handle these cases separately - later. - - The rule is simple. If a unit has elaboration code that can directly - or indirectly make a call to a subprogram in a `with''ed unit, or - instantiate a generic unit in a `with''ed unit, then if the `with''ed - unit does not have pragma `Pure' or `Preelaborate', then the client - should have a pragma `Elaborate_All' for the `with''ed unit. By - following this rule a client is assured that calls can be made without - risk of an exception. If this rule is not followed, then a program may - be in one of four states: - - No order exists - No order of elaboration exists which follows the rules, taking into - account any `Elaborate', `Elaborate_All', or `Elaborate_Body' - pragmas. In this case, an Ada 95 compiler must diagnose the - situation at bind time, and refuse to build an executable program. - - One or more orders exist, all incorrect - One or more acceptable elaboration orders exists, and all of them - generate an elaboration order problem. In this case, the binder - can build an executable program, but `Program_Error' will be raised - when the program is run. - - Several orders exist, some right, some incorrect - One or more acceptable elaboration orders exists, and some of them - work, and some do not. The programmer has not controlled the order - of elaboration, so the binder may or may not pick one of the - correct orders, and the program may or may not raise an exception - when it is run. This is the worst case, because it means that the - program may fail when moved to another compiler, or even another - version of the same compiler. - - One or more orders exists, all correct - One ore more acceptable elaboration orders exist, and all of them - work. In this case the program runs successfully. This state of - affairs can be guaranteed by following the rule we gave above, but - may be true even if the rule is not followed. - - Note that one additional advantage of following our Elaborate_All rule - is that the program continues to stay in the ideal (all orders OK) state - even if maintenance changes some bodies of some subprograms. - Conversely, if a program that does not follow this rule happens to be - safe at some point, this state of affairs may deteriorate silently as a - result of maintenance changes. - - You may have noticed that the above discussion did not mention the - use of `Elaborate_Body'. This was a deliberate omission. If you `with' - an `Elaborate_Body' unit, it still may be the case that code in the - body makes calls to some other unit, so it is still necessary to use - `Elaborate_All' on such units. - -  - File: gnat_ug_wnt.info, Node: Controlling Elaboration in GNAT - Internal Calls, Next: Controlling Elaboration in GNAT - External Calls, Prev: Controlling the Elaboration Order in Ada 95, Up: Elaboration Order Handling in GNAT - - Controlling Elaboration in GNAT - Internal Calls - ================================================ - - In the case of internal calls, i.e. calls within a single package, the - programmer has full control over the order of elaboration, and it is up - to the programmer to elaborate declarations in an appropriate order. For - example writing: - - function One return Float; - - Q : Float := One; - - function One return Float is - begin - return 1.0; - end One; - - will obviously raise `Program_Error' at run time, because function One - will be called before its body is elaborated. In this case GNAT will - generate a warning that the call will raise `Program_Error': - - 1. procedure y is - 2. function One return Float; - 3. - 4. Q : Float := One; - | - >>> warning: cannot call "One" before body is elaborated - >>> warning: Program_Error will be raised at run time - - 5. - 6. function One return Float is - 7. begin - 8. return 1.0; - 9. end One; - 10. - 11. begin - 12. null; - 13. end; - - Note that in this particular case, it is likely that the call is safe, - because the function `One' does not access any global variables. - Nevertheless in Ada 95, we do not want the validity of the check to - depend on the contents of the body (think about the separate - compilation case), so this is still wrong, as we discussed in the - previous sections. - - The error is easily corrected by rearranging the declarations so - that the body of One appears before the declaration containing the call - (note that in Ada 95, declarations can appear in any order, so there is - no restriction that would prevent this reordering, and if we write: - - function One return Float; - - function One return Float is - begin - return 1.0; - end One; - - Q : Float := One; - - then all is well, no warning is generated, and no `Program_Error' - exception will be raised. Things are more complicated when a chain of - subprograms is executed: - - function A return Integer; - function B return Integer; - function C return Integer; - - function B return Integer is begin return A; end; - function C return Integer is begin return B; end; - - X : Integer := C; - - function A return Integer is begin return 1; end; - - Now the call to `C' at elaboration time in the declaration of `X' is - correct, because the body of `C' is already elaborated, and the call to - `B' within the body of `C' is correct, but the call to `A' within the - body of `B' is incorrect, because the body of `A' has not been - elaborated, so `Program_Error' will be raised on the call to `A'. In - this case GNAT will generate a warning that `Program_Error' may be - raised at the point of the call. Let's look at the warning: - - 1. procedure x is - 2. function A return Integer; - 3. function B return Integer; - 4. function C return Integer; - 5. - 6. function B return Integer is begin return A; end; - | - >>> warning: call to "A" before body is elaborated may - raise Program_Error - >>> warning: "B" called at line 7 - >>> warning: "C" called at line 9 - - 7. function C return Integer is begin return B; end; - 8. - 9. X : Integer := C; - 10. - 11. function A return Integer is begin return 1; end; - 12. - 13. begin - 14. null; - 15. end; - - Note that the message here says "may raise", instead of the direct case, - where the message says "will be raised". That's because whether `A' is - actually called depends in general on run-time flow of control. For - example, if the body of `B' said - - function B return Integer is - begin - if some-condition-depending-on-input-data then - return A; - else - return 1; - end if; - end B; - - then we could not know until run time whether the incorrect call to A - would actually occur, so `Program_Error' might or might not be raised. - It is possible for a compiler to do a better job of analyzing bodies, to - determine whether or not `Program_Error' might be raised, but it - certainly couldn't do a perfect job (that would require solving the - halting problem and is provably impossible), and because this is a - warning anyway, it does not seem worth the effort to do the analysis. - Cases in which it would be relevant are rare. - - In practice, warnings of either of the forms given above will - usually correspond to real errors, and should be examined carefully and - eliminated. In the rare case where a warning is bogus, it can be - suppressed by any of the following methods: - - * Compile with the `-gnatws' switch set - - * Suppress `Elaboration_Checks' for the called subprogram - - * Use pragma `Warnings_Off' to turn warnings off for the call - - For the internal elaboration check case, GNAT by default generates the - necessary run-time checks to ensure that `Program_Error' is raised if - any call fails an elaboration check. Of course this can only happen if a - warning has been issued as described above. The use of pragma `Suppress - (Elaboration_Checks)' may (but is not guaranteed to) suppress some of - these checks, meaning that it may be possible (but is not guaranteed) - for a program to be able to call a subprogram whose body is not yet - elaborated, without raising a `Program_Error' exception. - -  - File: gnat_ug_wnt.info, Node: Controlling Elaboration in GNAT - External Calls, Next: Default Behavior in GNAT - Ensuring Safety, Prev: Controlling Elaboration in GNAT - Internal Calls, Up: Elaboration Order Handling in GNAT - - Controlling Elaboration in GNAT - External Calls - ================================================ - - The previous section discussed the case in which the execution of a - particular thread of elaboration code occurred entirely within a single - unit. This is the easy case to handle, because a programmer has direct - and total control over the order of elaboration, and furthermore, - checks need only be generated in cases which are rare and which the - compiler can easily detect. The situation is more complex when - separate compilation is taken into account. Consider the following: - - package Math is - function Sqrt (Arg : Float) return Float; - end Math; - - package body Math is - function Sqrt (Arg : Float) return Float is - begin - ... - end Sqrt; - end Math; - - with Math; - package Stuff is - X : Float := Math.Sqrt (0.5); - end Stuff; - - with Stuff; - procedure Main is - begin - ... - end Main; - - where `Main' is the main program. When this program is executed, the - elaboration code must first be executed, and one of the jobs of the - binder is to determine the order in which the units of a program are to - be elaborated. In this case we have four units: the spec and body of - `Math', the spec of `Stuff' and the body of `Main'). In what order - should the four separate sections of elaboration code be executed? - - There are some restrictions in the order of elaboration that the - binder can choose. In particular, if unit U has a `with' for a package - `X', then you are assured that the spec of `X' is elaborated before U , - but you are not assured that the body of `X' is elaborated before U. - This means that in the above case, the binder is allowed to choose the - order: - - spec of Math - spec of Stuff - body of Math - body of Main - - but that's not good, because now the call to `Math.Sqrt' that happens - during the elaboration of the `Stuff' spec happens before the body of - `Math.Sqrt' is elaborated, and hence causes `Program_Error' exception - to be raised. At first glance, one might say that the binder is - misbehaving, because obviously you want to elaborate the body of - something you `with' first, but that is not a general rule that can be - followed in all cases. Consider - - package X is ... - - package Y is ... - - with X; - package body Y is ... - - with Y; - package body X is ... - - This is a common arrangement, and, apart from the order of elaboration - problems that might arise in connection with elaboration code, this - works fine. A rule that says that you must first elaborate the body of - anything you `with' cannot work in this case: the body of `X' `with''s - `Y', which means you would have to elaborate the body of `Y' first, but - that `with''s `X', which means you have to elaborate the body of `X' - first, but ... and we have a loop that cannot be broken. - - It is true that the binder can in many cases guess an order of - elaboration that is unlikely to cause a `Program_Error' exception to be - raised, and it tries to do so (in the above example of - `Math/Stuff/Spec', the GNAT binder will by default elaborate the body - of `Math' right after its spec, so all will be well). - - However, a program that blindly relies on the binder to be helpful - can get into trouble, as we discussed in the previous sections, so GNAT - provides a number of facilities for assisting the programmer in - developing programs that are robust with respect to elaboration order. - -  - File: gnat_ug_wnt.info, Node: Default Behavior in GNAT - Ensuring Safety, Next: Elaboration Issues for Library Tasks, Prev: Controlling Elaboration in GNAT - External Calls, Up: Elaboration Order Handling in GNAT - - Default Behavior in GNAT - Ensuring Safety - ========================================== - - The default behavior in GNAT ensures elaboration safety. In its default - mode GNAT implements the rule we previously described as the right - approach. Let's restate it: - - * _If a unit has elaboration code that can directly or indirectly - make a call to a subprogram in a `with''ed unit, or instantiate a - generic unit in a `with''ed unit, then if the `with''ed unit does - not have pragma `Pure' or `Preelaborate', then the client should - have an `Elaborate_All' for the `with''ed unit._ - - By following this rule a client is assured that calls and - instantiations can be made without risk of an exception. - - In this mode GNAT traces all calls that are potentially made from - elaboration code, and puts in any missing implicit `Elaborate_All' - pragmas. The advantage of this approach is that no elaboration problems - are possible if the binder can find an elaboration order that is - consistent with these implicit `Elaborate_All' pragmas. The - disadvantage of this approach is that no such order may exist. - - If the binder does not generate any diagnostics, then it means that - it has found an elaboration order that is guaranteed to be safe. - However, the binder may still be relying on implicitly generated - `Elaborate_All' pragmas so portability to other compilers than GNAT is - not guaranteed. - - If it is important to guarantee portability, then the compilations - should use the `-gnatwl' (warn on elaboration problems) switch. This - will cause warning messages to be generated indicating the missing - `Elaborate_All' pragmas. Consider the following source program: - - with k; - package j is - m : integer := k.r; - end; - - where it is clear that there should be a pragma `Elaborate_All' for - unit `k'. An implicit pragma will be generated, and it is likely that - the binder will be able to honor it. However, it is safer to include - the pragma explicitly in the source. If this unit is compiled with the - `-gnatwl' switch, then the compiler outputs a warning: - - 1. with k; - 2. package j is - 3. m : integer := k.r; - | - >>> warning: call to "r" may raise Program_Error - >>> warning: missing pragma Elaborate_All for "k" - - 4. end; - - and these warnings can be used as a guide for supplying manually the - missing pragmas. - - This default mode is more restrictive than the Ada Reference Manual, - and it is possible to construct programs which will compile using the - dynamic model described there, but will run into a circularity using - the safer static model we have described. - - Of course any Ada compiler must be able to operate in a mode - consistent with the requirements of the Ada Reference Manual, and in - particular must have the capability of implementing the standard - dynamic model of elaboration with run-time checks. - - In GNAT, this standard mode can be achieved either by the use of the - `-gnatE' switch on the compiler (`gcc' or `gnatmake') command, or by - the use of the configuration pragma: - - pragma Elaboration_Checks (RM); - - Either approach will cause the unit affected to be compiled using the - standard dynamic run-time elaboration checks described in the Ada - Reference Manual. The static model is generally preferable, since it is - clearly safer to rely on compile and link time checks rather than - run-time checks. However, in the case of legacy code, it may be - difficult to meet the requirements of the static model. This issue is - further discussed in *Note What to Do If the Default Elaboration - Behavior Fails::. - - Note that the static model provides a strict subset of the allowed - behavior and programs of the Ada Reference Manual, so if you do adhere - to the static model and no circularities exist, then you are assured - that your program will work using the dynamic model. - -  - File: gnat_ug_wnt.info, Node: Elaboration Issues for Library Tasks, Next: Mixing Elaboration Models, Prev: Default Behavior in GNAT - Ensuring Safety, Up: Elaboration Order Handling in GNAT - - Elaboration Issues for Library Tasks - ==================================== - - In this section we examine special elaboration issues that arise for - programs that declare library level tasks. - - Generally the model of execution of an Ada program is that all units - are elaborated, and then execution of the program starts. However, the - declaration of library tasks definitely does not fit this model. The - reason for this is that library tasks start as soon as they are declared - (more precisely, as soon as the statement part of the enclosing package - body is reached), that is to say before elaboration of the program is - complete. This means that if such a task calls a subprogram, or an - entry in another task, the callee may or may not be elaborated yet, and - in the standard Reference Manual model of dynamic elaboration checks, - you can even get timing dependent Program_Error exceptions, since there - can be a race between the elaboration code and the task code. - - The static model of elaboration in GNAT seeks to avoid all such - dynamic behavior, by being conservative, and the conservative approach - in this particular case is to assume that all the code in a task body - is potentially executed at elaboration time if a task is declared at - the library level. - - This can definitely result in unexpected circularities. Consider the - following example - - package Decls is - task Lib_Task is - entry Start; - end Lib_Task; - - type My_Int is new Integer; - - function Ident (M : My_Int) return My_Int; - end Decls; - - with Utils; - package body Decls is - task body Lib_Task is - begin - accept Start; - Utils.Put_Val (2); - end Lib_Task; - - function Ident (M : My_Int) return My_Int is - begin - return M; - end Ident; - end Decls; - - with Decls; - package Utils is - procedure Put_Val (Arg : Decls.My_Int); - end Utils; - - with Text_IO; - package body Utils is - procedure Put_Val (Arg : Decls.My_Int) is - begin - Text_IO.Put_Line (Decls.My_Int'Image (Decls.Ident (Arg))); - end Put_Val; - end Utils; - - with Decls; - procedure Main is - begin - Decls.Lib_Task.Start; - end; - - If the above example is compiled in the default static elaboration - mode, then a circularity occurs. The circularity comes from the call - `Utils.Put_Val' in the task body of `Decls.Lib_Task'. Since this call - occurs in elaboration code, we need an implicit pragma `Elaborate_All' - for `Utils'. This means that not only must the spec and body of `Utils' - be elaborated before the body of `Decls', but also the spec and body of - any unit that is `with'ed' by the body of `Utils' must also be - elaborated before the body of `Decls'. This is the transitive - implication of pragma `Elaborate_All' and it makes sense, because in - general the body of `Put_Val' might have a call to something in a - `with'ed' unit. - - In this case, the body of Utils (actually its spec) `with's' - `Decls'. Unfortunately this means that the body of `Decls' must be - elaborated before itself, in case there is a call from the body of - `Utils'. - - Here is the exact chain of events we are worrying about: - - 1. In the body of `Decls' a call is made from within the body of a - library task to a subprogram in the package `Utils'. Since this - call may occur at elaboration time (given that the task is - activated at elaboration time), we have to assume the worst, i.e. - that the call does happen at elaboration time. - - 2. This means that the body and spec of `Util' must be elaborated - before the body of `Decls' so that this call does not cause an - access before elaboration. - - 3. Within the body of `Util', specifically within the body of - `Util.Put_Val' there may be calls to any unit `with''ed by this - package. - - 4. One such `with''ed package is package `Decls', so there might be a - call to a subprogram in `Decls' in `Put_Val'. In fact there is - such a call in this example, but we would have to assume that - there was such a call even if it were not there, since we are not - supposed to write the body of `Decls' knowing what is in the body - of `Utils'; certainly in the case of the static elaboration model, - the compiler does not know what is in other bodies and must assume - the worst. - - 5. This means that the spec and body of `Decls' must also be - elaborated before we elaborate the unit containing the call, but - that unit is `Decls'! This means that the body of `Decls' must be - elaborated before itself, and that's a circularity. - - Indeed, if you add an explicit pragma Elaborate_All for `Utils' in the - body of `Decls' you will get a true Ada Reference Manual circularity - that makes the program illegal. - - In practice, we have found that problems with the static model of - elaboration in existing code often arise from library tasks, so we must - address this particular situation. - - Note that if we compile and run the program above, using the dynamic - model of elaboration (that is to say use the `-gnatE' switch), then it - compiles, binds, links, and runs, printing the expected result of 2. - Therefore in some sense the circularity here is only apparent, and we - need to capture the properties of this program that distinguish it - from other library-level tasks that have real elaboration problems. - - We have four possible answers to this question: - - * Use the dynamic model of elaboration. - - If we use the `-gnatE' switch, then as noted above, the program - works. Why is this? If we examine the task body, it is apparent - that the task cannot proceed past the `accept' statement until - after elaboration has been completed, because the corresponding - entry call comes from the main program, not earlier. This is why - the dynamic model works here. But that's really giving up on a - precise analysis, and we prefer to take this approach only if we - cannot solve the problem in any other manner. So let us examine - two ways to reorganize the program to avoid the potential - elaboration problem. - - * Split library tasks into separate packages. - - Write separate packages, so that library tasks are isolated from - other declarations as much as possible. Let us look at a variation - on the above program. - - package Decls1 is - task Lib_Task is - entry Start; - end Lib_Task; - end Decls1; - - with Utils; - package body Decls1 is - task body Lib_Task is - begin - accept Start; - Utils.Put_Val (2); - end Lib_Task; - end Decls1; - - package Decls2 is - type My_Int is new Integer; - function Ident (M : My_Int) return My_Int; - end Decls2; - - with Utils; - package body Decls2 is - function Ident (M : My_Int) return My_Int is - begin - return M; - end Ident; - end Decls2; - - with Decls2; - package Utils is - procedure Put_Val (Arg : Decls2.My_Int); - end Utils; - - with Text_IO; - package body Utils is - procedure Put_Val (Arg : Decls2.My_Int) is - begin - Text_IO.Put_Line (Decls2.My_Int'Image (Decls2.Ident (Arg))); - end Put_Val; - end Utils; - - with Decls1; - procedure Main is - begin - Decls1.Lib_Task.Start; - end; - - All we have done is to split `Decls' into two packages, one - containing the library task, and one containing everything else. - Now there is no cycle, and the program compiles, binds, links and - executes using the default static model of elaboration. - - * Declare separate task types. - - A significant part of the problem arises because of the use of the - single task declaration form. This means that the elaboration of - the task type, and the elaboration of the task itself (i.e. the - creation of the task) happen at the same time. A good rule of - style in Ada 95 is to always create explicit task types. By - following the additional step of placing task objects in separate - packages from the task type declaration, many elaboration problems - are avoided. Here is another modified example of the example - program: - - package Decls is - task type Lib_Task_Type is - entry Start; - end Lib_Task_Type; - - type My_Int is new Integer; - - function Ident (M : My_Int) return My_Int; - end Decls; - - with Utils; - package body Decls is - task body Lib_Task_Type is - begin - accept Start; - Utils.Put_Val (2); - end Lib_Task_Type; - - function Ident (M : My_Int) return My_Int is - begin - return M; - end Ident; - end Decls; - - with Decls; - package Utils is - procedure Put_Val (Arg : Decls.My_Int); - end Utils; - - with Text_IO; - package body Utils is - procedure Put_Val (Arg : Decls.My_Int) is - begin - Text_IO.Put_Line (Decls.My_Int'Image (Decls.Ident (Arg))); - end Put_Val; - end Utils; - - with Decls; - package Declst is - Lib_Task : Decls.Lib_Task_Type; - end Declst; - - with Declst; - procedure Main is - begin - Declst.Lib_Task.Start; - end; - - What we have done here is to replace the `task' declaration in - package `Decls' with a `task type' declaration. Then we introduce - a separate package `Declst' to contain the actual task object. - This separates the elaboration issues for the `task type' - declaration, which causes no trouble, from the elaboration issues - of the task object, which is also unproblematic, since it is now - independent of the elaboration of `Utils'. This separation of - concerns also corresponds to a generally sound engineering - principle of separating declarations from instances. This version - of the program also compiles, binds, links, and executes, - generating the expected output. - - * Use No_Entry_Calls_In_Elaboration_Code restriction. - - The previous two approaches described how a program can be - restructured to avoid the special problems caused by library task - bodies. in practice, however, such restructuring may be difficult - to apply to existing legacy code, so we must consider solutions - that do not require massive rewriting. - - Let us consider more carefully why our original sample program - works under the dynamic model of elaboration. The reason is that - the code in the task body blocks immediately on the `accept' - statement. Now of course there is nothing to prohibit elaboration - code from making entry calls (for example from another library - level task), so we cannot tell in isolation that the task will not - execute the accept statement during elaboration. - - However, in practice it is very unusual to see elaboration code - make any entry calls, and the pattern of tasks starting at - elaboration time and then immediately blocking on `accept' or - `select' statements is very common. What this means is that the - compiler is being too pessimistic when it analyzes the whole - package body as though it might be executed at elaboration time. - - If we know that the elaboration code contains no entry calls, (a - very safe assumption most of the time, that could almost be made - the default behavior), then we can compile all units of the - program under control of the following configuration pragma: - - pragma Restrictions (No_Entry_Calls_In_Elaboration_Code); - - This pragma can be placed in the `gnat.adc' file in the usual - manner. If we take our original unmodified program and compile it - in the presence of a `gnat.adc' containing the above pragma, then - once again, we can compile, bind, link, and execute, obtaining the - expected result. In the presence of this pragma, the compiler does - not trace calls in a task body, that appear after the first - `accept' or `select' statement, and therefore does not report a - potential circularity in the original program. - - The compiler will check to the extent it can that the above - restriction is not violated, but it is not always possible to do a - complete check at compile time, so it is important to use this - pragma only if the stated restriction is in fact met, that is to - say no task receives an entry call before elaboration of all units - is completed. - - -  - File: gnat_ug_wnt.info, Node: Mixing Elaboration Models, Next: What to Do If the Default Elaboration Behavior Fails, Prev: Elaboration Issues for Library Tasks, Up: Elaboration Order Handling in GNAT - - Mixing Elaboration Models - ========================= - - So far, we have assumed that the entire program is either compiled - using the dynamic model or static model, ensuring consistency. It is - possible to mix the two models, but rules have to be followed if this - mixing is done to ensure that elaboration checks are not omitted. - - The basic rule is that _a unit compiled with the static model cannot - be `with'ed' by a unit compiled with the dynamic model_. The reason for - this is that in the static model, a unit assumes that its clients - guarantee to use (the equivalent of) pragma `Elaborate_All' so that no - elaboration checks are required in inner subprograms, and this - assumption is violated if the client is compiled with dynamic checks. - - The precise rule is as follows. A unit that is compiled with dynamic - checks can only `with' a unit that meets at least one of the following - criteria: - - * The `with'ed' unit is itself compiled with dynamic elaboration - checks (that is with the `-gnatE' switch. - - * The `with'ed' unit is an internal GNAT implementation unit from - the System, Interfaces, Ada, or GNAT hierarchies. - - * The `with'ed' unit has pragma Preelaborate or pragma Pure. - - * The `with'ing' unit (that is the client) has an explicit pragma - `Elaborate_All' for the `with'ed' unit. - - - If this rule is violated, that is if a unit with dynamic elaboration - checks `with's' a unit that does not meet one of the above four - criteria, then the binder (`gnatbind') will issue a warning similar to - that in the following example: - - warning: "x.ads" has dynamic elaboration checks and with's - warning: "y.ads" which has static elaboration checks - - These warnings indicate that the rule has been violated, and that as a - result elaboration checks may be missed in the resulting executable - file. This warning may be suppressed using the `-ws' binder switch in - the usual manner. - - One useful application of this mixing rule is in the case of a - subsystem which does not itself `with' units from the remainder of the - application. In this case, the entire subsystem can be compiled with - dynamic checks to resolve a circularity in the subsystem, while - allowing the main application that uses this subsystem to be compiled - using the more reliable default static model. - -  - File: gnat_ug_wnt.info, Node: What to Do If the Default Elaboration Behavior Fails, Next: Elaboration for Access-to-Subprogram Values, Prev: Mixing Elaboration Models, Up: Elaboration Order Handling in GNAT - - What to Do If the Default Elaboration Behavior Fails - ==================================================== - - If the binder cannot find an acceptable order, it outputs detailed - diagnostics. For example: - error: elaboration circularity detected - info: "proc (body)" must be elaborated before "pack (body)" - info: reason: Elaborate_All probably needed in unit "pack (body)" - info: recompile "pack (body)" with -gnatwl - info: for full details - info: "proc (body)" - info: is needed by its spec: - info: "proc (spec)" - info: which is withed by: - info: "pack (body)" - info: "pack (body)" must be elaborated before "proc (body)" - info: reason: pragma Elaborate in unit "proc (body)" - - - In this case we have a cycle that the binder cannot break. On the one - hand, there is an explicit pragma Elaborate in `proc' for `pack'. This - means that the body of `pack' must be elaborated before the body of - `proc'. On the other hand, there is elaboration code in `pack' that - calls a subprogram in `proc'. This means that for maximum safety, there - should really be a pragma Elaborate_All in `pack' for `proc' which - would require that the body of `proc' be elaborated before the body of - `pack'. Clearly both requirements cannot be satisfied. Faced with a - circularity of this kind, you have three different options. - - Fix the program - The most desirable option from the point of view of long-term - maintenance is to rearrange the program so that the elaboration - problems are avoided. One useful technique is to place the - elaboration code into separate child packages. Another is to move - some of the initialization code to explicitly called subprograms, - where the program controls the order of initialization explicitly. - Although this is the most desirable option, it may be impractical - and involve too much modification, especially in the case of - complex legacy code. - - Perform dynamic checks - If the compilations are done using the `-gnatE' (dynamic - elaboration check) switch, then GNAT behaves in a quite different - manner. Dynamic checks are generated for all calls that could - possibly result in raising an exception. With this switch, the - compiler does not generate implicit `Elaborate_All' pragmas. The - behavior then is exactly as specified in the Ada 95 Reference - Manual. The binder will generate an executable program that may - or may not raise `Program_Error', and then it is the programmer's - job to ensure that it does not raise an exception. Note that it is - important to compile all units with the switch, it cannot be used - selectively. - - Suppress checks - The drawback of dynamic checks is that they generate a significant - overhead at run time, both in space and time. If you are - absolutely sure that your program cannot raise any elaboration - exceptions, and you still want to use the dynamic elaboration - model, then you can use the configuration pragma `Suppress - (Elaboration_Checks)' to suppress all such checks. For example - this pragma could be placed in the `gnat.adc' file. - - Suppress checks selectively - When you know that certain calls in elaboration code cannot - possibly lead to an elaboration error, and the binder nevertheless - generates warnings on those calls and inserts Elaborate_All - pragmas that lead to elaboration circularities, it is possible to - remove those warnings locally and obtain a program that will bind. - Clearly this can be unsafe, and it is the responsibility of the - programmer to make sure that the resulting program has no - elaboration anomalies. The pragma `Suppress (Elaboration_Check)' - can be used with different granularity to suppress warnings and - break elaboration circularities: - - * Place the pragma that names the called subprogram in the - declarative part that contains the call. - - * Place the pragma in the declarative part, without naming an - entity. This disables warnings on all calls in the - corresponding declarative region. - - * Place the pragma in the package spec that declares the called - subprogram, and name the subprogram. This disables warnings - on all elaboration calls to that subprogram. - - * Place the pragma in the package spec that declares the called - subprogram, without naming any entity. This disables warnings - on all elaboration calls to all subprograms declared in this - spec. - - These four cases are listed in order of decreasing safety, and - therefore require increasing programmer care in their application. - Consider the following program: - - package Pack1 is - function F1 return Integer; - X1 : Integer; - end Pack1; - - package Pack2 is - function F2 return Integer; - function Pure (x : integer) return integer; - -- pragma Suppress (Elaboration_Check, On => Pure); -- (3) - -- pragma Suppress (Elaboration_Check); -- (4) - end Pack2; - - with Pack2; - package body Pack1 is - function F1 return Integer is - begin - return 100; - end F1; - Val : integer := Pack2.Pure (11); -- Elab. call (1) - begin - declare - -- pragma Suppress(Elaboration_Check, Pack2.F2); -- (1) - -- pragma Suppress(Elaboration_Check); -- (2) - begin - X1 := Pack2.F2 + 1; -- Elab. call (2) - end; - end Pack1; - - with Pack1; - package body Pack2 is - function F2 return Integer is - begin - return Pack1.F1; - end F2; - function Pure (x : integer) return integer is - begin - return x ** 3 - 3 * x; - end; - end Pack2; - - with Pack1, Ada.Text_IO; - procedure Proc3 is - begin - Ada.Text_IO.Put_Line(Pack1.X1'Img); -- 101 - end Proc3; - In the absence of any pragmas, an attempt to bind this program - produces the following diagnostics: - error: elaboration circularity detected - info: "pack1 (body)" must be elaborated before "pack1 (body)" - info: reason: Elaborate_All probably needed in unit "pack1 (body)" - info: recompile "pack1 (body)" with -gnatwl for full details - info: "pack1 (body)" - info: must be elaborated along with its spec: - info: "pack1 (spec)" - info: which is withed by: - info: "pack2 (body)" - info: which must be elaborated along with its spec: - info: "pack2 (spec)" - info: which is withed by: - info: "pack1 (body)" - The sources of the circularity are the two calls to - `Pack2.Pure' and `Pack2.F2' in the body of `Pack1'. We can see - that the call to F2 is safe, even though F2 calls F1, because the - call appears after the elaboration of the body of F1. Therefore - the pragma (1) is safe, and will remove the warning on the call. - It is also possible to use pragma (2) because there are no other - potentially unsafe calls in the block. - - The call to `Pure' is safe because this function does not depend - on the state of `Pack2'. Therefore any call to this function is - safe, and it is correct to place pragma (3) in the corresponding - package spec. - - Finally, we could place pragma (4) in the spec of `Pack2' to - disable warnings on all calls to functions declared therein. Note - that this is not necessarily safe, and requires more detailed - examination of the subprogram bodies involved. In particular, a - call to `F2' requires that `F1' be already elaborated. - - It is hard to generalize on which of these four approaches should be - taken. Obviously if it is possible to fix the program so that the - default treatment works, this is preferable, but this may not always be - practical. It is certainly simple enough to use `-gnatE' but the - danger in this case is that, even if the GNAT binder finds a correct - elaboration order, it may not always do so, and certainly a binder from - another Ada compiler might not. A combination of testing and analysis - (for which the warnings generated with the `-gnatwl' switch can be - useful) must be used to ensure that the program is free of errors. One - switch that is useful in this testing is the `-p (pessimistic - elaboration order)' switch for `gnatbind'. Normally the binder tries - to find an order that has the best chance of of avoiding elaboration - problems. With this switch, the binder plays a devil's advocate role, - and tries to choose the order that has the best chance of failing. If - your program works even with this switch, then it has a better chance - of being error free, but this is still not a guarantee. - - For an example of this approach in action, consider the C-tests - (executable tests) from the ACVC suite. If these are compiled and run - with the default treatment, then all but one of them succeed without - generating any error diagnostics from the binder. However, there is one - test that fails, and this is not surprising, because the whole point of - this test is to ensure that the compiler can handle cases where it is - impossible to determine a correct order statically, and it checks that - an exception is indeed raised at run time. - - This one test must be compiled and run using the `-gnatE' switch, - and then it passes. Alternatively, the entire suite can be run using - this switch. It is never wrong to run with the dynamic elaboration - switch if your code is correct, and we assume that the C-tests are - indeed correct (it is less efficient, but efficiency is not a factor in - running the ACVC tests.) - -  - File: gnat_ug_wnt.info, Node: Elaboration for Access-to-Subprogram Values, Next: Summary of Procedures for Elaboration Control, Prev: What to Do If the Default Elaboration Behavior Fails, Up: Elaboration Order Handling in GNAT - - Elaboration for Access-to-Subprogram Values - =========================================== - - The introduction of access-to-subprogram types in Ada 95 complicates - the handling of elaboration. The trouble is that it becomes impossible - to tell at compile time which procedure is being called. This means - that it is not possible for the binder to analyze the elaboration - requirements in this case. - - If at the point at which the access value is created (i.e., the - evaluation of `P'Access' for a subprogram `P'), the body of the - subprogram is known to have been elaborated, then the access value is - safe, and its use does not require a check. This may be achieved by - appropriate arrangement of the order of declarations if the subprogram - is in the current unit, or, if the subprogram is in another unit, by - using pragma `Pure', `Preelaborate', or `Elaborate_Body' on the - referenced unit. - - If the referenced body is not known to have been elaborated at the - point the access value is created, then any use of the access value - must do a dynamic check, and this dynamic check will fail and raise a - `Program_Error' exception if the body has not been elaborated yet. - GNAT will generate the necessary checks, and in addition, if the - `-gnatwl' switch is set, will generate warnings that such checks are - required. - - The use of dynamic dispatching for tagged types similarly generates - a requirement for dynamic checks, and premature calls to any primitive - operation of a tagged type before the body of the operation has been - elaborated, will result in the raising of `Program_Error'. - -  - File: gnat_ug_wnt.info, Node: Summary of Procedures for Elaboration Control, Next: Other Elaboration Order Considerations, Prev: Elaboration for Access-to-Subprogram Values, Up: Elaboration Order Handling in GNAT - - Summary of Procedures for Elaboration Control - ============================================= - - First, compile your program with the default options, using none of the - special elaboration control switches. If the binder successfully binds - your program, then you can be confident that, apart from issues raised - by the use of access-to-subprogram types and dynamic dispatching, the - program is free of elaboration errors. If it is important that the - program be portable, then use the `-gnatwl' switch to generate warnings - about missing `Elaborate_All' pragmas, and supply the missing pragmas. - - If the program fails to bind using the default static elaboration - handling, then you can fix the program to eliminate the binder message, - or recompile the entire program with the `-gnatE' switch to generate - dynamic elaboration checks, and, if you are sure there really are no - elaboration problems, use a global pragma `Suppress - (Elaboration_Checks)'. - -  - File: gnat_ug_wnt.info, Node: Other Elaboration Order Considerations, Prev: Summary of Procedures for Elaboration Control, Up: Elaboration Order Handling in GNAT - - Other Elaboration Order Considerations - ====================================== - - This section has been entirely concerned with the issue of finding a - valid elaboration order, as defined by the Ada Reference Manual. In a - case where several elaboration orders are valid, the task is to find one - of the possible valid elaboration orders (and the static model in GNAT - will ensure that this is achieved). - - The purpose of the elaboration rules in the Ada Reference Manual is - to make sure that no entity is accessed before it has been elaborated. - For a subprogram, this means that the spec and body must have been - elaborated before the subprogram is called. For an object, this means - that the object must have been elaborated before its value is read or - written. A violation of either of these two requirements is an access - before elaboration order, and this section has been all about avoiding - such errors. - - In the case where more than one order of elaboration is possible, in - the sense that access before elaboration errors are avoided, then any - one of the orders is "correct" in the sense that it meets the - requirements of the Ada Reference Manual, and no such error occurs. - - However, it may be the case for a given program, that there are - constraints on the order of elaboration that come not from consideration - of avoiding elaboration errors, but rather from extra-lingual logic - requirements. Consider this example: - - with Init_Constants; - package Constants is - X : Integer := 0; - Y : Integer := 0; - end Constants; - - package Init_Constants is - procedure Calc; - end Init_Constants; - - with Constants; - package body Init_Constants is - procedure Calc is begin null; end; - begin - Constants.X := 3; - Constants.Y := 4; - end Init_Constants; - - with Constants; - package Calc is - Z : Integer := Constants.X + Constants.Y; - end Calc; - - with Calc; - with Text_IO; use Text_IO; - procedure Main is - begin - Put_Line (Calc.Z'Img); - end Main; - - In this example, there is more than one valid order of elaboration. For - example both the following are correct orders: - - Init_Constants spec - Constants spec - Calc spec - Main body - Init_Constants body - - and - - Init_Constants spec - Init_Constants body - Constants spec - Calc spec - Main body - - There is no language rule to prefer one or the other, both are correct - from an order of elaboration point of view. But the programmatic effects - of the two orders are very different. In the first, the elaboration - routine of `Calc' initializes `Z' to zero, and then the main program - runs with this value of zero. But in the second order, the elaboration - routine of `Calc' runs after the body of Init_Constants has set `X' and - `Y' and thus `Z' is set to 7 before `Main' runs. - - One could perhaps by applying pretty clever non-artificial - intelligence to the situation guess that it is more likely that the - second order of elaboration is the one desired, but there is no formal - linguistic reason to prefer one over the other. In fact in this - particular case, GNAT will prefer the second order, because of the rule - that bodies are elaborated as soon as possible, but it's just luck that - this is what was wanted (if indeed the second order was preferred). - - If the program cares about the order of elaboration routines in a - case like this, it is important to specify the order required. In this - particular case, that could have been achieved by adding to the spec of - Calc: - - pragma Elaborate_All (Constants); - - which requires that the body (if any) and spec of `Constants', as well - as the body and spec of any unit `with''ed by `Constants' be elaborated - before `Calc' is elaborated. - - Clearly no automatic method can always guess which alternative you - require, and if you are working with legacy code that had constraints - of this kind which were not properly specified by adding `Elaborate' or - `Elaborate_All' pragmas, then indeed it is possible that two different - compilers can choose different orders. - - The `gnatbind' `-p' switch may be useful in smoking out problems. - This switch causes bodies to be elaborated as late as possible instead - of as early as possible. In the example above, it would have forced the - choice of the first elaboration order. If you get different results - when using this switch, and particularly if one set of results is right, - and one is wrong as far as you are concerned, it shows that you have - some missing `Elaborate' pragmas. For the example above, we have the - following output: - - gnatmake -f -q main - main - 7 - gnatmake -f -q main -bargs -p - main - 0 - - It is of course quite unlikely that both these results are correct, so - it is up to you in a case like this to investigate the source of the - difference, by looking at the two elaboration orders that are chosen, - and figuring out which is correct, and then adding the necessary - `Elaborate_All' pragmas to ensure the desired order. - -  - File: gnat_ug_wnt.info, Node: The Cross-Referencing Tools gnatxref and gnatfind, Next: File Name Krunching Using gnatkr, Prev: Elaboration Order Handling in GNAT, Up: Top - - The Cross-Referencing Tools `gnatxref' and `gnatfind' - ***************************************************** - - The compiler generates cross-referencing information (unless you set - the `-gnatx' switch), which are saved in the `.ali' files. This - information indicates where in the source each entity is declared and - referenced. Note that entities in package Standard are not included, but - entities in all other predefined units are included in the output. - - Before using any of these two tools, you need to compile - successfully your application, so that GNAT gets a chance to generate - the cross-referencing information. - - The two tools `gnatxref' and `gnatfind' take advantage of this - information to provide the user with the capability to easily locate the - declaration and references to an entity. These tools are quite similar, - the difference being that `gnatfind' is intended for locating - definitions and/or references to a specified entity or entities, whereas - `gnatxref' is oriented to generating a full report of all - cross-references. - - To use these tools, you must not compile your application using the - `-gnatx' switch on the `gnatmake' command line (*note (gnat_ug)The GNAT - Make Program gnatmake::). Otherwise, cross-referencing information will - not be generated. - - * Menu: - - * gnatxref Switches:: - * gnatfind Switches:: - * Project Files for gnatxref and gnatfind:: - * Regular Expressions in gnatfind and gnatxref:: - * Examples of gnatxref Usage:: - * Examples of gnatfind Usage:: - -  - File: gnat_ug_wnt.info, Node: gnatxref Switches, Next: gnatfind Switches, Up: The Cross-Referencing Tools gnatxref and gnatfind - - `gnatxref' Switches - =================== - - The command lines for `gnatxref' is: - $ gnatxref [switches] sourcefile1 [sourcefile2 ...] - - where - - `sourcefile1, sourcefile2' - identifies the source files for which a report is to be generated. - The 'with'ed units will be processed too. You must provide at - least one file. - - These file names are considered to be regular expressions, so for - instance specifying 'source*.adb' is the same as giving every file - in the current directory whose name starts with 'source' and whose - extension is 'adb'. - - The switches can be : - `-a' - If this switch is present, `gnatfind' and `gnatxref' will parse - the read-only files found in the library search path. Otherwise, - these files will be ignored. This option can be used to protect - Gnat sources or your own libraries from being parsed, thus making - `gnatfind' and `gnatxref' much faster, and their output much - smaller. - - `-aIDIR' - When looking for source files also look in directory DIR. The - order in which source file search is undertaken is the same as for - `gnatmake'. - - `-aODIR' - When searching for library and object files, look in directory - DIR. The order in which library files are searched is the same as - for `gnatmake'. - - `-nostdinc' - Do not look for sources in the system default directory. - - `-nostdlib' - Do not look for library files in the system default directory. - - `--RTS=RTS-PATH' - Specifies the default location of the runtime library. Same - meaning as the equivalent `gnatmake' flag (see *Note Switches for - gnatmake::). - - `-d' - If this switch is set `gnatxref' will output the parent type - reference for each matching derived types. - - `-f' - If this switch is set, the output file names will be preceded by - their directory (if the file was found in the search path). If - this switch is not set, the directory will not be printed. - - `-g' - If this switch is set, information is output only for library-level - entities, ignoring local entities. The use of this switch may - accelerate `gnatfind' and `gnatxref'. - - `-IDIR' - Equivalent to `-aODIR -aIDIR'. - - `-pFILE' - Specify a project file to use *Note Project Files::. By default, - `gnatxref' and `gnatfind' will try to locate a project file in the - current directory. - - If a project file is either specified or found by the tools, then - the content of the source directory and object directory lines are - added as if they had been specified respectively by `-aI' and - `-aO'. - - `-u' - Output only unused symbols. This may be really useful if you give - your main compilation unit on the command line, as `gnatxref' will - then display every unused entity and 'with'ed package. - - `-v' - Instead of producing the default output, `gnatxref' will generate a - `tags' file that can be used by vi. For examples how to use this - feature, see *Note Examples of gnatxref Usage::. The tags file is - output to the standard output, thus you will have to redirect it - to a file. - - All these switches may be in any order on the command line, and may - even appear after the file names. They need not be separated by spaces, - thus you can say `gnatxref -ag' instead of `gnatxref -a -g'. - -  - File: gnat_ug_wnt.info, Node: gnatfind Switches, Next: Project Files for gnatxref and gnatfind, Prev: gnatxref Switches, Up: The Cross-Referencing Tools gnatxref and gnatfind - - `gnatfind' Switches - =================== - - The command line for `gnatfind' is: - - $ gnatfind [switches] pattern[:sourcefile[:line[:column]]] - [file1 file2 ...] - - where - - `pattern' - An entity will be output only if it matches the regular expression - found in `pattern', see *Note Regular Expressions in gnatfind and - gnatxref::. - - Omitting the pattern is equivalent to specifying `*', which will - match any entity. Note that if you do not provide a pattern, you - have to provide both a sourcefile and a line. - - Entity names are given in Latin-1, with uppercase/lowercase - equivalence for matching purposes. At the current time there is no - support for 8-bit codes other than Latin-1, or for wide characters - in identifiers. - - `sourcefile' - `gnatfind' will look for references, bodies or declarations of - symbols referenced in `sourcefile', at line `line' and column - `column'. See *note Examples of gnatfind Usage:: for syntax - examples. - - `line' - is a decimal integer identifying the line number containing the - reference to the entity (or entities) to be located. - - `column' - is a decimal integer identifying the exact location on the line of - the first character of the identifier for the entity reference. - Columns are numbered from 1. - - `file1 file2 ...' - The search will be restricted to these files. If none are given, - then the search will be done for every library file in the search - path. These file must appear only after the pattern or sourcefile. - - These file names are considered to be regular expressions, so for - instance specifying 'source*.adb' is the same as giving every file - in the current directory whose name starts with 'source' and whose - extension is 'adb'. - - Not that if you specify at least one file in this part, `gnatfind' - may sometimes not be able to find the body of the subprograms... - - At least one of 'sourcefile' or 'pattern' has to be present on the - command line. - - The following switches are available: - `-a' - If this switch is present, `gnatfind' and `gnatxref' will parse - the read-only files found in the library search path. Otherwise, - these files will be ignored. This option can be used to protect - Gnat sources or your own libraries from being parsed, thus making - `gnatfind' and `gnatxref' much faster, and their output much - smaller. - - `-aIDIR' - When looking for source files also look in directory DIR. The - order in which source file search is undertaken is the same as for - `gnatmake'. - - `-aODIR' - When searching for library and object files, look in directory - DIR. The order in which library files are searched is the same as - for `gnatmake'. - - `-nostdinc' - Do not look for sources in the system default directory. - - `-nostdlib' - Do not look for library files in the system default directory. - - `--RTS=RTS-PATH' - Specifies the default location of the runtime library. Same - meaning as the equivalent `gnatmake' flag (see *Note Switches for - gnatmake::). - - `-d' - If this switch is set, then `gnatfind' will output the parent type - reference for each matching derived types. - - `-e' - By default, `gnatfind' accept the simple regular expression set for - `pattern'. If this switch is set, then the pattern will be - considered as full Unix-style regular expression. - - `-f' - If this switch is set, the output file names will be preceded by - their directory (if the file was found in the search path). If - this switch is not set, the directory will not be printed. - - `-g' - If this switch is set, information is output only for library-level - entities, ignoring local entities. The use of this switch may - accelerate `gnatfind' and `gnatxref'. - - `-IDIR' - Equivalent to `-aODIR -aIDIR'. - - `-pFILE' - Specify a project file (*note Project Files::) to use. By - default, `gnatxref' and `gnatfind' will try to locate a project - file in the current directory. - - If a project file is either specified or found by the tools, then - the content of the source directory and object directory lines are - added as if they had been specified respectively by `-aI' and - `-aO'. - - `-r' - By default, `gnatfind' will output only the information about the - declaration, body or type completion of the entities. If this - switch is set, the `gnatfind' will locate every reference to the - entities in the files specified on the command line (or in every - file in the search path if no file is given on the command line). - - `-s' - If this switch is set, then `gnatfind' will output the content of - the Ada source file lines were the entity was found. - - `-t' - If this switch is set, then `gnatfind' will output the type - hierarchy for the specified type. It act like -d option but - recursively from parent type to parent type. When this switch is - set it is not possible to specify more than one file. - - All these switches may be in any order on the command line, and may - even appear after the file names. They need not be separated by spaces, - thus you can say `gnatxref -ag' instead of `gnatxref -a -g'. - - As stated previously, gnatfind will search in every directory in the - search path. You can force it to look only in the current directory if - you specify `*' at the end of the command line. - -  - File: gnat_ug_wnt.info, Node: Project Files for gnatxref and gnatfind, Next: Regular Expressions in gnatfind and gnatxref, Prev: gnatfind Switches, Up: The Cross-Referencing Tools gnatxref and gnatfind - - Project Files for `gnatxref' and `gnatfind' - =========================================== - - Project files allow a programmer to specify how to compile its - application, where to find sources,... These files are used primarily by - the Glide Ada mode, but they can also be used by the two tools - `gnatxref' and `gnatfind'. - - A project file name must end with `.adp'. If a single one is present - in the current directory, then `gnatxref' and `gnatfind' will extract - the information from it. If multiple project files are found, none of - them is read, and you have to use the `-p' switch to specify the one - you want to use. - - The following lines can be included, even though most of them have - default values which can be used in most cases. The lines can be - entered in any order in the file. Except for `src_dir' and `obj_dir', - you can only have one instance of each line. If you have multiple - instances, only the last one is taken into account. - - `src_dir=DIR [default: "./"]' - specifies a directory where to look for source files. Multiple - src_dir lines can be specified and they will be searched in the - order they are specified. - - `obj_dir=DIR [default: "./"]' - specifies a directory where to look for object and library files. - Multiple obj_dir lines can be specified and they will be searched - in the order they are specified - - `comp_opt=SWITCHES [default: ""]' - creates a variable which can be referred to subsequently by using - the `${comp_opt}' notation. This is intended to store the default - switches given to `gnatmake' and `gcc'. - - `bind_opt=SWITCHES [default: ""]' - creates a variable which can be referred to subsequently by using - the `${bind_opt}' notation. This is intended to store the default - switches given to `gnatbind'. - - `link_opt=SWITCHES [default: ""]' - creates a variable which can be referred to subsequently by using - the `${link_opt}' notation. This is intended to store the default - switches given to `gnatlink'. - - `main=EXECUTABLE [default: ""]' - specifies the name of the executable for the application. This - variable can be referred to in the following lines by using the - `${main}' notation. - - `comp_cmd=COMMAND [default: "gcc -c -I${src_dir} -g -gnatq"]' - specifies the command used to compile a single file in the - application. - - `make_cmd=COMMAND [default: "gnatmake ${main} -aI${src_dir} -aO${obj_dir} -g -gnatq -cargs ${comp_opt} -bargs ${bind_opt} -largs ${link_opt}"]' - specifies the command used to recompile the whole application. - - `run_cmd=COMMAND [default: "${main}"]' - specifies the command used to run the application. - - `debug_cmd=COMMAND [default: "gdb ${main}"]' - specifies the command used to debug the application - - `gnatxref' and `gnatfind' only take into account the `src_dir' and - `obj_dir' lines, and ignore the others. - -  - File: gnat_ug_wnt.info, Node: Regular Expressions in gnatfind and gnatxref, Next: Examples of gnatxref Usage, Prev: Project Files for gnatxref and gnatfind, Up: The Cross-Referencing Tools gnatxref and gnatfind - - Regular Expressions in `gnatfind' and `gnatxref' - ================================================ - - As specified in the section about `gnatfind', the pattern can be a - regular expression. Actually, there are to set of regular expressions - which are recognized by the program : - - `globbing patterns' - These are the most usual regular expression. They are the same - that you generally used in a Unix shell command line, or in a DOS - session. - - Here is a more formal grammar : - regexp ::= term - term ::= elmt -- matches elmt - term ::= elmt elmt -- concatenation (elmt then elmt) - term ::= * -- any string of 0 or more characters - term ::= ? -- matches any character - term ::= [char {char}] -- matches any character listed - term ::= [char - char] -- matches any character in range - - `full regular expression' - The second set of regular expressions is much more powerful. This - is the type of regular expressions recognized by utilities such a - `grep'. - - The following is the form of a regular expression, expressed in Ada - reference manual style BNF is as follows - - regexp ::= term {| term} -- alternation (term or term ...) - - term ::= item {item} -- concatenation (item then item) - - item ::= elmt -- match elmt - item ::= elmt * -- zero or more elmt's - item ::= elmt + -- one or more elmt's - item ::= elmt ? -- matches elmt or nothing - elmt ::= nschar -- matches given character - elmt ::= [nschar {nschar}] -- matches any character listed - elmt ::= [^ nschar {nschar}] -- matches any character not listed - elmt ::= [char - char] -- matches chars in given range - elmt ::= \ char -- matches given character - elmt ::= . -- matches any single character - elmt ::= ( regexp ) -- parens used for grouping - - char ::= any character, including special characters - nschar ::= any character except ()[].*+?^ - - Following are a few examples : - - `abcde|fghi' - will match any of the two strings 'abcde' and 'fghi'. - - `abc*d' - will match any string like 'abd', 'abcd', 'abccd', 'abcccd', - and so on - - `[a-z]+' - will match any string which has only lowercase characters in - it (and at least one character - -  - File: gnat_ug_wnt.info, Node: Examples of gnatxref Usage, Next: Examples of gnatfind Usage, Prev: Regular Expressions in gnatfind and gnatxref, Up: The Cross-Referencing Tools gnatxref and gnatfind - - Examples of `gnatxref' Usage - ============================ - - General Usage - ------------- - - For the following examples, we will consider the following units : - - main.ads: - 1: with Bar; - 2: package Main is - 3: procedure Foo (B : in Integer); - 4: C : Integer; - 5: private - 6: D : Integer; - 7: end Main; - - main.adb: - 1: package body Main is - 2: procedure Foo (B : in Integer) is - 3: begin - 4: C := B; - 5: D := B; - 6: Bar.Print (B); - 7: Bar.Print (C); - 8: end Foo; - 9: end Main; - - bar.ads: - 1: package Bar is - 2: procedure Print (B : Integer); - 3: end bar; - - The first thing to do is to recompile your application (for - instance, in that case just by doing a `gnatmake main', so that - GNAT generates the cross-referencing information. You can then - issue any of the following commands: - - `gnatxref main.adb' - `gnatxref' generates cross-reference information for main.adb and - every unit 'with'ed by main.adb. - - The output would be: - B Type: Integer - Decl: bar.ads 2:22 - B Type: Integer - Decl: main.ads 3:20 - Body: main.adb 2:20 - Ref: main.adb 4:13 5:13 6:19 - Bar Type: Unit - Decl: bar.ads 1:9 - Ref: main.adb 6:8 7:8 - main.ads 1:6 - C Type: Integer - Decl: main.ads 4:5 - Modi: main.adb 4:8 - Ref: main.adb 7:19 - D Type: Integer - Decl: main.ads 6:5 - Modi: main.adb 5:8 - Foo Type: Unit - Decl: main.ads 3:15 - Body: main.adb 2:15 - Main Type: Unit - Decl: main.ads 2:9 - Body: main.adb 1:14 - Print Type: Unit - Decl: bar.ads 2:15 - Ref: main.adb 6:12 7:12 - - that is the entity `Main' is declared in main.ads, line 2, column - 9, its body is in main.adb, line 1, column 14 and is not - referenced any where. - - The entity `Print' is declared in bar.ads, line 2, column 15 and it - it referenced in main.adb, line 6 column 12 and line 7 column 12. - - `gnatxref package1.adb package2.ads' - `gnatxref' will generates cross-reference information for - package1.adb, package2.ads and any other package 'with'ed by any - of these. - - Using gnatxref with vi - ---------------------- - - `gnatxref' can generate a tags file output, which can be used - directly from `vi'. Note that the standard version of `vi' will not - work properly with overloaded symbols. Consider using another free - implementation of `vi', such as `vim'. - - $ gnatxref -v gnatfind.adb > tags - - will generate the tags file for `gnatfind' itself (if the sources are - in the search path!). - - From `vi', you can then use the command `:tag entity' (replacing - entity by whatever you are looking for), and vi will display a new file - with the corresponding declaration of entity. - -  - File: gnat_ug_wnt.info, Node: Examples of gnatfind Usage, Prev: Examples of gnatxref Usage, Up: The Cross-Referencing Tools gnatxref and gnatfind - - Examples of `gnatfind' Usage - ============================ - - `gnatfind -f xyz:main.adb' - Find declarations for all entities xyz referenced at least once in - main.adb. The references are search in every library file in the - search path. - - The directories will be printed as well (as the `-f' switch is set) - - The output will look like: - directory/main.ads:106:14: xyz <= declaration - directory/main.adb:24:10: xyz <= body - directory/foo.ads:45:23: xyz <= declaration - - that is to say, one of the entities xyz found in main.adb is - declared at line 12 of main.ads (and its body is in main.adb), and - another one is declared at line 45 of foo.ads - - `gnatfind -fs xyz:main.adb' - This is the same command as the previous one, instead `gnatfind' - will display the content of the Ada source file lines. - - The output will look like: - - directory/main.ads:106:14: xyz <= declaration - procedure xyz; - directory/main.adb:24:10: xyz <= body - procedure xyz is - directory/foo.ads:45:23: xyz <= declaration - xyz : Integer; - - This can make it easier to find exactly the location your are - looking for. - - `gnatfind -r "*x*":main.ads:123 foo.adb' - Find references to all entities containing an x that are - referenced on line 123 of main.ads. The references will be - searched only in main.adb and foo.adb. - - `gnatfind main.ads:123' - Find declarations and bodies for all entities that are referenced - on line 123 of main.ads. - - This is the same as `gnatfind "*":main.adb:123'. - - `gnatfind mydir/main.adb:123:45' - Find the declaration for the entity referenced at column 45 in - line 123 of file main.adb in directory mydir. Note that it is - usual to omit the identifier name when the column is given, since - the column position identifies a unique reference. - - The column has to be the beginning of the identifier, and should - not point to any character in the middle of the identifier. - -  - File: gnat_ug_wnt.info, Node: File Name Krunching Using gnatkr, Next: Preprocessing Using gnatprep, Prev: The Cross-Referencing Tools gnatxref and gnatfind, Up: Top - - File Name Krunching Using `gnatkr' - ********************************** - - This chapter discusses the method used by the compiler to shorten the - default file names chosen for Ada units so that they do not exceed the - maximum length permitted. It also describes the `gnatkr' utility that - can be used to determine the result of applying this shortening. - - * Menu: - - * About gnatkr:: - * Using gnatkr:: - * Krunching Method:: - * Examples of gnatkr Usage:: - -  - File: gnat_ug_wnt.info, Node: About gnatkr, Next: Using gnatkr, Up: File Name Krunching Using gnatkr - - About `gnatkr' - ============== - - The default file naming rule in GNAT is that the file name must be - derived from the unit name. The exact default rule is as follows: - * Take the unit name and replace all dots by hyphens. - - * If such a replacement occurs in the second character position of a - name, and the first character is a, g, s, or i then replace the - dot by the character ~ (tilde) instead of a minus. - The reason for this exception is to avoid clashes with the standard - names for children of System, Ada, Interfaces, and GNAT, which use the - prefixes s- a- i- and g- respectively. - - The `-gnatkNN' switch of the compiler activates a "krunching" - circuit that limits file names to nn characters (where nn is a decimal - integer). For example, using OpenVMS, where the maximum file name - length is 39, the value of nn is usually set to 39, but if you want to - generate a set of files that would be usable if ported to a system with - some different maximum file length, then a different value can be - specified. The default value of 39 for OpenVMS need not be specified. - - The `gnatkr' utility can be used to determine the krunched name for - a given file, when krunched to a specified maximum length. - -  - File: gnat_ug_wnt.info, Node: Using gnatkr, Next: Krunching Method, Prev: About gnatkr, Up: File Name Krunching Using gnatkr - - Using `gnatkr' - ============== - - The `gnatkr' command has the form - - $ gnatkr NAME [LENGTH] - - NAME can be an Ada name with dots or the GNAT name of the unit, where - the dots representing child units or subunit are replaced by hyphens. - The only confusion arises if a name ends in `.ads' or `.adb'. `gnatkr' - takes this to be an extension if there are no other dots in the name - and the whole name is in lowercase. - - LENGTH represents the length of the krunched name. The default when - no argument is given is 8 characters. A length of zero stands for - unlimited, in other words do not chop except for system files which are - always 8. - - The output is the krunched name. The output has an extension only if the - original argument was a file name with an extension. - -  - File: gnat_ug_wnt.info, Node: Krunching Method, Next: Examples of gnatkr Usage, Prev: Using gnatkr, Up: File Name Krunching Using gnatkr - - Krunching Method - ================ - - The initial file name is determined by the name of the unit that the - file contains. The name is formed by taking the full expanded name of - the unit and replacing the separating dots with hyphens and using - lowercase for all letters, except that a hyphen in the second character - position is replaced by a tilde if the first character is a, i, g, or s. - The extension is `.ads' for a specification and `.adb' for a body. - Krunching does not affect the extension, but the file name is shortened - to the specified length by following these rules: - - * The name is divided into segments separated by hyphens, tildes or - underscores and all hyphens, tildes, and underscores are - eliminated. If this leaves the name short enough, we are done. - - * If the name is too long, the longest segment is located (left-most - if there are two of equal length), and shortened by dropping its - last character. This is repeated until the name is short enough. - - As an example, consider the krunching of - `our-strings-wide_fixed.adb' to fit the name into 8 characters as - required by some operating systems. - - our-strings-wide_fixed 22 - our strings wide fixed 19 - our string wide fixed 18 - our strin wide fixed 17 - our stri wide fixed 16 - our stri wide fixe 15 - our str wide fixe 14 - our str wid fixe 13 - our str wid fix 12 - ou str wid fix 11 - ou st wid fix 10 - ou st wi fix 9 - ou st wi fi 8 - Final file name: oustwifi.adb - - * The file names for all predefined units are always krunched to - eight characters. The krunching of these predefined units uses the - following special prefix replacements: - - `ada-' - replaced by `a-' - - `gnat-' - replaced by `g-' - - `interfaces-' - replaced by `i-' - - `system-' - replaced by `s-' - - These system files have a hyphen in the second character position. - That is why normal user files replace such a character with a - tilde, to avoid confusion with system file names. - - As an example of this special rule, consider - `ada-strings-wide_fixed.adb', which gets krunched as follows: - - ada-strings-wide_fixed 22 - a- strings wide fixed 18 - a- string wide fixed 17 - a- strin wide fixed 16 - a- stri wide fixed 15 - a- stri wide fixe 14 - a- str wide fixe 13 - a- str wid fixe 12 - a- str wid fix 11 - a- st wid fix 10 - a- st wi fix 9 - a- st wi fi 8 - Final file name: a-stwifi.adb - - Of course no file shortening algorithm can guarantee uniqueness over - all possible unit names, and if file name krunching is used then it is - your responsibility to ensure that no name clashes occur. The utility - program `gnatkr' is supplied for conveniently determining the krunched - name of a file. - -  - File: gnat_ug_wnt.info, Node: Examples of gnatkr Usage, Prev: Krunching Method, Up: File Name Krunching Using gnatkr - - Examples of `gnatkr' Usage - ========================== - - $ gnatkr very_long_unit_name.ads --> velounna.ads - $ gnatkr grandparent-parent-child.ads --> grparchi.ads - $ gnatkr Grandparent.Parent.Child --> grparchi - $ gnatkr very_long_unit_name.ads/count=6 --> vlunna.ads - $ gnatkr very_long_unit_name.ads/count=0 --> very_long_unit_name.ads - -  - File: gnat_ug_wnt.info, Node: Preprocessing Using gnatprep, Next: The GNAT Library Browser gnatls, Prev: File Name Krunching Using gnatkr, Up: Top - - Preprocessing Using `gnatprep' - ****************************** - - The `gnatprep' utility provides a simple preprocessing capability for - Ada programs. It is designed for use with GNAT, but is not dependent - on any special features of GNAT. - - * Menu: - - * Using gnatprep:: - * Switches for gnatprep:: - * Form of Definitions File:: - * Form of Input Text for gnatprep:: - -  - File: gnat_ug_wnt.info, Node: Using gnatprep, Next: Switches for gnatprep, Up: Preprocessing Using gnatprep - - Using `gnatprep' - ================ - - To call `gnatprep' use - - $ gnatprep [-bcrsu] [-Dsymbol=value] infile outfile [deffile] - - where - `infile' - is the full name of the input file, which is an Ada source file - containing preprocessor directives. - - `outfile' - is the full name of the output file, which is an Ada source in - standard Ada form. When used with GNAT, this file name will - normally have an ads or adb suffix. - - `deffile' - is the full name of a text file containing definitions of symbols - to be referenced by the preprocessor. This argument is optional, - and can be replaced by the use of the `-D' switch. - - `switches' - is an optional sequence of switches as described in the next - section. - -  - File: gnat_ug_wnt.info, Node: Switches for gnatprep, Next: Form of Definitions File, Prev: Using gnatprep, Up: Preprocessing Using gnatprep - - Switches for `gnatprep' - ======================= - - `-b' - Causes both preprocessor lines and the lines deleted by - preprocessing to be replaced by blank lines in the output source - file, preserving line numbers in the output file. - - `-c' - Causes both preprocessor lines and the lines deleted by - preprocessing to be retained in the output source as comments - marked with the special string "-! ". This option will result in - line numbers being preserved in the output file. - - `-Dsymbol=value' - Defines a new symbol, associated with value. If no value is given - on the command line, then symbol is considered to be `True'. This - switch can be used in place of a definition file. - - `-r' - Causes a `Source_Reference' pragma to be generated that references - the original input file, so that error messages will use the file - name of this original file. The use of this switch implies that - preprocessor lines are not to be removed from the file, so its use - will force `-b' mode if `-c' has not been specified explicitly. - - Note that if the file to be preprocessed contains multiple units, - then it will be necessary to `gnatchop' the output file from - `gnatprep'. If a `Source_Reference' pragma is present in the - preprocessed file, it will be respected by `gnatchop -r' so that - the final chopped files will correctly refer to the original input - source file for `gnatprep'. - - `-s' - Causes a sorted list of symbol names and values to be listed on - the standard output file. - - `-u' - Causes undefined symbols to be treated as having the value FALSE - in the context of a preprocessor test. In the absence of this - option, an undefined symbol in a `#if' or `#elsif' test will be - treated as an error. - - Note: if neither `-b' nor `-c' is present, then preprocessor lines and - deleted lines are completely removed from the output, unless -r is - specified, in which case -b is assumed. - -  - File: gnat_ug_wnt.info, Node: Form of Definitions File, Next: Form of Input Text for gnatprep, Prev: Switches for gnatprep, Up: Preprocessing Using gnatprep - - Form of Definitions File - ======================== - - The definitions file contains lines of the form - - symbol := value - - where symbol is an identifier, following normal Ada (case-insensitive) - rules for its syntax, and value is one of the following: - - * Empty, corresponding to a null substitution - - * A string literal using normal Ada syntax - - * Any sequence of characters from the set (letters, digits, period, - underline). - - Comment lines may also appear in the definitions file, starting with - the usual `--', and comments may be added to the definitions lines. - -  - File: gnat_ug_wnt.info, Node: Form of Input Text for gnatprep, Prev: Form of Definitions File, Up: Preprocessing Using gnatprep - - Form of Input Text for `gnatprep' - ================================= - - The input text may contain preprocessor conditional inclusion lines, as - well as general symbol substitution sequences. - - The preprocessor conditional inclusion commands have the form - - #if expression [then] - lines - #elsif expression [then] - lines - #elsif expression [then] - lines - ... - #else - lines - #end if; - - In this example, expression is defined by the following grammar: - expression ::= - expression ::= = "" - expression ::= = - expression ::= 'Defined - expression ::= not expression - expression ::= expression and expression - expression ::= expression or expression - expression ::= expression and then expression - expression ::= expression or else expression - expression ::= ( expression ) - - For the first test (expression ::= ) the symbol must have - either the value true or false, that is to say the right-hand of the - symbol definition must be one of the (case-insensitive) literals `True' - or `False'. If the value is true, then the corresponding lines are - included, and if the value is false, they are excluded. - - The test (expression ::= `'Defined') is true only if the - symbol has been defined in the definition file or by a `-D' switch on - the command line. Otherwise, the test is false. - - The equality tests are case insensitive, as are all the preprocessor - lines. - - If the symbol referenced is not defined in the symbol definitions - file, then the effect depends on whether or not switch `-u' is - specified. If so, then the symbol is treated as if it had the value - false and the test fails. If this switch is not specified, then it is - an error to reference an undefined symbol. It is also an error to - reference a symbol that is defined with a value other than `True' or - `False'. - - The use of the `not' operator inverts the sense of this logical - test, so that the lines are included only if the symbol is not defined. - The `then' keyword is optional as shown - - The `#' must be the first non-blank character on a line, but - otherwise the format is free form. Spaces or tabs may appear between - the `#' and the keyword. The keywords and the symbols are case - insensitive as in normal Ada code. Comments may be used on a - preprocessor line, but other than that, no other tokens may appear on a - preprocessor line. Any number of `elsif' clauses can be present, - including none at all. The `else' is optional, as in Ada. - - The `#' marking the start of a preprocessor line must be the first - non-blank character on the line, i.e. it must be preceded only by - spaces or horizontal tabs. - - Symbol substitution outside of preprocessor lines is obtained by - using the sequence - - $symbol - - anywhere within a source line, except in a comment or within a string - literal. The identifier following the `$' must match one of the symbols - defined in the symbol definition file, and the result is to substitute - the value of the symbol in place of `$symbol' in the output file. - - Note that although the substitution of strings within a string - literal is not possible, it is possible to have a symbol whose defined - value is a string literal. So instead of setting XYZ to `hello' and - writing: - - Header : String := "$XYZ"; - - you should set XYZ to `"hello"' and write: - - Header : String := $XYZ; - - and then the substitution will occur as desired. - -  - File: gnat_ug_wnt.info, Node: The GNAT Library Browser gnatls, Next: GNAT and Libraries, Prev: Preprocessing Using gnatprep, Up: Top - - The GNAT Library Browser `gnatls' - ********************************* - - `gnatls' is a tool that outputs information about compiled units. It - gives the relationship between objects, unit names and source files. It - can also be used to check the source dependencies of a unit as well as - various characteristics. - - * Menu: - - * Running gnatls:: - * Switches for gnatls:: - * Examples of gnatls Usage:: - -  - File: gnat_ug_wnt.info, Node: Running gnatls, Next: Switches for gnatls, Up: The GNAT Library Browser gnatls - - Running `gnatls' - ================ - - The `gnatls' command has the form - - $ gnatls switches OBJECT_OR_ALI_FILE - - The main argument is the list of object or `ali' files (*note The Ada - Library Information Files::) for which information is requested. - - In normal mode, without additional option, `gnatls' produces a - four-column listing. Each line represents information for a specific - object. The first column gives the full path of the object, the second - column gives the name of the principal unit in this object, the third - column gives the status of the source and the fourth column gives the - full path of the source representing this unit. Here is a simple - example of use: - - $ gnatls *.o - ./demo1.o demo1 DIF demo1.adb - ./demo2.o demo2 OK demo2.adb - ./hello.o h1 OK hello.adb - ./instr-child.o instr.child MOK instr-child.adb - ./instr.o instr OK instr.adb - ./tef.o tef DIF tef.adb - ./text_io_example.o text_io_example OK text_io_example.adb - ./tgef.o tgef DIF tgef.adb - - The first line can be interpreted as follows: the main unit which is - contained in object file `demo1.o' is demo1, whose main source is in - `demo1.adb'. Furthermore, the version of the source used for the - compilation of demo1 has been modified (DIF). Each source file has a - status qualifier which can be: - - `OK (unchanged)' - The version of the source file used for the compilation of the - specified unit corresponds exactly to the actual source file. - - `MOK (slightly modified)' - The version of the source file used for the compilation of the - specified unit differs from the actual source file but not enough - to require recompilation. If you use gnatmake with the qualifier - `-m (minimal recompilation)', a file marked MOK will not be - recompiled. - - `DIF (modified)' - No version of the source found on the path corresponds to the - source used to build this object. - - `??? (file not found)' - No source file was found for this unit. - - `HID (hidden, unchanged version not first on PATH)' - The version of the source that corresponds exactly to the source - used for compilation has been found on the path but it is hidden - by another version of the same source that has been modified. - -  - File: gnat_ug_wnt.info, Node: Switches for gnatls, Next: Examples of gnatls Usage, Prev: Running gnatls, Up: The GNAT Library Browser gnatls - - Switches for `gnatls' - ===================== - - `gnatls' recognizes the following switches: - - `-a' - Consider all units, including those of the predefined Ada library. - Especially useful with `-d'. - - `-d' - List sources from which specified units depend on. - - `-h' - Output the list of options. - - `-o' - Only output information about object files. - - `-s' - Only output information about source files. - - `-u' - Only output information about compilation units. - - `-aODIR' - `-aIDIR' - `-IDIR' - `-I-' - `-nostdinc' - Source path manipulation. Same meaning as the equivalent - `gnatmake' flags (see *Note Switches for gnatmake::). - - `--RTS=RTS-PATH' - Specifies the default location of the runtime library. Same - meaning as the equivalent `gnatmake' flag (see *Note Switches for - gnatmake::). - - `-v' - Verbose mode. Output the complete source and object paths. Do not - use the default column layout but instead use long format giving - as much as information possible on each requested units, including - special characteristics such as: - - `Preelaborable' - The unit is preelaborable in the Ada 95 sense. - - `No_Elab_Code' - No elaboration code has been produced by the compiler for - this unit. - - `Pure' - The unit is pure in the Ada 95 sense. - - `Elaborate_Body' - The unit contains a pragma Elaborate_Body. - - `Remote_Types' - The unit contains a pragma Remote_Types. - - `Shared_Passive' - The unit contains a pragma Shared_Passive. - - `Predefined' - This unit is part of the predefined environment and cannot be - modified by the user. - - `Remote_Call_Interface' - The unit contains a pragma Remote_Call_Interface. - -  - File: gnat_ug_wnt.info, Node: Examples of gnatls Usage, Prev: Switches for gnatls, Up: The GNAT Library Browser gnatls - - Example of `gnatls' Usage - ========================= - - Example of using the verbose switch. Note how the source and object - paths are affected by the -I switch. - - $ gnatls -v -I.. demo1.o - - GNATLS 3.10w (970212) Copyright 1999 Free Software Foundation, Inc. - - Source Search Path: - - ../ - /home/comar/local/adainclude/ - - Object Search Path: - - ../ - /home/comar/local/lib/gcc-lib/mips-sni-sysv4/2.7.2/adalib/ - - ./demo1.o - Unit => - Name => demo1 - Kind => subprogram body - Flags => No_Elab_Code - Source => demo1.adb modified - - The following is an example of use of the dependency list. Note the - use of the -s switch which gives a straight list of source files. This - can be useful for building specialized scripts. - - $ gnatls -d demo2.o - ./demo2.o demo2 OK demo2.adb - OK gen_list.ads - OK gen_list.adb - OK instr.ads - OK instr-child.ads - - $ gnatls -d -s -a demo1.o - demo1.adb - /home/comar/local/adainclude/ada.ads - /home/comar/local/adainclude/a-finali.ads - /home/comar/local/adainclude/a-filico.ads - /home/comar/local/adainclude/a-stream.ads - /home/comar/local/adainclude/a-tags.ads - gen_list.ads - gen_list.adb - /home/comar/local/adainclude/gnat.ads - /home/comar/local/adainclude/g-io.ads - instr.ads - /home/comar/local/adainclude/system.ads - /home/comar/local/adainclude/s-exctab.ads - /home/comar/local/adainclude/s-finimp.ads - /home/comar/local/adainclude/s-finroo.ads - /home/comar/local/adainclude/s-secsta.ads - /home/comar/local/adainclude/s-stalib.ads - /home/comar/local/adainclude/s-stoele.ads - /home/comar/local/adainclude/s-stratt.ads - /home/comar/local/adainclude/s-tasoli.ads - /home/comar/local/adainclude/s-unstyp.ads - /home/comar/local/adainclude/unchconv.ads - -  - File: gnat_ug_wnt.info, Node: GNAT and Libraries, Next: Using the GNU make Utility, Prev: The GNAT Library Browser gnatls, Up: Top - - GNAT and Libraries - ****************** - - This chapter addresses some of the issues related to building and using - a library with GNAT. It also shows how the GNAT run-time library can be - recompiled. - - * Menu: - - * Creating an Ada Library:: - * Installing an Ada Library:: - * Using an Ada Library:: - * Creating an Ada Library to be Used in a Non-Ada Context:: - * Rebuilding the GNAT Run-Time Library:: - -  - File: gnat_ug_wnt.info, Node: Creating an Ada Library, Next: Installing an Ada Library, Up: GNAT and Libraries - - Creating an Ada Library - ======================= - - In the GNAT environment, a library has two components: - * Source files. - - * Compiled code and Ali files. See *Note The Ada Library Information - Files::. - - In order to use other packages *Note The GNAT Compilation Model:: - requires a certain number of sources to be available to the compiler. - The minimal set of sources required includes the specs of all the - packages that make up the visible part of the library as well as all - the sources upon which they depend. The bodies of all visible generic - units must also be provided. - - Although it is not strictly mandatory, it is recommended that all - sources needed to recompile the library be provided, so that the user - can make full use of inter-unit inlining and source-level debugging. - This can also make the situation easier for users that need to upgrade - their compilation toolchain and thus need to recompile the library from - sources. - - The compiled code can be provided in different ways. The simplest way is - to provide directly the set of objects produced by the compiler during - the compilation of the library. It is also possible to group the objects - into an archive using whatever commands are provided by the operating - system. Finally, it is also possible to create a shared library (see - option -shared in the GCC manual). - - There are various possibilities for compiling the units that make up the - library: for example with a Makefile *Note Using the GNU make Utility::, - or with a conventional script. For simple libraries, it is also - possible to create a dummy main program which depends upon all the - packages that comprise the interface of the library. This dummy main - program can then be given to gnatmake, in order to build all the - necessary objects. Here is an example of such a dummy program and the - generic commands used to build an archive or a shared library. - - with My_Lib.Service1; - with My_Lib.Service2; - with My_Lib.Service3; - procedure My_Lib_Dummy is - begin - null; - end; - - # compiling the library - $ gnatmake -c my_lib_dummy.adb - - # we don't need the dummy object itself - $ rm my_lib_dummy.o my_lib_dummy.ali - - # create an archive with the remaining objects - $ ar rc libmy_lib.a *.o - # some systems may require "ranlib" to be run as well - - # or create a shared library - $ gcc -shared -o libmy_lib.so *.o - # some systems may require the code to have been compiled with -fPIC - - When the objects are grouped in an archive or a shared library, the user - needs to specify the desired library at link time, unless a pragma - linker_options has been used in one of the sources: - pragma Linker_Options ("-lmy_lib"); - -  - File: gnat_ug_wnt.info, Node: Installing an Ada Library, Next: Using an Ada Library, Prev: Creating an Ada Library, Up: GNAT and Libraries - - Installing an Ada Library - ========================= - - In the GNAT model, installing a library consists in copying into a - specific location the files that make up this library. It is possible - to install the sources in a different directory from the other files - (ALI, objects, archives) since the source path and the object path can - easily be specified separately. - - For general purpose libraries, it is possible for the system - administrator to put those libraries in the default compiler paths. To - achieve this, he must specify their location in the configuration files - "ada_source_path" and "ada_object_path" that must be located in the GNAT - installation tree at the same place as the gcc spec file. The location - of the gcc spec file can be determined as follows: - $ gcc -v - - The configuration files mentioned above have simple format: each line - in them must contain one unique directory name. Those names are added - to the corresponding path in their order of appearance in the file. The - names can be either absolute or relative, in the latter case, they are - relative to where theses files are located. - - "ada_source_path" and "ada_object_path" might actually not be present - in a GNAT installation, in which case, GNAT will look for its run-time - library in the directories "adainclude" for the sources and "adalib" - for the objects and ALI files. When the files exist, the compiler does - not look in "adainclude" and "adalib" at all, and thus the - "ada_source_path" file must contain the location for the GNAT run-time - sources (which can simply be "adainclude"). In the same way, the - "ada_object_path" file must contain the location for the GNAT run-time - objects (which can simply be "adalib"). - - You can also specify a new default path to the runtime library at - compilation time with the switch "-RTS=RTS-PATH". You can easily choose - and change the runtime you want your program to be compiled with. This - switch is recognized by gcc, gnatmake, gnatbind, gnatls, gnatfind and - gnatxref. - - It is possible to install a library before or after the standard GNAT - library, by reordering the lines in the configuration files. In - general, a library must be installed before the GNAT library if it - redefines any part of it. - -  - File: gnat_ug_wnt.info, Node: Using an Ada Library, Next: Creating an Ada Library to be Used in a Non-Ada Context, Prev: Installing an Ada Library, Up: GNAT and Libraries - - Using an Ada Library - ==================== - - In order to use a Ada library, you need to make sure that this library - is on both your source and object path *Note Search Paths and the - Run-Time Library (RTL):: and *Note Search Paths for gnatbind::. For - instance, you can use the library "mylib" installed in "/dir/my_lib_src" - and "/dir/my_lib_obj" with the following commands: - - $ gnatmake -aI/dir/my_lib_src -aO/dir/my_lib_obj my_appl \ - -largs -lmy_lib - - This can be simplified down to the following: - $ gnatmake my_appl - when the following conditions are met: - * "/dir/my_lib_src" has been added by the user to the environment - variable "ADA_INCLUDE_PATH", or by the administrator to the file - "ada_source_path" - - * "/dir/my_lib_obj" has been added by the user to the environment - variable "ADA_OBJECTS_PATH", or by the administrator to the file - "ada_object_path" - - * a pragma linker_options, as mentioned in *Note Creating an Ada - Library:: as been added to the sources. - -  - File: gnat_ug_wnt.info, Node: Creating an Ada Library to be Used in a Non-Ada Context, Next: Rebuilding the GNAT Run-Time Library, Prev: Using an Ada Library, Up: GNAT and Libraries - - Creating an Ada Library to be Used in a Non-Ada Context - ======================================================= - - The previous sections detailed how to create and install a library that - was usable from an Ada main program. Using this library in a non-Ada - context is not possible, because the elaboration of the library is - automatically done as part of the main program elaboration. - - GNAT also provides the ability to build libraries that can be used - both in an Ada and non-Ada context. This section describes how to - build such a library, and then how to use it from a C program. The - method for interfacing with the library from other languages such as - Fortran for instance remains the same. - - Creating the Library - -------------------- - - * Identify the units representing the interface of the library. - - Here is an example of simple library interface: - - package Interface is - - procedure Do_Something; - - procedure Do_Something_Else; - - end Interface; - - * Use `pragma Export' or `pragma Convention' for the exported - entities. - - Our package `Interface' is then updated as follow: - package Interface is - - procedure Do_Something; - pragma Export (C, Do_Something, "do_something"); - - procedure Do_Something_Else; - pragma Export (C, Do_Something_Else, "do_something_else"); - - end Interface; - - * Compile all the units composing the library. - - * Bind the library objects. - - This step is performed by invoking gnatbind with the `-L' - switch. `gnatbind' will then generate the library elaboration - procedure (named `init') and the run-time finalization - procedure (named `final'). - - # generate the binder file in Ada - $ gnatbind -Lmylib interface - - # generate the binder file in C - $ gnatbind -C -Lmylib interface - - * Compile the files generated by the binder - - $ gcc -c b~interface.adb - - * Create the library; - - The procedure is identical to the procedure explained in *Note - Creating an Ada Library::, except that `b~interface.o' needs to be - added to the list of objects. - - # create an archive file - $ ar cr libmylib.a b~interface.o - - # create a shared library - $ gcc -shared -o libmylib.so b~interface.o - - * Provide a "foreign" view of the library interface; - - The example below shows the content of `mylib_interface.h' (note - that there is no rule for the naming of this file, any name can be - used) - /* the library elaboration procedure */ - extern void mylibinit (void); - - /* the library finalization procedure */ - extern void mylibfinal (void); - - /* the interface exported by the library */ - extern void do_something (void); - extern void do_something_else (void); - - Using the Library - ----------------- - - Libraries built as explained above can be used from any program, - provided that the elaboration procedures (named `mylibinit' in the - previous example) are called before the library services are used. Any - number of libraries can be used simultaneously, as long as the - elaboration procedure of each library is called. - - Below is an example of C program that uses our `mylib' library. - - #include "mylib_interface.h" - - int - main (void) - { - /* First, elaborate the library before using it */ - mylibinit (); - - /* Main program, using the library exported entities */ - do_something (); - do_something_else (); - - /* Library finalization at the end of the program */ - mylibfinal (); - return 0; - } - - Note that this same library can be used from an equivalent Ada main - program. In addition, if the libraries are installed as detailed in - *Note Installing an Ada Library::, it is not necessary to invoke the - library elaboration and finalization routines. The binder will ensure - that this is done as part of the main program elaboration and - finalization phases. - - The Finalization Phase - ---------------------- - - Invoking any library finalization procedure generated by `gnatbind' - shuts down the Ada run time permanently. Consequently, the finalization - of all Ada libraries must be performed at the end of the program. No - call to these libraries nor the Ada run time should be made past the - finalization phase. - - Restrictions in Libraries - ------------------------- - - The pragmas listed below should be used with caution inside libraries, - as they can create incompatibilities with other Ada libraries: - * pragma `Locking_Policy' - - * pragma `Queuing_Policy' - - * pragma `Task_Dispatching_Policy' - - * pragma `Unreserve_All_Interrupts' - When using a library that contains such pragmas, the user must make - sure that all libraries use the same pragmas with the same values. - Otherwise, a `Program_Error' will be raised during the elaboration of - the conflicting libraries. The usage of these pragmas and its - consequences for the user should therefore be well documented. - - Similarly, the traceback in exception occurrences mechanism should be - enabled or disabled in a consistent manner across all libraries. - Otherwise, a Program_Error will be raised during the elaboration of the - conflicting libraries. - - If the `'Version' and `'Body_Version' attributes are used inside a - library, then it is necessary to perform a `gnatbind' step that - mentions all ali files in all libraries, so that version identifiers - can be properly computed. In practice these attributes are rarely - used, so this is unlikely to be a consideration. - -  - File: gnat_ug_wnt.info, Node: Rebuilding the GNAT Run-Time Library, Prev: Creating an Ada Library to be Used in a Non-Ada Context, Up: GNAT and Libraries - - Rebuilding the GNAT Run-Time Library - ==================================== - - It may be useful to recompile the GNAT library in various contexts, the - most important one being the use of partition-wide configuration pragmas - such as Normalize_Scalar. A special Makefile called `Makefile.adalib' - is provided to that effect and can be found in the directory containing - the GNAT library. The location of this directory depends on the way the - GNAT environment has been installed and can be determined by means of - the command: - - $ gnatls -v - - The last entry in the object search path usually contains the gnat - library. This Makefile contains its own documentation and in particular - the set of instructions needed to rebuild a new library and to use it. - -  - File: gnat_ug_wnt.info, Node: Using the GNU make Utility, Next: Finding Memory Problems with gnatmem, Prev: GNAT and Libraries, Up: Top - - Using the GNU `make' Utility - **************************** - - This chapter offers some examples of makefiles that solve specific - problems. It does not explain how to write a makefile (see the GNU make - documentation), nor does it try to replace the `gnatmake' utility - (*note The GNAT Make Program gnatmake::). - - All the examples in this section are specific to the GNU version of - make. Although `make' is a standard utility, and the basic language is - the same, these examples use some advanced features found only in `GNU - make'. - - * Menu: - - * Using gnatmake in a Makefile:: - * Automatically Creating a List of Directories:: - * Generating the Command Line Switches:: - * Overcoming Command Line Length Limits:: - -  - File: gnat_ug_wnt.info, Node: Using gnatmake in a Makefile, Next: Automatically Creating a List of Directories, Up: Using the GNU make Utility - - Using gnatmake in a Makefile - ============================ - - Complex project organizations can be handled in a very powerful way by - using GNU make combined with gnatmake. For instance, here is a Makefile - which allows you to build each subsystem of a big project into a - separate shared library. Such a makefile allows you to significantly - reduce the link time of very big applications while maintaining full - coherence at each step of the build process. - - The list of dependencies are handled automatically by `gnatmake'. - The Makefile is simply used to call gnatmake in each of the appropriate - directories. - - Note that you should also read the example on how to automatically - create the list of directories (*note Automatically Creating a List of - Directories::) which might help you in case your project has a lot of - subdirectories. - - ## This Makefile is intended to be used with the following directory - ## configuration: - ## - The sources are split into a series of csc (computer software components) - ## Each of these csc is put in its own directory. - ## Their name are referenced by the directory names. - ## They will be compiled into shared library (although this would also work - ## with static libraries - ## - The main program (and possibly other packages that do not belong to any - ## csc is put in the top level directory (where the Makefile is). - ## toplevel_dir __ first_csc (sources) __ lib (will contain the library) - ## \_ second_csc (sources) __ lib (will contain the library) - ## \_ ... - ## Although this Makefile is build for shared library, it is easy to modify - ## to build partial link objects instead (modify the lines with -shared and - ## gnatlink below) - ## - ## With this makefile, you can change any file in the system or add any new - ## file, and everything will be recompiled correctly (only the relevant shared - ## objects will be recompiled, and the main program will be re-linked). - - # The list of computer software component for your project. This might be - # generated automatically. - CSC_LIST=aa bb cc - - # Name of the main program (no extension) - MAIN=main - - # If we need to build objects with -fPIC, uncomment the following line - #NEED_FPIC=-fPIC - - # The following variable should give the directory containing libgnat.so - # You can get this directory through 'gnatls -v'. This is usually the last - # directory in the Object_Path. - GLIB=... - - # The directories for the libraries - # (This macro expands the list of CSC to the list of shared libraries, you - # could simply use the expanded form : - # LIB_DIR=aa/lib/libaa.so bb/lib/libbb.so cc/lib/libcc.so - LIB_DIR=${foreach dir,${CSC_LIST},${dir}/lib/lib${dir}.so} - - ${MAIN}: objects ${LIB_DIR} - gnatbind ${MAIN} ${CSC_LIST:%=-aO%/lib} -shared - gnatlink ${MAIN} ${CSC_LIST:%=-l%} - - objects:: - # recompile the sources - gnatmake -c -i ${MAIN}.adb ${NEED_FPIC} ${CSC_LIST:%=-I%} - - # Note: In a future version of GNAT, the following commands will be simplified - # by a new tool, gnatmlib - ${LIB_DIR}: - mkdir -p ${dir $@ } - cd ${dir $@ }; gcc -shared -o ${notdir $@ } ../*.o -L${GLIB} -lgnat - cd ${dir $@ }; cp -f ../*.ali . - - # The dependencies for the modules - # Note that we have to force the expansion of *.o, since in some cases make won't - # be able to do it itself. - aa/lib/libaa.so: ${wildcard aa/*.o} - bb/lib/libbb.so: ${wildcard bb/*.o} - cc/lib/libcc.so: ${wildcard cc/*.o} - - # Make sure all of the shared libraries are in the path before starting the - # program - run:: - LD_LIBRARY_PATH=`pwd`/aa/lib:`pwd`/bb/lib:`pwd`/cc/lib ./${MAIN} - - clean:: - ${RM} -rf ${CSC_LIST:%=%/lib} - ${RM} ${CSC_LIST:%=%/*.ali} - ${RM} ${CSC_LIST:%=%/*.o} - ${RM} *.o *.ali ${MAIN} - -  - File: gnat_ug_wnt.info, Node: Automatically Creating a List of Directories, Next: Generating the Command Line Switches, Prev: Using gnatmake in a Makefile, Up: Using the GNU make Utility - - Automatically Creating a List of Directories - ============================================ - - In most makefiles, you will have to specify a list of directories, and - store it in a variable. For small projects, it is often easier to - specify each of them by hand, since you then have full control over what - is the proper order for these directories, which ones should be - included... - - However, in larger projects, which might involve hundreds of - subdirectories, it might be more convenient to generate this list - automatically. - - The example below presents two methods. The first one, although less - general, gives you more control over the list. It involves wildcard - characters, that are automatically expanded by `make'. Its shortcoming - is that you need to explicitly specify some of the organization of your - project, such as for instance the directory tree depth, whether some - directories are found in a separate tree,... - - The second method is the most general one. It requires an external - program, called `find', which is standard on all Unix systems. All the - directories found under a given root directory will be added to the - list. - - # The examples below are based on the following directory hierarchy: - # All the directories can contain any number of files - # ROOT_DIRECTORY -> a -> aa -> aaa - # -> ab - # -> ac - # -> b -> ba -> baa - # -> bb - # -> bc - # This Makefile creates a variable called DIRS, that can be reused any time - # you need this list (see the other examples in this section) - - # The root of your project's directory hierarchy - ROOT_DIRECTORY=. - - #### - # First method: specify explicitly the list of directories - # This allows you to specify any subset of all the directories you need. - #### - - DIRS := a/aa/ a/ab/ b/ba/ - - #### - # Second method: use wildcards - # Note that the argument(s) to wildcard below should end with a '/'. - # Since wildcards also return file names, we have to filter them out - # to avoid duplicate directory names. - # We thus use make's `dir' and `sort' functions. - # It sets DIRs to the following value (note that the directories aaa and baa - # are not given, unless you change the arguments to wildcard). - # DIRS= ./a/a/ ./b/ ./a/aa/ ./a/ab/ ./a/ac/ ./b/ba/ ./b/bb/ ./b/bc/ - #### - - DIRS := ${sort ${dir ${wildcard ${ROOT_DIRECTORY}/*/ ${ROOT_DIRECTORY}/*/*/}}} - - #### - # Third method: use an external program - # This command is much faster if run on local disks, avoiding NFS slowdowns. - # This is the most complete command: it sets DIRs to the following value: - # DIRS= ./a ./a/aa ./a/aa/aaa ./a/ab ./a/ac ./b ./b/ba ./b/ba/baa ./b/bb ./b/bc - #### - - DIRS := ${shell find ${ROOT_DIRECTORY} -type d -print} - -  - File: gnat_ug_wnt.info, Node: Generating the Command Line Switches, Next: Overcoming Command Line Length Limits, Prev: Automatically Creating a List of Directories, Up: Using the GNU make Utility - - Generating the Command Line Switches - ==================================== - - Once you have created the list of directories as explained in the - previous section (*note Automatically Creating a List of Directories::), - you can easily generate the command line arguments to pass to gnatmake. - - For the sake of completeness, this example assumes that the source - path is not the same as the object path, and that you have two separate - lists of directories. - - # see "Automatically creating a list of directories" to create - # these variables - SOURCE_DIRS= - OBJECT_DIRS= - - GNATMAKE_SWITCHES := ${patsubst %,-aI%,${SOURCE_DIRS}} - GNATMAKE_SWITCHES += ${patsubst %,-aO%,${OBJECT_DIRS}} - - all: - gnatmake ${GNATMAKE_SWITCHES} main_unit - -  - File: gnat_ug_wnt.info, Node: Overcoming Command Line Length Limits, Prev: Generating the Command Line Switches, Up: Using the GNU make Utility - - Overcoming Command Line Length Limits - ===================================== - - One problem that might be encountered on big projects is that many - operating systems limit the length of the command line. It is thus hard - to give gnatmake the list of source and object directories. - - This example shows how you can set up environment variables, which - will make `gnatmake' behave exactly as if the directories had been - specified on the command line, but have a much higher length limit (or - even none on most systems). - - It assumes that you have created a list of directories in your - Makefile, using one of the methods presented in *Note Automatically - Creating a List of Directories::. For the sake of completeness, we - assume that the object path (where the ALI files are found) is - different from the sources patch. - - Note a small trick in the Makefile below: for efficiency reasons, we - create two temporary variables (SOURCE_LIST and OBJECT_LIST), that are - expanded immediately by `make'. This way we overcome the standard make - behavior which is to expand the variables only when they are actually - used. - - # In this example, we create both ADA_INCLUDE_PATH and ADA_OBJECT_PATH. - # This is the same thing as putting the -I arguments on the command line. - # (the equivalent of using -aI on the command line would be to define - # only ADA_INCLUDE_PATH, the equivalent of -aO is ADA_OBJECT_PATH). - # You can of course have different values for these variables. - # - # Note also that we need to keep the previous values of these variables, since - # they might have been set before running 'make' to specify where the GNAT - # library is installed. - - # see "Automatically creating a list of directories" to create these - # variables - SOURCE_DIRS= - OBJECT_DIRS= - - empty:= - space:=${empty} ${empty} - SOURCE_LIST := ${subst ${space},:,${SOURCE_DIRS}} - OBJECT_LIST := ${subst ${space},:,${OBJECT_DIRS}} - ADA_INCLUDE_PATH += ${SOURCE_LIST} - ADA_OBJECT_PATH += ${OBJECT_LIST} - export ADA_INCLUDE_PATH - export ADA_OBJECT_PATH - - all: - gnatmake main_unit - -  - File: gnat_ug_wnt.info, Node: Finding Memory Problems with gnatmem, Next: Finding Memory Problems with GNAT Debug Pool, Prev: Using the GNU make Utility, Up: Top - - Finding Memory Problems with `gnatmem' - ************************************** - - `gnatmem', is a tool that monitors dynamic allocation and deallocation - activity in a program, and displays information about incorrect - deallocations and possible sources of memory leaks. Gnatmem provides - three type of information: - * General information concerning memory management, such as the total - number of allocations and deallocations, the amount of allocated - memory and the high water mark, i.e. the largest amount of - allocated memory in the course of program execution. - - * Backtraces for all incorrect deallocations, that is to say - deallocations which do not correspond to a valid allocation. - - * Information on each allocation that is potentially the origin of a - memory leak. - - The `gnatmem' command has two modes. It can be used with `gdb' or - with instrumented allocation and deallocation routines. The later mode - is called the `GMEM' mode. Both modes produce the very same output. - - * Menu: - - * Running gnatmem (GDB Mode):: - * Running gnatmem (GMEM Mode):: - * Switches for gnatmem:: - * Examples of gnatmem Usage:: - * GDB and GMEM Modes:: - * Implementation Note:: - -  - File: gnat_ug_wnt.info, Node: Running gnatmem (GDB Mode), Next: Running gnatmem (GMEM Mode), Up: Finding Memory Problems with gnatmem - - Running `gnatmem' (GDB Mode) - ============================ - - The `gnatmem' command has the form - - $ gnatmem [-q] [n] [-o file] user_program [program_arg]* - or - $ gnatmem [-q] [n] -i file - - Gnatmem must be supplied with the executable to examine, followed by its - run-time inputs. For example, if a program is executed with the command: - $ my_program arg1 arg2 - then it can be run under `gnatmem' control using the command: - $ gnatmem my_program arg1 arg2 - - The program is transparently executed under the control of the - debugger *Note The GNAT Debugger GDB::. This does not affect the - behavior of the program, except for sensitive real-time programs. When - the program has completed execution, `gnatmem' outputs a report - containing general allocation/deallocation information and potential - memory leak. For better results, the user program should be compiled - with debugging options *Note Switches for gcc::. - - Here is a simple example of use: - - *************** debut cc - $ gnatmem test_gm - - Global information - ------------------ - Total number of allocations : 45 - Total number of deallocations : 6 - Final Water Mark (non freed mem) : 11.29 Kilobytes - High Water Mark : 11.40 Kilobytes - - . - . - . - Allocation Root # 2 - ------------------- - Number of non freed allocations : 11 - Final Water Mark (non freed mem) : 1.16 Kilobytes - High Water Mark : 1.27 Kilobytes - Backtrace : - test_gm.adb:23 test_gm.alloc - . - . - . - - The first block of output give general information. In this case, the - Ada construct "new" was executed 45 times, and only 6 calls to an - unchecked deallocation routine occurred. - - Subsequent paragraphs display information on all allocation roots. - An allocation root is a specific point in the execution of the program - that generates some dynamic allocation, such as a "new" construct. This - root is represented by an execution backtrace (or subprogram call - stack). By default the backtrace depth for allocations roots is 1, so - that a root corresponds exactly to a source location. The backtrace can - be made deeper, to make the root more specific. - -  - File: gnat_ug_wnt.info, Node: Running gnatmem (GMEM Mode), Next: Switches for gnatmem, Prev: Running gnatmem (GDB Mode), Up: Finding Memory Problems with gnatmem - - Running `gnatmem' (GMEM Mode) - ============================= - - The `gnatmem' command has the form - - $ gnatmem [-q] [n] -i gmem.out user_program [program_arg]* - - The program must have been linked with the instrumented version of - the allocation and deallocation routines. This is done with linking - with the `libgmem.a' library. For better results, the user program - should be compiled with debugging options *Note Switches for gcc::. For - example to build `my_program': - - $ gnatmake -g my_program -largs -lgmem - - When running `my_program' the file `gmem.out' is produced. This file - contains information about all allocations and deallocations done by the - program. It is produced by the instrumented allocations and - deallocations routines and will be used by `gnatmem'. - - Gnatmem must be supplied with the `gmem.out' file and the executable to - examine followed by its run-time inputs. For example, if a program is - executed with the command: - $ my_program arg1 arg2 - then `gmem.out' can be analysed by `gnatmem' using the command: - $ gnatmem -i gmem.out my_program arg1 arg2 - -  - File: gnat_ug_wnt.info, Node: Switches for gnatmem, Next: Examples of gnatmem Usage, Prev: Running gnatmem (GMEM Mode), Up: Finding Memory Problems with gnatmem - - Switches for `gnatmem' - ====================== - - `gnatmem' recognizes the following switches: - - ``-q'' - Quiet. Gives the minimum output needed to identify the origin of - the memory leaks. Omit statistical information. - - ``n'' - N is an integer literal (usually between 1 and 10) which controls - the depth of the backtraces defining allocation root. The default - value for N is 1. The deeper the backtrace, the more precise the - localization of the root. Note that the total number of roots can - depend on this parameter. - - ``-o file'' - Direct the gdb output to the specified file. The `gdb' script used - to generate this output is also saved in the file `gnatmem.tmp'. - - ``-i file'' - Do the `gnatmem' processing starting from `file' which has been - generated by a previous call to `gnatmem' with the -o switch or - `gmem.out' produced by `GMEM' mode. This is useful for post mortem - processing. - -  - File: gnat_ug_wnt.info, Node: Examples of gnatmem Usage, Next: GDB and GMEM Modes, Prev: Switches for gnatmem, Up: Finding Memory Problems with gnatmem - - Example of `gnatmem' Usage - ========================== - - This section is based on the `GDB' mode of `gnatmem'. The same results - can be achieved using `GMEM' mode. See section *Note Running gnatmem - (GMEM Mode)::. - - The first example shows the use of `gnatmem' on a simple leaking - program. Suppose that we have the following Ada program: - - with Unchecked_Deallocation; - procedure Test_Gm is - - type T is array (1..1000) of Integer; - type Ptr is access T; - procedure Free is new Unchecked_Deallocation (T, Ptr); - A : Ptr; - - procedure My_Alloc is - begin - A := new T; - end My_Alloc; - - procedure My_DeAlloc is - B : Ptr := A; - begin - Free (B); - end My_DeAlloc; - - begin - My_Alloc; - for I in 1 .. 5 loop - for J in I .. 5 loop - My_Alloc; - end loop; - My_Dealloc; - end loop; - end; - - The program needs to be compiled with debugging option: - - $ gnatmake -g test_gm - - `gnatmem' is invoked simply with - $ gnatmem test_gm - - which produces the following output: - - Global information - ------------------ - Total number of allocations : 18 - Total number of deallocations : 5 - Final Water Mark (non freed mem) : 53.00 Kilobytes - High Water Mark : 56.90 Kilobytes - - Allocation Root # 1 - ------------------- - Number of non freed allocations : 11 - Final Water Mark (non freed mem) : 42.97 Kilobytes - High Water Mark : 46.88 Kilobytes - Backtrace : - test_gm.adb:11 test_gm.my_alloc - - Allocation Root # 2 - ------------------- - Number of non freed allocations : 1 - Final Water Mark (non freed mem) : 10.02 Kilobytes - High Water Mark : 10.02 Kilobytes - Backtrace : - s-secsta.adb:81 system.secondary_stack.ss_init - - Allocation Root # 3 - ------------------- - Number of non freed allocations : 1 - Final Water Mark (non freed mem) : 12 Bytes - High Water Mark : 12 Bytes - Backtrace : - s-secsta.adb:181 system.secondary_stack.ss_init - - Note that the GNAT run time contains itself a certain number of - allocations that have no corresponding deallocation, as shown here for - root #2 and root #1. This is a normal behavior when the number of non - freed allocations is one, it locates dynamic data structures that the - run time needs for the complete lifetime of the program. Note also that - there is only one allocation root in the user program with a single - line back trace: test_gm.adb:11 test_gm.my_alloc, whereas a careful - analysis of the program shows that 'My_Alloc' is called at 2 different - points in the source (line 21 and line 24). If those two allocation - roots need to be distinguished, the backtrace depth parameter can be - used: - - $ gnatmem 3 test_gm - - which will give the following output: - - Global information - ------------------ - Total number of allocations : 18 - Total number of deallocations : 5 - Final Water Mark (non freed mem) : 53.00 Kilobytes - High Water Mark : 56.90 Kilobytes - - Allocation Root # 1 - ------------------- - Number of non freed allocations : 10 - Final Water Mark (non freed mem) : 39.06 Kilobytes - High Water Mark : 42.97 Kilobytes - Backtrace : - test_gm.adb:11 test_gm.my_alloc - test_gm.adb:24 test_gm - b_test_gm.c:52 main - - Allocation Root # 2 - ------------------- - Number of non freed allocations : 1 - Final Water Mark (non freed mem) : 10.02 Kilobytes - High Water Mark : 10.02 Kilobytes - Backtrace : - s-secsta.adb:81 system.secondary_stack.ss_init - s-secsta.adb:283 - b_test_gm.c:33 adainit - - Allocation Root # 3 - ------------------- - Number of non freed allocations : 1 - Final Water Mark (non freed mem) : 3.91 Kilobytes - High Water Mark : 3.91 Kilobytes - Backtrace : - test_gm.adb:11 test_gm.my_alloc - test_gm.adb:21 test_gm - b_test_gm.c:52 main - - Allocation Root # 4 - ------------------- - Number of non freed allocations : 1 - Final Water Mark (non freed mem) : 12 Bytes - High Water Mark : 12 Bytes - Backtrace : - s-secsta.adb:181 system.secondary_stack.ss_init - s-secsta.adb:283 - b_test_gm.c:33 adainit - - The allocation root #1 of the first example has been split in 2 roots #1 - and #3 thanks to the more precise associated backtrace. - -  - File: gnat_ug_wnt.info, Node: GDB and GMEM Modes, Next: Implementation Note, Prev: Examples of gnatmem Usage, Up: Finding Memory Problems with gnatmem - - GDB and GMEM Modes - ================== - - The main advantage of the `GMEM' mode is that it is a lot faster than - the `GDB' mode where the application must be monitored by a `GDB' - script. But the `GMEM' mode is available only for DEC Unix, Linux x86, - Solaris (sparc and x86) and Windows 95/98/NT/2000 (x86). - - The main advantage of the `GDB' mode is that it is available on all - supported platforms. But it can be very slow if the application does a - lot of allocations and deallocations. - -  - File: gnat_ug_wnt.info, Node: Implementation Note, Prev: GDB and GMEM Modes, Up: Finding Memory Problems with gnatmem - - Implementation Note - =================== - - * Menu: - - * gnatmem Using GDB Mode:: - * gnatmem Using GMEM Mode:: - -  - File: gnat_ug_wnt.info, Node: gnatmem Using GDB Mode, Next: gnatmem Using GMEM Mode, Up: Implementation Note - - `gnatmem' Using `GDB' Mode - -------------------------- - - `gnatmem' executes the user program under the control of `GDB' using a - script that sets breakpoints and gathers information on each dynamic - allocation and deallocation. The output of the script is then analyzed - by `gnatmem' in order to locate memory leaks and their origin in the - program. Gnatmem works by recording each address returned by the - allocation procedure (`__gnat_malloc') along with the backtrace at the - allocation point. On each deallocation, the deallocated address is - matched with the corresponding allocation. At the end of the processing, - the unmatched allocations are considered potential leaks. All the - allocations associated with the same backtrace are grouped together and - form an allocation root. The allocation roots are then sorted so that - those with the biggest number of unmatched allocation are printed - first. A delicate aspect of this technique is to distinguish between the - data produced by the user program and the data produced by the gdb - script. Currently, on systems that allow probing the terminal, the gdb - command "tty" is used to force the program output to be redirected to - the current terminal while the `gdb' output is directed to a file or to - a pipe in order to be processed subsequently by `gnatmem'. - -  - File: gnat_ug_wnt.info, Node: gnatmem Using GMEM Mode, Prev: gnatmem Using GDB Mode, Up: Implementation Note - - `gnatmem' Using `GMEM' Mode - --------------------------- - - This mode use the same algorithm to detect memory leak as the `GDB' - mode of `gnatmem', the only difference is in the way data are gathered. - In `GMEM' mode the program is linked with instrumented version of - `__gnat_malloc' and `__gnat_free' routines. Information needed to find - memory leak are recorded by these routines in file `gmem.out'. This - mode also require that the stack traceback be available, this is only - implemented on some platforms *Note GDB and GMEM Modes::. - -  - File: gnat_ug_wnt.info, Node: Finding Memory Problems with GNAT Debug Pool, Next: Creating Sample Bodies Using gnatstub, Prev: Finding Memory Problems with gnatmem, Up: Top - - Finding Memory Problems with GNAT Debug Pool - ******************************************** - - The use of unchecked deallocation and unchecked conversion can easily - lead to incorrect memory references. The problems generated by such - references are usually difficult to tackle because the symptoms can be - very remote from the origin of the problem. In such cases, it is very - helpful to detect the problem as early as possible. This is the purpose - of the Storage Pool provided by `GNAT.Debug_Pools'. - - In order to use the GNAT specific debugging pool, the user must - associate a debug pool object with each of the access types that may be - related to suspected memory problems. See Ada Reference Manual 13.11. - type Ptr is access Some_Type; - Pool : GNAT.Debug_Pools.Debug_Pool; - for Ptr'Storage_Pool use Pool; - - `GNAT.Debug_Pools' is derived from of a GNAT-specific kind of pool: - the Checked_Pool. Such pools, like standard Ada storage pools, allow - the user to redefine allocation and deallocation strategies. They also - provide a checkpoint for each dereference, through the use of the - primitive operation `Dereference' which is implicitly called at each - dereference of an access value. - - Once an access type has been associated with a debug pool, - operations on values of the type may raise four distinct exceptions, - which correspond to four potential kinds of memory corruption: - * `GNAT.Debug_Pools.Accessing_Not_Allocated_Storage' - - * `GNAT.Debug_Pools.Accessing_Deallocated_Storage' - - * `GNAT.Debug_Pools.Freeing_Not_Allocated_Storage' - - * `GNAT.Debug_Pools.Freeing_Deallocated_Storage ' - - For types associated with a Debug_Pool, dynamic allocation is performed - using the standard GNAT allocation routine. References to all allocated - chunks of memory are kept in an internal dictionary. The deallocation - strategy consists in not releasing the memory to the underlying system - but rather to fill it with a memory pattern easily recognizable during - debugging sessions: The memory pattern is the old IBM hexadecimal - convention: 16#DEADBEEF#. Upon each dereference, a check is made that - the access value denotes a properly allocated memory location. Here is - a complete example of use of `Debug_Pools', that includes typical - instances of memory corruption: - with Gnat.Io; use Gnat.Io; - with Unchecked_Deallocation; - with Unchecked_Conversion; - with GNAT.Debug_Pools; - with System.Storage_Elements; - with Ada.Exceptions; use Ada.Exceptions; - procedure Debug_Pool_Test is - - type T is access Integer; - type U is access all T; - - P : GNAT.Debug_Pools.Debug_Pool; - for T'Storage_Pool use P; - - procedure Free is new Unchecked_Deallocation (Integer, T); - function UC is new Unchecked_Conversion (U, T); - A, B : aliased T; - - procedure Info is new GNAT.Debug_Pools.Print_Info(Put_Line); - - begin - Info (P); - A := new Integer; - B := new Integer; - B := A; - Info (P); - Free (A); - begin - Put_Line (Integer'Image(B.all)); - exception - when E : others => Put_Line ("raised: " & Exception_Name (E)); - end; - begin - Free (B); - exception - when E : others => Put_Line ("raised: " & Exception_Name (E)); - end; - B := UC(A'Access); - begin - Put_Line (Integer'Image(B.all)); - exception - when E : others => Put_Line ("raised: " & Exception_Name (E)); - end; - begin - Free (B); - exception - when E : others => Put_Line ("raised: " & Exception_Name (E)); - end; - Info (P); - end Debug_Pool_Test; - - The debug pool mechanism provides the following precise diagnostics on - the execution of this erroneous program: - Debug Pool info: - Total allocated bytes : 0 - Total deallocated bytes : 0 - Current Water Mark: 0 - High Water Mark: 0 - - Debug Pool info: - Total allocated bytes : 8 - Total deallocated bytes : 0 - Current Water Mark: 8 - High Water Mark: 8 - - raised: GNAT.DEBUG_POOLS.ACCESSING_DEALLOCATED_STORAGE - raised: GNAT.DEBUG_POOLS.FREEING_DEALLOCATED_STORAGE - raised: GNAT.DEBUG_POOLS.ACCESSING_NOT_ALLOCATED_STORAGE - raised: GNAT.DEBUG_POOLS.FREEING_NOT_ALLOCATED_STORAGE - Debug Pool info: - Total allocated bytes : 8 - Total deallocated bytes : 4 - Current Water Mark: 4 - High Water Mark: 8 - -  - File: gnat_ug_wnt.info, Node: Creating Sample Bodies Using gnatstub, Next: Reducing the Size of Ada Executables with gnatelim, Prev: Finding Memory Problems with GNAT Debug Pool, Up: Top - - Creating Sample Bodies Using `gnatstub' - *************************************** - - `gnatstub' creates body stubs, that is, empty but compilable bodies for - library unit declarations. - - To create a body stub, `gnatstub' has to compile the library unit - declaration. Therefore, bodies can be created only for legal library - units. Moreover, if a library unit depends semantically upon units - located outside the current directory, you have to provide the source - search path when calling `gnatstub', see the description of `gnatstub' - switches below. - - * Menu: - - * Running gnatstub:: - * Switches for gnatstub:: - -  - File: gnat_ug_wnt.info, Node: Running gnatstub, Next: Switches for gnatstub, Up: Creating Sample Bodies Using gnatstub - - Running `gnatstub' - ================== - - `gnatstub' has the command-line interface of the form - - $ gnatstub [switches] filename [directory] - - where - `filename' - is the name of the source file that contains a library unit - declaration for which a body must be created. This name should - follow the GNAT file name conventions. No crunching is allowed for - this file name. The file name may contain the path information. - - `directory' - indicates the directory to place a body stub (default is the - current directory) - - `switches' - is an optional sequence of switches as described in the next - section - -  - File: gnat_ug_wnt.info, Node: Switches for gnatstub, Prev: Running gnatstub, Up: Creating Sample Bodies Using gnatstub - - Switches for `gnatstub' - ======================= - - `-f' - If the destination directory already contains a file with a name - of the body file for the argument spec file, replace it with the - generated body stub. - - `-hs' - Put the comment header (i.e. all the comments preceding the - compilation unit) from the source of the library unit declaration - into the body stub. - - `-hg' - Put a sample comment header into the body stub. - - `-IDIR' - `-I-' - These switches have the same meaning as in calls to gcc. They - define the source search path in the call to gcc issued by - `gnatstub' to compile an argument source file. - - `-iN' - (N is a decimal natural number). Set the indentation level in the - generated body sample to n, '-i0' means "no indentation", the - default indentation is 3. - - `-k' - Do not remove the tree file (i.e. the snapshot of the compiler - internal structures used by `gnatstub') after creating the body - stub. - - `-lN' - (N is a decimal positive number) Set the maximum line length in the - body stub to n, the default is 78. - - `-q' - Quiet mode: do not generate a confirmation when a body is - successfully created or a message when a body is not required for - an argument unit. - - `-r' - Reuse the tree file (if it exists) instead of creating it: instead - of creating the tree file for the library unit declaration, - gnatstub tries to find it in the current directory and use it for - creating a body. If the tree file is not found, no body is - created. `-r' also implies `-k', whether or not `-k' is set - explicitly. - - `-t' - Overwrite the existing tree file: if the current directory already - contains the file which, according to the GNAT file name rules - should be considered as a tree file for the argument source file, - gnatstub will refuse to create the tree file needed to create a - body sampler, unless `-t' option is set - - `-v' - Verbose mode: generate version information. - -  - File: gnat_ug_wnt.info, Node: Reducing the Size of Ada Executables with gnatelim, Next: Other Utility Programs, Prev: Creating Sample Bodies Using gnatstub, Up: Top - - Reducing the Size of Ada Executables with `gnatelim' - **************************************************** - - * Menu: - - * About gnatelim:: - * Eliminate Pragma:: - * Tree Files:: - * Preparing Tree and Bind Files for gnatelim:: - * Running gnatelim:: - * Correcting the List of Eliminate Pragmas:: - * Making Your Executables Smaller:: - * Summary of the gnatelim Usage Cycle:: - -  - File: gnat_ug_wnt.info, Node: About gnatelim, Next: Eliminate Pragma, Up: Reducing the Size of Ada Executables with gnatelim - - About `gnatelim' - ================ - - When a program shares a set of Ada packages with other programs, it may - happen that this program uses only a fraction of the subprograms - defined in these packages. The code created for these unused - subprograms increases the size of the executable. - - `gnatelim' tracks unused subprograms in an Ada program and outputs a - list of GNAT-specific `Eliminate' pragmas (see next section) marking - all the subprograms that are declared but never called. By placing the - list of `Eliminate' pragmas in the GNAT configuration file `gnat.adc' - and recompiling your program, you may decrease the size of its - executable, because the compiler will not generate the code for - 'eliminated' subprograms. - - `gnatelim' needs as its input data a set of tree files (see *Note - Tree Files::) representing all the components of a program to process - and a bind file for a main subprogram (see *Note Preparing Tree and - Bind Files for gnatelim::). - -  - File: gnat_ug_wnt.info, Node: Eliminate Pragma, Next: Tree Files, Prev: About gnatelim, Up: Reducing the Size of Ada Executables with gnatelim - - `Eliminate' Pragma - ================== - - The simplified syntax of the Eliminate pragma used by `gnatelim' is: - - pragma Eliminate (Library_Unit_Name, Subprogram_Name); - - where - `Library_Unit_Name' - full expanded Ada name of a library unit - - `Subprogram_Name' - a simple or expanded name of a subprogram declared within this - compilation unit - - The effect of an `Eliminate' pragma placed in the GNAT configuration - file `gnat.adc' is: - - * If the subprogram `Subprogram_Name' is declared within the library - unit `Library_Unit_Name', the compiler will not generate code for - this subprogram. This applies to all overloaded subprograms denoted - by `Subprogram_Name'. - - * If a subprogram marked by the pragma `Eliminate' is used (called) - in a program, the compiler will produce an error message in the - place where it is called. - -  - File: gnat_ug_wnt.info, Node: Tree Files, Next: Preparing Tree and Bind Files for gnatelim, Prev: Eliminate Pragma, Up: Reducing the Size of Ada Executables with gnatelim - - Tree Files - ========== - - A tree file stores a snapshot of the compiler internal data structures - at the very end of a successful compilation. It contains all the - syntactic and semantic information for the compiled unit and all the - units upon which it depends semantically. To use tools that make use - of tree files, you need to first produce the right set of tree files. - - GNAT produces correct tree files when -gnatt -gnatc options are set - in a gcc call. The tree files have an .adt extension. Therefore, to - produce a tree file for the compilation unit contained in a file named - `foo.adb', you must use the command - - $ gcc -c -gnatc -gnatt foo.adb - - and you will get the tree file `foo.adt'. compilation. - -  - File: gnat_ug_wnt.info, Node: Preparing Tree and Bind Files for gnatelim, Next: Running gnatelim, Prev: Tree Files, Up: Reducing the Size of Ada Executables with gnatelim - - Preparing Tree and Bind Files for `gnatelim' - ============================================ - - A set of tree files covering the program to be analyzed with `gnatelim' - and the bind file for the main subprogram does not have to be in the - current directory. '-T' gnatelim option may be used to provide the - search path for tree files, and '-b' option may be used to point to the - bind file to process (see *Note Running gnatelim::) - - If you do not have the appropriate set of tree files and the right - bind file, you may create them in the current directory using the - following procedure. - - Let `Main_Prog' be the name of a main subprogram, and suppose this - subprogram is in a file named `main_prog.adb'. - - To create a bind file for `gnatelim', run `gnatbind' for the main - subprogram. `gnatelim' can work with both Ada and C bind files; when - both are present, it uses the Ada bind file. The following commands - will build the program and create the bind file: - - $ gnatmake -c Main_Prog - $ gnatbind main_prog - - To create a minimal set of tree files covering the whole program, call - `gnatmake' for this program as follows: - - $ gnatmake -f -c -gnatc -gnatt Main_Prog - - The `-c' gnatmake option turns off the bind and link steps, that are - useless anyway because the sources are compiled with `-gnatc' option - which turns off code generation. - - The `-f' gnatmake option forces recompilation of all the needed - sources. - - This sequence of actions will create all the data needed by - `gnatelim' from scratch and therefore guarantee its consistency. If you - would like to use some existing set of files as `gnatelim' output, you - must make sure that the set of files is complete and consistent. You - can use the `-m' switch to check if there are missed tree files - - Note, that `gnatelim' needs neither object nor ALI files. - -  - File: gnat_ug_wnt.info, Node: Running gnatelim, Next: Correcting the List of Eliminate Pragmas, Prev: Preparing Tree and Bind Files for gnatelim, Up: Reducing the Size of Ada Executables with gnatelim - - Running `gnatelim' - ================== - - `gnatelim' has the following command-line interface: - - $ gnatelim [options] name - - `name' should be a full expanded Ada name of a main subprogram of a - program (partition). - - `gnatelim' options: - - `-q' - Quiet mode: by default `gnatelim' generates to the standard error - stream a trace of the source file names of the compilation units - being processed. This option turns this trace off. - - `-v' - Verbose mode: `gnatelim' version information is printed as Ada - comments to the standard output stream. - - `-a' - Also look for subprograms from the GNAT run time that can be - eliminated. - - `-m' - Check if any tree files are missing for an accurate result. - - `-TDIR' - When looking for tree files also look in directory DIR - - `-bBIND_FILE' - Specifies BIND_FILE as the bind file to process. If not set, the - name of the bind file is computed from the full expanded Ada name - of a main subprogram. - - `-dX' - Activate internal debugging switches. X is a letter or digit, or - string of letters or digits, which specifies the type of debugging - mode desired. Normally these are used only for internal - development or system debugging purposes. You can find full - documentation for these switches in the body of the - `Gnatelim.Options' unit in the compiler source file - `gnatelim-options.adb'. - - `gnatelim' sends its output to the standard output stream, and all the - tracing and debug information is sent to the standard error stream. In - order to produce a proper GNAT configuration file `gnat.adc', - redirection must be used: - - $ gnatelim Main_Prog > gnat.adc - - or - - $ gnatelim Main_Prog >> gnat.adc - - In order to append the `gnatelim' output to the existing contents of - `gnat.adc'. - -  - File: gnat_ug_wnt.info, Node: Correcting the List of Eliminate Pragmas, Next: Making Your Executables Smaller, Prev: Running gnatelim, Up: Reducing the Size of Ada Executables with gnatelim - - Correcting the List of Eliminate Pragmas - ======================================== - - In some rare cases it may happen that `gnatelim' will try to eliminate - subprograms which are actually called in the program. In this case, the - compiler will generate an error message of the form: - - file.adb:106:07: cannot call eliminated subprogram "My_Prog" - - You will need to manually remove the wrong `Eliminate' pragmas from the - `gnat.adc' file. It is advised that you recompile your program from - scratch after that because you need a consistent `gnat.adc' file during - the entire compilation. - -  - File: gnat_ug_wnt.info, Node: Making Your Executables Smaller, Next: Summary of the gnatelim Usage Cycle, Prev: Correcting the List of Eliminate Pragmas, Up: Reducing the Size of Ada Executables with gnatelim - - Making Your Executables Smaller - =============================== - - In order to get a smaller executable for your program you now have to - recompile the program completely with the new `gnat.adc' file created - by `gnatelim' in your current directory: - - $ gnatmake -f Main_Prog - - (you will need `-f' option for gnatmake to recompile everything with - the set of pragmas `Eliminate' you have obtained with `gnatelim'). - - Be aware that the set of `Eliminate' pragmas is specific to each - program. It is not recommended to merge sets of `Eliminate' pragmas - created for different programs in one `gnat.adc' file. - -  - File: gnat_ug_wnt.info, Node: Summary of the gnatelim Usage Cycle, Prev: Making Your Executables Smaller, Up: Reducing the Size of Ada Executables with gnatelim - - Summary of the gnatelim Usage Cycle - =================================== - - Here is a quick summary of the steps to be taken in order to reduce the - size of your executables with `gnatelim'. You may use other GNAT - options to control the optimization level, to produce the debugging - information, to set search path, etc. - - 1. Produce a bind file and a set of tree files - - $ gnatmake -c Main_Prog - $ gnatbind main_prog - $ gnatmake -f -c -gnatc -gnatt Main_Prog - - 2. Generate a list of `Eliminate' pragmas - $ gnatelim Main_Prog >[>] gnat.adc - - 3. Recompile the application - - $ gnatmake -f Main_Prog - - -  - File: gnat_ug_wnt.info, Node: Other Utility Programs, Next: Running and Debugging Ada Programs, Prev: Reducing the Size of Ada Executables with gnatelim, Up: Top - - Other Utility Programs - ********************** - - This chapter discusses some other utility programs available in the Ada - environment. - - * Menu: - - * Using Other Utility Programs with GNAT:: - * The gnatpsta Utility Program:: - * The External Symbol Naming Scheme of GNAT:: - * Ada Mode for Glide:: - * Converting Ada Files to html with gnathtml:: - * Installing gnathtml:: - -  - File: gnat_ug_wnt.info, Node: Using Other Utility Programs with GNAT, Next: The gnatpsta Utility Program, Up: Other Utility Programs - - Using Other Utility Programs with GNAT - ====================================== - - The object files generated by GNAT are in standard system format and in - particular the debugging information uses this format. This means - programs generated by GNAT can be used with existing utilities that - depend on these formats. - - In general, any utility program that works with C will also often - work with Ada programs generated by GNAT. This includes software - utilities such as gprof (a profiling program), `gdb' (the FSF - debugger), and utilities such as Purify. - -  - File: gnat_ug_wnt.info, Node: The gnatpsta Utility Program, Next: The External Symbol Naming Scheme of GNAT, Prev: Using Other Utility Programs with GNAT, Up: Other Utility Programs - - The `gnatpsta' Utility Program - ============================== - - Many of the definitions in package Standard are - implementation-dependent. However, the source of this package does not - exist as an Ada source file, so these values cannot be determined by - inspecting the source. They can be determined by examining in detail - the coding of `cstand.adb' which creates the image of Standard in the - compiler, but this is awkward and requires a great deal of internal - knowledge about the system. - - The `gnatpsta' utility is designed to deal with this situation. It - is an Ada program that dynamically determines the values of all the - relevant parameters in Standard, and prints them out in the form of an - Ada source listing for Standard, displaying all the values of interest. - This output is generated to `stdout'. - - To determine the value of any parameter in package Standard, simply - run `gnatpsta' with no qualifiers or arguments, and examine the output. - This is preferable to consulting documentation, because you know that - the values you are getting are the actual ones provided by the - executing system. - -  - File: gnat_ug_wnt.info, Node: The External Symbol Naming Scheme of GNAT, Next: Ada Mode for Glide, Prev: The gnatpsta Utility Program, Up: Other Utility Programs - - The External Symbol Naming Scheme of GNAT - ========================================= - - In order to interpret the output from GNAT, when using tools that are - originally intended for use with other languages, it is useful to - understand the conventions used to generate link names from the Ada - entity names. - - All link names are in all lowercase letters. With the exception of - library procedure names, the mechanism used is simply to use the full - expanded Ada name with dots replaced by double underscores. For - example, suppose we have the following package spec: - - package QRS is - MN : Integer; - end QRS; - - The variable `MN' has a full expanded Ada name of `QRS.MN', so the - corresponding link name is `qrs__mn'. Of course if a `pragma Export' - is used this may be overridden: - - package Exports is - Var1 : Integer; - pragma Export (Var1, C, External_Name => "var1_name"); - Var2 : Integer; - pragma Export (Var2, C, Link_Name => "var2_link_name"); - end Exports; - - In this case, the link name for VAR1 is whatever link name the C - compiler would assign for the C function VAR1_NAME. This typically - would be either VAR1_NAME or _VAR1_NAME, depending on operating system - conventions, but other possibilities exist. The link name for VAR2 is - VAR2_LINK_NAME, and this is not operating system dependent. - - One exception occurs for library level procedures. A potential - ambiguity arises between the required name `_main' for the C main - program, and the name we would otherwise assign to an Ada library level - procedure called `Main' (which might well not be the main program). - - To avoid this ambiguity, we attach the prefix `_ada_' to such names. - So if we have a library level procedure such as - - procedure Hello (S : String); - - the external name of this procedure will be _ADA_HELLO. - -  - File: gnat_ug_wnt.info, Node: Ada Mode for Glide, Next: Converting Ada Files to html with gnathtml, Prev: The External Symbol Naming Scheme of GNAT, Up: Other Utility Programs - - Ada Mode for `Glide' - ==================== - - The Glide mode for programming in Ada (both, Ada83 and Ada95) helps the - user in understanding existing code and facilitates writing new code. It - furthermore provides some utility functions for easier integration of - standard Emacs features when programming in Ada. - - General Features: - ----------------- - - * Full Integrated Development Environment : - - * support of 'project files' for the configuration (directories, - compilation options,...) - - * compiling and stepping through error messages. - - * running and debugging your applications within Glide. - - * easy to use for beginners by pull-down menus, - - * user configurable by many user-option variables. - - Ada Mode Features That Help Understanding Code: - ----------------------------------------------- - - * functions for easy and quick stepping through Ada code, - - * getting cross reference information for identifiers (e.g. find the - defining place by a keystroke), - - * displaying an index menu of types and subprograms and move point to - the chosen one, - - * automatic color highlighting of the various entities in Ada code. - - Glide Support for Writing Ada Code: - ----------------------------------- - - * switching between spec and body files with possible autogeneration - of body files, - - * automatic formating of subprograms parameter lists. - - * automatic smart indentation according to Ada syntax, - - * automatic completion of identifiers, - - * automatic casing of identifiers, keywords, and attributes, - - * insertion of statement templates, - - * filling comment paragraphs like filling normal text, - - For more information, please refer to the online Glide documentation - available in the Glide -> Help Menu. - -  - File: gnat_ug_wnt.info, Node: Converting Ada Files to html with gnathtml, Next: Installing gnathtml, Prev: Ada Mode for Glide, Up: Other Utility Programs - - Converting Ada Files to html with `gnathtml' - ============================================ - - This `Perl' script allows Ada source files to be browsed using standard - Web browsers. For installation procedure, see the section *Note - Installing gnathtml::. - - Ada reserved keywords are highlighted in a bold font and Ada - comments in a blue font. Unless your program was compiled with the gcc - `-gnatx' switch to suppress the generation of cross-referencing - information, user defined variables and types will appear in a - different color; you will be able to click on any identifier and go to - its declaration. - - The command line is as follow: - $ perl gnathtml.pl [switches] ada-files - - You can pass it as many Ada files as you want. `gnathtml' will - generate an html file for every ada file, and a global file called - `index.htm'. This file is an index of every identifier defined in the - files. - - The available switches are the following ones : - - `-83' - Only the subset on the Ada 83 keywords will be highlighted, not - the full Ada 95 keywords set. - - `-cc COLOR' - This option allows you to change the color used for comments. The - default value is green. The color argument can be any name - accepted by html. - - `-d' - If the ada files depend on some other files (using for instance the - `with' command, the latter will also be converted to html. Only - the files in the user project will be converted to html, not the - files in the run-time library itself. - - `-D' - This command is the same as -d above, but `gnathtml' will also look - for files in the run-time library, and generate html files for - them. - - `-f' - By default, gnathtml will generate html links only for global - entities ('with'ed units, global variables and types,...). If you - specify the `-f' on the command line, then links will be generated - for local entities too. - - `-l NUMBER' - If this switch is provided and NUMBER is not 0, then `gnathtml' - will number the html files every NUMBER line. - - `-I DIR' - Specify a directory to search for library files (`.ali' files) and - source files. You can provide several -I switches on the command - line, and the directories will be parsed in the order of the - command line. - - `-o DIR' - Specify the output directory for html files. By default, gnathtml - will saved the generated html files in a subdirectory named - `html/'. - - `-p FILE' - If you are using Emacs and the most recent Emacs Ada mode, which - provides a full Integrated Development Environment for compiling, - checking, running and debugging applications, you may be using - `.adp' files to give the directories where Emacs can find sources - and object files. - - Using this switch, you can tell gnathtml to use these files. This - allows you to get an html version of your application, even if it - is spread over multiple directories. - - `-sc COLOR' - This option allows you to change the color used for symbol - definitions. The default value is red. The color argument can be - any name accepted by html. - - `-t FILE' - This switch provides the name of a file. This file contains a list - of file names to be converted, and the effect is exactly as though - they had appeared explicitly on the command line. This is the - recommended way to work around the command line length limit on - some systems. - -  - File: gnat_ug_wnt.info, Node: Installing gnathtml, Prev: Converting Ada Files to html with gnathtml, Up: Other Utility Programs - - Installing `gnathtml' - ===================== - - `Perl' needs to be installed on your machine to run this script. - `Perl' is freely available for almost every architecture and Operating - System via the Internet. - - On Unix systems, you may want to modify the first line of the - script `gnathtml', to explicitly tell the Operating system where - Perl is. The syntax of this line is : - #!full_path_name_to_perl - - Alternatively, you may run the script using the following command line: - - $ perl gnathtml.pl [switches] files - -  - File: gnat_ug_wnt.info, Node: Running and Debugging Ada Programs, Next: Inline Assembler, Prev: Other Utility Programs, Up: Top - - Running and Debugging Ada Programs - ********************************** - - This chapter discusses how to debug Ada programs. An incorrect Ada - program may be handled in three ways by the GNAT compiler: - - 1. The illegality may be a violation of the static semantics of Ada. - In that case GNAT diagnoses the constructs in the program that are - illegal. It is then a straightforward matter for the user to - modify those parts of the program. - - 2. The illegality may be a violation of the dynamic semantics of Ada. - In that case the program compiles and executes, but may generate - incorrect results, or may terminate abnormally with some exception. - - 3. When presented with a program that contains convoluted errors, GNAT - itself may terminate abnormally without providing full diagnostics - on the incorrect user program. - - * Menu: - - * The GNAT Debugger GDB:: - * Running GDB:: - * Introduction to GDB Commands:: - * Using Ada Expressions:: - * Calling User-Defined Subprograms:: - * Using the Next Command in a Function:: - * Ada Exceptions:: - * Ada Tasks:: - * Debugging Generic Units:: - * GNAT Abnormal Termination or Failure to Terminate:: - * Naming Conventions for GNAT Source Files:: - * Getting Internal Debugging Information:: - * Stack Traceback:: - -  - File: gnat_ug_wnt.info, Node: The GNAT Debugger GDB, Next: Running GDB, Up: Running and Debugging Ada Programs - - The GNAT Debugger GDB - ===================== - - `GDB' is a general purpose, platform-independent debugger that can be - used to debug mixed-language programs compiled with `GCC', and in - particular is capable of debugging Ada programs compiled with GNAT. The - latest versions of `GDB' are Ada-aware and can handle complex Ada data - structures. - - The manual `Debugging with GDB' contains full details on the usage - of `GDB', including a section on its usage on programs. This manual - should be consulted for full details. The section that follows is a - brief introduction to the philosophy and use of `GDB'. - - When GNAT programs are compiled, the compiler optionally writes - debugging information into the generated object file, including - information on line numbers, and on declared types and variables. This - information is separate from the generated code. It makes the object - files considerably larger, but it does not add to the size of the - actual executable that will be loaded into memory, and has no impact on - run-time performance. The generation of debug information is triggered - by the use of the -g switch in the gcc or gnatmake command used to - carry out the compilations. It is important to emphasize that the use - of these options does not change the generated code. - - The debugging information is written in standard system formats that - are used by many tools, including debuggers and profilers. The format - of the information is typically designed to describe C types and - semantics, but GNAT implements a translation scheme which allows full - details about Ada types and variables to be encoded into these standard - C formats. Details of this encoding scheme may be found in the file - exp_dbug.ads in the GNAT source distribution. However, the details of - this encoding are, in general, of no interest to a user, since `GDB' - automatically performs the necessary decoding. - - When a program is bound and linked, the debugging information is - collected from the object files, and stored in the executable image of - the program. Again, this process significantly increases the size of - the generated executable file, but it does not increase the size of the - executable program itself. Furthermore, if this program is run in the - normal manner, it runs exactly as if the debug information were not - present, and takes no more actual memory. - - However, if the program is run under control of `GDB', the debugger - is activated. The image of the program is loaded, at which point it is - ready to run. If a run command is given, then the program will run - exactly as it would have if `GDB' were not present. This is a crucial - part of the `GDB' design philosophy. `GDB' is entirely non-intrusive - until a breakpoint is encountered. If no breakpoint is ever hit, the - program will run exactly as it would if no debugger were present. When - a breakpoint is hit, `GDB' accesses the debugging information and can - respond to user commands to inspect variables, and more generally to - report on the state of execution. - -  - File: gnat_ug_wnt.info, Node: Running GDB, Next: Introduction to GDB Commands, Prev: The GNAT Debugger GDB, Up: Running and Debugging Ada Programs - - Running GDB - =========== - - The debugger can be launched directly and simply from `glide' or - through its graphical interface: `gvd'. It can also be used directly in - text mode. Here is described the basic use of `GDB' in text mode. All - the commands described below can be used in the `gvd' console window - eventhough there is usually other more graphical ways to achieve the - same goals. - - The command to run de graphical interface of the debugger is - $ gvd program - - The command to run `GDB' in text mode is - - $ gdb program - - where `program' is the name of the executable file. This activates the - debugger and results in a prompt for debugger commands. The simplest - command is simply `run', which causes the program to run exactly as if - the debugger were not present. The following section describes some of - the additional commands that can be given to `GDB'. - -  - File: gnat_ug_wnt.info, Node: Introduction to GDB Commands, Next: Using Ada Expressions, Prev: Running GDB, Up: Running and Debugging Ada Programs - - Introduction to GDB Commands - ============================ - - `GDB' contains a large repertoire of commands. The manual `Debugging - with GDB' includes extensive documentation on the use of these - commands, together with examples of their use. Furthermore, the command - HELP invoked from within `GDB' activates a simple help facility which - summarizes the available commands and their options. In this section - we summarize a few of the most commonly used commands to give an idea - of what `GDB' is about. You should create a simple program with - debugging information and experiment with the use of these `GDB' - commands on the program as you read through the following section. - - `set args ARGUMENTS' - The ARGUMENTS list above is a list of arguments to be passed to - the program on a subsequent run command, just as though the - arguments had been entered on a normal invocation of the program. - The `set args' command is not needed if the program does not - require arguments. - - `run' - The `run' command causes execution of the program to start from - the beginning. If the program is already running, that is to say if - you are currently positioned at a breakpoint, then a prompt will - ask for confirmation that you want to abandon the current - execution and restart. - - `breakpoint LOCATION' - The breakpoint command sets a breakpoint, that is to say a point - at which execution will halt and `GDB' will await further - commands. LOCATION is either a line number within a file, given in - the format `file:linenumber', or it is the name of a subprogram. - If you request that a breakpoint be set on a subprogram that is - overloaded, a prompt will ask you to specify on which of those - subprograms you want to breakpoint. You can also specify that all - of them should be breakpointed. If the program is run and - execution encounters the breakpoint, then the program stops and - `GDB' signals that the breakpoint was encountered by printing the - line of code before which the program is halted. - - `breakpoint exception NAME' - A special form of the breakpoint command which breakpoints whenever - exception NAME is raised. If NAME is omitted, then a breakpoint - will occur when any exception is raised. - - `print EXPRESSION' - This will print the value of the given expression. Most simple Ada - expression formats are properly handled by `GDB', so the expression - can contain function calls, variables, operators, and attribute - references. - - `continue' - Continues execution following a breakpoint, until the next - breakpoint or the termination of the program. - - `step' - Executes a single line after a breakpoint. If the next statement - is a subprogram call, execution continues into (the first - statement of) the called subprogram. - - `next' - Executes a single line. If this line is a subprogram call, - executes and returns from the call. - - `list' - Lists a few lines around the current source location. In practice, - it is usually more convenient to have a separate edit window open - with the relevant source file displayed. Successive applications - of this command print subsequent lines. The command can be given - an argument which is a line number, in which case it displays a - few lines around the specified one. - - `backtrace' - Displays a backtrace of the call chain. This command is typically - used after a breakpoint has occurred, to examine the sequence of - calls that leads to the current breakpoint. The display includes - one line for each activation record (frame) corresponding to an - active subprogram. - - `up' - At a breakpoint, `GDB' can display the values of variables local - to the current frame. The command `up' can be used to examine the - contents of other active frames, by moving the focus up the stack, - that is to say from callee to caller, one frame at a time. - - `down' - Moves the focus of `GDB' down from the frame currently being - examined to the frame of its callee (the reverse of the previous - command), - - `frame N' - Inspect the frame with the given number. The value 0 denotes the - frame of the current breakpoint, that is to say the top of the - call stack. - - The above list is a very short introduction to the commands that - `GDB' provides. Important additional capabilities, including conditional - breakpoints, the ability to execute command sequences on a breakpoint, - the ability to debug at the machine instruction level and many other - features are described in detail in `Debugging with GDB'. Note that - most commands can be abbreviated (for example, c for continue, bt for - backtrace). - -  - File: gnat_ug_wnt.info, Node: Using Ada Expressions, Next: Calling User-Defined Subprograms, Prev: Introduction to GDB Commands, Up: Running and Debugging Ada Programs - - Using Ada Expressions - ===================== - - `GDB' supports a fairly large subset of Ada expression syntax, with some - extensions. The philosophy behind the design of this subset is - - * That `GDB' should provide basic literals and access to operations - for arithmetic, dereferencing, field selection, indexing, and - subprogram calls, leaving more sophisticated computations to - subprograms written into the program (which therefore may be - called from `GDB'). - - * That type safety and strict adherence to Ada language restrictions - are not particularly important to the `GDB' user. - - * That brevity is important to the `GDB' user. - - Thus, for brevity, the debugger acts as if there were implicit - `with' and `use' clauses in effect for all user-written packages, thus - making it unnecessary to fully qualify most names with their packages, - regardless of context. Where this causes ambiguity, `GDB' asks the - user's intent. - - For details on the supported Ada syntax, see `Debugging with GDB'. - -  - File: gnat_ug_wnt.info, Node: Calling User-Defined Subprograms, Next: Using the Next Command in a Function, Prev: Using Ada Expressions, Up: Running and Debugging Ada Programs - - Calling User-Defined Subprograms - ================================ - - An important capability of `GDB' is the ability to call user-defined - subprograms while debugging. This is achieved simply by entering a - subprogram call statement in the form: - - call subprogram-name (parameters) - - The keyword `call' can be omitted in the normal case where the - `subprogram-name' does not coincide with any of the predefined `GDB' - commands. - - The effect is to invoke the given subprogram, passing it the list of - parameters that is supplied. The parameters can be expressions and can - include variables from the program being debugged. The subprogram must - be defined at the library level within your program, and `GDB' will - call the subprogram within the environment of your program execution - (which means that the subprogram is free to access or even modify - variables within your program). - - The most important use of this facility is in allowing the inclusion - of debugging routines that are tailored to particular data structures - in your program. Such debugging routines can be written to provide a - suitably high-level description of an abstract type, rather than a - low-level dump of its physical layout. After all, the standard `GDB - print' command only knows the physical layout of your types, not their - abstract meaning. Debugging routines can provide information at the - desired semantic level and are thus enormously useful. - - For example, when debugging GNAT itself, it is crucial to have - access to the contents of the tree nodes used to represent the program - internally. But tree nodes are represented simply by an integer value - (which in turn is an index into a table of nodes). Using the `print' - command on a tree node would simply print this integer value, which is - not very useful. But the PN routine (defined in file treepr.adb in the - GNAT sources) takes a tree node as input, and displays a useful high - level representation of the tree node, which includes the syntactic - category of the node, its position in the source, the integers that - denote descendant nodes and parent node, as well as varied semantic - information. To study this example in more detail, you might want to - look at the body of the PN procedure in the stated file. - -  - File: gnat_ug_wnt.info, Node: Using the Next Command in a Function, Next: Ada Exceptions, Prev: Calling User-Defined Subprograms, Up: Running and Debugging Ada Programs - - Using the Next Command in a Function - ==================================== - - When you use the `next' command in a function, the current source - location will advance to the next statement as usual. A special case - arises in the case of a `return' statement. - - Part of the code for a return statement is the "epilog" of the - function. This is the code that returns to the caller. There is only - one copy of this epilog code, and it is typically associated with the - last return statement in the function if there is more than one return. - In some implementations, this epilog is associated with the first - statement of the function. - - The result is that if you use the `next' command from a return - statement that is not the last return statement of the function you may - see a strange apparent jump to the last return statement or to the - start of the function. You should simply ignore this odd jump. The - value returned is always that from the first return statement that was - stepped through. - -  - File: gnat_ug_wnt.info, Node: Ada Exceptions, Next: Ada Tasks, Prev: Using the Next Command in a Function, Up: Running and Debugging Ada Programs - - Breaking on Ada Exceptions - ========================== - - You can set breakpoints that trip when your program raises selected - exceptions. - - `break exception' - Set a breakpoint that trips whenever (any task in the) program - raises any exception. - - `break exception NAME' - Set a breakpoint that trips whenever (any task in the) program - raises the exception NAME. - - `break exception unhandled' - Set a breakpoint that trips whenever (any task in the) program - raises an exception for which there is no handler. - - `info exceptions' - `info exceptions REGEXP' - The `info exceptions' command permits the user to examine all - defined exceptions within Ada programs. With a regular expression, - REGEXP, as argument, prints out only those exceptions whose name - matches REGEXP. - -  - File: gnat_ug_wnt.info, Node: Ada Tasks, Next: Debugging Generic Units, Prev: Ada Exceptions, Up: Running and Debugging Ada Programs - - Ada Tasks - ========= - - `GDB' allows the following task-related commands: - - `info tasks' - This command shows a list of current Ada tasks, as in the - following example: - - (gdb) info tasks - ID TID P-ID Thread Pri State Name - 1 8088000 0 807e000 15 Child Activation Wait main_task - 2 80a4000 1 80ae000 15 Accept/Select Wait b - 3 809a800 1 80a4800 15 Child Activation Wait a - * 4 80ae800 3 80b8000 15 Running c - - In this listing, the asterisk before the first task indicates it - to be the currently running task. The first column lists the task - ID that is used to refer to tasks in the following commands. - - `break LINESPEC task TASKID' - `break LINESPEC task TASKID if ...' - These commands are like the `break ... thread ...'. LINESPEC - specifies source lines. - - Use the qualifier `task TASKID' with a breakpoint command to - specify that you only want `GDB' to stop the program when a - particular Ada task reaches this breakpoint. TASKID is one of the - numeric task identifiers assigned by `GDB', shown in the first - column of the `info tasks' display. - - If you do not specify `task TASKID' when you set a breakpoint, the - breakpoint applies to _all_ tasks of your program. - - You can use the `task' qualifier on conditional breakpoints as - well; in this case, place `task TASKID' before the breakpoint - condition (before the `if'). - - `task TASKNO' - This command allows to switch to the task referred by TASKNO. In - particular, This allows to browse the backtrace of the specified - task. It is advised to switch back to the original task before - continuing execution otherwise the scheduling of the program may be - perturbated. - - For more detailed information on the tasking support, see `Debugging - with GDB'. - -  - File: gnat_ug_wnt.info, Node: Debugging Generic Units, Next: GNAT Abnormal Termination or Failure to Terminate, Prev: Ada Tasks, Up: Running and Debugging Ada Programs - - Debugging Generic Units - ======================= - - GNAT always uses code expansion for generic instantiation. This means - that each time an instantiation occurs, a complete copy of the original - code is made, with appropriate substitutions of formals by actuals. - - It is not possible to refer to the original generic entities in - `GDB', but it is always possible to debug a particular instance of a - generic, by using the appropriate expanded names. For example, if we - have - - procedure g is - - generic package k is - procedure kp (v1 : in out integer); - end k; - - package body k is - procedure kp (v1 : in out integer) is - begin - v1 := v1 + 1; - end kp; - end k; - - package k1 is new k; - package k2 is new k; - - var : integer := 1; - - begin - k1.kp (var); - k2.kp (var); - k1.kp (var); - k2.kp (var); - end; - - Then to break on a call to procedure kp in the k2 instance, simply use - the command: - - (gdb) break g.k2.kp - - When the breakpoint occurs, you can step through the code of the - instance in the normal manner and examine the values of local - variables, as for other units. - -  - File: gnat_ug_wnt.info, Node: GNAT Abnormal Termination or Failure to Terminate, Next: Naming Conventions for GNAT Source Files, Prev: Debugging Generic Units, Up: Running and Debugging Ada Programs - - GNAT Abnormal Termination or Failure to Terminate - ================================================= - - When presented with programs that contain serious errors in syntax or - semantics, GNAT may on rare occasions experience problems in - operation, such as aborting with a segmentation fault or illegal memory - access, raising an internal exception, terminating abnormally, or - failing to terminate at all. In such cases, you can activate various - features of GNAT that can help you pinpoint the construct in your - program that is the likely source of the problem. - - The following strategies are presented in increasing order of - difficulty, corresponding to your experience in using GNAT and your - familiarity with compiler internals. - - 1. Run `gcc' with the `-gnatf'. This first switch causes all errors - on a given line to be reported. In its absence, only the first - error on a line is displayed. - - The `-gnatdO' switch causes errors to be displayed as soon as they - are encountered, rather than after compilation is terminated. If - GNAT terminates prematurely or goes into an infinite loop, the - last error message displayed may help to pinpoint the culprit. - - 2. Run `gcc' with the `-v (verbose)' switch. In this mode, `gcc' - produces ongoing information about the progress of the compilation - and provides the name of each procedure as code is generated. This - switch allows you to find which Ada procedure was being compiled - when it encountered a code generation problem. - - 3. Run `gcc' with the `-gnatdc' switch. This is a GNAT specific - switch that does for the front-end what `-v' does for the back end. - The system prints the name of each unit, either a compilation unit - or nested unit, as it is being analyzed. - - 4. Finally, you can start `gdb' directly on the `gnat1' executable. - `gnat1' is the front-end of GNAT, and can be run independently - (normally it is just called from `gcc'). You can use `gdb' on - `gnat1' as you would on a C program (but *note The GNAT Debugger - GDB:: for caveats). The `where' command is the first line of - attack; the variable `lineno' (seen by `print lineno'), used by - the second phase of `gnat1' and by the `gcc' backend, indicates - the source line at which the execution stopped, and `input_file - name' indicates the name of the source file. - -  - File: gnat_ug_wnt.info, Node: Naming Conventions for GNAT Source Files, Next: Getting Internal Debugging Information, Prev: GNAT Abnormal Termination or Failure to Terminate, Up: Running and Debugging Ada Programs - - Naming Conventions for GNAT Source Files - ======================================== - - In order to examine the workings of the GNAT system, the following - brief description of its organization may be helpful: - - * Files with prefix `sc' contain the lexical scanner. - - * All files prefixed with `par' are components of the parser. The - numbers correspond to chapters of the Ada 95 Reference Manual. For - example, parsing of select statements can be found in - `par-ch9.adb'. - - * All files prefixed with `sem' perform semantic analysis. The - numbers correspond to chapters of the Ada standard. For example, - all issues involving context clauses can be found in - `sem_ch10.adb'. In addition, some features of the language require - sufficient special processing to justify their own semantic files: - sem_aggr for aggregates, sem_disp for dynamic dispatching, etc. - - * All files prefixed with `exp' perform normalization and expansion - of the intermediate representation (abstract syntax tree, or AST). - these files use the same numbering scheme as the parser and - semantics files. For example, the construction of record - initialization procedures is done in `exp_ch3.adb'. - - * The files prefixed with `bind' implement the binder, which - verifies the consistency of the compilation, determines an order of - elaboration, and generates the bind file. - - * The files `atree.ads' and `atree.adb' detail the low-level data - structures used by the front-end. - - * The files `sinfo.ads' and `sinfo.adb' detail the structure of the - abstract syntax tree as produced by the parser. - - * The files `einfo.ads' and `einfo.adb' detail the attributes of all - entities, computed during semantic analysis. - - * Library management issues are dealt with in files with prefix - `lib'. - - * Ada files with the prefix `a-' are children of `Ada', as defined - in Annex A. - - * Files with prefix `i-' are children of `Interfaces', as defined in - Annex B. - - * Files with prefix `s-' are children of `System'. This includes - both language-defined children and GNAT run-time routines. - - * Files with prefix `g-' are children of `GNAT'. These are useful - general-purpose packages, fully documented in their - specifications. All the other `.c' files are modifications of - common `gcc' files. - -  - File: gnat_ug_wnt.info, Node: Getting Internal Debugging Information, Next: Stack Traceback, Prev: Naming Conventions for GNAT Source Files, Up: Running and Debugging Ada Programs - - Getting Internal Debugging Information - ====================================== - - Most compilers have internal debugging switches and modes. GNAT does - also, except GNAT internal debugging switches and modes are not secret. - A summary and full description of all the compiler and binder debug - flags are in the file `debug.adb'. You must obtain the sources of the - compiler to see the full detailed effects of these flags. - - The switches that print the source of the program (reconstructed from - the internal tree) are of general interest for user programs, as are the - options to print the full internal tree, and the entity table (the - symbol table information). The reconstructed source provides a readable - version of the program after the front-end has completed analysis and - expansion, and is useful when studying the performance of specific - constructs. For example, constraint checks are indicated, complex - aggregates are replaced with loops and assignments, and tasking - primitives are replaced with run-time calls. - -  - File: gnat_ug_wnt.info, Node: Stack Traceback, Prev: Getting Internal Debugging Information, Up: Running and Debugging Ada Programs - - Stack Traceback - =============== - - Traceback is a mechanism to display the sequence of subprogram calls - that leads to a specified execution point in a program. Often (but not - always) the execution point is an instruction at which an exception has - been raised. This mechanism is also known as stack unwinding because - it obtains its information by scanning the run-time stack and - recovering the activation records of all active subprograms. Stack - unwinding is one of the most important tools for program debugging. - - The first entry stored in traceback corresponds to the deepest calling - level, that is to say the subprogram currently executing the instruction - from which we want to obtain the traceback. - - Note that there is no runtime performance penalty when stack traceback - is enabled and no exception are raised during program execution. - - * Menu: - - * Non-Symbolic Traceback:: - * Symbolic Traceback:: - -  - File: gnat_ug_wnt.info, Node: Non-Symbolic Traceback, Next: Symbolic Traceback, Up: Stack Traceback - - Non-Symbolic Traceback - ---------------------- - - Note: this feature is not supported on all platforms. See - `GNAT.Traceback spec in g-traceb.ads' for a complete list of supported - platforms. - - * Menu: - - * Tracebacks From an Unhandled Exception:: - * Tracebacks From Exception Occurrences (non-symbolic):: - * Tracebacks From Anywhere in a Program (non-symbolic):: - -  - File: gnat_ug_wnt.info, Node: Tracebacks From an Unhandled Exception, Next: Tracebacks From Exception Occurrences (non-symbolic), Up: Non-Symbolic Traceback - - Tracebacks From an Unhandled Exception - ...................................... - - A runtime non-symbolic traceback is a list of addresses of call - instructions. To enable this feature you must use the `-E' - `gnatbind''s option. With this option a stack traceback is stored as - part of exception information. It is possible to retrieve this - information using the standard `Ada.Exception.Exception_Information' - routine. - - Let's have a look at a simple example: - - procedure STB is - - procedure P1 is - begin - raise Constraint_Error; - end P1; - - procedure P2 is - begin - P1; - end P2; - - begin - P2; - end STB; - - $ gnatmake stb -bargs -E - $ stb - - Execution terminated by unhandled exception - Exception name: CONSTRAINT_ERROR - Message: stb.adb:5 - Call stack traceback locations: - 0x401373 0x40138b 0x40139c 0x401335 0x4011c4 0x4011f1 0x77e892a4 - - As we see the traceback lists a sequence of addresses for the unhandled - exception `CONSTAINT_ERROR' raised in procedure P1. It is easy to guess - that this exception come from procedure P1. To translate these - addresses into the source lines where the calls appear, the `addr2line' - tool, described below, is invaluable. The use of this tool requires the - program to be compiled with debug information. - - $ gnatmake -g stb -bargs -E - $ stb - - Execution terminated by unhandled exception - Exception name: CONSTRAINT_ERROR - Message: stb.adb:5 - Call stack traceback locations: - 0x401373 0x40138b 0x40139c 0x401335 0x4011c4 0x4011f1 0x77e892a4 - - $ addr2line --exe=stb 0x401373 0x40138b 0x40139c 0x401335 0x4011c4 - 0x4011f1 0x77e892a4 - - 00401373 at d:/stb/stb.adb:5 - 0040138B at d:/stb/stb.adb:10 - 0040139C at d:/stb/stb.adb:14 - 00401335 at d:/stb/b~stb.adb:104 - 004011C4 at /build/.../crt1.c:200 - 004011F1 at /build/.../crt1.c:222 - 77E892A4 in ?? at ??:0 - - `addr2line' has a number of other useful options: - - `--functions' - to get the function name corresponding to any location - - `--demangle=gnat' - to use the gnat decoding mode for the function names. Note that - for binutils version 2.9.x the option is simply `--demangle'. - - $ addr2line --exe=stb --functions --demangle=gnat 0x401373 0x40138b - 0x40139c 0x401335 0x4011c4 0x4011f1 - - 00401373 in stb.p1 at d:/stb/stb.adb:5 - 0040138B in stb.p2 at d:/stb/stb.adb:10 - 0040139C in stb at d:/stb/stb.adb:14 - 00401335 in main at d:/stb/b~stb.adb:104 - 004011C4 in <__mingw_CRTStartup> at /build/.../crt1.c:200 - 004011F1 in at /build/.../crt1.c:222 - - From this traceback we can see that the exception was raised in - `stb.adb' at line 5, which was reached from a procedure call in - `stb.adb' at line 10, and so on. The `b~std.adb' is the binder file, - which contains the call to the main program. *note Running gnatbind::. - The remaining entries are assorted runtime routines, and the output - will vary from platform to platform. - - It is also possible to use `GDB' with these traceback addresses to debug - the program. For example, we can break at a given code location, as - reported in the stack traceback: - - $ gdb -nw stb - - Furthermore, this feature is not implemented inside Windows DLL. Only - the non-symbolic traceback is reported in this case. - - (gdb) break *0x401373 - Breakpoint 1 at 0x401373: file stb.adb, line 5. - - It is important to note that the stack traceback addresses do not - change when debug information is included. This is particularly useful - because it makes it possible to release software without debug - information (to minimize object size), get a field report that includes - a stack traceback whenever an internal bug occurs, and then be able to - retrieve the sequence of calls with the same program compiled with - debug information. - -  - File: gnat_ug_wnt.info, Node: Tracebacks From Exception Occurrences (non-symbolic), Next: Tracebacks From Anywhere in a Program (non-symbolic), Prev: Tracebacks From an Unhandled Exception, Up: Non-Symbolic Traceback - - Tracebacks From Exception Occurrences - ..................................... - - Non-symbolic tracebacks are obtained by using the `-E' binder argument. - The stack traceback is attached to the exception information string, - and can be retrieved in an exception handler within the Ada program, by - means of the Ada95 facilities defined in `Ada.Exceptions'. Here is a - simple example: - - with Ada.Text_IO; - with Ada.Exceptions; - - procedure STB is - - use Ada; - use Ada.Exceptions; - - procedure P1 is - K : Positive := 1; - begin - K := K - 1; - exception - when E : others => - Text_IO.Put_Line (Exception_Information (E)); - end P1; - - procedure P2 is - begin - P1; - end P2; - - begin - P2; - end STB; - - This program will output: - - $ stb - - Exception name: CONSTRAINT_ERROR - Message: stb.adb:12 - Call stack traceback locations: - 0x4015e4 0x401633 0x401644 0x401461 0x4011c4 0x4011f1 0x77e892a4 - -  - File: gnat_ug_wnt.info, Node: Tracebacks From Anywhere in a Program (non-symbolic), Prev: Tracebacks From Exception Occurrences (non-symbolic), Up: Non-Symbolic Traceback - - Tracebacks From Anywhere in a Program - ..................................... - - It is also possible to retrieve a stack traceback from anywhere in a - program. For this you need to use the `GNAT.Traceback' API. This - package includes a procedure called `Call_Chain' that computes a - complete stack traceback, as well as useful display procedures - described below. It is not necessary to use the `-E gnatbind' option in - this case, because the stack traceback mechanism is invoked explicitly. - - In the following example we compute a traceback at a specific location - in the program, and we display it using `GNAT.Debug_Utilities.Image' to - convert addresses to strings: - - with Ada.Text_IO; - with GNAT.Traceback; - with GNAT.Debug_Utilities; - - procedure STB is - - use Ada; - use GNAT; - use GNAT.Traceback; - - procedure P1 is - TB : Tracebacks_Array (1 .. 10); - -- We are asking for a maximum of 10 stack frames. - Len : Natural; - -- Len will receive the actual number of stack frames returned. - begin - Call_Chain (TB, Len); - - Text_IO.Put ("In STB.P1 : "); - - for K in 1 .. Len loop - Text_IO.Put (Debug_Utilities.Image (TB (K))); - Text_IO.Put (' '); - end loop; - - Text_IO.New_Line; - end P1; - - procedure P2 is - begin - P1; - end P2; - - begin - P2; - end STB; - - $ gnatmake stb - $ stb - - In STB.P1 : 16#0040_F1E4# 16#0040_14F2# 16#0040_170B# 16#0040_171C# - 16#0040_1461# 16#0040_11C4# 16#0040_11F1# 16#77E8_92A4# - -  - File: gnat_ug_wnt.info, Node: Symbolic Traceback, Prev: Non-Symbolic Traceback, Up: Stack Traceback - - Symbolic Traceback - ------------------ - - A symbolic traceback is a stack traceback in which procedure names are - associated with each code location. - - Note that this feature is not supported on all platforms. See - `GNAT.Traceback.Symbolic spec in g-trasym.ads' for a complete list of - currently supported platforms. - - Note that the symbolic traceback requires that the program be compiled - with debug information. If it is not compiled with debug information - only the non-symbolic information will be valid. - - * Menu: - - * Tracebacks From Exception Occurrences (symbolic):: - * Tracebacks From Anywhere in a Program (symbolic):: - -  - File: gnat_ug_wnt.info, Node: Tracebacks From Exception Occurrences (symbolic), Next: Tracebacks From Anywhere in a Program (symbolic), Up: Symbolic Traceback - - Tracebacks From Exception Occurrences - ..................................... - - with Ada.Text_IO; - with GNAT.Traceback.Symbolic; - - procedure STB is - - procedure P1 is - begin - raise Constraint_Error; - end P1; - - procedure P2 is - begin - P1; - end P2; - - procedure P3 is - begin - P2; - end P3; - - begin - P3; - exception - when E : others => - Ada.Text_IO.Put_Line (GNAT.Traceback.Symbolic.Symbolic_Traceback (E)); - end STB; - - $ gnatmake -g stb -bargs -E -largs -lgnat -laddr2line -lintl - $ stb - - 0040149F in stb.p1 at stb.adb:8 - 004014B7 in stb.p2 at stb.adb:13 - 004014CF in stb.p3 at stb.adb:18 - 004015DD in ada.stb at stb.adb:22 - 00401461 in main at b~stb.adb:168 - 004011C4 in __mingw_CRTStartup at crt1.c:200 - 004011F1 in mainCRTStartup at crt1.c:222 - 77E892A4 in ?? at ??:0 - - The exact sequence of linker options may vary from platform to platform. - The above `-largs' section is for Windows platforms. By contrast, under - Unix there is no need for the `-largs' section. Differences across - platforms are due to details of linker implementation. - -  - File: gnat_ug_wnt.info, Node: Tracebacks From Anywhere in a Program (symbolic), Prev: Tracebacks From Exception Occurrences (symbolic), Up: Symbolic Traceback - - Tracebacks From Anywhere in a Program - ..................................... - - It is possible to get a symbolic stack traceback from anywhere in a - program, just as for non-symbolic tracebacks. The first step is to - obtain a non-symbolic traceback, and then call `Symbolic_Traceback' to - compute the symbolic information. Here is an example: - - with Ada.Text_IO; - with GNAT.Traceback; - with GNAT.Traceback.Symbolic; - - procedure STB is - - use Ada; - use GNAT.Traceback; - use GNAT.Traceback.Symbolic; - - procedure P1 is - TB : Tracebacks_Array (1 .. 10); - -- We are asking for a maximum of 10 stack frames. - Len : Natural; - -- Len will receive the actual number of stack frames returned. - begin - Call_Chain (TB, Len); - Text_IO.Put_Line (Symbolic_Traceback (TB (1 .. Len))); - end P1; - - procedure P2 is - begin - P1; - end P2; - - begin - P2; - end STB; - -  - File: gnat_ug_wnt.info, Node: Inline Assembler, Next: Microsoft Windows Topics, Prev: Running and Debugging Ada Programs, Up: Top - - Inline Assembler - **************** - - If you need to write low-level software that interacts directly with - the hardware, Ada provides two ways to incorporate assembly language - code into your program. First, you can import and invoke external - routines written in assembly language, an Ada feature fully supported - by GNAT. However, for small sections of code it may be simpler or more - efficient to include assembly language statements directly in your Ada - source program, using the facilities of the implementation-defined - package `System.Machine_Code', which incorporates the gcc Inline - Assembler. The Inline Assembler approach offers a number of - advantages, including the following: - - * No need to use non-Ada tools - - * Consistent interface over different targets - - * Automatic usage of the proper calling conventions - - * Access to Ada constants and variables - - * Definition of intrinsic routines - - * Possibility of inlining a subprogram comprising assembler code - - * Code optimizer can take Inline Assembler code into account - - This chapter presents a series of examples to show you how to use - the Inline Assembler. Although it focuses on the Intel x86, the - general approach applies also to other processors. It is assumed that - you are familiar with Ada and with assembly language programming. - - * Menu: - - * Basic Assembler Syntax:: - * A Simple Example of Inline Assembler:: - * Output Variables in Inline Assembler:: - * Input Variables in Inline Assembler:: - * Inlining Inline Assembler Code:: - * Other Asm Functionality:: - * A Complete Example:: - -  - File: gnat_ug_wnt.info, Node: Basic Assembler Syntax, Next: A Simple Example of Inline Assembler, Up: Inline Assembler - - Basic Assembler Syntax - ====================== - - The assembler used by GNAT and gcc is based not on the Intel assembly - language, but rather on a language that descends from the AT&T Unix - assembler _as_ (and which is often referred to as "AT&T syntax"). The - following table summarizes the main features of _as_ syntax and points - out the differences from the Intel conventions. See the gcc _as_ and - _gas_ (an _as_ macro pre-processor) documentation for further - information. - - Register names - gcc / _as_: Prefix with "%"; for example `%eax' - Intel: No extra punctuation; for example `eax' - - Immediate operand - gcc / _as_: Prefix with "$"; for example `$4' - Intel: No extra punctuation; for example `4' - - Address - gcc / _as_: Prefix with "$"; for example `$loc' - Intel: No extra punctuation; for example `loc' - - Memory contents - gcc / _as_: No extra punctuation; for example `loc' - Intel: Square brackets; for example `[loc]' - - Register contents - gcc / _as_: Parentheses; for example `(%eax)' - Intel: Square brackets; for example `[eax]' - - Hexadecimal numbers - gcc / _as_: Leading "0x" (C language syntax); for example `0xA0' - Intel: Trailing "h"; for example `A0h' - - Operand size - gcc / _as_: Explicit in op code; for example `movw' to move a - 16-bit word - Intel: Implicit, deduced by assembler; for example `mov' - - Instruction repetition - gcc / _as_: Split into two lines; for example - `rep' - `stosl' - Intel: Keep on one line; for example `rep stosl' - - Order of operands - gcc / _as_: Source first; for example `movw $4, %eax' - Intel: Destination first; for example `mov eax, 4' - -  - File: gnat_ug_wnt.info, Node: A Simple Example of Inline Assembler, Next: Output Variables in Inline Assembler, Prev: Basic Assembler Syntax, Up: Inline Assembler - - A Simple Example of Inline Assembler - ==================================== - - The following example will generate a single assembly language - statement, `nop', which does nothing. Despite its lack of run-time - effect, the example will be useful in illustrating the basics of the - Inline Assembler facility. - - with System.Machine_Code; use System.Machine_Code; - procedure Nothing is - begin - Asm ("nop"); - end Nothing; - - `Asm' is a procedure declared in package `System.Machine_Code'; here - it takes one parameter, a _template string_ that must be a static - expression and that will form the generated instruction. `Asm' may be - regarded as a compile-time procedure that parses the template string - and additional parameters (none here), from which it generates a - sequence of assembly language instructions. - - The examples in this chapter will illustrate several of the forms - for invoking `Asm'; a complete specification of the syntax is found in - the `GNAT Reference Manual'. - - Under the standard GNAT conventions, the `Nothing' procedure should - be in a file named `nothing.adb'. You can build the executable in the - usual way: - gnatmake nothing - However, the interesting aspect of this example is not its run-time - behavior but rather the generated assembly code. To see this output, - invoke the compiler as follows: - gcc -c -S -fomit-frame-pointer -gnatp `nothing.adb' - where the options are: - - `-c' - compile only (no bind or link) - - `-S' - generate assembler listing - - `-fomit-frame-pointer' - do not set up separate stack frames - - `-gnatp' - do not add runtime checks - - This gives a human-readable assembler version of the code. The - resulting file will have the same name as the Ada source file, but with - a `.s' extension. In our example, the file `nothing.s' has the - following contents: - - .file "nothing.adb" - gcc2_compiled.: - ___gnu_compiled_ada: - .text - .align 4 - .globl __ada_nothing - __ada_nothing: - #APP - nop - #NO_APP - jmp L1 - .align 2,0x90 - L1: - ret - - The assembly code you included is clearly indicated by the compiler, - between the `#APP' and `#NO_APP' delimiters. The character before the - 'APP' and 'NOAPP' can differ on different targets. For example, Linux - uses '#APP' while on NT you will see '/APP'. - - If you make a mistake in your assembler code (such as using the - wrong size modifier, or using a wrong operand for the instruction) GNAT - will report this error in a temporary file, which will be deleted when - the compilation is finished. Generating an assembler file will help in - such cases, since you can assemble this file separately using the _as_ - assembler that comes with gcc. - - Assembling the file using the command - - as `nothing.s' - - will give you error messages whose lines correspond to the assembler - input file, so you can easily find and correct any mistakes you made. - If there are no errors, _as_ will generate an object file `nothing.out'. - -  - File: gnat_ug_wnt.info, Node: Output Variables in Inline Assembler, Next: Input Variables in Inline Assembler, Prev: A Simple Example of Inline Assembler, Up: Inline Assembler - - Output Variables in Inline Assembler - ==================================== - - The examples in this section, showing how to access the processor - flags, illustrate how to specify the destination operands for assembly - language statements. - - with Interfaces; use Interfaces; - with Ada.Text_IO; use Ada.Text_IO; - with System.Machine_Code; use System.Machine_Code; - procedure Get_Flags is - Flags : Unsigned_32; - use ASCII; - begin - Asm ("pushfl" & LF & HT & -- push flags on stack - "popl %%eax" & LF & HT & -- load eax with flags - "movl %%eax, %0", -- store flags in variable - Outputs => Unsigned_32'Asm_Output ("=g", Flags)); - Put_Line ("Flags register:" & Flags'Img); - end Get_Flags; - - In order to have a nicely aligned assembly listing, we have separated - multiple assembler statements in the Asm template string with linefeed - (ASCII.LF) and horizontal tab (ASCII.HT) characters. The resulting - section of the assembly output file is: - - #APP - pushfl - popl %eax - movl %eax, -40(%ebp) - #NO_APP - - It would have been legal to write the Asm invocation as: - - Asm ("pushfl popl %%eax movl %%eax, %0") - - but in the generated assembler file, this would come out as: - - #APP - pushfl popl %eax movl %eax, -40(%ebp) - #NO_APP - - which is not so convenient for the human reader. - - We use Ada comments at the end of each line to explain what the - assembler instructions actually do. This is a useful convention. - - When writing Inline Assembler instructions, you need to precede each - register and variable name with a percent sign. Since the assembler - already requires a percent sign at the beginning of a register name, - you need two consecutive percent signs for such names in the Asm - template string, thus `%%eax'. In the generated assembly code, one of - the percent signs will be stripped off. - - Names such as `%0', `%1', `%2', etc., denote input or output - variables: operands you later define using `Input' or `Output' - parameters to `Asm'. An output variable is illustrated in the third - statement in the Asm template string: - movl %%eax, %0 - The intent is to store the contents of the eax register in a - variable that can be accessed in Ada. Simply writing `movl %%eax, - Flags' would not necessarily work, since the compiler might optimize by - using a register to hold Flags, and the expansion of the `movl' - instruction would not be aware of this optimization. The solution is - not to store the result directly but rather to advise the compiler to - choose the correct operand form; that is the purpose of the `%0' output - variable. - - Information about the output variable is supplied in the `Outputs' - parameter to `Asm': - Outputs => Unsigned_32'Asm_Output ("=g", Flags)); - - The output is defined by the `Asm_Output' attribute of the target - type; the general format is - Type'Asm_Output (constraint_string, variable_name) - - The constraint string directs the compiler how to store/access the - associated variable. In the example - Unsigned_32'Asm_Output ("=m", Flags); - the `"m"' (memory) constraint tells the compiler that the variable - `Flags' should be stored in a memory variable, thus preventing the - optimizer from keeping it in a register. In contrast, - Unsigned_32'Asm_Output ("=r", Flags); - uses the `"r"' (register) constraint, telling the compiler to store - the variable in a register. - - If the constraint is preceded by the equal character (*=*), it tells - the compiler that the variable will be used to store data into it. - - In the `Get_Flags' example, we used the "g" (global) constraint, - allowing the optimizer to choose whatever it deems best. - - There are a fairly large number of constraints, but the ones that - are most useful (for the Intel x86 processor) are the following: - - `=' - output constraint - - `g' - global (i.e. can be stored anywhere) - - `m' - in memory - - `I' - a constant - - `a' - use eax - - `b' - use ebx - - `c' - use ecx - - `d' - use edx - - `S' - use esi - - `D' - use edi - - `r' - use one of eax, ebx, ecx or edx - - `q' - use one of eax, ebx, ecx, edx, esi or edi - - The full set of constraints is described in the gcc and _as_ - documentation; note that it is possible to combine certain constraints - in one constraint string. - - You specify the association of an output variable with an assembler - operand through the `%'_n_ notation, where _n_ is a non-negative - integer. Thus in - Asm ("pushfl" & LF & HT & -- push flags on stack - "popl %%eax" & LF & HT & -- load eax with flags - "movl %%eax, %0", -- store flags in variable - Outputs => Unsigned_32'Asm_Output ("=g", Flags)); - - `%0' will be replaced in the expanded code by the appropriate operand, - whatever the compiler decided for the `Flags' variable. - - In general, you may have any number of output variables: - * Count the operands starting at 0; thus `%0', `%1', etc. - - * Specify the `Outputs' parameter as a parenthesized comma-separated - list of `Asm_Output' attributes - - For example: - Asm ("movl %%eax, %0" & LF & HT & - "movl %%ebx, %1" & LF & HT & - "movl %%ecx, %2", - Outputs => (Unsigned_32'Asm_Output ("=g", Var_A), -- %0 = Var_A - Unsigned_32'Asm_Output ("=g", Var_B), -- %1 = Var_B - Unsigned_32'Asm_Output ("=g", Var_C))); -- %2 = Var_C - - where `Var_A', `Var_B', and `Var_C' are variables in the Ada program. - - As a variation on the `Get_Flags' example, we can use the - constraints string to direct the compiler to store the eax register - into the `Flags' variable, instead of including the store instruction - explicitly in the `Asm' template string: - - with Interfaces; use Interfaces; - with Ada.Text_IO; use Ada.Text_IO; - with System.Machine_Code; use System.Machine_Code; - procedure Get_Flags_2 is - Flags : Unsigned_32; - use ASCII; - begin - Asm ("pushfl" & LF & HT & -- push flags on stack - "popl %%eax", -- save flags in eax - Outputs => Unsigned_32'Asm_Output ("=a", Flags)); - Put_Line ("Flags register:" & Flags'Img); - end Get_Flags_2; - - The `"a"' constraint tells the compiler that the `Flags' variable will - come from the eax register. Here is the resulting code: - - #APP - pushfl - popl %eax - #NO_APP - movl %eax,-40(%ebp) - - The compiler generated the store of eax into Flags after expanding the - assembler code. - - Actually, there was no need to pop the flags into the eax register; - more simply, we could just pop the flags directly into the program - variable: - - with Interfaces; use Interfaces; - with Ada.Text_IO; use Ada.Text_IO; - with System.Machine_Code; use System.Machine_Code; - procedure Get_Flags_3 is - Flags : Unsigned_32; - use ASCII; - begin - Asm ("pushfl" & LF & HT & -- push flags on stack - "pop %0", -- save flags in Flags - Outputs => Unsigned_32'Asm_Output ("=g", Flags)); - Put_Line ("Flags register:" & Flags'Img); - end Get_Flags_3; - -  - File: gnat_ug_wnt.info, Node: Input Variables in Inline Assembler, Next: Inlining Inline Assembler Code, Prev: Output Variables in Inline Assembler, Up: Inline Assembler - - Input Variables in Inline Assembler - =================================== - - The example in this section illustrates how to specify the source - operands for assembly language statements. The program simply - increments its input value by 1: - - with Interfaces; use Interfaces; - with Ada.Text_IO; use Ada.Text_IO; - with System.Machine_Code; use System.Machine_Code; - procedure Increment is - - function Incr (Value : Unsigned_32) return Unsigned_32 is - Result : Unsigned_32; - begin - Asm ("incl %0", - Inputs => Unsigned_32'Asm_Input ("a", Value), - Outputs => Unsigned_32'Asm_Output ("=a", Result)); - return Result; - end Incr; - - Value : Unsigned_32; - - begin - Value := 5; - Put_Line ("Value before is" & Value'Img); - Value := Incr (Value); - Put_Line ("Value after is" & Value'Img); - end Increment; - - The `Outputs' parameter to `Asm' specifies that the result will be - in the eax register and that it is to be stored in the `Result' - variable. - - The `Inputs' parameter looks much like the `Outputs' parameter, but - with an `Asm_Input' attribute. The `"="' constraint, indicating an - output value, is not present. - - You can have multiple input variables, in the same way that you can - have more than one output variable. - - The parameter count (%0, %1) etc, now starts at the first input - statement, and continues with the output statements. When both - parameters use the same variable, the compiler will treat them as the - same %n operand, which is the case here. - - Just as the `Outputs' parameter causes the register to be stored - into the target variable after execution of the assembler statements, - so does the `Inputs' parameter cause its variable to be loaded into the - register before execution of the assembler statements. - - Thus the effect of the `Asm' invocation is: - 1. load the 32-bit value of `Value' into eax - - 2. execute the `incl %eax' instruction - - 3. store the contents of eax into the `Result' variable - - The resulting assembler file (with `-O2' optimization) contains: - _increment__incr.1: - subl $4,%esp - movl 8(%esp),%eax - #APP - incl %eax - #NO_APP - movl %eax,%edx - movl %ecx,(%esp) - addl $4,%esp - ret - -  - File: gnat_ug_wnt.info, Node: Inlining Inline Assembler Code, Next: Other Asm Functionality, Prev: Input Variables in Inline Assembler, Up: Inline Assembler - - Inlining Inline Assembler Code - ============================== - - For a short subprogram such as the `Incr' function in the previous - section, the overhead of the call and return (creating / deleting the - stack frame) can be significant, compared to the amount of code in the - subprogram body. A solution is to apply Ada's `Inline' pragma to the - subprogram, which directs the compiler to expand invocations of the - subprogram at the point(s) of call, instead of setting up a stack frame - for out-of-line calls. Here is the resulting program: - - with Interfaces; use Interfaces; - with Ada.Text_IO; use Ada.Text_IO; - with System.Machine_Code; use System.Machine_Code; - procedure Increment_2 is - - function Incr (Value : Unsigned_32) return Unsigned_32 is - Result : Unsigned_32; - begin - Asm ("incl %0", - Inputs => Unsigned_32'Asm_Input ("a", Value), - Outputs => Unsigned_32'Asm_Output ("=a", Result)); - return Result; - end Incr; - pragma Inline (Increment); - - Value : Unsigned_32; - - begin - Value := 5; - Put_Line ("Value before is" & Value'Img); - Value := Increment (Value); - Put_Line ("Value after is" & Value'Img); - end Increment_2; - - Compile the program with both optimization (`-O2') and inlining - enabled (`-gnatpn' instead of `-gnatp'). - - The `Incr' function is still compiled as usual, but at the point in - `Increment' where our function used to be called: - - pushl %edi - call _increment__incr.1 - - the code for the function body directly appears: - - movl %esi,%eax - #APP - incl %eax - #NO_APP - movl %eax,%edx - - thus saving the overhead of stack frame setup and an out-of-line call. - -  - File: gnat_ug_wnt.info, Node: Other Asm Functionality, Next: A Complete Example, Prev: Inlining Inline Assembler Code, Up: Inline Assembler - - Other `Asm' Functionality - ========================= - - This section describes two important parameters to the `Asm' procedure: - `Clobber', which identifies register usage; and `Volatile', which - inhibits unwanted optimizations. - - * Menu: - - * The Clobber Parameter:: - * The Volatile Parameter:: - -  - File: gnat_ug_wnt.info, Node: The Clobber Parameter, Next: The Volatile Parameter, Up: Other Asm Functionality - - The `Clobber' Parameter - ----------------------- - - One of the dangers of intermixing assembly language and a compiled - language such as Ada is that the compiler needs to be aware of which - registers are being used by the assembly code. In some cases, such as - the earlier examples, the constraint string is sufficient to indicate - register usage (e.g. "a" for the eax register). But more generally, the - compiler needs an explicit identification of the registers that are - used by the Inline Assembly statements. - - Using a register that the compiler doesn't know about could be a - side effect of an instruction (like `mull' storing its result in both - eax and edx). It can also arise from explicit register usage in your - assembly code; for example: - Asm ("movl %0, %%ebx" & LF & HT & - "movl %%ebx, %1", - Inputs => Unsigned_32'Asm_Input ("g", Var_In), - Outputs => Unsigned_32'Asm_Output ("=g", Var_Out)); - - where the compiler (since it does not analyze the `Asm' template string) - does not know you are using the ebx register. - - In such cases you need to supply the `Clobber' parameter to `Asm', - to identify the registers that will be used by your assembly code: - - Asm ("movl %0, %%ebx" & LF & HT & - "movl %%ebx, %1", - Inputs => Unsigned_32'Asm_Input ("g", Var_In), - Outputs => Unsigned_32'Asm_Output ("=g", Var_Out), - Clobber => "ebx"); - - The Clobber parameter is a static string expression specifying the - register(s) you are using. Note that register names are _not_ prefixed - by a percent sign. Also, if more than one register is used then their - names are separated by commas; e.g., `"eax, ebx"' - - The `Clobber' parameter has several additional uses: - 1. Use the "register" name `cc' to indicate that flags might have - changed - - 2. Use the "register" name `memory' if you changed a memory location - -  - File: gnat_ug_wnt.info, Node: The Volatile Parameter, Prev: The Clobber Parameter, Up: Other Asm Functionality - - The `Volatile' Parameter - ------------------------ - - Compiler optimizations in the presence of Inline Assembler may - sometimes have unwanted effects. For example, when an `Asm' invocation - with an input variable is inside a loop, the compiler might move the - loading of the input variable outside the loop, regarding it as a - one-time initialization. - - If this effect is not desired, you can disable such optimizations by - setting the `Volatile' parameter to `True'; for example: - - Asm ("movl %0, %%ebx" & LF & HT & - "movl %%ebx, %1", - Inputs => Unsigned_32'Asm_Input ("g", Var_In), - Outputs => Unsigned_32'Asm_Output ("=g", Var_Out), - Clobber => "ebx", - Volatile => True); - - By default, `Volatile' is set to `False' unless there is no `Outputs' - parameter. - - Although setting `Volatile' to `True' prevents unwanted - optimizations, it will also disable other optimizations that might be - important for efficiency. In general, you should set `Volatile' to - `True' only if the compiler's optimizations have created problems. - -  - File: gnat_ug_wnt.info, Node: A Complete Example, Prev: Other Asm Functionality, Up: Inline Assembler - - A Complete Example - ================== - - This section contains a complete program illustrating a realistic usage - of GNAT's Inline Assembler capabilities. It comprises a main procedure - `Check_CPU' and a package `Intel_CPU'. The package declares a - collection of functions that detect the properties of the 32-bit x86 - processor that is running the program. The main procedure invokes - these functions and displays the information. - - The Intel_CPU package could be enhanced by adding functions to - detect the type of x386 co-processor, the processor caching options and - special operations such as the SIMD extensions. - - Although the Intel_CPU package has been written for 32-bit Intel - compatible CPUs, it is OS neutral. It has been tested on DOS, - Windows/NT and Linux. - - * Menu: - - * Check_CPU Procedure:: - * Intel_CPU Package Specification:: - * Intel_CPU Package Body:: - -  - File: gnat_ug_wnt.info, Node: Check_CPU Procedure, Next: Intel_CPU Package Specification, Up: A Complete Example - - `Check_CPU' Procedure - --------------------- - - --------------------------------------------------------------------- - -- -- - -- Uses the Intel_CPU package to identify the CPU the program is -- - -- running on, and some of the features it supports. -- - -- -- - --------------------------------------------------------------------- - - with Intel_CPU; -- Intel CPU detection functions - with Ada.Text_IO; -- Standard text I/O - with Ada.Command_Line; -- To set the exit status - - procedure Check_CPU is - - Type_Found : Boolean := False; - -- Flag to indicate that processor was identified - - Features : Intel_CPU.Processor_Features; - -- The processor features - - Signature : Intel_CPU.Processor_Signature; - -- The processor type signature - - begin - - ----------------------------------- - -- Display the program banner. -- - ----------------------------------- - - Ada.Text_IO.Put_Line (Ada.Command_Line.Command_Name & - ": check Intel CPU version and features, v1.0"); - Ada.Text_IO.Put_Line ("distribute freely, but no warranty whatsoever"); - Ada.Text_IO.New_Line; - - ----------------------------------------------------------------------- - -- We can safely start with the assumption that we are on at least -- - -- a x386 processor. If the CPUID instruction is present, then we -- - -- have a later processor type. -- - ----------------------------------------------------------------------- - - if Intel_CPU.Has_CPUID = False then - - -- No CPUID instruction, so we assume this is indeed a x386 - -- processor. We can still check if it has a FP co-processor. - if Intel_CPU.Has_FPU then - Ada.Text_IO.Put_Line - ("x386-type processor with a FP co-processor"); - else - Ada.Text_IO.Put_Line - ("x386-type processor without a FP co-processor"); - end if; -- check for FPU - - -- Program done - Ada.Command_Line.Set_Exit_Status (Ada.Command_Line.Success); - return; - - end if; -- check for CPUID - - ----------------------------------------------------------------------- - -- If CPUID is supported, check if this is a true Intel processor, -- - -- if it is not, display a warning. -- - ----------------------------------------------------------------------- - - if Intel_CPU.Vendor_ID /= Intel_CPU.Intel_Processor then - Ada.Text_IO.Put_Line ("*** This is a Intel compatible processor"); - Ada.Text_IO.Put_Line ("*** Some information may be incorrect"); - end if; -- check if Intel - - ---------------------------------------------------------------------- - -- With the CPUID instruction present, we can assume at least a -- - -- x486 processor. If the CPUID support level is < 1 then we have -- - -- to leave it at that. -- - ---------------------------------------------------------------------- - - if Intel_CPU.CPUID_Level < 1 then - - -- Ok, this is a x486 processor. we still can get the Vendor ID - Ada.Text_IO.Put_Line ("x486-type processor"); - Ada.Text_IO.Put_Line ("Vendor ID is " & Intel_CPU.Vendor_ID); - - -- We can also check if there is a FPU present - if Intel_CPU.Has_FPU then - Ada.Text_IO.Put_Line ("Floating-Point support"); - else - Ada.Text_IO.Put_Line ("No Floating-Point support"); - end if; -- check for FPU - - -- Program done - Ada.Command_Line.Set_Exit_Status (Ada.Command_Line.Success); - return; - - end if; -- check CPUID level - - --------------------------------------------------------------------- - -- With a CPUID level of 1 we can use the processor signature to -- - -- determine it's exact type. -- - --------------------------------------------------------------------- - - Signature := Intel_CPU.Signature; - - ---------------------------------------------------------------------- - -- Ok, now we go into a lot of messy comparisons to get the -- - -- processor type. For clarity, no attememt to try to optimize the -- - -- comparisons has been made. Note that since Intel_CPU does not -- - -- support getting cache info, we cannot distinguish between P5 -- - -- and Celeron types yet. -- - ---------------------------------------------------------------------- - - -- x486SL - if Signature.Processor_Type = 2#00# and - Signature.Family = 2#0100# and - Signature.Model = 2#0100# then - Type_Found := True; - Ada.Text_IO.Put_Line ("x486SL processor"); - end if; - - -- x486DX2 Write-Back - if Signature.Processor_Type = 2#00# and - Signature.Family = 2#0100# and - Signature.Model = 2#0111# then - Type_Found := True; - Ada.Text_IO.Put_Line ("Write-Back Enhanced x486DX2 processor"); - end if; - - -- x486DX4 - if Signature.Processor_Type = 2#00# and - Signature.Family = 2#0100# and - Signature.Model = 2#1000# then - Type_Found := True; - Ada.Text_IO.Put_Line ("x486DX4 processor"); - end if; - - -- x486DX4 Overdrive - if Signature.Processor_Type = 2#01# and - Signature.Family = 2#0100# and - Signature.Model = 2#1000# then - Type_Found := True; - Ada.Text_IO.Put_Line ("x486DX4 OverDrive processor"); - end if; - - -- Pentium (60, 66) - if Signature.Processor_Type = 2#00# and - Signature.Family = 2#0101# and - Signature.Model = 2#0001# then - Type_Found := True; - Ada.Text_IO.Put_Line ("Pentium processor (60, 66)"); - end if; - - -- Pentium (75, 90, 100, 120, 133, 150, 166, 200) - if Signature.Processor_Type = 2#00# and - Signature.Family = 2#0101# and - Signature.Model = 2#0010# then - Type_Found := True; - Ada.Text_IO.Put_Line - ("Pentium processor (75, 90, 100, 120, 133, 150, 166, 200)"); - end if; - - -- Pentium OverDrive (60, 66) - if Signature.Processor_Type = 2#01# and - Signature.Family = 2#0101# and - Signature.Model = 2#0001# then - Type_Found := True; - Ada.Text_IO.Put_Line ("Pentium OverDrive processor (60, 66)"); - end if; - - -- Pentium OverDrive (75, 90, 100, 120, 133, 150, 166, 200) - if Signature.Processor_Type = 2#01# and - Signature.Family = 2#0101# and - Signature.Model = 2#0010# then - Type_Found := True; - Ada.Text_IO.Put_Line - ("Pentium OverDrive cpu (75, 90, 100, 120, 133, 150, 166, 200)"); - end if; - - -- Pentium OverDrive processor for x486 processor-based systems - if Signature.Processor_Type = 2#01# and - Signature.Family = 2#0101# and - Signature.Model = 2#0011# then - Type_Found := True; - Ada.Text_IO.Put_Line - ("Pentium OverDrive processor for x486 processor-based systems"); - end if; - - -- Pentium processor with MMX technology (166, 200) - if Signature.Processor_Type = 2#00# and - Signature.Family = 2#0101# and - Signature.Model = 2#0100# then - Type_Found := True; - Ada.Text_IO.Put_Line - ("Pentium processor with MMX technology (166, 200)"); - end if; - - -- Pentium OverDrive with MMX for Pentium (75, 90, 100, 120, 133) - if Signature.Processor_Type = 2#01# and - Signature.Family = 2#0101# and - Signature.Model = 2#0100# then - Type_Found := True; - Ada.Text_IO.Put_Line - ("Pentium OverDrive processor with MMX " & - "technology for Pentium processor (75, 90, 100, 120, 133)"); - end if; - - -- Pentium Pro processor - if Signature.Processor_Type = 2#00# and - Signature.Family = 2#0110# and - Signature.Model = 2#0001# then - Type_Found := True; - Ada.Text_IO.Put_Line ("Pentium Pro processor"); - end if; - - -- Pentium II processor, model 3 - if Signature.Processor_Type = 2#00# and - Signature.Family = 2#0110# and - Signature.Model = 2#0011# then - Type_Found := True; - Ada.Text_IO.Put_Line ("Pentium II processor, model 3"); - end if; - - -- Pentium II processor, model 5 or Celeron processor - if Signature.Processor_Type = 2#00# and - Signature.Family = 2#0110# and - Signature.Model = 2#0101# then - Type_Found := True; - Ada.Text_IO.Put_Line - ("Pentium II processor, model 5 or Celeron processor"); - end if; - - -- Pentium Pro OverDrive processor - if Signature.Processor_Type = 2#01# and - Signature.Family = 2#0110# and - Signature.Model = 2#0011# then - Type_Found := True; - Ada.Text_IO.Put_Line ("Pentium Pro OverDrive processor"); - end if; - - -- If no type recognized, we have an unknown. Display what - -- we _do_ know - if Type_Found = False then - Ada.Text_IO.Put_Line ("Unknown processor"); - end if; - - ----------------------------------------- - -- Display processor stepping level. -- - ----------------------------------------- - - Ada.Text_IO.Put_Line ("Stepping level:" & Signature.Stepping'Img); - - --------------------------------- - -- Display vendor ID string. -- - --------------------------------- - - Ada.Text_IO.Put_Line ("Vendor ID: " & Intel_CPU.Vendor_ID); - - ------------------------------------ - -- Get the processors features. -- - ------------------------------------ - - Features := Intel_CPU.Features; - - ----------------------------- - -- Check for a FPU unit. -- - ----------------------------- - - if Features.FPU = True then - Ada.Text_IO.Put_Line ("Floating-Point unit available"); - else - Ada.Text_IO.Put_Line ("no Floating-Point unit"); - end if; -- check for FPU - - -------------------------------- - -- List processor features. -- - -------------------------------- - - Ada.Text_IO.Put_Line ("Supported features: "); - - -- Virtual Mode Extension - if Features.VME = True then - Ada.Text_IO.Put_Line (" VME - Virtual Mode Extension"); - end if; - - -- Debugging Extension - if Features.DE = True then - Ada.Text_IO.Put_Line (" DE - Debugging Extension"); - end if; - - -- Page Size Extension - if Features.PSE = True then - Ada.Text_IO.Put_Line (" PSE - Page Size Extension"); - end if; - - -- Time Stamp Counter - if Features.TSC = True then - Ada.Text_IO.Put_Line (" TSC - Time Stamp Counter"); - end if; - - -- Model Specific Registers - if Features.MSR = True then - Ada.Text_IO.Put_Line (" MSR - Model Specific Registers"); - end if; - - -- Physical Address Extension - if Features.PAE = True then - Ada.Text_IO.Put_Line (" PAE - Physical Address Extension"); - end if; - - -- Machine Check Extension - if Features.MCE = True then - Ada.Text_IO.Put_Line (" MCE - Machine Check Extension"); - end if; - - -- CMPXCHG8 instruction supported - if Features.CX8 = True then - Ada.Text_IO.Put_Line (" CX8 - CMPXCHG8 instruction"); - end if; - - -- on-chip APIC hardware support - if Features.APIC = True then - Ada.Text_IO.Put_Line (" APIC - on-chip APIC hardware support"); - end if; - - -- Fast System Call - if Features.SEP = True then - Ada.Text_IO.Put_Line (" SEP - Fast System Call"); - end if; - - -- Memory Type Range Registers - if Features.MTRR = True then - Ada.Text_IO.Put_Line (" MTTR - Memory Type Range Registers"); - end if; - - -- Page Global Enable - if Features.PGE = True then - Ada.Text_IO.Put_Line (" PGE - Page Global Enable"); - end if; - - -- Machine Check Architecture - if Features.MCA = True then - Ada.Text_IO.Put_Line (" MCA - Machine Check Architecture"); - end if; - - -- Conditional Move Instruction Supported - if Features.CMOV = True then - Ada.Text_IO.Put_Line - (" CMOV - Conditional Move Instruction Supported"); - end if; - - -- Page Attribute Table - if Features.PAT = True then - Ada.Text_IO.Put_Line (" PAT - Page Attribute Table"); - end if; - - -- 36-bit Page Size Extension - if Features.PSE_36 = True then - Ada.Text_IO.Put_Line (" PSE_36 - 36-bit Page Size Extension"); - end if; - - -- MMX technology supported - if Features.MMX = True then - Ada.Text_IO.Put_Line (" MMX - MMX technology supported"); - end if; - - -- Fast FP Save and Restore - if Features.FXSR = True then - Ada.Text_IO.Put_Line (" FXSR - Fast FP Save and Restore"); - end if; - - --------------------- - -- Program done. -- - --------------------- - - Ada.Command_Line.Set_Exit_Status (Ada.Command_Line.Success); - - exception - - when others => - Ada.Command_Line.Set_Exit_Status (Ada.Command_Line.Failure); - raise; - - end Check_CPU; - -  - File: gnat_ug_wnt.info, Node: Intel_CPU Package Specification, Next: Intel_CPU Package Body, Prev: Check_CPU Procedure, Up: A Complete Example - - `Intel_CPU' Package Specification - --------------------------------- - - ------------------------------------------------------------------------- - -- -- - -- file: intel_cpu.ads -- - -- -- - -- ********************************************* -- - -- * WARNING: for 32-bit Intel processors only * -- - -- ********************************************* -- - -- -- - -- This package contains a number of subprograms that are useful in -- - -- determining the Intel x86 CPU (and the features it supports) on -- - -- which the program is running. -- - -- -- - -- The package is based upon the information given in the Intel -- - -- Application Note AP-485: "Intel Processor Identification and the -- - -- CPUID Instruction" as of April 1998. This application note can be -- - -- found on www.intel.com. -- - -- -- - -- It currently deals with 32-bit processors only, will not detect -- - -- features added after april 1998, and does not guarantee proper -- - -- results on Intel-compatible processors. -- - -- -- - -- Cache info and x386 fpu type detection are not supported. -- - -- -- - -- This package does not use any privileged instructions, so should -- - -- work on any OS running on a 32-bit Intel processor. -- - -- -- - ------------------------------------------------------------------------- - - with Interfaces; use Interfaces; - -- for using unsigned types - - with System.Machine_Code; use System.Machine_Code; - -- for using inline assembler code - - with Ada.Characters.Latin_1; use Ada.Characters.Latin_1; - -- for inserting control characters - - package Intel_CPU is - - ---------------------- - -- Processor bits -- - ---------------------- - - subtype Num_Bits is Natural range 0 .. 31; - -- the number of processor bits (32) - - -------------------------- - -- Processor register -- - -------------------------- - - -- define a processor register type for easy access to - -- the individual bits - - type Processor_Register is array (Num_Bits) of Boolean; - pragma Pack (Processor_Register); - for Processor_Register'Size use 32; - - ------------------------- - -- Unsigned register -- - ------------------------- - - -- define a processor register type for easy access to - -- the individual bytes - - type Unsigned_Register is - record - L1 : Unsigned_8; - H1 : Unsigned_8; - L2 : Unsigned_8; - H2 : Unsigned_8; - end record; - - for Unsigned_Register use - record - L1 at 0 range 0 .. 7; - H1 at 0 range 8 .. 15; - L2 at 0 range 16 .. 23; - H2 at 0 range 24 .. 31; - end record; - - for Unsigned_Register'Size use 32; - - --------------------------------- - -- Intel processor vendor ID -- - --------------------------------- - - Intel_Processor : constant String (1 .. 12) := "GenuineIntel"; - -- indicates an Intel manufactured processor - - ------------------------------------ - -- Processor signature register -- - ------------------------------------ - - -- a register type to hold the processor signature - - type Processor_Signature is - record - Stepping : Natural range 0 .. 15; - Model : Natural range 0 .. 15; - Family : Natural range 0 .. 15; - Processor_Type : Natural range 0 .. 3; - Reserved : Natural range 0 .. 262143; - end record; - - for Processor_Signature use - record - Stepping at 0 range 0 .. 3; - Model at 0 range 4 .. 7; - Family at 0 range 8 .. 11; - Processor_Type at 0 range 12 .. 13; - Reserved at 0 range 14 .. 31; - end record; - - for Processor_Signature'Size use 32; - - ----------------------------------- - -- Processor features register -- - ----------------------------------- - - -- a processor register to hold the processor feature flags - - type Processor_Features is - record - FPU : Boolean; -- floating point unit on chip - VME : Boolean; -- virtual mode extension - DE : Boolean; -- debugging extension - PSE : Boolean; -- page size extension - TSC : Boolean; -- time stamp counter - MSR : Boolean; -- model specific registers - PAE : Boolean; -- physical address extension - MCE : Boolean; -- machine check extension - CX8 : Boolean; -- cmpxchg8 instruction - APIC : Boolean; -- on-chip apic hardware - Res_1 : Boolean; -- reserved for extensions - SEP : Boolean; -- fast system call - MTRR : Boolean; -- memory type range registers - PGE : Boolean; -- page global enable - MCA : Boolean; -- machine check architecture - CMOV : Boolean; -- conditional move supported - PAT : Boolean; -- page attribute table - PSE_36 : Boolean; -- 36-bit page size extension - Res_2 : Natural range 0 .. 31; -- reserved for extensions - MMX : Boolean; -- MMX technology supported - FXSR : Boolean; -- fast FP save and restore - Res_3 : Natural range 0 .. 127; -- reserved for extensions - end record; - - for Processor_Features use - record - FPU at 0 range 0 .. 0; - VME at 0 range 1 .. 1; - DE at 0 range 2 .. 2; - PSE at 0 range 3 .. 3; - TSC at 0 range 4 .. 4; - MSR at 0 range 5 .. 5; - PAE at 0 range 6 .. 6; - MCE at 0 range 7 .. 7; - CX8 at 0 range 8 .. 8; - APIC at 0 range 9 .. 9; - Res_1 at 0 range 10 .. 10; - SEP at 0 range 11 .. 11; - MTRR at 0 range 12 .. 12; - PGE at 0 range 13 .. 13; - MCA at 0 range 14 .. 14; - CMOV at 0 range 15 .. 15; - PAT at 0 range 16 .. 16; - PSE_36 at 0 range 17 .. 17; - Res_2 at 0 range 18 .. 22; - MMX at 0 range 23 .. 23; - FXSR at 0 range 24 .. 24; - Res_3 at 0 range 25 .. 31; - end record; - - for Processor_Features'Size use 32; - - ------------------- - -- Subprograms -- - ------------------- - - function Has_FPU return Boolean; - -- return True if a FPU is found - -- use only if CPUID is not supported - - function Has_CPUID return Boolean; - -- return True if the processor supports the CPUID instruction - - function CPUID_Level return Natural; - -- return the CPUID support level (0, 1 or 2) - -- can only be called if the CPUID instruction is supported - - function Vendor_ID return String; - -- return the processor vendor identification string - -- can only be called if the CPUID instruction is supported - - function Signature return Processor_Signature; - -- return the processor signature - -- can only be called if the CPUID instruction is supported - - function Features return Processor_Features; - -- return the processors features - -- can only be called if the CPUID instruction is supported - - private - - ------------------------ - -- EFLAGS bit names -- - ------------------------ - - ID_Flag : constant Num_Bits := 21; - -- ID flag bit - - end Intel_CPU; - -  - File: gnat_ug_wnt.info, Node: Intel_CPU Package Body, Prev: Intel_CPU Package Specification, Up: A Complete Example - - `Intel_CPU' Package Body - ------------------------ - - package body Intel_CPU is - - --------------------------- - -- Detect FPU presence -- - --------------------------- - - -- There is a FPU present if we can set values to the FPU Status - -- and Control Words. - - function Has_FPU return Boolean is - - Register : Unsigned_16; - -- processor register to store a word - - begin - - -- check if we can change the status word - Asm ( - - -- the assembler code - "finit" & LF & HT & -- reset status word - "movw $0x5A5A, %%ax" & LF & HT & -- set value status word - "fnstsw %0" & LF & HT & -- save status word - "movw %%ax, %0", -- store status word - - -- output stored in Register - -- register must be a memory location - Outputs => Unsigned_16'Asm_output ("=m", Register), - - -- tell compiler that we used eax - Clobber => "eax"); - - -- if the status word is zero, there is no FPU - if Register = 0 then - return False; -- no status word - end if; -- check status word value - - -- check if we can get the control word - Asm ( - - -- the assembler code - "fnstcw %0", -- save the control word - - -- output into Register - -- register must be a memory location - Outputs => Unsigned_16'Asm_output ("=m", Register)); - - -- check the relevant bits - if (Register and 16#103F#) /= 16#003F# then - return False; -- no control word - end if; -- check control word value - - -- FPU found - return True; - - end Has_FPU; - - -------------------------------- - -- Detect CPUID instruction -- - -------------------------------- - - -- The processor supports the CPUID instruction if it is possible - -- to change the value of ID flag bit in the EFLAGS register. - - function Has_CPUID return Boolean is - - Original_Flags, Modified_Flags : Processor_Register; - -- EFLAG contents before and after changing the ID flag - - begin - - -- try flipping the ID flag in the EFLAGS register - Asm ( - - -- the assembler code - "pushfl" & LF & HT & -- push EFLAGS on stack - "pop %%eax" & LF & HT & -- pop EFLAGS into eax - "movl %%eax, %0" & LF & HT & -- save EFLAGS content - "xor $0x200000, %%eax" & LF & HT & -- flip ID flag - "push %%eax" & LF & HT & -- push EFLAGS on stack - "popfl" & LF & HT & -- load EFLAGS register - "pushfl" & LF & HT & -- push EFLAGS on stack - "pop %1", -- save EFLAGS content - - -- output values, may be anything - -- Original_Flags is %0 - -- Modified_Flags is %1 - Outputs => - (Processor_Register'Asm_output ("=g", Original_Flags), - Processor_Register'Asm_output ("=g", Modified_Flags)), - - -- tell compiler eax is destroyed - Clobber => "eax"); - - -- check if CPUID is supported - if Original_Flags(ID_Flag) /= Modified_Flags(ID_Flag) then - return True; -- ID flag was modified - else - return False; -- ID flag unchanged - end if; -- check for CPUID - - end Has_CPUID; - - ------------------------------- - -- Get CPUID support level -- - ------------------------------- - - function CPUID_Level return Natural is - - Level : Unsigned_32; - -- returned support level - - begin - - -- execute CPUID, storing the results in the Level register - Asm ( - - -- the assembler code - "cpuid", -- execute CPUID - - -- zero is stored in eax - -- returning the support level in eax - Inputs => Unsigned_32'Asm_input ("a", 0), - - -- eax is stored in Level - Outputs => Unsigned_32'Asm_output ("=a", Level), - - -- tell compiler ebx, ecx and edx registers are destroyed - Clobber => "ebx, ecx, edx"); - - -- return the support level - return Natural (Level); - - end CPUID_Level; - - -------------------------------- - -- Get CPU Vendor ID String -- - -------------------------------- - - -- The vendor ID string is returned in the ebx, ecx and edx register - -- after executing the CPUID instruction with eax set to zero. - -- In case of a true Intel processor the string returned is - -- "GenuineIntel" - - function Vendor_ID return String is - - Ebx, Ecx, Edx : Unsigned_Register; - -- registers containing the vendor ID string - - Vendor_ID : String (1 .. 12); - -- the vendor ID string - - begin - - -- execute CPUID, storing the results in the processor registers - Asm ( - - -- the assembler code - "cpuid", -- execute CPUID - - -- zero stored in eax - -- vendor ID string returned in ebx, ecx and edx - Inputs => Unsigned_32'Asm_input ("a", 0), - - -- ebx is stored in Ebx - -- ecx is stored in Ecx - -- edx is stored in Edx - Outputs => (Unsigned_Register'Asm_output ("=b", Ebx), - Unsigned_Register'Asm_output ("=c", Ecx), - Unsigned_Register'Asm_output ("=d", Edx))); - - -- now build the vendor ID string - Vendor_ID( 1) := Character'Val (Ebx.L1); - Vendor_ID( 2) := Character'Val (Ebx.H1); - Vendor_ID( 3) := Character'Val (Ebx.L2); - Vendor_ID( 4) := Character'Val (Ebx.H2); - Vendor_ID( 5) := Character'Val (Edx.L1); - Vendor_ID( 6) := Character'Val (Edx.H1); - Vendor_ID( 7) := Character'Val (Edx.L2); - Vendor_ID( 8) := Character'Val (Edx.H2); - Vendor_ID( 9) := Character'Val (Ecx.L1); - Vendor_ID(10) := Character'Val (Ecx.H1); - Vendor_ID(11) := Character'Val (Ecx.L2); - Vendor_ID(12) := Character'Val (Ecx.H2); - - -- return string - return Vendor_ID; - - end Vendor_ID; - - ------------------------------- - -- Get processor signature -- - ------------------------------- - - function Signature return Processor_Signature is - - Result : Processor_Signature; - -- processor signature returned - - begin - - -- execute CPUID, storing the results in the Result variable - Asm ( - - -- the assembler code - "cpuid", -- execute CPUID - - -- one is stored in eax - -- processor signature returned in eax - Inputs => Unsigned_32'Asm_input ("a", 1), - - -- eax is stored in Result - Outputs => Processor_Signature'Asm_output ("=a", Result), - - -- tell compiler that ebx, ecx and edx are also destroyed - Clobber => "ebx, ecx, edx"); - - -- return processor signature - return Result; - - end Signature; - - ------------------------------ - -- Get processor features -- - ------------------------------ - - function Features return Processor_Features is - - Result : Processor_Features; - -- processor features returned - - begin - - -- execute CPUID, storing the results in the Result variable - Asm ( - - -- the assembler code - "cpuid", -- execute CPUID - - -- one stored in eax - -- processor features returned in edx - Inputs => Unsigned_32'Asm_input ("a", 1), - - -- edx is stored in Result - Outputs => Processor_Features'Asm_output ("=d", Result), - - -- tell compiler that ebx and ecx are also destroyed - Clobber => "ebx, ecx"); - - -- return processor signature - return Result; - - end Features; - - end Intel_CPU; - -  - File: gnat_ug_wnt.info, Node: Microsoft Windows Topics, Next: Performance Considerations, Prev: Inline Assembler, Up: Top - - Microsoft Windows Topics - ************************ - - This chapter describes topics that are specific to the Microsoft Windows - platforms (NT, 95 and 98). - - * Menu: - - * Using GNAT on Windows:: - * GNAT Setup Tool:: - * CONSOLE and WINDOWS subsystems:: - * Temporary Files:: - * Mixed-Language Programming on Windows:: - * Windows Calling Conventions:: - * Introduction to Dynamic Link Libraries (DLLs):: - * Using DLLs with GNAT:: - * Building DLLs with GNAT:: - * GNAT and Windows Resources:: - * Debugging a DLL:: - * GNAT and COM/DCOM Objects:: - -  - File: gnat_ug_wnt.info, Node: Using GNAT on Windows, Next: GNAT Setup Tool, Up: Microsoft Windows Topics - - Using GNAT on Windows - ===================== - - One of the strengths of the GNAT technology is that its tool set - (`gcc', `gnatbind', `gnatlink', `gnatmake', the `gdb' debugger, etc.) - is used in the same way regardless of the platform. - - On Windows this tool set is complemented by a number of - Microsoft-specific tools that have been provided to facilitate - interoperability with Windows when this is required. With these tools: - - * You can build applications using the `CONSOLE' or `WINDOWS' - subsystems. - - * You can use any Dynamically Linked Library (DLL) in your Ada code - (both relocatable and non-relocatable DLLs are supported). - - * You can build Ada DLLs for use in other applications. These - applications can be written in a language other than Ada (e.g., C, - C++, etc). Again both relocatable and non-relocatable Ada DLLs are - supported. - - * You can include Windows resources in your Ada application. - - * You can use or create COM/DCOM objects. - - Immediately below are listed all known general GNAT-for-Windows - restrictions. Other restrictions about specific features like Windows - Resources and DLLs are listed in separate sections below. - - * It is not possible to use `GetLastError' and `SetLastError' when - tasking, protected records, or exceptions are used. In these - cases, in order to implement Ada semantics, the GNAT run-time - system calls certain Win32 routines that set the last error - variable to 0 upon success. It should be possible to use - `GetLastError' and `SetLastError' when tasking, protected record, - and exception features are not used, but it is not guaranteed to - work. - -  - File: gnat_ug_wnt.info, Node: GNAT Setup Tool, Next: CONSOLE and WINDOWS subsystems, Prev: Using GNAT on Windows, Up: Microsoft Windows Topics - - GNAT Setup Tool - =============== - - * Menu: - - * Command-line arguments:: - * Creating a network installation of GNAT:: - * Registering and unregistering additional libraries:: - - GNAT installation on Windows is using the Windows registry in order to - locate proper executables and standard libraries. GNAT setup tool, - called `gnatreg.exe', is provided in order to display and modify - GNAT-specific registry entries, allowing to create network GNAT - installations, modify the locations of GNAT components, as well as - register and unregister additional libraries for use with GNAT. - -  - File: gnat_ug_wnt.info, Node: Command-line arguments, Next: Creating a network installation of GNAT, Up: GNAT Setup Tool - - Command-line arguments - ---------------------- - - `gnatreg [switches] [parameter]' - - Specifying no arguments causes gnatreg to display current configuration. - - The switches understood by gnatreg are: - -h - print the help message - - -a - add a standard library - - -r - remove a standard library - - -f - force creation of keys if they don't exist - - -q - be quiet/terse - -  - File: gnat_ug_wnt.info, Node: Creating a network installation of GNAT, Next: Registering and unregistering additional libraries, Prev: Command-line arguments, Up: GNAT Setup Tool - - Creating a network installation of GNAT - --------------------------------------- - - Make sure the system on which GNAT is installed is accessible from the - current machine. - - Use the command - - ` gnatreg -f \\server\sharename\path' - - in order to setup the registry entries on a current machine. - - For example, if GNAT is installed in `\GNAT' directory of a share - location called `c-drive' on a machine `LOKI', the command that can be - used on other machines to allow the remote use of GNAT is, - - ` gnatreg -f \\loki\c-drive\gnat' - - Remember to also add `\\loki\c-drive\gnat\bin' in front of your PATH - variable. - - Be aware that every compilation using the network installation - results in the transfer of large amounts of data across the network and - may cause serious performance penalty. - -  - File: gnat_ug_wnt.info, Node: Registering and unregistering additional libraries, Prev: Creating a network installation of GNAT, Up: GNAT Setup Tool - - Registering and unregistering additional libraries - -------------------------------------------------- - - To register a standard library use a command: - - ` gnatreg -a =' - - For example: - - ` gnatreg -a WIN32ADA=c:\Win32Ada' - - The libraries registered in this manner will be treated like - standard libraries by the compiler (i.e. they don't have to be - specified in -I and -l switches to various GNAT tools). - - To unregister a library, enter ` gnatreg -r ' - - e.g., ` gnatreg -r WIN32ADA' - -  - File: gnat_ug_wnt.info, Node: CONSOLE and WINDOWS subsystems, Next: Temporary Files, Prev: GNAT Setup Tool, Up: Microsoft Windows Topics - - CONSOLE and WINDOWS subsystems - ============================== - - Under Windows there is two main subsystems. The `CONSOLE' subsystem - (which is the default subsystem) will always create a console when - launching the application. This is not something desirable when the - application has a Windows GUI. To get rid of this console the - application must be using the `WINDOWS' subsystem. To do so the - `-mwindows' linker option must be specified. - - $ gnatmake winprog -largs -mwindows - -  - File: gnat_ug_wnt.info, Node: Temporary Files, Next: Mixed-Language Programming on Windows, Prev: CONSOLE and WINDOWS subsystems, Up: Microsoft Windows Topics - - Temporary Files - =============== - - It is possible to control where temporary files gets created by setting - the TMP environment variable. The file will be created: - - * Under the directory pointed to by the TMP environment variable if - this directory exists. - - * Under c:\temp, if the TMP environment variable is not set (or not - pointing to a directory) and if this directory exists. - - * Under the current working directory otherwise. - - This allows you to determine exactly where the temporary file will be - created. This is particularly useful in networked environments where - you may not have write access to some directories. - -  - File: gnat_ug_wnt.info, Node: Mixed-Language Programming on Windows, Next: Windows Calling Conventions, Prev: Temporary Files, Up: Microsoft Windows Topics - - Mixed-Language Programming on Windows - ===================================== - - Developing pure Ada applications on Windows is no different than on - other GNAT-supported platforms. However, when developing or porting an - application that contains a mix of Ada and C/C++, the choice of your - Windows C/C++ development environment conditions your overall - interoperability strategy. - - If you use `gcc' to compile the non-Ada part of your application, - there are no Windows-specific restrictions that affect the overall - interoperability with your Ada code. If you plan to use Microsoft tools - (e.g. Microsoft Visual C/C++), you should be aware of the following - limitations: - - * You cannot link your Ada code with an object or library generated - with Microsoft tools if these use the `.tls' section (Thread Local - Storage section) since the GNAT linker does not yet support this - section. - - * You cannot link your Ada code with an object or library generated - with Microsoft tools if these use I/O routines other than those - provided in the Microsoft DLL: `msvcrt.dll'. This is because the - GNAT run time uses the services of `msvcrt.dll' for its I/Os. Use - of other I/O libraries can cause a conflict with `msvcrt.dll' - services. For instance Visual C++ I/O stream routines conflict - with those in `msvcrt.dll'. - - If you do want to use the Microsoft tools for your non-Ada code and hit - one of the above limitations, you have two choices: - - 1. Encapsulate your non Ada code in a DLL to be linked with your Ada - application. In this case, use the Microsoft or whatever - environment to build the DLL and use GNAT to build your executable - (*note Using DLLs with GNAT::). - - 2. Or you can encapsulate your Ada code in a DLL to be linked with the - other part of your application. In this case, use GNAT to build - the DLL (*note Building DLLs with GNAT::) and use the Microsoft or - whatever environment to build your executable. - -  - File: gnat_ug_wnt.info, Node: Windows Calling Conventions, Next: Introduction to Dynamic Link Libraries (DLLs), Prev: Mixed-Language Programming on Windows, Up: Microsoft Windows Topics - - Windows Calling Conventions - =========================== - - * Menu: - - * C Calling Convention:: - * Stdcall Calling Convention:: - * DLL Calling Convention:: - - When a subprogram `F' (caller) calls a subprogram `G' (callee), there - are several ways to push `G''s parameters on the stack and there are - several possible scenarios to clean up the stack upon `G''s return. A - calling convention is an agreed upon software protocol whereby the - responsibilities between the caller (`F') and the callee (`G') are - clearly defined. Several calling conventions are available for Windows: - - * `C' (Microsoft defined) - - * `Stdcall' (Microsoft defined) - - * `DLL' (GNAT specific) - -  - File: gnat_ug_wnt.info, Node: C Calling Convention, Next: Stdcall Calling Convention, Up: Windows Calling Conventions - - `C' Calling Convention - ---------------------- - - This is the default calling convention used when interfacing to C/C++ - routines compiled with either `gcc' or Microsoft Visual C++. - - In the `C' calling convention subprogram parameters are pushed on the - stack by the caller from right to left. The caller itself is in charge - of cleaning up the stack after the call. In addition, the name of a - routine with `C' calling convention is mangled by adding a leading - underscore. - - The name to use on the Ada side when importing (or exporting) a - routine with `C' calling convention is the name of the routine. For - instance the C function: - - int get_val (long); - - should be imported from Ada as follows: - - function Get_Val (V : Interfaces.C.long) return Interfaces.C.int; - pragma Import (C, Get_Val, External_Name => "get_val"); - - Note that in this particular case the `External_Name' parameter could - have been omitted since, when missing, this parameter is taken to be the - name of the Ada entity in lower case. When the `Link_Name' parameter is - missing, as in the above example, this parameter is set to be the - `External_Name' with a leading underscore. - - When importing a variable defined in C, you should always use the `C' - calling convention unless the object containing the variable is part of - a DLL (in which case you should use the `DLL' calling convention, *note - DLL Calling Convention::). - -  - File: gnat_ug_wnt.info, Node: Stdcall Calling Convention, Next: DLL Calling Convention, Prev: C Calling Convention, Up: Windows Calling Conventions - - `Stdcall' Calling Convention - ---------------------------- - - This convention, which was the calling convention used for Pascal - programs, is used by Microsoft for all the routines in the Win32 API for - efficiency reasons. It must be used to import any routine for which this - convention was specified. - - In the `Stdcall' calling convention subprogram parameters are pushed - on the stack by the caller from right to left. The callee (and not the - caller) is in charge of cleaning the stack on routine exit. In addition, - the name of a routine with `Stdcall' calling convention is mangled by - adding a leading underscore (as for the `C' calling convention) and a - trailing `@'`nn', where nn is the overall size (in bytes) of the - parameters passed to the routine. - - The name to use on the Ada side when importing a C routine with a - `Stdcall' calling convention is the name of the C routine. The leading - underscore and trailing `@'`nn' are added automatically by the - compiler. For instance the Win32 function: - - APIENTRY int get_val (long); - - should be imported from Ada as follows: - - function Get_Val (V : Interfaces.C.long) return Interfaces.C.int; - pragma Import (Stdcall, Get_Val); - -- On the x86 a long is 4 bytes, so the Link_Name is "_get_val@4" - - As for the `C' calling convention, when the `External_Name' parameter - is missing, it is taken to be the name of the Ada entity in lower case. - If instead of writing the above import pragma you write: - - function Get_Val (V : Interfaces.C.long) return Interfaces.C.int; - pragma Import (Stdcall, Get_Val, External_Name => "retrieve_val"); - - then the imported routine is `_retrieve_val@4'. However, if instead of - specifying the `External_Name' parameter you specify the `Link_Name' as - in the following example: - - function Get_Val (V : Interfaces.C.long) return Interfaces.C.int; - pragma Import (Stdcall, Get_Val, Link_Name => "retrieve_val"); - - then the imported routine is `retrieve_val@4', that is, there is no - trailing underscore but the appropriate `@'`nn' is always added at the - end of the `Link_Name' by the compiler. - - Note, that in some special cases a DLL's entry point name lacks a - trailing `@'`nn' while the exported name generated for a call has it. - The `gnatdll' tool, which creates the import library for the DLL, is - able to handle those cases (see the description of the switches in - *note Using gnatdll:: section). - -  - File: gnat_ug_wnt.info, Node: DLL Calling Convention, Prev: Stdcall Calling Convention, Up: Windows Calling Conventions - - `DLL' Calling Convention - ------------------------ - - This convention, which is GNAT-specific, must be used when you want to - import in Ada a variables defined in a DLL. For functions and procedures - this convention is equivalent to the `Stdcall' convention. As an - example, if a DLL contains a variable defined as: - - int my_var; - - then, to access this variable from Ada you should write: - - My_Var : Interfaces.C.int; - pragma Import (DLL, My_Var); - - The remarks concerning the `External_Name' and `Link_Name' - parameters given in the previous sections equally apply to the `DLL' - calling convention. - -  - File: gnat_ug_wnt.info, Node: Introduction to Dynamic Link Libraries (DLLs), Next: Using DLLs with GNAT, Prev: Windows Calling Conventions, Up: Microsoft Windows Topics - - Introduction to Dynamic Link Libraries (DLLs) - ============================================= - - A Dynamically Linked Library (DLL) is a library that can be shared by - several applications running under Windows. A DLL can contain any - number of routines and variables. - - One advantage of DLLs is that you can change and enhance them without - forcing all the applications that depend on them to be relinked or - recompiled. However, you should be aware than all calls to DLL routines - are slower since, as you will understand below, such calls are indirect. - - To illustrate the remainder of this section, suppose that an - application wants to use the services of a DLL `API.dll'. To use the - services provided by `API.dll' you must statically link against an - import library which contains a jump table with an entry for each - routine and variable exported by the DLL. In the Microsoft world this - import library is called `API.lib'. When using GNAT this import library - is called either `libAPI.a' or `libapi.a' (names are case insensitive). - - After you have statically linked your application with the import - library and you run your application, here is what happens: - - 1. Your application is loaded into memory. - - 2. The DLL `API.dll' is mapped into the address space of your - application. This means that: - - * The DLL will use the stack of the calling thread. - - * The DLL will use the virtual address space of the calling - process. - - * The DLL will allocate memory from the virtual address space - of the calling process. - - * Handles (pointers) can be safely exchanged between routines - in the DLL routines and routines in the application using the - DLL. - - 3. The entries in the `libAPI.a' or `API.lib' jump table which is - part of your application are initialized with the addresses of the - routines and variables in `API.dll'. - - 4. If present in `API.dll', routines `DllMain' or `DllMainCRTStartup' - are invoked. These routines typically contain the initialization - code needed for the well-being of the routines and variables - exported by the DLL. - - There is an additional point which is worth mentioning. In the Windows - world there are two kind of DLLs: relocatable and non-relocatable DLLs. - Non-relocatable DLLs can only be loaded at a very specific address in - the target application address space. If the addresses of two - non-relocatable DLLs overlap and these happen to be used by the same - application, a conflict will occur and the application will run - incorrectly. Hence, when possible, it is always preferable to use and - build relocatable DLLs. Both relocatable and non-relocatable DLLs are - supported by GNAT. - - As a side note, an interesting difference between Microsoft DLLs and - Unix shared libraries, is the fact that on most Unix systems all public - routines are exported by default in a Unix shared library, while under - Windows the exported routines must be listed explicitly in a definition - file (*note The Definition File::). - -  - File: gnat_ug_wnt.info, Node: Using DLLs with GNAT, Next: Building DLLs with GNAT, Prev: Introduction to Dynamic Link Libraries (DLLs), Up: Microsoft Windows Topics - - Using DLLs with GNAT - ==================== - - * Menu: - - * Creating an Ada Spec for the DLL Services:: - * Creating an Import Library:: - - To use the services of a DLL, say `API.dll', in your Ada application - you must have: - - 1. The Ada spec for the routines and/or variables you want to access - in `API.dll'. If not available this Ada spec must be built from - the C/C++ header files provided with the DLL. - - 2. The import library (`libAPI.a' or `API.lib'). As previously - mentioned an import library is a statically linked library - containing the import table which will be filled at load time to - point to the actual `API.dll' routines. Sometimes you don't have - an import library for the DLL you want to use. The following - sections will explain how to build one. - - 3. The actual DLL, `API.dll'. - - Once you have all the above, to compile an Ada application that uses the - services of `API.dll' and whose main subprogram is `My_Ada_App', you - simply issue the command - - $ gnatmake my_ada_app -largs -lAPI - - The argument `-largs -lAPI' at the end of the `gnatmake' command tells - the GNAT linker to look first for a library named `API.lib' - (Microsoft-style name) and if not found for a library named `libAPI.a' - (GNAT-style name). Note that if the Ada package spec for `API.dll' - contains the following pragma - - pragma Linker_Options ("-lAPI"); - - you do not have to add `-largs -lAPI' at the end of the `gnatmake' - command. - - If any one of the items above is missing you will have to create it - yourself. The following sections explain how to do so using as an - example a fictitious DLL called `API.dll'. - -  - File: gnat_ug_wnt.info, Node: Creating an Ada Spec for the DLL Services, Next: Creating an Import Library, Up: Using DLLs with GNAT - - Creating an Ada Spec for the DLL Services - ----------------------------------------- - - A DLL typically comes with a C/C++ header file which provides the - definitions of the routines and variables exported by the DLL. The Ada - equivalent of this header file is a package spec that contains - definitions for the imported entities. If the DLL you intend to use - does not come with an Ada spec you have to generate one such spec - yourself. For example if the header file of `API.dll' is a file `api.h' - containing the following two definitions: - - int some_var; - int get (char *); - - then the equivalent Ada spec could be: - - with Interfaces.C.Strings; - package API is - use Interfaces; - - Some_Var : C.int; - function Get (Str : C.Strings.Chars_Ptr) return C.int; - - private - pragma Import (C, Get); - pragma Import (DLL, Some_Var); - end API; - - Note that a variable is *always imported with a DLL convention*. A - function can have `C', `Stdcall' or `DLL' convention. For subprograms, - the `DLL' convention is a synonym of `Stdcall' (*note Windows Calling - Conventions::). - -  - File: gnat_ug_wnt.info, Node: Creating an Import Library, Prev: Creating an Ada Spec for the DLL Services, Up: Using DLLs with GNAT - - Creating an Import Library - -------------------------- - - * Menu: - - * The Definition File:: - * GNAT-Style Import Library:: - * Microsoft-Style Import Library:: - - If a Microsoft-style import library `API.lib' or a GNAT-style import - library `libAPI.a' is available with `API.dll' you can skip this - section. Otherwise read on. - -  - File: gnat_ug_wnt.info, Node: The Definition File, Next: GNAT-Style Import Library, Up: Creating an Import Library - - The Definition File - ................... - - As previously mentioned, and unlike Unix systems, the list of symbols - that are exported from a DLL must be provided explicitly in Windows. - The main goal of a definition file is precisely that: list the symbols - exported by a DLL. A definition file (usually a file with a `.def' - suffix) has the following structure: - - [LIBRARY name] - [DESCRIPTION string] - EXPORTS - symbol1 - symbol2 - ... - - `LIBRARY name' - This section, which is optional, gives the name of the DLL. - - `DESCRIPTION string' - This section, which is optional, gives a description string that - will be embedded in the import library. - - `EXPORTS' - This section gives the list of exported symbols (procedures, - functions or variables). For instance in the case of `API.dll' the - `EXPORTS' section of `API.def' looks like: - - EXPORTS - some_var - get - - Note that you must specify the correct suffix (`@'`nn') (*note Windows - Calling Conventions::) for a Stdcall calling convention function in the - exported symbols list. - - There can actually be other sections in a definition file, but these - sections are not relevant to the discussion at hand. - -  - File: gnat_ug_wnt.info, Node: GNAT-Style Import Library, Next: Microsoft-Style Import Library, Prev: The Definition File, Up: Creating an Import Library - - GNAT-Style Import Library - ......................... - - To create a static import library from `API.dll' with the GNAT tools - you should proceed as follows: - - 1. Create the definition file `API.def' (*note The Definition File::). - For that use the `dll2def' tool as follows: - - $ dll2def API.dll > API.def - - `dll2def' is a very simple tool: it takes as input a DLL and prints - to standard output the list of entry points in the DLL. Note that - if some routines in the DLL have the `Stdcall' convention (*note - Windows Calling Conventions::) with stripped `@'nn suffix then - you'll have to edit `api.def' to add it. - - Here are some hints to find the right `@'nn suffix. - - 1. If you have the Microsoft import library (.lib), it is - possible to get the right symbols by using Microsoft - `dumpbin' tool (see the corresponding Microsoft documentation - for further details). - - $ dumpbin /exports api.lib - - 2. If you have a message about a missing symbol at link time the - compiler tells you what symbol is expected. You just have to - go back to the definition file and add the right suffix. - - 2. Build the import library `libAPI.a', using `gnatdll' (*note Using - gnatdll::) as follows: - - $ gnatdll -e API.def -d API.dll - - `gnatdll' takes as input a definition file `API.def' and the name - of the DLL containing the services listed in the definition file - `API.dll'. The name of the static import library generated is - computed from the name of the definition file as follows: if the - definition file name is xyz`.def', the import library name will be - `lib'xyz`.a'. Note that in the previous example option `-e' could - have been removed because the name of the definition file (before - the "`.def'" suffix) is the same as the name of the DLL (*note - Using gnatdll:: for more information about `gnatdll'). - -  - File: gnat_ug_wnt.info, Node: Microsoft-Style Import Library, Prev: GNAT-Style Import Library, Up: Creating an Import Library - - Microsoft-Style Import Library - .............................. - - With GNAT you can either use a GNAT-style or Microsoft-style import - library. A Microsoft import library is needed only if you plan to make - an Ada DLL available to applications developed with Microsoft tools - (*note Mixed-Language Programming on Windows::). - - To create a Microsoft-style import library for `API.dll' you should - proceed as follows: - - 1. Create the definition file `API.def' from the DLL. For this use - either the `dll2def' tool as described above or the Microsoft - `dumpbin' tool (see the corresponding Microsoft documentation for - further details). - - 2. Build the actual import library using Microsoft's `lib' utility: - - $ lib -machine:IX86 -def:API.def -out:API.lib - - If you use the above command the definition file `API.def' must - contain a line giving the name of the DLL: - - LIBRARY "API" - - See the Microsoft documentation for further details about the - usage of `lib'. - -  - File: gnat_ug_wnt.info, Node: Building DLLs with GNAT, Next: GNAT and Windows Resources, Prev: Using DLLs with GNAT, Up: Microsoft Windows Topics - - Building DLLs with GNAT - ======================= - - * Menu: - - * Limitations When Using Ada DLLs from Ada:: - * Exporting Ada Entities:: - * Ada DLLs and Elaboration:: - * Ada DLLs and Finalization:: - * Creating a Spec for Ada DLLs:: - * Creating the Definition File:: - * Using gnatdll:: - - This section explains how to build DLLs containing Ada code. These DLLs - will be referred to as Ada DLLs in the remainder of this section. - - The steps required to build an Ada DLL that is to be used by Ada as - well as non-Ada applications are as follows: - - 1. You need to mark each Ada entity exported by the DLL with a `C' or - `Stdcall' calling convention to avoid any Ada name mangling for the - entities exported by the DLL (*note Exporting Ada Entities::). You - can skip this step if you plan to use the Ada DLL only from Ada - applications. - - 2. Your Ada code must export an initialization routine which calls - the routine `adainit' generated by `gnatbind' to perform the - elaboration of the Ada code in the DLL (*note Ada DLLs and - Elaboration::). The initialization routine exported by the Ada DLL - must be invoked by the clients of the DLL to initialize the DLL. - - 3. When useful, the DLL should also export a finalization routine - which calls routine `adafinal' generated by `gnatbind' to perform - the finalization of the Ada code in the DLL (*note Ada DLLs and - Finalization::). The finalization routine exported by the Ada DLL - must be invoked by the clients of the DLL when the DLL services - are no further needed. - - 4. You must provide a spec for the services exported by the Ada DLL - in each of the programming languages to which you plan to make the - DLL available. - - 5. You must provide a definition file listing the exported entities - (*note The Definition File::). - - 6. Finally you must use `gnatdll' to produce the DLL and the import - library (*note Using gnatdll::). - -  - File: gnat_ug_wnt.info, Node: Limitations When Using Ada DLLs from Ada, Next: Exporting Ada Entities, Up: Building DLLs with GNAT - - Limitations When Using Ada DLLs from Ada - ---------------------------------------- - - When using Ada DLLs from Ada applications there is a limitation users - should be aware of. Because on Windows the GNAT run time is not in a - DLL of its own, each Ada DLL includes a part of the GNAT run time. - Specifically, each Ada DLL includes the services of the GNAT run time - that are necessary to the Ada code inside the DLL. As a result, when an - Ada program uses an Ada DLL there are two independent GNAT run times: - one in the Ada DLL and one in the main program. - - It is therefore not possible to exchange GNAT run-time objects - between the Ada DLL and the main Ada program. Example of GNAT run-time - objects are file handles (e.g. `Text_IO.File_Type'), tasks types, - protected objects types, etc. - - It is completely safe to exchange plain elementary, array or record - types, Windows object handles, etc. - -  - File: gnat_ug_wnt.info, Node: Exporting Ada Entities, Next: Ada DLLs and Elaboration, Prev: Limitations When Using Ada DLLs from Ada, Up: Building DLLs with GNAT - - Exporting Ada Entities - ---------------------- - - Building a DLL is a way to encapsulate a set of services usable from any - application. As a result, the Ada entities exported by a DLL should be - exported with the `C' or `Stdcall' calling conventions to avoid any Ada - name mangling. Please note that the `Stdcall' convention should only be - used for subprograms, not for variables. As an example here is an Ada - package `API', spec and body, exporting two procedures, a function, and - a variable: - - with Interfaces.C; use Interfaces; - package API is - Count : C.int := 0; - function Factorial (Val : C.int) return C.int; - - procedure Initialize_API; - procedure Finalize_API; - -- Initialization & Finalization routines. More in the next section. - private - pragma Export (C, Initialize_API); - pragma Export (C, Finalize_API); - pragma Export (C, Count); - pragma Export (C, Factorial); - end API; - - package body API is - function Factorial (Val : C.int) return C.int is - Fact : C.int := 1; - begin - Count := Count + 1; - for K in 1 .. Val loop - Fact := Fact * K; - end loop; - return Fact; - end Factorial; - - procedure Initialize_API is - procedure Adainit; - pragma Import (C, Adainit); - begin - Adainit; - end Initialize_API; - - procedure Finalize_API is - procedure Adafinal; - pragma Import (C, Adafinal); - begin - Adafinal; - end Finalize_API; - end API; - - If the Ada DLL you are building will only be used by Ada applications - you do not have to export Ada entities with a `C' or `Stdcall' - convention. As an example, the previous package could be written as - follows: - - package API is - Count : Integer := 0; - function Factorial (Val : Integer) return Integer; - - procedure Initialize_API; - procedure Finalize_API; - -- Initialization and Finalization routines. - end API; - - package body API is - function Factorial (Val : Integer) return Integer is - Fact : Integer := 1; - begin - Count := Count + 1; - for K in 1 .. Val loop - Fact := Fact * K; - end loop; - return Fact; - end Factorial; - - ... - -- The remainder of this package body is unchanged. - end API; - - Note that if you do not export the Ada entities with a `C' or `Stdcall' - convention you will have to provide the mangled Ada names in the - definition file of the Ada DLL (*note Creating the Definition File::). - -  - File: gnat_ug_wnt.info, Node: Ada DLLs and Elaboration, Next: Ada DLLs and Finalization, Prev: Exporting Ada Entities, Up: Building DLLs with GNAT - - Ada DLLs and Elaboration - ------------------------ - - The DLL that you are building contains your Ada code as well as all the - routines in the Ada library that are needed by it. The first thing a - user of your DLL must do is elaborate the Ada code (*note Elaboration - Order Handling in GNAT::). - - To achieve this you must export an initialization routine - (`Initialize_API' in the previous example), which must be invoked - before using any of the DLL services. This elaboration routine must call - the Ada elaboration routine `adainit' generated by the GNAT binder - (*note Binding with Non-Ada Main Programs::). See the body of - `Initialize_Api' for an example. Note that the GNAT binder is - automatically invoked during the DLL build process by the `gnatdll' - tool (*note Using gnatdll::). - - When a DLL is loaded, Windows systematically invokes a routine called - `DllMain'. It would therefore be possible to call `adainit' directly - from `DllMain' without having to provide an explicit initialization - routine. Unfortunately, it is not possible to call `adainit' from the - `DllMain' if your program has library level tasks because access to the - `DllMain' entry point is serialized by the system (that is, only a - single thread can execute "through" it at a time), which means that the - GNAT run time will deadlock waiting for the newly created task to - complete its initialization. - -  - File: gnat_ug_wnt.info, Node: Ada DLLs and Finalization, Next: Creating a Spec for Ada DLLs, Prev: Ada DLLs and Elaboration, Up: Building DLLs with GNAT - - Ada DLLs and Finalization - ------------------------- - - When the services of an Ada DLL are no longer needed, the client code - should invoke the DLL finalization routine, if available. The DLL - finalization routine is in charge of releasing all resources acquired - by the DLL. In the case of the Ada code contained in the DLL, this is - achieved by calling routine `adafinal' generated by the GNAT binder - (*note Binding with Non-Ada Main Programs::). See the body of - `Finalize_Api' for an example. As already pointed out the GNAT binder - is automatically invoked during the DLL build process by the `gnatdll' - tool (*note Using gnatdll::). - - `-g' - Generate debugging information. This information is stored in the object - file and copied from there to the final DLL file by the linker, where - it can be read by the debugger. You must use the `-g' switch if you - plan on using the debugger or the symbolic stack traceback. - -  - File: gnat_ug_wnt.info, Node: Creating a Spec for Ada DLLs, Next: Creating the Definition File, Prev: Ada DLLs and Finalization, Up: Building DLLs with GNAT - - Creating a Spec for Ada DLLs - ---------------------------- - - To use the services exported by the Ada DLL from another programming - language (e.g. C), you have to translate the specs of the exported Ada - entities in that language. For instance in the case of `API.dll', the - corresponding C header file could look like: - - extern int *__imp__count; - #define count (*__imp__count) - int factorial (int); - - It is important to understand that when building an Ada DLL to be used - by other Ada applications, you need two different specs for the packages - contained in the DLL: one for building the DLL and the other for using - the DLL. This is because the `DLL' calling convention is needed to use - a variable defined in a DLL, but when building the DLL, the variable - must have either the `Ada' or `C' calling convention. As an example - consider a DLL comprising the following package `API': - - package API is - Count : Integer := 0; - ... - -- Remainder of the package omitted. - end API; - - After producing a DLL containing package `API', the spec that must be - used to import `API.Count' from Ada code outside of the DLL is: - - package API is - Count : Integer; - pragma Import (DLL, Count); - end API; - -  - File: gnat_ug_wnt.info, Node: Creating the Definition File, Next: Using gnatdll, Prev: Creating a Spec for Ada DLLs, Up: Building DLLs with GNAT - - Creating the Definition File - ---------------------------- - - The definition file is the last file needed to build the DLL. It lists - the exported symbols. As an example, the definition file for a DLL - containing only package `API' (where all the entities are exported with - a `C' calling convention) is: - - EXPORTS - count - factorial - finalize_api - initialize_api - - If the `C' calling convention is missing from package `API', then the - definition file contains the mangled Ada names of the above entities, - which in this case are: - - EXPORTS - api__count - api__factorial - api__finalize_api - api__initialize_api - -  - File: gnat_ug_wnt.info, Node: Using gnatdll, Prev: Creating the Definition File, Up: Building DLLs with GNAT - - Using `gnatdll' - --------------- - - * Menu: - - * gnatdll Example:: - * gnatdll behind the Scenes:: - * Using dlltool:: - - `gnatdll' is a tool to automate the DLL build process once all the Ada - and non-Ada sources that make up your DLL have been compiled. - `gnatdll' is actually in charge of two distinct tasks: build the static - import library for the DLL and the actual DLL. The form of the - `gnatdll' command is - - $ gnatdll [SWITCHES] LIST-OF-FILES [-largs OPTS] - - where list-of-files is a list of ALI and object files. The object file - list must be the exact list of objects corresponding to the non-Ada - sources whose services are to be included in the DLL. The ALI file list - must be the exact list of ALI files for the corresponding Ada sources - whose services are to be included in the DLL. If list-of-files is - missing, only the static import library is generated. - - You may specify any of the following switches to `gnatdll': - - `-a[ADDRESS]' - Build a non-relocatable DLL at ADDRESS. If ADDRESS is not - specified the default address 0X11000000 will be used. By default, - when this switch is missing, `gnatdll' builds relocatable DLL. We - advise the reader to build relocatable DLL. - - `-b ADDRESS' - Set the relocatable DLL base address. By default the address is - 0X11000000. - - `-d DLLFILE' - DLLFILE is the name of the DLL. This switch must be present for - `gnatdll' to do anything. The name of the generated import library - is obtained algorithmically from DLLFILE as shown in the following - example: if DLLFILE is `xyz.dll', the import library name is - `libxyz.a'. The name of the definition file to use (if not - specified by option `-e') is obtained algorithmically from DLLFILE - as shown in the following example: if DLLFILE is `xyz.dll', the - definition file used is `xyz.def'. - - `-e DEFFILE' - DEFFILE is the name of the definition file. - - `-h' - Help mode. Displays `gnatdll' switch usage information. - - `-Idir' - Direct `gnatdll' to search the DIR directory for source and object - files needed to build the DLL. (*note Search Paths and the - Run-Time Library (RTL)::). - - `-k' - Removes the `@'nn suffix from the import library's exported names. - You must specified this option if you want to use a `Stdcall' - function in a DLL for which the `@'nn suffix has been removed. - This is the case for most of the Windows NT DLL for example. This - option has no effect when `-n' option is specified. - - `-l FILE' - The list of ALI and object files used to build the DLL are listed - in FILE, instead of being given in the command line. Each line in - FILE contains the name of an ALI or object file. - - `-n' - No Import. Do not create the import library. - - `-q' - Quiet mode. Do not display unnecessary messages. - - `-v' - Verbose mode. Display extra information. - - `-largs OPTS' - Linker options. Pass OPTS to the linker. - -  - File: gnat_ug_wnt.info, Node: gnatdll Example, Next: gnatdll behind the Scenes, Up: Using gnatdll - - `gnatdll' Example - ................. - - As an example the command to build a relocatable DLL from `api.adb' - once `api.adb' has been compiled and `api.def' created is - - $ gnatdll -d api.dll api.ali - - The above command creates two files: `libapi.a' (the import library) - and `api.dll' (the actual DLL). If you want to create only the DLL, - just type: - - $ gnatdll -d api.dll -n api.ali - - Alternatively if you want to create just the import library, type: - - $ gnatdll -d api.dll - -  - File: gnat_ug_wnt.info, Node: gnatdll behind the Scenes, Next: Using dlltool, Prev: gnatdll Example, Up: Using gnatdll - - `gnatdll' behind the Scenes - ........................... - - This section details the steps involved in creating a DLL. `gnatdll' - does these steps for you. Unless you are interested in understanding - what goes on behind the scenes, you should skip this section. - - We use the previous example of a DLL containing the Ada package - `API', to illustrate the steps necessary to build a DLL. The starting - point is a set of objects that will make up the DLL and the - corresponding ALI files. In the case of this example this means that - `api.o' and `api.ali' are available. To build a relocatable DLL, - `gnatdll' does the following: - - 1. `gnatdll' builds the base file (`api.base'). A base file gives the - information necessary to generate relocation information for the - DLL. - - $ gnatbind -n api - $ gnatlink api -o api.jnk -mdll -Wl,--base-file,api.base - - In addition to the base file, the `gnatlink' command generates an - output file `api.jnk' which can be discarded. The `-mdll' switch - asks `gnatlink' to generate the routines `DllMain' and - `DllMainCRTStartup' that are called by the Windows loader when the - DLL is loaded into memory. - - 2. `gnatdll' uses `dlltool' (*note Using dlltool::) to build the - export table (`api.exp'). The export table contains the relocation - information in a form which can be used during the final link to - ensure that the Windows loader is able to place the DLL anywhere - in memory. - - $ dlltool --dllname api.dll --def api.def --base-file api.base \ - --output-exp api.exp - - 3. `gnatdll' builds the base file using the new export table. Note - that `gnatbind' must be called once again since the binder - generated file has been deleted during the previous call to - `gnatlink'. - - $ gnatbind -n api - $ gnatlink api -o api.jnk api.exp -mdll - -Wl,--base-file,api.base - - 4. `gnatdll' builds the new export table using the new base file and - generates the DLL import library `libAPI.a'. - - $ dlltool --dllname api.dll --def api.def --base-file api.base \ - --output-exp api.exp --output-lib libAPI.a - - 5. Finally `gnatdll' builds the relocatable DLL using the final export - table. - - $ gnatbind -n api - $ gnatlink api api.exp -o api.dll -mdll - -  - File: gnat_ug_wnt.info, Node: Using dlltool, Prev: gnatdll behind the Scenes, Up: Using gnatdll - - Using `dlltool' - ............... - - `dlltool' is the low-level tool used by `gnatdll' to build DLLs and - static import libraries. This section summarizes the most common - `dlltool' switches. The form of the `dlltool' command is - - $ dlltool [SWITCHES] - - `dlltool' switches include: - - `--base-file BASEFILE' - Read the base file BASEFILE generated by the linker. This switch - is used to create a relocatable DLL. - - `--def DEFFILE' - Read the definition file. - - `--dllname NAME' - Gives the name of the DLL. This switch is used to embed the name - of the DLL in the static import library generated by `dlltool' - with switch `--output-lib'. - - `-k' - Kill `@'nn from exported names (*note Windows Calling Conventions:: - for a discussion about `Stdcall'-style symbols. - - `--help' - Prints the `dlltool' switches with a concise description. - - `--output-exp EXPORTFILE' - Generate an export file EXPORTFILE. The export file contains the - export table (list of symbols in the DLL) and is used to create - the DLL. - - `--output-lib libfile' - Generate a static import library LIBFILE. - - `-v' - Verbose mode. - - `--as assembler-name' - Use assembler-name as the assembler. The default is `as'. - -  - File: gnat_ug_wnt.info, Node: GNAT and Windows Resources, Next: Debugging a DLL, Prev: Building DLLs with GNAT, Up: Microsoft Windows Topics - - GNAT and Windows Resources - ========================== - - * Menu: - - * Building Resources:: - * Compiling Resources:: - * Using Resources:: - * Limitations:: - - Resources are an easy way to add Windows specific objects to your - application. The objects that can be added as resources include: - - * menus - - * accelerators - - * dialog boxes - - * string tables - - * bitmaps - - * cursors - - * icons - - * fonts - - This section explains how to build, compile and use resources. - -  - File: gnat_ug_wnt.info, Node: Building Resources, Next: Compiling Resources, Up: GNAT and Windows Resources - - Building Resources - ------------------ - - A resource file is an ASCII file. By convention resource files have an - `.rc' extension. The easiest way to build a resource file is to use - Microsoft tools such as `imagedit.exe' to build bitmaps, icons and - cursors and `dlgedit.exe' to build dialogs. It is always possible to - build an `.rc' file yourself by writing a resource script. - - It is not our objective to explain how to write a resource file. A - complete description of the resource script language can be found in the - Microsoft documentation. - -  - File: gnat_ug_wnt.info, Node: Compiling Resources, Next: Using Resources, Prev: Building Resources, Up: GNAT and Windows Resources - - Compiling Resources - ------------------- - - This section describes how to build a GNAT-compatible (COFF) object file - containing the resources. This is done using the Resource Compiler - `rcl' as follows: - - $ rcl -i myres.rc -o myres.o - - By default `rcl' will run `gcc' to preprocess the `.rc' file. You can - specify an alternate preprocessor (usually named `cpp.exe') using the - `rcl' `-cpp' parameter. A list of all possible options may be obtained - by entering the command `rcl' with no parameters. - - It is also possible to use the Microsoft resource compiler `rc.exe' - to produce a `.res' file (binary resource file). See the corresponding - Microsoft documentation for further details. In this case you need to - use `res2coff' to translate the `.res' file to a GNAT-compatible object - file as follows: - - $ res2coff -i myres.res -o myres.o - -  - File: gnat_ug_wnt.info, Node: Using Resources, Next: Limitations, Prev: Compiling Resources, Up: GNAT and Windows Resources - - Using Resources - --------------- - - To include the resource file in your program just add the - GNAT-compatible object file for the resource(s) to the linker - arguments. With `gnatmake' this is done by using the `-largs' option: - - $ gnatmake myprog -largs myres.o - -  - File: gnat_ug_wnt.info, Node: Limitations, Prev: Using Resources, Up: GNAT and Windows Resources - - Limitations - ----------- - - In this section we describe the current limitations together with - suggestions for workarounds. - - * `rcl' does not handle the `RCINCLUDE' directive. - Workaround: replace `RCINCLUDE' by an `#include' directive. - - * `rcl' does not handle the brackets as block delimiters. - Workaround: replace character '{' by `BEGIN' and '}' by `END'. - Note that Microsoft's `rc' handles both forms of block delimiters. - - * `rcl' does not handle `TypeLib' resources. This type of resource - is used to build COM, DCOM or ActiveX objects. - Workaround: use `rc', the Microsoft resource compiler. - - * It is not possible to use `strip' to remove the debugging symbols - from a program with resources. - Workaround: use linker option `-s' to strip debugging symbols from - the final executable. - -  - File: gnat_ug_wnt.info, Node: Debugging a DLL, Next: GNAT and COM/DCOM Objects, Prev: GNAT and Windows Resources, Up: Microsoft Windows Topics - - Debugging a DLL - =============== - - * Menu: - - * The Program and the DLL Are Built with GCC/GNAT:: - * The Program Is Built with Some Foreign Tools and the DLL Is Built with GCC/GNAT:: - - Debugging a DLL is similar to debugging a standard program. But we have - to deal with two different executable parts: the DLL and the program - that uses it. We have the following four possibilities: - - 1. The program and the DLL are built with `GCC/GNAT'. - - 2. The program is built with foreign tools and the DLL is built with - `GCC/GNAT'. - - 3. The program is built with `GCC/GNAT' and the DLL is built with - foreign tools. - - 4. - In this section we address only cases one and two above. There is no - point in trying to debug a DLL with `GNU/GDB', if there is no - GDB-compatible debugging information in it. To do so you must use a - debugger compatible with the tools suite used to build the DLL. - -  - File: gnat_ug_wnt.info, Node: The Program and the DLL Are Built with GCC/GNAT, Next: The Program Is Built with Some Foreign Tools and the DLL Is Built with GCC/GNAT, Up: Debugging a DLL - - The Program and the DLL Are Built with GCC/GNAT - ----------------------------------------------- - - This is the simplest case. Both the DLL and the program have `GDB' - compatible debugging information. It is then possible to break anywhere - in the process. Let's suppose here that the main procedure is named - `ada_main' and that in the DLL there is an entry point named `ada_dll'. - - The DLL (*note Introduction to Dynamic Link Libraries (DLLs)::) and - program must have been built with the debugging information (see GNAT -g - switch). Here are the step-by-step instructions for debugging it: - - 1. Launch `GDB' on the main program. - - $ gdb -nw ada_main - - 2. Break on the main procedure and run the program. - - (gdb) break ada_main - (gdb) run - - This step is required to be able to set a breakpoint inside the - DLL. As long as the program is not run, the DLL is not loaded. - This has the consequence that the DLL debugging information is - also not loaded, so it is not possible to set a breakpoint in the - DLL. - - 3. Set a breakpoint inside the DLL - - (gdb) break ada_dll - (gdb) run - - - At this stage a breakpoint is set inside the DLL. From there on you can - use the standard approach to debug the whole program (*note Running and - Debugging Ada Programs::). - -  - File: gnat_ug_wnt.info, Node: The Program Is Built with Some Foreign Tools and the DLL Is Built with GCC/GNAT, Prev: The Program and the DLL Are Built with GCC/GNAT, Up: Debugging a DLL - - The Program Is Built with Some Foreign Tools and the DLL Is Built with GCC/GNAT - ------------------------------------------------------------------------------- - - * Menu: - - * Debugging the DLL Directly:: - * Attaching to a Running Process:: - - In this case things are slightly more complex because it is not - possible to start the main program and then break at the beginning to - load the DLL and the associated DLL debugging information. It is not - possible to break at the beginning of the program because there is no - `GDB' debugging information, and therefore there is no direct way of - getting initial control. This section addresses this issue by - describing some methods that can be used to break somewhere in the DLL - to debug it. - - First suppose that the main procedure is named `main' (this is for - example some C code built with Microsoft Visual C) and that there is a - DLL named `test.dll' containing an Ada entry point named `ada_dll'. - - The DLL (*note Introduction to Dynamic Link Libraries (DLLs)::) must - have been built with debugging information (see GNAT -g option). - -  - File: gnat_ug_wnt.info, Node: Debugging the DLL Directly, Next: Attaching to a Running Process, Up: The Program Is Built with Some Foreign Tools and the DLL Is Built with GCC/GNAT - - Debugging the DLL Directly - .......................... - - 1. Launch the debugger on the DLL. - - $ gdb -nw test.dll - - 2. Set a breakpoint on a DLL subroutine. - - (gdb) break ada_dll - - 3. Specify the executable file to `GDB'. - - (gdb) exec-file main.exe - - 4. Run the program. - - (gdb) run - - This will run the program until it reaches the breakpoint that has - been set. From that point you can use the standard way to debug a - program as described in (*note Running and Debugging Ada - Programs::). - - - It is also possible to debug the DLL by attaching to a running process. - -  - File: gnat_ug_wnt.info, Node: Attaching to a Running Process, Prev: Debugging the DLL Directly, Up: The Program Is Built with Some Foreign Tools and the DLL Is Built with GCC/GNAT - - Attaching to a Running Process - .............................. - - With `GDB' it is always possible to debug a running process by - attaching to it. It is possible to debug a DLL this way. The limitation - of this approach is that the DLL must run long enough to perform the - attach operation. It may be useful for instance to insert a time wasting - loop in the code of the DLL to meet this criterion. - - 1. Launch the main program `main.exe'. - - $ main - - 2. Use the Windows Task Manager to find the process ID. Let's say - that the process PID for `main.exe' is 208. - - 3. Launch gdb. - - $ gdb -nw - - 4. Attach to the running process to be debugged. - - (gdb) attach 208 - - 5. Load the process debugging information. - - (gdb) symbol-file main.exe - - 6. Break somewhere in the DLL. - - (gdb) break ada_dll - - 7. Continue process execution. - - (gdb) continue - - - This last step will resume the process execution, and stop at the - breakpoint we have set. From there you can use the standard approach to - debug a program as described in (*note Running and Debugging Ada - Programs::). - -  - File: gnat_ug_wnt.info, Node: GNAT and COM/DCOM Objects, Prev: Debugging a DLL, Up: Microsoft Windows Topics - - GNAT and COM/DCOM Objects - ========================= - - This section is temporarily left blank. - -  - File: gnat_ug_wnt.info, Node: Performance Considerations, Next: GNU Free Documentation License, Prev: Microsoft Windows Topics, Up: Top - - Performance Considerations - ************************** - - The GNAT system provides a number of options that allow a trade-off - between - - * performance of the generated code - - * speed of compilation - - * minimization of dependences and recompilation - - * the degree of run-time checking. - - The defaults (if no options are selected) aim at improving the speed of - compilation and minimizing dependences, at the expense of performance - of the generated code: - - * no optimization - - * no inlining of subprogram calls - - * all run-time checks enabled except overflow and elaboration checks - - These options are suitable for most program development purposes. This - chapter describes how you can modify these choices, and also provides - some guidelines on debugging optimized code. - - * Menu: - - * Controlling Run-Time Checks:: - * Optimization Levels:: - * Debugging Optimized Code:: - * Inlining of Subprograms:: - -  - File: gnat_ug_wnt.info, Node: Controlling Run-Time Checks, Next: Optimization Levels, Up: Performance Considerations - - Controlling Run-Time Checks - =========================== - - By default, GNAT generates all run-time checks, except arithmetic - overflow checking for integer operations and checks for access before - elaboration on subprogram calls. The latter are not required in default - mode, because all necessary checking is done at compile time. Two gnat - switches, `-gnatp' and `-gnato' allow this default to be modified. - *Note Run-Time Checks::. - - Our experience is that the default is suitable for most development - purposes. - - We treat integer overflow specially because these are quite - expensive and in our experience are not as important as other run-time - checks in the development process. Note that division by zero is not - considered an overflow check, and divide by zero checks are generated - where required by default. - - Elaboration checks are off by default, and also not needed by - default, since GNAT uses a static elaboration analysis approach that - avoids the need for run-time checking. This manual contains a full - chapter discussing the issue of elaboration checks, and if the default - is not satisfactory for your use, you should read this chapter. - - For validity checks, the minimal checks required by the Ada Reference - Manual (for case statements and assignments to array elements) are on - by default. These can be suppressed by use of the `-gnatVn' switch. - Note that in Ada 83, there were no validity checks, so if the Ada 83 - mode is acceptable (or when comparing GNAT performance with an Ada 83 - compiler), it may be reasonable to routinely use `-gnatVn'. Validity - checks are also suppressed entirely if `-gnatp' is used. - - Note that the setting of the switches controls the default setting of - the checks. They may be modified using either `pragma Suppress' (to - remove checks) or `pragma Unsuppress' (to add back suppressed checks) - in the program source. - -  - File: gnat_ug_wnt.info, Node: Optimization Levels, Next: Debugging Optimized Code, Prev: Controlling Run-Time Checks, Up: Performance Considerations - - Optimization Levels - =================== - - The default is optimization off. This results in the fastest compile - times, but GNAT makes absolutely no attempt to optimize, and the - generated programs are considerably larger and slower than when - optimization is enabled. You can use the `-ON' switch, where N is an - integer from 0 to 3, on the `gcc' command line to control the - optimization level: - - `-O0' - no optimization (the default) - - `-O1' - medium level optimization - - `-O2' - full optimization - - `-O3' - full optimization, and also attempt automatic inlining of small - subprograms within a unit (*note Inlining of Subprograms::). - - Higher optimization levels perform more global transformations on the - program and apply more expensive analysis algorithms in order to - generate faster and more compact code. The price in compilation time, - and the resulting improvement in execution time, both depend on the - particular application and the hardware environment. You should - experiment to find the best level for your application. - - Note: Unlike some other compilation systems, `gcc' has been tested - extensively at all optimization levels. There are some bugs which - appear only with optimization turned on, but there have also been bugs - which show up only in _unoptimized_ code. Selecting a lower level of - optimization does not improve the reliability of the code generator, - which in practice is highly reliable at all optimization levels. - - Note regarding the use of `-O3': The use of this optimization level - is generally discouraged with GNAT, since it often results in larger - executables which run more slowly. See further discussion of this point - in *note Inlining of Subprograms::. - -  - File: gnat_ug_wnt.info, Node: Debugging Optimized Code, Next: Inlining of Subprograms, Prev: Optimization Levels, Up: Performance Considerations - - Debugging Optimized Code - ======================== - - Since the compiler generates debugging tables for a compilation unit - before it performs optimizations, the optimizing transformations may - invalidate some of the debugging data. You therefore need to - anticipate certain anomalous situations that may arise while debugging - optimized code. This section describes the most common cases. - - 1. The "hopping Program Counter": Repeated 'step' or 'next' commands - show the PC bouncing back and forth in the code. This may result - from any of the following optimizations: - - * Common subexpression elimination: using a single instance of - code for a quantity that the source computes several times. - As a result you may not be able to stop on what looks like a - statement. - - * Invariant code motion: moving an expression that does not - change within a loop, to the beginning of the loop. - - * Instruction scheduling: moving instructions so as to overlap - loads and stores (typically) with other code, or in general - to move computations of values closer to their uses. Often - this causes you to pass an assignment statement without the - assignment happening and then later bounce back to the - statement when the value is actually needed. Placing a - breakpoint on a line of code and then stepping over it may, - therefore, not always cause all the expected side-effects. - - 2. The "big leap": More commonly known as cross-jumping, in which two - identical pieces of code are merged and the program counter - suddenly jumps to a statement that is not supposed to be executed, - simply because it (and the code following) translates to the same - thing as the code that _was_ supposed to be executed. This effect - is typically seen in sequences that end in a jump, such as a - `goto', a `return', or a `break' in a C `switch' statement. - - 3. The "roving variable": The symptom is an unexpected value in a - variable. There are various reasons for this effect: - - * In a subprogram prologue, a parameter may not yet have been - moved to its "home". - - * A variable may be dead, and its register re-used. This is - probably the most common cause. - - * As mentioned above, the assignment of a value to a variable - may have been moved. - - * A variable may be eliminated entirely by value propagation or - other means. In this case, GCC may incorrectly generate - debugging information for the variable - - In general, when an unexpected value appears for a local variable - or parameter you should first ascertain if that value was actually - computed by your program, as opposed to being incorrectly reported - by the debugger. Record fields or array elements in an object - designated by an access value are generally less of a problem, - once you have ascertained that the access value is sensible. - Typically, this means checking variables in the preceding code and - in the calling subprogram to verify that the value observed is - explainable from other values (one must apply the procedure - recursively to those other values); or re-running the code and - stopping a little earlier (perhaps before the call) and stepping - to better see how the variable obtained the value in question; or - continuing to step _from_ the point of the strange value to see if - code motion had simply moved the variable's assignments later. - -  - File: gnat_ug_wnt.info, Node: Inlining of Subprograms, Prev: Debugging Optimized Code, Up: Performance Considerations - - Inlining of Subprograms - ======================= - - A call to a subprogram in the current unit is inlined if all the - following conditions are met: - - * The optimization level is at least `-O1'. - - * The called subprogram is suitable for inlining: It must be small - enough and not contain nested subprograms or anything else that - `gcc' cannot support in inlined subprograms. - - * The call occurs after the definition of the body of the subprogram. - - * Either `pragma Inline' applies to the subprogram or it is small - and automatic inlining (optimization level `-O3') is specified. - - Calls to subprograms in `with''ed units are normally not inlined. To - achieve this level of inlining, the following conditions must all be - true: - - * The optimization level is at least `-O1'. - - * The called subprogram is suitable for inlining: It must be small - enough and not contain nested subprograms or anything else `gcc' - cannot support in inlined subprograms. - - * The call appears in a body (not in a package spec). - - * There is a `pragma Inline' for the subprogram. - - * The `-gnatn' switch is used in the `gcc' command line - - Note that specifying the `-gnatn' switch causes additional - compilation dependencies. Consider the following: - - package R is - procedure Q; - pragma Inline (Q); - end R; - package body R is - ... - end R; - - with R; - procedure Main is - begin - ... - R.Q; - end Main; - - With the default behavior (no `-gnatn' switch specified), the - compilation of the `Main' procedure depends only on its own source, - `main.adb', and the spec of the package in file `r.ads'. This means - that editing the body of `R' does not require recompiling `Main'. - - On the other hand, the call `R.Q' is not inlined under these - circumstances. If the `-gnatn' switch is present when `Main' is - compiled, the call will be inlined if the body of `Q' is small enough, - but now `Main' depends on the body of `R' in `r.adb' as well as on the - spec. This means that if this body is edited, the main program must be - recompiled. Note that this extra dependency occurs whether or not the - call is in fact inlined by `gcc'. - - The use of front end inlining with `-gnatN' generates similar - additional dependencies. - - Note: The `-fno-inline' switch can be used to prevent all inlining. - This switch overrides all other conditions and ensures that no inlining - occurs. The extra dependences resulting from `-gnatn' will still be - active, even if this switch is used to suppress the resulting inlining - actions. - - Note regarding the use of `-O3': There is no difference in inlining - behavior between `-O2' and `-O3' for subprograms with an explicit - pragma `Inline' assuming the use of `-gnatn' or `-gnatN' (the switches - that activate inlining). If you have used pragma `Inline' in - appropriate cases, then it is usually much better to use `-O2' and - `-gnatn' and avoid the use of `-O3' which in this case only has the - effect of inlining subprograms you did not think should be inlined. We - often find that the use of `-O3' slows down code by performing - excessive inlining, leading to increased instruction cache pressure - from the increased code size. So the bottom line here is that you - should not automatically assume that `-O3' is better than `-O2', and - indeed you should use `-O3' only if tests show that it actually - improves performance. - -  - File: gnat_ug_wnt.info, Node: GNU Free Documentation License, Next: Index, Prev: Performance Considerations, Up: Top - - GNU Free Documentation License - ****************************** - - Version 1.2, November 2002 - Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA - - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - 0. PREAMBLE - - The purpose of this License is to make a manual, textbook, or other - functional and useful document "free" in the sense of freedom: to - assure everyone the effective freedom to copy and redistribute it, - with or without modifying it, either commercially or - noncommercially. Secondarily, this License preserves for the - author and publisher a way to get credit for their work, while not - being considered responsible for modifications made by others. - - This License is a kind of "copyleft", which means that derivative - works of the document must themselves be free in the same sense. - It complements the GNU General Public License, which is a copyleft - license designed for free software. - - We have designed this License in order to use it for manuals for - free software, because free software needs free documentation: a - free program should come with manuals providing the same freedoms - that the software does. But this License is not limited to - software manuals; it can be used for any textual work, regardless - of subject matter or whether it is published as a printed book. - We recommend this License principally for works whose purpose is - instruction or reference. - - 1. APPLICABILITY AND DEFINITIONS - - This License applies to any manual or other work, in any medium, - that contains a notice placed by the copyright holder saying it - can be distributed under the terms of this License. Such a notice - grants a world-wide, royalty-free license, unlimited in duration, - to use that work under the conditions stated herein. The - "Document", below, refers to any such manual or work. Any member - of the public is a licensee, and is addressed as "you". You - accept the license if you copy, modify or distribute the work in a - way requiring permission under copyright law. - - A "Modified Version" of the Document means any work containing the - Document or a portion of it, either copied verbatim, or with - modifications and/or translated into another language. - - A "Secondary Section" is a named appendix or a front-matter section - of the Document that deals exclusively with the relationship of the - publishers or authors of the Document to the Document's overall - subject (or to related matters) and contains nothing that could - fall directly within that overall subject. (Thus, if the Document - is in part a textbook of mathematics, a Secondary Section may not - explain any mathematics.) The relationship could be a matter of - historical connection with the subject or with related matters, or - of legal, commercial, philosophical, ethical or political position - regarding them. - - The "Invariant Sections" are certain Secondary Sections whose - titles are designated, as being those of Invariant Sections, in - the notice that says that the Document is released under this - License. If a section does not fit the above definition of - Secondary then it is not allowed to be designated as Invariant. - The Document may contain zero Invariant Sections. If the Document - does not identify any Invariant Sections then there are none. - - The "Cover Texts" are certain short passages of text that are - listed, as Front-Cover Texts or Back-Cover Texts, in the notice - that says that the Document is released under this License. A - Front-Cover Text may be at most 5 words, and a Back-Cover Text may - be at most 25 words. - - A "Transparent" copy of the Document means a machine-readable copy, - represented in a format whose specification is available to the - general public, that is suitable for revising the document - straightforwardly with generic text editors or (for images - composed of pixels) generic paint programs or (for drawings) some - widely available drawing editor, and that is suitable for input to - text formatters or for automatic translation to a variety of - formats suitable for input to text formatters. A copy made in an - otherwise Transparent file format whose markup, or absence of - markup, has been arranged to thwart or discourage subsequent - modification by readers is not Transparent. An image format is - not Transparent if used for any substantial amount of text. A - copy that is not "Transparent" is called "Opaque". - - Examples of suitable formats for Transparent copies include plain - ASCII without markup, Texinfo input format, LaTeX input format, - SGML or XML using a publicly available DTD, and - standard-conforming simple HTML, PostScript or PDF designed for - human modification. Examples of transparent image formats include - PNG, XCF and JPG. Opaque formats include proprietary formats that - can be read and edited only by proprietary word processors, SGML or - XML for which the DTD and/or processing tools are not generally - available, and the machine-generated HTML, PostScript or PDF - produced by some word processors for output purposes only. - - The "Title Page" means, for a printed book, the title page itself, - plus such following pages as are needed to hold, legibly, the - material this License requires to appear in the title page. For - works in formats which do not have any title page as such, "Title - Page" means the text near the most prominent appearance of the - work's title, preceding the beginning of the body of the text. - - A section "Entitled XYZ" means a named subunit of the Document - whose title either is precisely XYZ or contains XYZ in parentheses - following text that translates XYZ in another language. (Here XYZ - stands for a specific section name mentioned below, such as - "Acknowledgements", "Dedications", "Endorsements", or "History".) - To "Preserve the Title" of such a section when you modify the - Document means that it remains a section "Entitled XYZ" according - to this definition. - - The Document may include Warranty Disclaimers next to the notice - which states that this License applies to the Document. These - Warranty Disclaimers are considered to be included by reference in - this License, but only as regards disclaiming warranties: any other - implication that these Warranty Disclaimers may have is void and - has no effect on the meaning of this License. - - 2. VERBATIM COPYING - - You may copy and distribute the Document in any medium, either - commercially or noncommercially, provided that this License, the - copyright notices, and the license notice saying this License - applies to the Document are reproduced in all copies, and that you - add no other conditions whatsoever to those of this License. You - may not use technical measures to obstruct or control the reading - or further copying of the copies you make or distribute. However, - you may accept compensation in exchange for copies. If you - distribute a large enough number of copies you must also follow - the conditions in section 3. - - You may also lend copies, under the same conditions stated above, - and you may publicly display copies. - - 3. COPYING IN QUANTITY - - If you publish printed copies (or copies in media that commonly - have printed covers) of the Document, numbering more than 100, and - the Document's license notice requires Cover Texts, you must - enclose the copies in covers that carry, clearly and legibly, all - these Cover Texts: Front-Cover Texts on the front cover, and - Back-Cover Texts on the back cover. Both covers must also clearly - and legibly identify you as the publisher of these copies. The - front cover must present the full title with all words of the - title equally prominent and visible. You may add other material - on the covers in addition. Copying with changes limited to the - covers, as long as they preserve the title of the Document and - satisfy these conditions, can be treated as verbatim copying in - other respects. - - If the required texts for either cover are too voluminous to fit - legibly, you should put the first ones listed (as many as fit - reasonably) on the actual cover, and continue the rest onto - adjacent pages. - - If you publish or distribute Opaque copies of the Document - numbering more than 100, you must either include a - machine-readable Transparent copy along with each Opaque copy, or - state in or with each Opaque copy a computer-network location from - which the general network-using public has access to download - using public-standard network protocols a complete Transparent - copy of the Document, free of added material. If you use the - latter option, you must take reasonably prudent steps, when you - begin distribution of Opaque copies in quantity, to ensure that - this Transparent copy will remain thus accessible at the stated - location until at least one year after the last time you - distribute an Opaque copy (directly or through your agents or - retailers) of that edition to the public. - - It is requested, but not required, that you contact the authors of - the Document well before redistributing any large number of - copies, to give them a chance to provide you with an updated - version of the Document. - - 4. MODIFICATIONS - - You may copy and distribute a Modified Version of the Document - under the conditions of sections 2 and 3 above, provided that you - release the Modified Version under precisely this License, with - the Modified Version filling the role of the Document, thus - licensing distribution and modification of the Modified Version to - whoever possesses a copy of it. In addition, you must do these - things in the Modified Version: - - A. Use in the Title Page (and on the covers, if any) a title - distinct from that of the Document, and from those of - previous versions (which should, if there were any, be listed - in the History section of the Document). You may use the - same title as a previous version if the original publisher of - that version gives permission. - - B. List on the Title Page, as authors, one or more persons or - entities responsible for authorship of the modifications in - the Modified Version, together with at least five of the - principal authors of the Document (all of its principal - authors, if it has fewer than five), unless they release you - from this requirement. - - C. State on the Title page the name of the publisher of the - Modified Version, as the publisher. - - D. Preserve all the copyright notices of the Document. - - E. Add an appropriate copyright notice for your modifications - adjacent to the other copyright notices. - - F. Include, immediately after the copyright notices, a license - notice giving the public permission to use the Modified - Version under the terms of this License, in the form shown in - the Addendum below. - - G. Preserve in that license notice the full lists of Invariant - Sections and required Cover Texts given in the Document's - license notice. - - H. Include an unaltered copy of this License. - - I. Preserve the section Entitled "History", Preserve its Title, - and add to it an item stating at least the title, year, new - authors, and publisher of the Modified Version as given on - the Title Page. If there is no section Entitled "History" in - the Document, create one stating the title, year, authors, - and publisher of the Document as given on its Title Page, - then add an item describing the Modified Version as stated in - the previous sentence. - - J. Preserve the network location, if any, given in the Document - for public access to a Transparent copy of the Document, and - likewise the network locations given in the Document for - previous versions it was based on. These may be placed in - the "History" section. You may omit a network location for a - work that was published at least four years before the - Document itself, or if the original publisher of the version - it refers to gives permission. - - K. For any section Entitled "Acknowledgements" or "Dedications", - Preserve the Title of the section, and preserve in the - section all the substance and tone of each of the contributor - acknowledgements and/or dedications given therein. - - L. Preserve all the Invariant Sections of the Document, - unaltered in their text and in their titles. Section numbers - or the equivalent are not considered part of the section - titles. - - M. Delete any section Entitled "Endorsements". Such a section - may not be included in the Modified Version. - - N. Do not retitle any existing section to be Entitled - "Endorsements" or to conflict in title with any Invariant - Section. - - O. Preserve any Warranty Disclaimers. - - If the Modified Version includes new front-matter sections or - appendices that qualify as Secondary Sections and contain no - material copied from the Document, you may at your option - designate some or all of these sections as invariant. To do this, - add their titles to the list of Invariant Sections in the Modified - Version's license notice. These titles must be distinct from any - other section titles. - - You may add a section Entitled "Endorsements", provided it contains - nothing but endorsements of your Modified Version by various - parties--for example, statements of peer review or that the text - has been approved by an organization as the authoritative - definition of a standard. - - You may add a passage of up to five words as a Front-Cover Text, - and a passage of up to 25 words as a Back-Cover Text, to the end - of the list of Cover Texts in the Modified Version. Only one - passage of Front-Cover Text and one of Back-Cover Text may be - added by (or through arrangements made by) any one entity. If the - Document already includes a cover text for the same cover, - previously added by you or by arrangement made by the same entity - you are acting on behalf of, you may not add another; but you may - replace the old one, on explicit permission from the previous - publisher that added the old one. - - The author(s) and publisher(s) of the Document do not by this - License give permission to use their names for publicity for or to - assert or imply endorsement of any Modified Version. - - 5. COMBINING DOCUMENTS - - You may combine the Document with other documents released under - this License, under the terms defined in section 4 above for - modified versions, provided that you include in the combination - all of the Invariant Sections of all of the original documents, - unmodified, and list them all as Invariant Sections of your - combined work in its license notice, and that you preserve all - their Warranty Disclaimers. - - The combined work need only contain one copy of this License, and - multiple identical Invariant Sections may be replaced with a single - copy. If there are multiple Invariant Sections with the same name - but different contents, make the title of each such section unique - by adding at the end of it, in parentheses, the name of the - original author or publisher of that section if known, or else a - unique number. Make the same adjustment to the section titles in - the list of Invariant Sections in the license notice of the - combined work. - - In the combination, you must combine any sections Entitled - "History" in the various original documents, forming one section - Entitled "History"; likewise combine any sections Entitled - "Acknowledgements", and any sections Entitled "Dedications". You - must delete all sections Entitled "Endorsements." - - 6. COLLECTIONS OF DOCUMENTS - - You may make a collection consisting of the Document and other - documents released under this License, and replace the individual - copies of this License in the various documents with a single copy - that is included in the collection, provided that you follow the - rules of this License for verbatim copying of each of the - documents in all other respects. - - You may extract a single document from such a collection, and - distribute it individually under this License, provided you insert - a copy of this License into the extracted document, and follow - this License in all other respects regarding verbatim copying of - that document. - - 7. AGGREGATION WITH INDEPENDENT WORKS - - A compilation of the Document or its derivatives with other - separate and independent documents or works, in or on a volume of - a storage or distribution medium, is called an "aggregate" if the - copyright resulting from the compilation is not used to limit the - legal rights of the compilation's users beyond what the individual - works permit. When the Document is included an aggregate, this - License does not apply to the other works in the aggregate which - are not themselves derivative works of the Document. - - If the Cover Text requirement of section 3 is applicable to these - copies of the Document, then if the Document is less than one half - of the entire aggregate, the Document's Cover Texts may be placed - on covers that bracket the Document within the aggregate, or the - electronic equivalent of covers if the Document is in electronic - form. Otherwise they must appear on printed covers that bracket - the whole aggregate. - - 8. TRANSLATION - - Translation is considered a kind of modification, so you may - distribute translations of the Document under the terms of section - 4. Replacing Invariant Sections with translations requires special - permission from their copyright holders, but you may include - translations of some or all Invariant Sections in addition to the - original versions of these Invariant Sections. You may include a - translation of this License, and all the license notices in the - Document, and any Warrany Disclaimers, provided that you also - include the original English version of this License and the - original versions of those notices and disclaimers. In case of a - disagreement between the translation and the original version of - this License or a notice or disclaimer, the original version will - prevail. - - If a section in the Document is Entitled "Acknowledgements", - "Dedications", or "History", the requirement (section 4) to - Preserve its Title (section 1) will typically require changing the - actual title. - - 9. TERMINATION - - You may not copy, modify, sublicense, or distribute the Document - except as expressly provided for under this License. Any other - attempt to copy, modify, sublicense or distribute the Document is - void, and will automatically terminate your rights under this - License. However, parties who have received copies, or rights, - from you under this License will not have their licenses - terminated so long as such parties remain in full compliance. - - 10. FUTURE REVISIONS OF THIS LICENSE - - The Free Software Foundation may publish new, revised versions of - the GNU Free Documentation License from time to time. Such new - versions will be similar in spirit to the present version, but may - differ in detail to address new problems or concerns. See - `http://www.gnu.org/copyleft/'. - - Each version of the License is given a distinguishing version - number. If the Document specifies that a particular numbered - version of this License "or any later version" applies to it, you - have the option of following the terms and conditions either of - that specified version or of any later version that has been - published (not as a draft) by the Free Software Foundation. If - the Document does not specify a version number of this License, - you may choose any version ever published (not as a draft) by the - Free Software Foundation. - - ADDENDUM: How to use this License for your documents - ==================================================== - - To use this License in a document you have written, include a copy of - the License in the document and put the following copyright and license - notices just after the title page: - - Copyright (C) YEAR YOUR NAME. - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.2 - or any later version published by the Free Software Foundation; - with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. - A copy of the license is included in the section entitled ``GNU - Free Documentation License''. - - If you have Invariant Sections, Front-Cover Texts and Back-Cover - Texts, replace the "with...Texts." line with this: - - with the Invariant Sections being LIST THEIR TITLES, with - the Front-Cover Texts being LIST, and with the Back-Cover Texts - being LIST. - - If you have Invariant Sections without Cover Texts, or some other - combination of the three, merge those two alternatives to suit the - situation. - - If your document contains nontrivial examples of program code, we - recommend releasing these examples in parallel under your choice of - free software license, such as the GNU General Public License, to - permit their use in free software. - -  - File: gnat_ug_wnt.info, Node: Index, Prev: GNU Free Documentation License, Up: Top - - Index - ***** - - * Menu: - - * --GCC= (gnatchop): Switches for gnatchop. - * --GCC=compiler_name (gnatlink): Switches for gnatlink. - * --GCC=compiler_name (gnatmake): Switches for gnatmake. - * --GNATBIND=binder_name (gnatmake): Switches for gnatmake. - * --GNATLINK=linker_name (gnatmake): Switches for gnatmake. - * --LINK= (gnatlink): Switches for gnatlink. - * --RTS (gcc): Switches for gcc. - * --RTS (gnatbind): Summary of Binder Switches. - * --RTS (gnatfind): gnatfind Switches. - * --RTS (gnatls): Switches for gnatls. - * --RTS (gnatmake): Switches for gnatmake. - * --RTS (gnatxref): gnatxref Switches. - * -83 (gnathtml): Converting Ada Files to html with gnathtml. - * -A (gnatbind): Output Control. - * -a (gnatdll): Using gnatdll. - * -A (gnatlink): Switches for gnatlink. - * -a (gnatls): Switches for gnatls. - * -A (gnatmake): Switches for gnatmake. - * -a (gnatmake): Switches for gnatmake. - * -aI (gnatmake): Switches for gnatmake. - * -aL (gnatmake): Switches for gnatmake. - * -aO (gnatmake): Switches for gnatmake. - * -B (gcc): Switches for gcc. - * -b (gcc): Switches for gcc. - * -b (gnatbind): Binder Error Message Control. - * -b (gnatdll): Using gnatdll. - * -B (gnatlink): Switches for gnatlink. - * -b (gnatlink): Switches for gnatlink. - * -b (gnatmake): Switches for gnatmake. - * -bargs (gnatmake): Mode Switches for gnatmake. - * -c (gcc): Switches for gcc. - * -C (gnatbind): Output Control. - * -c (gnatbind): Output Control. - * -c (gnatchop): Switches for gnatchop. - * -C (gnatlink): Switches for gnatlink. - * -C (gnatmake): Switches for gnatmake. - * -c (gnatmake): Switches for gnatmake. - * -c (gnatname): Switches for gnatname. - * -cargs (gnatmake): Mode Switches for gnatmake. - * -d (gnatdll): Using gnatdll. - * -d (gnathtml): Converting Ada Files to html with gnathtml. - * -d (gnatls): Switches for gnatls. - * -D (gnatname): Switches for gnatname. - * -d (gnatname): Switches for gnatname. - * -e (gnatbind): Output Control. - * -e (gnatdll): Using gnatdll. - * -f (gnathtml): Converting Ada Files to html with gnathtml. - * -f (gnatlink): Switches for gnatlink. - * -f (gnatmake): Switches for gnatmake. - * -fno-inline (gcc): Inlining of Subprograms. - * -fstack-check: Stack Overflow Checking. - * -g (gcc): Switches for gcc. - * -g (gnatdll): Ada DLLs and Finalization. - * -g (gnatlink): Switches for gnatlink. - * -gnat83 (gcc): Compiling Ada 83 Programs. - * -gnata (gcc): Debugging and Assertion Control. - * -gnatb (gcc): Output and Error Message Control. - * -gnatc (gcc): Using gcc for Semantic Checking. - * -gnatD (gcc): Debugging Control. - * -gnatdc switch: GNAT Abnormal Termination or Failure to Terminate. - * -gnatE (gcc) <1>: Debugging Control. - * -gnatE (gcc): Run-Time Checks. - * -gnatem (gcc): Units to Sources Mapping Files. - * -gnatf (gcc): Output and Error Message Control. - * -gnatG (gcc): Debugging Control. - * -gnati (gcc): Character Set Control. - * -gnatk (gcc): File Naming Control. - * -gnatl (gcc): Output and Error Message Control. - * -gnatm (gcc): Output and Error Message Control. - * -gnatn (gcc): Inlining of Subprograms. - * -gnatN (gcc): Subprogram Inlining Control. - * -gnatn (gcc): Subprogram Inlining Control. - * -gnatN switch: Source Dependencies. - * -gnatn switch: Source Dependencies. - * -gnato (gcc) <1>: Controlling Run-Time Checks. - * -gnato (gcc): Run-Time Checks. - * -gnatp (gcc) <1>: Controlling Run-Time Checks. - * -gnatp (gcc): Run-Time Checks. - * -gnatq (gcc): Output and Error Message Control. - * -gnatR (gcc): Debugging Control. - * -gnats (gcc): Using gcc for Syntax Checking. - * -gnatt (gcc): Auxiliary Output Control. - * -gnatT (gcc): Run-Time Control. - * -gnatu (gcc): Auxiliary Output Control. - * -gnatU (gcc): Output and Error Message Control. - * -gnatv (gcc): Output and Error Message Control. - * -gnatW (gcc): Character Set Control. - * -gnatwA (gcc): Output and Error Message Control. - * -gnatwa (gcc): Output and Error Message Control. - * -gnatwB (gcc): Output and Error Message Control. - * -gnatwb (gcc): Output and Error Message Control. - * -gnatwC (gcc): Output and Error Message Control. - * -gnatwc (gcc): Output and Error Message Control. - * -gnatwD (gcc): Output and Error Message Control. - * -gnatwd (gcc): Output and Error Message Control. - * -gnatwe (gcc): Output and Error Message Control. - * -gnatwF (gcc): Output and Error Message Control. - * -gnatwf (gcc): Output and Error Message Control. - * -gnatwH (gcc): Output and Error Message Control. - * -gnatwh (gcc): Output and Error Message Control. - * -gnatwI (gcc): Output and Error Message Control. - * -gnatwi (gcc): Output and Error Message Control. - * -gnatwL (gcc): Output and Error Message Control. - * -gnatwl (gcc): Output and Error Message Control. - * -gnatwO (gcc): Output and Error Message Control. - * -gnatwo (gcc): Output and Error Message Control. - * -gnatwP (gcc): Output and Error Message Control. - * -gnatwp (gcc): Output and Error Message Control. - * -gnatwR (gcc): Output and Error Message Control. - * -gnatwr (gcc): Output and Error Message Control. - * -gnatws (gcc): Output and Error Message Control. - * -gnatwU (gcc): Output and Error Message Control. - * -gnatwu (gcc): Output and Error Message Control. - * -gnatx (gcc): Debugging Control. - * -h (gnatbind) <1>: Output Control. - * -h (gnatbind): Elaboration Control. - * -h (gnatdll): Using gnatdll. - * -h (gnatls): Switches for gnatls. - * -h (gnatname): Switches for gnatname. - * -I (gcc): Switches for gcc. - * -I (gnathtml): Converting Ada Files to html with gnathtml. - * -I (gnatmake): Switches for gnatmake. - * -i (gnatmake): Switches for gnatmake. - * -i (gnatmem): Switches for gnatmem. - * -I- (gcc): Switches for gcc. - * -I- (gnatmake): Switches for gnatmake. - * -j (gnatmake): Switches for gnatmake. - * -K (gnatbind): Output Control. - * -k (gnatchop): Switches for gnatchop. - * -k (gnatmake): Switches for gnatmake. - * -l (gnatbind): Output Control. - * -l (gnatdll): Using gnatdll. - * -l (gnathtml): Converting Ada Files to html with gnathtml. - * -L (gnatmake): Switches for gnatmake. - * -l (gnatmake): Switches for gnatmake. - * -largs (gnatdll): Using gnatdll. - * -largs (gnatmake): Mode Switches for gnatmake. - * -M (gnatbind): Binder Error Message Control. - * -m (gnatbind): Binder Error Message Control. - * -M (gnatmake): Switches for gnatmake. - * -m (gnatmake): Switches for gnatmake. - * -mwindows: CONSOLE and WINDOWS subsystems. - * -n (gnatbind): Binding with Non-Ada Main Programs. - * -n (gnatdll): Using gnatdll. - * -n (gnatlink): Switches for gnatlink. - * -n (gnatmake): Switches for gnatmake. - * -nostdinc (gnatmake): Switches for gnatmake. - * -nostdlib (gnatmake): Switches for gnatmake. - * -O (gcc) <1>: Optimization Levels. - * -O (gcc): Switches for gcc. - * -o (gcc): Switches for gcc. - * -o (gnatbind): Output Control. - * -O (gnatbind): Output Control. - * -o (gnathtml): Converting Ada Files to html with gnathtml. - * -o (gnatlink): Switches for gnatlink. - * -o (gnatls): Switches for gnatls. - * -o (gnatmake): Switches for gnatmake. - * -o (gnatmem): Switches for gnatmem. - * -p (gnatchop): Switches for gnatchop. - * -p (gnathtml): Converting Ada Files to html with gnathtml. - * -P (gnatname): Switches for gnatname. - * -pass-exit-codes (gcc): Auxiliary Output Control. - * -q (gnatchop): Switches for gnatchop. - * -q (gnatdll): Using gnatdll. - * -q (gnatmake): Switches for gnatmake. - * -q (gnatmem): Switches for gnatmem. - * -r (gnatbind): Output Control. - * -r (gnatchop): Switches for gnatchop. - * -S (gcc): Switches for gcc. - * -s (gnatbind): Consistency-Checking Modes. - * -s (gnatls): Switches for gnatls. - * -s (gnatmake): Switches for gnatmake. - * -sc (gnathtml): Converting Ada Files to html with gnathtml. - * -t (gnatbind): Binder Error Message Control. - * -t (gnathtml): Converting Ada Files to html with gnathtml. - * -u (gnatls): Switches for gnatls. - * -u (gnatmake): Switches for gnatmake. - * -V (gcc): Switches for gcc. - * -v (gcc): Switches for gcc. - * -v (gnatbind): Binder Error Message Control. - * -v (gnatchop): Switches for gnatchop. - * -v (gnatdll): Using gnatdll. - * -v (gnatlink): Switches for gnatlink. - * -v (gnatmake): Switches for gnatmake. - * -v (gnatname): Switches for gnatname. - * -v -v (gnatlink): Switches for gnatlink. - * -w: Output and Error Message Control. - * -w (gnatchop): Switches for gnatchop. - * -we (gnatbind): Binder Error Message Control. - * -ws (gnatbind): Binder Error Message Control. - * -x (gnatbind): Consistency-Checking Modes. - * -z (gnatbind): Binding Programs with No Main Subprogram. - * -z (gnatmake): Switches for gnatmake. - * .def: The Definition File. - * __gnat_finalize: Running gnatbind. - * __gnat_initialize: Running gnatbind. - * __gnat_set_globals: Running gnatbind. - * _main: The External Symbol Naming Scheme of GNAT. - * Access before elaboration: Run-Time Checks. - * Access-to-subprogram: Elaboration for Access-to-Subprogram Values. - * ACVC, Ada 83 tests: Compiling Ada 83 Programs. - * Ada <1>: Naming Conventions for GNAT Source Files. - * Ada: Search Paths for gnatbind. - * Ada 83 compatibility: Compiling Ada 83 Programs. - * Ada 95 Language Reference Manual: What You Should Know before Reading This Guide. - * Ada expressions: Using Ada Expressions. - * Ada Library Information files: The Ada Library Information Files. - * Ada.Characters.Latin_1: Latin-1. - * ADA_INCLUDE_PATH: Search Paths and the Run-Time Library (RTL). - * ADA_OBJECTS_PATH: Search Paths for gnatbind. - * adafinal <1>: Binding with Non-Ada Main Programs. - * adafinal: Running gnatbind. - * adainit <1>: Binding with Non-Ada Main Programs. - * adainit: Running gnatbind. - * Address Clauses, warnings: Output and Error Message Control. - * ali files: The Ada Library Information Files. - * Annex A: Naming Conventions for GNAT Source Files. - * Annex B: Naming Conventions for GNAT Source Files. - * APIENTRY: Windows Calling Conventions. - * Arbitrary File Naming Conventions: Handling Arbitrary File Naming Conventions Using gnatname. - * Asm: Calling Conventions. - * Assert: Debugging and Assertion Control. - * Assertions: Debugging and Assertion Control. - * Biased rounding: Output and Error Message Control. - * Binder consistency checks: Binder Error Message Control. - * Binder output file: Interfacing to C. - * Binder, multiple input files: Binding with Non-Ada Main Programs. - * Breakpoints and tasks: Ada Tasks. - * C: Calling Conventions. - * C++: Calling Conventions. - * Calling Conventions: Calling Conventions. - * Check, elaboration: Run-Time Checks. - * Check, overflow: Run-Time Checks. - * Check_CPU procedure: Check_CPU Procedure. - * Checks, access before elaboration: Run-Time Checks. - * Checks, division by zero: Run-Time Checks. - * Checks, elaboration: Checking the Elaboration Order in Ada 95. - * Checks, overflow: Controlling Run-Time Checks. - * Checks, suppressing: Run-Time Checks. - * COBOL: Calling Conventions. - * code page 437: Other 8-Bit Codes. - * code page 850: Other 8-Bit Codes. - * COM: GNAT and COM/DCOM Objects. - * Combining GNAT switches: Switches for gcc. - * Command line length: Switches for gnatlink. - * Compilation model: The GNAT Compilation Model. - * Conditionals, constant: Output and Error Message Control. - * Configuration pragmas: Configuration Pragmas. - * Consistency checks, in binder: Binder Error Message Control. - * CONSOLE Subsystem: CONSOLE and WINDOWS subsystems. - * Convention Ada: Calling Conventions. - * Convention Asm: Calling Conventions. - * Convention Assembler: Calling Conventions. - * Convention C: Calling Conventions. - * Convention C++: Calling Conventions. - * Convention COBOL: Calling Conventions. - * Convention Default: Calling Conventions. - * Convention DLL: Calling Conventions. - * Convention External: Calling Conventions. - * Convention Fortran: Calling Conventions. - * Convention Stdcall: Calling Conventions. - * Convention Stubbed: Calling Conventions. - * Convention Win32: Calling Conventions. - * Conventions: Conventions. - * CR: Source Representation. - * Cyrillic: Other 8-Bit Codes. - * DCOM: GNAT and COM/DCOM Objects. - * Debug: Debugging and Assertion Control. - * Debug Pool: Finding Memory Problems with GNAT Debug Pool. - * Debugger: Running and Debugging Ada Programs. - * Debugging: Running and Debugging Ada Programs. - * Debugging Generic Units: Debugging Generic Units. - * Debugging information, including: Switches for gnatlink. - * Debugging options: Debugging Control. - * Default: Calling Conventions. - * Definition file: The Definition File. - * Dependencies, producing list: Switches for gnatmake. - * Dependency rules: The GNAT Make Program gnatmake. - * Dereferencing, implicit: Output and Error Message Control. - * Division by zero: Run-Time Checks. - * DLL <1>: Introduction to Dynamic Link Libraries (DLLs). - * DLL: Calling Conventions. - * DLL debugging: Debugging a DLL. - * DLL debugging, attach to process: Attaching to a Running Process. - * DLLs and elaboration: Ada DLLs and Elaboration. - * DLLs and finalization: Ada DLLs and Finalization. - * DLLs, building: Building DLLs with GNAT. - * Elaborate: Controlling the Elaboration Order in Ada 95. - * Elaborate_All: Controlling the Elaboration Order in Ada 95. - * Elaborate_Body: Controlling the Elaboration Order in Ada 95. - * Elaboration checks <1>: Checking the Elaboration Order in Ada 95. - * Elaboration checks: Run-Time Checks. - * Elaboration control <1>: Summary of Procedures for Elaboration Control. - * Elaboration control: Elaboration Order Handling in GNAT. - * Elaboration of library tasks: Elaboration Issues for Library Tasks. - * Elaboration order control: Comparison between GNAT and C/C++ Compilation Models. - * Elaboration, warnings: Output and Error Message Control. - * Eliminate: Eliminate Pragma. - * End of source file: Source Representation. - * Error messages, suppressing: Output and Error Message Control. - * EUC Coding: Wide Character Encodings. - * Exceptions: Ada Exceptions. - * Export: The External Symbol Naming Scheme of GNAT. - * Export table: Exporting Ada Entities. - * External: Calling Conventions. - * FDL, GNU Free Documentation License: GNU Free Documentation License. - * FF: Source Representation. - * File names <1>: Alternative File Naming Schemes. - * File names: Using Other File Names. - * File naming schemes, alternative: Alternative File Naming Schemes. - * Foreign Languages: Calling Conventions. - * Formals, unreferenced: Output and Error Message Control. - * Fortran: Calling Conventions. - * gdb: Running and Debugging Ada Programs. - * Generic formal parameters: Compiling Ada 83 Programs. - * Generics <1>: Debugging Generic Units. - * Generics: Generating Object Files. - * Glide: Introduction to Glide and GVD. - * GMEM (gnatmem): Running gnatmem (GMEM Mode). - * GNAT <1>: Naming Conventions for GNAT Source Files. - * GNAT: Search Paths for gnatbind. - * GNAT Abnormal Termination or Failure to Terminate: GNAT Abnormal Termination or Failure to Terminate. - * GNAT compilation model: The GNAT Compilation Model. - * GNAT library: Comparison between GNAT and Conventional Ada Library Models. - * GNAT Setup Tool: GNAT Setup Tool. - * gnat.adc <1>: The Configuration Pragmas Files. - * gnat.adc: Using Other File Names. - * gnat1: Compiling Programs. - * gnat_argc: Command-Line Access. - * gnat_argv: Command-Line Access. - * GNAT_STACK_LIMIT: Stack Overflow Checking. - * gnatbind: Binding Using gnatbind. - * gnatchop: Renaming Files Using gnatchop. - * gnatdll: Using gnatdll. - * gnatelim: Reducing the Size of Ada Executables with gnatelim. - * gnatfind: The Cross-Referencing Tools gnatxref and gnatfind. - * gnatkr: File Name Krunching Using gnatkr. - * gnatlink: Linking Using gnatlink. - * gnatls: The GNAT Library Browser gnatls. - * gnatmake: The GNAT Make Program gnatmake. - * gnatmem: Finding Memory Problems with gnatmem. - * gnatprep: Preprocessing Using gnatprep. - * gnatreg: GNAT Setup Tool. - * gnatstub: Creating Sample Bodies Using gnatstub. - * gnatxref: The Cross-Referencing Tools gnatxref and gnatfind. - * GNU make: Using gnatmake in a Makefile. - * GVD: Introduction to Glide and GVD. - * Hiding of Declarations: Output and Error Message Control. - * HT: Source Representation. - * Implicit dereferencing: Output and Error Message Control. - * Import library: Creating an Import Library. - * Inline <1>: Inlining of Subprograms. - * Inline: Source Dependencies. - * Inlining: Comparison between GNAT and Conventional Ada Library Models. - * Inlining, warnings: Output and Error Message Control. - * Intel_CPU package body: Intel_CPU Package Body. - * Intel_CPU package specification: Intel_CPU Package Specification. - * Interfaces <1>: Naming Conventions for GNAT Source Files. - * Interfaces: Search Paths for gnatbind. - * Interfacing to Ada: Calling Conventions. - * Interfacing to Assembly: Calling Conventions. - * Interfacing to C: Calling Conventions. - * Interfacing to C++: Calling Conventions. - * Interfacing to COBOL: Calling Conventions. - * Interfacing to Fortran: Calling Conventions. - * Internal trees, writing to file: Auxiliary Output Control. - * Latin-1 <1>: Latin-1. - * Latin-1: Source Representation. - * Latin-2: Other 8-Bit Codes. - * Latin-3: Other 8-Bit Codes. - * Latin-4: Other 8-Bit Codes. - * Latin-5: Other 8-Bit Codes. - * LF: Source Representation. - * Library browser: The GNAT Library Browser gnatls. - * Library tasks, elaboration issues: Elaboration Issues for Library Tasks. - * Library, building, installing: GNAT and Libraries. - * Linker libraries: Switches for gnatmake. - * Machine_Overflows: Run-Time Checks. - * Main Program: Running gnatbind. - * make: Using the GNU make Utility. - * makefile: Using gnatmake in a Makefile. - * Mixed Language Programming: Mixed Language Programming. - * Multiple units, syntax checking: Using gcc for Syntax Checking. - * n (gnatmem): Switches for gnatmem. - * No code generated: Compiling Programs. - * No_Entry_Calls_In_Elaboration_Code: Elaboration Issues for Library Tasks. - * Object file list: Running gnatbind. - * Order of elaboration: Elaboration Order Handling in GNAT. - * Other Ada compilers: Calling Conventions. - * Overflow checks <1>: Controlling Run-Time Checks. - * Overflow checks: Run-Time Checks. - * Parallel make: Switches for gnatmake. - * Performance: Performance Considerations. - * pragma Elaborate: Controlling the Elaboration Order in Ada 95. - * pragma Elaborate_All: Controlling the Elaboration Order in Ada 95. - * pragma Elaborate_Body: Controlling the Elaboration Order in Ada 95. - * pragma Inline: Inlining of Subprograms. - * pragma Preelaborate: Controlling the Elaboration Order in Ada 95. - * pragma Pure: Controlling the Elaboration Order in Ada 95. - * pragma Suppress: Controlling Run-Time Checks. - * pragma Unsuppress: Controlling Run-Time Checks. - * Pragmas, configuration: Configuration Pragmas. - * Preelaborate: Controlling the Elaboration Order in Ada 95. - * Pure: Controlling the Elaboration Order in Ada 95. - * rc: Compiling Resources. - * rcl: Compiling Resources. - * Recompilation, by gnatmake: Notes on the Command Line. - * res2coff: Compiling Resources. - * Resources, building: Building Resources. - * Resources, compiling: Compiling Resources. - * Resources, limitations: Limitations. - * Resources, using: Using Resources. - * Resources, windows: GNAT and Windows Resources. - * Rounding, biased: Output and Error Message Control. - * RTL: Switches for gcc. - * SDP_Table_Build: Running gnatbind. - * Search paths, for gnatmake: Switches for gnatmake. - * Setup Tool: GNAT Setup Tool. - * Shift JIS Coding: Wide Character Encodings. - * Source file, end: Source Representation. - * Source files, suppressing search: Switches for gnatmake. - * Source files, use by binder: Running gnatbind. - * Source_File_Name pragma <1>: Alternative File Naming Schemes. - * Source_File_Name pragma: Using Other File Names. - * Source_Reference: Switches for gnatchop. - * Stack Overflow Checking: Stack Overflow Checking. - * stack traceback: Stack Traceback. - * stack unwinding: Stack Traceback. - * Stdcall <1>: Windows Calling Conventions. - * Stdcall: Calling Conventions. - * stderr: Output and Error Message Control. - * stdout: Output and Error Message Control. - * storage, pool, memory corruption: Finding Memory Problems with GNAT Debug Pool. - * Stubbed: Calling Conventions. - * Style checking: Style Checking. - * SUB: Source Representation. - * Subunits: Generating Object Files. - * Suppress <1>: Controlling Run-Time Checks. - * Suppress: Run-Time Checks. - * Suppressing checks: Run-Time Checks. - * System <1>: Naming Conventions for GNAT Source Files. - * System: Search Paths for gnatbind. - * System.IO: Search Paths and the Run-Time Library (RTL). - * Task switching: Ada Tasks. - * Tasks: Ada Tasks. - * Temporary files: Temporary Files. - * Time Slicing: Run-Time Control. - * Time stamp checks, in binder: Binder Error Message Control. - * traceback: Stack Traceback. - * traceback, non-symbolic: Non-Symbolic Traceback. - * traceback, symbolic: Symbolic Traceback. - * Tree file: Tree Files. - * Typographical conventions: Conventions. - * Unsuppress <1>: Controlling Run-Time Checks. - * Unsuppress: Run-Time Checks. - * Upper-Half Coding: Wide Character Encodings. - * Validity Checking: Validity Checking. - * Version skew (avoided by gnatmake): Running a Simple Ada Program. - * Volatile parameter: The Volatile Parameter. - * VT: Source Representation. - * Warning messages: Output and Error Message Control. - * Warnings: Binder Error Message Control. - * Warnings, treat as error: Output and Error Message Control. - * Win32: Calling Conventions. - * Windows 95: Microsoft Windows Topics. - * Windows 98: Microsoft Windows Topics. - * Windows NT: Microsoft Windows Topics. - * WINDOWS Subsystem: CONSOLE and WINDOWS subsystems. - * Writing internal trees: Auxiliary Output Control. - * Zero Cost Exceptions: Running gnatbind. - - -  - Tag Table: - Node: Top91 - Node: About This Guide9257 - Node: What This Guide Contains9766 - Node: What You Should Know before Reading This Guide14111 - Node: Related Information14519 - Node: Conventions15242 - Node: Getting Started with GNAT16136 - Node: Running GNAT16577 - Node: Running a Simple Ada Program17179 - Node: Running a Program with Multiple Units20533 - Node: Using the gnatmake Utility22764 - Node: Introduction to Glide and GVD25164 - Node: Building a New Program with Glide25906 - Node: Simple Debugging with GVD31244 - Node: Other Glide Features34281 - Node: The GNAT Compilation Model36164 - Node: Source Representation37494 - Node: Foreign Language Representation39280 - Node: Latin-139766 - Node: Other 8-Bit Codes40632 - Node: Wide Character Encodings42725 - Node: File Naming Rules46531 - Node: Using Other File Names48820 - Node: Alternative File Naming Schemes51173 - Node: Generating Object Files56405 - Node: Source Dependencies59119 - Node: The Ada Library Information Files62642 - Node: Binding an Ada Program64775 - Node: Mixed Language Programming66623 - Node: Interfacing to C66900 - Node: Calling Conventions69406 - Node: Building Mixed Ada & C++ Programs75330 - Node: Interfacing to C++76411 - Node: Linking a Mixed C++ & Ada Program77451 - Node: A Simple Example80485 - Node: Adapting the Run Time to a New C++ Compiler83397 - Node: Comparison between GNAT and C/C++ Compilation Models84413 - Node: Comparison between GNAT and Conventional Ada Library Models86142 - Node: Compiling Using gcc88793 - Node: Compiling Programs89288 - Node: Switches for gcc92238 - Node: Output and Error Message Control101422 - Node: Debugging and Assertion Control119508 - Node: Validity Checking120838 - Node: Style Checking126985 - Node: Run-Time Checks138458 - Node: Stack Overflow Checking142442 - Node: Run-Time Control144529 - Node: Using gcc for Syntax Checking145423 - Node: Using gcc for Semantic Checking146922 - Node: Compiling Ada 83 Programs148400 - Node: Character Set Control149821 - Node: File Naming Control152748 - Node: Subprogram Inlining Control153256 - Node: Auxiliary Output Control154597 - Node: Debugging Control156028 - Node: Units to Sources Mapping Files163468 - Node: Search Paths and the Run-Time Library (RTL)164858 - Node: Order of Compilation Issues168029 - Node: Examples169730 - Node: Binding Using gnatbind170298 - Node: Running gnatbind172160 - Node: Generating the Binder Program in C202921 - Node: Consistency-Checking Modes220366 - Node: Binder Error Message Control221861 - Node: Elaboration Control224127 - Node: Output Control225352 - Node: Binding with Non-Ada Main Programs227793 - Node: Binding Programs with No Main Subprogram230933 - Node: Summary of Binder Switches231756 - Node: Command-Line Access235205 - Node: Search Paths for gnatbind236210 - Node: Examples of gnatbind Usage238776 - Node: Linking Using gnatlink240547 - Node: Running gnatlink241286 - Node: Switches for gnatlink243271 - Node: Setting Stack Size from gnatlink247544 - Node: Setting Heap Size from gnatlink248398 - Node: The GNAT Make Program gnatmake249213 - Node: Running gnatmake250664 - Node: Switches for gnatmake252323 - Node: Mode Switches for gnatmake265413 - Node: Notes on the Command Line266571 - Node: How gnatmake Works269467 - Node: Examples of gnatmake Usage271637 - Node: Renaming Files Using gnatchop272764 - Node: Handling Files with Multiple Units273353 - Node: Operating gnatchop in Compilation Mode274674 - Node: Command Line for gnatchop277997 - Node: Switches for gnatchop279462 - Node: Examples of gnatchop Usage283243 - Node: Configuration Pragmas284602 - Node: Handling of Configuration Pragmas286154 - Node: The Configuration Pragmas Files287013 - Node: Handling Arbitrary File Naming Conventions Using gnatname288376 - Node: Arbitrary File Naming Conventions288784 - Node: Running gnatname290045 - Node: Switches for gnatname291504 - Node: Examples of gnatname Usage294638 - Node: GNAT Project Manager295439 - Node: Introduction296101 - Node: Project Files297197 - Node: Examples of Project Files300400 - Node: Common Sources with Different Switches and Different Output Directories300874 - Node: Source Files303905 - Node: Specifying the Object Directory304381 - Node: Specifying the Exec Directory305313 - Node: Project File Packages306081 - Node: Specifying Switch Settings307090 - Node: Main Subprograms309058 - Node: Source File Naming Conventions309722 - Node: Source Language(s)310222 - Node: Using External Variables310663 - Node: Importing Other Projects313504 - Node: Extending a Project316612 - Node: Project File Syntax319083 - Node: Basic Syntax320445 - Node: Packages321453 - Node: Expressions322607 - Node: String Types324505 - Node: Variables325808 - Node: Attributes328836 - Node: Associative Array Attributes334269 - Node: case Constructions335114 - Node: Objects and Sources in Project Files336911 - Node: Object Directory337491 - Node: Exec Directory338482 - Node: Source Directories339311 - Node: Source File Names340678 - Node: Importing Projects343015 - Node: Project Extension345794 - Node: External References in Project Files347473 - Node: Packages in Project Files349216 - Node: Variables from Imported Projects351612 - Node: Naming Schemes353284 - Node: Library Projects357257 - Node: Switches Related to Project Files360151 - Node: Tools Supporting Project Files361855 - Node: gnatmake and Project Files362187 - Node: Switches and Project Files362640 - Node: Project Files and Main Subprograms368384 - Node: The GNAT Driver and Project Files370309 - Node: Glide and Project Files373977 - Node: An Extended Example374616 - Node: Project File Complete Syntax377611 - Node: Elaboration Order Handling in GNAT380403 - Node: Elaboration Code in Ada 95381423 - Node: Checking the Elaboration Order in Ada 95386069 - Node: Controlling the Elaboration Order in Ada 95390070 - Node: Controlling Elaboration in GNAT - Internal Calls398387 - Node: Controlling Elaboration in GNAT - External Calls404094 - Node: Default Behavior in GNAT - Ensuring Safety407828 - Node: Elaboration Issues for Library Tasks411911 - Node: Mixing Elaboration Models425116 - Node: What to Do If the Default Elaboration Behavior Fails427617 - Node: Elaboration for Access-to-Subprogram Values437932 - Node: Summary of Procedures for Elaboration Control439739 - Node: Other Elaboration Order Considerations440902 - Node: The Cross-Referencing Tools gnatxref and gnatfind446131 - Node: gnatxref Switches447795 - Node: gnatfind Switches451234 - Node: Project Files for gnatxref and gnatfind456830 - Node: Regular Expressions in gnatfind and gnatxref459936 - Node: Examples of gnatxref Usage462715 - Node: Examples of gnatfind Usage466514 - Node: File Name Krunching Using gnatkr468717 - Node: About gnatkr469331 - Node: Using gnatkr470653 - Node: Krunching Method471544 - Node: Examples of gnatkr Usage474781 - Node: Preprocessing Using gnatprep475271 - Node: Using gnatprep475782 - Node: Switches for gnatprep476634 - Node: Form of Definitions File478756 - Node: Form of Input Text for gnatprep479495 - Node: The GNAT Library Browser gnatls483114 - Node: Running gnatls483643 - Node: Switches for gnatls486153 - Node: Examples of gnatls Usage488048 - Node: GNAT and Libraries490237 - Node: Creating an Ada Library490765 - Node: Installing an Ada Library493605 - Node: Using an Ada Library495962 - Node: Creating an Ada Library to be Used in a Non-Ada Context497153 - Node: Rebuilding the GNAT Run-Time Library503121 - Node: Using the GNU make Utility504028 - Node: Using gnatmake in a Makefile504874 - Node: Automatically Creating a List of Directories509082 - Node: Generating the Command Line Switches512220 - Node: Overcoming Command Line Length Limits513198 - Node: Finding Memory Problems with gnatmem515503 - Node: Running gnatmem (GDB Mode)516854 - Node: Running gnatmem (GMEM Mode)519291 - Node: Switches for gnatmem520549 - Node: Examples of gnatmem Usage521657 - Node: GDB and GMEM Modes526881 - Node: Implementation Note527522 - Node: gnatmem Using GDB Mode527752 - Node: gnatmem Using GMEM Mode529165 - Node: Finding Memory Problems with GNAT Debug Pool529811 - Node: Creating Sample Bodies Using gnatstub534515 - Node: Running gnatstub535310 - Node: Switches for gnatstub536064 - Node: Reducing the Size of Ada Executables with gnatelim538196 - Node: About gnatelim538729 - Node: Eliminate Pragma539817 - Node: Tree Files540825 - Node: Preparing Tree and Bind Files for gnatelim541714 - Node: Running gnatelim543716 - Node: Correcting the List of Eliminate Pragmas545711 - Node: Making Your Executables Smaller546492 - Node: Summary of the gnatelim Usage Cycle547314 - Node: Other Utility Programs548123 - Node: Using Other Utility Programs with GNAT548651 - Node: The gnatpsta Utility Program549339 - Node: The External Symbol Naming Scheme of GNAT550633 - Node: Ada Mode for Glide552630 - Node: Converting Ada Files to html with gnathtml554581 - Node: Installing gnathtml558154 - Node: Running and Debugging Ada Programs558818 - Node: The GNAT Debugger GDB560212 - Node: Running GDB563330 - Node: Introduction to GDB Commands564346 - Node: Using Ada Expressions569211 - Node: Calling User-Defined Subprograms570405 - Node: Using the Next Command in a Function572825 - Node: Ada Exceptions573990 - Node: Ada Tasks574944 - Node: Debugging Generic Units577007 - Node: GNAT Abnormal Termination or Failure to Terminate578410 - Node: Naming Conventions for GNAT Source Files580989 - Node: Getting Internal Debugging Information583580 - Node: Stack Traceback584782 - Node: Non-Symbolic Traceback585819 - Node: Tracebacks From an Unhandled Exception586280 - Node: Tracebacks From Exception Occurrences (non-symbolic)590356 - Node: Tracebacks From Anywhere in a Program (non-symbolic)591639 - Node: Symbolic Traceback593482 - Node: Tracebacks From Exception Occurrences (symbolic)594205 - Node: Tracebacks From Anywhere in a Program (symbolic)595614 - Node: Inline Assembler596806 - Node: Basic Assembler Syntax598502 - Node: A Simple Example of Inline Assembler600279 - Node: Output Variables in Inline Assembler603446 - Node: Input Variables in Inline Assembler610826 - Node: Inlining Inline Assembler Code613334 - Node: Other Asm Functionality615268 - Node: The Clobber Parameter615703 - Node: The Volatile Parameter617702 - Node: A Complete Example618894 - Node: Check_CPU Procedure619868 - Node: Intel_CPU Package Specification634915 - Node: Intel_CPU Package Body644343 - Node: Microsoft Windows Topics653501 - Node: Using GNAT on Windows654151 - Node: GNAT Setup Tool655922 - Node: Command-line arguments656640 - Node: Creating a network installation of GNAT657137 - Node: Registering and unregistering additional libraries658123 - Node: CONSOLE and WINDOWS subsystems658813 - Node: Temporary Files659437 - Node: Mixed-Language Programming on Windows660241 - Node: Windows Calling Conventions662382 - Node: C Calling Convention663235 - Node: Stdcall Calling Convention664761 - Node: DLL Calling Convention667315 - Node: Introduction to Dynamic Link Libraries (DLLs)668047 - Node: Using DLLs with GNAT671252 - Node: Creating an Ada Spec for the DLL Services673051 - Node: Creating an Import Library674307 - Node: The Definition File674762 - Node: GNAT-Style Import Library676106 - Node: Microsoft-Style Import Library678220 - Node: Building DLLs with GNAT679360 - Node: Limitations When Using Ada DLLs from Ada681448 - Node: Exporting Ada Entities682476 - Node: Ada DLLs and Elaboration685327 - Node: Ada DLLs and Finalization686848 - Node: Creating a Spec for Ada DLLs687920 - Node: Creating the Definition File689325 - Node: Using gnatdll690150 - Node: gnatdll Example693177 - Node: gnatdll behind the Scenes693762 - Node: Using dlltool696238 - Node: GNAT and Windows Resources697560 - Node: Building Resources698174 - Node: Compiling Resources698833 - Node: Using Resources699811 - Node: Limitations700205 - Node: Debugging a DLL701141 - Node: The Program and the DLL Are Built with GCC/GNAT702173 - Node: The Program Is Built with Some Foreign Tools and the DLL Is Built with GCC/GNAT703676 - Node: Debugging the DLL Directly704936 - Node: Attaching to a Running Process705742 - Node: GNAT and COM/DCOM Objects707045 - Node: Performance Considerations707254 - Node: Controlling Run-Time Checks708296 - Node: Optimization Levels710281 - Node: Debugging Optimized Code712138 - Node: Inlining of Subprograms715871 - Node: GNU Free Documentation License719395 - Node: Index741824 -  - End Tag Table --- 0 ---- diff -Nrc3pad gcc-3.3.2/gcc/builtins.c gcc-3.3.3/gcc/builtins.c *** gcc-3.3.2/gcc/builtins.c Thu Sep 18 21:18:05 2003 --- gcc-3.3.3/gcc/builtins.c Sun Jan 11 19:13:03 2004 *************** expand_builtin_bzero (exp) *** 2353,2359 **** return result; } ! /* Expand expression EXP, which is a call to the memcmp or the strcmp builtin. ARGLIST is the argument list for this call. Return 0 if we failed and the caller should emit a normal call, otherwise try to get the result in TARGET, if convenient (and in mode MODE, if that's convenient). */ --- 2353,2359 ---- return result; } ! /* Expand expression EXP, which is a call to the memcmp built-in function. ARGLIST is the argument list for this call. Return 0 if we failed and the caller should emit a normal call, otherwise try to get the result in TARGET, if convenient (and in mode MODE, if that's convenient). */ *************** expand_builtin_strcmp (exp, target, mode *** 2490,2496 **** enum machine_mode mode; { tree arglist = TREE_OPERAND (exp, 1); ! tree arg1, arg2, len, len2, fn; const char *p1, *p2; if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE)) --- 2490,2496 ---- enum machine_mode mode; { tree arglist = TREE_OPERAND (exp, 1); ! tree arg1, arg2; const char *p1, *p2; if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE)) *************** expand_builtin_strcmp (exp, target, mode *** 2526,2576 **** return expand_expr (result, target, mode, EXPAND_NORMAL); } ! len = c_strlen (arg1); ! len2 = c_strlen (arg2); ! if (len) ! len = size_binop (PLUS_EXPR, ssize_int (1), len); ! if (len2) ! len2 = size_binop (PLUS_EXPR, ssize_int (1), len2); ! /* If we don't have a constant length for the first, use the length ! of the second, if we know it. We don't require a constant for ! this case; some cost analysis could be done if both are available ! but neither is constant. For now, assume they're equally cheap ! unless one has side effects. ! If both strings have constant lengths, use the smaller. This ! could arise if optimization results in strcpy being called with ! two fixed strings, or if the code was machine-generated. We should ! add some code to the `memcmp' handler below to deal with such ! situations, someday. */ ! if (!len || TREE_CODE (len) != INTEGER_CST) ! { ! if (len2 && !TREE_SIDE_EFFECTS (len2)) len = len2; ! else if (len == 0) return 0; - } - else if (len2 && TREE_CODE (len2) == INTEGER_CST - && tree_int_cst_lt (len2, len)) - len = len2; ! /* If both arguments have side effects, we cannot optimize. */ ! if (TREE_SIDE_EFFECTS (len)) ! return 0; ! fn = built_in_decls[BUILT_IN_MEMCMP]; ! if (!fn) ! return 0; ! arglist = build_tree_list (NULL_TREE, len); ! arglist = tree_cons (NULL_TREE, arg2, arglist); ! arglist = tree_cons (NULL_TREE, arg1, arglist); ! return expand_expr (build_function_call_expr (fn, arglist), ! target, mode, EXPAND_NORMAL); } /* Expand expression EXP, which is a call to the strncmp builtin. Return 0 --- 2526,2614 ---- return expand_expr (result, target, mode, EXPAND_NORMAL); } ! #ifdef HAVE_cmpstrsi ! if (HAVE_cmpstrsi) ! { ! tree len, len1, len2; ! rtx arg1_rtx, arg2_rtx, arg3_rtx; ! rtx result, insn; ! int arg1_align ! = get_pointer_alignment (arg1, BIGGEST_ALIGNMENT) / BITS_PER_UNIT; ! int arg2_align ! = get_pointer_alignment (arg2, BIGGEST_ALIGNMENT) / BITS_PER_UNIT; ! enum machine_mode insn_mode ! = insn_data[(int) CODE_FOR_cmpstrsi].operand[0].mode; ! len1 = c_strlen (arg1); ! len2 = c_strlen (arg2); ! if (len1) ! len1 = size_binop (PLUS_EXPR, ssize_int (1), len1); ! if (len2) ! len2 = size_binop (PLUS_EXPR, ssize_int (1), len2); ! /* If we don't have a constant length for the first, use the length ! of the second, if we know it. We don't require a constant for ! this case; some cost analysis could be done if both are available ! but neither is constant. For now, assume they're equally cheap ! unless one has side effects. If both strings have constant lengths, ! use the smaller. */ ! if (!len1) len = len2; ! else if (!len2) ! len = len1; ! else if (TREE_SIDE_EFFECTS (len1)) ! len = len2; ! else if (TREE_SIDE_EFFECTS (len2)) ! len = len1; ! else if (TREE_CODE (len1) != INTEGER_CST) ! len = len2; ! else if (TREE_CODE (len2) != INTEGER_CST) ! len = len1; ! else if (tree_int_cst_lt (len1, len2)) ! len = len1; ! else ! len = len2; ! ! /* If both arguments have side effects, we cannot optimize. */ ! if (!len || TREE_SIDE_EFFECTS (len)) return 0; ! /* If we don't have POINTER_TYPE, call the function. */ ! if (arg1_align == 0 || arg2_align == 0) ! return 0; ! /* Make a place to write the result of the instruction. */ ! result = target; ! if (! (result != 0 ! && GET_CODE (result) == REG ! && GET_MODE (result) == insn_mode ! && REGNO (result) >= FIRST_PSEUDO_REGISTER)) ! result = gen_reg_rtx (insn_mode); ! arg1_rtx = get_memory_rtx (arg1); ! arg2_rtx = get_memory_rtx (arg2); ! arg3_rtx = expand_expr (len, NULL_RTX, VOIDmode, 0); ! insn = gen_cmpstrsi (result, arg1_rtx, arg2_rtx, arg3_rtx, ! GEN_INT (MIN (arg1_align, arg2_align))); ! if (!insn) ! return 0; ! ! emit_insn (insn); ! ! /* Return the value in the proper mode for this function. */ ! mode = TYPE_MODE (TREE_TYPE (exp)); ! if (GET_MODE (result) == mode) ! return result; ! if (target == 0) ! return convert_to_mode (mode, result, 0); ! convert_move (target, result, 0); ! return target; ! } ! #endif ! return 0; } /* Expand expression EXP, which is a call to the strncmp builtin. Return 0 *************** expand_builtin_strncmp (exp, target, mod *** 2584,2590 **** enum machine_mode mode; { tree arglist = TREE_OPERAND (exp, 1); - tree fn, newarglist, len = 0; tree arg1, arg2, arg3; const char *p1, *p2; --- 2622,2627 ---- *************** expand_builtin_strncmp (exp, target, mod *** 2638,2678 **** } /* If c_strlen can determine an expression for one of the string ! lengths, and it doesn't have side effects, then call ! expand_builtin_memcmp() using length MIN(strlen(string)+1, arg3). */ ! /* Perhaps one of the strings is really constant, if so prefer ! that constant length over the other string's length. */ ! if (p1) ! len = c_strlen (arg1); ! else if (p2) ! len = c_strlen (arg2); ! /* If we still don't have a len, try either string arg as long ! as they don't have side effects. */ ! if (!len && !TREE_SIDE_EFFECTS (arg1)) ! len = c_strlen (arg1); ! if (!len && !TREE_SIDE_EFFECTS (arg2)) ! len = c_strlen (arg2); ! /* If we still don't have a length, punt. */ ! if (!len) ! return 0; ! fn = built_in_decls[BUILT_IN_MEMCMP]; ! if (!fn) ! return 0; ! /* Add one to the string length. */ ! len = fold (size_binop (PLUS_EXPR, len, ssize_int (1))); ! /* The actual new length parameter is MIN(len,arg3). */ ! len = fold (build (MIN_EXPR, TREE_TYPE (len), len, arg3)); ! newarglist = build_tree_list (NULL_TREE, len); ! newarglist = tree_cons (NULL_TREE, arg2, newarglist); ! newarglist = tree_cons (NULL_TREE, arg1, newarglist); ! return expand_expr (build_function_call_expr (fn, newarglist), ! target, mode, EXPAND_NORMAL); } /* Expand expression EXP, which is a call to the strcat builtin. --- 2675,2768 ---- } /* If c_strlen can determine an expression for one of the string ! lengths, and it doesn't have side effects, then emit cmpstrsi ! using length MIN(strlen(string)+1, arg3). */ ! #ifdef HAVE_cmpstrsi ! if (HAVE_cmpstrsi) ! { ! tree len, len1, len2; ! rtx arg1_rtx, arg2_rtx, arg3_rtx; ! rtx result, insn; ! int arg1_align ! = get_pointer_alignment (arg1, BIGGEST_ALIGNMENT) / BITS_PER_UNIT; ! int arg2_align ! = get_pointer_alignment (arg2, BIGGEST_ALIGNMENT) / BITS_PER_UNIT; ! enum machine_mode insn_mode ! = insn_data[(int) CODE_FOR_cmpstrsi].operand[0].mode; ! len1 = c_strlen (arg1); ! len2 = c_strlen (arg2); ! if (len1) ! len1 = size_binop (PLUS_EXPR, ssize_int (1), len1); ! if (len2) ! len2 = size_binop (PLUS_EXPR, ssize_int (1), len2); ! /* If we don't have a constant length for the first, use the length ! of the second, if we know it. We don't require a constant for ! this case; some cost analysis could be done if both are available ! but neither is constant. For now, assume they're equally cheap, ! unless one has side effects. If both strings have constant lengths, ! use the smaller. */ ! if (!len1) ! len = len2; ! else if (!len2) ! len = len1; ! else if (TREE_SIDE_EFFECTS (len1)) ! len = len2; ! else if (TREE_SIDE_EFFECTS (len2)) ! len = len1; ! else if (TREE_CODE (len1) != INTEGER_CST) ! len = len2; ! else if (TREE_CODE (len2) != INTEGER_CST) ! len = len1; ! else if (tree_int_cst_lt (len1, len2)) ! len = len1; ! else ! len = len2; ! /* If both arguments have side effects, we cannot optimize. */ ! if (!len || TREE_SIDE_EFFECTS (len)) ! return 0; ! ! /* The actual new length parameter is MIN(len,arg3). */ ! len = fold (build (MIN_EXPR, TREE_TYPE (len), len, arg3)); ! ! /* If we don't have POINTER_TYPE, call the function. */ ! if (arg1_align == 0 || arg2_align == 0) ! return 0; ! ! /* Make a place to write the result of the instruction. */ ! result = target; ! if (! (result != 0 ! && GET_CODE (result) == REG ! && GET_MODE (result) == insn_mode ! && REGNO (result) >= FIRST_PSEUDO_REGISTER)) ! result = gen_reg_rtx (insn_mode); ! ! arg1_rtx = get_memory_rtx (arg1); ! arg2_rtx = get_memory_rtx (arg2); ! arg3_rtx = expand_expr (len, NULL_RTX, VOIDmode, 0); ! insn = gen_cmpstrsi (result, arg1_rtx, arg2_rtx, arg3_rtx, ! GEN_INT (MIN (arg1_align, arg2_align))); ! if (!insn) ! return 0; ! ! emit_insn (insn); ! ! /* Return the value in the proper mode for this function. */ ! mode = TYPE_MODE (TREE_TYPE (exp)); ! if (GET_MODE (result) == mode) ! return result; ! if (target == 0) ! return convert_to_mode (mode, result, 0); ! convert_move (target, result, 0); ! return target; ! } ! #endif ! return 0; } /* Expand expression EXP, which is a call to the strcat builtin. *************** expand_builtin_expect_jump (exp, if_fals *** 3573,3603 **** if (TREE_CODE (TREE_TYPE (arg1)) == INTEGER_TYPE && (integer_zerop (arg1) || integer_onep (arg1))) { ! int num_jumps = 0; ! rtx insn; ! ! /* If we fail to locate an appropriate conditional jump, we'll ! fall back to normal evaluation. Ensure that the expression ! can be re-evaluated. */ ! switch (unsafe_for_reeval (arg0)) ! { ! case 0: /* Safe. */ ! break; ! ! case 1: /* Mildly unsafe. */ ! arg0 = unsave_expr (arg0); ! break; ! ! case 2: /* Wildly unsafe. */ ! return NULL_RTX; ! } /* Expand the jump insns. */ start_sequence (); do_jump (arg0, if_false_label, if_true_label); ret = get_insns (); end_sequence (); /* Now that the __builtin_expect has been validated, go through and add the expect's to each of the conditional jumps. If we run into an error, just give up and generate the 'safe' code of doing a SCC --- 3663,3687 ---- if (TREE_CODE (TREE_TYPE (arg1)) == INTEGER_TYPE && (integer_zerop (arg1) || integer_onep (arg1))) { ! rtx insn, drop_through_label; /* Expand the jump insns. */ start_sequence (); do_jump (arg0, if_false_label, if_true_label); ret = get_insns (); + + drop_through_label = get_last_insn (); + if (drop_through_label && GET_CODE (drop_through_label) == NOTE) + drop_through_label = prev_nonnote_insn (drop_through_label); + if (drop_through_label && GET_CODE (drop_through_label) != CODE_LABEL) + drop_through_label = NULL_RTX; end_sequence (); + if (! if_true_label) + if_true_label = drop_through_label; + if (! if_false_label) + if_false_label = drop_through_label; + /* Now that the __builtin_expect has been validated, go through and add the expect's to each of the conditional jumps. If we run into an error, just give up and generate the 'safe' code of doing a SCC *************** expand_builtin_expect_jump (exp, if_fals *** 3659,3676 **** else if (label != if_true_label) goto do_next_insn; - num_jumps++; predict_insn_def (insn, PRED_BUILTIN_EXPECT, taken); } do_next_insn: insn = next; } - - /* If no jumps were modified, fail and do __builtin_expect the normal - way. */ - if (num_jumps == 0) - ret = NULL_RTX; } return ret; --- 3743,3754 ---- diff -Nrc3pad gcc-3.3.2/gcc/c-objc-common.c gcc-3.3.3/gcc/c-objc-common.c *** gcc-3.3.2/gcc/c-objc-common.c Fri Oct 3 00:36:55 2003 --- gcc-3.3.3/gcc/c-objc-common.c Wed Nov 12 18:33:22 2003 *************** inline_forbidden_p (nodep, walk_subtrees *** 88,111 **** if (setjmp_call_p (t)) return node; ! switch (DECL_FUNCTION_CODE (t)) ! { ! /* We cannot inline functions that take a variable number of ! arguments. */ ! case BUILT_IN_VA_START: ! case BUILT_IN_STDARG_START: ! case BUILT_IN_NEXT_ARG: ! case BUILT_IN_VA_END: ! #if 0 ! /* Functions that need information about the address of the ! caller can't (shouldn't?) be inlined. */ ! case BUILT_IN_RETURN_ADDRESS: ! #endif ! return node; ! default: ! break; ! } break; --- 88,107 ---- if (setjmp_call_p (t)) return node; ! if (DECL_BUILT_IN (t)) ! switch (DECL_FUNCTION_CODE (t)) ! { ! /* We cannot inline functions that take a variable number of ! arguments. */ ! case BUILT_IN_VA_START: ! case BUILT_IN_STDARG_START: ! case BUILT_IN_NEXT_ARG: ! case BUILT_IN_VA_END: ! return node; ! default: ! break; ! } break; diff -Nrc3pad gcc-3.3.2/gcc/c-parse.c gcc-3.3.3/gcc/c-parse.c *** gcc-3.3.2/gcc/c-parse.c Thu Oct 16 20:13:06 2003 --- gcc-3.3.3/gcc/c-parse.c Sat Feb 14 20:35:44 2004 *************** *** 1,5 **** /* A Bison parser, made from c-parse.y ! by GNU bison 1.35. */ #define YYBISON 1 /* Identify Bison output. */ --- 1,5 ---- /* A Bison parser, made from c-parse.y ! by GNU bison 1.33. */ #define YYBISON 1 /* Identify Bison output. */ *************** do { \ *** 143,149 **** typedef union {long itype; tree ttype; enum tree_code code; const char *filename; int lineno; } yystype; # define YYSTYPE yystype - # define YYSTYPE_IS_TRIVIAL 1 #endif #line 237 "c-parse.y" --- 143,148 ---- *************** static const short yycheck[] = *** 1717,1722 **** --- 1716,1731 ---- define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ + #ifdef __cplusplus + # define YYSTD(x) std::x + #else + # define YYSTD(x) x + #endif + + #ifndef YYPARSE_RETURN_TYPE + #define YYPARSE_RETURN_TYPE int + #endif + #if ! defined (yyoverflow) || defined (YYERROR_VERBOSE) /* The parser invokes alloca or malloc; define the necessary symbols. */ *************** static const short yycheck[] = *** 1739,1757 **** /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) # else ! # if defined (__STDC__) || defined (__cplusplus) ! # include /* INFRINGES ON USER NAME SPACE */ ! # define YYSIZE_T size_t # endif ! # define YYSTACK_ALLOC malloc ! # define YYSTACK_FREE free # endif - #endif /* ! defined (yyoverflow) || defined (YYERROR_VERBOSE) */ - - - #if (! defined (yyoverflow) \ - && (! defined (__cplusplus) \ - || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc --- 1748,1765 ---- /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) # else ! # ifdef __cplusplus ! # include /* INFRINGES ON USER NAME SPACE */ ! # define YYSIZE_T std::size_t ! # else ! # ifdef __STDC__ ! # include /* INFRINGES ON USER NAME SPACE */ ! # define YYSIZE_T size_t ! # endif # endif ! # define YYSTACK_ALLOC YYSTD (malloc) ! # define YYSTACK_FREE YYSTD (free) # endif /* A type that is properly aligned for any stack member. */ union yyalloc *************** union yyalloc *** 1778,1818 **** + YYSTACK_GAP_MAX) # endif ! /* Copy COUNT objects from FROM to TO. The source and destination do ! not overlap. */ ! # ifndef YYCOPY ! # if 1 < __GNUC__ ! # define YYCOPY(To, From, Count) \ ! __builtin_memcpy (To, From, (Count) * sizeof (*(From))) ! # else ! # define YYCOPY(To, From, Count) \ ! do \ ! { \ ! register YYSIZE_T yyi; \ ! for (yyi = 0; yyi < (Count); yyi++) \ ! (To)[yyi] = (From)[yyi]; \ ! } \ ! while (0) ! # endif ! # endif ! ! /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ ! # define YYSTACK_RELOCATE(Stack) \ do \ { \ YYSIZE_T yynewbytes; \ ! YYCOPY (&yyptr->Stack, Stack, yysize); \ Stack = &yyptr->Stack; \ ! yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (0) ! #endif #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) --- 1786,1809 ---- + YYSTACK_GAP_MAX) # endif ! /* Relocate the TYPE STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ ! # define YYSTACK_RELOCATE(Type, Stack) \ do \ { \ YYSIZE_T yynewbytes; \ ! yymemcpy ((char *) yyptr, (char *) (Stack), \ ! yysize * (YYSIZE_T) sizeof (Type)); \ Stack = &yyptr->Stack; \ ! yynewbytes = yystacksize * sizeof (Type) + YYSTACK_GAP_MAX; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (0) ! #endif /* ! defined (yyoverflow) || defined (YYERROR_VERBOSE) */ #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) *************** union yyalloc *** 1822,1830 **** # define YYSIZE_T size_t #endif #if ! defined (YYSIZE_T) ! # if defined (__STDC__) || defined (__cplusplus) ! # include /* INFRINGES ON USER NAME SPACE */ ! # define YYSIZE_T size_t # endif #endif #if ! defined (YYSIZE_T) --- 1813,1826 ---- # define YYSIZE_T size_t #endif #if ! defined (YYSIZE_T) ! # ifdef __cplusplus ! # include /* INFRINGES ON USER NAME SPACE */ ! # define YYSIZE_T std::size_t ! # else ! # ifdef __STDC__ ! # include /* INFRINGES ON USER NAME SPACE */ ! # define YYSIZE_T size_t ! # endif # endif #endif #if ! defined (YYSIZE_T) *************** while (0) *** 1903,1910 **** #if YYDEBUG # ifndef YYFPRINTF ! # include /* INFRINGES ON USER NAME SPACE */ ! # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ --- 1899,1910 ---- #if YYDEBUG # ifndef YYFPRINTF ! # ifdef __cplusplus ! # include /* INFRINGES ON USER NAME SPACE */ ! # else ! # include /* INFRINGES ON USER NAME SPACE */ ! # endif ! # define YYFPRINTF YYSTD (fprintf) # endif # define YYDPRINTF(Args) \ *************** do { \ *** 1912,1919 **** if (yydebug) \ YYFPRINTF Args; \ } while (0) ! /* Nonzero means print parse trace. It is left uninitialized so that ! multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) --- 1912,1921 ---- if (yydebug) \ YYFPRINTF Args; \ } while (0) ! /* Nonzero means print parse trace. [The following comment makes no ! sense to me. Could someone clarify it? --akim] Since this is ! uninitialized, it does not stop multiple parsers from coexisting. ! */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) *************** int yydebug; *** 1939,1944 **** --- 1941,1973 ---- # define YYMAXDEPTH 10000 #endif + #if ! defined (yyoverflow) && ! defined (yymemcpy) + # if __GNUC__ > 1 /* GNU C and GNU C++ define this. */ + # define yymemcpy __builtin_memcpy + # else /* not GNU C or C++ */ + + /* This is the most reliable way to avoid incompatibilities + in available built-in functions on various systems. */ + static void + # if defined (__STDC__) || defined (__cplusplus) + yymemcpy (char *yyto, const char *yyfrom, YYSIZE_T yycount) + # else + yymemcpy (yyto, yyfrom, yycount) + char *yyto; + const char *yyfrom; + YYSIZE_T yycount; + # endif + { + register const char *yyf = yyfrom; + register char *yyt = yyto; + register YYSIZE_T yyi = yycount; + + while (yyi-- != 0) + *yyt++ = *yyf++; + } + # endif + #endif + #ifdef YYERROR_VERBOSE # ifndef yystrlen *************** yystpcpy (yydest, yysrc) *** 1991,1997 **** # endif #endif ! #line 315 "/usr/share/bison/bison.simple" /* The user can define YYPARSE_PARAM as the name of an argument to be passed --- 2020,2026 ---- # endif #endif ! #line 345 "/usr/share/bison/bison.simple" /* The user can define YYPARSE_PARAM as the name of an argument to be passed *************** yystpcpy (yydest, yysrc) *** 2001,2013 **** to the proper pointer type. */ #ifdef YYPARSE_PARAM ! # if defined (__STDC__) || defined (__cplusplus) # define YYPARSE_PARAM_ARG void *YYPARSE_PARAM # define YYPARSE_PARAM_DECL ! # else # define YYPARSE_PARAM_ARG YYPARSE_PARAM # define YYPARSE_PARAM_DECL void *YYPARSE_PARAM; ! # endif #else /* !YYPARSE_PARAM */ # define YYPARSE_PARAM_ARG # define YYPARSE_PARAM_DECL --- 2030,2042 ---- to the proper pointer type. */ #ifdef YYPARSE_PARAM ! # ifdef __cplusplus # define YYPARSE_PARAM_ARG void *YYPARSE_PARAM # define YYPARSE_PARAM_DECL ! # else /* !__cplusplus */ # define YYPARSE_PARAM_ARG YYPARSE_PARAM # define YYPARSE_PARAM_DECL void *YYPARSE_PARAM; ! # endif /* !__cplusplus */ #else /* !YYPARSE_PARAM */ # define YYPARSE_PARAM_ARG # define YYPARSE_PARAM_DECL *************** yystpcpy (yydest, yysrc) *** 2016,2024 **** /* Prevent warning if -Wstrict-prototypes. */ #ifdef __GNUC__ # ifdef YYPARSE_PARAM ! int yyparse (void *); # else ! int yyparse (void); # endif #endif --- 2045,2053 ---- /* Prevent warning if -Wstrict-prototypes. */ #ifdef __GNUC__ # ifdef YYPARSE_PARAM ! YYPARSE_RETURN_TYPE yyparse (void *); # else ! YYPARSE_RETURN_TYPE yyparse (void); # endif #endif *************** YY_DECL_NON_LSP_VARIABLES *** 2053,2059 **** YY_DECL_VARIABLES #endif /* !YYPURE */ ! int yyparse (YYPARSE_PARAM_ARG) YYPARSE_PARAM_DECL { --- 2082,2088 ---- YY_DECL_VARIABLES #endif /* !YYPURE */ ! YYPARSE_RETURN_TYPE yyparse (YYPARSE_PARAM_ARG) YYPARSE_PARAM_DECL { *************** yyparse (YYPARSE_PARAM_ARG) *** 2181,2189 **** yyvs = yyvs1; } #else /* no yyoverflow */ - # ifndef YYSTACK_RELOCATE - goto yyoverflowlab; - # else /* Extend the stack our own way. */ if (yystacksize >= YYMAXDEPTH) goto yyoverflowlab; --- 2210,2215 ---- *************** yyparse (YYPARSE_PARAM_ARG) *** 2197,2212 **** (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyoverflowlab; ! YYSTACK_RELOCATE (yyss); ! YYSTACK_RELOCATE (yyvs); # if YYLSP_NEEDED ! YYSTACK_RELOCATE (yyls); # endif # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } - # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; --- 2223,2237 ---- (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyoverflowlab; ! YYSTACK_RELOCATE (short, yyss); ! YYSTACK_RELOCATE (YYSTYPE, yyvs); # if YYLSP_NEEDED ! YYSTACK_RELOCATE (YYLTYPE, yyls); # endif # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; *************** case 557: *** 4593,4599 **** break;} } ! #line 705 "/usr/share/bison/bison.simple" yyvsp -= yylen; --- 4618,4624 ---- break;} } ! #line 731 "/usr/share/bison/bison.simple" yyvsp -= yylen; diff -Nrc3pad gcc-3.3.2/gcc/c-typeck.c gcc-3.3.3/gcc/c-typeck.c *** gcc-3.3.2/gcc/c-typeck.c Mon Oct 13 21:18:33 2003 --- gcc-3.3.3/gcc/c-typeck.c Tue Dec 23 06:23:32 2003 *************** convert_for_assignment (type, rhs, errty *** 4263,4274 **** && TREE_CODE (TREE_TYPE (rhs)) == INTEGER_TYPE && TREE_CODE (TREE_OPERAND (rhs, 0)) == INTEGER_CST && integer_zerop (TREE_OPERAND (rhs, 0)))) - { warn_for_assignment ("%s makes pointer from integer without a cast", errtype, funname, parmnum); ! return convert (type, rhs); ! } ! return null_pointer_node; } else if (codel == INTEGER_TYPE && coder == POINTER_TYPE) { --- 4263,4272 ---- && TREE_CODE (TREE_TYPE (rhs)) == INTEGER_TYPE && TREE_CODE (TREE_OPERAND (rhs, 0)) == INTEGER_CST && integer_zerop (TREE_OPERAND (rhs, 0)))) warn_for_assignment ("%s makes pointer from integer without a cast", errtype, funname, parmnum); ! ! return convert (type, rhs); } else if (codel == INTEGER_TYPE && coder == POINTER_TYPE) { diff -Nrc3pad gcc-3.3.2/gcc/caller-save.c gcc-3.3.3/gcc/caller-save.c *** gcc-3.3.2/gcc/caller-save.c Thu Jun 13 12:24:00 2002 --- gcc-3.3.3/gcc/caller-save.c Thu Dec 11 07:48:05 2003 *************** save_call_clobbered_regs () *** 407,413 **** regno += insert_restore (chain, 1, regno, MOVE_MAX_WORDS, save_mode); } ! if (code == CALL_INSN) { int regno; HARD_REG_SET hard_regs_to_save; --- 407,413 ---- regno += insert_restore (chain, 1, regno, MOVE_MAX_WORDS, save_mode); } ! if (code == CALL_INSN && ! find_reg_note (insn, REG_NORETURN, NULL)) { int regno; HARD_REG_SET hard_regs_to_save; diff -Nrc3pad gcc-3.3.2/gcc/cfgcleanup.c gcc-3.3.3/gcc/cfgcleanup.c *** gcc-3.3.2/gcc/cfgcleanup.c Sun Sep 7 12:54:30 2003 --- gcc-3.3.3/gcc/cfgcleanup.c Fri Jan 16 11:07:16 2004 *************** insns_match_p (mode, i1, i2) *** 974,980 **** #endif if (reload_completed ! ? ! rtx_renumbered_equal_p (p1, p2) : ! rtx_equal_p (p1, p2)) { /* The following code helps take care of G++ cleanups. */ rtx equiv1 = find_reg_equal_equiv_note (i1); --- 974,988 ---- #endif if (reload_completed ! ? rtx_renumbered_equal_p (p1, p2) : rtx_equal_p (p1, p2)) ! return true; ! ! /* Do not do EQUIV substitution after reload. First, we're undoing the ! work of reload_cse. Second, we may be undoing the work of the post- ! reload splitting pass. */ ! /* ??? Possibly add a new phase switch variable that can be used by ! targets to disallow the troublesome insns after splitting. */ ! if (!reload_completed) { /* The following code helps take care of G++ cleanups. */ rtx equiv1 = find_reg_equal_equiv_note (i1); *************** insns_match_p (mode, i1, i2) *** 1001,1011 **** return true; } } - - return false; } ! return true; } /* Look through the insns at the end of BB1 and BB2 and find the longest --- 1009,1017 ---- return true; } } } ! return false; } /* Look through the insns at the end of BB1 and BB2 and find the longest *************** try_optimize_cfg (mode) *** 1698,1704 **** /* If the jump insn has side effects, we can't kill the edge. */ && (GET_CODE (b->end) != JUMP_INSN ! || (flow2_completed ? simplejump_p (b->end) : onlyjump_p (b->end))) && merge_blocks (s, b, c, mode)) --- 1704,1710 ---- /* If the jump insn has side effects, we can't kill the edge. */ && (GET_CODE (b->end) != JUMP_INSN ! || (reload_completed ? simplejump_p (b->end) : onlyjump_p (b->end))) && merge_blocks (s, b, c, mode)) diff -Nrc3pad gcc-3.3.2/gcc/cfgrtl.c gcc-3.3.3/gcc/cfgrtl.c *** gcc-3.3.2/gcc/cfgrtl.c Wed Sep 17 07:17:08 2003 --- gcc-3.3.3/gcc/cfgrtl.c Fri Jan 16 11:07:17 2004 *************** delete_insn (insn) *** 148,156 **** LABEL_NUSES (JUMP_LABEL (insn))--; /* Also if deleting an insn that references a label. */ ! else if ((note = find_reg_note (insn, REG_LABEL, NULL_RTX)) != NULL_RTX ! && GET_CODE (XEXP (note, 0)) == CODE_LABEL) ! LABEL_NUSES (XEXP (note, 0))--; if (GET_CODE (insn) == JUMP_INSN && (GET_CODE (PATTERN (insn)) == ADDR_VEC --- 148,162 ---- LABEL_NUSES (JUMP_LABEL (insn))--; /* Also if deleting an insn that references a label. */ ! else ! { ! while ((note = find_reg_note (insn, REG_LABEL, NULL_RTX)) != NULL_RTX ! && GET_CODE (XEXP (note, 0)) == CODE_LABEL) ! { ! LABEL_NUSES (XEXP (note, 0))--; ! remove_note (insn, note); ! } ! } if (GET_CODE (insn) == JUMP_INSN && (GET_CODE (PATTERN (insn)) == ADDR_VEC *************** try_redirect_by_replacing_jump (e, targe *** 682,688 **** if (tmp || !onlyjump_p (insn)) return false; ! if (flow2_completed && JUMP_LABEL (insn) && (table = NEXT_INSN (JUMP_LABEL (insn))) != NULL_RTX && GET_CODE (table) == JUMP_INSN && (GET_CODE (PATTERN (table)) == ADDR_VEC --- 688,694 ---- if (tmp || !onlyjump_p (insn)) return false; ! if (reload_completed && JUMP_LABEL (insn) && (table = NEXT_INSN (JUMP_LABEL (insn))) != NULL_RTX && GET_CODE (table) == JUMP_INSN && (GET_CODE (PATTERN (table)) == ADDR_VEC *************** try_redirect_by_replacing_jump (e, targe *** 764,769 **** --- 770,799 ---- barrier = next_nonnote_insn (src->end); if (!barrier || GET_CODE (barrier) != BARRIER) emit_barrier_after (src->end); + else + { + if (barrier != NEXT_INSN (src->end)) + { + /* Move the jump before barrier so that the notes + which originally were or were created before jump table are + inside the basic block. */ + rtx new_insn = src->end; + rtx tmp; + + for (tmp = NEXT_INSN (src->end); tmp != barrier; + tmp = NEXT_INSN (tmp)) + set_block_for_insn (tmp, src); + + NEXT_INSN (PREV_INSN (new_insn)) = NEXT_INSN (new_insn); + PREV_INSN (NEXT_INSN (new_insn)) = PREV_INSN (new_insn); + + NEXT_INSN (new_insn) = barrier; + NEXT_INSN (PREV_INSN (barrier)) = new_insn; + + PREV_INSN (new_insn) = PREV_INSN (barrier); + PREV_INSN (barrier) = new_insn; + } + } } /* Keep only one edge out and set proper flags. */ diff -Nrc3pad gcc-3.3.2/gcc/collect2.c gcc-3.3.3/gcc/collect2.c *** gcc-3.3.2/gcc/collect2.c Wed Oct 1 14:08:34 2003 --- gcc-3.3.3/gcc/collect2.c Mon Dec 8 19:02:39 2003 *************** scan_libraries (prog_name) *** 2645,2651 **** #ifdef OBJECT_FORMAT_COFF ! #if defined(EXTENDED_COFF) # define GCC_SYMBOLS(X) (SYMHEADER(X).isymMax + SYMHEADER(X).iextMax) # define GCC_SYMENT SYMR --- 2645,2651 ---- #ifdef OBJECT_FORMAT_COFF ! #if defined (EXTENDED_COFF) # define GCC_SYMBOLS(X) (SYMHEADER(X).isymMax + SYMHEADER(X).iextMax) # define GCC_SYMENT SYMR *************** scan_libraries (prog_name) *** 2658,2671 **** # define GCC_SYMBOLS(X) (HEADER(ldptr).f_nsyms) # define GCC_SYMENT SYMENT ! # define GCC_OK_SYMBOL(X) \ ! (((X).n_sclass == C_EXT) && \ ! ((X).n_scnum > N_UNDEF) && \ ! (aix64_flag \ ! || (((X).n_type & N_TMASK) == (DT_NON << N_BTSHFT) \ ! || ((X).n_type & N_TMASK) == (DT_FCN << N_BTSHFT)))) ! # define GCC_UNDEF_SYMBOL(X) \ ! (((X).n_sclass == C_EXT) && ((X).n_scnum == N_UNDEF)) # define GCC_SYMINC(X) ((X).n_numaux+1) # define GCC_SYMZERO(X) 0 --- 2658,2683 ---- # define GCC_SYMBOLS(X) (HEADER(ldptr).f_nsyms) # define GCC_SYMENT SYMENT ! # if defined (C_WEAKEXT) ! # define GCC_OK_SYMBOL(X) \ ! (((X).n_sclass == C_EXT || (X).n_sclass == C_WEAKEXT) && \ ! ((X).n_scnum > N_UNDEF) && \ ! (aix64_flag \ ! || (((X).n_type & N_TMASK) == (DT_NON << N_BTSHFT) \ ! || ((X).n_type & N_TMASK) == (DT_FCN << N_BTSHFT)))) ! # define GCC_UNDEF_SYMBOL(X) \ ! (((X).n_sclass == C_EXT || (X).n_sclass == C_WEAKEXT) && \ ! ((X).n_scnum == N_UNDEF)) ! # else ! # define GCC_OK_SYMBOL(X) \ ! (((X).n_sclass == C_EXT) && \ ! ((X).n_scnum > N_UNDEF) && \ ! (aix64_flag \ ! || (((X).n_type & N_TMASK) == (DT_NON << N_BTSHFT) \ ! || ((X).n_type & N_TMASK) == (DT_FCN << N_BTSHFT)))) ! # define GCC_UNDEF_SYMBOL(X) \ ! (((X).n_sclass == C_EXT) && ((X).n_scnum == N_UNDEF)) ! # endif # define GCC_SYMINC(X) ((X).n_numaux+1) # define GCC_SYMZERO(X) 0 diff -Nrc3pad gcc-3.3.2/gcc/combine.c gcc-3.3.3/gcc/combine.c *** gcc-3.3.2/gcc/combine.c Mon Oct 6 08:58:54 2003 --- gcc-3.3.3/gcc/combine.c Fri Jan 23 20:42:48 2004 *************** Software Foundation, 59 Temple Place - S *** 53,62 **** flow.c aren't completely updated: - reg_live_length is not updated - - reg_n_refs is not adjusted in the rare case when a register is - no longer required in a computation - - there are extremely rare cases (see distribute_regnotes) when a - REG_DEAD note is lost - a LOG_LINKS entry that refers to an insn with multiple SETs may be removed because there is no way to know which register it was linking --- 53,58 ---- *************** Software Foundation, 59 Temple Place - S *** 91,96 **** --- 87,96 ---- #include "real.h" #include "toplev.h" + #ifndef SHIFT_COUNT_TRUNCATED + #define SHIFT_COUNT_TRUNCATED 0 + #endif + /* It is not safe to use ordinary gen_lowpart in combine. Use gen_lowpart_for_combine instead. See comments there. */ #define gen_lowpart dont_use_gen_lowpart_you_dummy *************** static void reg_dead_at_p_1 PARAMS ((rtx *** 417,423 **** static int reg_dead_at_p PARAMS ((rtx, rtx)); static void move_deaths PARAMS ((rtx, rtx, int, rtx, rtx *)); static int reg_bitfield_target_p PARAMS ((rtx, rtx)); ! static void distribute_notes PARAMS ((rtx, rtx, rtx, rtx, rtx, rtx)); static void distribute_links PARAMS ((rtx)); static void mark_used_regs_combine PARAMS ((rtx)); static int insn_cuid PARAMS ((rtx)); --- 417,423 ---- static int reg_dead_at_p PARAMS ((rtx, rtx)); static void move_deaths PARAMS ((rtx, rtx, int, rtx, rtx *)); static int reg_bitfield_target_p PARAMS ((rtx, rtx)); ! static void distribute_notes PARAMS ((rtx, rtx, rtx, rtx)); static void distribute_links PARAMS ((rtx)); static void mark_used_regs_combine PARAMS ((rtx)); static int insn_cuid PARAMS ((rtx)); *************** try_combine (i3, i2, i1, new_direct_jump *** 2562,2568 **** REG_N_DEATHS (REGNO (XEXP (note, 0)))++; distribute_notes (new_other_notes, undobuf.other_insn, ! undobuf.other_insn, NULL_RTX, NULL_RTX, NULL_RTX); } #ifdef HAVE_cc0 /* If I2 is the setter CC0 and I3 is the user CC0 then check whether --- 2562,2568 ---- REG_N_DEATHS (REGNO (XEXP (note, 0)))++; distribute_notes (new_other_notes, undobuf.other_insn, ! undobuf.other_insn, NULL_RTX); } #ifdef HAVE_cc0 /* If I2 is the setter CC0 and I3 is the user CC0 then check whether *************** try_combine (i3, i2, i1, new_direct_jump *** 2586,2600 **** rtx i3links, i2links, i1links = 0; rtx midnotes = 0; unsigned int regno; - /* Compute which registers we expect to eliminate. newi2pat may be setting - either i3dest or i2dest, so we must check it. Also, i1dest may be the - same as i3dest, in which case newi2pat may be setting i1dest. */ - rtx elim_i2 = ((newi2pat && reg_set_p (i2dest, newi2pat)) - || i2dest_in_i2src || i2dest_in_i1src - ? 0 : i2dest); - rtx elim_i1 = (i1 == 0 || i1dest_in_i1src - || (newi2pat && reg_set_p (i1dest, newi2pat)) - ? 0 : i1dest); /* Get the old REG_NOTES and LOG_LINKS from all our insns and clear them. */ --- 2586,2591 ---- *************** try_combine (i3, i2, i1, new_direct_jump *** 2725,2741 **** /* Distribute all the LOG_LINKS and REG_NOTES from I1, I2, and I3. */ if (i3notes) ! distribute_notes (i3notes, i3, i3, newi2pat ? i2 : NULL_RTX, ! elim_i2, elim_i1); if (i2notes) ! distribute_notes (i2notes, i2, i3, newi2pat ? i2 : NULL_RTX, ! elim_i2, elim_i1); if (i1notes) ! distribute_notes (i1notes, i1, i3, newi2pat ? i2 : NULL_RTX, ! elim_i2, elim_i1); if (midnotes) ! distribute_notes (midnotes, NULL_RTX, i3, newi2pat ? i2 : NULL_RTX, ! elim_i2, elim_i1); /* Distribute any notes added to I2 or I3 by recog_for_combine. We know these are REG_UNUSED and want them to go to the desired insn, --- 2716,2728 ---- /* Distribute all the LOG_LINKS and REG_NOTES from I1, I2, and I3. */ if (i3notes) ! distribute_notes (i3notes, i3, i3, newi2pat ? i2 : NULL_RTX); if (i2notes) ! distribute_notes (i2notes, i2, i3, newi2pat ? i2 : NULL_RTX); if (i1notes) ! distribute_notes (i1notes, i1, i3, newi2pat ? i2 : NULL_RTX); if (midnotes) ! distribute_notes (midnotes, NULL_RTX, i3, newi2pat ? i2 : NULL_RTX); /* Distribute any notes added to I2 or I3 by recog_for_combine. We know these are REG_UNUSED and want them to go to the desired insn, *************** try_combine (i3, i2, i1, new_direct_jump *** 2748,2754 **** if (GET_CODE (XEXP (temp, 0)) == REG) REG_N_DEATHS (REGNO (XEXP (temp, 0)))++; ! distribute_notes (new_i2_notes, i2, i2, NULL_RTX, NULL_RTX, NULL_RTX); } if (new_i3_notes) --- 2735,2741 ---- if (GET_CODE (XEXP (temp, 0)) == REG) REG_N_DEATHS (REGNO (XEXP (temp, 0)))++; ! distribute_notes (new_i2_notes, i2, i2, NULL_RTX); } if (new_i3_notes) *************** try_combine (i3, i2, i1, new_direct_jump *** 2757,2763 **** if (GET_CODE (XEXP (temp, 0)) == REG) REG_N_DEATHS (REGNO (XEXP (temp, 0)))++; ! distribute_notes (new_i3_notes, i3, i3, NULL_RTX, NULL_RTX, NULL_RTX); } /* If I3DEST was used in I3SRC, it really died in I3. We may need to --- 2744,2750 ---- if (GET_CODE (XEXP (temp, 0)) == REG) REG_N_DEATHS (REGNO (XEXP (temp, 0)))++; ! distribute_notes (new_i3_notes, i3, i3, NULL_RTX); } /* If I3DEST was used in I3SRC, it really died in I3. We may need to *************** try_combine (i3, i2, i1, new_direct_jump *** 2775,2786 **** if (newi2pat && reg_set_p (i3dest_killed, newi2pat)) distribute_notes (gen_rtx_EXPR_LIST (REG_DEAD, i3dest_killed, NULL_RTX), ! NULL_RTX, i2, NULL_RTX, elim_i2, elim_i1); else distribute_notes (gen_rtx_EXPR_LIST (REG_DEAD, i3dest_killed, NULL_RTX), ! NULL_RTX, i3, newi2pat ? i2 : NULL_RTX, ! elim_i2, elim_i1); } if (i2dest_in_i2src) --- 2762,2772 ---- if (newi2pat && reg_set_p (i3dest_killed, newi2pat)) distribute_notes (gen_rtx_EXPR_LIST (REG_DEAD, i3dest_killed, NULL_RTX), ! NULL_RTX, i2, NULL_RTX); else distribute_notes (gen_rtx_EXPR_LIST (REG_DEAD, i3dest_killed, NULL_RTX), ! NULL_RTX, i3, newi2pat ? i2 : NULL_RTX); } if (i2dest_in_i2src) *************** try_combine (i3, i2, i1, new_direct_jump *** 2790,2800 **** if (newi2pat && reg_set_p (i2dest, newi2pat)) distribute_notes (gen_rtx_EXPR_LIST (REG_DEAD, i2dest, NULL_RTX), ! NULL_RTX, i2, NULL_RTX, NULL_RTX, NULL_RTX); else distribute_notes (gen_rtx_EXPR_LIST (REG_DEAD, i2dest, NULL_RTX), ! NULL_RTX, i3, newi2pat ? i2 : NULL_RTX, ! NULL_RTX, NULL_RTX); } if (i1dest_in_i1src) --- 2776,2785 ---- if (newi2pat && reg_set_p (i2dest, newi2pat)) distribute_notes (gen_rtx_EXPR_LIST (REG_DEAD, i2dest, NULL_RTX), ! NULL_RTX, i2, NULL_RTX); else distribute_notes (gen_rtx_EXPR_LIST (REG_DEAD, i2dest, NULL_RTX), ! NULL_RTX, i3, newi2pat ? i2 : NULL_RTX); } if (i1dest_in_i1src) *************** try_combine (i3, i2, i1, new_direct_jump *** 2804,2814 **** if (newi2pat && reg_set_p (i1dest, newi2pat)) distribute_notes (gen_rtx_EXPR_LIST (REG_DEAD, i1dest, NULL_RTX), ! NULL_RTX, i2, NULL_RTX, NULL_RTX, NULL_RTX); else distribute_notes (gen_rtx_EXPR_LIST (REG_DEAD, i1dest, NULL_RTX), ! NULL_RTX, i3, newi2pat ? i2 : NULL_RTX, ! NULL_RTX, NULL_RTX); } distribute_links (i3links); --- 2789,2798 ---- if (newi2pat && reg_set_p (i1dest, newi2pat)) distribute_notes (gen_rtx_EXPR_LIST (REG_DEAD, i1dest, NULL_RTX), ! NULL_RTX, i2, NULL_RTX); else distribute_notes (gen_rtx_EXPR_LIST (REG_DEAD, i1dest, NULL_RTX), ! NULL_RTX, i3, newi2pat ? i2 : NULL_RTX); } distribute_links (i3links); *************** combine_simplify_rtx (x, op0_mode, last, *** 4711,4717 **** return simplify_shift_const (x, code, mode, XEXP (x, 0), INTVAL (XEXP (x, 1))); - #ifdef SHIFT_COUNT_TRUNCATED else if (SHIFT_COUNT_TRUNCATED && GET_CODE (XEXP (x, 1)) != REG) SUBST (XEXP (x, 1), force_to_mode (XEXP (x, 1), GET_MODE (XEXP (x, 1)), --- 4695,4700 ---- *************** combine_simplify_rtx (x, op0_mode, last, *** 4719,4726 **** << exact_log2 (GET_MODE_BITSIZE (GET_MODE (x)))) - 1, NULL_RTX, 0)); - #endif - break; case VEC_SELECT: --- 4702,4707 ---- *************** simplify_shift_const (x, code, result_mo *** 9291,9300 **** /* Make sure and truncate the "natural" shift on the way in. We don't want to do this inside the loop as it makes it more difficult to combine shifts. */ - #ifdef SHIFT_COUNT_TRUNCATED if (SHIFT_COUNT_TRUNCATED) orig_count &= GET_MODE_BITSIZE (mode) - 1; - #endif /* If we were given an invalid count, don't do anything except exactly what was requested. */ --- 9272,9279 ---- *************** simplify_comparison (code, pop0, pop1) *** 10684,10691 **** a constant that has only a single bit set and are comparing it with zero, we can convert this into an equality comparison between the position and the location of the single bit. */ ! ! if (GET_CODE (XEXP (op0, 0)) == CONST_INT && XEXP (op0, 1) == const1_rtx && equality_comparison_p && const_op == 0 && (i = exact_log2 (INTVAL (XEXP (op0, 0)))) >= 0) --- 10663,10672 ---- a constant that has only a single bit set and are comparing it with zero, we can convert this into an equality comparison between the position and the location of the single bit. */ ! /* Except we can't if SHIFT_COUNT_TRUNCATED is set, since we might ! have already reduced the shift count modulo the word size. */ ! if (!SHIFT_COUNT_TRUNCATED ! && GET_CODE (XEXP (op0, 0)) == CONST_INT && XEXP (op0, 1) == const1_rtx && equality_comparison_p && const_op == 0 && (i = exact_log2 (INTVAL (XEXP (op0, 0)))) >= 0) *************** reg_bitfield_target_p (x, body) *** 12532,12550 **** as appropriate. I3 and I2 are the insns resulting from the combination insns including FROM (I2 may be zero). - ELIM_I2 and ELIM_I1 are either zero or registers that we know will - not need REG_DEAD notes because they are being substituted for. This - saves searching in the most common cases. - Each note in the list is either ignored or placed on some insns, depending on the type of note. */ static void ! distribute_notes (notes, from_insn, i3, i2, elim_i2, elim_i1) rtx notes; rtx from_insn; rtx i3, i2; - rtx elim_i2, elim_i1; { rtx note, next_note; rtx tem; --- 12513,12526 ---- as appropriate. I3 and I2 are the insns resulting from the combination insns including FROM (I2 may be zero). Each note in the list is either ignored or placed on some insns, depending on the type of note. */ static void ! distribute_notes (notes, from_insn, i3, i2) rtx notes; rtx from_insn; rtx i3, i2; { rtx note, next_note; rtx tem; *************** distribute_notes (notes, from_insn, i3, *** 12807,12816 **** && reg_referenced_p (XEXP (note, 0), PATTERN (i2))) place = i2; - if (rtx_equal_p (XEXP (note, 0), elim_i2) - || rtx_equal_p (XEXP (note, 0), elim_i1)) - break; - if (place == 0) { basic_block bb = this_basic_block; --- 12783,12788 ---- *************** distribute_notes (notes, from_insn, i3, *** 12868,12874 **** PATTERN (tem) = pc_rtx; distribute_notes (REG_NOTES (tem), tem, tem, ! NULL_RTX, NULL_RTX, NULL_RTX); distribute_links (LOG_LINKS (tem)); PUT_CODE (tem, NOTE); --- 12840,12846 ---- PATTERN (tem) = pc_rtx; distribute_notes (REG_NOTES (tem), tem, tem, ! NULL_RTX); distribute_links (LOG_LINKS (tem)); PUT_CODE (tem, NOTE); *************** distribute_notes (notes, from_insn, i3, *** 12883,12889 **** distribute_notes (REG_NOTES (cc0_setter), cc0_setter, cc0_setter, ! NULL_RTX, NULL_RTX, NULL_RTX); distribute_links (LOG_LINKS (cc0_setter)); PUT_CODE (cc0_setter, NOTE); --- 12855,12861 ---- distribute_notes (REG_NOTES (cc0_setter), cc0_setter, cc0_setter, ! NULL_RTX); distribute_links (LOG_LINKS (cc0_setter)); PUT_CODE (cc0_setter, NOTE); *************** distribute_notes (notes, from_insn, i3, *** 13037,13043 **** = gen_rtx_EXPR_LIST (REG_DEAD, piece, NULL_RTX); distribute_notes (new_note, place, place, ! NULL_RTX, NULL_RTX, NULL_RTX); } else if (! refers_to_regno_p (i, i + 1, PATTERN (place), 0) --- 13009,13015 ---- = gen_rtx_EXPR_LIST (REG_DEAD, piece, NULL_RTX); distribute_notes (new_note, place, place, ! NULL_RTX); } else if (! refers_to_regno_p (i, i + 1, PATTERN (place), 0) diff -Nrc3pad gcc-3.3.2/gcc/config/alpha/alpha.c gcc-3.3.3/gcc/config/alpha/alpha.c *** gcc-3.3.2/gcc/config/alpha/alpha.c Wed Oct 1 16:58:38 2003 --- gcc-3.3.3/gcc/config/alpha/alpha.c Sun Jan 11 23:53:17 2004 *************** tls_symbolic_operand_1 (op, mode, size, *** 1205,1213 **** else return 0; ! letter = (unspec == UNSPEC_DTPREL ? 'D' : 'T'); ! ! return str[1] == letter; } /* Return true if OP is valid for 16-bit DTP relative relocations. */ --- 1205,1216 ---- else return 0; ! if (unspec == UNSPEC_DTPREL) ! return str[1] == 'D'; ! else if (str[1] == 'I') ! return size == 64; ! else ! return str[1] == 'T'; } /* Return true if OP is valid for 16-bit DTP relative relocations. */ *************** tls_symbolic_operand_type (symbol) *** 1762,1768 **** attribute visibility next time. At least we don't crash... */ if (str[1] == 'G' || str[1] == 'D') return TLS_MODEL_GLOBAL_DYNAMIC; ! if (str[1] == 'T') return TLS_MODEL_INITIAL_EXEC; } else if (str[0] == '@') --- 1765,1771 ---- attribute visibility next time. At least we don't crash... */ if (str[1] == 'G' || str[1] == 'D') return TLS_MODEL_GLOBAL_DYNAMIC; ! if (str[1] == 'I' || str[1] == 'T') return TLS_MODEL_INITIAL_EXEC; } else if (str[0] == '@') *************** tls_symbolic_operand_type (symbol) *** 1776,1781 **** --- 1779,1786 ---- else return TLS_MODEL_GLOBAL_DYNAMIC; } + if (str[1] == 'I') + return TLS_MODEL_INITIAL_EXEC; if (str[1] == 'T') { /* 64-bit local exec is the same as initial exec except without *************** alpha_encode_section_info (decl, first) *** 1901,1906 **** --- 1906,1913 ---- encoding = 'D'; break; case TLS_MODEL_INITIAL_EXEC: + encoding = 'I'; + break; case TLS_MODEL_LOCAL_EXEC: encoding = 'T'; break; *************** alpha_emit_conditional_branch (code) *** 3332,3341 **** if (op1 == const0_rtx) cmp_code = NIL, branch_code = code; ! /* We want to use cmpcc/bcc when we can, since there is a zero delay ! bypass between logicals and br/cmov on EV5. But we don't want to ! force valid immediate constants into registers needlessly. */ ! else if (GET_CODE (op1) == CONST_INT) { HOST_WIDE_INT v = INTVAL (op1), n = -v; --- 3339,3348 ---- if (op1 == const0_rtx) cmp_code = NIL, branch_code = code; ! /* If the constants doesn't fit into an immediate, but can ! be generated by lda/ldah, we adjust the argument and ! compare against zero, so we can use beq/bne directly. */ ! else if (GET_CODE (op1) == CONST_INT && (code == EQ || code == NE)) { HOST_WIDE_INT v = INTVAL (op1), n = -v; diff -Nrc3pad gcc-3.3.2/gcc/config/alpha/freebsd.h gcc-3.3.3/gcc/config/alpha/freebsd.h *** gcc-3.3.2/gcc/config/alpha/freebsd.h Wed Mar 12 02:38:01 2003 --- gcc-3.3.3/gcc/config/alpha/freebsd.h Tue Dec 16 10:54:57 2003 *************** Boston, MA 02111-1307, USA. */ *** 29,34 **** --- 29,35 ---- #define FBSD_TARGET_CPU_CPP_BUILTINS() \ do \ { \ + builtin_define ("__LP64__"); \ if (flag_pic) \ { \ builtin_define ("__PIC__"); \ diff -Nrc3pad gcc-3.3.2/gcc/config/alpha/linux-elf.h gcc-3.3.3/gcc/config/alpha/linux-elf.h *** gcc-3.3.2/gcc/config/alpha/linux-elf.h Tue Dec 10 10:55:31 2002 --- gcc-3.3.3/gcc/config/alpha/linux-elf.h Fri Nov 14 06:46:13 2003 *************** Boston, MA 02111-1307, USA. */ *** 47,49 **** --- 47,56 ---- #define LIB_SPEC \ "%{pthread:-lpthread }%{shared:-lc}%{!shared:%{profile:-lc_p}%{!profile:-lc}} " #endif + + #define ASM_FILE_END(FILE) \ + do { \ + named_section_flags (".note.GNU-stack", \ + SECTION_DEBUG \ + | (trampolines_created ? SECTION_CODE : 0)); \ + } while (0) diff -Nrc3pad gcc-3.3.2/gcc/config/cris/cris.c gcc-3.3.3/gcc/config/cris/cris.c *** gcc-3.3.2/gcc/config/cris/cris.c Tue Mar 11 15:54:23 2003 --- gcc-3.3.3/gcc/config/cris/cris.c Fri Dec 12 13:58:01 2003 *************** *** 1,5 **** /* Definitions for GCC. Part of the machine description for CRIS. ! Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Axis Communications. Written by Hans-Peter Nilsson. This file is part of GCC. --- 1,5 ---- /* Definitions for GCC. Part of the machine description for CRIS. ! Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by Axis Communications. Written by Hans-Peter Nilsson. This file is part of GCC. *************** cris_plus_or_bound_operator (x, mode) *** 377,382 **** --- 377,395 ---- (GET_MODE (x) == mode && (code == UMIN || code == PLUS)); } + /* Used as an operator to get a handle on a already-known-valid MEM rtx:es + (no need to validate the address), where some address expression parts + have their own match_operand. */ + + int + cris_mem_op (rtx x, enum machine_mode mode) + { + if (mode == VOIDmode) + mode = GET_MODE (x); + + return GET_MODE (x) == mode && GET_CODE (x) == MEM; + } + /* Since with -fPIC, not all symbols are valid PIC symbols or indeed general_operands, we have to have a predicate that matches it for the "movsi" expander. */ *************** cris_notice_update_cc (exp, insn) *** 1994,2001 **** value1=rz and value2=[rx] */ cc_status.value1 = XEXP (XVECEXP (exp, 0, 0), 0); cc_status.value2 ! = gen_rtx_MEM (GET_MODE (XEXP (XVECEXP (exp, 0, 0), 0)), ! XEXP (XVECEXP (exp, 0, 1), 0)); cc_status.flags = 0; /* Huh? A side-effect cannot change the destination --- 2007,2014 ---- value1=rz and value2=[rx] */ cc_status.value1 = XEXP (XVECEXP (exp, 0, 0), 0); cc_status.value2 ! = replace_equiv_address (XEXP (XVECEXP (exp, 0, 0), 1), ! XEXP (XVECEXP (exp, 0, 1), 0)); cc_status.flags = 0; /* Huh? A side-effect cannot change the destination diff -Nrc3pad gcc-3.3.2/gcc/config/cris/cris.h gcc-3.3.3/gcc/config/cris/cris.h *** gcc-3.3.2/gcc/config/cris/cris.h Tue Mar 11 15:54:23 2003 --- gcc-3.3.3/gcc/config/cris/cris.h Fri Dec 12 13:58:01 2003 *************** call_ ## FUNC (void) \ *** 1740,1745 **** --- 1740,1747 ---- {ZERO_EXTEND, SIGN_EXTEND}}, \ {"cris_plus_or_bound_operator", \ {PLUS, UMIN}}, \ + {"cris_mem_op", \ + {MEM}}, \ {"cris_bdap_operand", \ {SUBREG, REG, LABEL_REF, SYMBOL_REF, MEM, CONST_INT, \ CONST_DOUBLE, CONST, SIGN_EXTEND}}, \ diff -Nrc3pad gcc-3.3.2/gcc/config/cris/cris.md gcc-3.3.3/gcc/config/cris/cris.md *** gcc-3.3.2/gcc/config/cris/cris.md Mon Apr 14 14:39:58 2003 --- gcc-3.3.3/gcc/config/cris/cris.md Fri Dec 12 13:58:01 2003 *************** *** 640,649 **** (define_split [(parallel ! [(set (mem (plus:SI ! (mult:SI (match_operand:SI 0 "register_operand" "") ! (match_operand:SI 1 "const_int_operand" "")) ! (match_operand:SI 2 "register_operand" ""))) (match_operand 3 "register_operand" "")) (set (match_operand:SI 4 "register_operand" "") (plus:SI (mult:SI (match_dup 0) --- 640,651 ---- (define_split [(parallel ! [(set (match_operator ! 6 "cris_mem_op" ! [(plus:SI ! (mult:SI (match_operand:SI 0 "register_operand" "") ! (match_operand:SI 1 "const_int_operand" "")) ! (match_operand:SI 2 "register_operand" ""))]) (match_operand 3 "register_operand" "")) (set (match_operand:SI 4 "register_operand" "") (plus:SI (mult:SI (match_dup 0) *************** *** 657,667 **** (match_dup 1)) (match_dup 4)))] "operands[5] ! = gen_rtx_MEM (GET_MODE (operands[3]), ! gen_rtx_PLUS (SImode, ! gen_rtx_MULT (SImode, ! operands[0], operands[1]), ! operands[2]));") ;; move.s rx,[ry=rz+i] ;; FIXME: These could have anonymous mode for operand 2. --- 659,670 ---- (match_dup 1)) (match_dup 4)))] "operands[5] ! = replace_equiv_address (operands[6], ! gen_rtx_PLUS (SImode, ! gen_rtx_MULT (SImode, ! operands[0], ! operands[1]), ! operands[2]));") ;; move.s rx,[ry=rz+i] ;; FIXME: These could have anonymous mode for operand 2. *************** *** 747,755 **** (define_split [(parallel ! [(set (mem (plus:SI ! (match_operand:SI 0 "cris_bdap_operand" "") ! (match_operand:SI 1 "cris_bdap_operand" ""))) (match_operand 2 "register_operand" "")) (set (match_operand:SI 3 "register_operand" "") (plus:SI (match_dup 0) (match_dup 1)))])] --- 750,760 ---- (define_split [(parallel ! [(set (match_operator ! 4 "cris_mem_op" ! [(plus:SI ! (match_operand:SI 0 "cris_bdap_operand" "") ! (match_operand:SI 1 "cris_bdap_operand" ""))]) (match_operand 2 "register_operand" "")) (set (match_operand:SI 3 "register_operand" "") (plus:SI (match_dup 0) (match_dup 1)))])] *************** *** 757,765 **** [(set (match_dup 4) (match_dup 2)) (set (match_dup 3) (match_dup 0)) (set (match_dup 3) (plus:SI (match_dup 3) (match_dup 1)))] ! "operands[4] ! = gen_rtx_MEM (GET_MODE (operands[2]), ! gen_rtx_PLUS (SImode, operands[0], operands[1]));") ;; Clear memory side-effect patterns. It is hard to get to the mode if ;; the MEM was anonymous, so there will be one for each mode. --- 762,768 ---- [(set (match_dup 4) (match_dup 2)) (set (match_dup 3) (match_dup 0)) (set (match_dup 3) (plus:SI (match_dup 3) (match_dup 1)))] ! "") ;; Clear memory side-effect patterns. It is hard to get to the mode if ;; the MEM was anonymous, so there will be one for each mode. *************** *** 3833,3839 **** else abort (); ! operands[0] = gen_rtx_MEM (GET_MODE (operands[0]), op0); } } }") --- 3836,3842 ---- else abort (); ! operands[0] = replace_equiv_address (operands[0], op0); } } }") *************** *** 3898,3904 **** else abort (); ! operands[1] = gen_rtx_MEM (GET_MODE (operands[1]), op1); } } }") --- 3901,3907 ---- else abort (); ! operands[1] = replace_equiv_address (operands[1], op1); } } }") *************** *** 4201,4210 **** (define_split [(parallel [(set (match_operand 0 "register_operand" "") ! (mem (plus:SI ! (mult:SI (match_operand:SI 1 "register_operand" "") ! (match_operand:SI 2 "const_int_operand" "")) ! (match_operand:SI 3 "register_operand" "")))) (set (match_operand:SI 4 "register_operand" "") (plus:SI (mult:SI (match_dup 1) (match_dup 2)) --- 4204,4215 ---- (define_split [(parallel [(set (match_operand 0 "register_operand" "") ! (match_operator ! 6 "cris_mem_op" ! [(plus:SI ! (mult:SI (match_operand:SI 1 "register_operand" "") ! (match_operand:SI 2 "const_int_operand" "")) ! (match_operand:SI 3 "register_operand" ""))])) (set (match_operand:SI 4 "register_operand" "") (plus:SI (mult:SI (match_dup 1) (match_dup 2)) *************** *** 4214,4229 **** [(set (match_dup 4) (plus:SI (mult:SI (match_dup 1) (match_dup 2)) (match_dup 3))) (set (match_dup 0) (match_dup 5))] ! "operands[5] = gen_rtx_MEM (GET_MODE (operands[0]), operands[3]);") ;; move.S1 [rx=rx+i],ry (define_split [(parallel [(set (match_operand 0 "register_operand" "") ! (mem ! (plus:SI (match_operand:SI 1 "cris_bdap_operand" "") ! (match_operand:SI 2 "cris_bdap_operand" "")))) (set (match_operand:SI 3 "register_operand" "") (plus:SI (match_dup 1) (match_dup 2)))])] --- 4219,4235 ---- [(set (match_dup 4) (plus:SI (mult:SI (match_dup 1) (match_dup 2)) (match_dup 3))) (set (match_dup 0) (match_dup 5))] ! "operands[5] = replace_equiv_address (operands[6], operands[3]);") ;; move.S1 [rx=rx+i],ry (define_split [(parallel [(set (match_operand 0 "register_operand" "") ! (match_operator ! 5 "cris_mem_op" ! [(plus:SI (match_operand:SI 1 "cris_bdap_operand" "") ! (match_operand:SI 2 "cris_bdap_operand" ""))])) (set (match_operand:SI 3 "register_operand" "") (plus:SI (match_dup 1) (match_dup 2)))])] *************** *** 4231,4247 **** || rtx_equal_p (operands[3], operands[2]))" [(set (match_dup 3) (plus:SI (match_dup 1) (match_dup 2))) (set (match_dup 0) (match_dup 4))] ! "operands[4] = gen_rtx_MEM (GET_MODE (operands[0]), operands[3]);") ;; move.S1 ry,[rx=rx+rz.S2] (define_split [(parallel ! [(set (mem (plus:SI ! (mult:SI (match_operand:SI 0 "register_operand" "") ! (match_operand:SI 1 "const_int_operand" "")) ! (match_operand:SI 2 "register_operand" ""))) ! (match_operand 3 "register_operand" "")) (set (match_operand:SI 4 "register_operand" "") (plus:SI (mult:SI (match_dup 0) (match_dup 1)) --- 4237,4255 ---- || rtx_equal_p (operands[3], operands[2]))" [(set (match_dup 3) (plus:SI (match_dup 1) (match_dup 2))) (set (match_dup 0) (match_dup 4))] ! "operands[4] = replace_equiv_address (operands[5], operands[3]);") ;; move.S1 ry,[rx=rx+rz.S2] (define_split [(parallel ! [(set (match_operator ! 6 "cris_mem_op" ! [(plus:SI ! (mult:SI (match_operand:SI 0 "register_operand" "") ! (match_operand:SI 1 "const_int_operand" "")) ! (match_operand:SI 2 "register_operand" ""))]) ! (match_operand 3 "register_operand" "")) (set (match_operand:SI 4 "register_operand" "") (plus:SI (mult:SI (match_dup 0) (match_dup 1)) *************** *** 4251,4266 **** [(set (match_dup 4) (plus:SI (mult:SI (match_dup 0) (match_dup 1)) (match_dup 2))) (set (match_dup 5) (match_dup 3))] ! "operands[5] = gen_rtx_MEM (GET_MODE (operands[3]), operands[4]);") ;; move.S1 ry,[rx=rx+i] (define_split [(parallel ! [(set (mem ! (plus:SI (match_operand:SI 0 "cris_bdap_operand" "") ! (match_operand:SI 1 "cris_bdap_operand" ""))) ! (match_operand 2 "register_operand" "")) (set (match_operand:SI 3 "register_operand" "") (plus:SI (match_dup 0) (match_dup 1)))])] --- 4259,4275 ---- [(set (match_dup 4) (plus:SI (mult:SI (match_dup 0) (match_dup 1)) (match_dup 2))) (set (match_dup 5) (match_dup 3))] ! "operands[5] = replace_equiv_address (operands[6], operands[4]);") ;; move.S1 ry,[rx=rx+i] (define_split [(parallel ! [(set (match_operator ! 6 "cris_mem_op" ! [(plus:SI (match_operand:SI 0 "cris_bdap_operand" "") ! (match_operand:SI 1 "cris_bdap_operand" ""))]) ! (match_operand 2 "register_operand" "")) (set (match_operand:SI 3 "register_operand" "") (plus:SI (match_dup 0) (match_dup 1)))])] *************** *** 4268,4274 **** || rtx_equal_p (operands[3], operands[1]))" [(set (match_dup 3) (plus:SI (match_dup 0) (match_dup 1))) (set (match_dup 5) (match_dup 2))] ! "operands[5] = gen_rtx_MEM (GET_MODE (operands[2]), operands[3]);") ;; clear.d [rx=rx+rz.S2] --- 4277,4283 ---- || rtx_equal_p (operands[3], operands[1]))" [(set (match_dup 3) (plus:SI (match_dup 0) (match_dup 1))) (set (match_dup 5) (match_dup 2))] ! "operands[5] = replace_equiv_address (operands[6], operands[3]);") ;; clear.d [rx=rx+rz.S2] *************** *** 4402,4409 **** [(set (match_dup 4) (plus:SI (mult:SI (match_dup 1) (match_dup 2)) (match_dup 3))) (set (match_dup 0) (match_op_dup 5 [(match_dup 6)]))] ! "operands[6] = gen_rtx_MEM (GET_MODE (XEXP (operands[5],0)), ! operands[4]);") ;; mov(s|u).S1 [rx=rx+i],ry --- 4411,4417 ---- [(set (match_dup 4) (plus:SI (mult:SI (match_dup 1) (match_dup 2)) (match_dup 3))) (set (match_dup 0) (match_op_dup 5 [(match_dup 6)]))] ! "operands[6] = replace_equiv_address (XEXP (operands[5], 0), operands[4]);") ;; mov(s|u).S1 [rx=rx+i],ry *************** *** 4422,4429 **** || rtx_equal_p (operands[2], operands[3]))" [(set (match_dup 3) (plus:SI (match_dup 1) (match_dup 2))) (set (match_dup 0) (match_op_dup 4 [(match_dup 5)]))] ! "operands[5] = gen_rtx_MEM (GET_MODE (XEXP (operands[4], 0)), ! operands[3]);") ;; op.S1 [rx=rx+i],ry --- 4430,4436 ---- || rtx_equal_p (operands[2], operands[3]))" [(set (match_dup 3) (plus:SI (match_dup 1) (match_dup 2))) (set (match_dup 0) (match_op_dup 4 [(match_dup 5)]))] ! "operands[5] = replace_equiv_address (XEXP (operands[4], 0), operands[3]);") ;; op.S1 [rx=rx+i],ry *************** *** 4443,4449 **** || rtx_equal_p (operands[4], operands[3]))" [(set (match_dup 4) (plus:SI (match_dup 2) (match_dup 3))) (set (match_dup 0) (match_op_dup 5 [(match_dup 1) (match_dup 6)]))] ! "operands[6] = gen_rtx_MEM (GET_MODE (operands[0]), operands[4]);") ;; op.S1 [rx=rx+rz.S2],ry --- 4450,4456 ---- || rtx_equal_p (operands[4], operands[3]))" [(set (match_dup 4) (plus:SI (match_dup 2) (match_dup 3))) (set (match_dup 0) (match_op_dup 5 [(match_dup 1) (match_dup 6)]))] ! "operands[6] = replace_equiv_address (XEXP (operands[5], 1), operands[4]);") ;; op.S1 [rx=rx+rz.S2],ry *************** *** 4467,4473 **** [(set (match_dup 5) (plus:SI (mult:SI (match_dup 2) (match_dup 3)) (match_dup 4))) (set (match_dup 0) (match_op_dup 6 [(match_dup 1) (match_dup 7)]))] ! "operands[7] = gen_rtx_MEM (GET_MODE (operands[0]), operands[5]);") ;; op.S1 [rx=rx+rz.S2],ry (swapped) --- 4474,4480 ---- [(set (match_dup 5) (plus:SI (mult:SI (match_dup 2) (match_dup 3)) (match_dup 4))) (set (match_dup 0) (match_op_dup 6 [(match_dup 1) (match_dup 7)]))] ! "operands[7] = replace_equiv_address (XEXP (operands[6], 1), operands[5]);") ;; op.S1 [rx=rx+rz.S2],ry (swapped) *************** *** 4491,4497 **** [(set (match_dup 5) (plus:SI (mult:SI (match_dup 2) (match_dup 3)) (match_dup 4))) (set (match_dup 0) (match_op_dup 6 [(match_dup 7) (match_dup 1)]))] ! "operands[7] = gen_rtx_MEM (GET_MODE (operands[0]), operands[5]);") ;; op.S1 [rx=rx+i],ry (swapped) --- 4498,4504 ---- [(set (match_dup 5) (plus:SI (mult:SI (match_dup 2) (match_dup 3)) (match_dup 4))) (set (match_dup 0) (match_op_dup 6 [(match_dup 7) (match_dup 1)]))] ! "operands[7] = replace_equiv_address (XEXP (operands[6], 0), operands[5]);") ;; op.S1 [rx=rx+i],ry (swapped) *************** *** 4511,4517 **** || rtx_equal_p (operands[4], operands[3]))" [(set (match_dup 4) (plus:SI (match_dup 2) (match_dup 3))) (set (match_dup 0) (match_op_dup 5 [(match_dup 6) (match_dup 1)]))] ! "operands[6] = gen_rtx_MEM (GET_MODE (operands[0]), operands[4]);") ;; op(s|u).S1 [rx=rx+rz.S2],ry --- 4518,4524 ---- || rtx_equal_p (operands[4], operands[3]))" [(set (match_dup 4) (plus:SI (match_dup 2) (match_dup 3))) (set (match_dup 0) (match_op_dup 5 [(match_dup 6) (match_dup 1)]))] ! "operands[6] = replace_equiv_address (XEXP (operands[5], 0), operands[4]);") ;; op(s|u).S1 [rx=rx+rz.S2],ry *************** *** 4538,4545 **** (match_dup 4))) (set (match_dup 0) (match_op_dup 6 [(match_dup 1) (match_dup 8)]))] "operands[8] = gen_rtx (GET_CODE (operands[7]), GET_MODE (operands[7]), ! gen_rtx_MEM (GET_MODE (XEXP (operands[7], 0)), ! operands[5]));") ;; op(s|u).S1 [rx=rx+i],ry --- 4545,4552 ---- (match_dup 4))) (set (match_dup 0) (match_op_dup 6 [(match_dup 1) (match_dup 8)]))] "operands[8] = gen_rtx (GET_CODE (operands[7]), GET_MODE (operands[7]), ! replace_equiv_address (XEXP (operands[7], 0), ! operands[5]));") ;; op(s|u).S1 [rx=rx+i],ry *************** *** 4563,4570 **** [(set (match_dup 4) (plus:SI (match_dup 2) (match_dup 3))) (set (match_dup 0) (match_op_dup 5 [(match_dup 1) (match_dup 7)]))] "operands[7] = gen_rtx (GET_CODE (operands[6]), GET_MODE (operands[6]), ! gen_rtx_MEM (GET_MODE (XEXP (operands[6], 0)), ! operands[4]));") ;; op(s|u).S1 [rx=rx+rz.S2],ry (swapped, plus or bound) --- 4570,4577 ---- [(set (match_dup 4) (plus:SI (match_dup 2) (match_dup 3))) (set (match_dup 0) (match_op_dup 5 [(match_dup 1) (match_dup 7)]))] "operands[7] = gen_rtx (GET_CODE (operands[6]), GET_MODE (operands[6]), ! replace_equiv_address (XEXP (operands[6], 0), ! operands[4]));") ;; op(s|u).S1 [rx=rx+rz.S2],ry (swapped, plus or bound) *************** *** 4590,4597 **** (match_dup 4))) (set (match_dup 0) (match_op_dup 6 [(match_dup 8) (match_dup 1)]))] "operands[8] = gen_rtx (GET_CODE (operands[6]), GET_MODE (operands[6]), ! gen_rtx_MEM (GET_MODE (XEXP (operands[6], 0)), ! operands[5]));") ;; op(s|u).S1 [rx=rx+i],ry (swapped, plus or bound) --- 4597,4604 ---- (match_dup 4))) (set (match_dup 0) (match_op_dup 6 [(match_dup 8) (match_dup 1)]))] "operands[8] = gen_rtx (GET_CODE (operands[6]), GET_MODE (operands[6]), ! replace_equiv_address (XEXP (operands[6], 0), ! operands[5]));") ;; op(s|u).S1 [rx=rx+i],ry (swapped, plus or bound) *************** *** 4614,4621 **** [(set (match_dup 4) (plus:SI (match_dup 2) (match_dup 3))) (set (match_dup 0) (match_op_dup 6 [(match_dup 7) (match_dup 1)]))] "operands[7] = gen_rtx (GET_CODE (operands[5]), GET_MODE (operands[5]), ! gen_rtx_MEM (GET_MODE (XEXP (operands[5], 0)), ! operands[4]));") ;; Splits for addressing prefixes that have no side-effects, so we can ;; fill a delay slot. Never split if we lose something, though. --- 4621,4628 ---- [(set (match_dup 4) (plus:SI (match_dup 2) (match_dup 3))) (set (match_dup 0) (match_op_dup 6 [(match_dup 7) (match_dup 1)]))] "operands[7] = gen_rtx (GET_CODE (operands[5]), GET_MODE (operands[5]), ! replace_equiv_address (XEXP (operands[5], 0), ! operands[4]));") ;; Splits for addressing prefixes that have no side-effects, so we can ;; fill a delay slot. Never split if we lose something, though. *************** *** 4643,4649 **** [(set (match_dup 2) (match_dup 4)) (set (match_dup 0) (match_dup 3))] "operands[2] = gen_rtx_REG (Pmode, REGNO (operands[0])); ! operands[3] = gen_rtx_MEM (GET_MODE (operands[0]), operands[2]); operands[4] = XEXP (operands[1], 0);") ;; As the above, but MOVS and MOVU. --- 4650,4656 ---- [(set (match_dup 2) (match_dup 4)) (set (match_dup 0) (match_dup 3))] "operands[2] = gen_rtx_REG (Pmode, REGNO (operands[0])); ! operands[3] = replace_equiv_address (operands[1], operands[2]); operands[4] = XEXP (operands[1], 0);") ;; As the above, but MOVS and MOVU. *************** *** 4661,4667 **** [(set (match_dup 2) (match_dup 5)) (set (match_dup 0) (match_op_dup 4 [(match_dup 3)]))] "operands[2] = gen_rtx_REG (Pmode, REGNO (operands[0])); ! operands[3] = gen_rtx_MEM (GET_MODE (XEXP (operands[4], 0)), operands[2]); operands[5] = XEXP (operands[1], 0);") ;; Various peephole optimizations. --- 4668,4674 ---- [(set (match_dup 2) (match_dup 5)) (set (match_dup 0) (match_op_dup 4 [(match_dup 3)]))] "operands[2] = gen_rtx_REG (Pmode, REGNO (operands[0])); ! operands[3] = replace_equiv_address (XEXP (operands[4], 0), operands[2]); operands[5] = XEXP (operands[1], 0);") ;; Various peephole optimizations. diff -Nrc3pad gcc-3.3.2/gcc/config/h8300/h8300.c gcc-3.3.3/gcc/config/h8300/h8300.c *** gcc-3.3.2/gcc/config/h8300/h8300.c Fri Mar 28 15:21:01 2003 --- gcc-3.3.3/gcc/config/h8300/h8300.c Mon Dec 15 20:24:32 2003 *************** asm_file_start (file) *** 757,765 **** else if (optimize) fprintf (file, "; -O%d\n", optimize); if (TARGET_H8300H) ! fprintf (file, "\n\t.h8300h\n"); else if (TARGET_H8300S) ! fprintf (file, "\n\t.h8300s\n"); else fprintf (file, "\n\n"); output_file_directive (file, main_input_filename); --- 757,765 ---- else if (optimize) fprintf (file, "; -O%d\n", optimize); if (TARGET_H8300H) ! fprintf (file, TARGET_NORMAL_MODE ? "\n\t.h8300hn\n" : "\n\t.h8300h\n"); else if (TARGET_H8300S) ! fprintf (file, TARGET_NORMAL_MODE ? "\n\t.h8300sn\n" : "\n\t.h8300s\n"); else fprintf (file, "\n\n"); output_file_directive (file, main_input_filename); diff -Nrc3pad gcc-3.3.2/gcc/config/h8300/h8300.h gcc-3.3.3/gcc/config/h8300/h8300.h *** gcc-3.3.2/gcc/config/h8300/h8300.h Thu Dec 26 21:00:15 2002 --- gcc-3.3.3/gcc/config/h8300/h8300.h Tue Dec 23 15:10:25 2003 *************** extern const char * const *h8_reg_names; *** 70,76 **** } \ while (0) ! #define LINK_SPEC "%{mh:-m h8300h} %{ms:-m h8300s}" #define LIB_SPEC "%{mrelax:-relax} %{g:-lg} %{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}" --- 70,76 ---- } \ while (0) ! #define LINK_SPEC "%{mh:%{mn:-m h8300hn}} %{mh:%{!mn:-m h8300h}} %{ms:%{mn:-m h8300sn}} %{ms:%{!mn:-m h8300s}}" #define LIB_SPEC "%{mrelax:-relax} %{g:-lg} %{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}" *************** struct cum_arg *** 792,799 **** /* We handle signed and unsigned offsets here. */ \ && INTVAL (X) > (TARGET_H8300 ? -0x10000 : -0x1000000) \ && INTVAL (X) < (TARGET_H8300 ? 0x10000 : 0x1000000)) \ ! || ((GET_CODE (X) == HIGH || GET_CODE (X) == CONST) \ ! && TARGET_H8300)) /* Nonzero if the constant value X is a legitimate general operand. It is given that X satisfies CONSTANT_P or is a CONST_DOUBLE. */ --- 792,798 ---- /* We handle signed and unsigned offsets here. */ \ && INTVAL (X) > (TARGET_H8300 ? -0x10000 : -0x1000000) \ && INTVAL (X) < (TARGET_H8300 ? 0x10000 : 0x1000000)) \ ! || (GET_CODE (X) == HIGH || GET_CODE (X) == CONST)) /* Nonzero if the constant value X is a legitimate general operand. It is given that X satisfies CONSTANT_P or is a CONST_DOUBLE. */ diff -Nrc3pad gcc-3.3.2/gcc/config/h8300/h8300.md gcc-3.3.3/gcc/config/h8300/h8300.md *** gcc-3.3.2/gcc/config/h8300/h8300.md Thu Aug 21 13:08:48 2003 --- gcc-3.3.3/gcc/config/h8300/h8300.md Mon Dec 15 20:24:32 2003 *************** *** 134,139 **** --- 134,150 ---- [(set_attr "length" "4") (set_attr "cc" "clobber")]) + (define_insn "pushqi1_h8300hs_normal" + [(parallel [(set (reg:HI SP_REG) + (plus:HI (reg:HI SP_REG) (const_int -4))) + (set (mem:QI (plus:HI (reg:HI SP_REG) (const_int -3))) + (match_operand:QI 0 "register_operand" "r"))])] + "(TARGET_H8300H || TARGET_H8300S) + && operands[0] != stack_pointer_rtx" + "mov.l\\t%S0,@-er7" + [(set_attr "length" "4") + (set_attr "cc" "clobber")]) + (define_expand "pushqi1" [(use (match_operand:QI 0 "register_operand" ""))] "" *************** *** 141,148 **** { if (TARGET_H8300) emit_insn (gen_pushqi1_h8300 (operands[0])); ! else emit_insn (gen_pushqi1_h8300hs (operands[0])); DONE; }") --- 152,161 ---- { if (TARGET_H8300) emit_insn (gen_pushqi1_h8300 (operands[0])); ! else if (!TARGET_NORMAL_MODE) emit_insn (gen_pushqi1_h8300hs (operands[0])); + else + emit_insn (gen_pushqi1_h8300hs_normal (operands[0])); DONE; }") *************** *** 226,231 **** --- 239,255 ---- [(set_attr "length" "4") (set_attr "cc" "clobber")]) + (define_insn "pushhi1_h8300hs_normal" + [(parallel [(set (reg:HI SP_REG) + (plus:HI (reg:HI SP_REG) (const_int -4))) + (set (mem:HI (plus:HI (reg:HI SP_REG) (const_int -2))) + (match_operand:HI 0 "register_operand" "r"))])] + "(TARGET_H8300H || TARGET_H8300S) + && operands[0] != stack_pointer_rtx" + "mov.l\\t%S0,@-er7" + [(set_attr "length" "4") + (set_attr "cc" "clobber")]) + (define_expand "pushhi1" [(use (match_operand:HI 0 "register_operand" ""))] "" *************** *** 233,240 **** { if (TARGET_H8300) emit_insn (gen_pushhi1_h8300 (operands[0])); ! else emit_insn (gen_pushhi1_h8300hs (operands[0])); DONE; }") --- 257,266 ---- { if (TARGET_H8300) emit_insn (gen_pushhi1_h8300 (operands[0])); ! else if (!TARGET_NORMAL_MODE) emit_insn (gen_pushhi1_h8300hs (operands[0])); + else + emit_insn (gen_pushhi1_h8300hs_normal (operands[0])); DONE; }") diff -Nrc3pad gcc-3.3.2/gcc/config/h8300/lib1funcs.asm gcc-3.3.3/gcc/config/h8300/lib1funcs.asm *** gcc-3.3.2/gcc/config/h8300/lib1funcs.asm Sat Nov 2 12:51:05 2002 --- gcc-3.3.3/gcc/config/h8300/lib1funcs.asm Mon Dec 15 20:24:33 2003 *************** Boston, MA 02111-1307, USA. */ *** 96,107 **** --- 96,115 ---- #endif #ifdef __H8300H__ + #ifdef __NORMAL_MODE__ + .h8300hn + #else .h8300h #endif + #endif #ifdef __H8300S__ + #ifdef __NORMAL_MODE__ + .h8300sn + #else .h8300s #endif + #endif #ifdef L_cmpsi2 #ifdef __H8300__ diff -Nrc3pad gcc-3.3.2/gcc/config/h8300/t-rtems gcc-3.3.3/gcc/config/h8300/t-rtems *** gcc-3.3.2/gcc/config/h8300/t-rtems Thu Jan 1 00:00:00 1970 --- gcc-3.3.3/gcc/config/h8300/t-rtems Wed Jan 21 06:06:02 2004 *************** *** 0 **** --- 1,7 ---- + # Custom multilibs for RTEMS + + # -mn is not applicable to RTEMS (-mn implies 16bit void*) + + MULTILIB_OPTIONS = mh/ms mint32 + MULTILIB_DIRNAMES = h8300h h8300s int32 + MULTILIB_EXCEPTIONS = mint32 diff -Nrc3pad gcc-3.3.2/gcc/config/i386/emmintrin.h gcc-3.3.3/gcc/config/i386/emmintrin.h *** gcc-3.3.2/gcc/config/i386/emmintrin.h Thu Jan 1 00:00:00 1970 --- gcc-3.3.3/gcc/config/i386/emmintrin.h Tue Nov 4 17:25:06 2003 *************** *** 0 **** --- 1,1499 ---- + /* Copyright (C) 2003 Free Software Foundation, Inc. + + This file is part of GNU CC. + + GNU CC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GNU CC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNU CC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + /* As a special exception, if you include this header file into source + files compiled by GCC, this header file does not by itself cause + the resulting executable to be covered by the GNU General Public + License. This exception does not however invalidate any other + reasons why the executable file might be covered by the GNU General + Public License. */ + + /* Implemented from the specification included in the Intel C++ Compiler + User Guide and Reference, version 8.0. */ + + #ifndef _EMMINTRIN_H_INCLUDED + #define _EMMINTRIN_H_INCLUDED + + #ifdef __SSE2__ + #include + + /* SSE2 */ + typedef int __v2df __attribute__ ((mode (V2DF))); + typedef int __v2di __attribute__ ((mode (V2DI))); + typedef int __v4si __attribute__ ((mode (V4SI))); + typedef int __v8hi __attribute__ ((mode (V8HI))); + typedef int __v16qi __attribute__ ((mode (V16QI))); + + /* Create a selector for use with the SHUFPD instruction. */ + #define _MM_SHUFFLE2(fp1,fp0) \ + (((fp1) << 1) | (fp0)) + + #define __m128i __v2di + #define __m128d __v2df + + /* Create a vector with element 0 as *P and the rest zero. */ + static __inline __m128d + _mm_load_sd (double const *__P) + { + return (__m128d) __builtin_ia32_loadsd (__P); + } + + /* Create a vector with all two elements equal to *P. */ + static __inline __m128d + _mm_load1_pd (double const *__P) + { + __v2df __tmp = __builtin_ia32_loadsd (__P); + return (__m128d) __builtin_ia32_shufpd (__tmp, __tmp, _MM_SHUFFLE2 (0,0)); + } + + static __inline __m128d + _mm_load_pd1 (double const *__P) + { + return _mm_load1_pd (__P); + } + + /* Load two DPFP values from P. The address must be 16-byte aligned. */ + static __inline __m128d + _mm_load_pd (double const *__P) + { + return (__m128d) __builtin_ia32_loadapd (__P); + } + + /* Load two DPFP values from P. The address need not be 16-byte aligned. */ + static __inline __m128d + _mm_loadu_pd (double const *__P) + { + return (__m128d) __builtin_ia32_loadupd (__P); + } + + /* Load two DPFP values in reverse order. The address must be aligned. */ + static __inline __m128d + _mm_loadr_pd (double const *__P) + { + __v2df __tmp = __builtin_ia32_loadapd (__P); + return (__m128d) __builtin_ia32_shufpd (__tmp, __tmp, _MM_SHUFFLE2 (0,1)); + } + + /* Create a vector with element 0 as F and the rest zero. */ + static __inline __m128d + _mm_set_sd (double __F) + { + return (__m128d) __builtin_ia32_loadsd (&__F); + } + + /* Create a vector with all two elements equal to F. */ + static __inline __m128d + _mm_set1_pd (double __F) + { + __v2df __tmp = __builtin_ia32_loadsd (&__F); + return (__m128d) __builtin_ia32_shufpd (__tmp, __tmp, _MM_SHUFFLE2 (0,0)); + } + + static __inline __m128d + _mm_set_pd1 (double __F) + { + return _mm_set1_pd (__F); + } + + /* Create the vector [Z Y]. */ + static __inline __m128d + _mm_set_pd (double __Z, double __Y) + { + union { + double __a[2]; + __m128d __v; + } __u; + + __u.__a[0] = __Y; + __u.__a[1] = __Z; + + return __u.__v; + } + + /* Create the vector [Y Z]. */ + static __inline __m128d + _mm_setr_pd (double __Z, double __Y) + { + return _mm_set_pd (__Y, __Z); + } + + /* Create a vector of zeros. */ + static __inline __m128d + _mm_setzero_pd (void) + { + return (__m128d) __builtin_ia32_setzeropd (); + } + + /* Stores the lower DPFP value. */ + static __inline void + _mm_store_sd (double *__P, __m128d __A) + { + __builtin_ia32_storesd (__P, (__v2df)__A); + } + + /* Store the lower DPFP value acrosd two words. */ + static __inline void + _mm_store1_pd (double *__P, __m128d __A) + { + __v2df __va = (__v2df)__A; + __v2df __tmp = __builtin_ia32_shufpd (__va, __va, _MM_SHUFFLE2 (0,0)); + __builtin_ia32_storeapd (__P, __tmp); + } + + static __inline void + _mm_store_pd1 (double *__P, __m128d __A) + { + _mm_store1_pd (__P, __A); + } + + /* Store two DPFP values. The address must be 16-byte aligned. */ + static __inline void + _mm_store_pd (double *__P, __m128d __A) + { + __builtin_ia32_storeapd (__P, (__v2df)__A); + } + + /* Store two DPFP values. The address need not be 16-byte aligned. */ + static __inline void + _mm_storeu_pd (double *__P, __m128d __A) + { + __builtin_ia32_storeupd (__P, (__v2df)__A); + } + + /* Store two DPFP values in reverse order. The address must be aligned. */ + static __inline void + _mm_storer_pd (double *__P, __m128d __A) + { + __v2df __va = (__v2df)__A; + __v2df __tmp = __builtin_ia32_shufpd (__va, __va, _MM_SHUFFLE2 (0,1)); + __builtin_ia32_storeapd (__P, __tmp); + } + + /* Sets the low DPFP value of A from the low value of B. */ + static __inline __m128d + _mm_move_sd (__m128d __A, __m128d __B) + { + return (__m128d) __builtin_ia32_movsd ((__v2df)__A, (__v2df)__B); + } + + + static __inline __m128d + _mm_add_pd (__m128d __A, __m128d __B) + { + return (__m128d)__builtin_ia32_addpd ((__v2df)__A, (__v2df)__B); + } + + static __inline __m128d + _mm_add_sd (__m128d __A, __m128d __B) + { + return (__m128d)__builtin_ia32_addsd ((__v2df)__A, (__v2df)__B); + } + + static __inline __m128d + _mm_sub_pd (__m128d __A, __m128d __B) + { + return (__m128d)__builtin_ia32_subpd ((__v2df)__A, (__v2df)__B); + } + + static __inline __m128d + _mm_sub_sd (__m128d __A, __m128d __B) + { + return (__m128d)__builtin_ia32_subsd ((__v2df)__A, (__v2df)__B); + } + + static __inline __m128d + _mm_mul_pd (__m128d __A, __m128d __B) + { + return (__m128d)__builtin_ia32_mulpd ((__v2df)__A, (__v2df)__B); + } + + static __inline __m128d + _mm_mul_sd (__m128d __A, __m128d __B) + { + return (__m128d)__builtin_ia32_mulsd ((__v2df)__A, (__v2df)__B); + } + + static __inline __m128d + _mm_div_pd (__m128d __A, __m128d __B) + { + return (__m128d)__builtin_ia32_divpd ((__v2df)__A, (__v2df)__B); + } + + static __inline __m128d + _mm_div_sd (__m128d __A, __m128d __B) + { + return (__m128d)__builtin_ia32_divsd ((__v2df)__A, (__v2df)__B); + } + + static __inline __m128d + _mm_sqrt_pd (__m128d __A) + { + return (__m128d)__builtin_ia32_sqrtpd ((__v2df)__A); + } + + /* Return pair {sqrt (A[0), B[1]}. */ + static __inline __m128d + _mm_sqrt_sd (__m128d __A, __m128d __B) + { + __v2df __tmp = __builtin_ia32_movsd ((__v2df)__A, (__v2df)__B); + return (__m128d)__builtin_ia32_sqrtsd ((__v2df)__tmp); + } + + static __inline __m128d + _mm_min_pd (__m128d __A, __m128d __B) + { + return (__m128d)__builtin_ia32_minpd ((__v2df)__A, (__v2df)__B); + } + + static __inline __m128d + _mm_min_sd (__m128d __A, __m128d __B) + { + return (__m128d)__builtin_ia32_minsd ((__v2df)__A, (__v2df)__B); + } + + static __inline __m128d + _mm_max_pd (__m128d __A, __m128d __B) + { + return (__m128d)__builtin_ia32_maxpd ((__v2df)__A, (__v2df)__B); + } + + static __inline __m128d + _mm_max_sd (__m128d __A, __m128d __B) + { + return (__m128d)__builtin_ia32_maxsd ((__v2df)__A, (__v2df)__B); + } + + static __inline __m128d + _mm_and_pd (__m128d __A, __m128d __B) + { + return (__m128d)__builtin_ia32_andpd ((__v2df)__A, (__v2df)__B); + } + + static __inline __m128d + _mm_andnot_pd (__m128d __A, __m128d __B) + { + return (__m128d)__builtin_ia32_andnpd ((__v2df)__A, (__v2df)__B); + } + + static __inline __m128d + _mm_or_pd (__m128d __A, __m128d __B) + { + return (__m128d)__builtin_ia32_orpd ((__v2df)__A, (__v2df)__B); + } + + static __inline __m128d + _mm_xor_pd (__m128d __A, __m128d __B) + { + return (__m128d)__builtin_ia32_xorpd ((__v2df)__A, (__v2df)__B); + } + + static __inline __m128d + _mm_cmpeq_pd (__m128d __A, __m128d __B) + { + return (__m128d)__builtin_ia32_cmpeqpd ((__v2df)__A, (__v2df)__B); + } + + static __inline __m128d + _mm_cmplt_pd (__m128d __A, __m128d __B) + { + return (__m128d)__builtin_ia32_cmpltpd ((__v2df)__A, (__v2df)__B); + } + + static __inline __m128d + _mm_cmple_pd (__m128d __A, __m128d __B) + { + return (__m128d)__builtin_ia32_cmplepd ((__v2df)__A, (__v2df)__B); + } + + static __inline __m128d + _mm_cmpgt_pd (__m128d __A, __m128d __B) + { + return (__m128d)__builtin_ia32_cmpgtpd ((__v2df)__A, (__v2df)__B); + } + + static __inline __m128d + _mm_cmpge_pd (__m128d __A, __m128d __B) + { + return (__m128d)__builtin_ia32_cmpgepd ((__v2df)__A, (__v2df)__B); + } + + static __inline __m128d + _mm_cmpneq_pd (__m128d __A, __m128d __B) + { + return (__m128d)__builtin_ia32_cmpneqpd ((__v2df)__A, (__v2df)__B); + } + + static __inline __m128d + _mm_cmpnlt_pd (__m128d __A, __m128d __B) + { + return (__m128d)__builtin_ia32_cmpnltpd ((__v2df)__A, (__v2df)__B); + } + + static __inline __m128d + _mm_cmpnle_pd (__m128d __A, __m128d __B) + { + return (__m128d)__builtin_ia32_cmpnlepd ((__v2df)__A, (__v2df)__B); + } + + static __inline __m128d + _mm_cmpngt_pd (__m128d __A, __m128d __B) + { + return (__m128d)__builtin_ia32_cmpngtpd ((__v2df)__A, (__v2df)__B); + } + + static __inline __m128d + _mm_cmpnge_pd (__m128d __A, __m128d __B) + { + return (__m128d)__builtin_ia32_cmpngepd ((__v2df)__A, (__v2df)__B); + } + + static __inline __m128d + _mm_cmpord_pd (__m128d __A, __m128d __B) + { + return (__m128d)__builtin_ia32_cmpordpd ((__v2df)__A, (__v2df)__B); + } + + static __inline __m128d + _mm_cmpunord_pd (__m128d __A, __m128d __B) + { + return (__m128d)__builtin_ia32_cmpunordpd ((__v2df)__A, (__v2df)__B); + } + + static __inline __m128d + _mm_cmpeq_sd (__m128d __A, __m128d __B) + { + return (__m128d)__builtin_ia32_cmpeqsd ((__v2df)__A, (__v2df)__B); + } + + static __inline __m128d + _mm_cmplt_sd (__m128d __A, __m128d __B) + { + return (__m128d)__builtin_ia32_cmpltsd ((__v2df)__A, (__v2df)__B); + } + + static __inline __m128d + _mm_cmple_sd (__m128d __A, __m128d __B) + { + return (__m128d)__builtin_ia32_cmplesd ((__v2df)__A, (__v2df)__B); + } + + static __inline __m128d + _mm_cmpgt_sd (__m128d __A, __m128d __B) + { + return (__m128d) __builtin_ia32_movsd ((__v2df) __A, + (__v2df) + __builtin_ia32_cmpltsd ((__v2df) __B, + (__v2df) + __A)); + } + + static __inline __m128d + _mm_cmpge_sd (__m128d __A, __m128d __B) + { + return (__m128d) __builtin_ia32_movsd ((__v2df) __A, + (__v2df) + __builtin_ia32_cmplesd ((__v2df) __B, + (__v2df) + __A)); + } + + static __inline __m128d + _mm_cmpneq_sd (__m128d __A, __m128d __B) + { + return (__m128d)__builtin_ia32_cmpneqsd ((__v2df)__A, (__v2df)__B); + } + + static __inline __m128d + _mm_cmpnlt_sd (__m128d __A, __m128d __B) + { + return (__m128d)__builtin_ia32_cmpnltsd ((__v2df)__A, (__v2df)__B); + } + + static __inline __m128d + _mm_cmpnle_sd (__m128d __A, __m128d __B) + { + return (__m128d)__builtin_ia32_cmpnlesd ((__v2df)__A, (__v2df)__B); + } + + static __inline __m128d + _mm_cmpngt_sd (__m128d __A, __m128d __B) + { + return (__m128d) __builtin_ia32_movsd ((__v2df) __A, + (__v2df) + __builtin_ia32_cmpnltsd ((__v2df) __B, + (__v2df) + __A)); + } + + static __inline __m128d + _mm_cmpnge_sd (__m128d __A, __m128d __B) + { + return (__m128d) __builtin_ia32_movsd ((__v2df) __A, + (__v2df) + __builtin_ia32_cmpnlesd ((__v2df) __B, + (__v2df) + __A)); + } + + static __inline __m128d + _mm_cmpord_sd (__m128d __A, __m128d __B) + { + return (__m128d)__builtin_ia32_cmpordsd ((__v2df)__A, (__v2df)__B); + } + + static __inline __m128d + _mm_cmpunord_sd (__m128d __A, __m128d __B) + { + return (__m128d)__builtin_ia32_cmpunordsd ((__v2df)__A, (__v2df)__B); + } + + static __inline int + _mm_comieq_sd (__m128d __A, __m128d __B) + { + return __builtin_ia32_comisdeq ((__v2df)__A, (__v2df)__B); + } + + static __inline int + _mm_comilt_sd (__m128d __A, __m128d __B) + { + return __builtin_ia32_comisdlt ((__v2df)__A, (__v2df)__B); + } + + static __inline int + _mm_comile_sd (__m128d __A, __m128d __B) + { + return __builtin_ia32_comisdle ((__v2df)__A, (__v2df)__B); + } + + static __inline int + _mm_comigt_sd (__m128d __A, __m128d __B) + { + return __builtin_ia32_comisdgt ((__v2df)__A, (__v2df)__B); + } + + static __inline int + _mm_comige_sd (__m128d __A, __m128d __B) + { + return __builtin_ia32_comisdge ((__v2df)__A, (__v2df)__B); + } + + static __inline int + _mm_comineq_sd (__m128d __A, __m128d __B) + { + return __builtin_ia32_comisdneq ((__v2df)__A, (__v2df)__B); + } + + static __inline int + _mm_ucomieq_sd (__m128d __A, __m128d __B) + { + return __builtin_ia32_ucomisdeq ((__v2df)__A, (__v2df)__B); + } + + static __inline int + _mm_ucomilt_sd (__m128d __A, __m128d __B) + { + return __builtin_ia32_ucomisdlt ((__v2df)__A, (__v2df)__B); + } + + static __inline int + _mm_ucomile_sd (__m128d __A, __m128d __B) + { + return __builtin_ia32_ucomisdle ((__v2df)__A, (__v2df)__B); + } + + static __inline int + _mm_ucomigt_sd (__m128d __A, __m128d __B) + { + return __builtin_ia32_ucomisdgt ((__v2df)__A, (__v2df)__B); + } + + static __inline int + _mm_ucomige_sd (__m128d __A, __m128d __B) + { + return __builtin_ia32_ucomisdge ((__v2df)__A, (__v2df)__B); + } + + static __inline int + _mm_ucomineq_sd (__m128d __A, __m128d __B) + { + return __builtin_ia32_ucomisdneq ((__v2df)__A, (__v2df)__B); + } + + /* Create a vector with element 0 as *P and the rest zero. */ + + static __inline __m128i + _mm_load_si128 (__m128i const *__P) + { + return (__m128i) __builtin_ia32_loaddqa ((char const *)__P); + } + + static __inline __m128i + _mm_loadu_si128 (__m128i const *__P) + { + return (__m128i) __builtin_ia32_loaddqu ((char const *)__P); + } + + static __inline __m128i + _mm_loadl_epi64 (__m128i const *__P) + { + return (__m128i) __builtin_ia32_movq2dq (*(unsigned long long *)__P); + } + + static __inline void + _mm_store_si128 (__m128i *__P, __m128i __B) + { + __builtin_ia32_storedqa ((char *)__P, (__v16qi)__B); + } + + static __inline void + _mm_storeu_si128 (__m128i *__P, __m128i __B) + { + __builtin_ia32_storedqu ((char *)__P, (__v16qi)__B); + } + + static __inline void + _mm_storel_epi64 (__m128i *__P, __m128i __B) + { + *(long long *)__P = __builtin_ia32_movdq2q ((__v2di)__B); + } + + static __inline __m64 + _mm_movepi64_pi64 (__m128i __B) + { + return (__m64) __builtin_ia32_movdq2q ((__v2di)__B); + } + + static __inline __m128i + _mm_move_epi64 (__m128i __A) + { + return (__m128i) __builtin_ia32_movq ((__v2di)__A); + } + + /* Create a vector of zeros. */ + static __inline __m128i + _mm_setzero_si128 (void) + { + return (__m128i) __builtin_ia32_setzero128 (); + } + + static __inline __m128i + _mm_set_epi64 (__m64 __A, __m64 __B) + { + __v2di __tmp = (__v2di)__builtin_ia32_movq2dq ((unsigned long long)__A); + __v2di __tmp2 = (__v2di)__builtin_ia32_movq2dq ((unsigned long long)__B); + return (__m128i)__builtin_ia32_punpcklqdq128 (__tmp2, __tmp); + } + + /* Create the vector [Z Y X W]. */ + static __inline __m128i + _mm_set_epi32 (int __Z, int __Y, int __X, int __W) + { + union { + int __a[4]; + __m128i __v; + } __u; + + __u.__a[0] = __W; + __u.__a[1] = __X; + __u.__a[2] = __Y; + __u.__a[3] = __Z; + + return __u.__v; + } + + #ifdef __x86_64__ + /* Create the vector [Z Y]. */ + static __inline __m128i + _mm_set_epi64x (long long __Z, long long __Y) + { + union { + long __a[2]; + __m128i __v; + } __u; + + __u.__a[0] = __Y; + __u.__a[1] = __Z; + + return __u.__v; + } + #endif + + /* Create the vector [S T U V Z Y X W]. */ + static __inline __m128i + _mm_set_epi16 (short __Z, short __Y, short __X, short __W, + short __V, short __U, short __T, short __S) + { + union { + short __a[8]; + __m128i __v; + } __u; + + __u.__a[0] = __S; + __u.__a[1] = __T; + __u.__a[2] = __U; + __u.__a[3] = __V; + __u.__a[4] = __W; + __u.__a[5] = __X; + __u.__a[6] = __Y; + __u.__a[7] = __Z; + + return __u.__v; + } + + /* Create the vector [S T U V Z Y X W]. */ + static __inline __m128i + _mm_set_epi8 (char __Z, char __Y, char __X, char __W, + char __V, char __U, char __T, char __S, + char __Z1, char __Y1, char __X1, char __W1, + char __V1, char __U1, char __T1, char __S1) + { + union { + char __a[16]; + __m128i __v; + } __u; + + __u.__a[0] = __S1; + __u.__a[1] = __T1; + __u.__a[2] = __U1; + __u.__a[3] = __V1; + __u.__a[4] = __W1; + __u.__a[5] = __X1; + __u.__a[6] = __Y1; + __u.__a[7] = __Z1; + __u.__a[8] = __S; + __u.__a[9] = __T; + __u.__a[10] = __U; + __u.__a[11] = __V; + __u.__a[12] = __W; + __u.__a[13] = __X; + __u.__a[14] = __Y; + __u.__a[15] = __Z; + + return __u.__v; + } + + static __inline __m128i + _mm_set1_epi64 (__m64 __A) + { + __v2di __tmp = (__v2di)__builtin_ia32_movq2dq ((unsigned long long)__A); + return (__m128i)__builtin_ia32_punpcklqdq128 (__tmp, __tmp); + } + + static __inline __m128i + _mm_set1_epi32 (int __A) + { + __v4si __tmp = (__v4si)__builtin_ia32_loadd (&__A); + return (__m128i) __builtin_ia32_pshufd ((__v4si)__tmp, _MM_SHUFFLE (0,0,0,0)); + } + + #ifdef __x86_64__ + static __inline __m128i + _mm_set1_epi64x (long long __A) + { + __v2di __tmp = (__v2di)__builtin_ia32_movq2dq ((unsigned long long)__A); + return (__m128i) __builtin_ia32_shufpd ((__v2df)__tmp, (__v2df)__tmp, _MM_SHUFFLE2 (0,0)); + } + #endif + + static __inline __m128i + _mm_set1_epi16 (short __A) + { + int __Acopy = (unsigned short)__A; + __v4si __tmp = (__v4si)__builtin_ia32_loadd (&__Acopy); + __tmp = (__v4si)__builtin_ia32_punpcklwd128 ((__v8hi)__tmp, (__v8hi)__tmp); + return (__m128i) __builtin_ia32_pshufd ((__v4si)__tmp, _MM_SHUFFLE (0,0,0,0)); + } + + static __inline __m128i + _mm_set1_epi8 (char __A) + { + int __Acopy = (unsigned char)__A; + __v4si __tmp = (__v4si)__builtin_ia32_loadd (&__Acopy); + __tmp = (__v4si)__builtin_ia32_punpcklbw128 ((__v16qi)__tmp, (__v16qi)__tmp); + __tmp = (__v4si)__builtin_ia32_punpcklbw128 ((__v16qi)__tmp, (__v16qi)__tmp); + return (__m128i) __builtin_ia32_pshufd ((__v4si)__tmp, _MM_SHUFFLE (0,0,0,0)); + } + + static __inline __m128i + _mm_setr_epi64 (__m64 __A, __m64 __B) + { + __v2di __tmp = (__v2di)__builtin_ia32_movq2dq ((unsigned long long)__A); + __v2di __tmp2 = (__v2di)__builtin_ia32_movq2dq ((unsigned long long)__B); + return (__m128i)__builtin_ia32_punpcklqdq128 (__tmp, __tmp2); + } + + /* Create the vector [Z Y X W]. */ + static __inline __m128i + _mm_setr_epi32 (int __W, int __X, int __Y, int __Z) + { + union { + int __a[4]; + __m128i __v; + } __u; + + __u.__a[0] = __W; + __u.__a[1] = __X; + __u.__a[2] = __Y; + __u.__a[3] = __Z; + + return __u.__v; + } + /* Create the vector [S T U V Z Y X W]. */ + static __inline __m128i + _mm_setr_epi16 (short __S, short __T, short __U, short __V, + short __W, short __X, short __Y, short __Z) + { + union { + short __a[8]; + __m128i __v; + } __u; + + __u.__a[0] = __S; + __u.__a[1] = __T; + __u.__a[2] = __U; + __u.__a[3] = __V; + __u.__a[4] = __W; + __u.__a[5] = __X; + __u.__a[6] = __Y; + __u.__a[7] = __Z; + + return __u.__v; + } + + /* Create the vector [S T U V Z Y X W]. */ + static __inline __m128i + _mm_setr_epi8 (char __S1, char __T1, char __U1, char __V1, + char __W1, char __X1, char __Y1, char __Z1, + char __S, char __T, char __U, char __V, + char __W, char __X, char __Y, char __Z) + { + union { + char __a[16]; + __m128i __v; + } __u; + + __u.__a[0] = __S1; + __u.__a[1] = __T1; + __u.__a[2] = __U1; + __u.__a[3] = __V1; + __u.__a[4] = __W1; + __u.__a[5] = __X1; + __u.__a[6] = __Y1; + __u.__a[7] = __Z1; + __u.__a[8] = __S; + __u.__a[9] = __T; + __u.__a[10] = __U; + __u.__a[11] = __V; + __u.__a[12] = __W; + __u.__a[13] = __X; + __u.__a[14] = __Y; + __u.__a[15] = __Z; + + return __u.__v; + } + + static __inline __m128d + _mm_cvtepi32_pd (__m128i __A) + { + return (__m128d)__builtin_ia32_cvtdq2pd ((__v4si) __A); + } + + static __inline __m128 + _mm_cvtepi32_ps (__m128i __A) + { + return (__m128)__builtin_ia32_cvtdq2ps ((__v4si) __A); + } + + static __inline __m128i + _mm_cvtpd_epi32 (__m128d __A) + { + return (__m128i)__builtin_ia32_cvtpd2dq ((__v2df) __A); + } + + static __inline __m64 + _mm_cvtpd_pi32 (__m128d __A) + { + return (__m64)__builtin_ia32_cvtpd2pi ((__v2df) __A); + } + + static __inline __m128 + _mm_cvtpd_ps (__m128d __A) + { + return (__m128)__builtin_ia32_cvtpd2ps ((__v2df) __A); + } + + static __inline __m128i + _mm_cvttpd_epi32 (__m128d __A) + { + return (__m128i)__builtin_ia32_cvttpd2dq ((__v2df) __A); + } + + static __inline __m64 + _mm_cvttpd_pi32 (__m128d __A) + { + return (__m64)__builtin_ia32_cvttpd2pi ((__v2df) __A); + } + + static __inline __m128d + _mm_cvtpi32_pd (__m64 __A) + { + return (__m128d)__builtin_ia32_cvtpi2pd ((__v2si) __A); + } + + static __inline __m128i + _mm_cvtps_epi32 (__m128 __A) + { + return (__m128i)__builtin_ia32_cvtps2dq ((__v4sf) __A); + } + + static __inline __m128i + _mm_cvttps_epi32 (__m128 __A) + { + return (__m128i)__builtin_ia32_cvttps2dq ((__v4sf) __A); + } + + static __inline __m128d + _mm_cvtps_pd (__m128 __A) + { + return (__m128d)__builtin_ia32_cvtps2pd ((__v4sf) __A); + } + + static __inline int + _mm_cvtsd_si32 (__m128d __A) + { + return __builtin_ia32_cvtsd2si ((__v2df) __A); + } + + #ifdef __x86_64__ + static __inline long long + _mm_cvtsd_si64x (__m128d __A) + { + return __builtin_ia32_cvtsd2si64 ((__v2df) __A); + } + #endif + + static __inline int + _mm_cvttsd_si32 (__m128d __A) + { + return __builtin_ia32_cvttsd2si ((__v2df) __A); + } + + #ifdef __x86_64__ + static __inline long long + _mm_cvttsd_si64x (__m128d __A) + { + return __builtin_ia32_cvttsd2si64 ((__v2df) __A); + } + #endif + + static __inline __m128 + _mm_cvtsd_ss (__m128 __A, __m128d __B) + { + return (__m128)__builtin_ia32_cvtsd2ss ((__v4sf) __A, (__v2df) __B); + } + + static __inline __m128d + _mm_cvtsi32_sd (__m128d __A, int __B) + { + return (__m128d)__builtin_ia32_cvtsi2sd ((__v2df) __A, __B); + } + + #ifdef __x86_64__ + static __inline __m128d + _mm_cvtsi64x_sd (__m128d __A, long long __B) + { + return (__m128d)__builtin_ia32_cvtsi642sd ((__v2df) __A, __B); + } + #endif + + static __inline __m128d + _mm_cvtss_sd (__m128d __A, __m128 __B) + { + return (__m128d)__builtin_ia32_cvtss2sd ((__v2df) __A, (__v4sf)__B); + } + + #define _mm_shuffle_pd(__A, __B, __C) ((__m128d)__builtin_ia32_shufpd ((__v2df)__A, (__v2df)__B, (__C))) + + static __inline __m128d + _mm_unpackhi_pd (__m128d __A, __m128d __B) + { + return (__m128d)__builtin_ia32_unpckhpd ((__v2df)__A, (__v2df)__B); + } + + static __inline __m128d + _mm_unpacklo_pd (__m128d __A, __m128d __B) + { + return (__m128d)__builtin_ia32_unpcklpd ((__v2df)__A, (__v2df)__B); + } + + static __inline __m128d + _mm_loadh_pd (__m128d __A, double const *__B) + { + return (__m128d)__builtin_ia32_loadhpd ((__v2df)__A, (__v2si *)__B); + } + + static __inline void + _mm_storeh_pd (double *__A, __m128d __B) + { + __builtin_ia32_storehpd ((__v2si *)__A, (__v2df)__B); + } + + static __inline __m128d + _mm_loadl_pd (__m128d __A, double const *__B) + { + return (__m128d)__builtin_ia32_loadlpd ((__v2df)__A, (__v2si *)__B); + } + + static __inline void + _mm_storel_pd (double *__A, __m128d __B) + { + __builtin_ia32_storelpd ((__v2si *)__A, (__v2df)__B); + } + + static __inline int + _mm_movemask_pd (__m128d __A) + { + return __builtin_ia32_movmskpd ((__v2df)__A); + } + + static __inline __m128i + _mm_packs_epi16 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_packsswb128 ((__v8hi)__A, (__v8hi)__B); + } + + static __inline __m128i + _mm_packs_epi32 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_packssdw128 ((__v4si)__A, (__v4si)__B); + } + + static __inline __m128i + _mm_packus_epi16 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_packuswb128 ((__v8hi)__A, (__v8hi)__B); + } + + static __inline __m128i + _mm_unpackhi_epi8 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_punpckhbw128 ((__v16qi)__A, (__v16qi)__B); + } + + static __inline __m128i + _mm_unpackhi_epi16 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_punpckhwd128 ((__v8hi)__A, (__v8hi)__B); + } + + static __inline __m128i + _mm_unpackhi_epi32 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_punpckhdq128 ((__v4si)__A, (__v4si)__B); + } + + static __inline __m128i + _mm_unpackhi_epi64 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_punpckhqdq128 ((__v2di)__A, (__v2di)__B); + } + + static __inline __m128i + _mm_unpacklo_epi8 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_punpcklbw128 ((__v16qi)__A, (__v16qi)__B); + } + + static __inline __m128i + _mm_unpacklo_epi16 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_punpcklwd128 ((__v8hi)__A, (__v8hi)__B); + } + + static __inline __m128i + _mm_unpacklo_epi32 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_punpckldq128 ((__v4si)__A, (__v4si)__B); + } + + static __inline __m128i + _mm_unpacklo_epi64 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_punpcklqdq128 ((__v2di)__A, (__v2di)__B); + } + + static __inline __m128i + _mm_add_epi8 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_paddb128 ((__v16qi)__A, (__v16qi)__B); + } + + static __inline __m128i + _mm_add_epi16 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_paddw128 ((__v8hi)__A, (__v8hi)__B); + } + + static __inline __m128i + _mm_add_epi32 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_paddd128 ((__v4si)__A, (__v4si)__B); + } + + static __inline __m128i + _mm_add_epi64 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_paddq128 ((__v2di)__A, (__v2di)__B); + } + + static __inline __m128i + _mm_adds_epi8 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_paddsb128 ((__v16qi)__A, (__v16qi)__B); + } + + static __inline __m128i + _mm_adds_epi16 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_paddsw128 ((__v8hi)__A, (__v8hi)__B); + } + + static __inline __m128i + _mm_adds_epu8 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_paddusb128 ((__v16qi)__A, (__v16qi)__B); + } + + static __inline __m128i + _mm_adds_epu16 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_paddusw128 ((__v8hi)__A, (__v8hi)__B); + } + + static __inline __m128i + _mm_sub_epi8 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_psubb128 ((__v16qi)__A, (__v16qi)__B); + } + + static __inline __m128i + _mm_sub_epi16 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_psubw128 ((__v8hi)__A, (__v8hi)__B); + } + + static __inline __m128i + _mm_sub_epi32 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_psubd128 ((__v4si)__A, (__v4si)__B); + } + + static __inline __m128i + _mm_sub_epi64 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_psubq128 ((__v2di)__A, (__v2di)__B); + } + + static __inline __m128i + _mm_subs_epi8 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_psubsb128 ((__v16qi)__A, (__v16qi)__B); + } + + static __inline __m128i + _mm_subs_epi16 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_psubsw128 ((__v8hi)__A, (__v8hi)__B); + } + + static __inline __m128i + _mm_subs_epu8 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_psubusb128 ((__v16qi)__A, (__v16qi)__B); + } + + static __inline __m128i + _mm_subs_epu16 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_psubusw128 ((__v8hi)__A, (__v8hi)__B); + } + + static __inline __m128i + _mm_madd_epi16 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_pmaddwd128 ((__v8hi)__A, (__v8hi)__B); + } + + static __inline __m128i + _mm_mulhi_epi16 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_pmulhw128 ((__v8hi)__A, (__v8hi)__B); + } + + static __inline __m128i + _mm_mullo_epi16 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_pmullw128 ((__v8hi)__A, (__v8hi)__B); + } + + static __inline __m64 + _mm_mul_su32 (__m64 __A, __m64 __B) + { + return (__m64)__builtin_ia32_pmuludq ((__v2si)__A, (__v2si)__B); + } + + static __inline __m128i + _mm_mul_epu32 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_pmuludq128 ((__v4si)__A, (__v4si)__B); + } + + static __inline __m128i + _mm_sll_epi16 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_psllw128 ((__v8hi)__A, (__v2di)__B); + } + + static __inline __m128i + _mm_sll_epi32 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_pslld128 ((__v4si)__A, (__v2di)__B); + } + + static __inline __m128i + _mm_sll_epi64 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_psllq128 ((__v2di)__A, (__v2di)__B); + } + + static __inline __m128i + _mm_sra_epi16 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_psraw128 ((__v8hi)__A, (__v2di)__B); + } + + static __inline __m128i + _mm_sra_epi32 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_psrad128 ((__v4si)__A, (__v2di)__B); + } + + static __inline __m128i + _mm_srl_epi16 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_psrlw128 ((__v8hi)__A, (__v2di)__B); + } + + static __inline __m128i + _mm_srl_epi32 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_psrld128 ((__v4si)__A, (__v2di)__B); + } + + static __inline __m128i + _mm_srl_epi64 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_psrlq128 ((__v2di)__A, (__v2di)__B); + } + + static __inline __m128i + _mm_slli_epi16 (__m128i __A, int __B) + { + return (__m128i)__builtin_ia32_psllwi128 ((__v8hi)__A, __B); + } + + static __inline __m128i + _mm_slli_epi32 (__m128i __A, int __B) + { + return (__m128i)__builtin_ia32_pslldi128 ((__v4si)__A, __B); + } + + static __inline __m128i + _mm_slli_epi64 (__m128i __A, int __B) + { + return (__m128i)__builtin_ia32_psllqi128 ((__v2di)__A, __B); + } + + static __inline __m128i + _mm_srai_epi16 (__m128i __A, int __B) + { + return (__m128i)__builtin_ia32_psrawi128 ((__v8hi)__A, __B); + } + + static __inline __m128i + _mm_srai_epi32 (__m128i __A, int __B) + { + return (__m128i)__builtin_ia32_psradi128 ((__v4si)__A, __B); + } + + #if 0 + static __m128i __attribute__((__always_inline__)) + _mm_srli_si128 (__m128i __A, const int __B) + { + return ((__m128i)__builtin_ia32_psrldqi128 (__A, __B)) + } + + static __m128i __attribute__((__always_inline__)) + _mm_srli_si128 (__m128i __A, const int __B) + { + return ((__m128i)__builtin_ia32_pslldqi128 (__A, __B)) + } + #endif + #define _mm_srli_si128(__A, __B) ((__m128i)__builtin_ia32_psrldqi128 (__A, __B)) + #define _mm_slli_si128(__A, __B) ((__m128i)__builtin_ia32_pslldqi128 (__A, __B)) + + static __inline __m128i + _mm_srli_epi16 (__m128i __A, int __B) + { + return (__m128i)__builtin_ia32_psrlwi128 ((__v8hi)__A, __B); + } + + static __inline __m128i + _mm_srli_epi32 (__m128i __A, int __B) + { + return (__m128i)__builtin_ia32_psrldi128 ((__v4si)__A, __B); + } + + static __inline __m128i + _mm_srli_epi64 (__m128i __A, int __B) + { + return (__m128i)__builtin_ia32_psrlqi128 ((__v2di)__A, __B); + } + + static __inline __m128i + _mm_and_si128 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_pand128 ((__v2di)__A, (__v2di)__B); + } + + static __inline __m128i + _mm_andnot_si128 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_pandn128 ((__v2di)__A, (__v2di)__B); + } + + static __inline __m128i + _mm_or_si128 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_por128 ((__v2di)__A, (__v2di)__B); + } + + static __inline __m128i + _mm_xor_si128 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_pxor128 ((__v2di)__A, (__v2di)__B); + } + + static __inline __m128i + _mm_cmpeq_epi8 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_pcmpeqb128 ((__v16qi)__A, (__v16qi)__B); + } + + static __inline __m128i + _mm_cmpeq_epi16 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_pcmpeqw128 ((__v8hi)__A, (__v8hi)__B); + } + + static __inline __m128i + _mm_cmpeq_epi32 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_pcmpeqd128 ((__v4si)__A, (__v4si)__B); + } + + static __inline __m128i + _mm_cmplt_epi8 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_pcmpgtb128 ((__v16qi)__B, (__v16qi)__A); + } + + static __inline __m128i + _mm_cmplt_epi16 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_pcmpgtw128 ((__v8hi)__B, (__v8hi)__A); + } + + static __inline __m128i + _mm_cmplt_epi32 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_pcmpgtd128 ((__v4si)__B, (__v4si)__A); + } + + static __inline __m128i + _mm_cmpgt_epi8 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_pcmpgtb128 ((__v16qi)__A, (__v16qi)__B); + } + + static __inline __m128i + _mm_cmpgt_epi16 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_pcmpgtw128 ((__v8hi)__A, (__v8hi)__B); + } + + static __inline __m128i + _mm_cmpgt_epi32 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_pcmpgtd128 ((__v4si)__A, (__v4si)__B); + } + + #define _mm_extract_epi16(__A, __B) __builtin_ia32_pextrw128 ((__v8hi)__A, __B) + + #define _mm_insert_epi16(__A, __B, __C) ((__m128i)__builtin_ia32_pinsrw128 ((__v8hi)__A, __B, __C)) + + static __inline __m128i + _mm_max_epi16 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_pmaxsw128 ((__v8hi)__A, (__v8hi)__B); + } + + static __inline __m128i + _mm_max_epu8 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_pmaxub128 ((__v16qi)__A, (__v16qi)__B); + } + + static __inline __m128i + _mm_min_epi16 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_pminsw128 ((__v8hi)__A, (__v8hi)__B); + } + + static __inline __m128i + _mm_min_epu8 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_pminub128 ((__v16qi)__A, (__v16qi)__B); + } + + static __inline int + _mm_movemask_epi8 (__m128i __A) + { + return __builtin_ia32_pmovmskb128 ((__v16qi)__A); + } + + static __inline __m128i + _mm_mulhi_epu16 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_pmulhuw128 ((__v8hi)__A, (__v8hi)__B); + } + + #define _mm_shufflehi_epi16(__A, __B) ((__m128i)__builtin_ia32_pshufhw ((__v8hi)__A, __B)) + #define _mm_shufflelo_epi16(__A, __B) ((__m128i)__builtin_ia32_pshuflw ((__v8hi)__A, __B)) + #define _mm_shuffle_epi32(__A, __B) ((__m128i)__builtin_ia32_pshufd ((__v4si)__A, __B)) + + static __inline void + _mm_maskmoveu_si128 (__m128i __A, __m128i __B, char *__C) + { + __builtin_ia32_maskmovdqu ((__v16qi)__A, (__v16qi)__B, __C); + } + + static __inline __m128i + _mm_avg_epu8 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_pavgb128 ((__v16qi)__A, (__v16qi)__B); + } + + static __inline __m128i + _mm_avg_epu16 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_pavgw128 ((__v8hi)__A, (__v8hi)__B); + } + + static __inline __m128i + _mm_sad_epu8 (__m128i __A, __m128i __B) + { + return (__m128i)__builtin_ia32_psadbw128 ((__v16qi)__A, (__v16qi)__B); + } + + static __inline void + _mm_stream_si32 (int *__A, int __B) + { + __builtin_ia32_movnti (__A, __B); + } + + static __inline void + _mm_stream_si128 (__m128i *__A, __m128i __B) + { + __builtin_ia32_movntdq ((__v2di *)__A, (__v2di)__B); + } + + static __inline void + _mm_stream_pd (double *__A, __m128d __B) + { + __builtin_ia32_movntpd (__A, (__v2df)__B); + } + + static __inline __m128i + _mm_movpi64_epi64 (__m64 __A) + { + return (__m128i)__builtin_ia32_movq2dq ((unsigned long long)__A); + } + + static __inline void + _mm_clflush (void const *__A) + { + return __builtin_ia32_clflush (__A); + } + + static __inline void + _mm_lfence (void) + { + __builtin_ia32_lfence (); + } + + static __inline void + _mm_mfence (void) + { + __builtin_ia32_mfence (); + } + + static __inline __m128i + _mm_cvtsi32_si128 (int __A) + { + return (__m128i) __builtin_ia32_loadd (&__A); + } + + #ifdef __x86_64__ + static __inline __m128i + _mm_cvtsi64x_si128 (long long __A) + { + return (__m128i) __builtin_ia32_movq2dq (__A); + } + #endif + + static __inline int + _mm_cvtsi128_si32 (__m128i __A) + { + int __tmp; + __builtin_ia32_stored (&__tmp, (__v4si)__A); + return __tmp; + } + + #ifdef __x86_64__ + static __inline long long + _mm_cvtsi128_si64x (__m128i __A) + { + return __builtin_ia32_movdq2q ((__v2di)__A); + } + #endif + + #endif /* __SSE2__ */ + + #endif /* _EMMINTRIN_H_INCLUDED */ diff -Nrc3pad gcc-3.3.2/gcc/config/i386/freebsd64.h gcc-3.3.3/gcc/config/i386/freebsd64.h *** gcc-3.3.2/gcc/config/i386/freebsd64.h Tue Apr 29 11:44:20 2003 --- gcc-3.3.3/gcc/config/i386/freebsd64.h Tue Dec 16 10:54:57 2003 *************** Boston, MA 02111-1307, USA. */ *** 23,28 **** --- 23,39 ---- #undef TARGET_VERSION #define TARGET_VERSION fprintf (stderr, " (FreeBSD/x86-64 ELF)"); + #undef FBSD_TARGET_CPU_CPP_BUILTINS + #define FBSD_TARGET_CPU_CPP_BUILTINS() \ + do \ + { \ + if (TARGET_64BIT) \ + { \ + builtin_define ("__LP64__"); \ + } \ + } \ + while (0) + /* Provide a LINK_SPEC appropriate for the FreeBSD/x86-64 ELF target. This is a copy of LINK_SPEC from tweaked for the x86-64 target. */ diff -Nrc3pad gcc-3.3.2/gcc/config/i386/i386.c gcc-3.3.3/gcc/config/i386/i386.c *** gcc-3.3.2/gcc/config/i386/i386.c Tue Sep 9 19:51:59 2003 --- gcc-3.3.3/gcc/config/i386/i386.c Fri Feb 6 19:43:30 2004 *************** override_options () *** 1257,1262 **** --- 1257,1270 ---- if (x86_arch_always_fancy_math_387 & (1 << ix86_arch)) target_flags &= ~MASK_NO_FANCY_MATH_387; + /* Turn on SSE2 builtins for -msse3. */ + if (TARGET_SSE3) + target_flags |= MASK_SSE2; + + /* Turn on SSE builtins for -msse2. */ + if (TARGET_SSE2) + target_flags |= MASK_SSE; + if (TARGET_64BIT) { if (TARGET_ALIGN_DOUBLE) *************** aligned_operand (op, mode) *** 3917,3927 **** if (! ix86_decompose_address (op, &parts)) abort (); - if (parts.base && GET_CODE (parts.base) == SUBREG) - parts.base = SUBREG_REG (parts.base); - if (parts.index && GET_CODE (parts.index) == SUBREG) - parts.index = SUBREG_REG (parts.index); - /* Look for some component that isn't known to be aligned. */ if (parts.index) { --- 3925,3930 ---- *************** ix86_asm_file_end (file) *** 4338,4343 **** --- 4341,4350 ---- output_asm_insn ("mov{l}\t{%1, %0|%0, %1}", xops); output_asm_insn ("ret", xops); } + + #ifdef SUBTARGET_FILE_END + SUBTARGET_FILE_END (file); + #endif } /* Emit code for the SET_GOT patterns. */ *************** ix86_compute_frame_layout (frame) *** 4560,4567 **** offset += size; /* Add outgoing arguments area. Can be skipped if we eliminated ! all the function calls as dead code. */ ! if (ACCUMULATE_OUTGOING_ARGS && !current_function_is_leaf) { offset += current_function_outgoing_args_size; frame->outgoing_arguments_size = current_function_outgoing_args_size; --- 4567,4578 ---- offset += size; /* Add outgoing arguments area. Can be skipped if we eliminated ! all the function calls as dead code. ! Skipping is however impossible when function calls alloca. Alloca ! expander assumes that last current_function_outgoing_args_size ! of stack frame are unused. */ ! if (ACCUMULATE_OUTGOING_ARGS ! && (!current_function_is_leaf || current_function_calls_alloca)) { offset += current_function_outgoing_args_size; frame->outgoing_arguments_size = current_function_outgoing_args_size; *************** ix86_decompose_address (addr, out) *** 4988,4994 **** rtx scale_rtx = NULL_RTX; int retval = 1; ! if (REG_P (addr) || GET_CODE (addr) == SUBREG) base = addr; else if (GET_CODE (addr) == PLUS) { --- 4999,5005 ---- rtx scale_rtx = NULL_RTX; int retval = 1; ! if (GET_CODE (addr) == REG || GET_CODE (addr) == SUBREG) base = addr; else if (GET_CODE (addr) == PLUS) { *************** ix86_address_cost (x) *** 5115,5125 **** if (!ix86_decompose_address (x, &parts)) abort (); - if (parts.base && GET_CODE (parts.base) == SUBREG) - parts.base = SUBREG_REG (parts.base); - if (parts.index && GET_CODE (parts.index) == SUBREG) - parts.index = SUBREG_REG (parts.index); - /* More complex memory references are better. */ if (parts.disp && parts.disp != const0_rtx) cost--; --- 5126,5131 ---- *************** legitimate_address_p (mode, addr, strict *** 5492,5506 **** if (base) { - rtx reg; reason_rtx = base; ! if (GET_CODE (base) == SUBREG) ! reg = SUBREG_REG (base); ! else ! reg = base; ! ! if (GET_CODE (reg) != REG) { reason = "base is not a register"; goto report_error; --- 5498,5506 ---- if (base) { reason_rtx = base; ! if (GET_CODE (base) != REG) { reason = "base is not a register"; goto report_error; *************** legitimate_address_p (mode, addr, strict *** 5512,5519 **** goto report_error; } ! if ((strict && ! REG_OK_FOR_BASE_STRICT_P (reg)) ! || (! strict && ! REG_OK_FOR_BASE_NONSTRICT_P (reg))) { reason = "base is not valid"; goto report_error; --- 5512,5519 ---- goto report_error; } ! if ((strict && ! REG_OK_FOR_BASE_STRICT_P (base)) ! || (! strict && ! REG_OK_FOR_BASE_NONSTRICT_P (base))) { reason = "base is not valid"; goto report_error; *************** legitimate_address_p (mode, addr, strict *** 5528,5542 **** if (index) { - rtx reg; reason_rtx = index; ! if (GET_CODE (index) == SUBREG) ! reg = SUBREG_REG (index); ! else ! reg = index; ! ! if (GET_CODE (reg) != REG) { reason = "index is not a register"; goto report_error; --- 5528,5536 ---- if (index) { reason_rtx = index; ! if (GET_CODE (index) != REG) { reason = "index is not a register"; goto report_error; *************** legitimate_address_p (mode, addr, strict *** 5548,5555 **** goto report_error; } ! if ((strict && ! REG_OK_FOR_INDEX_STRICT_P (reg)) ! || (! strict && ! REG_OK_FOR_INDEX_NONSTRICT_P (reg))) { reason = "index is not valid"; goto report_error; --- 5542,5549 ---- goto report_error; } ! if ((strict && ! REG_OK_FOR_INDEX_STRICT_P (index)) ! || (! strict && ! REG_OK_FOR_INDEX_NONSTRICT_P (index))) { reason = "index is not valid"; goto report_error; *************** struct builtin_description *** 12114,12138 **** const unsigned int flag; }; - /* Used for builtins that are enabled both by -msse and -msse2. */ - #define MASK_SSE1 (MASK_SSE | MASK_SSE2) - #define MASK_SSE164 (MASK_SSE | MASK_SSE2 | MASK_64BIT) - #define MASK_SSE264 (MASK_SSE2 | MASK_64BIT) - static const struct builtin_description bdesc_comi[] = { ! { MASK_SSE1, CODE_FOR_sse_comi, "__builtin_ia32_comieq", IX86_BUILTIN_COMIEQSS, UNEQ, 0 }, ! { MASK_SSE1, CODE_FOR_sse_comi, "__builtin_ia32_comilt", IX86_BUILTIN_COMILTSS, UNLT, 0 }, ! { MASK_SSE1, CODE_FOR_sse_comi, "__builtin_ia32_comile", IX86_BUILTIN_COMILESS, UNLE, 0 }, ! { MASK_SSE1, CODE_FOR_sse_comi, "__builtin_ia32_comigt", IX86_BUILTIN_COMIGTSS, GT, 0 }, ! { MASK_SSE1, CODE_FOR_sse_comi, "__builtin_ia32_comige", IX86_BUILTIN_COMIGESS, GE, 0 }, ! { MASK_SSE1, CODE_FOR_sse_comi, "__builtin_ia32_comineq", IX86_BUILTIN_COMINEQSS, LTGT, 0 }, ! { MASK_SSE1, CODE_FOR_sse_ucomi, "__builtin_ia32_ucomieq", IX86_BUILTIN_UCOMIEQSS, UNEQ, 0 }, ! { MASK_SSE1, CODE_FOR_sse_ucomi, "__builtin_ia32_ucomilt", IX86_BUILTIN_UCOMILTSS, UNLT, 0 }, ! { MASK_SSE1, CODE_FOR_sse_ucomi, "__builtin_ia32_ucomile", IX86_BUILTIN_UCOMILESS, UNLE, 0 }, ! { MASK_SSE1, CODE_FOR_sse_ucomi, "__builtin_ia32_ucomigt", IX86_BUILTIN_UCOMIGTSS, GT, 0 }, ! { MASK_SSE1, CODE_FOR_sse_ucomi, "__builtin_ia32_ucomige", IX86_BUILTIN_UCOMIGESS, GE, 0 }, ! { MASK_SSE1, CODE_FOR_sse_ucomi, "__builtin_ia32_ucomineq", IX86_BUILTIN_UCOMINEQSS, LTGT, 0 }, { MASK_SSE2, CODE_FOR_sse2_comi, "__builtin_ia32_comisdeq", IX86_BUILTIN_COMIEQSD, UNEQ, 0 }, { MASK_SSE2, CODE_FOR_sse2_comi, "__builtin_ia32_comisdlt", IX86_BUILTIN_COMILTSD, UNLT, 0 }, { MASK_SSE2, CODE_FOR_sse2_comi, "__builtin_ia32_comisdle", IX86_BUILTIN_COMILESD, UNLE, 0 }, --- 12108,12127 ---- const unsigned int flag; }; static const struct builtin_description bdesc_comi[] = { ! { MASK_SSE, CODE_FOR_sse_comi, "__builtin_ia32_comieq", IX86_BUILTIN_COMIEQSS, UNEQ, 0 }, ! { MASK_SSE, CODE_FOR_sse_comi, "__builtin_ia32_comilt", IX86_BUILTIN_COMILTSS, UNLT, 0 }, ! { MASK_SSE, CODE_FOR_sse_comi, "__builtin_ia32_comile", IX86_BUILTIN_COMILESS, UNLE, 0 }, ! { MASK_SSE, CODE_FOR_sse_comi, "__builtin_ia32_comigt", IX86_BUILTIN_COMIGTSS, GT, 0 }, ! { MASK_SSE, CODE_FOR_sse_comi, "__builtin_ia32_comige", IX86_BUILTIN_COMIGESS, GE, 0 }, ! { MASK_SSE, CODE_FOR_sse_comi, "__builtin_ia32_comineq", IX86_BUILTIN_COMINEQSS, LTGT, 0 }, ! { MASK_SSE, CODE_FOR_sse_ucomi, "__builtin_ia32_ucomieq", IX86_BUILTIN_UCOMIEQSS, UNEQ, 0 }, ! { MASK_SSE, CODE_FOR_sse_ucomi, "__builtin_ia32_ucomilt", IX86_BUILTIN_UCOMILTSS, UNLT, 0 }, ! { MASK_SSE, CODE_FOR_sse_ucomi, "__builtin_ia32_ucomile", IX86_BUILTIN_UCOMILESS, UNLE, 0 }, ! { MASK_SSE, CODE_FOR_sse_ucomi, "__builtin_ia32_ucomigt", IX86_BUILTIN_UCOMIGTSS, GT, 0 }, ! { MASK_SSE, CODE_FOR_sse_ucomi, "__builtin_ia32_ucomige", IX86_BUILTIN_UCOMIGESS, GE, 0 }, ! { MASK_SSE, CODE_FOR_sse_ucomi, "__builtin_ia32_ucomineq", IX86_BUILTIN_UCOMINEQSS, LTGT, 0 }, { MASK_SSE2, CODE_FOR_sse2_comi, "__builtin_ia32_comisdeq", IX86_BUILTIN_COMIEQSD, UNEQ, 0 }, { MASK_SSE2, CODE_FOR_sse2_comi, "__builtin_ia32_comisdlt", IX86_BUILTIN_COMILTSD, UNLT, 0 }, { MASK_SSE2, CODE_FOR_sse2_comi, "__builtin_ia32_comisdle", IX86_BUILTIN_COMILESD, UNLE, 0 }, *************** static const struct builtin_description *** 12150,12200 **** static const struct builtin_description bdesc_2arg[] = { /* SSE */ ! { MASK_SSE1, CODE_FOR_addv4sf3, "__builtin_ia32_addps", IX86_BUILTIN_ADDPS, 0, 0 }, ! { MASK_SSE1, CODE_FOR_subv4sf3, "__builtin_ia32_subps", IX86_BUILTIN_SUBPS, 0, 0 }, ! { MASK_SSE1, CODE_FOR_mulv4sf3, "__builtin_ia32_mulps", IX86_BUILTIN_MULPS, 0, 0 }, ! { MASK_SSE1, CODE_FOR_divv4sf3, "__builtin_ia32_divps", IX86_BUILTIN_DIVPS, 0, 0 }, ! { MASK_SSE1, CODE_FOR_vmaddv4sf3, "__builtin_ia32_addss", IX86_BUILTIN_ADDSS, 0, 0 }, ! { MASK_SSE1, CODE_FOR_vmsubv4sf3, "__builtin_ia32_subss", IX86_BUILTIN_SUBSS, 0, 0 }, ! { MASK_SSE1, CODE_FOR_vmmulv4sf3, "__builtin_ia32_mulss", IX86_BUILTIN_MULSS, 0, 0 }, ! { MASK_SSE1, CODE_FOR_vmdivv4sf3, "__builtin_ia32_divss", IX86_BUILTIN_DIVSS, 0, 0 }, ! { MASK_SSE1, CODE_FOR_maskcmpv4sf3, "__builtin_ia32_cmpeqps", IX86_BUILTIN_CMPEQPS, EQ, 0 }, ! { MASK_SSE1, CODE_FOR_maskcmpv4sf3, "__builtin_ia32_cmpltps", IX86_BUILTIN_CMPLTPS, LT, 0 }, ! { MASK_SSE1, CODE_FOR_maskcmpv4sf3, "__builtin_ia32_cmpleps", IX86_BUILTIN_CMPLEPS, LE, 0 }, ! { MASK_SSE1, CODE_FOR_maskcmpv4sf3, "__builtin_ia32_cmpgtps", IX86_BUILTIN_CMPGTPS, LT, 1 }, ! { MASK_SSE1, CODE_FOR_maskcmpv4sf3, "__builtin_ia32_cmpgeps", IX86_BUILTIN_CMPGEPS, LE, 1 }, ! { MASK_SSE1, CODE_FOR_maskcmpv4sf3, "__builtin_ia32_cmpunordps", IX86_BUILTIN_CMPUNORDPS, UNORDERED, 0 }, ! { MASK_SSE1, CODE_FOR_maskncmpv4sf3, "__builtin_ia32_cmpneqps", IX86_BUILTIN_CMPNEQPS, EQ, 0 }, ! { MASK_SSE1, CODE_FOR_maskncmpv4sf3, "__builtin_ia32_cmpnltps", IX86_BUILTIN_CMPNLTPS, LT, 0 }, ! { MASK_SSE1, CODE_FOR_maskncmpv4sf3, "__builtin_ia32_cmpnleps", IX86_BUILTIN_CMPNLEPS, LE, 0 }, ! { MASK_SSE1, CODE_FOR_maskncmpv4sf3, "__builtin_ia32_cmpngtps", IX86_BUILTIN_CMPNGTPS, LT, 1 }, ! { MASK_SSE1, CODE_FOR_maskncmpv4sf3, "__builtin_ia32_cmpngeps", IX86_BUILTIN_CMPNGEPS, LE, 1 }, ! { MASK_SSE1, CODE_FOR_maskncmpv4sf3, "__builtin_ia32_cmpordps", IX86_BUILTIN_CMPORDPS, UNORDERED, 0 }, ! { MASK_SSE1, CODE_FOR_vmmaskcmpv4sf3, "__builtin_ia32_cmpeqss", IX86_BUILTIN_CMPEQSS, EQ, 0 }, ! { MASK_SSE1, CODE_FOR_vmmaskcmpv4sf3, "__builtin_ia32_cmpltss", IX86_BUILTIN_CMPLTSS, LT, 0 }, ! { MASK_SSE1, CODE_FOR_vmmaskcmpv4sf3, "__builtin_ia32_cmpless", IX86_BUILTIN_CMPLESS, LE, 0 }, ! { MASK_SSE1, CODE_FOR_vmmaskcmpv4sf3, "__builtin_ia32_cmpunordss", IX86_BUILTIN_CMPUNORDSS, UNORDERED, 0 }, ! { MASK_SSE1, CODE_FOR_vmmaskncmpv4sf3, "__builtin_ia32_cmpneqss", IX86_BUILTIN_CMPNEQSS, EQ, 0 }, ! { MASK_SSE1, CODE_FOR_vmmaskncmpv4sf3, "__builtin_ia32_cmpnltss", IX86_BUILTIN_CMPNLTSS, LT, 0 }, ! { MASK_SSE1, CODE_FOR_vmmaskncmpv4sf3, "__builtin_ia32_cmpnless", IX86_BUILTIN_CMPNLESS, LE, 0 }, ! { MASK_SSE1, CODE_FOR_vmmaskncmpv4sf3, "__builtin_ia32_cmpordss", IX86_BUILTIN_CMPORDSS, UNORDERED, 0 }, ! { MASK_SSE1, CODE_FOR_sminv4sf3, "__builtin_ia32_minps", IX86_BUILTIN_MINPS, 0, 0 }, ! { MASK_SSE1, CODE_FOR_smaxv4sf3, "__builtin_ia32_maxps", IX86_BUILTIN_MAXPS, 0, 0 }, ! { MASK_SSE1, CODE_FOR_vmsminv4sf3, "__builtin_ia32_minss", IX86_BUILTIN_MINSS, 0, 0 }, ! { MASK_SSE1, CODE_FOR_vmsmaxv4sf3, "__builtin_ia32_maxss", IX86_BUILTIN_MAXSS, 0, 0 }, ! { MASK_SSE1, CODE_FOR_sse_andv4sf3, "__builtin_ia32_andps", IX86_BUILTIN_ANDPS, 0, 0 }, ! { MASK_SSE1, CODE_FOR_sse_nandv4sf3, "__builtin_ia32_andnps", IX86_BUILTIN_ANDNPS, 0, 0 }, ! { MASK_SSE1, CODE_FOR_sse_iorv4sf3, "__builtin_ia32_orps", IX86_BUILTIN_ORPS, 0, 0 }, ! { MASK_SSE1, CODE_FOR_sse_xorv4sf3, "__builtin_ia32_xorps", IX86_BUILTIN_XORPS, 0, 0 }, ! { MASK_SSE1, CODE_FOR_sse_movss, "__builtin_ia32_movss", IX86_BUILTIN_MOVSS, 0, 0 }, ! { MASK_SSE1, CODE_FOR_sse_movhlps, "__builtin_ia32_movhlps", IX86_BUILTIN_MOVHLPS, 0, 0 }, ! { MASK_SSE1, CODE_FOR_sse_movlhps, "__builtin_ia32_movlhps", IX86_BUILTIN_MOVLHPS, 0, 0 }, ! { MASK_SSE1, CODE_FOR_sse_unpckhps, "__builtin_ia32_unpckhps", IX86_BUILTIN_UNPCKHPS, 0, 0 }, ! { MASK_SSE1, CODE_FOR_sse_unpcklps, "__builtin_ia32_unpcklps", IX86_BUILTIN_UNPCKLPS, 0, 0 }, /* MMX */ { MASK_MMX, CODE_FOR_addv8qi3, "__builtin_ia32_paddb", IX86_BUILTIN_PADDB, 0, 0 }, --- 12139,12189 ---- static const struct builtin_description bdesc_2arg[] = { /* SSE */ ! { MASK_SSE, CODE_FOR_addv4sf3, "__builtin_ia32_addps", IX86_BUILTIN_ADDPS, 0, 0 }, ! { MASK_SSE, CODE_FOR_subv4sf3, "__builtin_ia32_subps", IX86_BUILTIN_SUBPS, 0, 0 }, ! { MASK_SSE, CODE_FOR_mulv4sf3, "__builtin_ia32_mulps", IX86_BUILTIN_MULPS, 0, 0 }, ! { MASK_SSE, CODE_FOR_divv4sf3, "__builtin_ia32_divps", IX86_BUILTIN_DIVPS, 0, 0 }, ! { MASK_SSE, CODE_FOR_vmaddv4sf3, "__builtin_ia32_addss", IX86_BUILTIN_ADDSS, 0, 0 }, ! { MASK_SSE, CODE_FOR_vmsubv4sf3, "__builtin_ia32_subss", IX86_BUILTIN_SUBSS, 0, 0 }, ! { MASK_SSE, CODE_FOR_vmmulv4sf3, "__builtin_ia32_mulss", IX86_BUILTIN_MULSS, 0, 0 }, ! { MASK_SSE, CODE_FOR_vmdivv4sf3, "__builtin_ia32_divss", IX86_BUILTIN_DIVSS, 0, 0 }, ! { MASK_SSE, CODE_FOR_maskcmpv4sf3, "__builtin_ia32_cmpeqps", IX86_BUILTIN_CMPEQPS, EQ, 0 }, ! { MASK_SSE, CODE_FOR_maskcmpv4sf3, "__builtin_ia32_cmpltps", IX86_BUILTIN_CMPLTPS, LT, 0 }, ! { MASK_SSE, CODE_FOR_maskcmpv4sf3, "__builtin_ia32_cmpleps", IX86_BUILTIN_CMPLEPS, LE, 0 }, ! { MASK_SSE, CODE_FOR_maskcmpv4sf3, "__builtin_ia32_cmpgtps", IX86_BUILTIN_CMPGTPS, LT, 1 }, ! { MASK_SSE, CODE_FOR_maskcmpv4sf3, "__builtin_ia32_cmpgeps", IX86_BUILTIN_CMPGEPS, LE, 1 }, ! { MASK_SSE, CODE_FOR_maskcmpv4sf3, "__builtin_ia32_cmpunordps", IX86_BUILTIN_CMPUNORDPS, UNORDERED, 0 }, ! { MASK_SSE, CODE_FOR_maskncmpv4sf3, "__builtin_ia32_cmpneqps", IX86_BUILTIN_CMPNEQPS, EQ, 0 }, ! { MASK_SSE, CODE_FOR_maskncmpv4sf3, "__builtin_ia32_cmpnltps", IX86_BUILTIN_CMPNLTPS, LT, 0 }, ! { MASK_SSE, CODE_FOR_maskncmpv4sf3, "__builtin_ia32_cmpnleps", IX86_BUILTIN_CMPNLEPS, LE, 0 }, ! { MASK_SSE, CODE_FOR_maskncmpv4sf3, "__builtin_ia32_cmpngtps", IX86_BUILTIN_CMPNGTPS, LT, 1 }, ! { MASK_SSE, CODE_FOR_maskncmpv4sf3, "__builtin_ia32_cmpngeps", IX86_BUILTIN_CMPNGEPS, LE, 1 }, ! { MASK_SSE, CODE_FOR_maskncmpv4sf3, "__builtin_ia32_cmpordps", IX86_BUILTIN_CMPORDPS, UNORDERED, 0 }, ! { MASK_SSE, CODE_FOR_vmmaskcmpv4sf3, "__builtin_ia32_cmpeqss", IX86_BUILTIN_CMPEQSS, EQ, 0 }, ! { MASK_SSE, CODE_FOR_vmmaskcmpv4sf3, "__builtin_ia32_cmpltss", IX86_BUILTIN_CMPLTSS, LT, 0 }, ! { MASK_SSE, CODE_FOR_vmmaskcmpv4sf3, "__builtin_ia32_cmpless", IX86_BUILTIN_CMPLESS, LE, 0 }, ! { MASK_SSE, CODE_FOR_vmmaskcmpv4sf3, "__builtin_ia32_cmpunordss", IX86_BUILTIN_CMPUNORDSS, UNORDERED, 0 }, ! { MASK_SSE, CODE_FOR_vmmaskncmpv4sf3, "__builtin_ia32_cmpneqss", IX86_BUILTIN_CMPNEQSS, EQ, 0 }, ! { MASK_SSE, CODE_FOR_vmmaskncmpv4sf3, "__builtin_ia32_cmpnltss", IX86_BUILTIN_CMPNLTSS, LT, 0 }, ! { MASK_SSE, CODE_FOR_vmmaskncmpv4sf3, "__builtin_ia32_cmpnless", IX86_BUILTIN_CMPNLESS, LE, 0 }, ! { MASK_SSE, CODE_FOR_vmmaskncmpv4sf3, "__builtin_ia32_cmpordss", IX86_BUILTIN_CMPORDSS, UNORDERED, 0 }, ! { MASK_SSE, CODE_FOR_sminv4sf3, "__builtin_ia32_minps", IX86_BUILTIN_MINPS, 0, 0 }, ! { MASK_SSE, CODE_FOR_smaxv4sf3, "__builtin_ia32_maxps", IX86_BUILTIN_MAXPS, 0, 0 }, ! { MASK_SSE, CODE_FOR_vmsminv4sf3, "__builtin_ia32_minss", IX86_BUILTIN_MINSS, 0, 0 }, ! { MASK_SSE, CODE_FOR_vmsmaxv4sf3, "__builtin_ia32_maxss", IX86_BUILTIN_MAXSS, 0, 0 }, ! { MASK_SSE, CODE_FOR_sse_andv4sf3, "__builtin_ia32_andps", IX86_BUILTIN_ANDPS, 0, 0 }, ! { MASK_SSE, CODE_FOR_sse_nandv4sf3, "__builtin_ia32_andnps", IX86_BUILTIN_ANDNPS, 0, 0 }, ! { MASK_SSE, CODE_FOR_sse_iorv4sf3, "__builtin_ia32_orps", IX86_BUILTIN_ORPS, 0, 0 }, ! { MASK_SSE, CODE_FOR_sse_xorv4sf3, "__builtin_ia32_xorps", IX86_BUILTIN_XORPS, 0, 0 }, ! { MASK_SSE, CODE_FOR_sse_movss, "__builtin_ia32_movss", IX86_BUILTIN_MOVSS, 0, 0 }, ! { MASK_SSE, CODE_FOR_sse_movhlps, "__builtin_ia32_movhlps", IX86_BUILTIN_MOVHLPS, 0, 0 }, ! { MASK_SSE, CODE_FOR_sse_movlhps, "__builtin_ia32_movlhps", IX86_BUILTIN_MOVLHPS, 0, 0 }, ! { MASK_SSE, CODE_FOR_sse_unpckhps, "__builtin_ia32_unpckhps", IX86_BUILTIN_UNPCKHPS, 0, 0 }, ! { MASK_SSE, CODE_FOR_sse_unpcklps, "__builtin_ia32_unpcklps", IX86_BUILTIN_UNPCKLPS, 0, 0 }, /* MMX */ { MASK_MMX, CODE_FOR_addv8qi3, "__builtin_ia32_paddb", IX86_BUILTIN_PADDB, 0, 0 }, *************** static const struct builtin_description *** 12217,12231 **** { MASK_MMX, CODE_FOR_mulv4hi3, "__builtin_ia32_pmullw", IX86_BUILTIN_PMULLW, 0, 0 }, { MASK_MMX, CODE_FOR_smulv4hi3_highpart, "__builtin_ia32_pmulhw", IX86_BUILTIN_PMULHW, 0, 0 }, ! { MASK_SSE1 | MASK_3DNOW_A, CODE_FOR_umulv4hi3_highpart, "__builtin_ia32_pmulhuw", IX86_BUILTIN_PMULHUW, 0, 0 }, { MASK_MMX, CODE_FOR_mmx_anddi3, "__builtin_ia32_pand", IX86_BUILTIN_PAND, 0, 0 }, { MASK_MMX, CODE_FOR_mmx_nanddi3, "__builtin_ia32_pandn", IX86_BUILTIN_PANDN, 0, 0 }, { MASK_MMX, CODE_FOR_mmx_iordi3, "__builtin_ia32_por", IX86_BUILTIN_POR, 0, 0 }, { MASK_MMX, CODE_FOR_mmx_xordi3, "__builtin_ia32_pxor", IX86_BUILTIN_PXOR, 0, 0 }, ! { MASK_SSE1 | MASK_3DNOW_A, CODE_FOR_mmx_uavgv8qi3, "__builtin_ia32_pavgb", IX86_BUILTIN_PAVGB, 0, 0 }, ! { MASK_SSE1 | MASK_3DNOW_A, CODE_FOR_mmx_uavgv4hi3, "__builtin_ia32_pavgw", IX86_BUILTIN_PAVGW, 0, 0 }, { MASK_MMX, CODE_FOR_eqv8qi3, "__builtin_ia32_pcmpeqb", IX86_BUILTIN_PCMPEQB, 0, 0 }, { MASK_MMX, CODE_FOR_eqv4hi3, "__builtin_ia32_pcmpeqw", IX86_BUILTIN_PCMPEQW, 0, 0 }, --- 12206,12220 ---- { MASK_MMX, CODE_FOR_mulv4hi3, "__builtin_ia32_pmullw", IX86_BUILTIN_PMULLW, 0, 0 }, { MASK_MMX, CODE_FOR_smulv4hi3_highpart, "__builtin_ia32_pmulhw", IX86_BUILTIN_PMULHW, 0, 0 }, ! { MASK_SSE | MASK_3DNOW_A, CODE_FOR_umulv4hi3_highpart, "__builtin_ia32_pmulhuw", IX86_BUILTIN_PMULHUW, 0, 0 }, { MASK_MMX, CODE_FOR_mmx_anddi3, "__builtin_ia32_pand", IX86_BUILTIN_PAND, 0, 0 }, { MASK_MMX, CODE_FOR_mmx_nanddi3, "__builtin_ia32_pandn", IX86_BUILTIN_PANDN, 0, 0 }, { MASK_MMX, CODE_FOR_mmx_iordi3, "__builtin_ia32_por", IX86_BUILTIN_POR, 0, 0 }, { MASK_MMX, CODE_FOR_mmx_xordi3, "__builtin_ia32_pxor", IX86_BUILTIN_PXOR, 0, 0 }, ! { MASK_SSE | MASK_3DNOW_A, CODE_FOR_mmx_uavgv8qi3, "__builtin_ia32_pavgb", IX86_BUILTIN_PAVGB, 0, 0 }, ! { MASK_SSE | MASK_3DNOW_A, CODE_FOR_mmx_uavgv4hi3, "__builtin_ia32_pavgw", IX86_BUILTIN_PAVGW, 0, 0 }, { MASK_MMX, CODE_FOR_eqv8qi3, "__builtin_ia32_pcmpeqb", IX86_BUILTIN_PCMPEQB, 0, 0 }, { MASK_MMX, CODE_FOR_eqv4hi3, "__builtin_ia32_pcmpeqw", IX86_BUILTIN_PCMPEQW, 0, 0 }, *************** static const struct builtin_description *** 12234,12243 **** { MASK_MMX, CODE_FOR_gtv4hi3, "__builtin_ia32_pcmpgtw", IX86_BUILTIN_PCMPGTW, 0, 0 }, { MASK_MMX, CODE_FOR_gtv2si3, "__builtin_ia32_pcmpgtd", IX86_BUILTIN_PCMPGTD, 0, 0 }, ! { MASK_SSE1 | MASK_3DNOW_A, CODE_FOR_umaxv8qi3, "__builtin_ia32_pmaxub", IX86_BUILTIN_PMAXUB, 0, 0 }, ! { MASK_SSE1 | MASK_3DNOW_A, CODE_FOR_smaxv4hi3, "__builtin_ia32_pmaxsw", IX86_BUILTIN_PMAXSW, 0, 0 }, ! { MASK_SSE1 | MASK_3DNOW_A, CODE_FOR_uminv8qi3, "__builtin_ia32_pminub", IX86_BUILTIN_PMINUB, 0, 0 }, ! { MASK_SSE1 | MASK_3DNOW_A, CODE_FOR_sminv4hi3, "__builtin_ia32_pminsw", IX86_BUILTIN_PMINSW, 0, 0 }, { MASK_MMX, CODE_FOR_mmx_punpckhbw, "__builtin_ia32_punpckhbw", IX86_BUILTIN_PUNPCKHBW, 0, 0 }, { MASK_MMX, CODE_FOR_mmx_punpckhwd, "__builtin_ia32_punpckhwd", IX86_BUILTIN_PUNPCKHWD, 0, 0 }, --- 12223,12232 ---- { MASK_MMX, CODE_FOR_gtv4hi3, "__builtin_ia32_pcmpgtw", IX86_BUILTIN_PCMPGTW, 0, 0 }, { MASK_MMX, CODE_FOR_gtv2si3, "__builtin_ia32_pcmpgtd", IX86_BUILTIN_PCMPGTD, 0, 0 }, ! { MASK_SSE | MASK_3DNOW_A, CODE_FOR_umaxv8qi3, "__builtin_ia32_pmaxub", IX86_BUILTIN_PMAXUB, 0, 0 }, ! { MASK_SSE | MASK_3DNOW_A, CODE_FOR_smaxv4hi3, "__builtin_ia32_pmaxsw", IX86_BUILTIN_PMAXSW, 0, 0 }, ! { MASK_SSE | MASK_3DNOW_A, CODE_FOR_uminv8qi3, "__builtin_ia32_pminub", IX86_BUILTIN_PMINUB, 0, 0 }, ! { MASK_SSE | MASK_3DNOW_A, CODE_FOR_sminv4hi3, "__builtin_ia32_pminsw", IX86_BUILTIN_PMINSW, 0, 0 }, { MASK_MMX, CODE_FOR_mmx_punpckhbw, "__builtin_ia32_punpckhbw", IX86_BUILTIN_PUNPCKHBW, 0, 0 }, { MASK_MMX, CODE_FOR_mmx_punpckhwd, "__builtin_ia32_punpckhwd", IX86_BUILTIN_PUNPCKHWD, 0, 0 }, *************** static const struct builtin_description *** 12251,12259 **** { MASK_MMX, CODE_FOR_mmx_packssdw, 0, IX86_BUILTIN_PACKSSDW, 0, 0 }, { MASK_MMX, CODE_FOR_mmx_packuswb, 0, IX86_BUILTIN_PACKUSWB, 0, 0 }, ! { MASK_SSE1, CODE_FOR_cvtpi2ps, 0, IX86_BUILTIN_CVTPI2PS, 0, 0 }, ! { MASK_SSE1, CODE_FOR_cvtsi2ss, 0, IX86_BUILTIN_CVTSI2SS, 0, 0 }, ! { MASK_SSE164, CODE_FOR_cvtsi2ssq, 0, IX86_BUILTIN_CVTSI642SS, 0, 0 }, { MASK_MMX, CODE_FOR_ashlv4hi3, 0, IX86_BUILTIN_PSLLW, 0, 0 }, { MASK_MMX, CODE_FOR_ashlv4hi3, 0, IX86_BUILTIN_PSLLWI, 0, 0 }, --- 12240,12248 ---- { MASK_MMX, CODE_FOR_mmx_packssdw, 0, IX86_BUILTIN_PACKSSDW, 0, 0 }, { MASK_MMX, CODE_FOR_mmx_packuswb, 0, IX86_BUILTIN_PACKUSWB, 0, 0 }, ! { MASK_SSE, CODE_FOR_cvtpi2ps, 0, IX86_BUILTIN_CVTPI2PS, 0, 0 }, ! { MASK_SSE, CODE_FOR_cvtsi2ss, 0, IX86_BUILTIN_CVTSI2SS, 0, 0 }, ! { MASK_SSE | MASK_64BIT, CODE_FOR_cvtsi2ssq, 0, IX86_BUILTIN_CVTSI642SS, 0, 0 }, { MASK_MMX, CODE_FOR_ashlv4hi3, 0, IX86_BUILTIN_PSLLW, 0, 0 }, { MASK_MMX, CODE_FOR_ashlv4hi3, 0, IX86_BUILTIN_PSLLWI, 0, 0 }, *************** static const struct builtin_description *** 12274,12280 **** { MASK_MMX, CODE_FOR_ashrv2si3, 0, IX86_BUILTIN_PSRAD, 0, 0 }, { MASK_MMX, CODE_FOR_ashrv2si3, 0, IX86_BUILTIN_PSRADI, 0, 0 }, ! { MASK_SSE1 | MASK_3DNOW_A, CODE_FOR_mmx_psadbw, 0, IX86_BUILTIN_PSADBW, 0, 0 }, { MASK_MMX, CODE_FOR_mmx_pmaddwd, 0, IX86_BUILTIN_PMADDWD, 0, 0 }, /* SSE2 */ --- 12263,12269 ---- { MASK_MMX, CODE_FOR_ashrv2si3, 0, IX86_BUILTIN_PSRAD, 0, 0 }, { MASK_MMX, CODE_FOR_ashrv2si3, 0, IX86_BUILTIN_PSRADI, 0, 0 }, ! { MASK_SSE | MASK_3DNOW_A, CODE_FOR_mmx_psadbw, 0, IX86_BUILTIN_PSADBW, 0, 0 }, { MASK_MMX, CODE_FOR_mmx_pmaddwd, 0, IX86_BUILTIN_PMADDWD, 0, 0 }, /* SSE2 */ *************** static const struct builtin_description *** 12404,12429 **** { MASK_SSE2, CODE_FOR_sse2_pmaddwd, 0, IX86_BUILTIN_PMADDWD128, 0, 0 }, { MASK_SSE2, CODE_FOR_cvtsi2sd, 0, IX86_BUILTIN_CVTSI2SD, 0, 0 }, ! { MASK_SSE264, CODE_FOR_cvtsi2sdq, 0, IX86_BUILTIN_CVTSI642SD, 0, 0 }, { MASK_SSE2, CODE_FOR_cvtsd2ss, 0, IX86_BUILTIN_CVTSD2SS, 0, 0 }, ! { MASK_SSE2, CODE_FOR_cvtss2sd, 0, IX86_BUILTIN_CVTSS2SD, 0, 0 } }; static const struct builtin_description bdesc_1arg[] = { ! { MASK_SSE1 | MASK_3DNOW_A, CODE_FOR_mmx_pmovmskb, 0, IX86_BUILTIN_PMOVMSKB, 0, 0 }, ! { MASK_SSE1, CODE_FOR_sse_movmskps, 0, IX86_BUILTIN_MOVMSKPS, 0, 0 }, ! { MASK_SSE1, CODE_FOR_sqrtv4sf2, 0, IX86_BUILTIN_SQRTPS, 0, 0 }, ! { MASK_SSE1, CODE_FOR_rsqrtv4sf2, 0, IX86_BUILTIN_RSQRTPS, 0, 0 }, ! { MASK_SSE1, CODE_FOR_rcpv4sf2, 0, IX86_BUILTIN_RCPPS, 0, 0 }, ! { MASK_SSE1, CODE_FOR_cvtps2pi, 0, IX86_BUILTIN_CVTPS2PI, 0, 0 }, ! { MASK_SSE1, CODE_FOR_cvtss2si, 0, IX86_BUILTIN_CVTSS2SI, 0, 0 }, ! { MASK_SSE164, CODE_FOR_cvtss2siq, 0, IX86_BUILTIN_CVTSS2SI64, 0, 0 }, ! { MASK_SSE1, CODE_FOR_cvttps2pi, 0, IX86_BUILTIN_CVTTPS2PI, 0, 0 }, ! { MASK_SSE1, CODE_FOR_cvttss2si, 0, IX86_BUILTIN_CVTTSS2SI, 0, 0 }, ! { MASK_SSE164, CODE_FOR_cvttss2siq, 0, IX86_BUILTIN_CVTTSS2SI64, 0, 0 }, { MASK_SSE2, CODE_FOR_sse2_pmovmskb, 0, IX86_BUILTIN_PMOVMSKB128, 0, 0 }, { MASK_SSE2, CODE_FOR_sse2_movmskpd, 0, IX86_BUILTIN_MOVMSKPD, 0, 0 }, --- 12393,12426 ---- { MASK_SSE2, CODE_FOR_sse2_pmaddwd, 0, IX86_BUILTIN_PMADDWD128, 0, 0 }, { MASK_SSE2, CODE_FOR_cvtsi2sd, 0, IX86_BUILTIN_CVTSI2SD, 0, 0 }, ! { MASK_SSE2 | MASK_64BIT, CODE_FOR_cvtsi2sdq, 0, IX86_BUILTIN_CVTSI642SD, 0, 0 }, { MASK_SSE2, CODE_FOR_cvtsd2ss, 0, IX86_BUILTIN_CVTSD2SS, 0, 0 }, ! { MASK_SSE2, CODE_FOR_cvtss2sd, 0, IX86_BUILTIN_CVTSS2SD, 0, 0 }, ! ! /* SSE3 MMX */ ! { MASK_SSE3, CODE_FOR_addsubv4sf3, "__builtin_ia32_addsubps", IX86_BUILTIN_ADDSUBPS, 0, 0 }, ! { MASK_SSE3, CODE_FOR_addsubv2df3, "__builtin_ia32_addsubpd", IX86_BUILTIN_ADDSUBPD, 0, 0 }, ! { MASK_SSE3, CODE_FOR_haddv4sf3, "__builtin_ia32_haddps", IX86_BUILTIN_HADDPS, 0, 0 }, ! { MASK_SSE3, CODE_FOR_haddv2df3, "__builtin_ia32_haddpd", IX86_BUILTIN_HADDPD, 0, 0 }, ! { MASK_SSE3, CODE_FOR_hsubv4sf3, "__builtin_ia32_hsubps", IX86_BUILTIN_HSUBPS, 0, 0 }, ! { MASK_SSE3, CODE_FOR_hsubv2df3, "__builtin_ia32_hsubpd", IX86_BUILTIN_HSUBPD, 0, 0 } }; static const struct builtin_description bdesc_1arg[] = { ! { MASK_SSE | MASK_3DNOW_A, CODE_FOR_mmx_pmovmskb, 0, IX86_BUILTIN_PMOVMSKB, 0, 0 }, ! { MASK_SSE, CODE_FOR_sse_movmskps, 0, IX86_BUILTIN_MOVMSKPS, 0, 0 }, ! { MASK_SSE, CODE_FOR_sqrtv4sf2, 0, IX86_BUILTIN_SQRTPS, 0, 0 }, ! { MASK_SSE, CODE_FOR_rsqrtv4sf2, 0, IX86_BUILTIN_RSQRTPS, 0, 0 }, ! { MASK_SSE, CODE_FOR_rcpv4sf2, 0, IX86_BUILTIN_RCPPS, 0, 0 }, ! { MASK_SSE, CODE_FOR_cvtps2pi, 0, IX86_BUILTIN_CVTPS2PI, 0, 0 }, ! { MASK_SSE, CODE_FOR_cvtss2si, 0, IX86_BUILTIN_CVTSS2SI, 0, 0 }, ! { MASK_SSE | MASK_64BIT, CODE_FOR_cvtss2siq, 0, IX86_BUILTIN_CVTSS2SI64, 0, 0 }, ! { MASK_SSE, CODE_FOR_cvttps2pi, 0, IX86_BUILTIN_CVTTPS2PI, 0, 0 }, ! { MASK_SSE, CODE_FOR_cvttss2si, 0, IX86_BUILTIN_CVTTSS2SI, 0, 0 }, ! { MASK_SSE | MASK_64BIT, CODE_FOR_cvttss2siq, 0, IX86_BUILTIN_CVTTSS2SI64, 0, 0 }, { MASK_SSE2, CODE_FOR_sse2_pmovmskb, 0, IX86_BUILTIN_PMOVMSKB128, 0, 0 }, { MASK_SSE2, CODE_FOR_sse2_movmskpd, 0, IX86_BUILTIN_MOVMSKPD, 0, 0 }, *************** static const struct builtin_description *** 12445,12458 **** { MASK_SSE2, CODE_FOR_cvtsd2si, 0, IX86_BUILTIN_CVTSD2SI, 0, 0 }, { MASK_SSE2, CODE_FOR_cvttsd2si, 0, IX86_BUILTIN_CVTTSD2SI, 0, 0 }, ! { MASK_SSE264, CODE_FOR_cvtsd2siq, 0, IX86_BUILTIN_CVTSD2SI64, 0, 0 }, ! { MASK_SSE264, CODE_FOR_cvttsd2siq, 0, IX86_BUILTIN_CVTTSD2SI64, 0, 0 }, { MASK_SSE2, CODE_FOR_cvtps2dq, 0, IX86_BUILTIN_CVTPS2DQ, 0, 0 }, { MASK_SSE2, CODE_FOR_cvtps2pd, 0, IX86_BUILTIN_CVTPS2PD, 0, 0 }, { MASK_SSE2, CODE_FOR_cvttps2dq, 0, IX86_BUILTIN_CVTTPS2DQ, 0, 0 }, ! { MASK_SSE2, CODE_FOR_sse2_movq, 0, IX86_BUILTIN_MOVQ, 0, 0 } }; void --- 12442,12460 ---- { MASK_SSE2, CODE_FOR_cvtsd2si, 0, IX86_BUILTIN_CVTSD2SI, 0, 0 }, { MASK_SSE2, CODE_FOR_cvttsd2si, 0, IX86_BUILTIN_CVTTSD2SI, 0, 0 }, ! { MASK_SSE2 | MASK_64BIT, CODE_FOR_cvtsd2siq, 0, IX86_BUILTIN_CVTSD2SI64, 0, 0 }, ! { MASK_SSE2 | MASK_64BIT, CODE_FOR_cvttsd2siq, 0, IX86_BUILTIN_CVTTSD2SI64, 0, 0 }, { MASK_SSE2, CODE_FOR_cvtps2dq, 0, IX86_BUILTIN_CVTPS2DQ, 0, 0 }, { MASK_SSE2, CODE_FOR_cvtps2pd, 0, IX86_BUILTIN_CVTPS2PD, 0, 0 }, { MASK_SSE2, CODE_FOR_cvttps2dq, 0, IX86_BUILTIN_CVTTPS2DQ, 0, 0 }, ! { MASK_SSE2, CODE_FOR_sse2_movq, 0, IX86_BUILTIN_MOVQ, 0, 0 }, ! ! /* SSE3 */ ! { MASK_SSE3, CODE_FOR_movshdup, 0, IX86_BUILTIN_MOVSHDUP, 0, 0 }, ! { MASK_SSE3, CODE_FOR_movsldup, 0, IX86_BUILTIN_MOVSLDUP, 0, 0 }, ! { MASK_SSE3, CODE_FOR_movddup, 0, IX86_BUILTIN_MOVDDUP, 0, 0 } }; void *************** ix86_init_mmx_sse_builtins () *** 12543,12548 **** --- 12545,12557 ---- = build_function_type (void_type_node, void_list_node); tree void_ftype_unsigned = build_function_type_list (void_type_node, unsigned_type_node, NULL_TREE); + tree void_ftype_unsigned_unsigned + = build_function_type_list (void_type_node, unsigned_type_node, + unsigned_type_node, NULL_TREE); + tree void_ftype_pcvoid_unsigned_unsigned + = build_function_type_list (void_type_node, const_ptr_type_node, + unsigned_type_node, unsigned_type_node, + NULL_TREE); tree unsigned_ftype_void = build_function_type (unsigned_type_node, void_list_node); tree di_ftype_void *************** ix86_init_mmx_sse_builtins () *** 12861,12912 **** def_builtin (MASK_MMX, "__builtin_ia32_packssdw", v4hi_ftype_v2si_v2si, IX86_BUILTIN_PACKSSDW); def_builtin (MASK_MMX, "__builtin_ia32_packuswb", v8qi_ftype_v4hi_v4hi, IX86_BUILTIN_PACKUSWB); ! def_builtin (MASK_SSE1, "__builtin_ia32_ldmxcsr", void_ftype_unsigned, IX86_BUILTIN_LDMXCSR); ! def_builtin (MASK_SSE1, "__builtin_ia32_stmxcsr", unsigned_ftype_void, IX86_BUILTIN_STMXCSR); ! def_builtin (MASK_SSE1, "__builtin_ia32_cvtpi2ps", v4sf_ftype_v4sf_v2si, IX86_BUILTIN_CVTPI2PS); ! def_builtin (MASK_SSE1, "__builtin_ia32_cvtps2pi", v2si_ftype_v4sf, IX86_BUILTIN_CVTPS2PI); ! def_builtin (MASK_SSE1, "__builtin_ia32_cvtsi2ss", v4sf_ftype_v4sf_int, IX86_BUILTIN_CVTSI2SS); ! def_builtin (MASK_SSE164, "__builtin_ia32_cvtsi642ss", v4sf_ftype_v4sf_int64, IX86_BUILTIN_CVTSI642SS); ! def_builtin (MASK_SSE1, "__builtin_ia32_cvtss2si", int_ftype_v4sf, IX86_BUILTIN_CVTSS2SI); ! def_builtin (MASK_SSE164, "__builtin_ia32_cvtss2si64", int64_ftype_v4sf, IX86_BUILTIN_CVTSS2SI64); ! def_builtin (MASK_SSE1, "__builtin_ia32_cvttps2pi", v2si_ftype_v4sf, IX86_BUILTIN_CVTTPS2PI); ! def_builtin (MASK_SSE1, "__builtin_ia32_cvttss2si", int_ftype_v4sf, IX86_BUILTIN_CVTTSS2SI); ! def_builtin (MASK_SSE164, "__builtin_ia32_cvttss2si64", int64_ftype_v4sf, IX86_BUILTIN_CVTTSS2SI64); ! def_builtin (MASK_SSE1 | MASK_3DNOW_A, "__builtin_ia32_pextrw", int_ftype_v4hi_int, IX86_BUILTIN_PEXTRW); ! def_builtin (MASK_SSE1 | MASK_3DNOW_A, "__builtin_ia32_pinsrw", v4hi_ftype_v4hi_int_int, IX86_BUILTIN_PINSRW); ! def_builtin (MASK_SSE1 | MASK_3DNOW_A, "__builtin_ia32_maskmovq", void_ftype_v8qi_v8qi_pchar, IX86_BUILTIN_MASKMOVQ); ! def_builtin (MASK_SSE1, "__builtin_ia32_loadaps", v4sf_ftype_pcfloat, IX86_BUILTIN_LOADAPS); ! def_builtin (MASK_SSE1, "__builtin_ia32_loadups", v4sf_ftype_pcfloat, IX86_BUILTIN_LOADUPS); ! def_builtin (MASK_SSE1, "__builtin_ia32_loadss", v4sf_ftype_pcfloat, IX86_BUILTIN_LOADSS); ! def_builtin (MASK_SSE1, "__builtin_ia32_storeaps", void_ftype_pfloat_v4sf, IX86_BUILTIN_STOREAPS); ! def_builtin (MASK_SSE1, "__builtin_ia32_storeups", void_ftype_pfloat_v4sf, IX86_BUILTIN_STOREUPS); ! def_builtin (MASK_SSE1, "__builtin_ia32_storess", void_ftype_pfloat_v4sf, IX86_BUILTIN_STORESS); ! def_builtin (MASK_SSE1, "__builtin_ia32_loadhps", v4sf_ftype_v4sf_pv2si, IX86_BUILTIN_LOADHPS); ! def_builtin (MASK_SSE1, "__builtin_ia32_loadlps", v4sf_ftype_v4sf_pv2si, IX86_BUILTIN_LOADLPS); ! def_builtin (MASK_SSE1, "__builtin_ia32_storehps", void_ftype_pv2si_v4sf, IX86_BUILTIN_STOREHPS); ! def_builtin (MASK_SSE1, "__builtin_ia32_storelps", void_ftype_pv2si_v4sf, IX86_BUILTIN_STORELPS); ! def_builtin (MASK_SSE1, "__builtin_ia32_movmskps", int_ftype_v4sf, IX86_BUILTIN_MOVMSKPS); ! def_builtin (MASK_SSE1 | MASK_3DNOW_A, "__builtin_ia32_pmovmskb", int_ftype_v8qi, IX86_BUILTIN_PMOVMSKB); ! def_builtin (MASK_SSE1, "__builtin_ia32_movntps", void_ftype_pfloat_v4sf, IX86_BUILTIN_MOVNTPS); ! def_builtin (MASK_SSE1 | MASK_3DNOW_A, "__builtin_ia32_movntq", void_ftype_pdi_di, IX86_BUILTIN_MOVNTQ); ! def_builtin (MASK_SSE1 | MASK_3DNOW_A, "__builtin_ia32_sfence", void_ftype_void, IX86_BUILTIN_SFENCE); ! def_builtin (MASK_SSE1 | MASK_3DNOW_A, "__builtin_ia32_psadbw", di_ftype_v8qi_v8qi, IX86_BUILTIN_PSADBW); ! def_builtin (MASK_SSE1, "__builtin_ia32_rcpps", v4sf_ftype_v4sf, IX86_BUILTIN_RCPPS); ! def_builtin (MASK_SSE1, "__builtin_ia32_rcpss", v4sf_ftype_v4sf, IX86_BUILTIN_RCPSS); ! def_builtin (MASK_SSE1, "__builtin_ia32_rsqrtps", v4sf_ftype_v4sf, IX86_BUILTIN_RSQRTPS); ! def_builtin (MASK_SSE1, "__builtin_ia32_rsqrtss", v4sf_ftype_v4sf, IX86_BUILTIN_RSQRTSS); ! def_builtin (MASK_SSE1, "__builtin_ia32_sqrtps", v4sf_ftype_v4sf, IX86_BUILTIN_SQRTPS); ! def_builtin (MASK_SSE1, "__builtin_ia32_sqrtss", v4sf_ftype_v4sf, IX86_BUILTIN_SQRTSS); ! def_builtin (MASK_SSE1, "__builtin_ia32_shufps", v4sf_ftype_v4sf_v4sf_int, IX86_BUILTIN_SHUFPS); /* Original 3DNow! */ def_builtin (MASK_3DNOW, "__builtin_ia32_femms", void_ftype_void, IX86_BUILTIN_FEMMS); --- 12870,12921 ---- def_builtin (MASK_MMX, "__builtin_ia32_packssdw", v4hi_ftype_v2si_v2si, IX86_BUILTIN_PACKSSDW); def_builtin (MASK_MMX, "__builtin_ia32_packuswb", v8qi_ftype_v4hi_v4hi, IX86_BUILTIN_PACKUSWB); ! def_builtin (MASK_SSE, "__builtin_ia32_ldmxcsr", void_ftype_unsigned, IX86_BUILTIN_LDMXCSR); ! def_builtin (MASK_SSE, "__builtin_ia32_stmxcsr", unsigned_ftype_void, IX86_BUILTIN_STMXCSR); ! def_builtin (MASK_SSE, "__builtin_ia32_cvtpi2ps", v4sf_ftype_v4sf_v2si, IX86_BUILTIN_CVTPI2PS); ! def_builtin (MASK_SSE, "__builtin_ia32_cvtps2pi", v2si_ftype_v4sf, IX86_BUILTIN_CVTPS2PI); ! def_builtin (MASK_SSE, "__builtin_ia32_cvtsi2ss", v4sf_ftype_v4sf_int, IX86_BUILTIN_CVTSI2SS); ! def_builtin (MASK_SSE | MASK_64BIT, "__builtin_ia32_cvtsi642ss", v4sf_ftype_v4sf_int64, IX86_BUILTIN_CVTSI642SS); ! def_builtin (MASK_SSE, "__builtin_ia32_cvtss2si", int_ftype_v4sf, IX86_BUILTIN_CVTSS2SI); ! def_builtin (MASK_SSE | MASK_64BIT, "__builtin_ia32_cvtss2si64", int64_ftype_v4sf, IX86_BUILTIN_CVTSS2SI64); ! def_builtin (MASK_SSE, "__builtin_ia32_cvttps2pi", v2si_ftype_v4sf, IX86_BUILTIN_CVTTPS2PI); ! def_builtin (MASK_SSE, "__builtin_ia32_cvttss2si", int_ftype_v4sf, IX86_BUILTIN_CVTTSS2SI); ! def_builtin (MASK_SSE | MASK_64BIT, "__builtin_ia32_cvttss2si64", int64_ftype_v4sf, IX86_BUILTIN_CVTTSS2SI64); ! def_builtin (MASK_SSE | MASK_3DNOW_A, "__builtin_ia32_pextrw", int_ftype_v4hi_int, IX86_BUILTIN_PEXTRW); ! def_builtin (MASK_SSE | MASK_3DNOW_A, "__builtin_ia32_pinsrw", v4hi_ftype_v4hi_int_int, IX86_BUILTIN_PINSRW); ! def_builtin (MASK_SSE | MASK_3DNOW_A, "__builtin_ia32_maskmovq", void_ftype_v8qi_v8qi_pchar, IX86_BUILTIN_MASKMOVQ); ! def_builtin (MASK_SSE, "__builtin_ia32_loadaps", v4sf_ftype_pcfloat, IX86_BUILTIN_LOADAPS); ! def_builtin (MASK_SSE, "__builtin_ia32_loadups", v4sf_ftype_pcfloat, IX86_BUILTIN_LOADUPS); ! def_builtin (MASK_SSE, "__builtin_ia32_loadss", v4sf_ftype_pcfloat, IX86_BUILTIN_LOADSS); ! def_builtin (MASK_SSE, "__builtin_ia32_storeaps", void_ftype_pfloat_v4sf, IX86_BUILTIN_STOREAPS); ! def_builtin (MASK_SSE, "__builtin_ia32_storeups", void_ftype_pfloat_v4sf, IX86_BUILTIN_STOREUPS); ! def_builtin (MASK_SSE, "__builtin_ia32_storess", void_ftype_pfloat_v4sf, IX86_BUILTIN_STORESS); ! def_builtin (MASK_SSE, "__builtin_ia32_loadhps", v4sf_ftype_v4sf_pv2si, IX86_BUILTIN_LOADHPS); ! def_builtin (MASK_SSE, "__builtin_ia32_loadlps", v4sf_ftype_v4sf_pv2si, IX86_BUILTIN_LOADLPS); ! def_builtin (MASK_SSE, "__builtin_ia32_storehps", void_ftype_pv2si_v4sf, IX86_BUILTIN_STOREHPS); ! def_builtin (MASK_SSE, "__builtin_ia32_storelps", void_ftype_pv2si_v4sf, IX86_BUILTIN_STORELPS); ! def_builtin (MASK_SSE, "__builtin_ia32_movmskps", int_ftype_v4sf, IX86_BUILTIN_MOVMSKPS); ! def_builtin (MASK_SSE | MASK_3DNOW_A, "__builtin_ia32_pmovmskb", int_ftype_v8qi, IX86_BUILTIN_PMOVMSKB); ! def_builtin (MASK_SSE, "__builtin_ia32_movntps", void_ftype_pfloat_v4sf, IX86_BUILTIN_MOVNTPS); ! def_builtin (MASK_SSE | MASK_3DNOW_A, "__builtin_ia32_movntq", void_ftype_pdi_di, IX86_BUILTIN_MOVNTQ); ! def_builtin (MASK_SSE | MASK_3DNOW_A, "__builtin_ia32_sfence", void_ftype_void, IX86_BUILTIN_SFENCE); ! def_builtin (MASK_SSE | MASK_3DNOW_A, "__builtin_ia32_psadbw", di_ftype_v8qi_v8qi, IX86_BUILTIN_PSADBW); ! def_builtin (MASK_SSE, "__builtin_ia32_rcpps", v4sf_ftype_v4sf, IX86_BUILTIN_RCPPS); ! def_builtin (MASK_SSE, "__builtin_ia32_rcpss", v4sf_ftype_v4sf, IX86_BUILTIN_RCPSS); ! def_builtin (MASK_SSE, "__builtin_ia32_rsqrtps", v4sf_ftype_v4sf, IX86_BUILTIN_RSQRTPS); ! def_builtin (MASK_SSE, "__builtin_ia32_rsqrtss", v4sf_ftype_v4sf, IX86_BUILTIN_RSQRTSS); ! def_builtin (MASK_SSE, "__builtin_ia32_sqrtps", v4sf_ftype_v4sf, IX86_BUILTIN_SQRTPS); ! def_builtin (MASK_SSE, "__builtin_ia32_sqrtss", v4sf_ftype_v4sf, IX86_BUILTIN_SQRTSS); ! def_builtin (MASK_SSE, "__builtin_ia32_shufps", v4sf_ftype_v4sf_v4sf_int, IX86_BUILTIN_SHUFPS); /* Original 3DNow! */ def_builtin (MASK_3DNOW, "__builtin_ia32_femms", void_ftype_void, IX86_BUILTIN_FEMMS); *************** ix86_init_mmx_sse_builtins () *** 12938,12944 **** def_builtin (MASK_3DNOW_A, "__builtin_ia32_pswapdsf", v2sf_ftype_v2sf, IX86_BUILTIN_PSWAPDSF); def_builtin (MASK_3DNOW_A, "__builtin_ia32_pswapdsi", v2si_ftype_v2si, IX86_BUILTIN_PSWAPDSI); ! def_builtin (MASK_SSE1, "__builtin_ia32_setzerops", v4sf_ftype_void, IX86_BUILTIN_SSE_ZERO); /* SSE2 */ def_builtin (MASK_SSE2, "__builtin_ia32_pextrw128", int_ftype_v8hi_int, IX86_BUILTIN_PEXTRW128); --- 12947,12953 ---- def_builtin (MASK_3DNOW_A, "__builtin_ia32_pswapdsf", v2sf_ftype_v2sf, IX86_BUILTIN_PSWAPDSF); def_builtin (MASK_3DNOW_A, "__builtin_ia32_pswapdsi", v2si_ftype_v2si, IX86_BUILTIN_PSWAPDSI); ! def_builtin (MASK_SSE, "__builtin_ia32_setzerops", v4sf_ftype_void, IX86_BUILTIN_SSE_ZERO); /* SSE2 */ def_builtin (MASK_SSE2, "__builtin_ia32_pextrw128", int_ftype_v8hi_int, IX86_BUILTIN_PEXTRW128); *************** ix86_init_mmx_sse_builtins () *** 12989,13003 **** def_builtin (MASK_SSE2, "__builtin_ia32_cvtsd2si", int_ftype_v2df, IX86_BUILTIN_CVTSD2SI); def_builtin (MASK_SSE2, "__builtin_ia32_cvttsd2si", int_ftype_v2df, IX86_BUILTIN_CVTTSD2SI); ! def_builtin (MASK_SSE264, "__builtin_ia32_cvtsd2si64", int64_ftype_v2df, IX86_BUILTIN_CVTSD2SI64); ! def_builtin (MASK_SSE264, "__builtin_ia32_cvttsd2si64", int64_ftype_v2df, IX86_BUILTIN_CVTTSD2SI64); def_builtin (MASK_SSE2, "__builtin_ia32_cvtps2dq", v4si_ftype_v4sf, IX86_BUILTIN_CVTPS2DQ); def_builtin (MASK_SSE2, "__builtin_ia32_cvtps2pd", v2df_ftype_v4sf, IX86_BUILTIN_CVTPS2PD); def_builtin (MASK_SSE2, "__builtin_ia32_cvttps2dq", v4si_ftype_v4sf, IX86_BUILTIN_CVTTPS2DQ); def_builtin (MASK_SSE2, "__builtin_ia32_cvtsi2sd", v2df_ftype_v2df_int, IX86_BUILTIN_CVTSI2SD); ! def_builtin (MASK_SSE264, "__builtin_ia32_cvtsi642sd", v2df_ftype_v2df_int64, IX86_BUILTIN_CVTSI642SD); def_builtin (MASK_SSE2, "__builtin_ia32_cvtsd2ss", v4sf_ftype_v4sf_v2df, IX86_BUILTIN_CVTSD2SS); def_builtin (MASK_SSE2, "__builtin_ia32_cvtss2sd", v2df_ftype_v2df_v4sf, IX86_BUILTIN_CVTSS2SD); --- 12998,13012 ---- def_builtin (MASK_SSE2, "__builtin_ia32_cvtsd2si", int_ftype_v2df, IX86_BUILTIN_CVTSD2SI); def_builtin (MASK_SSE2, "__builtin_ia32_cvttsd2si", int_ftype_v2df, IX86_BUILTIN_CVTTSD2SI); ! def_builtin (MASK_SSE2 | MASK_64BIT, "__builtin_ia32_cvtsd2si64", int64_ftype_v2df, IX86_BUILTIN_CVTSD2SI64); ! def_builtin (MASK_SSE2 | MASK_64BIT, "__builtin_ia32_cvttsd2si64", int64_ftype_v2df, IX86_BUILTIN_CVTTSD2SI64); def_builtin (MASK_SSE2, "__builtin_ia32_cvtps2dq", v4si_ftype_v4sf, IX86_BUILTIN_CVTPS2DQ); def_builtin (MASK_SSE2, "__builtin_ia32_cvtps2pd", v2df_ftype_v4sf, IX86_BUILTIN_CVTPS2PD); def_builtin (MASK_SSE2, "__builtin_ia32_cvttps2dq", v4si_ftype_v4sf, IX86_BUILTIN_CVTTPS2DQ); def_builtin (MASK_SSE2, "__builtin_ia32_cvtsi2sd", v2df_ftype_v2df_int, IX86_BUILTIN_CVTSI2SD); ! def_builtin (MASK_SSE2 | MASK_64BIT, "__builtin_ia32_cvtsi642sd", v2df_ftype_v2df_int64, IX86_BUILTIN_CVTSI642SD); def_builtin (MASK_SSE2, "__builtin_ia32_cvtsd2ss", v4sf_ftype_v4sf_v2df, IX86_BUILTIN_CVTSD2SS); def_builtin (MASK_SSE2, "__builtin_ia32_cvtss2sd", v2df_ftype_v2df_v4sf, IX86_BUILTIN_CVTSS2SD); *************** ix86_init_mmx_sse_builtins () *** 13021,13027 **** def_builtin (MASK_SSE2, "__builtin_ia32_stored", void_ftype_pcint_v4si, IX86_BUILTIN_STORED); def_builtin (MASK_SSE2, "__builtin_ia32_movq", v2di_ftype_v2di, IX86_BUILTIN_MOVQ); ! def_builtin (MASK_SSE1, "__builtin_ia32_setzero128", v2di_ftype_void, IX86_BUILTIN_CLRTI); def_builtin (MASK_SSE2, "__builtin_ia32_psllw128", v8hi_ftype_v8hi_v2di, IX86_BUILTIN_PSLLW128); def_builtin (MASK_SSE2, "__builtin_ia32_pslld128", v4si_ftype_v4si_v2di, IX86_BUILTIN_PSLLD128); --- 13030,13036 ---- def_builtin (MASK_SSE2, "__builtin_ia32_stored", void_ftype_pcint_v4si, IX86_BUILTIN_STORED); def_builtin (MASK_SSE2, "__builtin_ia32_movq", v2di_ftype_v2di, IX86_BUILTIN_MOVQ); ! def_builtin (MASK_SSE, "__builtin_ia32_setzero128", v2di_ftype_void, IX86_BUILTIN_CLRTI); def_builtin (MASK_SSE2, "__builtin_ia32_psllw128", v8hi_ftype_v8hi_v2di, IX86_BUILTIN_PSLLW128); def_builtin (MASK_SSE2, "__builtin_ia32_pslld128", v4si_ftype_v4si_v2di, IX86_BUILTIN_PSLLD128); *************** ix86_init_mmx_sse_builtins () *** 13048,13053 **** --- 13057,13082 ---- def_builtin (MASK_SSE2, "__builtin_ia32_psradi128", v4si_ftype_v4si_int, IX86_BUILTIN_PSRADI128); def_builtin (MASK_SSE2, "__builtin_ia32_pmaddwd128", v4si_ftype_v8hi_v8hi, IX86_BUILTIN_PMADDWD128); + + /* Prescott New Instructions. */ + def_builtin (MASK_SSE3, "__builtin_ia32_monitor", + void_ftype_pcvoid_unsigned_unsigned, + IX86_BUILTIN_MONITOR); + def_builtin (MASK_SSE3, "__builtin_ia32_mwait", + void_ftype_unsigned_unsigned, + IX86_BUILTIN_MWAIT); + def_builtin (MASK_SSE3, "__builtin_ia32_movshdup", + v4sf_ftype_v4sf, + IX86_BUILTIN_MOVSHDUP); + def_builtin (MASK_SSE3, "__builtin_ia32_movsldup", + v4sf_ftype_v4sf, + IX86_BUILTIN_MOVSLDUP); + def_builtin (MASK_SSE3, "__builtin_ia32_lddqu", + v16qi_ftype_pcchar, IX86_BUILTIN_LDDQU); + def_builtin (MASK_SSE3, "__builtin_ia32_loadddup", + v2df_ftype_pcdouble, IX86_BUILTIN_LOADDDUP); + def_builtin (MASK_SSE3, "__builtin_ia32_movddup", + v2df_ftype_v2df, IX86_BUILTIN_MOVDDUP); } /* Errors in the source file can cause expand_expr to return const0_rtx *************** ix86_expand_builtin (exp, target, subtar *** 13856,13861 **** --- 13885,13925 ---- case IX86_BUILTIN_STORED: return ix86_expand_store_builtin (CODE_FOR_sse2_stored, arglist); + case IX86_BUILTIN_MONITOR: + arg0 = TREE_VALUE (arglist); + arg1 = TREE_VALUE (TREE_CHAIN (arglist)); + arg2 = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist))); + op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0); + op1 = expand_expr (arg1, NULL_RTX, VOIDmode, 0); + op2 = expand_expr (arg2, NULL_RTX, VOIDmode, 0); + if (!REG_P (op0)) + op0 = copy_to_mode_reg (SImode, op0); + if (!REG_P (op1)) + op1 = copy_to_mode_reg (SImode, op1); + if (!REG_P (op2)) + op2 = copy_to_mode_reg (SImode, op2); + emit_insn (gen_monitor (op0, op1, op2)); + return 0; + + case IX86_BUILTIN_MWAIT: + arg0 = TREE_VALUE (arglist); + arg1 = TREE_VALUE (TREE_CHAIN (arglist)); + op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0); + op1 = expand_expr (arg1, NULL_RTX, VOIDmode, 0); + if (!REG_P (op0)) + op0 = copy_to_mode_reg (SImode, op0); + if (!REG_P (op1)) + op1 = copy_to_mode_reg (SImode, op1); + emit_insn (gen_mwait (op0, op1)); + return 0; + + case IX86_BUILTIN_LOADDDUP: + return ix86_expand_unop_builtin (CODE_FOR_loadddup, arglist, target, 1); + + case IX86_BUILTIN_LDDQU: + return ix86_expand_unop_builtin (CODE_FOR_lddqu, arglist, target, + 1); + default: break; } diff -Nrc3pad gcc-3.3.2/gcc/config/i386/i386.h gcc-3.3.3/gcc/config/i386/i386.h *** gcc-3.3.2/gcc/config/i386/i386.h Wed Jun 25 21:18:31 2003 --- gcc-3.3.3/gcc/config/i386/i386.h Fri Feb 6 19:43:31 2004 *************** extern int target_flags; *** 114,123 **** #define MASK_MMX 0x00002000 /* Support MMX regs/builtins */ #define MASK_SSE 0x00004000 /* Support SSE regs/builtins */ #define MASK_SSE2 0x00008000 /* Support SSE2 regs/builtins */ ! #define MASK_3DNOW 0x00010000 /* Support 3Dnow builtins */ ! #define MASK_3DNOW_A 0x00020000 /* Support Athlon 3Dnow builtins */ ! #define MASK_128BIT_LONG_DOUBLE 0x00040000 /* long double size is 128bit */ ! #define MASK_64BIT 0x00080000 /* Produce 64bit code */ /* Unused: 0x03f0000 */ --- 114,124 ---- #define MASK_MMX 0x00002000 /* Support MMX regs/builtins */ #define MASK_SSE 0x00004000 /* Support SSE regs/builtins */ #define MASK_SSE2 0x00008000 /* Support SSE2 regs/builtins */ ! #define MASK_SSE3 0x00010000 /* Support SSE3 builtins */ ! #define MASK_3DNOW 0x00020000 /* Support 3Dnow builtins */ ! #define MASK_3DNOW_A 0x00040000 /* Support Athlon 3Dnow builtins */ ! #define MASK_128BIT_LONG_DOUBLE 0x00080000 /* long double size is 128bit */ ! #define MASK_64BIT 0x00100000 /* Produce 64bit code */ /* Unused: 0x03f0000 */ *************** extern int x86_prefetch_sse; *** 271,278 **** #define ASSEMBLER_DIALECT (ix86_asm_dialect) ! #define TARGET_SSE ((target_flags & (MASK_SSE | MASK_SSE2)) != 0) #define TARGET_SSE2 ((target_flags & MASK_SSE2) != 0) #define TARGET_SSE_MATH ((ix86_fpmath & FPMATH_SSE) != 0) #define TARGET_MIX_SSE_I387 ((ix86_fpmath & FPMATH_SSE) \ && (ix86_fpmath & FPMATH_387)) --- 272,280 ---- #define ASSEMBLER_DIALECT (ix86_asm_dialect) ! #define TARGET_SSE ((target_flags & MASK_SSE) != 0) #define TARGET_SSE2 ((target_flags & MASK_SSE2) != 0) + #define TARGET_SSE3 ((target_flags & MASK_SSE3) != 0) #define TARGET_SSE_MATH ((ix86_fpmath & FPMATH_SSE) != 0) #define TARGET_MIX_SSE_I387 ((ix86_fpmath & FPMATH_SSE) \ && (ix86_fpmath & FPMATH_387)) *************** extern int x86_prefetch_sse; *** 300,305 **** --- 302,309 ---- { "486", 0, "" /*Deprecated.*/}, \ { "pentium", 0, "" /*Deprecated.*/}, \ { "pentiumpro", 0, "" /*Deprecated.*/}, \ + { "pni", 0, "" /*Deprecated.*/}, \ + { "no-pni", 0, "" /*Deprecated.*/}, \ { "intel-syntax", 0, "" /*Deprecated.*/}, \ { "no-intel-syntax", 0, "" /*Deprecated.*/}, \ { "rtd", MASK_RTD, \ *************** extern int x86_prefetch_sse; *** 366,371 **** --- 370,379 ---- N_("Support MMX, SSE and SSE2 built-in functions and code generation") }, \ { "no-sse2", -MASK_SSE2, \ N_("Do not support MMX, SSE and SSE2 built-in functions and code generation") }, \ + { "sse3", MASK_SSE3, \ + N_("Support MMX, SSE, SSE2 and SSE3 built-in functions and code generation") }, \ + { "no-sse3", -MASK_SSE3, \ + N_("Do not support MMX, SSE, SSE2 and SSE3 built-in functions and code generation") }, \ { "128bit-long-double", MASK_128BIT_LONG_DOUBLE, \ N_("sizeof(long double) is 16") }, \ { "96bit-long-double", -MASK_128BIT_LONG_DOUBLE, \ *************** extern int x86_prefetch_sse; *** 469,474 **** --- 477,486 ---- %n`-mpentium' is deprecated. Use `-march=pentium' or `-mcpu=pentium' instead.\n} \ %{mpentiumpro:-mcpu=pentiumpro \ %n`-mpentiumpro' is deprecated. Use `-march=pentiumpro' or `-mcpu=pentiumpro' instead.\n}} \ + %{mpni:-msse3 \ + %n`-mpni' is deprecated. Use `-msse3' instead.\n} \ + %{mno-pni:-mno-sse3 \ + %n`-mno-pni' is deprecated. Use `-mno-sse3' instead.\n} \ %{mintel-syntax:-masm=intel \ %n`-mintel-syntax' is deprecated. Use `-masm=intel' instead.\n} \ %{mno-intel-syntax:-masm=att \ *************** extern int x86_prefetch_sse; *** 554,559 **** --- 566,576 ---- builtin_define ("__SSE__"); \ if (TARGET_SSE2) \ builtin_define ("__SSE2__"); \ + if (TARGET_SSE3) \ + { \ + builtin_define ("__SSE3__"); \ + builtin_define ("__PNI__"); \ + } \ if (TARGET_SSE_MATH && TARGET_SSE) \ builtin_define ("__SSE_MATH__"); \ if (TARGET_SSE_MATH && TARGET_SSE2) \ *************** enum ix86_builtins *** 2480,2485 **** --- 2497,2518 ---- IX86_BUILTIN_MFENCE, IX86_BUILTIN_LFENCE, + /* Prescott New Instructions. */ + IX86_BUILTIN_ADDSUBPS, + IX86_BUILTIN_HADDPS, + IX86_BUILTIN_HSUBPS, + IX86_BUILTIN_MOVSHDUP, + IX86_BUILTIN_MOVSLDUP, + IX86_BUILTIN_ADDSUBPD, + IX86_BUILTIN_HADDPD, + IX86_BUILTIN_HSUBPD, + IX86_BUILTIN_LOADDDUP, + IX86_BUILTIN_MOVDDUP, + IX86_BUILTIN_LDDQU, + + IX86_BUILTIN_MONITOR, + IX86_BUILTIN_MWAIT, + IX86_BUILTIN_MAX }; diff -Nrc3pad gcc-3.3.2/gcc/config/i386/i386.md gcc-3.3.3/gcc/config/i386/i386.md *** gcc-3.3.2/gcc/config/i386/i386.md Tue Jul 8 19:16:42 2003 --- gcc-3.3.3/gcc/config/i386/i386.md Fri Feb 6 19:43:31 2004 *************** *** 110,115 **** --- 110,122 ---- (UNSPEC_MFENCE 59) (UNSPEC_LFENCE 60) (UNSPEC_PSADBW 61) + (UNSPEC_ADDSUB 71) + (UNSPEC_HADD 72) + (UNSPEC_HSUB 73) + (UNSPEC_MOVSHDUP 74) + (UNSPEC_MOVSLDUP 75) + (UNSPEC_LDQQU 76) + (UNSPEC_MOVDDUP 77) ]) (define_constants *************** *** 120,125 **** --- 127,134 ---- (UNSPECV_STMXCSR 40) (UNSPECV_FEMMS 46) (UNSPECV_CLFLUSH 57) + (UNSPECV_MONITOR 69) + (UNSPECV_MWAIT 70) ]) ;; Insns whose names begin with "x86_" are emitted by gen_FOO calls *************** *** 683,689 **** [(set (reg:CC 17) (compare:CC (match_operand:XF 0 "cmp_fp_expander_operand" "") (match_operand:XF 1 "cmp_fp_expander_operand" "")))] ! "!TARGET_64BIT && TARGET_80387" { ix86_compare_op0 = operands[0]; ix86_compare_op1 = operands[1]; --- 692,698 ---- [(set (reg:CC 17) (compare:CC (match_operand:XF 0 "cmp_fp_expander_operand" "") (match_operand:XF 1 "cmp_fp_expander_operand" "")))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387" { ix86_compare_op0 = operands[0]; ix86_compare_op1 = operands[1]; *************** *** 811,817 **** (compare:CCFP (match_operand:XF 0 "register_operand" "f") (match_operand:XF 1 "register_operand" "f")))] ! "!TARGET_64BIT && TARGET_80387" "* return output_fp_compare (insn, operands, 0, 0);" [(set_attr "type" "fcmp") (set_attr "mode" "XF")]) --- 820,826 ---- (compare:CCFP (match_operand:XF 0 "register_operand" "f") (match_operand:XF 1 "register_operand" "f")))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387" "* return output_fp_compare (insn, operands, 0, 0);" [(set_attr "type" "fcmp") (set_attr "mode" "XF")]) *************** *** 833,839 **** (match_operand:XF 1 "register_operand" "f") (match_operand:XF 2 "register_operand" "f"))] UNSPEC_FNSTSW))] ! "!TARGET_64BIT && TARGET_80387" "* return output_fp_compare (insn, operands, 2, 0);" [(set_attr "type" "multi") (set_attr "mode" "XF")]) --- 842,848 ---- (match_operand:XF 1 "register_operand" "f") (match_operand:XF 2 "register_operand" "f"))] UNSPEC_FNSTSW))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387" "* return output_fp_compare (insn, operands, 2, 0);" [(set_attr "type" "multi") (set_attr "mode" "XF")]) *************** *** 2417,2423 **** (define_expand "movxf" [(set (match_operand:XF 0 "nonimmediate_operand" "") (match_operand:XF 1 "general_operand" ""))] ! "!TARGET_64BIT" "ix86_expand_move (XFmode, operands); DONE;") (define_expand "movtf" --- 2426,2432 ---- (define_expand "movxf" [(set (match_operand:XF 0 "nonimmediate_operand" "") (match_operand:XF 1 "general_operand" ""))] ! "!TARGET_128BIT_LONG_DOUBLE" "ix86_expand_move (XFmode, operands); DONE;") (define_expand "movtf" *************** *** 2436,2442 **** (define_insn "*pushxf_nointeger" [(set (match_operand:XF 0 "push_operand" "=X,X,X") (match_operand:XF 1 "general_no_elim_operand" "f,Fo,*r"))] ! "!TARGET_64BIT && optimize_size" { switch (which_alternative) { --- 2445,2451 ---- (define_insn "*pushxf_nointeger" [(set (match_operand:XF 0 "push_operand" "=X,X,X") (match_operand:XF 1 "general_no_elim_operand" "f,Fo,*r"))] ! "!TARGET_128BIT_LONG_DOUBLE && optimize_size" { switch (which_alternative) { *************** *** 2492,2498 **** (define_insn "*pushxf_integer" [(set (match_operand:XF 0 "push_operand" "=<,<") (match_operand:XF 1 "general_no_elim_operand" "f#r,ro#f"))] ! "!TARGET_64BIT && !optimize_size" { switch (which_alternative) { --- 2501,2507 ---- (define_insn "*pushxf_integer" [(set (match_operand:XF 0 "push_operand" "=<,<") (match_operand:XF 1 "general_no_elim_operand" "f#r,ro#f"))] ! "!TARGET_128BIT_LONG_DOUBLE && !optimize_size" { switch (which_alternative) { *************** *** 2563,2569 **** (define_split [(set (match_operand:XF 0 "push_operand" "") (match_operand:XF 1 "any_fp_register_operand" ""))] ! "!TARGET_64BIT" [(set (reg:SI 7) (plus:SI (reg:SI 7) (const_int -12))) (set (mem:XF (reg:SI 7)) (match_dup 1))]) --- 2572,2578 ---- (define_split [(set (match_operand:XF 0 "push_operand" "") (match_operand:XF 1 "any_fp_register_operand" ""))] ! "!TARGET_128BIT_LONG_DOUBLE" [(set (reg:SI 7) (plus:SI (reg:SI 7) (const_int -12))) (set (mem:XF (reg:SI 7)) (match_dup 1))]) *************** *** 2585,2591 **** (define_insn "*movxf_nointeger" [(set (match_operand:XF 0 "nonimmediate_operand" "=f,m,f,*r,o") (match_operand:XF 1 "general_operand" "fm,f,G,*roF,F*r"))] ! "!TARGET_64BIT && optimize_size && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM) && (reload_in_progress || reload_completed --- 2594,2600 ---- (define_insn "*movxf_nointeger" [(set (match_operand:XF 0 "nonimmediate_operand" "=f,m,f,*r,o") (match_operand:XF 1 "general_operand" "fm,f,G,*roF,F*r"))] ! "!TARGET_128BIT_LONG_DOUBLE && optimize_size && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM) && (reload_in_progress || reload_completed *************** *** 2679,2685 **** (define_insn "*movxf_integer" [(set (match_operand:XF 0 "nonimmediate_operand" "=f#r,m,f#r,r#f,o") (match_operand:XF 1 "general_operand" "fm#r,f#r,G,roF#f,Fr#f"))] ! "!TARGET_64BIT && !optimize_size && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM) && (reload_in_progress || reload_completed --- 2688,2694 ---- (define_insn "*movxf_integer" [(set (match_operand:XF 0 "nonimmediate_operand" "=f#r,m,f#r,r#f,o") (match_operand:XF 1 "general_operand" "fm#r,f#r,G,roF#f,Fr#f"))] ! "!TARGET_128BIT_LONG_DOUBLE && !optimize_size && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM) && (reload_in_progress || reload_completed *************** *** 3350,3356 **** (define_split [(set (match_operand:XF 0 "push_operand" "") (float_extend:XF (match_operand:SF 1 "fp_register_operand" "")))] ! "!TARGET_64BIT" [(set (reg:SI 7) (plus:SI (reg:SI 7) (const_int -12))) (set (mem:XF (reg:SI 7)) (float_extend:XF (match_dup 1)))]) --- 3359,3365 ---- (define_split [(set (match_operand:XF 0 "push_operand" "") (float_extend:XF (match_operand:SF 1 "fp_register_operand" "")))] ! "!TARGET_128BIT_LONG_DOUBLE" [(set (reg:SI 7) (plus:SI (reg:SI 7) (const_int -12))) (set (mem:XF (reg:SI 7)) (float_extend:XF (match_dup 1)))]) *************** *** 3383,3389 **** (define_split [(set (match_operand:XF 0 "push_operand" "") (float_extend:XF (match_operand:DF 1 "fp_register_operand" "")))] ! "!TARGET_64BIT" [(set (reg:SI 7) (plus:SI (reg:SI 7) (const_int -12))) (set (mem:DF (reg:SI 7)) (float_extend:XF (match_dup 1)))]) --- 3392,3398 ---- (define_split [(set (match_operand:XF 0 "push_operand" "") (float_extend:XF (match_operand:DF 1 "fp_register_operand" "")))] ! "!TARGET_128BIT_LONG_DOUBLE" [(set (reg:SI 7) (plus:SI (reg:SI 7) (const_int -12))) (set (mem:DF (reg:SI 7)) (float_extend:XF (match_dup 1)))]) *************** *** 3465,3471 **** (define_expand "extendsfxf2" [(set (match_operand:XF 0 "nonimmediate_operand" "") (float_extend:XF (match_operand:SF 1 "general_operand" "")))] ! "!TARGET_64BIT && TARGET_80387" { /* ??? Needed for compress_float_constant since all fp constants are LEGITIMATE_CONSTANT_P. */ --- 3474,3480 ---- (define_expand "extendsfxf2" [(set (match_operand:XF 0 "nonimmediate_operand" "") (float_extend:XF (match_operand:SF 1 "general_operand" "")))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387" { /* ??? Needed for compress_float_constant since all fp constants are LEGITIMATE_CONSTANT_P. */ *************** *** 3478,3484 **** (define_insn "*extendsfxf2_1" [(set (match_operand:XF 0 "nonimmediate_operand" "=f,m") (float_extend:XF (match_operand:SF 1 "nonimmediate_operand" "fm,f")))] ! "!TARGET_64BIT && TARGET_80387 && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)" { switch (which_alternative) --- 3487,3493 ---- (define_insn "*extendsfxf2_1" [(set (match_operand:XF 0 "nonimmediate_operand" "=f,m") (float_extend:XF (match_operand:SF 1 "nonimmediate_operand" "fm,f")))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387 && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)" { switch (which_alternative) *************** *** 3555,3561 **** (define_expand "extenddfxf2" [(set (match_operand:XF 0 "nonimmediate_operand" "") (float_extend:XF (match_operand:DF 1 "general_operand" "")))] ! "!TARGET_64BIT && TARGET_80387" { /* ??? Needed for compress_float_constant since all fp constants are LEGITIMATE_CONSTANT_P. */ --- 3564,3570 ---- (define_expand "extenddfxf2" [(set (match_operand:XF 0 "nonimmediate_operand" "") (float_extend:XF (match_operand:DF 1 "general_operand" "")))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387" { /* ??? Needed for compress_float_constant since all fp constants are LEGITIMATE_CONSTANT_P. */ *************** *** 3568,3574 **** (define_insn "*extenddfxf2_1" [(set (match_operand:XF 0 "nonimmediate_operand" "=f,m") (float_extend:XF (match_operand:DF 1 "nonimmediate_operand" "fm,f")))] ! "!TARGET_64BIT && TARGET_80387 && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)" { switch (which_alternative) --- 3577,3583 ---- (define_insn "*extenddfxf2_1" [(set (match_operand:XF 0 "nonimmediate_operand" "=f,m") (float_extend:XF (match_operand:DF 1 "nonimmediate_operand" "fm,f")))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387 && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)" { switch (which_alternative) *************** *** 3788,3794 **** (float_truncate:SF (match_operand:XF 1 "register_operand" ""))) (clobber (match_dup 2))])] ! "!TARGET_64BIT && TARGET_80387" "operands[2] = assign_386_stack_local (SFmode, 0);") (define_insn "*truncxfsf2_1" --- 3797,3803 ---- (float_truncate:SF (match_operand:XF 1 "register_operand" ""))) (clobber (match_dup 2))])] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387" "operands[2] = assign_386_stack_local (SFmode, 0);") (define_insn "*truncxfsf2_1" *************** *** 3796,3802 **** (float_truncate:SF (match_operand:XF 1 "register_operand" "f,f,f,f"))) (clobber (match_operand:SF 2 "memory_operand" "=X,m,m,m"))] ! "!TARGET_64BIT && TARGET_80387" { switch (which_alternative) { --- 3805,3811 ---- (float_truncate:SF (match_operand:XF 1 "register_operand" "f,f,f,f"))) (clobber (match_operand:SF 2 "memory_operand" "=X,m,m,m"))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387" { switch (which_alternative) { *************** *** 3816,3822 **** [(set (match_operand:SF 0 "memory_operand" "=m") (float_truncate:SF (match_operand:XF 1 "register_operand" "f")))] ! "!TARGET_64BIT && TARGET_80387" { if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) return "fstp%z0\t%y0"; --- 3825,3831 ---- [(set (match_operand:SF 0 "memory_operand" "=m") (float_truncate:SF (match_operand:XF 1 "register_operand" "f")))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387" { if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) return "fstp%z0\t%y0"; *************** *** 3913,3919 **** (float_truncate:DF (match_operand:XF 1 "register_operand" ""))) (clobber (match_dup 2))])] ! "!TARGET_64BIT && TARGET_80387" "operands[2] = assign_386_stack_local (DFmode, 0);") (define_insn "*truncxfdf2_1" --- 3922,3928 ---- (float_truncate:DF (match_operand:XF 1 "register_operand" ""))) (clobber (match_dup 2))])] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387" "operands[2] = assign_386_stack_local (DFmode, 0);") (define_insn "*truncxfdf2_1" *************** *** 3921,3927 **** (float_truncate:DF (match_operand:XF 1 "register_operand" "f,f,f,f"))) (clobber (match_operand:DF 2 "memory_operand" "=X,m,m,m"))] ! "!TARGET_64BIT && TARGET_80387" { switch (which_alternative) { --- 3930,3936 ---- (float_truncate:DF (match_operand:XF 1 "register_operand" "f,f,f,f"))) (clobber (match_operand:DF 2 "memory_operand" "=X,m,m,m"))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387" { switch (which_alternative) { *************** *** 3942,3948 **** [(set (match_operand:DF 0 "memory_operand" "=m") (float_truncate:DF (match_operand:XF 1 "register_operand" "f")))] ! "!TARGET_64BIT && TARGET_80387" { if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) return "fstp%z0\t%y0"; --- 3951,3957 ---- [(set (match_operand:DF 0 "memory_operand" "=m") (float_truncate:DF (match_operand:XF 1 "register_operand" "f")))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387" { if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) return "fstp%z0\t%y0"; *************** *** 4042,4048 **** (define_expand "fix_truncxfdi2" [(set (match_operand:DI 0 "nonimmediate_operand" "") (fix:DI (match_operand:XF 1 "register_operand" "")))] ! "!TARGET_64BIT && TARGET_80387" "") (define_expand "fix_trunctfdi2" --- 4051,4057 ---- (define_expand "fix_truncxfdi2" [(set (match_operand:DI 0 "nonimmediate_operand" "") (fix:DI (match_operand:XF 1 "register_operand" "")))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387" "") (define_expand "fix_trunctfdi2" *************** *** 4181,4187 **** (define_expand "fix_truncxfsi2" [(set (match_operand:SI 0 "nonimmediate_operand" "") (fix:SI (match_operand:XF 1 "register_operand" "")))] ! "!TARGET_64BIT && TARGET_80387" "") (define_expand "fix_trunctfsi2" --- 4190,4196 ---- (define_expand "fix_truncxfsi2" [(set (match_operand:SI 0 "nonimmediate_operand" "") (fix:SI (match_operand:XF 1 "register_operand" "")))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387" "") (define_expand "fix_trunctfsi2" *************** *** 4314,4320 **** (define_expand "fix_truncxfhi2" [(set (match_operand:HI 0 "nonimmediate_operand" "") (fix:HI (match_operand:XF 1 "register_operand" "")))] ! "!TARGET_64BIT && TARGET_80387" "") (define_expand "fix_trunctfhi2" --- 4323,4329 ---- (define_expand "fix_truncxfhi2" [(set (match_operand:HI 0 "nonimmediate_operand" "") (fix:HI (match_operand:XF 1 "register_operand" "")))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387" "") (define_expand "fix_trunctfhi2" *************** *** 4592,4598 **** (define_insn "floathixf2" [(set (match_operand:XF 0 "register_operand" "=f,f") (float:XF (match_operand:HI 1 "nonimmediate_operand" "m,r")))] ! "!TARGET_64BIT && TARGET_80387" "@ fild%z1\t%1 #" --- 4601,4607 ---- (define_insn "floathixf2" [(set (match_operand:XF 0 "register_operand" "=f,f") (float:XF (match_operand:HI 1 "nonimmediate_operand" "m,r")))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387" "@ fild%z1\t%1 #" *************** *** 4614,4620 **** (define_insn "floatsixf2" [(set (match_operand:XF 0 "register_operand" "=f,f") (float:XF (match_operand:SI 1 "nonimmediate_operand" "m,r")))] ! "!TARGET_64BIT && TARGET_80387" "@ fild%z1\t%1 #" --- 4623,4629 ---- (define_insn "floatsixf2" [(set (match_operand:XF 0 "register_operand" "=f,f") (float:XF (match_operand:SI 1 "nonimmediate_operand" "m,r")))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387" "@ fild%z1\t%1 #" *************** *** 4636,4642 **** (define_insn "floatdixf2" [(set (match_operand:XF 0 "register_operand" "=f,f") (float:XF (match_operand:DI 1 "nonimmediate_operand" "m,r")))] ! "!TARGET_64BIT && TARGET_80387" "@ fild%z1\t%1 #" --- 4645,4651 ---- (define_insn "floatdixf2" [(set (match_operand:XF 0 "register_operand" "=f,f") (float:XF (match_operand:DI 1 "nonimmediate_operand" "m,r")))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387" "@ fild%z1\t%1 #" *************** *** 6302,6308 **** [(set (match_operand:XF 0 "register_operand" "") (plus:XF (match_operand:XF 1 "register_operand" "") (match_operand:XF 2 "register_operand" "")))] ! "!TARGET_64BIT && TARGET_80387" "") (define_expand "addtf3" --- 6311,6317 ---- [(set (match_operand:XF 0 "register_operand" "") (plus:XF (match_operand:XF 1 "register_operand" "") (match_operand:XF 2 "register_operand" "")))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387" "") (define_expand "addtf3" *************** *** 6630,6636 **** [(set (match_operand:XF 0 "register_operand" "") (minus:XF (match_operand:XF 1 "register_operand" "") (match_operand:XF 2 "register_operand" "")))] ! "!TARGET_64BIT && TARGET_80387" "") (define_expand "subtf3" --- 6639,6645 ---- [(set (match_operand:XF 0 "register_operand" "") (minus:XF (match_operand:XF 1 "register_operand" "") (match_operand:XF 2 "register_operand" "")))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387" "") (define_expand "subtf3" *************** *** 7089,7095 **** [(set (match_operand:XF 0 "register_operand" "") (mult:XF (match_operand:XF 1 "register_operand" "") (match_operand:XF 2 "register_operand" "")))] ! "!TARGET_64BIT && TARGET_80387" "") (define_expand "multf3" --- 7098,7104 ---- [(set (match_operand:XF 0 "register_operand" "") (mult:XF (match_operand:XF 1 "register_operand" "") (match_operand:XF 2 "register_operand" "")))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387" "") (define_expand "multf3" *************** *** 7143,7149 **** [(set (match_operand:XF 0 "register_operand" "") (div:XF (match_operand:XF 1 "register_operand" "") (match_operand:XF 2 "register_operand" "")))] ! "!TARGET_64BIT && TARGET_80387" "") (define_expand "divtf3" --- 7152,7158 ---- [(set (match_operand:XF 0 "register_operand" "") (div:XF (match_operand:XF 1 "register_operand" "") (match_operand:XF 2 "register_operand" "")))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387" "") (define_expand "divtf3" *************** *** 9537,9543 **** [(parallel [(set (match_operand:XF 0 "nonimmediate_operand" "") (neg:XF (match_operand:XF 1 "nonimmediate_operand" ""))) (clobber (reg:CC 17))])] ! "!TARGET_64BIT && TARGET_80387" "ix86_expand_unary_operator (NEG, XFmode, operands); DONE;") (define_expand "negtf2" --- 9546,9552 ---- [(parallel [(set (match_operand:XF 0 "nonimmediate_operand" "") (neg:XF (match_operand:XF 1 "nonimmediate_operand" ""))) (clobber (reg:CC 17))])] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387" "ix86_expand_unary_operator (NEG, XFmode, operands); DONE;") (define_expand "negtf2" *************** *** 9554,9560 **** [(set (match_operand:XF 0 "nonimmediate_operand" "=f#r,rm#f") (neg:XF (match_operand:XF 1 "nonimmediate_operand" "0,0"))) (clobber (reg:CC 17))] ! "!TARGET_64BIT && TARGET_80387 && ix86_unary_operator_ok (NEG, XFmode, operands)" "#") --- 9563,9569 ---- [(set (match_operand:XF 0 "nonimmediate_operand" "=f#r,rm#f") (neg:XF (match_operand:XF 1 "nonimmediate_operand" "0,0"))) (clobber (reg:CC 17))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387 && ix86_unary_operator_ok (NEG, XFmode, operands)" "#") *************** *** 9642,9648 **** (define_insn "*negxf2_1" [(set (match_operand:XF 0 "register_operand" "=f") (neg:XF (match_operand:XF 1 "register_operand" "0")))] ! "!TARGET_64BIT && TARGET_80387 && reload_completed" "fchs" [(set_attr "type" "fsgn") (set_attr "mode" "XF") --- 9651,9657 ---- (define_insn "*negxf2_1" [(set (match_operand:XF 0 "register_operand" "=f") (neg:XF (match_operand:XF 1 "register_operand" "0")))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387 && reload_completed" "fchs" [(set_attr "type" "fsgn") (set_attr "mode" "XF") *************** *** 9652,9658 **** [(set (match_operand:XF 0 "register_operand" "=f") (neg:XF (float_extend:XF (match_operand:DF 1 "register_operand" "0"))))] ! "!TARGET_64BIT && TARGET_80387" "fchs" [(set_attr "type" "fsgn") (set_attr "mode" "XF") --- 9661,9667 ---- [(set (match_operand:XF 0 "register_operand" "=f") (neg:XF (float_extend:XF (match_operand:DF 1 "register_operand" "0"))))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387" "fchs" [(set_attr "type" "fsgn") (set_attr "mode" "XF") *************** *** 9662,9668 **** [(set (match_operand:XF 0 "register_operand" "=f") (neg:XF (float_extend:XF (match_operand:SF 1 "register_operand" "0"))))] ! "!TARGET_64BIT && TARGET_80387" "fchs" [(set_attr "type" "fsgn") (set_attr "mode" "XF") --- 9671,9677 ---- [(set (match_operand:XF 0 "register_operand" "=f") (neg:XF (float_extend:XF (match_operand:SF 1 "register_operand" "0"))))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387" "fchs" [(set_attr "type" "fsgn") (set_attr "mode" "XF") *************** *** 9964,9970 **** [(parallel [(set (match_operand:XF 0 "nonimmediate_operand" "") (neg:XF (match_operand:XF 1 "nonimmediate_operand" ""))) (clobber (reg:CC 17))])] ! "!TARGET_64BIT && TARGET_80387" "ix86_expand_unary_operator (ABS, XFmode, operands); DONE;") (define_expand "abstf2" --- 9973,9979 ---- [(parallel [(set (match_operand:XF 0 "nonimmediate_operand" "") (neg:XF (match_operand:XF 1 "nonimmediate_operand" ""))) (clobber (reg:CC 17))])] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387" "ix86_expand_unary_operator (ABS, XFmode, operands); DONE;") (define_expand "abstf2" *************** *** 9981,9987 **** [(set (match_operand:XF 0 "nonimmediate_operand" "=f#r,rm#f") (abs:XF (match_operand:XF 1 "nonimmediate_operand" "0,0"))) (clobber (reg:CC 17))] ! "!TARGET_64BIT && TARGET_80387 && ix86_unary_operator_ok (ABS, XFmode, operands)" "#") --- 9990,9996 ---- [(set (match_operand:XF 0 "nonimmediate_operand" "=f#r,rm#f") (abs:XF (match_operand:XF 1 "nonimmediate_operand" "0,0"))) (clobber (reg:CC 17))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387 && ix86_unary_operator_ok (ABS, XFmode, operands)" "#") *************** *** 10060,10066 **** (define_insn "*absxf2_1" [(set (match_operand:XF 0 "register_operand" "=f") (abs:XF (match_operand:XF 1 "register_operand" "0")))] ! "!TARGET_64BIT && TARGET_80387 && reload_completed" "fabs" [(set_attr "type" "fsgn") (set_attr "mode" "DF")]) --- 10069,10075 ---- (define_insn "*absxf2_1" [(set (match_operand:XF 0 "register_operand" "=f") (abs:XF (match_operand:XF 1 "register_operand" "0")))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387 && reload_completed" "fabs" [(set_attr "type" "fsgn") (set_attr "mode" "DF")]) *************** *** 10069,10075 **** [(set (match_operand:XF 0 "register_operand" "=f") (abs:XF (float_extend:XF (match_operand:DF 1 "register_operand" "0"))))] ! "!TARGET_64BIT && TARGET_80387" "fabs" [(set_attr "type" "fsgn") (set_attr "mode" "XF")]) --- 10078,10084 ---- [(set (match_operand:XF 0 "register_operand" "=f") (abs:XF (float_extend:XF (match_operand:DF 1 "register_operand" "0"))))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387" "fabs" [(set_attr "type" "fsgn") (set_attr "mode" "XF")]) *************** *** 10078,10084 **** [(set (match_operand:XF 0 "register_operand" "=f") (abs:XF (float_extend:XF (match_operand:SF 1 "register_operand" "0"))))] ! "!TARGET_64BIT && TARGET_80387" "fabs" [(set_attr "type" "fsgn") (set_attr "mode" "XF")]) --- 10087,10093 ---- [(set (match_operand:XF 0 "register_operand" "=f") (abs:XF (float_extend:XF (match_operand:SF 1 "register_operand" "0"))))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387" "fabs" [(set_attr "type" "fsgn") (set_attr "mode" "XF")]) *************** *** 14045,14051 **** (match_operator:XF 3 "binary_fp_operator" [(match_operand:XF 1 "register_operand" "%0") (match_operand:XF 2 "register_operand" "f")]))] ! "!TARGET_64BIT && TARGET_80387 && GET_RTX_CLASS (GET_CODE (operands[3])) == 'c'" "* return output_387_binary_op (insn, operands);" [(set (attr "type") --- 14054,14060 ---- (match_operator:XF 3 "binary_fp_operator" [(match_operand:XF 1 "register_operand" "%0") (match_operand:XF 2 "register_operand" "f")]))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387 && GET_RTX_CLASS (GET_CODE (operands[3])) == 'c'" "* return output_387_binary_op (insn, operands);" [(set (attr "type") *************** *** 14303,14309 **** (match_operator:XF 3 "binary_fp_operator" [(match_operand:XF 1 "register_operand" "0,f") (match_operand:XF 2 "register_operand" "f,0")]))] ! "!TARGET_64BIT && TARGET_80387 && GET_RTX_CLASS (GET_CODE (operands[3])) != 'c'" "* return output_387_binary_op (insn, operands);" [(set (attr "type") --- 14312,14318 ---- (match_operator:XF 3 "binary_fp_operator" [(match_operand:XF 1 "register_operand" "0,f") (match_operand:XF 2 "register_operand" "f,0")]))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387 && GET_RTX_CLASS (GET_CODE (operands[3])) != 'c'" "* return output_387_binary_op (insn, operands);" [(set (attr "type") *************** *** 14337,14343 **** (match_operator:XF 3 "binary_fp_operator" [(float:XF (match_operand:SI 1 "nonimmediate_operand" "m,?r")) (match_operand:XF 2 "register_operand" "0,0")]))] ! "!TARGET_64BIT && TARGET_80387 && TARGET_USE_FIOP" "* return which_alternative ? \"#\" : output_387_binary_op (insn, operands);" [(set (attr "type") (cond [(match_operand:XF 3 "mult_operator" "") --- 14346,14352 ---- (match_operator:XF 3 "binary_fp_operator" [(float:XF (match_operand:SI 1 "nonimmediate_operand" "m,?r")) (match_operand:XF 2 "register_operand" "0,0")]))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387 && TARGET_USE_FIOP" "* return which_alternative ? \"#\" : output_387_binary_op (insn, operands);" [(set (attr "type") (cond [(match_operand:XF 3 "mult_operator" "") *************** *** 14373,14379 **** (match_operator:XF 3 "binary_fp_operator" [(match_operand:XF 1 "register_operand" "0,0") (float:XF (match_operand:SI 2 "nonimmediate_operand" "m,?r"))]))] ! "!TARGET_64BIT && TARGET_80387 && TARGET_USE_FIOP" "* return which_alternative ? \"#\" : output_387_binary_op (insn, operands);" [(set (attr "type") (cond [(match_operand:XF 3 "mult_operator" "") --- 14382,14388 ---- (match_operator:XF 3 "binary_fp_operator" [(match_operand:XF 1 "register_operand" "0,0") (float:XF (match_operand:SI 2 "nonimmediate_operand" "m,?r"))]))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387 && TARGET_USE_FIOP" "* return which_alternative ? \"#\" : output_387_binary_op (insn, operands);" [(set (attr "type") (cond [(match_operand:XF 3 "mult_operator" "") *************** *** 14409,14415 **** (match_operator:XF 3 "binary_fp_operator" [(float_extend:XF (match_operand:SF 1 "nonimmediate_operand" "fm,0")) (match_operand:XF 2 "register_operand" "0,f")]))] ! "!TARGET_64BIT && TARGET_80387" "* return output_387_binary_op (insn, operands);" [(set (attr "type") (cond [(match_operand:XF 3 "mult_operator" "") --- 14418,14424 ---- (match_operator:XF 3 "binary_fp_operator" [(float_extend:XF (match_operand:SF 1 "nonimmediate_operand" "fm,0")) (match_operand:XF 2 "register_operand" "0,f")]))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387" "* return output_387_binary_op (insn, operands);" [(set (attr "type") (cond [(match_operand:XF 3 "mult_operator" "") *************** *** 14442,14448 **** [(match_operand:XF 1 "register_operand" "0,f") (float_extend:XF (match_operand:SF 2 "nonimmediate_operand" "fm,0"))]))] ! "!TARGET_64BIT && TARGET_80387" "* return output_387_binary_op (insn, operands);" [(set (attr "type") (cond [(match_operand:XF 3 "mult_operator" "") --- 14451,14457 ---- [(match_operand:XF 1 "register_operand" "0,f") (float_extend:XF (match_operand:SF 2 "nonimmediate_operand" "fm,0"))]))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387" "* return output_387_binary_op (insn, operands);" [(set (attr "type") (cond [(match_operand:XF 3 "mult_operator" "") *************** *** 14475,14481 **** (match_operator:XF 3 "binary_fp_operator" [(float_extend:XF (match_operand:DF 1 "nonimmediate_operand" "fm,0")) (match_operand:XF 2 "register_operand" "0,f")]))] ! "!TARGET_64BIT && TARGET_80387" "* return output_387_binary_op (insn, operands);" [(set (attr "type") (cond [(match_operand:XF 3 "mult_operator" "") --- 14484,14490 ---- (match_operator:XF 3 "binary_fp_operator" [(float_extend:XF (match_operand:DF 1 "nonimmediate_operand" "fm,0")) (match_operand:XF 2 "register_operand" "0,f")]))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387" "* return output_387_binary_op (insn, operands);" [(set (attr "type") (cond [(match_operand:XF 3 "mult_operator" "") *************** *** 14508,14514 **** [(match_operand:XF 1 "register_operand" "0,f") (float_extend:XF (match_operand:DF 2 "nonimmediate_operand" "fm,0"))]))] ! "!TARGET_64BIT && TARGET_80387" "* return output_387_binary_op (insn, operands);" [(set (attr "type") (cond [(match_operand:XF 3 "mult_operator" "") --- 14517,14523 ---- [(match_operand:XF 1 "register_operand" "0,f") (float_extend:XF (match_operand:DF 2 "nonimmediate_operand" "fm,0"))]))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387" "* return output_387_binary_op (insn, operands);" [(set (attr "type") (cond [(match_operand:XF 3 "mult_operator" "") *************** *** 14673,14679 **** (define_insn "sqrtxf2" [(set (match_operand:XF 0 "register_operand" "=f") (sqrt:XF (match_operand:XF 1 "register_operand" "0")))] ! "!TARGET_64BIT && TARGET_80387 && !TARGET_NO_FANCY_MATH_387 && (TARGET_IEEE_FP || flag_unsafe_math_optimizations) " "fsqrt" [(set_attr "type" "fpspc") --- 14682,14688 ---- (define_insn "sqrtxf2" [(set (match_operand:XF 0 "register_operand" "=f") (sqrt:XF (match_operand:XF 1 "register_operand" "0")))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387 && !TARGET_NO_FANCY_MATH_387 && (TARGET_IEEE_FP || flag_unsafe_math_optimizations) " "fsqrt" [(set_attr "type" "fpspc") *************** *** 14694,14700 **** [(set (match_operand:XF 0 "register_operand" "=f") (sqrt:XF (float_extend:XF (match_operand:DF 1 "register_operand" "0"))))] ! "!TARGET_64BIT && TARGET_80387 && !TARGET_NO_FANCY_MATH_387" "fsqrt" [(set_attr "type" "fpspc") (set_attr "mode" "XF") --- 14703,14709 ---- [(set (match_operand:XF 0 "register_operand" "=f") (sqrt:XF (float_extend:XF (match_operand:DF 1 "register_operand" "0"))))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387 && !TARGET_NO_FANCY_MATH_387" "fsqrt" [(set_attr "type" "fpspc") (set_attr "mode" "XF") *************** *** 14714,14720 **** [(set (match_operand:XF 0 "register_operand" "=f") (sqrt:XF (float_extend:XF (match_operand:SF 1 "register_operand" "0"))))] ! "!TARGET_64BIT && TARGET_80387 && !TARGET_NO_FANCY_MATH_387" "fsqrt" [(set_attr "type" "fpspc") (set_attr "mode" "XF") --- 14723,14729 ---- [(set (match_operand:XF 0 "register_operand" "=f") (sqrt:XF (float_extend:XF (match_operand:SF 1 "register_operand" "0"))))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387 && !TARGET_NO_FANCY_MATH_387" "fsqrt" [(set_attr "type" "fpspc") (set_attr "mode" "XF") *************** *** 14762,14768 **** (define_insn "sinxf2" [(set (match_operand:XF 0 "register_operand" "=f") (unspec:XF [(match_operand:XF 1 "register_operand" "0")] UNSPEC_SIN))] ! "!TARGET_64BIT && TARGET_80387 && !TARGET_NO_FANCY_MATH_387 && flag_unsafe_math_optimizations" "fsin" [(set_attr "type" "fpspc") --- 14771,14777 ---- (define_insn "sinxf2" [(set (match_operand:XF 0 "register_operand" "=f") (unspec:XF [(match_operand:XF 1 "register_operand" "0")] UNSPEC_SIN))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_80387 && !TARGET_NO_FANCY_MATH_387 && flag_unsafe_math_optimizations" "fsin" [(set_attr "type" "fpspc") *************** *** 14809,14815 **** (define_insn "cosxf2" [(set (match_operand:XF 0 "register_operand" "=f") (unspec:XF [(match_operand:XF 1 "register_operand" "0")] UNSPEC_COS))] ! "!TARGET_64BIT && ! TARGET_NO_FANCY_MATH_387 && TARGET_80387 && flag_unsafe_math_optimizations" "fcos" [(set_attr "type" "fpspc") --- 14818,14824 ---- (define_insn "cosxf2" [(set (match_operand:XF 0 "register_operand" "=f") (unspec:XF [(match_operand:XF 1 "register_operand" "0")] UNSPEC_COS))] ! "!TARGET_128BIT_LONG_DOUBLE && ! TARGET_NO_FANCY_MATH_387 && TARGET_80387 && flag_unsafe_math_optimizations" "fcos" [(set_attr "type" "fpspc") *************** *** 16042,16048 **** (if_then_else:XF (match_operand 1 "comparison_operator" "") (match_operand:XF 2 "register_operand" "") (match_operand:XF 3 "register_operand" "")))] ! "!TARGET_64BIT && TARGET_CMOVE" "if (! ix86_expand_fp_movcc (operands)) FAIL; DONE;") (define_expand "movtfcc" --- 16051,16057 ---- (if_then_else:XF (match_operand 1 "comparison_operator" "") (match_operand:XF 2 "register_operand" "") (match_operand:XF 3 "register_operand" "")))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_CMOVE" "if (! ix86_expand_fp_movcc (operands)) FAIL; DONE;") (define_expand "movtfcc" *************** *** 16059,16065 **** [(reg 17) (const_int 0)]) (match_operand:XF 2 "register_operand" "f,0") (match_operand:XF 3 "register_operand" "0,f")))] ! "!TARGET_64BIT && TARGET_CMOVE" "@ fcmov%F1\t{%2, %0|%0, %2} fcmov%f1\t{%3, %0|%0, %3}" --- 16068,16074 ---- [(reg 17) (const_int 0)]) (match_operand:XF 2 "register_operand" "f,0") (match_operand:XF 3 "register_operand" "0,f")))] ! "!TARGET_128BIT_LONG_DOUBLE && TARGET_CMOVE" "@ fcmov%F1\t{%2, %0|%0, %2} fcmov%f1\t{%3, %0|%0, %3}" *************** *** 16227,16233 **** && operands_match_p (operands[2], operands[3])))" [(set (reg:CCFP 17) (compare:CCFP (match_dup 2) ! (match_dup 2))) (set (match_dup 0) (if_then_else:DF (ge (reg:CCFP 17) (const_int 0)) (match_dup 1) --- 16236,16242 ---- && operands_match_p (operands[2], operands[3])))" [(set (reg:CCFP 17) (compare:CCFP (match_dup 2) ! (match_dup 1))) (set (match_dup 0) (if_then_else:DF (ge (reg:CCFP 17) (const_int 0)) (match_dup 1) *************** *** 22072,22074 **** --- 22081,22209 ---- "lfence" [(set_attr "type" "sse") (set_attr "memory" "unknown")]) + + ;; SSE3 + + (define_insn "mwait" + [(unspec_volatile [(match_operand:SI 0 "register_operand" "a") + (match_operand:SI 1 "register_operand" "c")] + UNSPECV_MWAIT)] + "TARGET_SSE3" + "mwait\t%0, %1" + [(set_attr "length" "3")]) + + (define_insn "monitor" + [(unspec_volatile [(match_operand:SI 0 "register_operand" "a") + (match_operand:SI 1 "register_operand" "c") + (match_operand:SI 2 "register_operand" "d")] + UNSPECV_MONITOR)] + "TARGET_SSE3" + "monitor\t%0, %1, %2" + [(set_attr "length" "3")]) + + ;; SSE3 arithmetic + + (define_insn "addsubv4sf3" + [(set (match_operand:V4SF 0 "register_operand" "=x") + (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "0") + (match_operand:V4SF 2 "nonimmediate_operand" "xm")] + UNSPEC_ADDSUB))] + "TARGET_SSE3" + "addsubps\t{%2, %0|%0, %2}" + [(set_attr "type" "sseadd") + (set_attr "mode" "V4SF")]) + + (define_insn "addsubv2df3" + [(set (match_operand:V2DF 0 "register_operand" "=x") + (unspec:V2DF [(match_operand:V2DF 1 "register_operand" "0") + (match_operand:V2DF 2 "nonimmediate_operand" "xm")] + UNSPEC_ADDSUB))] + "TARGET_SSE3" + "addsubpd\t{%2, %0|%0, %2}" + [(set_attr "type" "sseadd") + (set_attr "mode" "V2DF")]) + + (define_insn "haddv4sf3" + [(set (match_operand:V4SF 0 "register_operand" "=x") + (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "0") + (match_operand:V4SF 2 "nonimmediate_operand" "xm")] + UNSPEC_HADD))] + "TARGET_SSE3" + "haddps\t{%2, %0|%0, %2}" + [(set_attr "type" "sseadd") + (set_attr "mode" "V4SF")]) + + (define_insn "haddv2df3" + [(set (match_operand:V2DF 0 "register_operand" "=x") + (unspec:V2DF [(match_operand:V2DF 1 "register_operand" "0") + (match_operand:V2DF 2 "nonimmediate_operand" "xm")] + UNSPEC_HADD))] + "TARGET_SSE3" + "haddpd\t{%2, %0|%0, %2}" + [(set_attr "type" "sseadd") + (set_attr "mode" "V2DF")]) + + (define_insn "hsubv4sf3" + [(set (match_operand:V4SF 0 "register_operand" "=x") + (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "0") + (match_operand:V4SF 2 "nonimmediate_operand" "xm")] + UNSPEC_HSUB))] + "TARGET_SSE3" + "hsubps\t{%2, %0|%0, %2}" + [(set_attr "type" "sseadd") + (set_attr "mode" "V4SF")]) + + (define_insn "hsubv2df3" + [(set (match_operand:V2DF 0 "register_operand" "=x") + (unspec:V2DF [(match_operand:V2DF 1 "register_operand" "0") + (match_operand:V2DF 2 "nonimmediate_operand" "xm")] + UNSPEC_HSUB))] + "TARGET_SSE3" + "hsubpd\t{%2, %0|%0, %2}" + [(set_attr "type" "sseadd") + (set_attr "mode" "V2DF")]) + + (define_insn "movshdup" + [(set (match_operand:V4SF 0 "register_operand" "=x") + (unspec:V4SF + [(match_operand:V4SF 1 "nonimmediate_operand" "xm")] UNSPEC_MOVSHDUP))] + "TARGET_SSE3" + "movshdup\t{%1, %0|%0, %1}" + [(set_attr "type" "sse") + (set_attr "mode" "V4SF")]) + + (define_insn "movsldup" + [(set (match_operand:V4SF 0 "register_operand" "=x") + (unspec:V4SF + [(match_operand:V4SF 1 "nonimmediate_operand" "xm")] UNSPEC_MOVSLDUP))] + "TARGET_SSE3" + "movsldup\t{%1, %0|%0, %1}" + [(set_attr "type" "sse") + (set_attr "mode" "V4SF")]) + + (define_insn "lddqu" + [(set (match_operand:V16QI 0 "register_operand" "=x") + (unspec:V16QI [(match_operand:V16QI 1 "memory_operand" "m")] + UNSPEC_LDQQU))] + "TARGET_SSE3" + "lddqu\t{%1, %0|%0, %1}" + [(set_attr "type" "ssecvt") + (set_attr "mode" "TI")]) + + (define_insn "loadddup" + [(set (match_operand:V2DF 0 "register_operand" "=x") + (vec_duplicate:V2DF (match_operand:DF 1 "memory_operand" "m")))] + "TARGET_SSE3" + "movddup\t{%1, %0|%0, %1}" + [(set_attr "type" "ssecvt") + (set_attr "mode" "DF")]) + + (define_insn "movddup" + [(set (match_operand:V2DF 0 "register_operand" "=x") + (vec_duplicate:V2DF + (vec_select:DF (match_operand:V2DF 1 "register_operand" "x") + (parallel [(const_int 0)]))))] + "TARGET_SSE3" + "movddup\t{%1, %0|%0, %1}" + [(set_attr "type" "ssecvt") + (set_attr "mode" "DF")]) diff -Nrc3pad gcc-3.3.2/gcc/config/i386/linux.h gcc-3.3.3/gcc/config/i386/linux.h *** gcc-3.3.2/gcc/config/i386/linux.h Fri Nov 15 14:57:12 2002 --- gcc-3.3.3/gcc/config/i386/linux.h Fri Nov 14 06:46:12 2003 *************** Boston, MA 02111-1307, USA. */ *** 220,225 **** --- 220,232 ---- : "=d"(BASE)) #endif + #define SUBTARGET_FILE_END(FILE) \ + do { \ + named_section_flags (".note.GNU-stack", \ + SECTION_DEBUG \ + | (trampolines_created ? SECTION_CODE : 0)); \ + } while (0) + /* Do code reading to identify a signal frame, and set the frame state data appropriately. See unwind-dw2.c for the structs. */ diff -Nrc3pad gcc-3.3.2/gcc/config/i386/linux64.h gcc-3.3.3/gcc/config/i386/linux64.h *** gcc-3.3.2/gcc/config/i386/linux64.h Fri Mar 14 06:31:16 2003 --- gcc-3.3.3/gcc/config/i386/linux64.h Fri Nov 14 06:46:12 2003 *************** Boston, MA 02111-1307, USA. */ *** 84,89 **** --- 84,96 ---- #define MULTILIB_DEFAULTS { "m64" } + #define SUBTARGET_FILE_END(FILE) \ + do { \ + named_section_flags (".note.GNU-stack", \ + SECTION_DEBUG \ + | (trampolines_created ? SECTION_CODE : 0)); \ + } while (0) + /* Do code reading to identify a signal frame, and set the frame state data appropriately. See unwind-dw2.c for the structs. Don't use this at all if inhibit_libc is used. */ diff -Nrc3pad gcc-3.3.2/gcc/config/i386/mmintrin.h gcc-3.3.3/gcc/config/i386/mmintrin.h *** gcc-3.3.2/gcc/config/i386/mmintrin.h Sat Feb 22 10:04:13 2003 --- gcc-3.3.3/gcc/config/i386/mmintrin.h Tue Nov 4 17:25:08 2003 *************** *** 1,4 **** ! /* Copyright (C) 2002 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,4 ---- ! /* Copyright (C) 2002, 2003 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 25,31 **** Public License. */ /* Implemented from the specification included in the Intel C++ Compiler ! User Guide and Reference, version 5.0. */ #ifndef _MMINTRIN_H_INCLUDED #define _MMINTRIN_H_INCLUDED --- 25,31 ---- Public License. */ /* Implemented from the specification included in the Intel C++ Compiler ! User Guide and Reference, version 8.0. */ #ifndef _MMINTRIN_H_INCLUDED #define _MMINTRIN_H_INCLUDED *************** _mm_empty (void) *** 48,53 **** --- 48,59 ---- __builtin_ia32_emms (); } + static __inline void + _m_empty (void) + { + _mm_empty (); + } + /* Convert I to a __m64 object. The integer is zero-extended to 64-bits. */ static __inline __m64 _mm_cvtsi32_si64 (int __i) *************** _mm_cvtsi32_si64 (int __i) *** 56,61 **** --- 62,73 ---- return (__m64) __tmp; } + static __inline __m64 + _m_from_int (int __i) + { + return _mm_cvtsi32_si64 (__i); + } + #ifdef __x86_64__ /* Convert I to a __m64 object. */ static __inline __m64 *************** _mm_cvtsi64_si32 (__m64 __i) *** 80,85 **** --- 92,103 ---- return __tmp; } + static __inline int + _m_to_int (__m64 __i) + { + return _mm_cvtsi64_si32 (__i); + } + #ifdef __x86_64__ /* Convert the lower 32 bits of the __m64 object into an integer. */ static __inline long long *************** _mm_packs_pi16 (__m64 __m1, __m64 __m2) *** 98,103 **** --- 116,127 ---- return (__m64) __builtin_ia32_packsswb ((__v4hi)__m1, (__v4hi)__m2); } + static __inline __m64 + _m_packsswb (__m64 __m1, __m64 __m2) + { + return _mm_packs_pi16 (__m1, __m2); + } + /* Pack the two 32-bit values from M1 in to the lower two 16-bit values of the result, and the two 32-bit values from M2 into the upper two 16-bit values of the result, all with signed saturation. */ *************** _mm_packs_pi32 (__m64 __m1, __m64 __m2) *** 107,112 **** --- 131,142 ---- return (__m64) __builtin_ia32_packssdw ((__v2si)__m1, (__v2si)__m2); } + static __inline __m64 + _m_packssdw (__m64 __m1, __m64 __m2) + { + return _mm_packs_pi32 (__m1, __m2); + } + /* Pack the four 16-bit values from M1 into the lower four 8-bit values of the result, and the four 16-bit values from M2 into the upper four 8-bit values of the result, all with unsigned saturation. */ *************** _mm_packs_pu16 (__m64 __m1, __m64 __m2) *** 116,121 **** --- 146,157 ---- return (__m64) __builtin_ia32_packuswb ((__v4hi)__m1, (__v4hi)__m2); } + static __inline __m64 + _m_packuswb (__m64 __m1, __m64 __m2) + { + return _mm_packs_pu16 (__m1, __m2); + } + /* Interleave the four 8-bit values from the high half of M1 with the four 8-bit values from the high half of M2. */ static __inline __m64 *************** _mm_unpackhi_pi8 (__m64 __m1, __m64 __m2 *** 124,129 **** --- 160,171 ---- return (__m64) __builtin_ia32_punpckhbw ((__v8qi)__m1, (__v8qi)__m2); } + static __inline __m64 + _m_punpckhbw (__m64 __m1, __m64 __m2) + { + return _mm_unpackhi_pi8 (__m1, __m2); + } + /* Interleave the two 16-bit values from the high half of M1 with the two 16-bit values from the high half of M2. */ static __inline __m64 *************** _mm_unpackhi_pi16 (__m64 __m1, __m64 __m *** 132,137 **** --- 174,185 ---- return (__m64) __builtin_ia32_punpckhwd ((__v4hi)__m1, (__v4hi)__m2); } + static __inline __m64 + _m_punpckhwd (__m64 __m1, __m64 __m2) + { + return _mm_unpackhi_pi16 (__m1, __m2); + } + /* Interleave the 32-bit value from the high half of M1 with the 32-bit value from the high half of M2. */ static __inline __m64 *************** _mm_unpackhi_pi32 (__m64 __m1, __m64 __m *** 140,145 **** --- 188,199 ---- return (__m64) __builtin_ia32_punpckhdq ((__v2si)__m1, (__v2si)__m2); } + static __inline __m64 + _m_punpckhdq (__m64 __m1, __m64 __m2) + { + return _mm_unpackhi_pi32 (__m1, __m2); + } + /* Interleave the four 8-bit values from the low half of M1 with the four 8-bit values from the low half of M2. */ static __inline __m64 *************** _mm_unpacklo_pi8 (__m64 __m1, __m64 __m2 *** 148,153 **** --- 202,213 ---- return (__m64) __builtin_ia32_punpcklbw ((__v8qi)__m1, (__v8qi)__m2); } + static __inline __m64 + _m_punpcklbw (__m64 __m1, __m64 __m2) + { + return _mm_unpacklo_pi8 (__m1, __m2); + } + /* Interleave the two 16-bit values from the low half of M1 with the two 16-bit values from the low half of M2. */ static __inline __m64 *************** _mm_unpacklo_pi16 (__m64 __m1, __m64 __m *** 156,161 **** --- 216,227 ---- return (__m64) __builtin_ia32_punpcklwd ((__v4hi)__m1, (__v4hi)__m2); } + static __inline __m64 + _m_punpcklwd (__m64 __m1, __m64 __m2) + { + return _mm_unpacklo_pi16 (__m1, __m2); + } + /* Interleave the 32-bit value from the low half of M1 with the 32-bit value from the low half of M2. */ static __inline __m64 *************** _mm_unpacklo_pi32 (__m64 __m1, __m64 __m *** 164,169 **** --- 230,241 ---- return (__m64) __builtin_ia32_punpckldq ((__v2si)__m1, (__v2si)__m2); } + static __inline __m64 + _m_punpckldq (__m64 __m1, __m64 __m2) + { + return _mm_unpacklo_pi32 (__m1, __m2); + } + /* Add the 8-bit values in M1 to the 8-bit values in M2. */ static __inline __m64 _mm_add_pi8 (__m64 __m1, __m64 __m2) *************** _mm_add_pi8 (__m64 __m1, __m64 __m2) *** 171,176 **** --- 243,254 ---- return (__m64) __builtin_ia32_paddb ((__v8qi)__m1, (__v8qi)__m2); } + static __inline __m64 + _m_paddb (__m64 __m1, __m64 __m2) + { + return _mm_add_pi8 (__m1, __m2); + } + /* Add the 16-bit values in M1 to the 16-bit values in M2. */ static __inline __m64 _mm_add_pi16 (__m64 __m1, __m64 __m2) *************** _mm_add_pi16 (__m64 __m1, __m64 __m2) *** 178,183 **** --- 256,267 ---- return (__m64) __builtin_ia32_paddw ((__v4hi)__m1, (__v4hi)__m2); } + static __inline __m64 + _m_paddw (__m64 __m1, __m64 __m2) + { + return _mm_add_pi16 (__m1, __m2); + } + /* Add the 32-bit values in M1 to the 32-bit values in M2. */ static __inline __m64 _mm_add_pi32 (__m64 __m1, __m64 __m2) *************** _mm_add_pi32 (__m64 __m1, __m64 __m2) *** 185,190 **** --- 269,280 ---- return (__m64) __builtin_ia32_paddd ((__v2si)__m1, (__v2si)__m2); } + static __inline __m64 + _m_paddd (__m64 __m1, __m64 __m2) + { + return _mm_add_pi32 (__m1, __m2); + } + /* Add the 64-bit values in M1 to the 64-bit values in M2. */ static __inline __m64 _mm_add_si64 (__m64 __m1, __m64 __m2) *************** _mm_adds_pi8 (__m64 __m1, __m64 __m2) *** 200,205 **** --- 290,301 ---- return (__m64) __builtin_ia32_paddsb ((__v8qi)__m1, (__v8qi)__m2); } + static __inline __m64 + _m_paddsb (__m64 __m1, __m64 __m2) + { + return _mm_adds_pi8 (__m1, __m2); + } + /* Add the 16-bit values in M1 to the 16-bit values in M2 using signed saturated arithmetic. */ static __inline __m64 *************** _mm_adds_pi16 (__m64 __m1, __m64 __m2) *** 208,213 **** --- 304,315 ---- return (__m64) __builtin_ia32_paddsw ((__v4hi)__m1, (__v4hi)__m2); } + static __inline __m64 + _m_paddsw (__m64 __m1, __m64 __m2) + { + return _mm_adds_pi16 (__m1, __m2); + } + /* Add the 8-bit values in M1 to the 8-bit values in M2 using unsigned saturated arithmetic. */ static __inline __m64 *************** _mm_adds_pu8 (__m64 __m1, __m64 __m2) *** 216,221 **** --- 318,329 ---- return (__m64) __builtin_ia32_paddusb ((__v8qi)__m1, (__v8qi)__m2); } + static __inline __m64 + _m_paddusb (__m64 __m1, __m64 __m2) + { + return _mm_adds_pu8 (__m1, __m2); + } + /* Add the 16-bit values in M1 to the 16-bit values in M2 using unsigned saturated arithmetic. */ static __inline __m64 *************** _mm_adds_pu16 (__m64 __m1, __m64 __m2) *** 224,229 **** --- 332,343 ---- return (__m64) __builtin_ia32_paddusw ((__v4hi)__m1, (__v4hi)__m2); } + static __inline __m64 + _m_paddusw (__m64 __m1, __m64 __m2) + { + return _mm_adds_pu16 (__m1, __m2); + } + /* Subtract the 8-bit values in M2 from the 8-bit values in M1. */ static __inline __m64 _mm_sub_pi8 (__m64 __m1, __m64 __m2) *************** _mm_sub_pi8 (__m64 __m1, __m64 __m2) *** 231,236 **** --- 345,356 ---- return (__m64) __builtin_ia32_psubb ((__v8qi)__m1, (__v8qi)__m2); } + static __inline __m64 + _m_psubb (__m64 __m1, __m64 __m2) + { + return _mm_sub_pi8 (__m1, __m2); + } + /* Subtract the 16-bit values in M2 from the 16-bit values in M1. */ static __inline __m64 _mm_sub_pi16 (__m64 __m1, __m64 __m2) *************** _mm_sub_pi16 (__m64 __m1, __m64 __m2) *** 238,243 **** --- 358,369 ---- return (__m64) __builtin_ia32_psubw ((__v4hi)__m1, (__v4hi)__m2); } + static __inline __m64 + _m_psubw (__m64 __m1, __m64 __m2) + { + return _mm_sub_pi16 (__m1, __m2); + } + /* Subtract the 32-bit values in M2 from the 32-bit values in M1. */ static __inline __m64 _mm_sub_pi32 (__m64 __m1, __m64 __m2) *************** _mm_sub_pi32 (__m64 __m1, __m64 __m2) *** 245,250 **** --- 371,382 ---- return (__m64) __builtin_ia32_psubd ((__v2si)__m1, (__v2si)__m2); } + static __inline __m64 + _m_psubd (__m64 __m1, __m64 __m2) + { + return _mm_sub_pi32 (__m1, __m2); + } + /* Add the 64-bit values in M1 to the 64-bit values in M2. */ static __inline __m64 _mm_sub_si64 (__m64 __m1, __m64 __m2) *************** _mm_subs_pi8 (__m64 __m1, __m64 __m2) *** 260,265 **** --- 392,403 ---- return (__m64) __builtin_ia32_psubsb ((__v8qi)__m1, (__v8qi)__m2); } + static __inline __m64 + _m_psubsb (__m64 __m1, __m64 __m2) + { + return _mm_subs_pi8 (__m1, __m2); + } + /* Subtract the 16-bit values in M2 from the 16-bit values in M1 using signed saturating arithmetic. */ static __inline __m64 *************** _mm_subs_pi16 (__m64 __m1, __m64 __m2) *** 268,273 **** --- 406,417 ---- return (__m64) __builtin_ia32_psubsw ((__v4hi)__m1, (__v4hi)__m2); } + static __inline __m64 + _m_psubsw (__m64 __m1, __m64 __m2) + { + return _mm_subs_pi16 (__m1, __m2); + } + /* Subtract the 8-bit values in M2 from the 8-bit values in M1 using unsigned saturating arithmetic. */ static __inline __m64 *************** _mm_subs_pu8 (__m64 __m1, __m64 __m2) *** 276,281 **** --- 420,431 ---- return (__m64) __builtin_ia32_psubusb ((__v8qi)__m1, (__v8qi)__m2); } + static __inline __m64 + _m_psubusb (__m64 __m1, __m64 __m2) + { + return _mm_subs_pu8 (__m1, __m2); + } + /* Subtract the 16-bit values in M2 from the 16-bit values in M1 using unsigned saturating arithmetic. */ static __inline __m64 *************** _mm_subs_pu16 (__m64 __m1, __m64 __m2) *** 284,289 **** --- 434,445 ---- return (__m64) __builtin_ia32_psubusw ((__v4hi)__m1, (__v4hi)__m2); } + static __inline __m64 + _m_psubusw (__m64 __m1, __m64 __m2) + { + return _mm_subs_pu16 (__m1, __m2); + } + /* Multiply four 16-bit values in M1 by four 16-bit values in M2 producing four 32-bit intermediate results, which are then summed by pairs to produce two 32-bit results. */ *************** _mm_madd_pi16 (__m64 __m1, __m64 __m2) *** 293,298 **** --- 449,460 ---- return (__m64) __builtin_ia32_pmaddwd ((__v4hi)__m1, (__v4hi)__m2); } + static __inline __m64 + _m_pmaddwd (__m64 __m1, __m64 __m2) + { + return _mm_madd_pi16 (__m1, __m2); + } + /* Multiply four signed 16-bit values in M1 by four signed 16-bit values in M2 and produce the high 16 bits of the 32-bit results. */ static __inline __m64 *************** _mm_mulhi_pi16 (__m64 __m1, __m64 __m2) *** 301,306 **** --- 463,474 ---- return (__m64) __builtin_ia32_pmulhw ((__v4hi)__m1, (__v4hi)__m2); } + static __inline __m64 + _m_pmulhw (__m64 __m1, __m64 __m2) + { + return _mm_mulhi_pi16 (__m1, __m2); + } + /* Multiply four 16-bit values in M1 by four 16-bit values in M2 and produce the low 16 bits of the results. */ static __inline __m64 *************** _mm_mullo_pi16 (__m64 __m1, __m64 __m2) *** 309,314 **** --- 477,488 ---- return (__m64) __builtin_ia32_pmullw ((__v4hi)__m1, (__v4hi)__m2); } + static __inline __m64 + _m_pmullw (__m64 __m1, __m64 __m2) + { + return _mm_mullo_pi16 (__m1, __m2); + } + /* Shift four 16-bit values in M left by COUNT. */ static __inline __m64 _mm_sll_pi16 (__m64 __m, __m64 __count) *************** _mm_sll_pi16 (__m64 __m, __m64 __count) *** 317,327 **** --- 491,513 ---- } static __inline __m64 + _m_psllw (__m64 __m, __m64 __count) + { + return _mm_sll_pi16 (__m, __count); + } + + static __inline __m64 _mm_slli_pi16 (__m64 __m, int __count) { return (__m64) __builtin_ia32_psllw ((__v4hi)__m, __count); } + static __inline __m64 + _m_psllwi (__m64 __m, int __count) + { + return _mm_slli_pi16 (__m, __count); + } + /* Shift two 32-bit values in M left by COUNT. */ static __inline __m64 _mm_sll_pi32 (__m64 __m, __m64 __count) *************** _mm_sll_pi32 (__m64 __m, __m64 __count) *** 330,340 **** --- 516,538 ---- } static __inline __m64 + _m_pslld (__m64 __m, __m64 __count) + { + return _mm_sll_pi32 (__m, __count); + } + + static __inline __m64 _mm_slli_pi32 (__m64 __m, int __count) { return (__m64) __builtin_ia32_pslld ((__v2si)__m, __count); } + static __inline __m64 + _m_pslldi (__m64 __m, int __count) + { + return _mm_slli_pi32 (__m, __count); + } + /* Shift the 64-bit value in M left by COUNT. */ static __inline __m64 _mm_sll_si64 (__m64 __m, __m64 __count) *************** _mm_sll_si64 (__m64 __m, __m64 __count) *** 343,353 **** --- 541,563 ---- } static __inline __m64 + _m_psllq (__m64 __m, __m64 __count) + { + return _mm_sll_si64 (__m, __count); + } + + static __inline __m64 _mm_slli_si64 (__m64 __m, int __count) { return (__m64) __builtin_ia32_psllq ((long long)__m, (long long)__count); } + static __inline __m64 + _m_psllqi (__m64 __m, int __count) + { + return _mm_slli_si64 (__m, __count); + } + /* Shift four 16-bit values in M right by COUNT; shift in the sign bit. */ static __inline __m64 _mm_sra_pi16 (__m64 __m, __m64 __count) *************** _mm_sra_pi16 (__m64 __m, __m64 __count) *** 356,366 **** --- 566,588 ---- } static __inline __m64 + _m_psraw (__m64 __m, __m64 __count) + { + return _mm_sra_pi16 (__m, __count); + } + + static __inline __m64 _mm_srai_pi16 (__m64 __m, int __count) { return (__m64) __builtin_ia32_psraw ((__v4hi)__m, __count); } + static __inline __m64 + _m_psrawi (__m64 __m, int __count) + { + return _mm_srai_pi16 (__m, __count); + } + /* Shift two 32-bit values in M right by COUNT; shift in the sign bit. */ static __inline __m64 _mm_sra_pi32 (__m64 __m, __m64 __count) *************** _mm_sra_pi32 (__m64 __m, __m64 __count) *** 369,379 **** --- 591,613 ---- } static __inline __m64 + _m_psrad (__m64 __m, __m64 __count) + { + return _mm_sra_pi32 (__m, __count); + } + + static __inline __m64 _mm_srai_pi32 (__m64 __m, int __count) { return (__m64) __builtin_ia32_psrad ((__v2si)__m, __count); } + static __inline __m64 + _m_psradi (__m64 __m, int __count) + { + return _mm_srai_pi32 (__m, __count); + } + /* Shift four 16-bit values in M right by COUNT; shift in zeros. */ static __inline __m64 _mm_srl_pi16 (__m64 __m, __m64 __count) *************** _mm_srl_pi16 (__m64 __m, __m64 __count) *** 382,392 **** --- 616,638 ---- } static __inline __m64 + _m_psrlw (__m64 __m, __m64 __count) + { + return _mm_srl_pi16 (__m, __count); + } + + static __inline __m64 _mm_srli_pi16 (__m64 __m, int __count) { return (__m64) __builtin_ia32_psrlw ((__v4hi)__m, __count); } + static __inline __m64 + _m_psrlwi (__m64 __m, int __count) + { + return _mm_srli_pi16 (__m, __count); + } + /* Shift two 32-bit values in M right by COUNT; shift in zeros. */ static __inline __m64 _mm_srl_pi32 (__m64 __m, __m64 __count) *************** _mm_srl_pi32 (__m64 __m, __m64 __count) *** 395,405 **** --- 641,663 ---- } static __inline __m64 + _m_psrld (__m64 __m, __m64 __count) + { + return _mm_srl_pi32 (__m, __count); + } + + static __inline __m64 _mm_srli_pi32 (__m64 __m, int __count) { return (__m64) __builtin_ia32_psrld ((__v2si)__m, __count); } + static __inline __m64 + _m_psrldi (__m64 __m, int __count) + { + return _mm_srli_pi32 (__m, __count); + } + /* Shift the 64-bit value in M left by COUNT; shift in zeros. */ static __inline __m64 _mm_srl_si64 (__m64 __m, __m64 __count) *************** _mm_srl_si64 (__m64 __m, __m64 __count) *** 408,418 **** --- 666,688 ---- } static __inline __m64 + _m_psrlq (__m64 __m, __m64 __count) + { + return _mm_srl_si64 (__m, __count); + } + + static __inline __m64 _mm_srli_si64 (__m64 __m, int __count) { return (__m64) __builtin_ia32_psrlq ((long long)__m, (long long)__count); } + static __inline __m64 + _m_psrlqi (__m64 __m, int __count) + { + return _mm_srli_si64 (__m, __count); + } + /* Bit-wise AND the 64-bit values in M1 and M2. */ static __inline __m64 _mm_and_si64 (__m64 __m1, __m64 __m2) *************** _mm_and_si64 (__m64 __m1, __m64 __m2) *** 420,425 **** --- 690,701 ---- return (__m64) __builtin_ia32_pand ((long long)__m1, (long long)__m2); } + static __inline __m64 + _m_pand (__m64 __m1, __m64 __m2) + { + return _mm_and_si64 (__m1, __m2); + } + /* Bit-wise complement the 64-bit value in M1 and bit-wise AND it with the 64-bit value in M2. */ static __inline __m64 *************** _mm_andnot_si64 (__m64 __m1, __m64 __m2) *** 428,433 **** --- 704,715 ---- return (__m64) __builtin_ia32_pandn ((long long)__m1, (long long)__m2); } + static __inline __m64 + _m_pandn (__m64 __m1, __m64 __m2) + { + return _mm_andnot_si64 (__m1, __m2); + } + /* Bit-wise inclusive OR the 64-bit values in M1 and M2. */ static __inline __m64 _mm_or_si64 (__m64 __m1, __m64 __m2) *************** _mm_or_si64 (__m64 __m1, __m64 __m2) *** 435,440 **** --- 717,728 ---- return (__m64)__builtin_ia32_por ((long long)__m1, (long long)__m2); } + static __inline __m64 + _m_por (__m64 __m1, __m64 __m2) + { + return _mm_or_si64 (__m1, __m2); + } + /* Bit-wise exclusive OR the 64-bit values in M1 and M2. */ static __inline __m64 _mm_xor_si64 (__m64 __m1, __m64 __m2) *************** _mm_xor_si64 (__m64 __m1, __m64 __m2) *** 442,447 **** --- 730,741 ---- return (__m64)__builtin_ia32_pxor ((long long)__m1, (long long)__m2); } + static __inline __m64 + _m_pxor (__m64 __m1, __m64 __m2) + { + return _mm_xor_si64 (__m1, __m2); + } + /* Compare eight 8-bit values. The result of the comparison is 0xFF if the test is true and zero if false. */ static __inline __m64 *************** _mm_cmpeq_pi8 (__m64 __m1, __m64 __m2) *** 451,461 **** --- 745,767 ---- } static __inline __m64 + _m_pcmpeqb (__m64 __m1, __m64 __m2) + { + return _mm_cmpeq_pi8 (__m1, __m2); + } + + static __inline __m64 _mm_cmpgt_pi8 (__m64 __m1, __m64 __m2) { return (__m64) __builtin_ia32_pcmpgtb ((__v8qi)__m1, (__v8qi)__m2); } + static __inline __m64 + _m_pcmpgtb (__m64 __m1, __m64 __m2) + { + return _mm_cmpgt_pi8 (__m1, __m2); + } + /* Compare four 16-bit values. The result of the comparison is 0xFFFF if the test is true and zero if false. */ static __inline __m64 *************** _mm_cmpeq_pi16 (__m64 __m1, __m64 __m2) *** 465,475 **** --- 771,793 ---- } static __inline __m64 + _m_pcmpeqw (__m64 __m1, __m64 __m2) + { + return _mm_cmpeq_pi16 (__m1, __m2); + } + + static __inline __m64 _mm_cmpgt_pi16 (__m64 __m1, __m64 __m2) { return (__m64) __builtin_ia32_pcmpgtw ((__v4hi)__m1, (__v4hi)__m2); } + static __inline __m64 + _m_pcmpgtw (__m64 __m1, __m64 __m2) + { + return _mm_cmpgt_pi16 (__m1, __m2); + } + /* Compare two 32-bit values. The result of the comparison is 0xFFFFFFFF if the test is true and zero if false. */ static __inline __m64 *************** _mm_cmpeq_pi32 (__m64 __m1, __m64 __m2) *** 479,489 **** --- 797,819 ---- } static __inline __m64 + _m_pcmpeqd (__m64 __m1, __m64 __m2) + { + return _mm_cmpeq_pi32 (__m1, __m2); + } + + static __inline __m64 _mm_cmpgt_pi32 (__m64 __m1, __m64 __m2) { return (__m64) __builtin_ia32_pcmpgtd ((__v2si)__m1, (__v2si)__m2); } + static __inline __m64 + _m_pcmpgtd (__m64 __m1, __m64 __m2) + { + return _mm_cmpgt_pi32 (__m1, __m2); + } + /* Creates a 64-bit zero. */ static __inline __m64 _mm_setzero_si64 (void) *************** _mm_set1_pi16 (short __w) *** 574,580 **** return _mm_set1_pi32 (__i); } ! /* Creates a vector of four 16-bit values, all elements containing B. */ static __inline __m64 _mm_set1_pi8 (char __b) { --- 904,910 ---- return _mm_set1_pi32 (__i); } ! /* Creates a vector of eight 8-bit values, all elements containing B. */ static __inline __m64 _mm_set1_pi8 (char __b) { diff -Nrc3pad gcc-3.3.2/gcc/config/i386/pmmintrin.h gcc-3.3.3/gcc/config/i386/pmmintrin.h *** gcc-3.3.2/gcc/config/i386/pmmintrin.h Thu Jan 1 00:00:00 1970 --- gcc-3.3.3/gcc/config/i386/pmmintrin.h Fri Feb 6 19:43:32 2004 *************** *** 0 **** --- 1,132 ---- + /* Copyright (C) 2003 Free Software Foundation, Inc. + + This file is part of GNU CC. + + GNU CC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GNU CC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNU CC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + /* As a special exception, if you include this header file into source + files compiled by GCC, this header file does not by itself cause + the resulting executable to be covered by the GNU General Public + License. This exception does not however invalidate any other + reasons why the executable file might be covered by the GNU General + Public License. */ + + /* Implemented from the specification included in the Intel C++ Compiler + User Guide and Reference, version 8.0. */ + + #ifndef _PMMINTRIN_H_INCLUDED + #define _PMMINTRIN_H_INCLUDED + + #ifdef __SSE3__ + #include + #include + + /* Additional bits in the MXCSR. */ + #define _MM_DENORMALS_ZERO_MASK 0x0040 + #define _MM_DENORMALS_ZERO_ON 0x0040 + #define _MM_DENORMALS_ZERO_OFF 0x0000 + + #define _MM_SET_DENORMALS_ZERO_MODE(mode) \ + _mm_setcsr ((_mm_getcsr () & ~_MM_DENORMALS_ZERO_MASK) | (mode)) + #define _MM_GET_DENORMALS_ZERO_MODE() \ + (_mm_getcsr() & _MM_DENORMALS_ZERO_MASK) + + static __inline __m128 + _mm_addsub_ps (__m128 __X, __m128 __Y) + { + return (__m128) __builtin_ia32_addsubps ((__v4sf)__X, (__v4sf)__Y); + } + + static __inline __m128 + _mm_hadd_ps (__m128 __X, __m128 __Y) + { + return (__m128) __builtin_ia32_haddps ((__v4sf)__X, (__v4sf)__Y); + } + + static __inline __m128 + _mm_hsub_ps (__m128 __X, __m128 __Y) + { + return (__m128) __builtin_ia32_hsubps ((__v4sf)__X, (__v4sf)__Y); + } + + static __inline __m128 + _mm_movehdup_ps (__m128 __X) + { + return (__m128) __builtin_ia32_movshdup ((__v4sf)__X); + } + + static __inline __m128 + _mm_moveldup_ps (__m128 __X) + { + return (__m128) __builtin_ia32_movsldup ((__v4sf)__X); + } + + static __inline __m128d + _mm_addsub_pd (__m128d __X, __m128d __Y) + { + return (__m128d) __builtin_ia32_addsubpd ((__v2df)__X, (__v2df)__Y); + } + + static __inline __m128d + _mm_hadd_pd (__m128d __X, __m128d __Y) + { + return (__m128d) __builtin_ia32_haddpd ((__v2df)__X, (__v2df)__Y); + } + + static __inline __m128d + _mm_hsub_pd (__m128d __X, __m128d __Y) + { + return (__m128d) __builtin_ia32_hsubpd ((__v2df)__X, (__v2df)__Y); + } + + static __inline __m128d + _mm_loaddup_pd (double const *__P) + { + return (__m128d) __builtin_ia32_loadddup (__P); + } + + static __inline __m128d + _mm_movedup_pd (__m128d __X) + { + return (__m128d) __builtin_ia32_movddup ((__v2df)__X); + } + + static __inline __m128i + _mm_lddqu_si128 (__m128i const *__P) + { + return (__m128i) __builtin_ia32_lddqu ((char const *)__P); + } + + #if 0 + static __inline void + _mm_monitor (void const * __P, unsigned int __E, unsigned int __H) + { + __builtin_ia32_monitor (__P, __E, __H); + } + + static __inline void + _mm_mwait (unsigned int __E, unsigned int __H) + { + __builtin_ia32_mwait (__E, __H); + } + #else + #define _mm_monitor(P, E, H) __builtin_ia32_monitor ((P), (E), (H)) + #define _mm_mwait(E, H) __builtin_ia32_mwait ((E), (H)) + #endif + + #endif /* __SSE3__ */ + + #endif /* _PMMINTRIN_H_INCLUDED */ diff -Nrc3pad gcc-3.3.2/gcc/config/i386/xmmintrin.h gcc-3.3.3/gcc/config/i386/xmmintrin.h *** gcc-3.3.2/gcc/config/i386/xmmintrin.h Sat Feb 22 10:04:13 2003 --- gcc-3.3.3/gcc/config/i386/xmmintrin.h Tue Nov 4 17:25:10 2003 *************** *** 1,4 **** ! /* Copyright (C) 2002 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,4 ---- ! /* Copyright (C) 2002, 2003 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 25,31 **** Public License. */ /* Implemented from the specification included in the Intel C++ Compiler ! User Guide and Reference, version 5.0. */ #ifndef _XMMINTRIN_H_INCLUDED #define _XMMINTRIN_H_INCLUDED --- 25,31 ---- Public License. */ /* Implemented from the specification included in the Intel C++ Compiler ! User Guide and Reference, version 8.0. */ #ifndef _XMMINTRIN_H_INCLUDED #define _XMMINTRIN_H_INCLUDED *************** _mm_cvtss_si32 (__m128 __A) *** 475,480 **** --- 475,486 ---- return __builtin_ia32_cvtss2si ((__v4sf) __A); } + static __inline int + _mm_cvt_ss2si (__m128 __A) + { + return _mm_cvtss_si32 (__A); + } + #ifdef __x86_64__ /* Convert the lower SPFP value to a 32-bit integer according to the current rounding mode. */ *************** _mm_cvtps_pi32 (__m128 __A) *** 493,498 **** --- 499,510 ---- return (__m64) __builtin_ia32_cvtps2pi ((__v4sf) __A); } + static __inline __m64 + _mm_cvt_ps2pi (__m128 __A) + { + return _mm_cvtps_pi32 (__A); + } + /* Truncate the lower SPFP value to a 32-bit integer. */ static __inline int _mm_cvttss_si32 (__m128 __A) *************** _mm_cvttss_si32 (__m128 __A) *** 500,505 **** --- 512,523 ---- return __builtin_ia32_cvttss2si ((__v4sf) __A); } + static __inline int + _mm_cvtt_ss2si (__m128 __A) + { + return _mm_cvttss_si32 (__A); + } + #ifdef __x86_64__ /* Truncate the lower SPFP value to a 32-bit integer. */ static __inline long long *************** _mm_cvttps_pi32 (__m128 __A) *** 517,522 **** --- 535,546 ---- return (__m64) __builtin_ia32_cvttps2pi ((__v4sf) __A); } + static __inline __m64 + _mm_cvtt_ps2pi (__m128 __A) + { + return _mm_cvttps_pi32 (__A); + } + /* Convert B to a SPFP value and insert it as element zero in A. */ static __inline __m128 _mm_cvtsi32_ss (__m128 __A, int __B) *************** _mm_cvtsi32_ss (__m128 __A, int __B) *** 524,529 **** --- 548,559 ---- return (__m128) __builtin_ia32_cvtsi2ss ((__v4sf) __A, __B); } + static __inline __m128 + _mm_cvt_si2ss (__m128 __A, int __B) + { + return _mm_cvtsi32_ss (__A, __B); + } + #ifdef __x86_64__ /* Convert B to a SPFP value and insert it as element zero in A. */ static __inline __m128 *************** _mm_cvtpi32_ps (__m128 __A, __m64 __B) *** 541,546 **** --- 571,582 ---- return (__m128) __builtin_ia32_cvtpi2ps ((__v4sf) __A, (__v2si)__B); } + static __inline __m128 + _mm_cvt_pi2ps (__m128 __A, __m64 __B) + { + return _mm_cvtpi32_ps (__A, __B); + } + /* Convert the four signed 16-bit values in A to SPFP form. */ static __inline __m128 _mm_cvtpi16_ps (__m64 __A) *************** _mm_extract_pi16 (__m64 __A, int __N) *** 942,950 **** --- 978,993 ---- { return __builtin_ia32_pextrw ((__v4hi)__A, __N); } + + static __inline int + _m_pextrw (__m64 __A, int __N) + { + return _mm_extract_pi16 (__A, __N); + } #else #define _mm_extract_pi16(A, N) \ __builtin_ia32_pextrw ((__v4hi)(A), (N)) + #define _m_pextrw(A, N) _mm_extract_pi16((A), (N)) #endif /* Inserts word D into one of four words of A. The selector N must be *************** _mm_insert_pi16 (__m64 __A, int __D, int *** 955,963 **** --- 998,1013 ---- { return (__m64)__builtin_ia32_pinsrw ((__v4hi)__A, __D, __N); } + + static __inline __m64 + _m_pinsrw (__m64 __A, int __D, int __N) + { + return _mm_insert_pi16 (__A, __D, __N); + } #else #define _mm_insert_pi16(A, D, N) \ ((__m64) __builtin_ia32_pinsrw ((__v4hi)(A), (D), (N))) + #define _m_pinsrw(A, D, N) _mm_insert_pi16((A), (D), (N)) #endif /* Compute the element-wise maximum of signed 16-bit values. */ *************** _mm_max_pi16 (__m64 __A, __m64 __B) *** 967,972 **** --- 1017,1028 ---- return (__m64) __builtin_ia32_pmaxsw ((__v4hi)__A, (__v4hi)__B); } + static __inline __m64 + _m_pmaxsw (__m64 __A, __m64 __B) + { + return _mm_max_pi16 (__A, __B); + } + /* Compute the element-wise maximum of unsigned 8-bit values. */ static __inline __m64 _mm_max_pu8 (__m64 __A, __m64 __B) *************** _mm_max_pu8 (__m64 __A, __m64 __B) *** 974,979 **** --- 1030,1041 ---- return (__m64) __builtin_ia32_pmaxub ((__v8qi)__A, (__v8qi)__B); } + static __inline __m64 + _m_pmaxub (__m64 __A, __m64 __B) + { + return _mm_max_pu8 (__A, __B); + } + /* Compute the element-wise minimum of signed 16-bit values. */ static __inline __m64 _mm_min_pi16 (__m64 __A, __m64 __B) *************** _mm_min_pi16 (__m64 __A, __m64 __B) *** 981,986 **** --- 1043,1054 ---- return (__m64) __builtin_ia32_pminsw ((__v4hi)__A, (__v4hi)__B); } + static __inline __m64 + _m_pminsw (__m64 __A, __m64 __B) + { + return _mm_min_pi16 (__A, __B); + } + /* Compute the element-wise minimum of unsigned 8-bit values. */ static __inline __m64 _mm_min_pu8 (__m64 __A, __m64 __B) *************** _mm_min_pu8 (__m64 __A, __m64 __B) *** 988,993 **** --- 1056,1067 ---- return (__m64) __builtin_ia32_pminub ((__v8qi)__A, (__v8qi)__B); } + static __inline __m64 + _m_pminub (__m64 __A, __m64 __B) + { + return _mm_min_pu8 (__A, __B); + } + /* Create an 8-bit mask of the signs of 8-bit values. */ static __inline int _mm_movemask_pi8 (__m64 __A) *************** _mm_movemask_pi8 (__m64 __A) *** 995,1000 **** --- 1069,1080 ---- return __builtin_ia32_pmovmskb ((__v8qi)__A); } + static __inline int + _m_pmovmskb (__m64 __A) + { + return _mm_movemask_pi8 (__A); + } + /* Multiply four unsigned 16-bit values in A by four unsigned 16-bit values in B and produce the high 16 bits of the 32-bit results. */ static __inline __m64 *************** _mm_mulhi_pu16 (__m64 __A, __m64 __B) *** 1003,1008 **** --- 1083,1094 ---- return (__m64) __builtin_ia32_pmulhuw ((__v4hi)__A, (__v4hi)__B); } + static __inline __m64 + _m_pmulhuw (__m64 __A, __m64 __B) + { + return _mm_mulhi_pu16 (__A, __B); + } + /* Return a combination of the four 16-bit values in A. The selector must be an immediate. */ #if 0 *************** _mm_shuffle_pi16 (__m64 __A, int __N) *** 1011,1019 **** --- 1097,1112 ---- { return (__m64) __builtin_ia32_pshufw ((__v4hi)__A, __N); } + + static __inline __m64 + _m_pshufw (__m64 __A, int __N) + { + return _mm_shuffle_pi16 (__A, __N); + } #else #define _mm_shuffle_pi16(A, N) \ ((__m64) __builtin_ia32_pshufw ((__v4hi)(A), (N))) + #define _m_pshufw(A, N) _mm_shuffle_pi16 ((A), (N)) #endif /* Conditionally store byte elements of A into P. The high bit of each *************** _mm_maskmove_si64 (__m64 __A, __m64 __N, *** 1025,1030 **** --- 1118,1129 ---- __builtin_ia32_maskmovq ((__v8qi)__A, (__v8qi)__N, __P); } + static __inline void + _m_maskmovq (__m64 __A, __m64 __N, char *__P) + { + _mm_maskmove_si64 (__A, __N, __P); + } + /* Compute the rounded averages of the unsigned 8-bit values in A and B. */ static __inline __m64 _mm_avg_pu8 (__m64 __A, __m64 __B) *************** _mm_avg_pu8 (__m64 __A, __m64 __B) *** 1032,1037 **** --- 1131,1142 ---- return (__m64) __builtin_ia32_pavgb ((__v8qi)__A, (__v8qi)__B); } + static __inline __m64 + _m_pavgb (__m64 __A, __m64 __B) + { + return _mm_avg_pu8 (__A, __B); + } + /* Compute the rounded averages of the unsigned 16-bit values in A and B. */ static __inline __m64 _mm_avg_pu16 (__m64 __A, __m64 __B) *************** _mm_avg_pu16 (__m64 __A, __m64 __B) *** 1039,1044 **** --- 1144,1155 ---- return (__m64) __builtin_ia32_pavgw ((__v4hi)__A, (__v4hi)__B); } + static __inline __m64 + _m_pavgw (__m64 __A, __m64 __B) + { + return _mm_avg_pu16 (__A, __B); + } + /* Compute the sum of the absolute differences of the unsigned 8-bit values in A and B. Return the value in the lower 16-bit word; the upper words are cleared. */ *************** _mm_sad_pu8 (__m64 __A, __m64 __B) *** 1048,1053 **** --- 1159,1170 ---- return (__m64) __builtin_ia32_psadbw ((__v8qi)__A, (__v8qi)__B); } + static __inline __m64 + _m_psadbw (__m64 __A, __m64 __B) + { + return _mm_sad_pu8 (__A, __B); + } + /* Loads one cache line from address P to a location "closer" to the processor. The selector I specifies the type of prefetch operation. */ #if 0 *************** do { \ *** 1106,2574 **** (row3) = __builtin_ia32_shufps (__t2, __t3, 0xDD); \ } while (0) ! #ifdef __SSE2__ ! /* SSE2 */ ! typedef int __v2df __attribute__ ((mode (V2DF))); ! typedef int __v2di __attribute__ ((mode (V2DI))); ! typedef int __v4si __attribute__ ((mode (V4SI))); ! typedef int __v8hi __attribute__ ((mode (V8HI))); ! typedef int __v16qi __attribute__ ((mode (V16QI))); ! ! /* Create a selector for use with the SHUFPD instruction. */ ! #define _MM_SHUFFLE2(fp1,fp0) \ ! (((fp1) << 1) | (fp0)) ! ! #define __m128i __v2di ! #define __m128d __v2df ! ! /* Create a vector with element 0 as *P and the rest zero. */ ! static __inline __m128d ! _mm_load_sd (double const *__P) ! { ! return (__m128d) __builtin_ia32_loadsd (__P); ! } ! ! /* Create a vector with all two elements equal to *P. */ ! static __inline __m128d ! _mm_load1_pd (double const *__P) ! { ! __v2df __tmp = __builtin_ia32_loadsd (__P); ! return (__m128d) __builtin_ia32_shufpd (__tmp, __tmp, _MM_SHUFFLE2 (0,0)); ! } ! ! static __inline __m128d ! _mm_load_pd1 (double const *__P) ! { ! return _mm_load1_pd (__P); ! } ! ! /* Load two DPFP values from P. The addresd must be 16-byte aligned. */ ! static __inline __m128d ! _mm_load_pd (double const *__P) ! { ! return (__m128d) __builtin_ia32_loadapd (__P); ! } ! ! /* Load two DPFP values from P. The addresd need not be 16-byte aligned. */ ! static __inline __m128d ! _mm_loadu_pd (double const *__P) ! { ! return (__m128d) __builtin_ia32_loadupd (__P); ! } ! ! /* Load two DPFP values in reverse order. The addresd must be aligned. */ ! static __inline __m128d ! _mm_loadr_pd (double const *__P) ! { ! __v2df __tmp = __builtin_ia32_loadapd (__P); ! return (__m128d) __builtin_ia32_shufpd (__tmp, __tmp, _MM_SHUFFLE2 (0,1)); ! } ! ! /* Create a vector with element 0 as F and the rest zero. */ ! static __inline __m128d ! _mm_set_sd (double __F) ! { ! return (__m128d) __builtin_ia32_loadsd (&__F); ! } ! ! /* Create a vector with all two elements equal to F. */ ! static __inline __m128d ! _mm_set1_pd (double __F) ! { ! __v2df __tmp = __builtin_ia32_loadsd (&__F); ! return (__m128d) __builtin_ia32_shufpd (__tmp, __tmp, _MM_SHUFFLE2 (0,0)); ! } ! ! static __inline __m128d ! _mm_set_pd1 (double __F) ! { ! return _mm_set1_pd (__F); ! } ! ! /* Create the vector [Z Y]. */ ! static __inline __m128d ! _mm_set_pd (double __Z, double __Y) ! { ! union { ! double __a[2]; ! __m128d __v; ! } __u; ! ! __u.__a[0] = __Y; ! __u.__a[1] = __Z; ! ! return __u.__v; ! } ! ! /* Create the vector [Y Z]. */ ! static __inline __m128d ! _mm_setr_pd (double __Z, double __Y) ! { ! return _mm_set_pd (__Y, __Z); ! } ! ! /* Create a vector of zeros. */ ! static __inline __m128d ! _mm_setzero_pd (void) ! { ! return (__m128d) __builtin_ia32_setzeropd (); ! } ! ! /* Stores the lower DPFP value. */ ! static __inline void ! _mm_store_sd (double *__P, __m128d __A) ! { ! __builtin_ia32_storesd (__P, (__v2df)__A); ! } ! ! /* Store the lower DPFP value acrosd two words. */ ! static __inline void ! _mm_store1_pd (double *__P, __m128d __A) ! { ! __v2df __va = (__v2df)__A; ! __v2df __tmp = __builtin_ia32_shufpd (__va, __va, _MM_SHUFFLE2 (0,0)); ! __builtin_ia32_storeapd (__P, __tmp); ! } ! ! static __inline void ! _mm_store_pd1 (double *__P, __m128d __A) ! { ! _mm_store1_pd (__P, __A); ! } ! ! /* Store two DPFP values. The addresd must be 16-byte aligned. */ ! static __inline void ! _mm_store_pd (double *__P, __m128d __A) ! { ! __builtin_ia32_storeapd (__P, (__v2df)__A); ! } ! ! /* Store two DPFP values. The addresd need not be 16-byte aligned. */ ! static __inline void ! _mm_storeu_pd (double *__P, __m128d __A) ! { ! __builtin_ia32_storeupd (__P, (__v2df)__A); ! } ! ! /* Store two DPFP values in reverse order. The addresd must be aligned. */ ! static __inline void ! _mm_storer_pd (double *__P, __m128d __A) ! { ! __v2df __va = (__v2df)__A; ! __v2df __tmp = __builtin_ia32_shufpd (__va, __va, _MM_SHUFFLE2 (0,1)); ! __builtin_ia32_storeapd (__P, __tmp); ! } ! ! /* Sets the low DPFP value of A from the low value of B. */ ! static __inline __m128d ! _mm_move_sd (__m128d __A, __m128d __B) ! { ! return (__m128d) __builtin_ia32_movsd ((__v2df)__A, (__v2df)__B); ! } ! ! ! static __inline __m128d ! _mm_add_pd (__m128d __A, __m128d __B) ! { ! return (__m128d)__builtin_ia32_addpd ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline __m128d ! _mm_add_sd (__m128d __A, __m128d __B) ! { ! return (__m128d)__builtin_ia32_addsd ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline __m128d ! _mm_sub_pd (__m128d __A, __m128d __B) ! { ! return (__m128d)__builtin_ia32_subpd ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline __m128d ! _mm_sub_sd (__m128d __A, __m128d __B) ! { ! return (__m128d)__builtin_ia32_subsd ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline __m128d ! _mm_mul_pd (__m128d __A, __m128d __B) ! { ! return (__m128d)__builtin_ia32_mulpd ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline __m128d ! _mm_mul_sd (__m128d __A, __m128d __B) ! { ! return (__m128d)__builtin_ia32_mulsd ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline __m128d ! _mm_div_pd (__m128d __A, __m128d __B) ! { ! return (__m128d)__builtin_ia32_divpd ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline __m128d ! _mm_div_sd (__m128d __A, __m128d __B) ! { ! return (__m128d)__builtin_ia32_divsd ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline __m128d ! _mm_sqrt_pd (__m128d __A) ! { ! return (__m128d)__builtin_ia32_sqrtpd ((__v2df)__A); ! } ! ! /* Return pair {sqrt (A[0), B[1]}. */ ! static __inline __m128d ! _mm_sqrt_sd (__m128d __A, __m128d __B) ! { ! __v2df __tmp = __builtin_ia32_movsd ((__v2df)__A, (__v2df)__B); ! return (__m128d)__builtin_ia32_sqrtsd ((__v2df)__tmp); ! } ! ! static __inline __m128d ! _mm_min_pd (__m128d __A, __m128d __B) ! { ! return (__m128d)__builtin_ia32_minpd ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline __m128d ! _mm_min_sd (__m128d __A, __m128d __B) ! { ! return (__m128d)__builtin_ia32_minsd ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline __m128d ! _mm_max_pd (__m128d __A, __m128d __B) ! { ! return (__m128d)__builtin_ia32_maxpd ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline __m128d ! _mm_max_sd (__m128d __A, __m128d __B) ! { ! return (__m128d)__builtin_ia32_maxsd ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline __m128d ! _mm_and_pd (__m128d __A, __m128d __B) ! { ! return (__m128d)__builtin_ia32_andpd ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline __m128d ! _mm_andnot_pd (__m128d __A, __m128d __B) ! { ! return (__m128d)__builtin_ia32_andnpd ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline __m128d ! _mm_or_pd (__m128d __A, __m128d __B) ! { ! return (__m128d)__builtin_ia32_orpd ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline __m128d ! _mm_xor_pd (__m128d __A, __m128d __B) ! { ! return (__m128d)__builtin_ia32_xorpd ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline __m128d ! _mm_cmpeq_pd (__m128d __A, __m128d __B) ! { ! return (__m128d)__builtin_ia32_cmpeqpd ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline __m128d ! _mm_cmplt_pd (__m128d __A, __m128d __B) ! { ! return (__m128d)__builtin_ia32_cmpltpd ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline __m128d ! _mm_cmple_pd (__m128d __A, __m128d __B) ! { ! return (__m128d)__builtin_ia32_cmplepd ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline __m128d ! _mm_cmpgt_pd (__m128d __A, __m128d __B) ! { ! return (__m128d)__builtin_ia32_cmpgtpd ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline __m128d ! _mm_cmpge_pd (__m128d __A, __m128d __B) ! { ! return (__m128d)__builtin_ia32_cmpgepd ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline __m128d ! _mm_cmpneq_pd (__m128d __A, __m128d __B) ! { ! return (__m128d)__builtin_ia32_cmpneqpd ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline __m128d ! _mm_cmpnlt_pd (__m128d __A, __m128d __B) ! { ! return (__m128d)__builtin_ia32_cmpnltpd ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline __m128d ! _mm_cmpnle_pd (__m128d __A, __m128d __B) ! { ! return (__m128d)__builtin_ia32_cmpnlepd ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline __m128d ! _mm_cmpngt_pd (__m128d __A, __m128d __B) ! { ! return (__m128d)__builtin_ia32_cmpngtpd ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline __m128d ! _mm_cmpnge_pd (__m128d __A, __m128d __B) ! { ! return (__m128d)__builtin_ia32_cmpngepd ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline __m128d ! _mm_cmpord_pd (__m128d __A, __m128d __B) ! { ! return (__m128d)__builtin_ia32_cmpordpd ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline __m128d ! _mm_cmpunord_pd (__m128d __A, __m128d __B) ! { ! return (__m128d)__builtin_ia32_cmpunordpd ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline __m128d ! _mm_cmpeq_sd (__m128d __A, __m128d __B) ! { ! return (__m128d)__builtin_ia32_cmpeqsd ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline __m128d ! _mm_cmplt_sd (__m128d __A, __m128d __B) ! { ! return (__m128d)__builtin_ia32_cmpltsd ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline __m128d ! _mm_cmple_sd (__m128d __A, __m128d __B) ! { ! return (__m128d)__builtin_ia32_cmplesd ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline __m128d ! _mm_cmpgt_sd (__m128d __A, __m128d __B) ! { ! return (__m128d) __builtin_ia32_movsd ((__v2df) __A, ! (__v2df) ! __builtin_ia32_cmpltsd ((__v2df) __B, ! (__v2df) ! __A)); ! } ! ! static __inline __m128d ! _mm_cmpge_sd (__m128d __A, __m128d __B) ! { ! return (__m128d) __builtin_ia32_movsd ((__v2df) __A, ! (__v2df) ! __builtin_ia32_cmplesd ((__v2df) __B, ! (__v2df) ! __A)); ! } ! ! static __inline __m128d ! _mm_cmpneq_sd (__m128d __A, __m128d __B) ! { ! return (__m128d)__builtin_ia32_cmpneqsd ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline __m128d ! _mm_cmpnlt_sd (__m128d __A, __m128d __B) ! { ! return (__m128d)__builtin_ia32_cmpnltsd ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline __m128d ! _mm_cmpnle_sd (__m128d __A, __m128d __B) ! { ! return (__m128d)__builtin_ia32_cmpnlesd ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline __m128d ! _mm_cmpngt_sd (__m128d __A, __m128d __B) ! { ! return (__m128d) __builtin_ia32_movsd ((__v2df) __A, ! (__v2df) ! __builtin_ia32_cmpnltsd ((__v2df) __B, ! (__v2df) ! __A)); ! } ! ! static __inline __m128d ! _mm_cmpnge_sd (__m128d __A, __m128d __B) ! { ! return (__m128d) __builtin_ia32_movsd ((__v2df) __A, ! (__v2df) ! __builtin_ia32_cmpnlesd ((__v2df) __B, ! (__v2df) ! __A)); ! } ! ! static __inline __m128d ! _mm_cmpord_sd (__m128d __A, __m128d __B) ! { ! return (__m128d)__builtin_ia32_cmpordsd ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline __m128d ! _mm_cmpunord_sd (__m128d __A, __m128d __B) ! { ! return (__m128d)__builtin_ia32_cmpunordsd ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline int ! _mm_comieq_sd (__m128d __A, __m128d __B) ! { ! return __builtin_ia32_comisdeq ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline int ! _mm_comilt_sd (__m128d __A, __m128d __B) ! { ! return __builtin_ia32_comisdlt ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline int ! _mm_comile_sd (__m128d __A, __m128d __B) ! { ! return __builtin_ia32_comisdle ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline int ! _mm_comigt_sd (__m128d __A, __m128d __B) ! { ! return __builtin_ia32_comisdgt ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline int ! _mm_comige_sd (__m128d __A, __m128d __B) ! { ! return __builtin_ia32_comisdge ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline int ! _mm_comineq_sd (__m128d __A, __m128d __B) ! { ! return __builtin_ia32_comisdneq ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline int ! _mm_ucomieq_sd (__m128d __A, __m128d __B) ! { ! return __builtin_ia32_ucomisdeq ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline int ! _mm_ucomilt_sd (__m128d __A, __m128d __B) ! { ! return __builtin_ia32_ucomisdlt ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline int ! _mm_ucomile_sd (__m128d __A, __m128d __B) ! { ! return __builtin_ia32_ucomisdle ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline int ! _mm_ucomigt_sd (__m128d __A, __m128d __B) ! { ! return __builtin_ia32_ucomisdgt ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline int ! _mm_ucomige_sd (__m128d __A, __m128d __B) ! { ! return __builtin_ia32_ucomisdge ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline int ! _mm_ucomineq_sd (__m128d __A, __m128d __B) ! { ! return __builtin_ia32_ucomisdneq ((__v2df)__A, (__v2df)__B); ! } ! ! /* Create a vector with element 0 as *P and the rest zero. */ ! ! static __inline __m128i ! _mm_load_si128 (__m128i const *__P) ! { ! return (__m128i) __builtin_ia32_loaddqa ((char const *)__P); ! } ! ! static __inline __m128i ! _mm_loadu_si128 (__m128i const *__P) ! { ! return (__m128i) __builtin_ia32_loaddqu ((char const *)__P); ! } ! ! static __inline __m128i ! _mm_loadl_epi64 (__m128i const *__P) ! { ! return (__m128i) __builtin_ia32_movq2dq (*(unsigned long long *)__P); ! } ! ! static __inline void ! _mm_store_si128 (__m128i *__P, __m128i __B) ! { ! __builtin_ia32_storedqa ((char *)__P, (__v16qi)__B); ! } ! ! static __inline void ! _mm_storeu_si128 (__m128i *__P, __m128i __B) ! { ! __builtin_ia32_storedqu ((char *)__P, (__v16qi)__B); ! } ! ! static __inline void ! _mm_storel_epi64 (__m128i *__P, __m128i __B) ! { ! *(long long *)__P = __builtin_ia32_movdq2q ((__v2di)__B); ! } ! ! static __inline __m64 ! _mm_movepi64_pi64 (__m128i __B) ! { ! return (__m64) __builtin_ia32_movdq2q ((__v2di)__B); ! } ! ! static __inline __m128i ! _mm_move_epi64 (__m128i __A) ! { ! return (__m128i) __builtin_ia32_movq ((__v2di)__A); ! } ! ! /* Create a vector of zeros. */ ! static __inline __m128i ! _mm_setzero_si128 (void) ! { ! return (__m128i) __builtin_ia32_setzero128 (); ! } ! ! static __inline __m128i ! _mm_set_epi64 (__m64 __A, __m64 __B) ! { ! __v2di __tmp = (__v2di)__builtin_ia32_movq2dq ((unsigned long long)__A); ! __v2di __tmp2 = (__v2di)__builtin_ia32_movq2dq ((unsigned long long)__B); ! return (__m128i)__builtin_ia32_punpcklqdq128 (__tmp2, __tmp); ! } ! ! /* Create the vector [Z Y X W]. */ ! static __inline __m128i ! _mm_set_epi32 (int __Z, int __Y, int __X, int __W) ! { ! union { ! int __a[4]; ! __m128i __v; ! } __u; ! ! __u.__a[0] = __W; ! __u.__a[1] = __X; ! __u.__a[2] = __Y; ! __u.__a[3] = __Z; ! ! return __u.__v; ! } ! ! #ifdef __x86_64__ ! /* Create the vector [Z Y]. */ ! static __inline __m128i ! _mm_set_epi64x (long long __Z, long long __Y) ! { ! union { ! long __a[2]; ! __m128i __v; ! } __u; ! ! __u.__a[0] = __Y; ! __u.__a[1] = __Z; ! ! return __u.__v; ! } ! #endif ! ! /* Create the vector [S T U V Z Y X W]. */ ! static __inline __m128i ! _mm_set_epi16 (short __Z, short __Y, short __X, short __W, ! short __V, short __U, short __T, short __S) ! { ! union { ! short __a[8]; ! __m128i __v; ! } __u; ! ! __u.__a[0] = __S; ! __u.__a[1] = __T; ! __u.__a[2] = __U; ! __u.__a[3] = __V; ! __u.__a[4] = __W; ! __u.__a[5] = __X; ! __u.__a[6] = __Y; ! __u.__a[7] = __Z; ! ! return __u.__v; ! } ! ! /* Create the vector [S T U V Z Y X W]. */ ! static __inline __m128i ! _mm_set_epi8 (char __Z, char __Y, char __X, char __W, ! char __V, char __U, char __T, char __S, ! char __Z1, char __Y1, char __X1, char __W1, ! char __V1, char __U1, char __T1, char __S1) ! { ! union { ! char __a[16]; ! __m128i __v; ! } __u; ! ! __u.__a[0] = __S1; ! __u.__a[1] = __T1; ! __u.__a[2] = __U1; ! __u.__a[3] = __V1; ! __u.__a[4] = __W1; ! __u.__a[5] = __X1; ! __u.__a[6] = __Y1; ! __u.__a[7] = __Z1; ! __u.__a[8] = __S; ! __u.__a[9] = __T; ! __u.__a[10] = __U; ! __u.__a[11] = __V; ! __u.__a[12] = __W; ! __u.__a[13] = __X; ! __u.__a[14] = __Y; ! __u.__a[15] = __Z; ! ! return __u.__v; ! } ! ! static __inline __m128i ! _mm_set1_epi64 (__m64 __A) ! { ! __v2di __tmp = (__v2di)__builtin_ia32_movq2dq ((unsigned long long)__A); ! return (__m128i)__builtin_ia32_punpcklqdq128 (__tmp, __tmp); ! } ! ! static __inline __m128i ! _mm_set1_epi32 (int __A) ! { ! __v4si __tmp = (__v4si)__builtin_ia32_loadd (&__A); ! return (__m128i) __builtin_ia32_pshufd ((__v4si)__tmp, _MM_SHUFFLE (0,0,0,0)); ! } ! ! #ifdef __x86_64__ ! static __inline __m128i ! _mm_set1_epi64x (long long __A) ! { ! __v2di __tmp = (__v2di)__builtin_ia32_movq2dq ((unsigned long long)__A); ! return (__m128i) __builtin_ia32_shufpd ((__v2df)__tmp, (__v2df)__tmp, _MM_SHUFFLE2 (0,0)); ! } ! #endif ! ! static __inline __m128i ! _mm_set1_epi16 (short __A) ! { ! int __Acopy = (unsigned short)__A; ! __v4si __tmp = (__v4si)__builtin_ia32_loadd (&__Acopy); ! __tmp = (__v4si)__builtin_ia32_punpcklwd128 ((__v8hi)__tmp, (__v8hi)__tmp); ! return (__m128i) __builtin_ia32_pshufd ((__v4si)__tmp, _MM_SHUFFLE (0,0,0,0)); ! } ! ! static __inline __m128i ! _mm_set1_epi8 (char __A) ! { ! int __Acopy = (unsigned char)__A; ! __v4si __tmp = (__v4si)__builtin_ia32_loadd (&__Acopy); ! __tmp = (__v4si)__builtin_ia32_punpcklbw128 ((__v16qi)__tmp, (__v16qi)__tmp); ! __tmp = (__v4si)__builtin_ia32_punpcklbw128 ((__v16qi)__tmp, (__v16qi)__tmp); ! return (__m128i) __builtin_ia32_pshufd ((__v4si)__tmp, _MM_SHUFFLE (0,0,0,0)); ! } ! ! static __inline __m128i ! _mm_setr_epi64 (__m64 __A, __m64 __B) ! { ! __v2di __tmp = (__v2di)__builtin_ia32_movq2dq ((unsigned long long)__A); ! __v2di __tmp2 = (__v2di)__builtin_ia32_movq2dq ((unsigned long long)__B); ! return (__m128i)__builtin_ia32_punpcklqdq128 (__tmp, __tmp2); ! } ! ! /* Create the vector [Z Y X W]. */ ! static __inline __m128i ! _mm_setr_epi32 (int __W, int __X, int __Y, int __Z) ! { ! union { ! int __a[4]; ! __m128i __v; ! } __u; ! ! __u.__a[0] = __W; ! __u.__a[1] = __X; ! __u.__a[2] = __Y; ! __u.__a[3] = __Z; ! ! return __u.__v; ! } ! /* Create the vector [S T U V Z Y X W]. */ ! static __inline __m128i ! _mm_setr_epi16 (short __S, short __T, short __U, short __V, ! short __W, short __X, short __Y, short __Z) ! { ! union { ! short __a[8]; ! __m128i __v; ! } __u; ! ! __u.__a[0] = __S; ! __u.__a[1] = __T; ! __u.__a[2] = __U; ! __u.__a[3] = __V; ! __u.__a[4] = __W; ! __u.__a[5] = __X; ! __u.__a[6] = __Y; ! __u.__a[7] = __Z; ! ! return __u.__v; ! } ! ! /* Create the vector [S T U V Z Y X W]. */ ! static __inline __m128i ! _mm_setr_epi8 (char __S1, char __T1, char __U1, char __V1, ! char __W1, char __X1, char __Y1, char __Z1, ! char __S, char __T, char __U, char __V, ! char __W, char __X, char __Y, char __Z) ! { ! union { ! char __a[16]; ! __m128i __v; ! } __u; ! ! __u.__a[0] = __S1; ! __u.__a[1] = __T1; ! __u.__a[2] = __U1; ! __u.__a[3] = __V1; ! __u.__a[4] = __W1; ! __u.__a[5] = __X1; ! __u.__a[6] = __Y1; ! __u.__a[7] = __Z1; ! __u.__a[8] = __S; ! __u.__a[9] = __T; ! __u.__a[10] = __U; ! __u.__a[11] = __V; ! __u.__a[12] = __W; ! __u.__a[13] = __X; ! __u.__a[14] = __Y; ! __u.__a[15] = __Z; ! ! return __u.__v; ! } ! ! static __inline __m128d ! _mm_cvtepi32_pd (__m128i __A) ! { ! return (__m128d)__builtin_ia32_cvtdq2pd ((__v4si) __A); ! } ! ! static __inline __m128 ! _mm_cvtepi32_ps (__m128i __A) ! { ! return (__m128)__builtin_ia32_cvtdq2ps ((__v4si) __A); ! } ! ! static __inline __m128i ! _mm_cvtpd_epi32 (__m128d __A) ! { ! return (__m128i)__builtin_ia32_cvtpd2dq ((__v2df) __A); ! } ! ! static __inline __m64 ! _mm_cvtpd_pi32 (__m128d __A) ! { ! return (__m64)__builtin_ia32_cvtpd2pi ((__v2df) __A); ! } ! ! static __inline __m128 ! _mm_cvtpd_ps (__m128d __A) ! { ! return (__m128)__builtin_ia32_cvtpd2ps ((__v2df) __A); ! } ! ! static __inline __m128i ! _mm_cvttpd_epi32 (__m128d __A) ! { ! return (__m128i)__builtin_ia32_cvttpd2dq ((__v2df) __A); ! } ! ! static __inline __m64 ! _mm_cvttpd_pi32 (__m128d __A) ! { ! return (__m64)__builtin_ia32_cvttpd2pi ((__v2df) __A); ! } ! ! static __inline __m128d ! _mm_cvtpi32_pd (__m64 __A) ! { ! return (__m128d)__builtin_ia32_cvtpi2pd ((__v2si) __A); ! } ! ! static __inline __m128i ! _mm_cvtps_epi32 (__m128 __A) ! { ! return (__m128i)__builtin_ia32_cvtps2dq ((__v4sf) __A); ! } ! ! static __inline __m128i ! _mm_cvttps_epi32 (__m128 __A) ! { ! return (__m128i)__builtin_ia32_cvttps2dq ((__v4sf) __A); ! } ! ! static __inline __m128d ! _mm_cvtps_pd (__m128 __A) ! { ! return (__m128d)__builtin_ia32_cvtps2pd ((__v4sf) __A); ! } ! ! static __inline int ! _mm_cvtsd_si32 (__m128d __A) ! { ! return __builtin_ia32_cvtsd2si ((__v2df) __A); ! } ! ! #ifdef __x86_64__ ! static __inline long long ! _mm_cvtsd_si64x (__m128d __A) ! { ! return __builtin_ia32_cvtsd2si64 ((__v2df) __A); ! } ! #endif ! ! static __inline int ! _mm_cvttsd_si32 (__m128d __A) ! { ! return __builtin_ia32_cvttsd2si ((__v2df) __A); ! } ! ! #ifdef __x86_64__ ! static __inline long long ! _mm_cvttsd_si64x (__m128d __A) ! { ! return __builtin_ia32_cvttsd2si64 ((__v2df) __A); ! } ! #endif ! ! static __inline __m128 ! _mm_cvtsd_ss (__m128 __A, __m128d __B) ! { ! return (__m128)__builtin_ia32_cvtsd2ss ((__v4sf) __A, (__v2df) __B); ! } ! ! static __inline __m128d ! _mm_cvtsi32_sd (__m128d __A, int __B) ! { ! return (__m128d)__builtin_ia32_cvtsi2sd ((__v2df) __A, __B); ! } ! ! #ifdef __x86_64__ ! static __inline __m128d ! _mm_cvtsi64x_sd (__m128d __A, long long __B) ! { ! return (__m128d)__builtin_ia32_cvtsi642sd ((__v2df) __A, __B); ! } ! #endif ! ! static __inline __m128d ! _mm_cvtss_sd (__m128d __A, __m128 __B) ! { ! return (__m128d)__builtin_ia32_cvtss2sd ((__v2df) __A, (__v4sf)__B); ! } ! ! #define _mm_shuffle_pd(__A, __B, __C) ((__m128d)__builtin_ia32_shufpd ((__v2df)__A, (__v2df)__B, (__C))) ! ! static __inline __m128d ! _mm_unpackhi_pd (__m128d __A, __m128d __B) ! { ! return (__m128d)__builtin_ia32_unpckhpd ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline __m128d ! _mm_unpacklo_pd (__m128d __A, __m128d __B) ! { ! return (__m128d)__builtin_ia32_unpcklpd ((__v2df)__A, (__v2df)__B); ! } ! ! static __inline __m128d ! _mm_loadh_pd (__m128d __A, double const *__B) ! { ! return (__m128d)__builtin_ia32_loadhpd ((__v2df)__A, (__v2si *)__B); ! } ! ! static __inline void ! _mm_storeh_pd (double *__A, __m128d __B) ! { ! __builtin_ia32_storehpd ((__v2si *)__A, (__v2df)__B); ! } ! ! static __inline __m128d ! _mm_loadl_pd (__m128d __A, double const *__B) ! { ! return (__m128d)__builtin_ia32_loadlpd ((__v2df)__A, (__v2si *)__B); ! } ! ! static __inline void ! _mm_storel_pd (double *__A, __m128d __B) ! { ! __builtin_ia32_storelpd ((__v2si *)__A, (__v2df)__B); ! } ! ! static __inline int ! _mm_movemask_pd (__m128d __A) ! { ! return __builtin_ia32_movmskpd ((__v2df)__A); ! } ! ! static __inline __m128i ! _mm_packs_epi16 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_packsswb128 ((__v8hi)__A, (__v8hi)__B); ! } ! ! static __inline __m128i ! _mm_packs_epi32 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_packssdw128 ((__v4si)__A, (__v4si)__B); ! } ! ! static __inline __m128i ! _mm_packus_epi16 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_packuswb128 ((__v8hi)__A, (__v8hi)__B); ! } ! ! static __inline __m128i ! _mm_unpackhi_epi8 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_punpckhbw128 ((__v16qi)__A, (__v16qi)__B); ! } ! ! static __inline __m128i ! _mm_unpackhi_epi16 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_punpckhwd128 ((__v8hi)__A, (__v8hi)__B); ! } ! ! static __inline __m128i ! _mm_unpackhi_epi32 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_punpckhdq128 ((__v4si)__A, (__v4si)__B); ! } ! ! static __inline __m128i ! _mm_unpackhi_epi64 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_punpckhqdq128 ((__v2di)__A, (__v2di)__B); ! } ! ! static __inline __m128i ! _mm_unpacklo_epi8 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_punpcklbw128 ((__v16qi)__A, (__v16qi)__B); ! } ! ! static __inline __m128i ! _mm_unpacklo_epi16 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_punpcklwd128 ((__v8hi)__A, (__v8hi)__B); ! } ! ! static __inline __m128i ! _mm_unpacklo_epi32 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_punpckldq128 ((__v4si)__A, (__v4si)__B); ! } ! ! static __inline __m128i ! _mm_unpacklo_epi64 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_punpcklqdq128 ((__v2di)__A, (__v2di)__B); ! } ! ! static __inline __m128i ! _mm_add_epi8 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_paddb128 ((__v16qi)__A, (__v16qi)__B); ! } ! ! static __inline __m128i ! _mm_add_epi16 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_paddw128 ((__v8hi)__A, (__v8hi)__B); ! } ! ! static __inline __m128i ! _mm_add_epi32 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_paddd128 ((__v4si)__A, (__v4si)__B); ! } ! ! static __inline __m128i ! _mm_add_epi64 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_paddq128 ((__v2di)__A, (__v2di)__B); ! } ! ! static __inline __m128i ! _mm_adds_epi8 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_paddsb128 ((__v16qi)__A, (__v16qi)__B); ! } ! ! static __inline __m128i ! _mm_adds_epi16 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_paddsw128 ((__v8hi)__A, (__v8hi)__B); ! } ! ! static __inline __m128i ! _mm_adds_epu8 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_paddusb128 ((__v16qi)__A, (__v16qi)__B); ! } ! ! static __inline __m128i ! _mm_adds_epu16 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_paddusw128 ((__v8hi)__A, (__v8hi)__B); ! } ! ! static __inline __m128i ! _mm_sub_epi8 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_psubb128 ((__v16qi)__A, (__v16qi)__B); ! } ! ! static __inline __m128i ! _mm_sub_epi16 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_psubw128 ((__v8hi)__A, (__v8hi)__B); ! } ! ! static __inline __m128i ! _mm_sub_epi32 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_psubd128 ((__v4si)__A, (__v4si)__B); ! } ! ! static __inline __m128i ! _mm_sub_epi64 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_psubq128 ((__v2di)__A, (__v2di)__B); ! } ! ! static __inline __m128i ! _mm_subs_epi8 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_psubsb128 ((__v16qi)__A, (__v16qi)__B); ! } ! ! static __inline __m128i ! _mm_subs_epi16 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_psubsw128 ((__v8hi)__A, (__v8hi)__B); ! } ! ! static __inline __m128i ! _mm_subs_epu8 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_psubusb128 ((__v16qi)__A, (__v16qi)__B); ! } ! ! static __inline __m128i ! _mm_subs_epu16 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_psubusw128 ((__v8hi)__A, (__v8hi)__B); ! } ! ! static __inline __m128i ! _mm_madd_epi16 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_pmaddwd128 ((__v8hi)__A, (__v8hi)__B); ! } ! ! static __inline __m128i ! _mm_mulhi_epi16 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_pmulhw128 ((__v8hi)__A, (__v8hi)__B); ! } ! ! static __inline __m128i ! _mm_mullo_epi16 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_pmullw128 ((__v8hi)__A, (__v8hi)__B); ! } ! ! static __inline __m64 ! _mm_mul_su32 (__m64 __A, __m64 __B) ! { ! return (__m64)__builtin_ia32_pmuludq ((__v2si)__A, (__v2si)__B); ! } ! ! static __inline __m128i ! _mm_mul_epu32 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_pmuludq128 ((__v4si)__A, (__v4si)__B); ! } ! ! static __inline __m128i ! _mm_sll_epi16 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_psllw128 ((__v8hi)__A, (__v2di)__B); ! } ! ! static __inline __m128i ! _mm_sll_epi32 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_pslld128 ((__v4si)__A, (__v2di)__B); ! } ! ! static __inline __m128i ! _mm_sll_epi64 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_psllq128 ((__v2di)__A, (__v2di)__B); ! } ! ! static __inline __m128i ! _mm_sra_epi16 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_psraw128 ((__v8hi)__A, (__v2di)__B); ! } ! ! static __inline __m128i ! _mm_sra_epi32 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_psrad128 ((__v4si)__A, (__v2di)__B); ! } ! ! static __inline __m128i ! _mm_srl_epi16 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_psrlw128 ((__v8hi)__A, (__v2di)__B); ! } ! ! static __inline __m128i ! _mm_srl_epi32 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_psrld128 ((__v4si)__A, (__v2di)__B); ! } ! ! static __inline __m128i ! _mm_srl_epi64 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_psrlq128 ((__v2di)__A, (__v2di)__B); ! } ! ! static __inline __m128i ! _mm_slli_epi16 (__m128i __A, int __B) ! { ! return (__m128i)__builtin_ia32_psllwi128 ((__v8hi)__A, __B); ! } ! ! static __inline __m128i ! _mm_slli_epi32 (__m128i __A, int __B) ! { ! return (__m128i)__builtin_ia32_pslldi128 ((__v4si)__A, __B); ! } ! ! static __inline __m128i ! _mm_slli_epi64 (__m128i __A, int __B) ! { ! return (__m128i)__builtin_ia32_psllqi128 ((__v2di)__A, __B); ! } ! ! static __inline __m128i ! _mm_srai_epi16 (__m128i __A, int __B) ! { ! return (__m128i)__builtin_ia32_psrawi128 ((__v8hi)__A, __B); ! } ! ! static __inline __m128i ! _mm_srai_epi32 (__m128i __A, int __B) ! { ! return (__m128i)__builtin_ia32_psradi128 ((__v4si)__A, __B); ! } ! ! #if 0 ! static __m128i __attribute__((__always_inline__)) ! _mm_srli_si128 (__m128i __A, const int __B) ! { ! return ((__m128i)__builtin_ia32_psrldqi128 (__A, __B)) ! } ! ! static __m128i __attribute__((__always_inline__)) ! _mm_srli_si128 (__m128i __A, const int __B) ! { ! return ((__m128i)__builtin_ia32_pslldqi128 (__A, __B)) ! } ! #endif ! #define _mm_srli_si128(__A, __B) ((__m128i)__builtin_ia32_psrldqi128 (__A, __B)) ! #define _mm_slli_si128(__A, __B) ((__m128i)__builtin_ia32_pslldqi128 (__A, __B)) ! ! static __inline __m128i ! _mm_srli_epi16 (__m128i __A, int __B) ! { ! return (__m128i)__builtin_ia32_psrlwi128 ((__v8hi)__A, __B); ! } ! ! static __inline __m128i ! _mm_srli_epi32 (__m128i __A, int __B) ! { ! return (__m128i)__builtin_ia32_psrldi128 ((__v4si)__A, __B); ! } ! ! static __inline __m128i ! _mm_srli_epi64 (__m128i __A, int __B) ! { ! return (__m128i)__builtin_ia32_psrlqi128 ((__v2di)__A, __B); ! } ! ! static __inline __m128i ! _mm_and_si128 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_pand128 ((__v2di)__A, (__v2di)__B); ! } ! ! static __inline __m128i ! _mm_andnot_si128 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_pandn128 ((__v2di)__A, (__v2di)__B); ! } ! ! static __inline __m128i ! _mm_or_si128 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_por128 ((__v2di)__A, (__v2di)__B); ! } ! ! static __inline __m128i ! _mm_xor_si128 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_pxor128 ((__v2di)__A, (__v2di)__B); ! } ! ! static __inline __m128i ! _mm_cmpeq_epi8 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_pcmpeqb128 ((__v16qi)__A, (__v16qi)__B); ! } ! ! static __inline __m128i ! _mm_cmpeq_epi16 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_pcmpeqw128 ((__v8hi)__A, (__v8hi)__B); ! } ! ! static __inline __m128i ! _mm_cmpeq_epi32 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_pcmpeqd128 ((__v4si)__A, (__v4si)__B); ! } ! ! static __inline __m128i ! _mm_cmplt_epi8 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_pcmpgtb128 ((__v16qi)__B, (__v16qi)__A); ! } ! ! static __inline __m128i ! _mm_cmplt_epi16 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_pcmpgtw128 ((__v8hi)__B, (__v8hi)__A); ! } ! ! static __inline __m128i ! _mm_cmplt_epi32 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_pcmpgtd128 ((__v4si)__B, (__v4si)__A); ! } ! ! static __inline __m128i ! _mm_cmpgt_epi8 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_pcmpgtb128 ((__v16qi)__A, (__v16qi)__B); ! } ! ! static __inline __m128i ! _mm_cmpgt_epi16 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_pcmpgtw128 ((__v8hi)__A, (__v8hi)__B); ! } ! ! static __inline __m128i ! _mm_cmpgt_epi32 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_pcmpgtd128 ((__v4si)__A, (__v4si)__B); ! } ! ! #define _mm_extract_epi16(__A, __B) __builtin_ia32_pextrw128 ((__v8hi)__A, __B) ! ! #define _mm_insert_epi16(__A, __B, __C) ((__m128i)__builtin_ia32_pinsrw128 ((__v8hi)__A, __B, __C)) ! ! static __inline __m128i ! _mm_max_epi16 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_pmaxsw128 ((__v8hi)__A, (__v8hi)__B); ! } ! ! static __inline __m128i ! _mm_max_epu8 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_pmaxub128 ((__v16qi)__A, (__v16qi)__B); ! } ! ! static __inline __m128i ! _mm_min_epi16 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_pminsw128 ((__v8hi)__A, (__v8hi)__B); ! } ! ! static __inline __m128i ! _mm_min_epu8 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_pminub128 ((__v16qi)__A, (__v16qi)__B); ! } ! ! static __inline int ! _mm_movemask_epi8 (__m128i __A) ! { ! return __builtin_ia32_pmovmskb128 ((__v16qi)__A); ! } ! ! static __inline __m128i ! _mm_mulhi_epu16 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_pmulhuw128 ((__v8hi)__A, (__v8hi)__B); ! } ! ! #define _mm_shufflehi_epi16(__A, __B) ((__m128i)__builtin_ia32_pshufhw ((__v8hi)__A, __B)) ! #define _mm_shufflelo_epi16(__A, __B) ((__m128i)__builtin_ia32_pshuflw ((__v8hi)__A, __B)) ! #define _mm_shuffle_epi32(__A, __B) ((__m128i)__builtin_ia32_pshufd ((__v4si)__A, __B)) ! ! static __inline void ! _mm_maskmoveu_si128 (__m128i __A, __m128i __B, char *__C) ! { ! __builtin_ia32_maskmovdqu ((__v16qi)__A, (__v16qi)__B, __C); ! } ! ! static __inline __m128i ! _mm_avg_epu8 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_pavgb128 ((__v16qi)__A, (__v16qi)__B); ! } ! ! static __inline __m128i ! _mm_avg_epu16 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_pavgw128 ((__v8hi)__A, (__v8hi)__B); ! } ! ! static __inline __m128i ! _mm_sad_epu8 (__m128i __A, __m128i __B) ! { ! return (__m128i)__builtin_ia32_psadbw128 ((__v16qi)__A, (__v16qi)__B); ! } ! ! static __inline void ! _mm_stream_si32 (int *__A, int __B) ! { ! __builtin_ia32_movnti (__A, __B); ! } ! ! static __inline void ! _mm_stream_si128 (__m128i *__A, __m128i __B) ! { ! __builtin_ia32_movntdq ((__v2di *)__A, (__v2di)__B); ! } ! ! static __inline void ! _mm_stream_pd (double *__A, __m128d __B) ! { ! __builtin_ia32_movntpd (__A, (__v2df)__B); ! } ! ! static __inline __m128i ! _mm_movpi64_epi64 (__m64 __A) ! { ! return (__m128i)__builtin_ia32_movq2dq ((unsigned long long)__A); ! } ! ! static __inline void ! _mm_clflush (void const *__A) ! { ! return __builtin_ia32_clflush (__A); ! } ! ! static __inline void ! _mm_lfence (void) ! { ! __builtin_ia32_lfence (); ! } ! ! static __inline void ! _mm_mfence (void) ! { ! __builtin_ia32_mfence (); ! } ! ! static __inline __m128i ! _mm_cvtsi32_si128 (int __A) ! { ! return (__m128i) __builtin_ia32_loadd (&__A); ! } ! ! #ifdef __x86_64__ ! static __inline __m128i ! _mm_cvtsi64x_si128 (long long __A) ! { ! return (__m128i) __builtin_ia32_movq2dq (__A); ! } ! #endif ! ! static __inline int ! _mm_cvtsi128_si32 (__m128i __A) ! { ! int __tmp; ! __builtin_ia32_stored (&__tmp, (__v4si)__A); ! return __tmp; ! } ! ! #ifdef __x86_64__ ! static __inline long long ! _mm_cvtsi128_si64x (__m128i __A) ! { ! return __builtin_ia32_movdq2q ((__v2di)__A); ! } ! #endif ! ! #endif /* __SSE2__ */ #endif /* __SSE__ */ #endif /* _XMMINTRIN_H_INCLUDED */ --- 1223,1230 ---- (row3) = __builtin_ia32_shufps (__t2, __t3, 0xDD); \ } while (0) ! /* For backward source compatibility. */ ! #include #endif /* __SSE__ */ #endif /* _XMMINTRIN_H_INCLUDED */ diff -Nrc3pad gcc-3.3.2/gcc/config/ia64/hpux.h gcc-3.3.3/gcc/config/ia64/hpux.h *** gcc-3.3.2/gcc/config/ia64/hpux.h Tue Aug 26 06:50:30 2003 --- gcc-3.3.3/gcc/config/ia64/hpux.h Sun Dec 21 23:35:42 2003 *************** do { \ *** 47,52 **** --- 47,54 ---- builtin_define("_HPUX_SOURCE"); \ builtin_define("__STDC_EXT__"); \ } \ + if (TARGET_ILP32) \ + builtin_define("_ILP32"); \ } while (0) #undef CPP_SPEC *************** do { \ *** 188,190 **** --- 190,196 ---- #define TARGET_ASM_SELECT_RTX_SECTION ia64_rwreloc_select_rtx_section #undef TARGET_SECTION_TYPE_FLAGS #define TARGET_SECTION_TYPE_FLAGS ia64_rwreloc_section_type_flags + + /* HP-UX does not support thread-local storage. */ + #undef TARGET_HAVE_TLS + #define TARGET_HAVE_TLS false diff -Nrc3pad gcc-3.3.2/gcc/config/ia64/ia64.c gcc-3.3.3/gcc/config/ia64/ia64.c *** gcc-3.3.2/gcc/config/ia64/ia64.c Wed Sep 10 04:06:03 2003 --- gcc-3.3.3/gcc/config/ia64/ia64.c Wed Dec 31 23:45:39 2003 *************** static rtx ia64_expand_fetch_and_op PARA *** 175,182 **** tree, rtx)); static rtx ia64_expand_op_and_fetch PARAMS ((optab, enum machine_mode, tree, rtx)); ! static rtx ia64_expand_compare_and_swap PARAMS ((enum machine_mode, int, ! tree, rtx)); static rtx ia64_expand_lock_test_and_set PARAMS ((enum machine_mode, tree, rtx)); static rtx ia64_expand_lock_release PARAMS ((enum machine_mode, tree, rtx)); --- 175,183 ---- tree, rtx)); static rtx ia64_expand_op_and_fetch PARAMS ((optab, enum machine_mode, tree, rtx)); ! static rtx ia64_expand_compare_and_swap PARAMS ((enum machine_mode, ! enum machine_mode, ! int, tree, rtx)); static rtx ia64_expand_lock_test_and_set PARAMS ((enum machine_mode, tree, rtx)); static rtx ia64_expand_lock_release PARAMS ((enum machine_mode, tree, rtx)); *************** static const struct attribute_spec ia64_ *** 279,289 **** #undef TARGET_SCHED_REORDER2 #define TARGET_SCHED_REORDER2 ia64_sched_reorder2 - #ifdef HAVE_AS_TLS - #undef TARGET_HAVE_TLS - #define TARGET_HAVE_TLS true - #endif - #undef TARGET_ASM_OUTPUT_MI_THUNK #define TARGET_ASM_OUTPUT_MI_THUNK ia64_output_mi_thunk #undef TARGET_ASM_CAN_OUTPUT_MI_THUNK --- 280,285 ---- *************** ia64_expand_call (retval, addr, nextarg, *** 1435,1440 **** --- 1431,1437 ---- rtx insn, b0; addr = XEXP (addr, 0); + addr = convert_memory_address (DImode, addr); b0 = gen_rtx_REG (DImode, R_BR (0)); /* ??? Should do this for functions known to bind local too. */ *************** ia64_function_arg (cum, mode, type, name *** 3433,3441 **** ? 1 : GET_MODE_SIZE (gr_mode) / UNITS_PER_WORD; } ! /* If we ended up using just one location, just return that one loc. */ if (i == 1) ! return XEXP (loc[0], 0); else return gen_rtx_PARALLEL (mode, gen_rtvec_v (i, loc)); } --- 3430,3439 ---- ? 1 : GET_MODE_SIZE (gr_mode) / UNITS_PER_WORD; } ! /* If we ended up using just one location, just return that one loc, but ! change the mode back to the argument mode. */ if (i == 1) ! return gen_rtx_REG (mode, REGNO (XEXP (loc[0], 0))); else return gen_rtx_PARALLEL (mode, gen_rtvec_v (i, loc)); } *************** ia64_va_arg (valist, type) *** 3650,3657 **** /* Variable sized types are passed by reference. */ if (TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST) { ! rtx addr = std_expand_builtin_va_arg (valist, build_pointer_type (type)); ! return gen_rtx_MEM (ptr_mode, force_reg (Pmode, addr)); } /* Arguments with alignment larger than 8 bytes start at the next even --- 3648,3659 ---- /* Variable sized types are passed by reference. */ if (TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST) { ! rtx addr = force_reg (ptr_mode, ! std_expand_builtin_va_arg (valist, build_pointer_type (type))); ! #ifdef POINTERS_EXTEND_UNSIGNED ! addr = convert_memory_address (Pmode, addr); ! #endif ! return gen_rtx_MEM (ptr_mode, addr); } /* Arguments with alignment larger than 8 bytes start at the next even *************** ia64_in_small_data_p (exp) *** 7286,7291 **** --- 7288,7297 ---- if (TARGET_NO_SDATA) return false; + /* Functions are never small data. */ + if (TREE_CODE (exp) == FUNCTION_DECL) + return false; + if (TREE_CODE (exp) == VAR_DECL && DECL_SECTION_NAME (exp)) { const char *section = TREE_STRING_POINTER (DECL_SECTION_NAME (exp)); *************** ia64_init_builtins () *** 7710,7720 **** psi_type_node, integer_type_node, integer_type_node, NULL_TREE); ! /* __sync_val_compare_and_swap_di, __sync_bool_compare_and_swap_di */ tree di_ftype_pdi_di_di = build_function_type_list (long_integer_type_node, pdi_type_node, long_integer_type_node, long_integer_type_node, NULL_TREE); /* __sync_synchronize */ tree void_ftype_void = build_function_type (void_type_node, void_list_node); --- 7716,7731 ---- psi_type_node, integer_type_node, integer_type_node, NULL_TREE); ! /* __sync_val_compare_and_swap_di */ tree di_ftype_pdi_di_di = build_function_type_list (long_integer_type_node, pdi_type_node, long_integer_type_node, long_integer_type_node, NULL_TREE); + /* __sync_bool_compare_and_swap_di */ + tree si_ftype_pdi_di_di + = build_function_type_list (integer_type_node, + pdi_type_node, long_integer_type_node, + long_integer_type_node, NULL_TREE); /* __sync_synchronize */ tree void_ftype_void = build_function_type (void_type_node, void_list_node); *************** ia64_init_builtins () *** 7747,7753 **** IA64_BUILTIN_VAL_COMPARE_AND_SWAP_DI); def_builtin ("__sync_bool_compare_and_swap_si", si_ftype_psi_si_si, IA64_BUILTIN_BOOL_COMPARE_AND_SWAP_SI); ! def_builtin ("__sync_bool_compare_and_swap_di", di_ftype_pdi_di_di, IA64_BUILTIN_BOOL_COMPARE_AND_SWAP_DI); def_builtin ("__sync_synchronize", void_ftype_void, --- 7758,7764 ---- IA64_BUILTIN_VAL_COMPARE_AND_SWAP_DI); def_builtin ("__sync_bool_compare_and_swap_si", si_ftype_psi_si_si, IA64_BUILTIN_BOOL_COMPARE_AND_SWAP_SI); ! def_builtin ("__sync_bool_compare_and_swap_di", si_ftype_pdi_di_di, IA64_BUILTIN_BOOL_COMPARE_AND_SWAP_DI); def_builtin ("__sync_synchronize", void_ftype_void, *************** ia64_expand_fetch_and_op (binoptab, mode *** 7878,7890 **** } tmp = gen_reg_rtx (mode); ! ccv = gen_rtx_REG (mode, AR_CCV_REGNUM); emit_move_insn (tmp, mem); label = gen_label_rtx (); emit_label (label); emit_move_insn (ret, tmp); ! emit_move_insn (ccv, tmp); /* Perform the specific operation. Special case NAND by noticing one_cmpl_optab instead. */ --- 7889,7902 ---- } tmp = gen_reg_rtx (mode); ! /* ar.ccv must always be loaded with a zero-extended DImode value. */ ! ccv = gen_rtx_REG (DImode, AR_CCV_REGNUM); emit_move_insn (tmp, mem); label = gen_label_rtx (); emit_label (label); emit_move_insn (ret, tmp); ! convert_move (ccv, tmp, /*unsignedp=*/1); /* Perform the specific operation. Special case NAND by noticing one_cmpl_optab instead. */ *************** ia64_expand_op_and_fetch (binoptab, mode *** 7947,7960 **** emit_insn (gen_mf ()); tmp = gen_reg_rtx (mode); old = gen_reg_rtx (mode); ! ccv = gen_rtx_REG (mode, AR_CCV_REGNUM); emit_move_insn (tmp, mem); label = gen_label_rtx (); emit_label (label); emit_move_insn (old, tmp); ! emit_move_insn (ccv, tmp); /* Perform the specific operation. Special case NAND by noticing one_cmpl_optab instead. */ --- 7959,7973 ---- emit_insn (gen_mf ()); tmp = gen_reg_rtx (mode); old = gen_reg_rtx (mode); ! /* ar.ccv must always be loaded with a zero-extended DImode value. */ ! ccv = gen_rtx_REG (DImode, AR_CCV_REGNUM); emit_move_insn (tmp, mem); label = gen_label_rtx (); emit_label (label); emit_move_insn (old, tmp); ! convert_move (ccv, tmp, /*unsignedp=*/1); /* Perform the specific operation. Special case NAND by noticing one_cmpl_optab instead. */ *************** ia64_expand_op_and_fetch (binoptab, mode *** 7987,7993 **** */ static rtx ! ia64_expand_compare_and_swap (mode, boolp, arglist, target) enum machine_mode mode; int boolp; tree arglist; --- 8000,8007 ---- */ static rtx ! ia64_expand_compare_and_swap (rmode, mode, boolp, arglist, target) ! enum machine_mode rmode; enum machine_mode mode; int boolp; tree arglist; *************** ia64_expand_compare_and_swap (mode, bool *** 8006,8011 **** --- 8020,8030 ---- mem = gen_rtx_MEM (mode, force_reg (ptr_mode, mem)); MEM_VOLATILE_P (mem) = 1; + if (GET_MODE (old) != mode) + old = convert_to_mode (mode, old, /*unsignedp=*/1); + if (GET_MODE (new) != mode) + new = convert_to_mode (mode, new, /*unsignedp=*/1); + if (! register_operand (old, mode)) old = copy_to_mode_reg (mode, old); if (! register_operand (new, mode)) *************** ia64_expand_compare_and_swap (mode, bool *** 8017,8030 **** tmp = gen_reg_rtx (mode); ccv = gen_rtx_REG (DImode, AR_CCV_REGNUM); ! if (mode == DImode) ! emit_move_insn (ccv, old); ! else ! { ! rtx ccvtmp = gen_reg_rtx (DImode); ! emit_insn (gen_zero_extendsidi2 (ccvtmp, old)); ! emit_move_insn (ccv, ccvtmp); ! } emit_insn (gen_mf ()); if (mode == SImode) insn = gen_cmpxchg_acq_si (tmp, mem, new, ccv); --- 8036,8042 ---- tmp = gen_reg_rtx (mode); ccv = gen_rtx_REG (DImode, AR_CCV_REGNUM); ! convert_move (ccv, old, /*unsignedp=*/1); emit_insn (gen_mf ()); if (mode == SImode) insn = gen_cmpxchg_acq_si (tmp, mem, new, ccv); *************** ia64_expand_compare_and_swap (mode, bool *** 8035,8041 **** if (boolp) { if (! target) ! target = gen_reg_rtx (mode); return emit_store_flag_force (target, EQ, tmp, old, mode, 1, 1); } else --- 8047,8053 ---- if (boolp) { if (! target) ! target = gen_reg_rtx (rmode); return emit_store_flag_force (target, EQ, tmp, old, mode, 1, 1); } else *************** ia64_expand_builtin (exp, target, subtar *** 8110,8120 **** --- 8122,8137 ---- tree fndecl = TREE_OPERAND (TREE_OPERAND (exp, 0), 0); unsigned int fcode = DECL_FUNCTION_CODE (fndecl); tree arglist = TREE_OPERAND (exp, 1); + enum machine_mode rmode = VOIDmode; switch (fcode) { case IA64_BUILTIN_BOOL_COMPARE_AND_SWAP_SI: case IA64_BUILTIN_VAL_COMPARE_AND_SWAP_SI: + mode = SImode; + rmode = SImode; + break; + case IA64_BUILTIN_LOCK_TEST_AND_SET_SI: case IA64_BUILTIN_LOCK_RELEASE_SI: case IA64_BUILTIN_FETCH_AND_ADD_SI: *************** ia64_expand_builtin (exp, target, subtar *** 8133,8139 **** --- 8150,8164 ---- break; case IA64_BUILTIN_BOOL_COMPARE_AND_SWAP_DI: + mode = DImode; + rmode = SImode; + break; + case IA64_BUILTIN_VAL_COMPARE_AND_SWAP_DI: + mode = DImode; + rmode = DImode; + break; + case IA64_BUILTIN_LOCK_TEST_AND_SET_DI: case IA64_BUILTIN_LOCK_RELEASE_DI: case IA64_BUILTIN_FETCH_AND_ADD_DI: *************** ia64_expand_builtin (exp, target, subtar *** 8159,8169 **** { case IA64_BUILTIN_BOOL_COMPARE_AND_SWAP_SI: case IA64_BUILTIN_BOOL_COMPARE_AND_SWAP_DI: ! return ia64_expand_compare_and_swap (mode, 1, arglist, target); case IA64_BUILTIN_VAL_COMPARE_AND_SWAP_SI: case IA64_BUILTIN_VAL_COMPARE_AND_SWAP_DI: ! return ia64_expand_compare_and_swap (mode, 0, arglist, target); case IA64_BUILTIN_SYNCHRONIZE: emit_insn (gen_mf ()); --- 8184,8196 ---- { case IA64_BUILTIN_BOOL_COMPARE_AND_SWAP_SI: case IA64_BUILTIN_BOOL_COMPARE_AND_SWAP_DI: ! return ia64_expand_compare_and_swap (rmode, mode, 1, arglist, ! target); case IA64_BUILTIN_VAL_COMPARE_AND_SWAP_SI: case IA64_BUILTIN_VAL_COMPARE_AND_SWAP_DI: ! return ia64_expand_compare_and_swap (rmode, mode, 0, arglist, ! target); case IA64_BUILTIN_SYNCHRONIZE: emit_insn (gen_mf ()); diff -Nrc3pad gcc-3.3.2/gcc/config/ia64/ia64.h gcc-3.3.3/gcc/config/ia64/ia64.h *** gcc-3.3.2/gcc/config/ia64/ia64.h Fri Aug 8 22:07:14 2003 --- gcc-3.3.3/gcc/config/ia64/ia64.h Tue Dec 16 23:55:19 2003 *************** extern int target_flags; *** 133,138 **** --- 133,147 ---- #define TARGET_DWARF2_ASM (target_flags & MASK_DWARF2_ASM) + /* If the assembler supports thread-local storage, assume that the + system does as well. If a particular target system has an + assembler that supports TLS -- but the rest of the system does not + support TLS -- that system should explicit define TARGET_HAVE_TLS + to false in its own configuration file. */ + #if !defined(TARGET_HAVE_TLS) && defined(HAVE_AS_TLS) + #define TARGET_HAVE_TLS true + #endif + extern int ia64_tls_size; #define TARGET_TLS14 (ia64_tls_size == 14) #define TARGET_TLS22 (ia64_tls_size == 22) *************** enum reg_class *** 1280,1285 **** --- 1289,1301 ---- #define FUNCTION_ARG_PASS_BY_REFERENCE(CUM, MODE, TYPE, NAMED) \ ia64_function_arg_pass_by_reference (&CUM, MODE, TYPE, NAMED) + /* Nonzero if we do not know how to pass TYPE solely in registers. */ + + #define MUST_PASS_IN_STACK(MODE, TYPE) \ + ((TYPE) != 0 \ + && (TREE_CODE (TYPE_SIZE (TYPE)) != INTEGER_CST \ + || TREE_ADDRESSABLE (TYPE))) + /* A C type for declaring a variable that is used as the first argument of `FUNCTION_ARG' and other related values. For some target machines, the type `int' suffices and can hold the number of bytes of argument so far. */ *************** do { \ *** 1344,1350 **** On many machines, no registers can be used for this purpose since all function arguments are pushed on the stack. */ #define FUNCTION_ARG_REGNO_P(REGNO) \ ! (((REGNO) >= GR_ARG_FIRST && (REGNO) < (GR_ARG_FIRST + MAX_ARGUMENT_SLOTS)) \ || ((REGNO) >= FR_ARG_FIRST && (REGNO) < (FR_ARG_FIRST + MAX_ARGUMENT_SLOTS))) /* Implement `va_arg'. */ --- 1360,1366 ---- On many machines, no registers can be used for this purpose since all function arguments are pushed on the stack. */ #define FUNCTION_ARG_REGNO_P(REGNO) \ ! (((REGNO) >= AR_ARG_FIRST && (REGNO) < (AR_ARG_FIRST + MAX_ARGUMENT_SLOTS)) \ || ((REGNO) >= FR_ARG_FIRST && (REGNO) < (FR_ARG_FIRST + MAX_ARGUMENT_SLOTS))) /* Implement `va_arg'. */ diff -Nrc3pad gcc-3.3.2/gcc/config/ia64/ia64.md gcc-3.3.3/gcc/config/ia64/ia64.md *** gcc-3.3.2/gcc/config/ia64/ia64.md Fri Aug 8 22:07:14 2003 --- gcc-3.3.3/gcc/config/ia64/ia64.md Tue Dec 16 23:55:19 2003 *************** *** 4802,4808 **** [(set_attr "itanium_class" "br,scall")]) (define_insn "call_gp" ! [(call (mem (match_operand 0 "call_operand" "?r,i")) (const_int 1)) (clobber (match_operand:DI 1 "register_operand" "=b,b")) (clobber (match_scratch:DI 2 "=&r,X")) --- 4802,4808 ---- [(set_attr "itanium_class" "br,scall")]) (define_insn "call_gp" ! [(call (mem:DI (match_operand:DI 0 "call_operand" "?r,i")) (const_int 1)) (clobber (match_operand:DI 1 "register_operand" "=b,b")) (clobber (match_scratch:DI 2 "=&r,X")) *************** *** 5451,5457 **** (set (match_operand:SI 1 "not_postinc_memory_operand" "+S") (unspec:SI [(match_dup 1) (match_operand:SI 2 "gr_register_operand" "r") ! (match_operand 3 "ar_ccv_reg_operand" "")] UNSPEC_CMPXCHG_ACQ))] "" "cmpxchg4.acq %0 = %1, %2, %3" --- 5451,5457 ---- (set (match_operand:SI 1 "not_postinc_memory_operand" "+S") (unspec:SI [(match_dup 1) (match_operand:SI 2 "gr_register_operand" "r") ! (match_operand:DI 3 "ar_ccv_reg_operand" "")] UNSPEC_CMPXCHG_ACQ))] "" "cmpxchg4.acq %0 = %1, %2, %3" diff -Nrc3pad gcc-3.3.2/gcc/config/ia64/ia64intrin.h gcc-3.3.3/gcc/config/ia64/ia64intrin.h *** gcc-3.3.2/gcc/config/ia64/ia64intrin.h Mon Jan 21 02:24:02 2002 --- gcc-3.3.3/gcc/config/ia64/ia64intrin.h Tue Nov 4 17:00:44 2003 *************** extern long __sync_val_compare_and_swap_ *** 19,31 **** __sync_val_compare_and_swap_di((long *)(PTR),(long)(OLD),(long)(NEW))) extern int __sync_bool_compare_and_swap_si (int *, int, int); ! extern long __sync_bool_compare_and_swap_di (long *, long, long); #define __sync_bool_compare_and_swap(PTR, OLD, NEW) \ ((sizeof (*(PTR)) == sizeof(int)) \ ! ? (__typeof__(*(PTR))) \ ! __sync_bool_compare_and_swap_si((int *)(PTR),(int)(OLD),(int)(NEW)) \ ! : (__typeof__(*(PTR))) \ ! __sync_bool_compare_and_swap_di((long *)(PTR),(long)(OLD),(long)(NEW))) extern void __sync_lock_release_si (int *); extern void __sync_lock_release_di (long *); --- 19,29 ---- __sync_val_compare_and_swap_di((long *)(PTR),(long)(OLD),(long)(NEW))) extern int __sync_bool_compare_and_swap_si (int *, int, int); ! extern int __sync_bool_compare_and_swap_di (long *, long, long); #define __sync_bool_compare_and_swap(PTR, OLD, NEW) \ ((sizeof (*(PTR)) == sizeof(int)) \ ! ? __sync_bool_compare_and_swap_si((int *)(PTR),(int)(OLD),(int)(NEW)) \ ! : __sync_bool_compare_and_swap_di((long *)(PTR),(long)(OLD),(long)(NEW))) extern void __sync_lock_release_si (int *); extern void __sync_lock_release_di (long *); diff -Nrc3pad gcc-3.3.2/gcc/config/ia64/linux.h gcc-3.3.3/gcc/config/ia64/linux.h *** gcc-3.3.2/gcc/config/ia64/linux.h Tue Sep 3 21:09:54 2002 --- gcc-3.3.3/gcc/config/ia64/linux.h Fri Dec 12 16:10:09 2003 *************** do { \ *** 63,69 **** #include #define IA64_GATE_AREA_START 0xa000000000000100LL ! #define IA64_GATE_AREA_END 0xa000000000020000LL #define MD_FALLBACK_FRAME_STATE_FOR(CONTEXT, FS, SUCCESS) \ if ((CONTEXT)->rp >= IA64_GATE_AREA_START \ --- 63,69 ---- #include #define IA64_GATE_AREA_START 0xa000000000000100LL ! #define IA64_GATE_AREA_END 0xa000000000030000LL #define MD_FALLBACK_FRAME_STATE_FOR(CONTEXT, FS, SUCCESS) \ if ((CONTEXT)->rp >= IA64_GATE_AREA_START \ *************** do { \ *** 90,99 **** --- 90,102 ---- (CONTEXT)->ireg[i_ - 2].loc = &sc_->sc_gr[i_]; \ } \ \ + (CONTEXT)->fpsr_loc = &(sc_->sc_ar_fpsr); \ (CONTEXT)->pfs_loc = &(sc_->sc_ar_pfs); \ (CONTEXT)->lc_loc = &(sc_->sc_ar_lc); \ (CONTEXT)->unat_loc = &(sc_->sc_ar_unat); \ (CONTEXT)->br_loc[0] = &(sc_->sc_br[0]); \ + (CONTEXT)->br_loc[6] = &(sc_->sc_br[6]); \ + (CONTEXT)->br_loc[7] = &(sc_->sc_br[7]); \ (CONTEXT)->bsp = sc_->sc_ar_bsp; \ (CONTEXT)->pr = sc_->sc_pr; \ (CONTEXT)->psp = sc_->sc_gr[12]; \ *************** do { \ *** 102,112 **** other than what we adjust for below. */ \ (FS) -> no_reg_stack_frame = 1; \ \ ! /* Don't touch the branch registers o.t. b0. The kernel doesn't \ ! pass the preserved branch registers in the sigcontext but \ ! leaves them intact, so there's no need to do anything \ ! with them here. */ \ ! \ { \ unsigned long sof = sc_->sc_cfm & 0x7f; \ (CONTEXT)->bsp = (unsigned long) \ --- 105,114 ---- other than what we adjust for below. */ \ (FS) -> no_reg_stack_frame = 1; \ \ ! /* Don't touch the branch registers o.t. b0, b6 and b7. \ ! The kernel doesn't pass the preserved branch registers \ ! in the sigcontext but leaves them intact, so there's no \ ! need to do anything with them here. */ \ { \ unsigned long sof = sc_->sc_cfm & 0x7f; \ (CONTEXT)->bsp = (unsigned long) \ *************** do { \ *** 120,123 **** --- 122,179 ---- \ goto SUCCESS; \ } + + #define MD_HANDLE_UNWABI(CONTEXT, FS) \ + if ((FS)->unwabi == ((3 << 8) | 's') \ + || (FS)->unwabi == ((0 << 8) | 's')) \ + { \ + struct sigframe { \ + char scratch[16]; \ + unsigned long sig_number; \ + struct siginfo *info; \ + struct sigcontext *sc; \ + } *frame_ = (struct sigframe *)(CONTEXT)->psp; \ + struct sigcontext *sc_ = frame_->sc; \ + \ + /* Restore scratch registers in case the unwinder needs to \ + refer to a value stored in one of them. */ \ + { \ + int i_; \ + \ + for (i_ = 2; i_ < 4; i_++) \ + (CONTEXT)->ireg[i_ - 2].loc = &sc_->sc_gr[i_]; \ + for (i_ = 8; i_ < 12; i_++) \ + (CONTEXT)->ireg[i_ - 2].loc = &sc_->sc_gr[i_]; \ + for (i_ = 14; i_ < 32; i_++) \ + (CONTEXT)->ireg[i_ - 2].loc = &sc_->sc_gr[i_]; \ + } \ + \ + (CONTEXT)->pfs_loc = &(sc_->sc_ar_pfs); \ + (CONTEXT)->lc_loc = &(sc_->sc_ar_lc); \ + (CONTEXT)->unat_loc = &(sc_->sc_ar_unat); \ + (CONTEXT)->br_loc[0] = &(sc_->sc_br[0]); \ + (CONTEXT)->br_loc[6] = &(sc_->sc_br[6]); \ + (CONTEXT)->br_loc[7] = &(sc_->sc_br[7]); \ + (CONTEXT)->bsp = sc_->sc_ar_bsp; \ + (CONTEXT)->pr = sc_->sc_pr; \ + (CONTEXT)->gp = sc_->sc_gr[1]; \ + /* Signal frame doesn't have an associated reg. stack frame \ + other than what we adjust for below. */ \ + (FS) -> no_reg_stack_frame = 1; \ + \ + /* Don't touch the branch registers o.t. b0, b6 and b7. \ + The kernel doesn't pass the preserved branch registers \ + in the sigcontext but leaves them intact, so there's no \ + need to do anything with them here. */ \ + { \ + unsigned long sof = sc_->sc_cfm & 0x7f; \ + (CONTEXT)->bsp = (unsigned long) \ + ia64_rse_skip_regs ((unsigned long *)(sc_->sc_ar_bsp), -sof); \ + } \ + \ + /* pfs_loc already set above. Without this pfs_loc would point \ + incorrectly to sc_cfm instead of sc_ar_pfs. */ \ + (FS)->curr.reg[UNW_REG_PFS].where = UNW_WHERE_NONE; \ + } + #endif /* IN_LIBGCC2 */ diff -Nrc3pad gcc-3.3.2/gcc/config/ia64/unwind-ia64.c gcc-3.3.3/gcc/config/ia64/unwind-ia64.c *** gcc-3.3.2/gcc/config/ia64/unwind-ia64.c Thu Sep 4 09:39:47 2003 --- gcc-3.3.3/gcc/config/ia64/unwind-ia64.c Fri Dec 12 16:10:09 2003 *************** typedef struct unw_state_record *** 155,160 **** --- 155,161 ---- unsigned char gr_save_loc; /* next general register to use for saving */ unsigned char return_link_reg; /* branch register for return link */ + unsigned short unwabi; struct unw_labeled_state *labeled_states; /* list of all labeled states */ struct unw_reg_state curr; /* current state */ *************** struct _Unwind_Context *** 219,225 **** } nat; } ireg[32 - 2]; /* Indexed by - 2 */ ! unsigned long *br_loc[7]; void *fr_loc[32 - 2]; /* ??? We initially point pri_unat_loc here. The entire NAT bit --- 220,226 ---- } nat; } ireg[32 - 2]; /* Indexed by - 2 */ ! unsigned long *br_loc[8]; void *fr_loc[32 - 2]; /* ??? We initially point pri_unat_loc here. The entire NAT bit *************** desc_prologue (int body, unw_word rlen, *** 619,629 **** */ static inline void ! desc_abi (unsigned char abi __attribute__((unused)), ! unsigned char context __attribute__((unused)), ! struct unw_state_record *sr __attribute__((unused))) { ! /* Anything to do? */ } static inline void --- 620,630 ---- */ static inline void ! desc_abi (unsigned char abi, ! unsigned char context, ! struct unw_state_record *sr) { ! sr->unwabi = (abi << 8) | context; } static inline void *************** uw_update_reg_address (struct _Unwind_Co *** 1794,1799 **** --- 1795,1805 ---- addr = ia64_rse_skip_regs ((unsigned long *) context->bsp, rval - 32); else if (rval >= 2) addr = context->ireg[rval - 2].loc; + else if (rval == 0) + { + static const unsigned long dummy; + addr = (void *) &dummy; + } else abort (); break; *************** uw_update_reg_address (struct _Unwind_Co *** 1807,1815 **** case UNW_WHERE_BR: /* Note that while RVAL can only be 1-5 from normal descriptors, ! we can want to look at B0 due to having manually unwound a signal frame. */ ! if (rval <= 5) addr = context->br_loc[rval]; else abort (); --- 1813,1821 ---- case UNW_WHERE_BR: /* Note that while RVAL can only be 1-5 from normal descriptors, ! we can want to look at B0, B6 and B7 due to having manually unwound a signal frame. */ ! if (rval < 8) addr = context->br_loc[rval]; else abort (); *************** uw_update_reg_address (struct _Unwind_Co *** 1845,1850 **** --- 1851,1861 ---- context->ireg[regno - UNW_REG_R2].nat = context->ireg[rval - 2].nat; } + else if (rval == 0) + { + context->ireg[regno - UNW_REG_R2].nat.type = UNW_NAT_NONE; + context->ireg[regno - UNW_REG_R2].nat.off = 0; + } else abort (); break; *************** uw_update_context (struct _Unwind_Contex *** 1918,1923 **** --- 1929,1938 ---- { long i; + #ifdef MD_HANDLE_UNWABI + MD_HANDLE_UNWABI (context, fs); + #endif + context->sp = context->psp; /* First, set PSP. Subsequent instructions may depend on this value. */ *************** uw_install_context (struct _Unwind_Conte *** 2069,2090 **** ";; \n\t" "(p6) ld8.fill r4 = [%1] \n\t" "(p7) ld8.fill r5 = [r20] \n\t" ! "add r21 = uc_br_loc + 8, %0 \n\t" "adds %1 = 16, %1 \n\t" "adds r20 = 16, r20 \n\t" ";; \n\t" "(p8) ld8.fill r6 = [%1] \n\t" "(p9) ld8.fill r7 = [r20] \n\t" ! "add r20 = uc_br_loc, %0 \n\t" ";; \n\t" /* Load up call-saved branch registers. */ "ld8 r22 = [r20], 16 \n\t" "ld8 r23 = [r21], 16 \n\t" ";; \n\t" "ld8 r24 = [r20], 16 \n\t" ! "ld8 r25 = [r21], uc_fr_loc - (uc_br_loc + 24)\n\t" ";; \n\t" ! "ld8 r26 = [r20], uc_fr_loc + 8 - (uc_br_loc + 32)\n\t" "ld8 r27 = [r21], 24 \n\t" "cmp.ne p6, p0 = r0, r22 \n\t" ";; \n\t" --- 2084,2105 ---- ";; \n\t" "(p6) ld8.fill r4 = [%1] \n\t" "(p7) ld8.fill r5 = [r20] \n\t" ! "add r21 = uc_br_loc + 16, %0 \n\t" "adds %1 = 16, %1 \n\t" "adds r20 = 16, r20 \n\t" ";; \n\t" "(p8) ld8.fill r6 = [%1] \n\t" "(p9) ld8.fill r7 = [r20] \n\t" ! "add r20 = uc_br_loc + 8, %0 \n\t" ";; \n\t" /* Load up call-saved branch registers. */ "ld8 r22 = [r20], 16 \n\t" "ld8 r23 = [r21], 16 \n\t" ";; \n\t" "ld8 r24 = [r20], 16 \n\t" ! "ld8 r25 = [r21], uc_fr_loc - (uc_br_loc + 32)\n\t" ";; \n\t" ! "ld8 r26 = [r20], uc_fr_loc + 8 - (uc_br_loc + 40)\n\t" "ld8 r27 = [r21], 24 \n\t" "cmp.ne p6, p0 = r0, r22 \n\t" ";; \n\t" *************** uw_install_context (struct _Unwind_Conte *** 2232,2238 **** "(p9) mov.i ar.lc = r29 \n\t" ";; \n\t" "mov.m r25 = ar.rsc \n\t" ! "(p6) mov.i ar.fpsr = r30 \n\t" ";; \n\t" "and r25 = 0x1c, r25 \n\t" "mov b0 = r26 \n\t" --- 2247,2253 ---- "(p9) mov.i ar.lc = r29 \n\t" ";; \n\t" "mov.m r25 = ar.rsc \n\t" ! "(p6) mov.m ar.fpsr = r30 \n\t" ";; \n\t" "and r25 = 0x1c, r25 \n\t" "mov b0 = r26 \n\t" diff -Nrc3pad gcc-3.3.2/gcc/config/interix.h gcc-3.3.3/gcc/config/interix.h *** gcc-3.3.2/gcc/config/interix.h Tue Nov 26 04:54:46 2002 --- gcc-3.3.3/gcc/config/interix.h Thu Nov 6 23:13:32 2003 *************** for windows/multi thread */ *** 70,88 **** && strcmp (STR, "Tbss")) - #if 0 - /* don't do this until we can sort out the default path issues. MK */ - #undef STANDARD_EXEC_PREFIX - #define STANDARD_EXEC_PREFIX "" - - #undef STANDARD_STARTFILE_PREFIX - #define STANDARD_STARTFILE_PREFIX "" - - #undef TOOLDIR_BASE_PREFIX - #define TOOLDIR_BASE_PREFIX "" - - #endif /* 0 */ - #define STDC_0_IN_SYSTEM_HEADERS 1 #define HANDLE_SYSV_PRAGMA 1 --- 70,75 ---- diff -Nrc3pad gcc-3.3.2/gcc/config/m68k/linux.h gcc-3.3.3/gcc/config/m68k/linux.h *** gcc-3.3.2/gcc/config/m68k/linux.h Tue Jan 28 22:18:15 2003 --- gcc-3.3.3/gcc/config/m68k/linux.h Fri Nov 14 06:46:12 2003 *************** do { \ *** 359,361 **** --- 359,368 ---- : "d" (_beg), "d" (_len) \ : "%d0", "%d2", "%d3"); \ } + + #define ASM_FILE_END(FILE) \ + do { \ + named_section_flags (".note.GNU-stack", \ + SECTION_DEBUG \ + | (trampolines_created ? SECTION_CODE : 0)); \ + } while (0) diff -Nrc3pad gcc-3.3.2/gcc/config/mcore/mcore-protos.h gcc-3.3.3/gcc/config/mcore/mcore-protos.h *** gcc-3.3.2/gcc/config/mcore/mcore-protos.h Tue Jun 4 07:09:11 2002 --- gcc-3.3.3/gcc/config/mcore/mcore-protos.h Thu Jan 1 00:24:24 2004 *************** extern void mcore_print_operand_ *** 69,74 **** --- 69,76 ---- extern void mcore_print_operand PARAMS ((FILE *, rtx, int)); extern rtx mcore_gen_compare_reg PARAMS ((RTX_CODE)); extern int mcore_symbolic_address_p PARAMS ((rtx)); + extern bool mcore_r15_operand_p PARAMS ((rtx)); + extern enum reg_class mcore_secondary_reload_class PARAMS ((enum reg_class, enum machine_mode, rtx)); extern enum reg_class mcore_reload_class PARAMS ((rtx, enum reg_class)); extern int mcore_is_same_reg PARAMS ((rtx, rtx)); extern int mcore_arith_S_operand PARAMS ((rtx)); *************** extern int mcore_arith_S_operan *** 76,82 **** #ifdef HAVE_MACHINE_MODES extern const char * mcore_output_move PARAMS ((rtx, rtx *, enum machine_mode)); extern const char * mcore_output_movedouble PARAMS ((rtx *, enum machine_mode)); - extern const char * mcore_output_inline_const_forced PARAMS ((rtx, rtx *, enum machine_mode)); extern int mcore_arith_reg_operand PARAMS ((rtx, enum machine_mode)); extern int mcore_general_movsrc_operand PARAMS ((rtx, enum machine_mode)); extern int mcore_general_movdst_operand PARAMS ((rtx, enum machine_mode)); --- 78,83 ---- diff -Nrc3pad gcc-3.3.2/gcc/config/mcore/mcore.c gcc-3.3.3/gcc/config/mcore/mcore.c *** gcc-3.3.2/gcc/config/mcore/mcore.c Tue Sep 24 12:48:59 2002 --- gcc-3.3.3/gcc/config/mcore/mcore.c Thu Jan 1 00:24:24 2004 *************** mcore_output_move (insn, operands, mode) *** 1213,1219 **** if (GET_CODE (XEXP (src, 0)) == LABEL_REF) return "lrw\t%0,[%1]"; /* a-R */ else ! return "ldw\t%0,%1"; /* r-m */ } else if (GET_CODE (src) == CONST_INT) { --- 1213,1229 ---- if (GET_CODE (XEXP (src, 0)) == LABEL_REF) return "lrw\t%0,[%1]"; /* a-R */ else ! switch (GET_MODE (src)) /* r-m */ ! { ! case SImode: ! return "ldw\t%0,%1"; ! case HImode: ! return "ld.h\t%0,%1"; ! case QImode: ! return "ld.b\t%0,%1"; ! default: ! abort (); ! } } else if (GET_CODE (src) == CONST_INT) { *************** mcore_output_move (insn, operands, mode) *** 1234,1333 **** return "lrw\t%0, %1"; /* Into the literal pool. */ } else if (GET_CODE (dst) == MEM) /* m-r */ ! return "stw\t%1,%0"; abort (); } - /* Outputs a constant inline -- regardless of the cost. - Useful for things where we've gotten into trouble and think we'd - be doing an lrw into r15 (forbidden). This lets us get out of - that pickle even after register allocation. */ - - const char * - mcore_output_inline_const_forced (insn, operands, mode) - rtx insn ATTRIBUTE_UNUSED; - rtx operands[]; - enum machine_mode mode ATTRIBUTE_UNUSED; - { - unsigned long value = INTVAL (operands[1]); - unsigned long ovalue = value; - struct piece - { - int low; - int shift; - } - part[6]; - int i; - - if (mcore_const_ok_for_inline (value)) - return output_inline_const (SImode, operands); - - for (i = 0; (unsigned) i < ARRAY_SIZE (part); i++) - { - part[i].shift = 0; - part[i].low = (value & 0x1F); - value -= part[i].low; - - if (mcore_const_ok_for_inline (value)) - break; - else - { - value >>= 5; - part[i].shift = 5; - - while ((value & 1) == 0) - { - part[i].shift++; - value >>= 1; - } - - if (mcore_const_ok_for_inline (value)) - break; - } - } - - /* 5 bits per iteration, a maximum of 5 times == 25 bits and leaves - 7 bits left in the constant -- which we know we can cover with - a movi. The final value can't be zero otherwise we'd have stopped - in the previous iteration. */ - if (value == 0 || ! mcore_const_ok_for_inline (value)) - abort (); - - /* Now, work our way backwards emitting the constant. */ - - /* Emit the value that remains -- it will be nonzero. */ - operands[1] = GEN_INT (value); - output_asm_insn (output_inline_const (SImode, operands), operands); - - while (i >= 0) - { - /* Shift anything we've already loaded. */ - if (part[i].shift) - { - operands[2] = GEN_INT (part[i].shift); - output_asm_insn ("lsli %0,%2", operands); - value <<= part[i].shift; - } - - /* Add anything we need into the low 5 bits. */ - if (part[i].low != 0) - { - operands[2] = GEN_INT (part[i].low); - output_asm_insn ("addi %0,%2", operands); - value += part[i].low; - } - - i--; - } - - if (value != ovalue) /* sanity */ - abort (); - - /* We've output all the instructions. */ - return ""; - } - /* Return a sequence of instructions to perform DI or DF move. Since the MCORE cannot move a DI or DF in one instruction, we have to take care when we see overlapping source and dest registers. */ --- 1244,1264 ---- return "lrw\t%0, %1"; /* Into the literal pool. */ } else if (GET_CODE (dst) == MEM) /* m-r */ ! switch (GET_MODE (dst)) ! { ! case SImode: ! return "stw\t%1,%0"; ! case HImode: ! return "st.h\t%1,%0"; ! case QImode: ! return "st.b\t%1,%0"; ! default: ! abort (); ! } abort (); } /* Return a sequence of instructions to perform DI or DF move. Since the MCORE cannot move a DI or DF in one instruction, we have to take care when we see overlapping source and dest registers. */ *************** mcore_dependent_reorg (first) *** 3009,3044 **** } ! /* Return the reg_class to use when reloading the rtx X into the class ! CLASS. */ ! /* If the input is (PLUS REG CONSTANT) representing a stack slot address, ! then we want to restrict the class to LRW_REGS since that ensures that ! will be able to safely load the constant. ! If the input is a constant that should be loaded with mvir1, then use ! ONLYR1_REGS. ! ??? We don't handle the case where we have (PLUS REG CONSTANT) and ! the constant should be loaded with mvir1, because that can lead to cases ! where an instruction needs two ONLYR1_REGS reloads. */ enum reg_class mcore_reload_class (x, class) rtx x; enum reg_class class; { ! enum reg_class new_class; ! ! if (class == GENERAL_REGS && CONSTANT_P (x) ! && (GET_CODE (x) != CONST_INT ! || ( ! CONST_OK_FOR_I (INTVAL (x)) ! && ! CONST_OK_FOR_M (INTVAL (x)) ! && ! CONST_OK_FOR_N (INTVAL (x))))) ! new_class = LRW_REGS; ! else ! new_class = class; ! return new_class; } /* Tell me if a pair of reg/subreg rtx's actually refer to the same --- 2940,2992 ---- } ! /* Return true if X is something that can be moved directly into r15. */ ! bool ! mcore_r15_operand_p (x) ! rtx x; ! { ! switch (GET_CODE (x)) ! { ! case CONST_INT: ! return mcore_const_ok_for_inline (INTVAL (x)); ! case REG: ! case SUBREG: ! case MEM: ! return 1; ! default: ! return 0; ! } ! } ! ! /* Implement SECONDARY_RELOAD_CLASS. If CLASS contains r15, and we can't ! directly move X into it, use r1-r14 as a temporary. */ ! enum reg_class ! mcore_secondary_reload_class (class, mode, x) ! enum reg_class class; ! enum machine_mode mode ATTRIBUTE_UNUSED; ! rtx x; ! { ! if (TEST_HARD_REG_BIT (reg_class_contents[class], 15) ! && !mcore_r15_operand_p (x)) ! return LRW_REGS; ! return NO_REGS; ! } ! ! /* Return the reg_class to use when reloading the rtx X into the class ! CLASS. If X is too complex to move directly into r15, prefer to ! use LRW_REGS instead. */ enum reg_class mcore_reload_class (x, class) rtx x; enum reg_class class; { ! if (reg_class_subset_p (LRW_REGS, class) && !mcore_r15_operand_p (x)) ! return LRW_REGS; ! return class; } /* Tell me if a pair of reg/subreg rtx's actually refer to the same diff -Nrc3pad gcc-3.3.2/gcc/config/mcore/mcore.h gcc-3.3.3/gcc/config/mcore/mcore.h *** gcc-3.3.2/gcc/config/mcore/mcore.h Tue Apr 29 14:31:53 2003 --- gcc-3.3.3/gcc/config/mcore/mcore.h Thu Jan 1 00:24:24 2004 *************** extern const enum reg_class reg_class_fr *** 610,616 **** /* Return the register class of a scratch register needed to copy IN into or out of a register in CLASS in MODE. If it can be done directly, NO_REGS is returned. */ ! #define SECONDARY_RELOAD_CLASS(CLASS, MODE, X) NO_REGS /* Return the maximum number of consecutive registers needed to represent mode MODE in a register of class CLASS. --- 610,617 ---- /* Return the register class of a scratch register needed to copy IN into or out of a register in CLASS in MODE. If it can be done directly, NO_REGS is returned. */ ! #define SECONDARY_RELOAD_CLASS(CLASS, MODE, X) \ ! mcore_secondary_reload_class (CLASS, MODE, X) /* Return the maximum number of consecutive registers needed to represent mode MODE in a register of class CLASS. diff -Nrc3pad gcc-3.3.2/gcc/config/mcore/mcore.md gcc-3.3.3/gcc/config/mcore/mcore.md *** gcc-3.3.2/gcc/config/mcore/mcore.md Fri May 16 09:11:04 2003 --- gcc-3.3.3/gcc/config/mcore/mcore.md Thu Jan 1 00:24:24 2004 *************** *** 1226,1326 **** { if (GET_CODE (operands[0]) == MEM) operands[1] = force_reg (SImode, operands[1]); - else if (CONSTANT_P (operands[1]) - && (GET_CODE (operands[1]) != CONST_INT - || ( ! CONST_OK_FOR_I (INTVAL (operands[1])) - && ! CONST_OK_FOR_M (INTVAL (operands[1])) - && ! CONST_OK_FOR_N (INTVAL (operands[1])) - && (! TARGET_HARDLIT || - ! mcore_const_ok_for_inline (INTVAL (operands[1]))))) - && ! reload_completed - && ! reload_in_progress - && GET_CODE (operands[0]) == REG - && REGNO (operands[0]) < FIRST_PSEUDO_REGISTER - && (REGNO (operands[0]) == STACK_POINTER_REGNUM - || REGNO (operands[0]) == LK_REG)) - operands[1] = force_reg (SImode, operands[1]); }") - ;;; Must put a/i before r/r so that it will be preferred when the dest is - ;;; a hard register. Must put a/R before r/m. - ;;; DO WE NEED a/i ANYMORE? - (define_insn "" ! [(set (match_operand:SI 0 "mcore_general_movdst_operand" "=r,r,r,a,r,r,a,r,m") ! (match_operand:SI 1 "mcore_general_movsrc_operand" "I,M,N,i,r,c,R,m,r"))] "(register_operand (operands[0], SImode) ! || register_operand (operands[1], SImode)) ! && ! (CONSTANT_P (operands[1]) ! && (GET_CODE (operands[1]) != CONST_INT ! || ( ! CONST_OK_FOR_I (INTVAL (operands[1])) ! && ! CONST_OK_FOR_M (INTVAL (operands[1])) ! && ! CONST_OK_FOR_N (INTVAL (operands[1])))) ! && GET_CODE (operands[0]) == REG ! && REGNO (operands[0]) < FIRST_PSEUDO_REGISTER ! && (REGNO (operands[0]) == STACK_POINTER_REGNUM ! || REGNO (operands[0]) == LK_REG))" "* return mcore_output_move (insn, operands, SImode);" ! [(set_attr "type" "move,move,move,move,move,move,load,load,store")]) ! ! ;; This is to work around a bug in reload. ! (define_insn "" ! [(set (match_operand:SI 0 "register_operand" "=r") ! (match_operand:SI 1 "immediate_operand" "i"))] ! "((reload_in_progress || reload_completed) ! && CONSTANT_P (operands[1]) ! && GET_CODE (operands[1]) == CONST_INT ! && ! CONST_OK_FOR_I (INTVAL (operands[1])) ! && ! CONST_OK_FOR_M (INTVAL (operands[1])) ! && ! CONST_OK_FOR_N (INTVAL (operands[1])) ! && GET_CODE (operands[0]) == REG ! && REGNO (operands[0]) == LK_REG)" ! "* return mcore_output_inline_const_forced (insn, operands, SImode);" ! [(set_attr "type" "load")]) - ;; (define_expand "reload_insi" - ;; [(parallel [(match_operand:SI 0 "register_operand" "=r") - ;; (match_operand:SI 1 "general_operand" "") - ;; (match_operand:DI 2 "register_operand" "=&r")])] - ;; "" - ;; " - ;; { - ;; if (CONSTANT_P (operands[1]) - ;; && GET_CODE (operands[1]) == CONST_INT - ;; && ! CONST_OK_FOR_I (INTVAL (operands[1])) - ;; && ! CONST_OK_FOR_M (INTVAL (operands[1])) - ;; && ! CONST_OK_FOR_N (INTVAL (operands[1])) - ;; && GET_CODE (operands[0]) == REG - ;; && (REGNO (operands[0]) == STACK_POINTER_REGNUM - ;; || REGNO (operands[0]) == LK_REG)) - ;; { - ;; rtx tmp; - ;; - ;; if ( REGNO (operands[2]) == REGNO (operands[0]) - ;; || REGNO (operands[2]) == STACK_POINTER_REGNUM - ;; || REGNO (operands[2]) == LK_REG) - ;; tmp = gen_rtx_REG (SImode, REGNO (operands[2]) + 1); - ;; else - ;; tmp = gen_rtx_REG (SImode, REGNO (operands[2])); - ;; - ;; emit_insn (gen_movsi (tmp, operands[1])); - ;; emit_insn (gen_movsi (operands[0], tmp)); - ;; DONE; - ;; } - ;; emit_insn (gen_movsi (operands[0], operands[1])); - ;; DONE; - ;; }" - ;; ) - - - ;; ;; HImode ;; - ;;; ??? This isn't guaranteed to work. It should be more like the SImode - ;;; patterns. - (define_expand "movhi" [(set (match_operand:HI 0 "general_operand" "") (match_operand:HI 1 "general_operand" ""))] --- 1226,1245 ---- { if (GET_CODE (operands[0]) == MEM) operands[1] = force_reg (SImode, operands[1]); }") (define_insn "" ! [(set (match_operand:SI 0 "mcore_general_movdst_operand" "=r,r,a,r,a,r,m") ! (match_operand:SI 1 "mcore_general_movsrc_operand" "r,P,i,c,R,m,r"))] "(register_operand (operands[0], SImode) ! || register_operand (operands[1], SImode))" "* return mcore_output_move (insn, operands, SImode);" ! [(set_attr "type" "move,move,move,move,load,load,store")]) ;; ;; HImode ;; (define_expand "movhi" [(set (match_operand:HI 0 "general_operand" "") (match_operand:HI 1 "general_operand" ""))] *************** *** 1338,1410 **** { rtx reg = gen_reg_rtx (SImode); emit_insn (gen_movsi (reg, operands[1])); ! operands[1] = gen_rtx (SUBREG, HImode, reg, 0); } }") (define_insn "" ! [(set (match_operand:HI 0 "mcore_general_movdst_operand" "=r,r,r,r,r,r,m") ! (match_operand:HI 1 "mcore_general_movsrc_operand" "r,I,M,N,c,m,r"))] "(register_operand (operands[0], HImode) ! || register_operand (operands[1], HImode)) ! && (GET_CODE (operands[1]) != CONST_INT ! || CONST_OK_FOR_M (INTVAL (operands[1])) ! || CONST_OK_FOR_N (INTVAL (operands[1])) ! || CONST_OK_FOR_I (INTVAL (operands[1])))" ! "@ ! mov %0,%1 ! movi %0,%1 ! bgeni %0,%P1 ! bmaski %0,%N1 ! mvc %0 ! ld.h %0,%1 ! st.h %1,%0" ! [(set_attr "type" "move,move,move,move,move,load,store")]) ! ! ;; Like movhi, but the const_int source can't be synthesized in ! ;; a single-instruction. Fall back to the same things that ! ;; are done for movsi in such cases. Presumes that we can ! ;; modify any parts of the register that we wish. ! ! (define_insn "" ! [(set (match_operand:HI 0 "mcore_general_movdst_operand" "=r,a") ! (match_operand:HI 1 "const_int_operand" "P,i"))] ! "GET_CODE (operands[1]) == CONST_INT ! && INTVAL (operands[1]) > 127 && INTVAL (operands[1]) < 65536" ! "* ! { ! if (GET_CODE (operands[0])== REG && REGNO (operands[0]) == 15 ! && !mcore_const_ok_for_inline (INTVAL (operands[1]))) ! { ! /* mcore_output_move would generate lrw r15 -- a forbidden combo */ ! return mcore_output_inline_const_forced (insn, operands, SImode); ! } ! else ! return mcore_output_move (insn, operands, SImode); ! }" ! [(set_attr "type" "move")]) ! ! ! ;; if we're still looking around for things to use, here's a last ! ;; ditch effort that just calls the move. We only let this happen ! ;; if we're in the reload pass. ! ;; ! (define_insn "" ! [(set (match_operand:HI 0 "mcore_general_movdst_operand" "=r,a") ! (match_operand:HI 1 "const_int_operand" "P,i"))] ! "reload_in_progress || reload_completed" ! "* ! { ! if (GET_CODE (operands[0])== REG && REGNO (operands[0]) == 15 ! && !mcore_const_ok_for_inline (INTVAL (operands[1]))) ! { ! /* mcore_output_move would generate lrw r15 -- a forbidden combo */ ! return mcore_output_inline_const_forced (insn, operands, SImode); ! } ! else ! return mcore_output_move (insn, operands, HImode); ! }" ! [(set_attr "type" "move")]) ;; ;; QImode --- 1257,1273 ---- { rtx reg = gen_reg_rtx (SImode); emit_insn (gen_movsi (reg, operands[1])); ! operands[1] = gen_lowpart (HImode, reg); } }") (define_insn "" ! [(set (match_operand:HI 0 "mcore_general_movdst_operand" "=r,r,a,r,r,m") ! (match_operand:HI 1 "mcore_general_movsrc_operand" "r,P,i,c,m,r"))] "(register_operand (operands[0], HImode) ! || register_operand (operands[1], HImode))" ! "* return mcore_output_move (insn, operands, HImode);" ! [(set_attr "type" "move,move,move,move,load,store")]) ;; ;; QImode *************** *** 1427,1493 **** { rtx reg = gen_reg_rtx (SImode); emit_insn (gen_movsi (reg, operands[1])); ! operands[1] = gen_rtx (SUBREG, QImode, reg, 0); } }") (define_insn "" ! [(set (match_operand:QI 0 "mcore_general_movdst_operand" "=r,r,r,r,r,r,m") ! (match_operand:QI 1 "mcore_general_movsrc_operand" "r,I,M,N,c,m,r"))] "(register_operand (operands[0], QImode) ! || register_operand (operands[1], QImode)) ! && (GET_CODE (operands[1]) != CONST_INT ! || CONST_OK_FOR_M (INTVAL (operands[1])) ! || CONST_OK_FOR_N (INTVAL (operands[1])) ! || CONST_OK_FOR_I (INTVAL (operands[1])))" ! "@ ! mov %0,%1 ! movi %0,%1 ! bgeni %0,%P1 ! bmaski %0,%N1 ! mvc %0 ! ld.b %0,%1 ! st.b %1,%0" ! [(set_attr "type" "move,move,move,move,move,load,store")]) - ;; cover the case where the constant is 128..255; this isn't handled - ;; in the above case. We could if we wanted to mess with adding a - ;; new constraint class like M,N,I. - (define_insn "" - [(set (match_operand:QI 0 "mcore_general_movdst_operand" "=r") - (match_operand:QI 1 "const_int_operand" ""))] - "GET_CODE (operands[1]) == CONST_INT - && INTVAL (operands[1]) > 127 && INTVAL (operands[1]) < 256" - "* - { - /* have a constant in range 128..255; have to do 2 insns; we can - * do this with a movi followed by a bseti - */ - operands[2] = GEN_INT (INTVAL (operands[1]) & 0x7f); - return \"movi\\t%0,%2\;bseti\\t%0,7\"; - }" - [(set_attr "type" "move")]) - - ;; if we're still looking around for things to use, here's a last - ;; ditch effort that just calls the move. We only let this happen - ;; if we're in the reload pass. - ;; - (define_insn "" - [(set (match_operand:QI 0 "mcore_general_movdst_operand" "=r,a") - (match_operand:QI 1 "const_int_operand" "P,i"))] - "(reload_in_progress || reload_completed)" - "* - { - if (GET_CODE (operands[0])== REG && REGNO (operands[0]) == 15 - && ! mcore_const_ok_for_inline (INTVAL (operands[1]))) - { - /* mcore_output_move would generate lrw r15 -- a forbidden combo */ - return mcore_output_inline_const_forced (insn, operands, SImode); - } - else - return mcore_output_move (insn, operands, QImode); - }" - [(set_attr "type" "move")]) ;; DImode --- 1290,1307 ---- { rtx reg = gen_reg_rtx (SImode); emit_insn (gen_movsi (reg, operands[1])); ! operands[1] = gen_lowpart (QImode, reg); } }") (define_insn "" ! [(set (match_operand:QI 0 "mcore_general_movdst_operand" "=r,r,a,r,r,m") ! (match_operand:QI 1 "mcore_general_movsrc_operand" "r,P,i,c,m,r"))] "(register_operand (operands[0], QImode) ! || register_operand (operands[1], QImode))" ! "* return mcore_output_move (insn, operands, QImode);" ! [(set_attr "type" "move,move,move,move,load,store")]) ;; DImode *************** *** 1502,1516 **** else if (GET_CODE (operands[1]) == CONST_INT && ! CONST_OK_FOR_I (INTVAL (operands[1])) && ! CONST_OK_FOR_M (INTVAL (operands[1])) ! && ! CONST_OK_FOR_N (INTVAL (operands[1])) ! && ! reload_completed ! && ! reload_in_progress ! && GET_CODE (operands[0]) == REG) { ! emit_move_insn (operand_subword (operands[0], 0, 1, DImode), ! operand_subword_force (operands[1], 0, DImode)); ! emit_move_insn (operand_subword (operands[0], 1, 1, DImode), ! operand_subword_force (operands[1], 1, DImode)); DONE; } }") --- 1316,1327 ---- else if (GET_CODE (operands[1]) == CONST_INT && ! CONST_OK_FOR_I (INTVAL (operands[1])) && ! CONST_OK_FOR_M (INTVAL (operands[1])) ! && ! CONST_OK_FOR_N (INTVAL (operands[1]))) { ! int i; ! for (i = 0; i < UNITS_PER_WORD * 2; i += UNITS_PER_WORD) ! emit_move_insn (simplify_gen_subreg (SImode, operands[0], DImode, i), ! simplify_gen_subreg (SImode, operands[1], DImode, i)); DONE; } }") diff -Nrc3pad gcc-3.3.2/gcc/config/mips/linux.h gcc-3.3.3/gcc/config/mips/linux.h *** gcc-3.3.2/gcc/config/mips/linux.h Thu May 8 17:31:34 2003 --- gcc-3.3.3/gcc/config/mips/linux.h Tue Dec 23 08:58:00 2003 *************** void FN () \ *** 252,254 **** --- 252,261 ---- /* The current Linux binutils uses MIPS_STABS_ELF and doesn't support COFF. */ #undef SDB_DEBUGGING_INFO + + #undef LIB_SPEC + #define LIB_SPEC "\ + %{shared: -lc} \ + %{!static:-rpath-link %R/lib:%R/usr/lib} \ + %{!shared: %{pthread:-lpthread} \ + %{profile:-lc_p} %{!profile: -lc}}" diff -Nrc3pad gcc-3.3.2/gcc/config/rs6000/altivec.h gcc-3.3.3/gcc/config/rs6000/altivec.h *** gcc-3.3.2/gcc/config/rs6000/altivec.h Wed Dec 18 23:43:20 2002 --- gcc-3.3.3/gcc/config/rs6000/altivec.h Tue Dec 16 08:12:28 2003 *************** vec_vcmpgtub (vector unsigned char a1, v *** 1094,1100 **** inline vector signed int vec_cmple (vector float a1, vector float a2) { ! return (vector signed int) __builtin_altivec_vcmpgefp ((vector float) a1, (vector float) a2); } /* vec_cmplt */ --- 1094,1100 ---- inline vector signed int vec_cmple (vector float a1, vector float a2) { ! return (vector signed int) __builtin_altivec_vcmpgefp ((vector float) a2, (vector float) a1); } /* vec_cmplt */ *************** vec_dss (const char a1) *** 1198,1204 **** /* vec_dssall */ inline void ! vec_dssall () { __builtin_altivec_dssall (); } --- 1198,1204 ---- /* vec_dssall */ inline void ! vec_dssall (void) { __builtin_altivec_dssall (); } *************** vec_vmrglb (vector unsigned char a1, vec *** 2419,2425 **** /* vec_mfvscr */ inline vector unsigned short ! vec_mfvscr () { return (vector unsigned short) __builtin_altivec_mfvscr (); } --- 2419,2425 ---- /* vec_mfvscr */ inline vector unsigned short ! vec_mfvscr (void) { return (vector unsigned short) __builtin_altivec_mfvscr (); } *************** vec_all_nlt (vector float a1, vector flo *** 5526,5532 **** inline int vec_all_numeric (vector float a1) { ! return __builtin_altivec_vcmpeqfp_p (__CR6_EQ, a1, a1); } /* vec_any_eq */ --- 5526,5532 ---- inline int vec_all_numeric (vector float a1) { ! return __builtin_altivec_vcmpeqfp_p (__CR6_LT, a1, a1); } /* vec_any_eq */ *************** __ch (__bin_args_eq (vector unsigned cha *** 6521,6527 **** ((vector signed char) __builtin_altivec_vcmpgtub ((vector signed char) (a1), (vector signed char) (a2))), \ __altivec_link_error_invalid_argument ()) ! #define vec_cmple(a1, a2) __builtin_altivec_vcmpgefp ((a1), (a2)) #define vec_cmplt(a2, a1) \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ --- 6521,6527 ---- ((vector signed char) __builtin_altivec_vcmpgtub ((vector signed char) (a1), (vector signed char) (a2))), \ __altivec_link_error_invalid_argument ()) ! #define vec_cmple(a1, a2) __builtin_altivec_vcmpgefp ((a2), (a1)) #define vec_cmplt(a2, a1) \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ *************** __ch (__bin_args_eq (vector float, (a1), *** 8343,8349 **** #define vec_all_nlt(a1, a2) __builtin_altivec_vcmpgtfp_p (__CR6_EQ, (a2), (a1)) ! #define vec_all_numeric(a1) __builtin_altivec_vcmpeqfp_p (__CR6_EQ, (a1), (a1)) #define vec_any_eq(a1, a2) \ __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ --- 8343,8349 ---- #define vec_all_nlt(a1, a2) __builtin_altivec_vcmpgtfp_p (__CR6_EQ, (a2), (a1)) ! #define vec_all_numeric(a1) __builtin_altivec_vcmpeqfp_p (__CR6_LT, (a1), (a1)) #define vec_any_eq(a1, a2) \ __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ diff -Nrc3pad gcc-3.3.2/gcc/config/rs6000/altivec.md gcc-3.3.3/gcc/config/rs6000/altivec.md *** gcc-3.3.2/gcc/config/rs6000/altivec.md Mon Dec 23 22:10:58 2002 --- gcc-3.3.3/gcc/config/rs6000/altivec.md Fri Dec 5 03:53:04 2003 *************** *** 538,544 **** (match_operand:V16QI 2 "register_operand" "v") (match_operand:V4SI 3 "register_operand" "v")] 66))] "TARGET_ALTIVEC" ! "vmsumubm %0, %1, %2, %3" [(set_attr "type" "veccomplex")]) (define_insn "altivec_vmsumuhm" --- 538,544 ---- (match_operand:V16QI 2 "register_operand" "v") (match_operand:V4SI 3 "register_operand" "v")] 66))] "TARGET_ALTIVEC" ! "vmsummbm %0, %1, %2, %3" [(set_attr "type" "veccomplex")]) (define_insn "altivec_vmsumuhm" diff -Nrc3pad gcc-3.3.2/gcc/config/rs6000/linux.h gcc-3.3.3/gcc/config/rs6000/linux.h *** gcc-3.3.2/gcc/config/rs6000/linux.h Tue Sep 16 15:39:23 2003 --- gcc-3.3.3/gcc/config/rs6000/linux.h Fri Nov 14 06:46:10 2003 *************** Boston, MA 02111-1307, USA. */ *** 82,87 **** --- 82,94 ---- #undef DRAFT_V4_STRUCT_RET #define DRAFT_V4_STRUCT_RET 1 + #define ASM_FILE_END(FILE) \ + do { \ + named_section_flags (".note.GNU-stack", \ + SECTION_DEBUG \ + | (trampolines_created ? SECTION_CODE : 0)); \ + } while (0) + /* Do code reading to identify a signal frame, and set the frame state data appropriately. See unwind-dw2.c for the structs. */ diff -Nrc3pad gcc-3.3.2/gcc/config/rs6000/linux64.h gcc-3.3.3/gcc/config/rs6000/linux64.h *** gcc-3.3.2/gcc/config/rs6000/linux64.h Tue Sep 16 15:39:23 2003 --- gcc-3.3.3/gcc/config/rs6000/linux64.h Fri Nov 14 06:46:10 2003 *************** while (0) *** 388,390 **** --- 388,399 ---- #undef ASM_PREFERRED_EH_DATA_FORMAT #define ASM_PREFERRED_EH_DATA_FORMAT(CODE, GLOBAL) \ (((GLOBAL) ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel | DW_EH_PE_udata8) + + #define ASM_FILE_END(FILE) \ + do { \ + if (! TARGET_64BIT) \ + named_section_flags (".note.GNU-stack", \ + SECTION_DEBUG \ + | (trampolines_created ? SECTION_CODE : 0)); \ + } while (0) + diff -Nrc3pad gcc-3.3.2/gcc/config/rs6000/rs6000.c gcc-3.3.3/gcc/config/rs6000/rs6000.c *** gcc-3.3.2/gcc/config/rs6000/rs6000.c Wed Sep 24 02:55:49 2003 --- gcc-3.3.3/gcc/config/rs6000/rs6000.c Wed Jan 14 14:03:58 2004 *************** rs6000_stack_info () *** 9190,9205 **** else info_ptr->spe_gp_size = 0; ! if (TARGET_ALTIVEC_ABI && TARGET_ALTIVEC_VRSAVE) ! { ! info_ptr->vrsave_mask = compute_vrsave_mask (); ! info_ptr->vrsave_size = info_ptr->vrsave_mask ? 4 : 0; ! } else ! { ! info_ptr->vrsave_mask = 0; ! info_ptr->vrsave_size = 0; ! } /* Calculate the offsets. */ switch (abi) --- 9190,9204 ---- else info_ptr->spe_gp_size = 0; ! if (TARGET_ALTIVEC_ABI) ! info_ptr->vrsave_mask = compute_vrsave_mask (); else ! info_ptr->vrsave_mask = 0; ! ! if (TARGET_ALTIVEC_VRSAVE && info_ptr->vrsave_mask) ! info_ptr->vrsave_size = 4; ! else ! info_ptr->vrsave_size = 0; /* Calculate the offsets. */ switch (abi) *************** rs6000_emit_prologue () *** 10351,10357 **** used in this function, and do the corresponding magic in the epilogue. */ ! if (TARGET_ALTIVEC && info->vrsave_mask != 0) { rtx reg, mem, vrsave; int offset; --- 10350,10357 ---- used in this function, and do the corresponding magic in the epilogue. */ ! if (TARGET_ALTIVEC && TARGET_ALTIVEC_VRSAVE ! && info->vrsave_mask != 0) { rtx reg, mem, vrsave; int offset; *************** rs6000_emit_epilogue (sibcall) *** 10792,10798 **** } /* Restore VRSAVE if needed. */ ! if (TARGET_ALTIVEC_ABI && info->vrsave_mask != 0) { rtx addr, mem, reg; --- 10792,10799 ---- } /* Restore VRSAVE if needed. */ ! if (TARGET_ALTIVEC_ABI && TARGET_ALTIVEC_VRSAVE ! && info->vrsave_mask != 0) { rtx addr, mem, reg; *************** rs6000_elf_section_type_flags (decl, nam *** 13138,13151 **** const char *name; int reloc; { ! unsigned int flags ! = default_section_type_flags_1 (decl, name, reloc, ! flag_pic || DEFAULT_ABI == ABI_AIX); ! ! if (TARGET_RELOCATABLE) ! flags |= SECTION_WRITE; ! ! return flags; } /* Record an element in the table of global constructors. SYMBOL is --- 13139,13146 ---- const char *name; int reloc; { ! return default_section_type_flags_1 (decl, name, reloc, ! flag_pic || DEFAULT_ABI == ABI_AIX); } /* Record an element in the table of global constructors. SYMBOL is diff -Nrc3pad gcc-3.3.2/gcc/config/rs6000/rs6000.h gcc-3.3.3/gcc/config/rs6000/rs6000.h *** gcc-3.3.2/gcc/config/rs6000/rs6000.h Wed Jun 18 06:21:37 2003 --- gcc-3.3.3/gcc/config/rs6000/rs6000.h Mon Feb 2 04:40:49 2004 *************** typedef struct rs6000_args *** 1993,2001 **** acceptable. */ #define LEGITIMATE_CONSTANT_P(X) \ ! (GET_CODE (X) != CONST_DOUBLE || GET_MODE (X) == VOIDmode \ ! || (TARGET_POWERPC64 && GET_MODE (X) == DImode) \ ! || easy_fp_constant (X, GET_MODE (X))) /* The macros REG_OK_FOR..._P assume that the arg is a REG rtx and check its validity for a certain class. --- 1993,2003 ---- acceptable. */ #define LEGITIMATE_CONSTANT_P(X) \ ! ((GET_CODE (X) != CONST_VECTOR \ ! || zero_constant (X, GET_MODE (X))) \ ! && (GET_CODE (X) != CONST_DOUBLE || GET_MODE (X) == VOIDmode \ ! || (TARGET_POWERPC64 && GET_MODE (X) == DImode) \ ! || easy_fp_constant (X, GET_MODE (X)))) /* The macros REG_OK_FOR..._P assume that the arg is a REG rtx and check its validity for a certain class. *************** typedef struct rs6000_args *** 2108,2115 **** (GET_CODE (X) == REG && INT_REG_OK_FOR_BASE_P (X, (STRICT))) #define LEGITIMATE_LO_SUM_ADDRESS_P(MODE, X, STRICT) \ ! (TARGET_ELF \ ! && ! flag_pic && ! TARGET_TOC \ && GET_MODE_NUNITS (MODE) == 1 \ && (GET_MODE_BITSIZE (MODE) <= 32 \ || (TARGET_HARD_FLOAT && TARGET_FPRS && (MODE) == DFmode)) \ --- 2110,2117 ---- (GET_CODE (X) == REG && INT_REG_OK_FOR_BASE_P (X, (STRICT))) #define LEGITIMATE_LO_SUM_ADDRESS_P(MODE, X, STRICT) \ ! (((TARGET_ELF && ! flag_pic) || TARGET_MACHO) \ ! && ! TARGET_TOC \ && GET_MODE_NUNITS (MODE) == 1 \ && (GET_MODE_BITSIZE (MODE) <= 32 \ || (TARGET_HARD_FLOAT && TARGET_FPRS && (MODE) == DFmode)) \ diff -Nrc3pad gcc-3.3.2/gcc/config/rs6000/sysv4.h gcc-3.3.3/gcc/config/rs6000/sysv4.h *** gcc-3.3.2/gcc/config/rs6000/sysv4.h Tue Jun 17 15:59:10 2003 --- gcc-3.3.3/gcc/config/rs6000/sysv4.h Tue Oct 28 19:55:41 2003 *************** do { \ *** 383,388 **** --- 383,403 ---- #undef STACK_BOUNDARY #define STACK_BOUNDARY (TARGET_ALTIVEC_ABI ? 128 : 64) + /* Define this macro if you wish to preserve a certain alignment for + the stack pointer, greater than what the hardware enforces. The + definition is a C expression for the desired alignment (measured + in bits). This macro must evaluate to a value equal to or larger + than STACK_BOUNDARY. + For the SYSV ABI and variants the alignment of the stack pointer + is usually controlled manually in rs6000.c. However, to maintain + alignment across alloca () in all circumstances, + PREFERRED_STACK_BOUNDARY needs to be set as well. + This has the additional advantage of allowing a bigger maximum + alignment of user objects on the stack. */ + + #undef PREFERRED_STACK_BOUNDARY + #define PREFERRED_STACK_BOUNDARY 128 + /* Real stack boundary as mandated by the appropriate ABI. */ #define ABI_STACK_BOUNDARY ((TARGET_EABI && !TARGET_ALTIVEC_ABI) ? 64 : 128) diff -Nrc3pad gcc-3.3.2/gcc/config/s390/linux.h gcc-3.3.3/gcc/config/s390/linux.h *** gcc-3.3.2/gcc/config/s390/linux.h Thu Nov 21 12:03:49 2002 --- gcc-3.3.3/gcc/config/s390/linux.h Fri Nov 14 06:46:10 2003 *************** Boston, MA 02111-1307, USA. */ *** 122,127 **** --- 122,133 ---- { "link_arch31", LINK_ARCH31_SPEC }, \ { "link_arch64", LINK_ARCH64_SPEC }, \ + #define ASM_FILE_END(FILE) \ + do { \ + named_section_flags (".note.GNU-stack", \ + SECTION_DEBUG \ + | (trampolines_created ? SECTION_CODE : 0)); \ + } while (0) /* Do code reading to identify a signal frame, and set the frame state data appropriately. See unwind-dw2.c for the structs. */ diff -Nrc3pad gcc-3.3.2/gcc/config/s390/s390-protos.h gcc-3.3.3/gcc/config/s390/s390-protos.h *** gcc-3.3.2/gcc/config/s390/s390-protos.h Fri Jun 27 21:15:32 2003 --- gcc-3.3.3/gcc/config/s390/s390-protos.h Thu Nov 6 21:53:06 2003 *************** extern void s390_output_constant_pool PA *** 79,84 **** --- 79,85 ---- extern void s390_trampoline_template PARAMS ((FILE *)); extern void s390_initialize_trampoline PARAMS ((rtx, rtx, rtx)); extern rtx s390_gen_rtx_const_DI PARAMS ((int, int)); + extern void s390_output_dwarf_dtprel PARAMS ((FILE *, int, rtx)); extern rtx s390_simplify_dwarf_addr PARAMS ((rtx)); extern void s390_machine_dependent_reorg PARAMS ((rtx)); #endif /* RTX_CODE */ diff -Nrc3pad gcc-3.3.2/gcc/config/s390/s390.c gcc-3.3.3/gcc/config/s390/s390.c *** gcc-3.3.2/gcc/config/s390/s390.c Fri Jun 27 21:15:32 2003 --- gcc-3.3.3/gcc/config/s390/s390.c Thu Nov 6 21:53:06 2003 *************** s390_expand_cmpstr (target, op0, op1, le *** 2943,2948 **** --- 2943,2972 ---- #endif } + /* This is called from dwarf2out.c via ASM_OUTPUT_DWARF_DTPREL. + We need to emit DTP-relative relocations. */ + + void + s390_output_dwarf_dtprel (file, size, x) + FILE *file; + int size; + rtx x; + { + switch (size) + { + case 4: + fputs ("\t.long\t", file); + break; + case 8: + fputs ("\t.quad\t", file); + break; + default: + abort (); + } + output_addr_const (file, x); + fputs ("@DTPOFF", file); + } + /* In the name of slightly smaller debug output, and to cater to general assembler losage, recognize various UNSPEC sequences and turn them back into a direct symbol reference. */ *************** s390_function_arg_pass_by_reference (mod *** 5594,5599 **** --- 5618,5625 ---- tree type; { int size = s390_function_arg_size (mode, type); + if (size > 8) + return 1; if (type) { *************** s390_function_arg_pass_by_reference (mod *** 5601,5607 **** size != 1 && size != 2 && size != 4 && size != 8) return 1; ! if (TREE_CODE (type) == COMPLEX_TYPE) return 1; } return 0; --- 5627,5634 ---- size != 1 && size != 2 && size != 4 && size != 8) return 1; ! if (TREE_CODE (type) == COMPLEX_TYPE ! || TREE_CODE (type) == VECTOR_TYPE) return 1; } return 0; diff -Nrc3pad gcc-3.3.2/gcc/config/s390/s390.h gcc-3.3.3/gcc/config/s390/s390.h *** gcc-3.3.2/gcc/config/s390/s390.h Fri Jun 27 21:15:33 2003 --- gcc-3.3.3/gcc/config/s390/s390.h Thu Nov 6 21:53:07 2003 *************** CUMULATIVE_ARGS; *** 639,646 **** a scalar value cannot be returned in registers. */ #define RETURN_IN_MEMORY(type) \ (TYPE_MODE (type) == BLKmode || \ GET_MODE_CLASS (TYPE_MODE (type)) == MODE_COMPLEX_INT || \ ! GET_MODE_CLASS (TYPE_MODE (type)) == MODE_COMPLEX_FLOAT) /* Structure value address is passed as invisible first argument (gpr 2). */ #define STRUCT_VALUE 0 --- 639,649 ---- a scalar value cannot be returned in registers. */ #define RETURN_IN_MEMORY(type) \ (TYPE_MODE (type) == BLKmode || \ + GET_MODE_SIZE (TYPE_MODE (type)) > 8 || \ GET_MODE_CLASS (TYPE_MODE (type)) == MODE_COMPLEX_INT || \ ! GET_MODE_CLASS (TYPE_MODE (type)) == MODE_COMPLEX_FLOAT || \ ! GET_MODE_CLASS (TYPE_MODE (type)) == MODE_VECTOR_INT || \ ! GET_MODE_CLASS (TYPE_MODE (type)) == MODE_VECTOR_FLOAT) /* Structure value address is passed as invisible first argument (gpr 2). */ #define STRUCT_VALUE 0 *************** extern int flag_pic; *** 980,985 **** --- 983,994 ---- "%ap", "%cc", "%fp" \ } + /* Emit a dtp-relative reference to a TLS variable. */ + #ifdef HAVE_AS_TLS + #define ASM_OUTPUT_DWARF_DTPREL(FILE, SIZE, X) \ + s390_output_dwarf_dtprel (FILE, SIZE, X) + #endif + /* Print operand X (an rtx) in assembler syntax to file FILE. */ #define PRINT_OPERAND(FILE, X, CODE) print_operand (FILE, X, CODE) #define PRINT_OPERAND_ADDRESS(FILE, ADDR) print_operand_address (FILE, ADDR) diff -Nrc3pad gcc-3.3.2/gcc/config/s390/s390.md gcc-3.3.3/gcc/config/s390/s390.md *** gcc-3.3.2/gcc/config/s390/s390.md Fri Jun 27 21:15:34 2003 --- gcc-3.3.3/gcc/config/s390/s390.md Wed Dec 17 21:54:12 2003 *************** *** 1952,1961 **** (use (match_dup 2)) (use (match_dup 3))] "TARGET_64BIT" ! "clcl\\t%0,%1" ! [(set_attr "op_type" "RR") (set_attr "atype" "mem") ! (set_attr "type" "vs")]) (define_insn "cmpstr_long_31" [(clobber (match_operand:DI 0 "register_operand" "=d")) --- 1952,1962 ---- (use (match_dup 2)) (use (match_dup 3))] "TARGET_64BIT" ! "clcle\\t%0,%1,0\;jo\\t.-4" ! [(set_attr "op_type" "NN") (set_attr "atype" "mem") ! (set_attr "type" "vs") ! (set_attr "length" "8")]) (define_insn "cmpstr_long_31" [(clobber (match_operand:DI 0 "register_operand" "=d")) *************** *** 1966,1975 **** (use (match_dup 2)) (use (match_dup 3))] "!TARGET_64BIT" ! "clcl\\t%0,%1" ! [(set_attr "op_type" "RR") (set_attr "atype" "mem") ! (set_attr "type" "vs")]) ; Convert condition code to integer in range (-1, 0, 1) --- 1967,1977 ---- (use (match_dup 2)) (use (match_dup 3))] "!TARGET_64BIT" ! "clcle\\t%0,%1,0\;jo\\t.-4" ! [(set_attr "op_type" "NN") (set_attr "atype" "mem") ! (set_attr "type" "vs") ! (set_attr "length" "8")]) ; Convert condition code to integer in range (-1, 0, 1) *************** *** 1997,2009 **** "* { output_asm_insn (\"lghi\\t%0,1\", operands); ! output_asm_insn (\"jh\\t.+12\", operands); ! output_asm_insn (\"jl\\t.+6\", operands); output_asm_insn (\"sgr\\t%0,%0\", operands); return \"lcgr\\t%0,%0\"; }" [(set_attr "op_type" "NN") ! (set_attr "length" "22") (set_attr "atype" "reg") (set_attr "type" "other")]) --- 1999,2011 ---- "* { output_asm_insn (\"lghi\\t%0,1\", operands); ! output_asm_insn (\"jh\\t.+16\", operands); ! output_asm_insn (\"jl\\t.+8\", operands); output_asm_insn (\"sgr\\t%0,%0\", operands); return \"lcgr\\t%0,%0\"; }" [(set_attr "op_type" "NN") ! (set_attr "length" "20") (set_attr "atype" "reg") (set_attr "type" "other")]) diff -Nrc3pad gcc-3.3.2/gcc/config/sh/libgcc-glibc.ver gcc-3.3.3/gcc/config/sh/libgcc-glibc.ver *** gcc-3.3.2/gcc/config/sh/libgcc-glibc.ver Thu Jan 1 00:00:00 1970 --- gcc-3.3.3/gcc/config/sh/libgcc-glibc.ver Tue Dec 2 05:33:16 2003 *************** *** 0 **** --- 1,21 ---- + # In order to work around the very problems that force us to now generally + # create a libgcc.so, glibc reexported a number of routines from libgcc.a. + # By now choosing the same version tags for these specific routines, we + # maintain enough binary compatibility to allow future versions of glibc + # to defer implementation of these routines to libgcc.so via DT_AUXILIARY. + + # Note that we cannot use the default libgcc-glibc.ver file on sh, + # because GLIBC_2.0 does not exist on this architecture, as the first + # ever glibc release on the platform was GLIBC_2.2. + + %inherit GCC_3.0 GLIBC_2.2 + GLIBC_2.2 { + __register_frame + __register_frame_table + __deregister_frame + __register_frame_info + __deregister_frame_info + __frame_state_for + __register_frame_info_table + } + diff -Nrc3pad gcc-3.3.2/gcc/config/sh/linux.h gcc-3.3.3/gcc/config/sh/linux.h *** gcc-3.3.2/gcc/config/sh/linux.h Tue Sep 16 15:39:23 2003 --- gcc-3.3.3/gcc/config/sh/linux.h Thu Nov 6 23:13:33 2003 *************** do { \ *** 59,64 **** --- 59,65 ---- #define LIB_SPEC \ "%{pthread:-lpthread} \ %{shared: -lc} \ + %{!static:-rpath-link %R/lib:%R/usr/lib} \ %{!shared: \ %{mieee-fp:-lieee} \ %{profile:-lc_p} %{!profile: -lc}}" diff -Nrc3pad gcc-3.3.2/gcc/config/sh/netbsd-elf.h gcc-3.3.3/gcc/config/sh/netbsd-elf.h *** gcc-3.3.2/gcc/config/sh/netbsd-elf.h Sun Aug 11 19:24:09 2002 --- gcc-3.3.3/gcc/config/sh/netbsd-elf.h Fri Dec 5 04:42:05 2003 *************** Boston, MA 02111-1307, USA. */ *** 95,100 **** --- 95,102 ---- #define TARGET_DEFAULT \ (TARGET_CPU_DEFAULT | USERMODE_BIT | TARGET_ENDIAN_DEFAULT) + /* Define because we use the label and we do not need them. */ + #define NO_PROFILE_COUNTERS #undef FUNCTION_PROFILER #define FUNCTION_PROFILER(STREAM,LABELNO) \ diff -Nrc3pad gcc-3.3.2/gcc/config/sh/rtems.h gcc-3.3.3/gcc/config/sh/rtems.h *** gcc-3.3.2/gcc/config/sh/rtems.h Fri Apr 12 13:35:01 2002 --- gcc-3.3.3/gcc/config/sh/rtems.h Sat Jan 10 00:02:24 2004 *************** *** 2,26 **** Copyright (C) 1997, 1998, 2000, 2002 Free Software Foundation, Inc. Contributed by Joel Sherrill (joel@OARcorp.com). ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Specify predefined symbols in preprocessor. */ ! #undef CPP_PREDEFINES ! #define CPP_PREDEFINES "-D__sh__ -D__rtems__ \ ! -Asystem=rtems -Acpu=sh -Amachine=sh" --- 2,27 ---- Copyright (C) 1997, 1998, 2000, 2002 Free Software Foundation, Inc. Contributed by Joel Sherrill (joel@OARcorp.com). ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Specify predefined symbols in preprocessor. */ ! #define TARGET_OS_CPP_BUILTINS() do { \ ! builtin_define( "__rtems__" ); \ ! builtin_assert( "system=rtems" ); \ ! } while (0) diff -Nrc3pad gcc-3.3.2/gcc/config/sh/rtemself.h gcc-3.3.3/gcc/config/sh/rtemself.h *** gcc-3.3.2/gcc/config/sh/rtemself.h Fri Apr 12 13:35:01 2002 --- gcc-3.3.3/gcc/config/sh/rtemself.h Sat Jan 10 00:02:25 2004 *************** *** 2,26 **** Copyright (C) 1997, 1998, 2000, 2002 Free Software Foundation, Inc. Contributed by Joel Sherrill (joel@OARcorp.com). ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Specify predefined symbols in preprocessor. */ ! #undef CPP_PREDEFINES ! #define CPP_PREDEFINES "-D__sh__ -D__ELF__ -D__rtems__ \ ! -Asystem=rtems -Acpu=sh -Amachine=sh" --- 2,27 ---- Copyright (C) 1997, 1998, 2000, 2002 Free Software Foundation, Inc. Contributed by Joel Sherrill (joel@OARcorp.com). ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Specify predefined symbols in preprocessor. */ ! #define TARGET_OS_CPP_BUILTINS() do { \ ! builtin_define( "__rtems__" ); \ ! builtin_assert( "system=rtems" ); \ ! } while (0) diff -Nrc3pad gcc-3.3.2/gcc/config/sh/sh-protos.h gcc-3.3.3/gcc/config/sh/sh-protos.h *** gcc-3.3.2/gcc/config/sh/sh-protos.h Fri Jan 31 23:51:23 2003 --- gcc-3.3.3/gcc/config/sh/sh-protos.h Mon Jan 12 17:03:24 2004 *************** *** 1,5 **** /* Definitions of target machine for GNU compiler for Hitachi / SuperH SH. ! Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. Contributed by Steve Chamberlain (sac@cygnus.com). Improved by Jim Wilson (wilson@cygnus.com). --- 1,5 ---- /* Definitions of target machine for GNU compiler for Hitachi / SuperH SH. ! Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2004 Free Software Foundation, Inc. Contributed by Steve Chamberlain (sac@cygnus.com). Improved by Jim Wilson (wilson@cygnus.com). *************** extern bool sh_cannot_change_mode_class *** 131,136 **** --- 131,137 ---- extern void sh_mark_label PARAMS ((rtx, int)); extern int sh_register_move_cost PARAMS ((enum machine_mode mode, enum reg_class, enum reg_class)); + extern int check_use_sfunc_addr (rtx, rtx); #ifdef HARD_CONST extern void fpscr_set_from_mem PARAMS ((int, HARD_REG_SET)); diff -Nrc3pad gcc-3.3.2/gcc/config/sh/sh.c gcc-3.3.3/gcc/config/sh/sh.c *** gcc-3.3.2/gcc/config/sh/sh.c Wed Jun 25 17:38:01 2003 --- gcc-3.3.3/gcc/config/sh/sh.c Wed Jan 14 18:11:36 2004 *************** *** 1,6 **** /* Output routines for GCC for Hitachi / SuperH SH. ! Copyright (C) 1993, 1994, 1995, 1997, 1997, 1998, 1999, 2000, 2001, 2002 ! Free Software Foundation, Inc. Contributed by Steve Chamberlain (sac@cygnus.com). Improved by Jim Wilson (wilson@cygnus.com). --- 1,6 ---- /* Output routines for GCC for Hitachi / SuperH SH. ! Copyright (C) 1993, 1994, 1995, 1997, 1997, 1998, 1999, 2000, 2001, 2002, ! 2004 Free Software Foundation, Inc. Contributed by Steve Chamberlain (sac@cygnus.com). Improved by Jim Wilson (wilson@cygnus.com). *************** gen_block_redirect (jump, addr, need_blo *** 3065,3070 **** --- 3065,3078 ---- else if (recog_memoized (prev) == CODE_FOR_block_branch_redirect) need_block = 0; } + if (GET_CODE (PATTERN (jump)) == RETURN) + { + if (! need_block) + return prev; + /* Reorg even does nasty things with return insns that cause branches + to go out of range - see find_end_label and callers. */ + return emit_insn_before (gen_block_branch_redirect (GEN_INT (0)) , jump); + } /* We can't use JUMP_LABEL here because it might be undefined when not optimizing. */ dest = XEXP (SET_SRC (PATTERN (jump)), 0); *************** gen_far_branch (bp) *** 3233,3243 **** JUMP_LABEL (jump) = bp->far_label; if (! invert_jump (insn, label, 1)) abort (); ! (emit_insn_after ! (gen_stuff_delay_slot ! (GEN_INT (INSN_UID (XEXP (SET_SRC (PATTERN (jump)), 0))), ! GEN_INT (recog_memoized (insn) == CODE_FOR_branch_false)), ! insn)); /* Prevent reorg from undoing our splits. */ gen_block_redirect (jump, bp->address += 2, 2); } --- 3241,3256 ---- JUMP_LABEL (jump) = bp->far_label; if (! invert_jump (insn, label, 1)) abort (); ! /* If we are branching around a jump (rather than a return), prevent ! reorg from using an insn from the jump target as the delay slot insn - ! when reorg did this, it pessimized code (we rather hide the delay slot) ! and it could cause branches to go out of range. */ ! if (bp->far_label) ! (emit_insn_after ! (gen_stuff_delay_slot ! (GEN_INT (INSN_UID (XEXP (SET_SRC (PATTERN (jump)), 0))), ! GEN_INT (recog_memoized (insn) == CODE_FOR_branch_false)), ! insn)); /* Prevent reorg from undoing our splits. */ gen_block_redirect (jump, bp->address += 2, 2); } *************** sh_build_va_list () *** 5238,5244 **** if (TARGET_SH5 || (! TARGET_SH3E && ! TARGET_SH4) || TARGET_HITACHI) return ptr_type_node; ! record = make_node (RECORD_TYPE); f_next_o = build_decl (FIELD_DECL, get_identifier ("__va_next_o"), ptr_type_node); --- 5251,5257 ---- if (TARGET_SH5 || (! TARGET_SH3E && ! TARGET_SH4) || TARGET_HITACHI) return ptr_type_node; ! record = (*lang_hooks.types.make_type) (RECORD_TYPE); f_next_o = build_decl (FIELD_DECL, get_identifier ("__va_next_o"), ptr_type_node); *************** sh_register_operand (op, mode) *** 7857,7860 **** --- 7870,7920 ---- return register_operand (op, mode); } + /* INSN is an sfunc; return the rtx that describes the address used. */ + static rtx + extract_sfunc_addr (rtx insn) + { + rtx pattern, part = NULL_RTX; + int len, i; + + pattern = PATTERN (insn); + len = XVECLEN (pattern, 0); + for (i = 0; i < len; i++) + { + part = XVECEXP (pattern, 0, i); + if (GET_CODE (part) == USE && GET_MODE (XEXP (part, 0)) == Pmode + && GENERAL_REGISTER_P (true_regnum (XEXP (part, 0)))) + return XEXP (part, 0); + } + if (GET_CODE (XVECEXP (pattern, 0, 0)) == UNSPEC_VOLATILE) + return XVECEXP (XVECEXP (pattern, 0, 0), 0, 1); + abort (); + } + + /* Verify that the register in use_sfunc_addr still agrees with the address + used in the sfunc. This prevents fill_slots_from_thread from changing + use_sfunc_addr. + INSN is the use_sfunc_addr instruction, and REG is the register it + guards. */ + int + check_use_sfunc_addr (rtx insn, rtx reg) + { + /* Search for the sfunc. It should really come right after INSN. */ + while ((insn = NEXT_INSN (insn))) + { + if (GET_CODE (insn) == CODE_LABEL || GET_CODE (insn) == JUMP_INSN) + break; + if (! INSN_P (insn)) + continue; + + if (GET_CODE (PATTERN (insn)) == SEQUENCE) + insn = XVECEXP (PATTERN (insn), 0, 0); + if (GET_CODE (PATTERN (insn)) != PARALLEL + || get_attr_type (insn) != TYPE_SFUNC) + continue; + return rtx_equal_p (extract_sfunc_addr (insn), reg); + } + abort (); + } + #include "gt-sh.h" diff -Nrc3pad gcc-3.3.2/gcc/config/sh/sh.md gcc-3.3.3/gcc/config/sh/sh.md *** gcc-3.3.2/gcc/config/sh/sh.md Tue Apr 15 17:06:10 2003 --- gcc-3.3.3/gcc/config/sh/sh.md Mon Jan 12 17:03:25 2004 *************** *** 1,6 **** ;;- Machine description for Hitachi / SuperH SH. ! ;; Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 ! ;; Free Software Foundation, Inc. ;; Contributed by Steve Chamberlain (sac@cygnus.com). ;; Improved by Jim Wilson (wilson@cygnus.com). --- 1,6 ---- ;;- Machine description for Hitachi / SuperH SH. ! ;; Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, ! ;; 2004 Free Software Foundation, Inc. ;; Contributed by Steve Chamberlain (sac@cygnus.com). ;; Improved by Jim Wilson (wilson@cygnus.com). *************** *** 1220,1226 **** (define_insn "use_sfunc_addr" [(set (reg:SI PR_REG) (unspec:SI [(match_operand:SI 0 "register_operand" "r")] UNSPEC_SFUNC))] ! "TARGET_SH1" "" [(set_attr "length" "0")]) --- 1220,1226 ---- (define_insn "use_sfunc_addr" [(set (reg:SI PR_REG) (unspec:SI [(match_operand:SI 0 "register_operand" "r")] UNSPEC_SFUNC))] ! "TARGET_SH1 && check_use_sfunc_addr (insn, operands[0])" "" [(set_attr "length" "0")]) diff -Nrc3pad gcc-3.3.2/gcc/config/sh/t-linux gcc-3.3.3/gcc/config/sh/t-linux *** gcc-3.3.2/gcc/config/sh/t-linux Fri Jun 6 02:30:59 2003 --- gcc-3.3.3/gcc/config/sh/t-linux Tue Dec 2 05:33:16 2003 *************** MULTILIB_MATCHES = *** 12,14 **** --- 12,38 ---- MULTILIB_EXCEPTIONS= EXTRA_MULTILIB_PARTS= crtbegin.o crtend.o crtbeginS.o crtendS.o + + # Override t-slibgcc-elf-ver to export some libgcc symbols with + # the symbol versions that glibc used. + SHLIB_MAPFILES = $(srcdir)/libgcc-std.ver $(srcdir)/config/sh/libgcc-glibc.ver + + # Override SHLIB_LINK and SHLIB_INSTALL to use linker script + # libgcc_s.so. + SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \ + -Wl,--soname=$(SHLIB_SONAME) \ + -Wl,--version-script=$(SHLIB_MAP) \ + -o $(SHLIB_NAME) @multilib_flags@ $(SHLIB_OBJS) $(SHLIB_LC) && \ + rm -f $(SHLIB_SOLINK) && \ + (echo "/* GNU ld script"; \ + echo " Use the shared library, but some functions are only in"; \ + echo " the static library. */"; \ + echo "GROUP ( $(SHLIB_SONAME) libgcc.a )" \ + ) > $(SHLIB_SOLINK) + SHLIB_INSTALL = \ + $$(SHELL) $$(srcdir)/mkinstalldirs $$(slibdir)$(SHLIB_SLIBDIR_QUAL); \ + $(INSTALL_DATA) $(SHLIB_NAME) \ + $$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SONAME); \ + rm -f $$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK); \ + $(INSTALL_DATA) $(SHLIB_SOLINK) \ + $$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK) diff -Nrc3pad gcc-3.3.2/gcc/config/sol2.h gcc-3.3.3/gcc/config/sol2.h *** gcc-3.3.2/gcc/config/sol2.h Thu Jun 20 11:03:37 2002 --- gcc-3.3.3/gcc/config/sol2.h Thu Dec 18 20:12:48 2003 *************** Boston, MA 02111-1307, USA. */ *** 114,121 **** #undef STARTFILE_ARCH_SPEC #define STARTFILE_ARCH_SPEC STARTFILE_ARCH32_SPEC ! #undef LINK_ARCH32_SPEC ! #define LINK_ARCH32_SPEC \ "%{G:-G} \ %{YP,*} \ %{R*} \ --- 114,121 ---- #undef STARTFILE_ARCH_SPEC #define STARTFILE_ARCH_SPEC STARTFILE_ARCH32_SPEC ! #undef LINK_ARCH32_SPEC_BASE ! #define LINK_ARCH32_SPEC_BASE \ "%{G:-G} \ %{YP,*} \ %{R*} \ *************** Boston, MA 02111-1307, USA. */ *** 127,132 **** --- 127,135 ---- %{!YP,*:%{p|pg:-Y P,/usr/ccs/lib/libp:/usr/lib/libp:/usr/ccs/lib:/usr/lib} \ %{!p:%{!pg:-Y P,/usr/ccs/lib:/usr/lib}}}}" + #undef LINK_ARCH32_SPEC + #define LINK_ARCH32_SPEC LINK_ARCH32_SPEC_BASE + #undef LINK_ARCH_SPEC #define LINK_ARCH_SPEC LINK_ARCH32_SPEC diff -Nrc3pad gcc-3.3.2/gcc/config/sparc/freebsd.h gcc-3.3.3/gcc/config/sparc/freebsd.h *** gcc-3.3.2/gcc/config/sparc/freebsd.h Thu May 22 04:03:08 2003 --- gcc-3.3.3/gcc/config/sparc/freebsd.h Tue Dec 16 10:54:58 2003 *************** the Free Software Foundation, 675 Mass A *** 25,30 **** --- 25,38 ---- #define CPP_CPU64_DEFAULT_SPEC \ "-D__sparc64__ -D__sparc_v9__ -D__sparcv9 -D__sparc__ -D__arch64__" + #undef FBSD_TARGET_CPU_CPP_BUILTINS + #define FBSD_TARGET_CPU_CPP_BUILTINS() \ + do \ + { \ + builtin_define ("__LP64__"); \ + } \ + while (0) + /* Because we include sparc/sysv4.h. */ #undef CPP_PREDEFINES /* Do not define it here, we now use TARGET_OS_CPP_BUILTINS. */ diff -Nrc3pad gcc-3.3.2/gcc/config/sparc/linux.h gcc-3.3.3/gcc/config/sparc/linux.h *** gcc-3.3.2/gcc/config/sparc/linux.h Wed Oct 1 12:57:24 2003 --- gcc-3.3.3/gcc/config/sparc/linux.h Fri Nov 14 06:46:10 2003 *************** do { \ *** 260,265 **** --- 260,272 ---- #define LINK_GCC_C_SEQUENCE_SPEC \ "%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}" + #define ASM_FILE_END(FILE) \ + do { \ + named_section_flags (".note.GNU-stack", \ + SECTION_DEBUG \ + | (trampolines_created ? SECTION_CODE : 0)); \ + } while (0) + /* Do code reading to identify a signal frame, and set the frame state data appropriately. See unwind-dw2.c for the structs. */ diff -Nrc3pad gcc-3.3.2/gcc/config/sparc/linux64.h gcc-3.3.3/gcc/config/sparc/linux64.h *** gcc-3.3.2/gcc/config/sparc/linux64.h Wed Oct 1 12:57:26 2003 --- gcc-3.3.3/gcc/config/sparc/linux64.h Fri Nov 14 06:46:10 2003 *************** do { \ *** 323,328 **** --- 323,335 ---- #define LINK_GCC_C_SEQUENCE_SPEC \ "%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}" + #define ASM_FILE_END(FILE) \ + do { \ + named_section_flags (".note.GNU-stack", \ + SECTION_DEBUG \ + | (trampolines_created ? SECTION_CODE : 0)); \ + } while (0) + /* Do code reading to identify a signal frame, and set the frame state data appropriately. See unwind-dw2.c for the structs. */ diff -Nrc3pad gcc-3.3.2/gcc/config/sparc/sol2-bi.h gcc-3.3.3/gcc/config/sparc/sol2-bi.h *** gcc-3.3.2/gcc/config/sparc/sol2-bi.h Thu Oct 3 20:35:14 2002 --- gcc-3.3.3/gcc/config/sparc/sol2-bi.h Thu Dec 18 20:12:49 2003 *************** *** 135,141 **** * This should be the same as in sol2.h, except with "/sparcv9" * appended to the paths and /usr/ccs/lib is no longer necessary */ ! #define LINK_ARCH64_SPEC \ "%{mcmodel=medlow:-M /usr/lib/ld/sparcv9/map.below4G} \ %{G:-G} \ %{YP,*} \ --- 135,141 ---- * This should be the same as in sol2.h, except with "/sparcv9" * appended to the paths and /usr/ccs/lib is no longer necessary */ ! #define LINK_ARCH64_SPEC_BASE \ "%{mcmodel=medlow:-M /usr/lib/ld/sparcv9/map.below4G} \ %{G:-G} \ %{YP,*} \ *************** *** 148,153 **** --- 148,155 ---- %{!YP,*:%{p|pg:-Y P,/usr/lib/libp/sparcv9:/usr/lib/sparcv9} \ %{!p:%{!pg:-Y P,/usr/lib/sparcv9}}}}" + #define LINK_ARCH64_SPEC LINK_ARCH64_SPEC_BASE + #undef LINK_ARCH_SPEC #define LINK_ARCH_SPEC "\ %{m32:%(link_arch32)} \ diff -Nrc3pad gcc-3.3.2/gcc/config/sparc/sol2-gld-bi.h gcc-3.3.3/gcc/config/sparc/sol2-gld-bi.h *** gcc-3.3.2/gcc/config/sparc/sol2-gld-bi.h Fri Apr 12 23:02:44 2002 --- gcc-3.3.3/gcc/config/sparc/sol2-gld-bi.h Thu Dec 18 20:12:52 2003 *************** *** 1,9 **** --- 1,18 ---- /* Definitions of target machine for GNU compiler, for bi-arch SPARC running Solaris 2 using the GNU linker. */ + #undef LINK_ARCH32_SPEC + #define LINK_ARCH32_SPEC \ + LINK_ARCH32_SPEC_BASE "%{!static: -rpath-link %R/usr/lib}" + + #undef LINK_ARCH64_SPEC + #define LINK_ARCH64_SPEC \ + LINK_ARCH64_SPEC_BASE "%{!static: -rpath-link %R/usr/lib/sparcv9}" + #undef LINK_ARCH_SPEC #define LINK_ARCH_SPEC "\ %{m32:-m elf32_sparc %(link_arch32)} \ %{m64:-m elf64_sparc %(link_arch64)} \ %{!m32:%{!m64:%(link_arch_default)}} \ " + diff -Nrc3pad gcc-3.3.2/gcc/config/sparc/sparc.c gcc-3.3.3/gcc/config/sparc/sparc.c *** gcc-3.3.2/gcc/config/sparc/sparc.c Wed Sep 10 13:03:56 2003 --- gcc-3.3.3/gcc/config/sparc/sparc.c Fri Jan 30 07:19:32 2004 *************** *** 1,8 **** /* Subroutines for insn-output.c for Sun SPARC. Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) ! 64 bit SPARC V9 support by Michael Tiemann, Jim Wilson, and Doug Evans, at Cygnus Support. This file is part of GNU CC. --- 1,8 ---- /* Subroutines for insn-output.c for Sun SPARC. Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) ! 64-bit SPARC-V9 support by Michael Tiemann, Jim Wilson, and Doug Evans, at Cygnus Support. This file is part of GNU CC. *************** void *** 6767,6773 **** sparc_initialize_trampoline (tramp, fnaddr, cxt) rtx tramp, fnaddr, cxt; { ! /* SPARC 32 bit trampoline: sethi %hi(fn), %g1 sethi %hi(static), %g2 --- 6767,6773 ---- sparc_initialize_trampoline (tramp, fnaddr, cxt) rtx tramp, fnaddr, cxt; { ! /* SPARC 32-bit trampoline: sethi %hi(fn), %g1 sethi %hi(static), %g2 *************** sparc_initialize_trampoline (tramp, fnad *** 6777,6786 **** SETHI i,r = 00rr rrr1 00ii iiii iiii iiii iiii iiii JMPL r+i,d = 10dd ddd1 1100 0rrr rr1i iiii iiii iiii */ - #ifdef TRANSFER_FROM_TRAMPOLINE - emit_library_call (gen_rtx (SYMBOL_REF, Pmode, "__enable_execute_stack"), - LCT_NORMAL, VOIDmode, 1, tramp, Pmode); - #endif emit_move_insn (gen_rtx_MEM (SImode, plus_constant (tramp, 0)), --- 6777,6782 ---- *************** sparc_initialize_trampoline (tramp, fnad *** 6819,6827 **** && sparc_cpu != PROCESSOR_ULTRASPARC3) emit_insn (gen_flush (validize_mem (gen_rtx_MEM (SImode, plus_constant (tramp, 8))))); } ! /* The 64 bit version is simpler because it makes more sense to load the values as "immediate" data out of the trampoline. It's also easier since we can read the PC without clobbering a register. */ --- 6815,6831 ---- && sparc_cpu != PROCESSOR_ULTRASPARC3) emit_insn (gen_flush (validize_mem (gen_rtx_MEM (SImode, plus_constant (tramp, 8))))); + + /* Call __enable_execute_stack after writing onto the stack to make sure + the stack address is accessible. */ + #ifdef TRANSFER_FROM_TRAMPOLINE + emit_library_call (gen_rtx (SYMBOL_REF, Pmode, "__enable_execute_stack"), + LCT_NORMAL, VOIDmode, 1, tramp, Pmode); + #endif + } ! /* The 64-bit version is simpler because it makes more sense to load the values as "immediate" data out of the trampoline. It's also easier since we can read the PC without clobbering a register. */ *************** void *** 6829,6840 **** sparc64_initialize_trampoline (tramp, fnaddr, cxt) rtx tramp, fnaddr, cxt; { ! #ifdef TRANSFER_FROM_TRAMPOLINE ! emit_library_call (gen_rtx (SYMBOL_REF, Pmode, "__enable_execute_stack"), ! LCT_NORMAL, VOIDmode, 1, tramp, Pmode); ! #endif - /* rd %pc, %g1 ldx [%g1+24], %g5 jmp %g5 --- 6833,6840 ---- sparc64_initialize_trampoline (tramp, fnaddr, cxt) rtx tramp, fnaddr, cxt; { ! /* SPARC 64-bit trampoline: rd %pc, %g1 ldx [%g1+24], %g5 jmp %g5 *************** sparc64_initialize_trampoline (tramp, fn *** 6857,6862 **** --- 6857,6869 ---- if (sparc_cpu != PROCESSOR_ULTRASPARC && sparc_cpu != PROCESSOR_ULTRASPARC3) emit_insn (gen_flushdi (validize_mem (gen_rtx_MEM (DImode, plus_constant (tramp, 8))))); + + /* Call __enable_execute_stack after writing onto the stack to make sure + the stack address is accessible. */ + #ifdef TRANSFER_FROM_TRAMPOLINE + emit_library_call (gen_rtx (SYMBOL_REF, Pmode, "__enable_execute_stack"), + LCT_NORMAL, VOIDmode, 1, tramp, Pmode); + #endif } /* Subroutines to support a flat (single) register window calling *************** sparc_output_mi_thunk (file, thunk_fndec *** 8554,8563 **** if (!SPARC_SIMM13_P (delta)) { rtx scratch = gen_rtx_REG (Pmode, 1); ! if (TARGET_ARCH64) ! sparc_emit_set_const64 (scratch, delta_rtx); else ! sparc_emit_set_const32 (scratch, delta_rtx); delta_rtx = scratch; } --- 8561,8577 ---- if (!SPARC_SIMM13_P (delta)) { rtx scratch = gen_rtx_REG (Pmode, 1); ! ! if (input_operand (delta_rtx, GET_MODE (scratch))) ! emit_insn (gen_rtx_SET (VOIDmode, scratch, delta_rtx)); else ! { ! if (TARGET_ARCH64) ! sparc_emit_set_const64 (scratch, delta_rtx); ! else ! sparc_emit_set_const32 (scratch, delta_rtx); ! } ! delta_rtx = scratch; } diff -Nrc3pad gcc-3.3.2/gcc/config/sparc/sparc.h gcc-3.3.3/gcc/config/sparc/sparc.h *** gcc-3.3.2/gcc/config/sparc/sparc.h Wed Jun 4 07:05:02 2003 --- gcc-3.3.3/gcc/config/sparc/sparc.h Fri Jan 30 07:19:33 2004 *************** *** 1,8 **** /* Definitions of target machine for GNU compiler, for Sun SPARC. Copyright (C) 1987, 1988, 1989, 1992, 1994, 1995, 1996, 1997, 1998, 1999 ! 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com). ! 64 bit SPARC V9 support by Michael Tiemann, Jim Wilson, and Doug Evans, at Cygnus Support. This file is part of GNU CC. --- 1,8 ---- /* Definitions of target machine for GNU compiler, for Sun SPARC. Copyright (C) 1987, 1988, 1989, 1992, 1994, 1995, 1996, 1997, 1998, 1999 ! 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com). ! 64-bit SPARC-V9 support by Michael Tiemann, Jim Wilson, and Doug Evans, at Cygnus Support. This file is part of GNU CC. diff -Nrc3pad gcc-3.3.2/gcc/config/sparc/sparc.md gcc-3.3.3/gcc/config/sparc/sparc.md *** gcc-3.3.2/gcc/config/sparc/sparc.md Wed Oct 1 06:15:02 2003 --- gcc-3.3.3/gcc/config/sparc/sparc.md Thu Feb 12 13:42:46 2004 *************** *** 1,8 **** ;; Machine description for SPARC chip for GNU C compiler ;; Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! ;; 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ;; Contributed by Michael Tiemann (tiemann@cygnus.com) ! ;; 64 bit SPARC V9 support by Michael Tiemann, Jim Wilson, and Doug Evans, ;; at Cygnus Support. ;; This file is part of GNU CC. --- 1,8 ---- ;; Machine description for SPARC chip for GNU C compiler ;; Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! ;; 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. ;; Contributed by Michael Tiemann (tiemann@cygnus.com) ! ;; 64-bit SPARC-V9 support by Michael Tiemann, Jim Wilson, and Doug Evans, ;; at Cygnus Support. ;; This file is part of GNU CC. *************** *** 8239,8269 **** [(set_attr "type" "multi") (set_attr "length" "2")]) - ;; Now peepholes to do a call followed by a jump. - - (define_peephole - [(parallel [(set (match_operand 0 "" "") - (call (mem:SI (match_operand:SI 1 "call_operand_address" "ps")) - (match_operand 2 "" ""))) - (clobber (reg:SI 15))]) - (set (pc) (label_ref (match_operand 3 "" "")))] - "short_branch (INSN_UID (insn), INSN_UID (operands[3])) - && (USING_SJLJ_EXCEPTIONS || ! can_throw_internal (ins1)) - && sparc_cpu != PROCESSOR_ULTRASPARC - && sparc_cpu != PROCESSOR_ULTRASPARC3" - "call\t%a1, %2\n\tadd\t%%o7, (%l3-.-4), %%o7") - - (define_peephole - [(parallel [(call (mem:SI (match_operand:SI 0 "call_operand_address" "ps")) - (match_operand 1 "" "")) - (clobber (reg:SI 15))]) - (set (pc) (label_ref (match_operand 2 "" "")))] - "short_branch (INSN_UID (insn), INSN_UID (operands[2])) - && (USING_SJLJ_EXCEPTIONS || ! can_throw_internal (ins1)) - && sparc_cpu != PROCESSOR_ULTRASPARC - && sparc_cpu != PROCESSOR_ULTRASPARC3" - "call\t%a0, %1\n\tadd\t%%o7, (%l2-.-4), %%o7") - ;; ??? UltraSPARC-III note: A memory operation loading into the floating point register ;; ??? file, if it hits the prefetch cache, has a chance to dual-issue with other memory ;; ??? operations. With DFA we might be able to model this, but it requires a lot of --- 8239,8244 ---- diff -Nrc3pad gcc-3.3.2/gcc/config/t-gnu gcc-3.3.3/gcc/config/t-gnu *** gcc-3.3.2/gcc/config/t-gnu Thu Nov 30 08:30:26 2000 --- gcc-3.3.3/gcc/config/t-gnu Sat Jan 10 06:42:00 2004 *************** *** 1,2 **** # In GNU, "/usr" is a four-letter word. ! SYSTEM_HEADER_DIR = /include --- 1,2 ---- # In GNU, "/usr" is a four-letter word. ! NATIVE_SYSTEM_HEADER_DIR = /include diff -Nrc3pad gcc-3.3.2/gcc/config/t-libunwind gcc-3.3.3/gcc/config/t-libunwind *** gcc-3.3.2/gcc/config/t-libunwind Sun Aug 10 23:11:27 2003 --- gcc-3.3.3/gcc/config/t-libunwind Thu Dec 4 02:18:22 2003 *************** *** 1 **** ! LIB2ADDEH = $(srcdir)/unwind-libunwind.c $(srcdir)/unwind-sjlj.c --- 1,6 ---- ! # Override the default value from t-slibgcc-elf-ver and mention -lunwind ! # so that the resulting libgcc_s.so has the necessary DT_NEEDED entry for ! # libunwind. ! SHLIB_LC = -lunwind -lc ! LIB2ADDEH = $(srcdir)/unwind-libunwind.c $(srcdir)/unwind-sjlj.c \ ! $(srcdir)/unwind-c.c diff -Nrc3pad gcc-3.3.2/gcc/config.gcc gcc-3.3.3/gcc/config.gcc *** gcc-3.3.2/gcc/config.gcc Wed Oct 1 19:07:01 2003 --- gcc-3.3.3/gcc/config.gcc Wed Jan 21 06:06:00 2004 *************** xscale-*-*) *** 298,308 **** ;; i[34567]86-*-*) cpu_type=i386 ! extra_headers="mmintrin.h xmmintrin.h" ;; x86_64-*-*) cpu_type=i386 ! extra_headers="mmintrin.h xmmintrin.h" ;; ia64-*-*) extra_headers=ia64intrin.h --- 298,308 ---- ;; i[34567]86-*-*) cpu_type=i386 ! extra_headers="mmintrin.h xmmintrin.h emmintrin.h pmmintrin.h" ;; x86_64-*-*) cpu_type=i386 ! extra_headers="mmintrin.h xmmintrin.h emmintrin.h pmmintrin.h" ;; ia64-*-*) extra_headers=ia64intrin.h *************** frv-*-elf) *** 792,798 **** ;; h8300-*-rtems*) xm_defines=POSIX ! tmake_file="h8300/t-h8300 t-rtems" tm_file="h8300/h8300.h h8300/rtems.h rtems.h" if test x$enable_threads = xyes; then thread_file='rtems' --- 792,798 ---- ;; h8300-*-rtems*) xm_defines=POSIX ! tmake_file="h8300/t-h8300 t-rtems h8300/t-rtems" tm_file="h8300/h8300.h h8300/rtems.h rtems.h" if test x$enable_threads = xyes; then thread_file='rtems' *************** sh-*-rtems*) *** 2305,2311 **** fi ;; sh-*-linux* | sh[2346lbe]*-*-linux*) ! tmake_file="sh/t-sh sh/t-elf" case $machine in sh*be-*-* | sh*eb-*-*) ;; *) --- 2305,2311 ---- fi ;; sh-*-linux* | sh[2346lbe]*-*-linux*) ! tmake_file="sh/t-sh sh/t-elf t-slibgcc-elf-ver t-linux" case $machine in sh*be-*-* | sh*eb-*-*) ;; *) diff -Nrc3pad gcc-3.3.2/gcc/config.in gcc-3.3.3/gcc/config.in *** gcc-3.3.2/gcc/config.in Thu Oct 16 20:10:47 2003 --- gcc-3.3.3/gcc/config.in Sat Feb 14 20:34:20 2004 *************** *** 495,500 **** --- 495,503 ---- /* Define if defines clock_t. */ #undef HAVE_CLOCK_T + /* Define if provides uchar. */ + #undef HAVE_UCHAR + /* Define .init_array/.fini_array sections are available and working. */ #undef HAVE_INITFINI_ARRAY diff -Nrc3pad gcc-3.3.2/gcc/configure gcc-3.3.3/gcc/configure *** gcc-3.3.2/gcc/configure Wed Oct 1 21:56:37 2003 --- gcc-3.3.3/gcc/configure Tue Dec 2 01:56:14 2003 *************** ac_help="$ac_help *** 29,34 **** --- 29,36 ---- --with-gxx-include-dir=DIR specifies directory to put g++ header files" ac_help="$ac_help + --with-sysroot[=DIR] Search for usr/lib, usr/include, et al, within DIR." + ac_help="$ac_help --enable-multilib enable library support for multiple ABIs" ac_help="$ac_help --enable-checking[=LIST] *************** copy=cp *** 627,633 **** # - two terminals occur directly after each other # - the path contains an element with a dot in it echo $ac_n "checking LIBRARY_PATH variable""... $ac_c" 1>&6 ! echo "configure:631: checking LIBRARY_PATH variable" >&5 case ${LIBRARY_PATH} in [:\;]* | *[:\;] | *[:\;][:\;]* | *[:\;]. | .[:\;]*| . | *[:\;].[:\;]* ) library_path_setting="contains current directory" --- 629,635 ---- # - two terminals occur directly after each other # - the path contains an element with a dot in it echo $ac_n "checking LIBRARY_PATH variable""... $ac_c" 1>&6 ! echo "configure:633: checking LIBRARY_PATH variable" >&5 case ${LIBRARY_PATH} in [:\;]* | *[:\;] | *[:\;][:\;]* | *[:\;]. | .[:\;]*| . | *[:\;].[:\;]* ) library_path_setting="contains current directory" *************** fi *** 652,658 **** # - two terminals occur directly after each other # - the path contains an element with a dot in it echo $ac_n "checking GCC_EXEC_PREFIX variable""... $ac_c" 1>&6 ! echo "configure:656: checking GCC_EXEC_PREFIX variable" >&5 case ${GCC_EXEC_PREFIX} in [:\;]* | *[:\;] | *[:\;][:\;]* | *[:\;]. | .[:\;]*| . | *[:\;].[:\;]* ) gcc_exec_prefix_setting="contains current directory" --- 654,660 ---- # - two terminals occur directly after each other # - the path contains an element with a dot in it echo $ac_n "checking GCC_EXEC_PREFIX variable""... $ac_c" 1>&6 ! echo "configure:658: checking GCC_EXEC_PREFIX variable" >&5 case ${GCC_EXEC_PREFIX} in [:\;]* | *[:\;] | *[:\;][:\;]* | *[:\;]. | .[:\;]*| . | *[:\;].[:\;]* ) gcc_exec_prefix_setting="contains current directory" *************** if test x${gcc_gxx_include_dir} = x; the *** 791,796 **** --- 793,839 ---- fi fi + # Check whether --with-sysroot or --without-sysroot was given. + if test "${with_sysroot+set}" = set; then + withval="$with_sysroot" + + case ${with_sysroot} in + yes) TARGET_SYSTEM_ROOT='${exec_prefix}/${target_alias}/sys-root' ;; + *) TARGET_SYSTEM_ROOT=$with_sysroot ;; + esac + + TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"$(TARGET_SYSTEM_ROOT)\"' + CROSS_SYSTEM_HEADER_DIR='$(TARGET_SYSTEM_ROOT)$(NATIVE_SYSTEM_HEADER_DIR)' + + if test "x$exec_prefix" = xNONE; then + if test "x$prefix" = xNONE; then + test_prefix=/usr/local + else + test_prefix=$prefix + fi + else + test_prefix=$exec_prefix + fi + case ${TARGET_SYSTEM_ROOT} in + "${test_prefix}"|"${test_prefix}/"*|\ + '${exec_prefix}'|'${exec_prefix}/'*) + t="$TARGET_SYSTEM_ROOT_DEFINE -DTARGET_SYSTEM_ROOT_RELOCATABLE" + TARGET_SYSTEM_ROOT_DEFINE="$t" + ;; + esac + + else + + TARGET_SYSTEM_ROOT= + TARGET_SYSTEM_ROOT_DEFINE= + CROSS_SYSTEM_HEADER_DIR='$(gcc_tooldir)/sys-include' + + fi + + + + + # Determine the host, build, and target systems ac_aux_dir= for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do *************** else { echo "configure: error: can not r *** 839,845 **** fi echo $ac_n "checking host system type""... $ac_c" 1>&6 ! echo "configure:843: checking host system type" >&5 host_alias=$host case "$host_alias" in --- 882,888 ---- fi echo $ac_n "checking host system type""... $ac_c" 1>&6 ! echo "configure:886: checking host system type" >&5 host_alias=$host case "$host_alias" in *************** host_os=`echo $host | sed 's/^\([^-]*\)- *** 860,866 **** echo "$ac_t""$host" 1>&6 echo $ac_n "checking target system type""... $ac_c" 1>&6 ! echo "configure:864: checking target system type" >&5 target_alias=$target case "$target_alias" in --- 903,909 ---- echo "$ac_t""$host" 1>&6 echo $ac_n "checking target system type""... $ac_c" 1>&6 ! echo "configure:907: checking target system type" >&5 target_alias=$target case "$target_alias" in *************** target_os=`echo $target | sed 's/^\([^-] *** 878,884 **** echo "$ac_t""$target" 1>&6 echo $ac_n "checking build system type""... $ac_c" 1>&6 ! echo "configure:882: checking build system type" >&5 build_alias=$build case "$build_alias" in --- 921,927 ---- echo "$ac_t""$target" 1>&6 echo $ac_n "checking build system type""... $ac_c" 1>&6 ! echo "configure:925: checking build system type" >&5 build_alias=$build case "$build_alias" in *************** test "$program_transform_name" = "" && p *** 926,932 **** # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:930: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 969,975 ---- # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:973: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** if test -z "$CC"; then *** 956,962 **** # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:960: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 999,1005 ---- # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:1003: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** fi *** 1007,1013 **** # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:1011: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 1050,1056 ---- # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:1054: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** fi *** 1039,1045 **** fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 ! echo "configure:1043: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. --- 1082,1088 ---- fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 ! echo "configure:1086: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. *************** cross_compiling=$ac_cv_prog_cc_cross *** 1050,1061 **** cat > conftest.$ac_ext << EOF ! #line 1054 "configure" #include "confdefs.h" main(){return(0);} EOF ! if { (eval echo configure:1059: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then --- 1093,1104 ---- cat > conftest.$ac_ext << EOF ! #line 1097 "configure" #include "confdefs.h" main(){return(0);} EOF ! if { (eval echo configure:1102: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then *************** if test $ac_cv_prog_cc_works = no; then *** 1081,1092 **** { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 ! echo "configure:1085: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 ! echo "configure:1090: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 1124,1135 ---- { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 ! echo "configure:1128: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 ! echo "configure:1133: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** else *** 1095,1101 **** yes; #endif EOF ! if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1099: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no --- 1138,1144 ---- yes; #endif EOF ! if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1142: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no *************** ac_test_CFLAGS="${CFLAGS+set}" *** 1114,1120 **** ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 ! echo "configure:1118: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 1157,1163 ---- ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 ! echo "configure:1161: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** fi *** 1147,1156 **** if test "x$CC" != xcc; then echo $ac_n "checking whether $CC and cc understand -c and -o together""... $ac_c" 1>&6 ! echo "configure:1151: checking whether $CC and cc understand -c and -o together" >&5 else echo $ac_n "checking whether cc understands -c and -o together""... $ac_c" 1>&6 ! echo "configure:1154: checking whether cc understands -c and -o together" >&5 fi set dummy $CC; ac_cc="`echo $2 | sed -e 's/[^a-zA-Z0-9_]/_/g' -e 's/^[0-9]/_/'`" --- 1190,1199 ---- if test "x$CC" != xcc; then echo $ac_n "checking whether $CC and cc understand -c and -o together""... $ac_c" 1>&6 ! echo "configure:1194: checking whether $CC and cc understand -c and -o together" >&5 else echo $ac_n "checking whether cc understands -c and -o together""... $ac_c" 1>&6 ! echo "configure:1197: checking whether cc understands -c and -o together" >&5 fi set dummy $CC; ac_cc="`echo $2 | sed -e 's/[^a-zA-Z0-9_]/_/g' -e 's/^[0-9]/_/'`" *************** else *** 1162,1177 **** # We do the test twice because some compilers refuse to overwrite an # existing .o file with -o, though they will create one. ac_try='${CC-cc} -c conftest.c -o conftest.o 1>&5' ! if { (eval echo configure:1166: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && ! test -f conftest.o && { (eval echo configure:1167: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; then eval ac_cv_prog_cc_${ac_cc}_c_o=yes if test "x$CC" != xcc; then # Test first that cc exists at all. ! if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:1172: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then ac_try='cc -c conftest.c -o conftest.o 1>&5' ! if { (eval echo configure:1174: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && ! test -f conftest.o && { (eval echo configure:1175: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; then # cc works too. : --- 1205,1220 ---- # We do the test twice because some compilers refuse to overwrite an # existing .o file with -o, though they will create one. ac_try='${CC-cc} -c conftest.c -o conftest.o 1>&5' ! if { (eval echo configure:1209: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && ! test -f conftest.o && { (eval echo configure:1210: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; then eval ac_cv_prog_cc_${ac_cc}_c_o=yes if test "x$CC" != xcc; then # Test first that cc exists at all. ! if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:1215: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then ac_try='cc -c conftest.c -o conftest.o 1>&5' ! if { (eval echo configure:1217: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && ! test -f conftest.o && { (eval echo configure:1218: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; then # cc works too. : *************** fi *** 1217,1223 **** # Extract the first word of "${ac_tool_prefix}gnatbind", so it can be a program name with args. set dummy ${ac_tool_prefix}gnatbind; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:1221: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_GNATBIND'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 1260,1266 ---- # Extract the first word of "${ac_tool_prefix}gnatbind", so it can be a program name with args. set dummy ${ac_tool_prefix}gnatbind; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:1264: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_GNATBIND'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** if test -n "$ac_tool_prefix"; then *** 1249,1255 **** # Extract the first word of "gnatbind", so it can be a program name with args. set dummy gnatbind; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:1253: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_GNATBIND'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 1292,1298 ---- # Extract the first word of "gnatbind", so it can be a program name with args. set dummy gnatbind; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:1296: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_GNATBIND'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** fi *** 1282,1288 **** fi echo $ac_n "checking for compiler driver that understands Ada""... $ac_c" 1>&6 ! echo "configure:1286: checking for compiler driver that understands Ada" >&5 if eval "test \"`echo '$''{'gcc_cv_prog_adac'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 1325,1331 ---- fi echo $ac_n "checking for compiler driver that understands Ada""... $ac_c" 1>&6 ! echo "configure:1329: checking for compiler driver that understands Ada" >&5 if eval "test \"`echo '$''{'gcc_cv_prog_adac'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** fi *** 1324,1344 **** echo $ac_n "checking whether ${CC-cc} accepts -Wno-long-long""... $ac_c" 1>&6 ! echo "configure:1328: checking whether ${CC-cc} accepts -Wno-long-long" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_no_long_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else save_CFLAGS="$CFLAGS" CFLAGS="-Wno-long-long" cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_prog_cc_no_long_long=yes else --- 1367,1387 ---- echo $ac_n "checking whether ${CC-cc} accepts -Wno-long-long""... $ac_c" 1>&6 ! echo "configure:1371: checking whether ${CC-cc} accepts -Wno-long-long" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_no_long_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else save_CFLAGS="$CFLAGS" CFLAGS="-Wno-long-long" cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_prog_cc_no_long_long=yes else *************** echo "$ac_t""$ac_cv_prog_cc_no_long_long *** 1355,1361 **** if test x$have_gnat != xno ; then echo $ac_n "checking whether ${ADAC} accepts -Wno-long-long""... $ac_c" 1>&6 ! echo "configure:1359: checking whether ${ADAC} accepts -Wno-long-long" >&5 if eval "test \"`echo '$''{'ac_cv_prog_adac_no_long_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 1398,1404 ---- if test x$have_gnat != xno ; then echo $ac_n "checking whether ${ADAC} accepts -Wno-long-long""... $ac_c" 1>&6 ! echo "configure:1402: checking whether ${ADAC} accepts -Wno-long-long" >&5 if eval "test \"`echo '$''{'ac_cv_prog_adac_no_long_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** fi *** 1383,1389 **** echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 ! echo "configure:1387: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= --- 1426,1432 ---- echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 ! echo "configure:1430: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= *************** else *** 1398,1410 **** # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:1408: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : --- 1441,1453 ---- # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:1451: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : *************** else *** 1415,1427 **** rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:1425: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : --- 1458,1470 ---- rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:1468: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : *************** else *** 1432,1444 **** rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:1442: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : --- 1475,1487 ---- rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:1485: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : *************** fi *** 1463,1483 **** echo "$ac_t""$CPP" 1>&6 echo $ac_n "checking for inline""... $ac_c" 1>&6 ! echo "configure:1467: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else --- 1506,1526 ---- echo "$ac_t""$CPP" 1>&6 echo $ac_n "checking for inline""... $ac_c" 1>&6 ! echo "configure:1510: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else *************** EOF *** 1503,1521 **** esac echo $ac_n "checking for volatile""... $ac_c" 1>&6 ! echo "configure:1507: checking for volatile" >&5 if eval "test \"`echo '$''{'gcc_cv_c_volatile'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* gcc_cv_c_volatile=yes else --- 1546,1564 ---- esac echo $ac_n "checking for volatile""... $ac_c" 1>&6 ! echo "configure:1550: checking for volatile" >&5 if eval "test \"`echo '$''{'gcc_cv_c_volatile'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* gcc_cv_c_volatile=yes else *************** fi *** 1537,1543 **** echo $ac_n "checking for long double""... $ac_c" 1>&6 ! echo "configure:1541: checking for long double" >&5 if eval "test \"`echo '$''{'gcc_cv_c_long_double'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 1580,1586 ---- echo $ac_n "checking for long double""... $ac_c" 1>&6 ! echo "configure:1584: checking for long double" >&5 if eval "test \"`echo '$''{'gcc_cv_c_long_double'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** else *** 1545,1551 **** gcc_cv_c_long_double=yes else cat > conftest.$ac_ext < conftest.$ac_ext <= sizeof(double)):; ; return 0; } EOF ! if { (eval echo configure:1559: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* gcc_cv_c_long_double=yes else --- 1598,1604 ---- switch (0) case 0: case (sizeof(long double) >= sizeof(double)):; ; return 0; } EOF ! if { (eval echo configure:1602: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* gcc_cv_c_long_double=yes else *************** EOF *** 1577,1595 **** fi echo $ac_n "checking for long long int""... $ac_c" 1>&6 ! echo "configure:1581: checking for long long int" >&5 if eval "test \"`echo '$''{'ac_cv_c_long_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_long_long=yes else --- 1620,1638 ---- fi echo $ac_n "checking for long long int""... $ac_c" 1>&6 ! echo "configure:1624: checking for long long int" >&5 if eval "test \"`echo '$''{'ac_cv_c_long_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_long_long=yes else *************** EOF *** 1609,1627 **** fi echo $ac_n "checking for __int64""... $ac_c" 1>&6 ! echo "configure:1613: checking for __int64" >&5 if eval "test \"`echo '$''{'ac_cv_c___int64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c___int64=yes else --- 1652,1670 ---- fi echo $ac_n "checking for __int64""... $ac_c" 1>&6 ! echo "configure:1656: checking for __int64" >&5 if eval "test \"`echo '$''{'ac_cv_c___int64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c___int64=yes else *************** EOF *** 1642,1660 **** fi echo $ac_n "checking for built-in _Bool""... $ac_c" 1>&6 ! echo "configure:1646: checking for built-in _Bool" >&5 if eval "test \"`echo '$''{'gcc_cv_c__bool'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* gcc_cv_c__bool=yes else --- 1685,1703 ---- fi echo $ac_n "checking for built-in _Bool""... $ac_c" 1>&6 ! echo "configure:1689: checking for built-in _Bool" >&5 if eval "test \"`echo '$''{'gcc_cv_c__bool'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* gcc_cv_c__bool=yes else *************** fi *** 1678,1690 **** # sizeof(char) is 1 by definition. echo $ac_n "checking size of short""... $ac_c" 1>&6 ! echo "configure:1682: checking size of short" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_short'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else for ac_size in 4 8 1 2 16 ; do # List sizes in rough order of prevalence. cat > conftest.$ac_ext < --- 1721,1733 ---- # sizeof(char) is 1 by definition. echo $ac_n "checking size of short""... $ac_c" 1>&6 ! echo "configure:1725: checking size of short" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_short'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else for ac_size in 4 8 1 2 16 ; do # List sizes in rough order of prevalence. cat > conftest.$ac_ext < *************** int main() { *** 1694,1700 **** switch (0) case 0: case (sizeof (short) == $ac_size):; ; return 0; } EOF ! if { (eval echo configure:1698: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_sizeof_short=$ac_size else --- 1737,1743 ---- switch (0) case 0: case (sizeof (short) == $ac_size):; ; return 0; } EOF ! if { (eval echo configure:1741: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_sizeof_short=$ac_size else *************** EOF *** 1717,1729 **** echo $ac_n "checking size of int""... $ac_c" 1>&6 ! echo "configure:1721: checking size of int" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else for ac_size in 4 8 1 2 16 ; do # List sizes in rough order of prevalence. cat > conftest.$ac_ext < --- 1760,1772 ---- echo $ac_n "checking size of int""... $ac_c" 1>&6 ! echo "configure:1764: checking size of int" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else for ac_size in 4 8 1 2 16 ; do # List sizes in rough order of prevalence. cat > conftest.$ac_ext < *************** int main() { *** 1733,1739 **** switch (0) case 0: case (sizeof (int) == $ac_size):; ; return 0; } EOF ! if { (eval echo configure:1737: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_sizeof_int=$ac_size else --- 1776,1782 ---- switch (0) case 0: case (sizeof (int) == $ac_size):; ; return 0; } EOF ! if { (eval echo configure:1780: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_sizeof_int=$ac_size else *************** EOF *** 1756,1768 **** echo $ac_n "checking size of long""... $ac_c" 1>&6 ! echo "configure:1760: checking size of long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else for ac_size in 4 8 1 2 16 ; do # List sizes in rough order of prevalence. cat > conftest.$ac_ext < --- 1799,1811 ---- echo $ac_n "checking size of long""... $ac_c" 1>&6 ! echo "configure:1803: checking size of long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else for ac_size in 4 8 1 2 16 ; do # List sizes in rough order of prevalence. cat > conftest.$ac_ext < *************** int main() { *** 1772,1778 **** switch (0) case 0: case (sizeof (long) == $ac_size):; ; return 0; } EOF ! if { (eval echo configure:1776: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_sizeof_long=$ac_size else --- 1815,1821 ---- switch (0) case 0: case (sizeof (long) == $ac_size):; ; return 0; } EOF ! if { (eval echo configure:1819: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_sizeof_long=$ac_size else *************** EOF *** 1796,1808 **** if test $ac_cv_c_long_long = yes; then echo $ac_n "checking size of long long""... $ac_c" 1>&6 ! echo "configure:1800: checking size of long long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else for ac_size in 4 8 1 2 16 ; do # List sizes in rough order of prevalence. cat > conftest.$ac_ext < --- 1839,1851 ---- if test $ac_cv_c_long_long = yes; then echo $ac_n "checking size of long long""... $ac_c" 1>&6 ! echo "configure:1843: checking size of long long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else for ac_size in 4 8 1 2 16 ; do # List sizes in rough order of prevalence. cat > conftest.$ac_ext < *************** int main() { *** 1812,1818 **** switch (0) case 0: case (sizeof (long long) == $ac_size):; ; return 0; } EOF ! if { (eval echo configure:1816: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_sizeof_long_long=$ac_size else --- 1855,1861 ---- switch (0) case 0: case (sizeof (long long) == $ac_size):; ; return 0; } EOF ! if { (eval echo configure:1859: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_sizeof_long_long=$ac_size else *************** EOF *** 1837,1849 **** fi if test $ac_cv_c___int64 = yes; then echo $ac_n "checking size of __int64""... $ac_c" 1>&6 ! echo "configure:1841: checking size of __int64" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof___int64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else for ac_size in 4 8 1 2 16 ; do # List sizes in rough order of prevalence. cat > conftest.$ac_ext < --- 1880,1892 ---- fi if test $ac_cv_c___int64 = yes; then echo $ac_n "checking size of __int64""... $ac_c" 1>&6 ! echo "configure:1884: checking size of __int64" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof___int64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else for ac_size in 4 8 1 2 16 ; do # List sizes in rough order of prevalence. cat > conftest.$ac_ext < *************** int main() { *** 1853,1859 **** switch (0) case 0: case (sizeof (__int64) == $ac_size):; ; return 0; } EOF ! if { (eval echo configure:1857: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_sizeof___int64=$ac_size else --- 1896,1902 ---- switch (0) case 0: case (sizeof (__int64) == $ac_size):; ; return 0; } EOF ! if { (eval echo configure:1900: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_sizeof___int64=$ac_size else *************** EOF *** 1878,1889 **** fi echo $ac_n "checking execution character set""... $ac_c" 1>&6 ! echo "configure:1882: checking execution character set" >&5 if eval "test \"`echo '$''{'ac_cv_c_charset'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:1925: checking execution character set" >&5 if eval "test \"`echo '$''{'ac_cv_c_charset'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext <&6 ! echo "configure:2034: checking for valgrind.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:2044: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* --- 2073,2089 ---- # GCC relies on making annotations so we must have both. ac_safe=`echo "valgrind.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for valgrind.h""... $ac_c" 1>&6 ! echo "configure:2077: checking for valgrind.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:2087: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* *************** fi *** 2065,2071 **** # Extract the first word of "valgrind", so it can be a program name with args. set dummy valgrind; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:2069: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_valgrind_path'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 2108,2114 ---- # Extract the first word of "valgrind", so it can be a program name with args. set dummy valgrind; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:2112: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_valgrind_path'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** esac *** 2268,2274 **** echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 ! echo "configure:2272: checking whether ${MAKE-make} sets \${MAKE}" >&5 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 2311,2317 ---- echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 ! echo "configure:2315: checking whether ${MAKE-make} sets \${MAKE}" >&5 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** fi *** 2296,2302 **** echo $ac_n "checking whether a default assembler was specified""... $ac_c" 1>&6 ! echo "configure:2300: checking whether a default assembler was specified" >&5 if test x"${DEFAULT_ASSEMBLER+set}" = x"set"; then if test x"$gas_flag" = x"no"; then echo "$ac_t""yes ($DEFAULT_ASSEMBLER)" 1>&6 --- 2339,2345 ---- echo $ac_n "checking whether a default assembler was specified""... $ac_c" 1>&6 ! echo "configure:2343: checking whether a default assembler was specified" >&5 if test x"${DEFAULT_ASSEMBLER+set}" = x"set"; then if test x"$gas_flag" = x"no"; then echo "$ac_t""yes ($DEFAULT_ASSEMBLER)" 1>&6 *************** else *** 2308,2314 **** fi echo $ac_n "checking whether a default linker was specified""... $ac_c" 1>&6 ! echo "configure:2312: checking whether a default linker was specified" >&5 if test x"${DEFAULT_LINKER+set}" = x"set"; then if test x"$gnu_ld_flag" = x"no"; then echo "$ac_t""yes ($DEFAULT_LINKER)" 1>&6 --- 2351,2357 ---- fi echo $ac_n "checking whether a default linker was specified""... $ac_c" 1>&6 ! echo "configure:2355: checking whether a default linker was specified" >&5 if test x"${DEFAULT_LINKER+set}" = x"set"; then if test x"$gnu_ld_flag" = x"no"; then echo "$ac_t""yes ($DEFAULT_LINKER)" 1>&6 *************** else *** 2320,2331 **** fi echo $ac_n "checking for GNU C library""... $ac_c" 1>&6 ! echo "configure:2324: checking for GNU C library" >&5 if eval "test \"`echo '$''{'gcc_cv_glibc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { --- 2363,2374 ---- fi echo $ac_n "checking for GNU C library""... $ac_c" 1>&6 ! echo "configure:2367: checking for GNU C library" >&5 if eval "test \"`echo '$''{'gcc_cv_glibc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { *************** int main() { *** 2335,2341 **** #endif ; return 0; } EOF ! if { (eval echo configure:2339: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* gcc_cv_glibc=yes else --- 2378,2384 ---- #endif ; return 0; } EOF ! if { (eval echo configure:2382: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* gcc_cv_glibc=yes else *************** EOF *** 2356,2367 **** fi # Find some useful tools ! for ac_prog in mawk gawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:2365: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 2399,2410 ---- fi # Find some useful tools ! for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:2408: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** test -n "$AWK" && break *** 2391,2397 **** done echo $ac_n "checking whether ln works""... $ac_c" 1>&6 ! echo "configure:2395: checking whether ln works" >&5 if eval "test \"`echo '$''{'gcc_cv_prog_LN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 2434,2440 ---- done echo $ac_n "checking whether ln works""... $ac_c" 1>&6 ! echo "configure:2438: checking whether ln works" >&5 if eval "test \"`echo '$''{'gcc_cv_prog_LN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** else *** 2423,2429 **** fi echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 ! echo "configure:2427: checking whether ln -s works" >&5 if eval "test \"`echo '$''{'gcc_cv_prog_LN_S'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 2466,2472 ---- fi echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 ! echo "configure:2470: checking whether ln -s works" >&5 if eval "test \"`echo '$''{'gcc_cv_prog_LN_S'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** fi *** 2457,2463 **** # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:2461: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 2500,2506 ---- # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:2504: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** fi *** 2495,2501 **** # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 ! echo "configure:2499: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 2538,2544 ---- # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 ! echo "configure:2542: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** test -z "$INSTALL_DATA" && INSTALL_DATA= *** 2546,2557 **** echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 ! echo "configure:2550: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include --- 2589,2600 ---- echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 ! echo "configure:2593: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include *************** else *** 2559,2565 **** #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:2563: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* --- 2602,2608 ---- #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:2606: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* *************** rm -f conftest* *** 2576,2582 **** if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF --- 2619,2625 ---- if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF *************** fi *** 2594,2600 **** if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF --- 2637,2643 ---- if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF *************** if test "$cross_compiling" = yes; then *** 2615,2621 **** : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') --- 2658,2664 ---- : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') *************** if (XOR (islower (i), ISLOWER (i)) || to *** 2626,2632 **** exit (0); } EOF ! if { (eval echo configure:2630: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else --- 2669,2675 ---- exit (0); } EOF ! if { (eval echo configure:2673: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else *************** EOF *** 2650,2661 **** fi echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 ! echo "configure:2654: checking whether time.h and sys/time.h may both be included" >&5 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include --- 2693,2704 ---- fi echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 ! echo "configure:2697: checking whether time.h and sys/time.h may both be included" >&5 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include *************** int main() { *** 2664,2670 **** struct tm *tp; ; return 0; } EOF ! if { (eval echo configure:2668: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_time=yes else --- 2707,2713 ---- struct tm *tp; ; return 0; } EOF ! if { (eval echo configure:2711: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_time=yes else *************** EOF *** 2685,2703 **** fi echo $ac_n "checking for working stdbool.h""... $ac_c" 1>&6 ! echo "configure:2689: checking for working stdbool.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdbool_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { bool foo = false; ; return 0; } EOF ! if { (eval echo configure:2701: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_stdbool_h=yes else --- 2728,2746 ---- fi echo $ac_n "checking for working stdbool.h""... $ac_c" 1>&6 ! echo "configure:2732: checking for working stdbool.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdbool_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { bool foo = false; ; return 0; } EOF ! if { (eval echo configure:2744: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_stdbool_h=yes else *************** EOF *** 2718,2729 **** fi echo $ac_n "checking whether string.h and strings.h may both be included""... $ac_c" 1>&6 ! echo "configure:2722: checking whether string.h and strings.h may both be included" >&5 if eval "test \"`echo '$''{'gcc_cv_header_string'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include --- 2761,2772 ---- fi echo $ac_n "checking whether string.h and strings.h may both be included""... $ac_c" 1>&6 ! echo "configure:2765: checking whether string.h and strings.h may both be included" >&5 if eval "test \"`echo '$''{'gcc_cv_header_string'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include *************** int main() { *** 2731,2737 **** ; return 0; } EOF ! if { (eval echo configure:2735: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* gcc_cv_header_string=yes else --- 2774,2780 ---- ; return 0; } EOF ! if { (eval echo configure:2778: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* gcc_cv_header_string=yes else *************** EOF *** 2752,2763 **** fi echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6 ! echo "configure:2756: checking for sys/wait.h that is POSIX.1 compatible" >&5 if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include --- 2795,2806 ---- fi echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6 ! echo "configure:2799: checking for sys/wait.h that is POSIX.1 compatible" >&5 if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include *************** wait (&s); *** 2773,2779 **** s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } EOF ! if { (eval echo configure:2777: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_sys_wait_h=yes else --- 2816,2822 ---- s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } EOF ! if { (eval echo configure:2820: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_sys_wait_h=yes else *************** for ac_hdr in limits.h stddef.h string.h *** 2800,2816 **** do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 ! echo "configure:2804: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:2814: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* --- 2843,2859 ---- do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 ! echo "configure:2847: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:2857: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* *************** done *** 2840,2856 **** # Check for thread headers. ac_safe=`echo "thread.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for thread.h""... $ac_c" 1>&6 ! echo "configure:2844: checking for thread.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:2854: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* --- 2883,2899 ---- # Check for thread headers. ac_safe=`echo "thread.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for thread.h""... $ac_c" 1>&6 ! echo "configure:2887: checking for thread.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:2897: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* *************** fi *** 2874,2890 **** ac_safe=`echo "pthread.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for pthread.h""... $ac_c" 1>&6 ! echo "configure:2878: checking for pthread.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:2888: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* --- 2917,2933 ---- ac_safe=`echo "pthread.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for pthread.h""... $ac_c" 1>&6 ! echo "configure:2921: checking for pthread.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:2931: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* *************** fi *** 2909,2920 **** # These tests can't be done till we know if we have limits.h. echo $ac_n "checking for CHAR_BIT""... $ac_c" 1>&6 ! echo "configure:2913: checking for CHAR_BIT" >&5 if eval "test \"`echo '$''{'gcc_cv_decl_char_bit'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < --- 2952,2963 ---- # These tests can't be done till we know if we have limits.h. echo $ac_n "checking for CHAR_BIT""... $ac_c" 1>&6 ! echo "configure:2956: checking for CHAR_BIT" >&5 if eval "test \"`echo '$''{'gcc_cv_decl_char_bit'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < *************** fi *** 2939,2945 **** echo "$ac_t""$gcc_cv_decl_char_bit" 1>&6 if test $gcc_cv_decl_char_bit = no; then echo $ac_n "checking number of bits in a byte""... $ac_c" 1>&6 ! echo "configure:2943: checking number of bits in a byte" >&5 if eval "test \"`echo '$''{'gcc_cv_c_nbby'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 2982,2988 ---- echo "$ac_t""$gcc_cv_decl_char_bit" 1>&6 if test $gcc_cv_decl_char_bit = no; then echo $ac_n "checking number of bits in a byte""... $ac_c" 1>&6 ! echo "configure:2986: checking number of bits in a byte" >&5 if eval "test \"`echo '$''{'gcc_cv_c_nbby'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** else *** 2947,2953 **** gcc_cv_c_nbby= while test $i -lt 65; do cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* gcc_cv_c_nbby=$i; break else --- 3000,3006 ---- ; } ; return 0; } EOF ! if { (eval echo configure:3004: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* gcc_cv_c_nbby=$i; break else *************** EOF *** 2982,2988 **** fi fi echo $ac_n "checking byte ordering""... $ac_c" 1>&6 ! echo "configure:2986: checking byte ordering" >&5 if eval "test \"`echo '$''{'ac_cv_c_compile_endian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 3025,3031 ---- fi fi echo $ac_n "checking byte ordering""... $ac_c" 1>&6 ! echo "configure:3029: checking byte ordering" >&5 if eval "test \"`echo '$''{'ac_cv_c_compile_endian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** ac_link='${CC-cc} -o conftest${ac_exeext *** 2996,3002 **** cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then od -c conftest.o | sed 's/^[0-7]*[ ]*/ / s/\*/./g --- 3059,3065 ---- 'X', '\n' }; EOF ! if { (eval echo configure:3063: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then od -c conftest.o | sed 's/^[0-7]*[ ]*/ / s/\*/./g *************** EOF *** 3055,3061 **** fi echo $ac_n "checking floating point format""... $ac_c" 1>&6 ! echo "configure:3059: checking floating point format" >&5 if eval "test \"`echo '$''{'ac_cv_c_float_format'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 3098,3104 ---- fi echo $ac_n "checking floating point format""... $ac_c" 1>&6 ! echo "configure:3102: checking floating point format" >&5 if eval "test \"`echo '$''{'ac_cv_c_float_format'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** ac_link='${CC-cc} -o conftest${ac_exeext *** 3068,3074 **** cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then od -c conftest.o | sed 's/^[0-7]*[ ]*/ / s/\*/./g --- 3133,3139 ---- C(-5.22995989424860458374e+10) /* IBMHEXFP - s/390 format, EBCDIC */ }; EOF ! if { (eval echo configure:3137: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then od -c conftest.o | sed 's/^[0-7]*[ ]*/ / s/\*/./g *************** fi *** 3179,3185 **** # Extract the first word of "mktemp", so it can be a program name with args. set dummy mktemp; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:3183: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_have_mktemp_command'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 3222,3228 ---- # Extract the first word of "mktemp", so it can be a program name with args. set dummy mktemp; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:3226: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_have_mktemp_command'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** else *** 3218,3224 **** # Extract the first word of "makeinfo", so it can be a program name with args. set dummy makeinfo; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:3222: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_MAKEINFO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 3261,3267 ---- # Extract the first word of "makeinfo", so it can be a program name with args. set dummy makeinfo; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:3265: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_MAKEINFO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** fi *** 3247,3259 **** if test -n "$MAKEINFO"; then # Found it, now check the version. echo $ac_n "checking for modern makeinfo""... $ac_c" 1>&6 ! echo "configure:3251: checking for modern makeinfo" >&5 if eval "test \"`echo '$''{'gcc_cv_prog_makeinfo_modern'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_prog_version=`$MAKEINFO --version 2>&1 | sed -n 's/^.*GNU texinfo.* \([0-9][0-9.]*\).*$/\1/p'` ! echo "configure:3257: version of makeinfo is $ac_prog_version" >&5 case $ac_prog_version in '') gcc_cv_prog_makeinfo_modern=no;; 4.[2-9]*) --- 3290,3302 ---- if test -n "$MAKEINFO"; then # Found it, now check the version. echo $ac_n "checking for modern makeinfo""... $ac_c" 1>&6 ! echo "configure:3294: checking for modern makeinfo" >&5 if eval "test \"`echo '$''{'gcc_cv_prog_makeinfo_modern'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_prog_version=`$MAKEINFO --version 2>&1 | sed -n 's/^.*GNU texinfo.* \([0-9][0-9.]*\).*$/\1/p'` ! echo "configure:3300: version of makeinfo is $ac_prog_version" >&5 case $ac_prog_version in '') gcc_cv_prog_makeinfo_modern=no;; 4.[2-9]*) *************** fi *** 3281,3287 **** # Is pod2man recent enough to regenerate manpages? echo $ac_n "checking for recent Pod::Man""... $ac_c" 1>&6 ! echo "configure:3285: checking for recent Pod::Man" >&5 if (perl -e 'use 1.10 Pod::Man') >/dev/null 2>&1; then echo "$ac_t""yes" 1>&6 GENERATED_MANPAGES=generated-manpages --- 3324,3330 ---- # Is pod2man recent enough to regenerate manpages? echo $ac_n "checking for recent Pod::Man""... $ac_c" 1>&6 ! echo "configure:3328: checking for recent Pod::Man" >&5 if (perl -e 'use 1.10 Pod::Man') >/dev/null 2>&1; then echo "$ac_t""yes" 1>&6 GENERATED_MANPAGES=generated-manpages *************** else *** 3297,3303 **** # Extract the first word of "flex", so it can be a program name with args. set dummy flex; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:3301: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_FLEX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 3340,3346 ---- # Extract the first word of "flex", so it can be a program name with args. set dummy flex; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:3344: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_FLEX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** else *** 3334,3340 **** # Extract the first word of "bison", so it can be a program name with args. set dummy bison; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:3338: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_BISON'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 3377,3383 ---- # Extract the first word of "bison", so it can be a program name with args. set dummy bison; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:3381: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_BISON'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** fi *** 3366,3372 **** # These libraries may be used by collect2. # We may need a special search path to get them linked. echo $ac_n "checking for collect2 libraries""... $ac_c" 1>&6 ! echo "configure:3370: checking for collect2 libraries" >&5 if eval "test \"`echo '$''{'gcc_cv_collect2_libs'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 3409,3415 ---- # These libraries may be used by collect2. # We may need a special search path to get them linked. echo $ac_n "checking for collect2 libraries""... $ac_c" 1>&6 ! echo "configure:3413: checking for collect2 libraries" >&5 if eval "test \"`echo '$''{'gcc_cv_collect2_libs'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** for libs in '' -lld -lmld \ *** 3377,3383 **** do LIBS="$libs" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* gcc_cv_collect2_libs="$libs"; break else --- 3431,3437 ---- ldopen() ; return 0; } EOF ! if { (eval echo configure:3435: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* gcc_cv_collect2_libs="$libs"; break else *************** save_LIBS="$LIBS" *** 3414,3427 **** LIBS= echo $ac_n "checking for library containing exc_resume""... $ac_c" 1>&6 ! echo "configure:3418: checking for library containing exc_resume" >&5 if eval "test \"`echo '$''{'ac_cv_search_exc_resume'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_func_search_save_LIBS="$LIBS" ac_cv_search_exc_resume="no" cat > conftest.$ac_ext <&6 ! echo "configure:3461: checking for library containing exc_resume" >&5 if eval "test \"`echo '$''{'ac_cv_search_exc_resume'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_func_search_save_LIBS="$LIBS" ac_cv_search_exc_resume="no" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_exc_resume="none required" else --- 3475,3481 ---- exc_resume() ; return 0; } EOF ! if { (eval echo configure:3479: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_exc_resume="none required" else *************** rm -f conftest* *** 3443,3449 **** test "$ac_cv_search_exc_resume" = "no" && for i in exc; do LIBS="-l$i $ac_func_search_save_LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_exc_resume="-l$i" break --- 3497,3503 ---- exc_resume() ; return 0; } EOF ! if { (eval echo configure:3501: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_exc_resume="-l$i" break *************** save_LIBS="$LIBS" *** 3484,3497 **** LIBS= echo $ac_n "checking for library containing ldexp""... $ac_c" 1>&6 ! echo "configure:3488: checking for library containing ldexp" >&5 if eval "test \"`echo '$''{'ac_cv_search_ldexp'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_func_search_save_LIBS="$LIBS" ac_cv_search_ldexp="no" cat > conftest.$ac_ext <&6 ! echo "configure:3531: checking for library containing ldexp" >&5 if eval "test \"`echo '$''{'ac_cv_search_ldexp'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_func_search_save_LIBS="$LIBS" ac_cv_search_ldexp="no" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_ldexp="none required" else --- 3545,3551 ---- ldexp() ; return 0; } EOF ! if { (eval echo configure:3549: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_ldexp="none required" else *************** rm -f conftest* *** 3513,3519 **** test "$ac_cv_search_ldexp" = "no" && for i in m; do LIBS="-l$i $ac_func_search_save_LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_ldexp="-l$i" break --- 3567,3573 ---- ldexp() ; return 0; } EOF ! if { (eval echo configure:3571: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_ldexp="-l$i" break *************** LIBS="$save_LIBS" *** 3553,3564 **** echo $ac_n "checking for preprocessor stringizing operator""... $ac_c" 1>&6 ! echo "configure:3557: checking for preprocessor stringizing operator" >&5 if eval "test \"`echo '$''{'ac_cv_c_stringize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:3600: checking for preprocessor stringizing operator" >&5 if eval "test \"`echo '$''{'ac_cv_c_stringize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 *** 3591,3602 **** # Use only if it exists, # doesn't clash with , and declares intmax_t. echo $ac_n "checking for inttypes.h""... $ac_c" 1>&6 ! echo "configure:3595: checking for inttypes.h" >&5 if eval "test \"`echo '$''{'gcc_cv_header_inttypes_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include --- 3634,3645 ---- # Use only if it exists, # doesn't clash with , and declares intmax_t. echo $ac_n "checking for inttypes.h""... $ac_c" 1>&6 ! echo "configure:3638: checking for inttypes.h" >&5 if eval "test \"`echo '$''{'gcc_cv_header_inttypes_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include *************** int main() { *** 3604,3610 **** intmax_t i = -1; ; return 0; } EOF ! if { (eval echo configure:3608: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* gcc_cv_header_inttypes_h=yes else --- 3647,3653 ---- intmax_t i = -1; ; return 0; } EOF ! if { (eval echo configure:3651: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* gcc_cv_header_inttypes_h=yes else *************** for ac_func in times clock dup2 kill get *** 3631,3642 **** scandir alphasort gettimeofday mmap do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 ! echo "configure:3635: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:3678: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else --- 3702,3708 ---- ; return 0; } EOF ! if { (eval echo configure:3706: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else *************** done *** 3685,3696 **** echo $ac_n "checking for ssize_t""... $ac_c" 1>&6 ! echo "configure:3689: checking for ssize_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ssize_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS --- 3728,3739 ---- echo $ac_n "checking for ssize_t""... $ac_c" 1>&6 ! echo "configure:3732: checking for ssize_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ssize_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS *************** fi *** 3721,3732 **** # Try to determine the array type of the second argument of getgroups # for the target system (int or gid_t). echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 ! echo "configure:3725: checking for uid_t in sys/types.h" >&5 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF --- 3764,3775 ---- # Try to determine the array type of the second argument of getgroups # for the target system (int or gid_t). echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 ! echo "configure:3768: checking for uid_t in sys/types.h" >&5 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF *************** EOF *** 3755,3761 **** fi echo $ac_n "checking type of array argument to getgroups""... $ac_c" 1>&6 ! echo "configure:3759: checking type of array argument to getgroups" >&5 if eval "test \"`echo '$''{'ac_cv_type_getgroups'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 3798,3804 ---- fi echo $ac_n "checking type of array argument to getgroups""... $ac_c" 1>&6 ! echo "configure:3802: checking type of array argument to getgroups" >&5 if eval "test \"`echo '$''{'ac_cv_type_getgroups'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** else *** 3763,3769 **** ac_cv_type_getgroups=cross else cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_type_getgroups=gid_t else --- 3831,3837 ---- } EOF ! if { (eval echo configure:3835: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_type_getgroups=gid_t else *************** fi *** 3802,3808 **** if test $ac_cv_type_getgroups = cross; then cat > conftest.$ac_ext < EOF --- 3845,3851 ---- if test $ac_cv_type_getgroups = cross; then cat > conftest.$ac_ext < EOF *************** fi *** 3843,3849 **** echo $ac_n "checking whether the printf functions support %p""... $ac_c" 1>&6 ! echo "configure:3847: checking whether the printf functions support %p" >&5 if eval "test \"`echo '$''{'gcc_cv_func_printf_ptr'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 3886,3892 ---- echo $ac_n "checking whether the printf functions support %p""... $ac_c" 1>&6 ! echo "configure:3890: checking whether the printf functions support %p" >&5 if eval "test \"`echo '$''{'gcc_cv_func_printf_ptr'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** else *** 3851,3857 **** gcc_cv_func_printf_ptr=no else cat > conftest.$ac_ext < --- 3894,3900 ---- gcc_cv_func_printf_ptr=no else cat > conftest.$ac_ext < *************** int main() *** 3864,3870 **** return (p != q); } EOF ! if { (eval echo configure:3868: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then gcc_cv_func_printf_ptr=yes else --- 3907,3913 ---- return (p != q); } EOF ! if { (eval echo configure:3911: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then gcc_cv_func_printf_ptr=yes else *************** if test $ac_cv_header_sys_mman_h != yes *** 3894,3900 **** gcc_cv_func_mmap_anon=no else echo $ac_n "checking whether read-only mmap of a plain file works""... $ac_c" 1>&6 ! echo "configure:3898: checking whether read-only mmap of a plain file works" >&5 if eval "test \"`echo '$''{'gcc_cv_func_mmap_file'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 3937,3943 ---- gcc_cv_func_mmap_anon=no else echo $ac_n "checking whether read-only mmap of a plain file works""... $ac_c" 1>&6 ! echo "configure:3941: checking whether read-only mmap of a plain file works" >&5 if eval "test \"`echo '$''{'gcc_cv_func_mmap_file'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** fi *** 3913,3919 **** echo "$ac_t""$gcc_cv_func_mmap_file" 1>&6 echo $ac_n "checking whether mmap from /dev/zero works""... $ac_c" 1>&6 ! echo "configure:3917: checking whether mmap from /dev/zero works" >&5 if eval "test \"`echo '$''{'gcc_cv_func_mmap_dev_zero'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 3956,3962 ---- echo "$ac_t""$gcc_cv_func_mmap_file" 1>&6 echo $ac_n "checking whether mmap from /dev/zero works""... $ac_c" 1>&6 ! echo "configure:3960: checking whether mmap from /dev/zero works" >&5 if eval "test \"`echo '$''{'gcc_cv_func_mmap_dev_zero'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** echo "$ac_t""$gcc_cv_func_mmap_dev_zero" *** 3939,3950 **** # Unlike /dev/zero, the MAP_ANON(YMOUS) defines can be probed for. echo $ac_n "checking for MAP_ANON(YMOUS)""... $ac_c" 1>&6 ! echo "configure:3943: checking for MAP_ANON(YMOUS)" >&5 if eval "test \"`echo '$''{'gcc_cv_decl_map_anon'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include --- 3982,3993 ---- # Unlike /dev/zero, the MAP_ANON(YMOUS) defines can be probed for. echo $ac_n "checking for MAP_ANON(YMOUS)""... $ac_c" 1>&6 ! echo "configure:3986: checking for MAP_ANON(YMOUS)" >&5 if eval "test \"`echo '$''{'gcc_cv_decl_map_anon'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include *************** int main() { *** 3958,3964 **** int n = MAP_ANONYMOUS; ; return 0; } EOF ! if { (eval echo configure:3962: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* gcc_cv_decl_map_anon=yes else --- 4001,4007 ---- int n = MAP_ANONYMOUS; ; return 0; } EOF ! if { (eval echo configure:4005: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* gcc_cv_decl_map_anon=yes else *************** echo "$ac_t""$gcc_cv_decl_map_anon" 1>&6 *** 3976,3982 **** gcc_cv_func_mmap_anon=no else echo $ac_n "checking whether mmap with MAP_ANON(YMOUS) works""... $ac_c" 1>&6 ! echo "configure:3980: checking whether mmap with MAP_ANON(YMOUS) works" >&5 if eval "test \"`echo '$''{'gcc_cv_func_mmap_anon'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 4019,4025 ---- gcc_cv_func_mmap_anon=no else echo $ac_n "checking whether mmap with MAP_ANON(YMOUS) works""... $ac_c" 1>&6 ! echo "configure:4023: checking whether mmap with MAP_ANON(YMOUS) works" >&5 if eval "test \"`echo '$''{'gcc_cv_func_mmap_anon'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** case "${host}" in *** 4031,4042 **** ;; esac echo $ac_n "checking for pid_t""... $ac_c" 1>&6 ! echo "configure:4035: checking for pid_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS --- 4074,4085 ---- ;; esac echo $ac_n "checking for pid_t""... $ac_c" 1>&6 ! echo "configure:4078: checking for pid_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS *************** fi *** 4065,4081 **** ac_safe=`echo "vfork.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for vfork.h""... $ac_c" 1>&6 ! echo "configure:4069: checking for vfork.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:4079: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* --- 4108,4124 ---- ac_safe=`echo "vfork.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for vfork.h""... $ac_c" 1>&6 ! echo "configure:4112: checking for vfork.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:4122: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* *************** else *** 4100,4117 **** fi echo $ac_n "checking for working vfork""... $ac_c" 1>&6 ! echo "configure:4104: checking for working vfork" >&5 if eval "test \"`echo '$''{'ac_cv_func_vfork_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then echo $ac_n "checking for vfork""... $ac_c" 1>&6 ! echo "configure:4110: checking for vfork" >&5 if eval "test \"`echo '$''{'ac_cv_func_vfork'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:4147: checking for working vfork" >&5 if eval "test \"`echo '$''{'ac_cv_func_vfork_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then echo $ac_n "checking for vfork""... $ac_c" 1>&6 ! echo "configure:4153: checking for vfork" >&5 if eval "test \"`echo '$''{'ac_cv_func_vfork'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_vfork=yes" else --- 4177,4183 ---- ; return 0; } EOF ! if { (eval echo configure:4181: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_vfork=yes" else *************** fi *** 4156,4162 **** ac_cv_func_vfork_works=$ac_cv_func_vfork else cat > conftest.$ac_ext < --- 4199,4205 ---- ac_cv_func_vfork_works=$ac_cv_func_vfork else cat > conftest.$ac_ext < *************** main() { *** 4251,4257 **** } } EOF ! if { (eval echo configure:4255: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_vfork_works=yes else --- 4294,4300 ---- } } EOF ! if { (eval echo configure:4298: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_vfork_works=yes else *************** fi *** 4290,4296 **** echo $ac_n "checking for iconv""... $ac_c" 1>&6 ! echo "configure:4294: checking for iconv" >&5 if eval "test \"`echo '$''{'am_cv_func_iconv'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 4333,4339 ---- echo $ac_n "checking for iconv""... $ac_c" 1>&6 ! echo "configure:4337: checking for iconv" >&5 if eval "test \"`echo '$''{'am_cv_func_iconv'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** else *** 4298,4304 **** am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no cat > conftest.$ac_ext < #include --- 4341,4347 ---- am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no cat > conftest.$ac_ext < #include *************** iconv_t cd = iconv_open("",""); *** 4308,4314 **** iconv_close(cd); ; return 0; } EOF ! if { (eval echo configure:4312: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* am_cv_func_iconv=yes else --- 4351,4357 ---- iconv_close(cd); ; return 0; } EOF ! if { (eval echo configure:4355: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* am_cv_func_iconv=yes else *************** rm -f conftest* *** 4320,4326 **** am_save_LIBS="$LIBS" LIBS="$LIBS $am_cv_libiconv_ldpath -liconv" cat > conftest.$ac_ext < #include --- 4363,4369 ---- am_save_LIBS="$LIBS" LIBS="$LIBS $am_cv_libiconv_ldpath -liconv" cat > conftest.$ac_ext < #include *************** iconv_t cd = iconv_open("",""); *** 4330,4336 **** iconv_close(cd); ; return 0; } EOF ! if { (eval echo configure:4334: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* am_cv_lib_iconv=yes am_cv_func_iconv=yes --- 4373,4379 ---- iconv_close(cd); ; return 0; } EOF ! if { (eval echo configure:4377: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* am_cv_lib_iconv=yes am_cv_func_iconv=yes *************** echo "$ac_t""$am_cv_func_iconv" 1>&6 *** 4351,4363 **** EOF echo $ac_n "checking for iconv declaration""... $ac_c" 1>&6 ! echo "configure:4355: checking for iconv declaration" >&5 if eval "test \"`echo '$''{'am_cv_proto_iconv'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < --- 4394,4406 ---- EOF echo $ac_n "checking for iconv declaration""... $ac_c" 1>&6 ! echo "configure:4398: checking for iconv declaration" >&5 if eval "test \"`echo '$''{'am_cv_proto_iconv'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < *************** int main() { *** 4376,4382 **** ; return 0; } EOF ! if { (eval echo configure:4380: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* am_cv_proto_iconv_arg1="" else --- 4419,4425 ---- ; return 0; } EOF ! if { (eval echo configure:4423: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* am_cv_proto_iconv_arg1="" else *************** for ac_func in getenv atol sbrk abort at *** 4414,4425 **** do ac_tr_decl=HAVE_DECL_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` echo $ac_n "checking whether $ac_func is declared""... $ac_c" 1>&6 ! echo "configure:4418: checking whether $ac_func is declared" >&5 if eval "test \"`echo '$''{'gcc_cv_have_decl_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:4461: checking whether $ac_func is declared" >&5 if eval "test \"`echo '$''{'gcc_cv_have_decl_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* eval "gcc_cv_have_decl_$ac_func=yes" else --- 4476,4482 ---- #endif ; return 0; } EOF ! if { (eval echo configure:4480: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* eval "gcc_cv_have_decl_$ac_func=yes" else *************** for ac_func in getrlimit setrlimit getru *** 4535,4546 **** do ac_tr_decl=HAVE_DECL_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` echo $ac_n "checking whether $ac_func is declared""... $ac_c" 1>&6 ! echo "configure:4539: checking whether $ac_func is declared" >&5 if eval "test \"`echo '$''{'gcc_cv_have_decl_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:4582: checking whether $ac_func is declared" >&5 if eval "test \"`echo '$''{'gcc_cv_have_decl_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* eval "gcc_cv_have_decl_$ac_func=yes" else --- 4601,4607 ---- #endif ; return 0; } EOF ! if { (eval echo configure:4605: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* eval "gcc_cv_have_decl_$ac_func=yes" else *************** fi *** 4597,4603 **** cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then : else echo "configure: failed program was:" >&5 --- 4653,4659 ---- rlim_t l = 0; ; return 0; } EOF ! if { (eval echo configure:4657: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then : else echo "configure: failed program was:" >&5 *************** for ac_func in times *** 4627,4638 **** do ac_tr_decl=HAVE_DECL_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` echo $ac_n "checking whether $ac_func is declared""... $ac_c" 1>&6 ! echo "configure:4631: checking whether $ac_func is declared" >&5 if eval "test \"`echo '$''{'gcc_cv_have_decl_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:4674: checking whether $ac_func is declared" >&5 if eval "test \"`echo '$''{'gcc_cv_have_decl_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* eval "gcc_cv_have_decl_$ac_func=yes" else --- 4693,4699 ---- #endif ; return 0; } EOF ! if { (eval echo configure:4697: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* eval "gcc_cv_have_decl_$ac_func=yes" else *************** fi *** 4684,4696 **** # More time-related stuff. echo $ac_n "checking for struct tms""... $ac_c" 1>&6 ! echo "configure:4688: checking for struct tms" >&5 if eval "test \"`echo '$''{'ac_cv_struct_tms'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:4731: checking for struct tms" >&5 if eval "test \"`echo '$''{'ac_cv_struct_tms'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_tms=yes else --- 4746,4752 ---- struct tms tms; ; return 0; } EOF ! if { (eval echo configure:4750: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_tms=yes else *************** fi *** 4726,4738 **** # use gcc_cv_* here because this doesn't match the behavior of AC_CHECK_TYPE. # revisit after autoconf 2.50. echo $ac_n "checking for clock_t""... $ac_c" 1>&6 ! echo "configure:4730: checking for clock_t" >&5 if eval "test \"`echo '$''{'gcc_cv_type_clock_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:4773: checking for clock_t" >&5 if eval "test \"`echo '$''{'gcc_cv_type_clock_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* gcc_cv_type_clock_t=yes else --- 4785,4791 ---- clock_t x; ; return 0; } EOF ! if { (eval echo configure:4789: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* gcc_cv_type_clock_t=yes else *************** EOF *** 4762,4774 **** fi # Check whether --enable-initfini-array or --disable-initfini-array was given. if test "${enable_initfini_array+set}" = set; then enableval="$enable_initfini_array" gcc_cv_initfinit_array=$enableval else echo $ac_n "checking for .preinit_array/.init_array/.fini_array support""... $ac_c" 1>&6 ! echo "configure:4772: checking for .preinit_array/.init_array/.fini_array support" >&5 if eval "test \"`echo '$''{'gcc_cv_initfinit_array'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 4805,4854 ---- fi + echo $ac_n "checking for uchar""... $ac_c" 1>&6 + echo "configure:4810: checking for uchar" >&5 + if eval "test \"`echo '$''{'gcc_cv_type_uchar'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_type_uchar=yes + else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_type_uchar=no + fi + rm -f conftest* + fi + + echo "$ac_t""$gcc_cv_type_uchar" 1>&6 + if test $ac_cv_type_uchar = yes; then + cat >> confdefs.h <<\EOF + #define HAVE_UCHAR 1 + EOF + + fi + # Check whether --enable-initfini-array or --disable-initfini-array was given. if test "${enable_initfini_array+set}" = set; then enableval="$enable_initfini_array" gcc_cv_initfinit_array=$enableval else echo $ac_n "checking for .preinit_array/.init_array/.fini_array support""... $ac_c" 1>&6 ! echo "configure:4852: checking for .preinit_array/.init_array/.fini_array support" >&5 if eval "test \"`echo '$''{'gcc_cv_initfinit_array'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** int main (void) { return x; } *** 4778,4784 **** int foo (void) { x = 0; } int (*fp) (void) __attribute__ ((section (".init_array"))) = foo; EOF ! if { ac_try='${CC-cc} -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD'; { (eval echo configure:4782: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } then if ./conftest; then gcc_cv_initfinit_array=yes --- 4858,4864 ---- int foo (void) { x = 0; } int (*fp) (void) __attribute__ ((section (".init_array"))) = foo; EOF ! if { ac_try='${CC-cc} -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD'; { (eval echo configure:4862: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } then if ./conftest; then gcc_cv_initfinit_array=yes *************** CFLAGS="$saved_CFLAGS" *** 4807,4818 **** # mkdir takes a single argument on some systems. echo $ac_n "checking if mkdir takes one argument""... $ac_c" 1>&6 ! echo "configure:4811: checking if mkdir takes one argument" >&5 if eval "test \"`echo '$''{'gcc_cv_mkdir_takes_one_arg'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < --- 4887,4898 ---- # mkdir takes a single argument on some systems. echo $ac_n "checking if mkdir takes one argument""... $ac_c" 1>&6 ! echo "configure:4891: checking if mkdir takes one argument" >&5 if eval "test \"`echo '$''{'gcc_cv_mkdir_takes_one_arg'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < *************** int main() { *** 4829,4835 **** mkdir ("foo", 0); ; return 0; } EOF ! if { (eval echo configure:4833: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* gcc_cv_mkdir_takes_one_arg=no else --- 4909,4915 ---- mkdir ("foo", 0); ; return 0; } EOF ! if { (eval echo configure:4913: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* gcc_cv_mkdir_takes_one_arg=no else *************** fi *** 4869,4875 **** echo $ac_n "checking for main in -lunwind""... $ac_c" 1>&6 ! echo "configure:4873: checking for main in -lunwind" >&5 ac_lib_var=`echo unwind'_'main | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 4949,4955 ---- echo $ac_n "checking for main in -lunwind""... $ac_c" 1>&6 ! echo "configure:4953: checking for main in -lunwind" >&5 ac_lib_var=`echo unwind'_'main | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** else *** 4877,4890 **** ac_save_LIBS="$LIBS" LIBS="-lunwind $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else --- 4957,4970 ---- ac_save_LIBS="$LIBS" LIBS="-lunwind $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else *************** fi *** 5162,5175 **** echo $ac_n "checking for library containing strerror""... $ac_c" 1>&6 ! echo "configure:5166: checking for library containing strerror" >&5 if eval "test \"`echo '$''{'ac_cv_search_strerror'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_func_search_save_LIBS="$LIBS" ac_cv_search_strerror="no" cat > conftest.$ac_ext <&6 ! echo "configure:5246: checking for library containing strerror" >&5 if eval "test \"`echo '$''{'ac_cv_search_strerror'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_func_search_save_LIBS="$LIBS" ac_cv_search_strerror="no" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_strerror="none required" else --- 5260,5266 ---- strerror() ; return 0; } EOF ! if { (eval echo configure:5264: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_strerror="none required" else *************** rm -f conftest* *** 5191,5197 **** test "$ac_cv_search_strerror" = "no" && for i in cposix; do LIBS="-l$i $ac_func_search_save_LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_strerror="-l$i" break --- 5282,5288 ---- strerror() ; return 0; } EOF ! if { (eval echo configure:5286: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_strerror="-l$i" break *************** fi *** 5225,5236 **** echo $ac_n "checking for working const""... $ac_c" 1>&6 ! echo "configure:5229: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:5309: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else --- 5359,5365 ---- ; return 0; } EOF ! if { (eval echo configure:5363: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else *************** EOF *** 5300,5311 **** fi echo $ac_n "checking for off_t""... $ac_c" 1>&6 ! echo "configure:5304: checking for off_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS --- 5380,5391 ---- fi echo $ac_n "checking for off_t""... $ac_c" 1>&6 ! echo "configure:5384: checking for off_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS *************** EOF *** 5333,5344 **** fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 ! echo "configure:5337: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS --- 5413,5424 ---- fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 ! echo "configure:5417: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS *************** fi *** 5368,5386 **** # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6 ! echo "configure:5372: checking for working alloca.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { char *p = alloca(2 * sizeof(int)); ; return 0; } EOF ! if { (eval echo configure:5384: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_header_alloca_h=yes else --- 5448,5466 ---- # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6 ! echo "configure:5452: checking for working alloca.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { char *p = alloca(2 * sizeof(int)); ; return 0; } EOF ! if { (eval echo configure:5464: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_header_alloca_h=yes else *************** EOF *** 5401,5412 **** fi echo $ac_n "checking for alloca""... $ac_c" 1>&6 ! echo "configure:5405: checking for alloca" >&5 if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:5485: checking for alloca" >&5 if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_alloca_works=yes else --- 5514,5520 ---- char *p = (char *) alloca(1); ; return 0; } EOF ! if { (eval echo configure:5518: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_alloca_works=yes else *************** EOF *** 5466,5477 **** echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6 ! echo "configure:5470: checking whether alloca needs Cray hooks" >&5 if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:5550: checking whether alloca needs Cray hooks" >&5 if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 *** 5496,5507 **** if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 ! echo "configure:5500: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:5580: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else --- 5604,5610 ---- ; return 0; } EOF ! if { (eval echo configure:5608: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else *************** done *** 5551,5557 **** fi echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6 ! echo "configure:5555: checking stack direction for C alloca" >&5 if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 5631,5637 ---- fi echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6 ! echo "configure:5635: checking stack direction for C alloca" >&5 if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** else *** 5559,5565 **** ac_cv_c_stack_direction=0 else cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_stack_direction=1 else --- 5658,5664 ---- exit (find_stack_direction() < 0); } EOF ! if { (eval echo configure:5662: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_stack_direction=1 else *************** fi *** 5601,5612 **** echo $ac_n "checking whether we are using the GNU C Library 2.1 or newer""... $ac_c" 1>&6 ! echo "configure:5605: checking whether we are using the GNU C Library 2.1 or newer" >&5 if eval "test \"`echo '$''{'ac_cv_gnu_library_2_1'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < --- 5681,5692 ---- echo $ac_n "checking whether we are using the GNU C Library 2.1 or newer""... $ac_c" 1>&6 ! echo "configure:5685: checking whether we are using the GNU C Library 2.1 or newer" >&5 if eval "test \"`echo '$''{'ac_cv_gnu_library_2_1'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < *************** stdlib.h string.h unistd.h sys/param.h *** 5642,5658 **** do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 ! echo "configure:5646: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:5656: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* --- 5722,5738 ---- do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 ! echo "configure:5726: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:5736: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* *************** getgid getuid mempcpy munmap putenv sete *** 5683,5694 **** strdup strtoul tsearch __argz_count __argz_stringify __argz_next do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 ! echo "configure:5687: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:5767: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else --- 5791,5797 ---- ; return 0; } EOF ! if { (eval echo configure:5795: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else *************** fi *** 5752,5758 **** echo $ac_n "checking for iconv""... $ac_c" 1>&6 ! echo "configure:5756: checking for iconv" >&5 if eval "test \"`echo '$''{'am_cv_func_iconv'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 5832,5838 ---- echo $ac_n "checking for iconv""... $ac_c" 1>&6 ! echo "configure:5836: checking for iconv" >&5 if eval "test \"`echo '$''{'am_cv_func_iconv'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** else *** 5760,5766 **** am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no cat > conftest.$ac_ext < #include --- 5840,5846 ---- am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no cat > conftest.$ac_ext < #include *************** iconv_t cd = iconv_open("",""); *** 5770,5776 **** iconv_close(cd); ; return 0; } EOF ! if { (eval echo configure:5774: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* am_cv_func_iconv=yes else --- 5850,5856 ---- iconv_close(cd); ; return 0; } EOF ! if { (eval echo configure:5854: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* am_cv_func_iconv=yes else *************** rm -f conftest* *** 5782,5788 **** am_save_LIBS="$LIBS" LIBS="$LIBS $am_cv_libiconv_ldpath -liconv" cat > conftest.$ac_ext < #include --- 5862,5868 ---- am_save_LIBS="$LIBS" LIBS="$LIBS $am_cv_libiconv_ldpath -liconv" cat > conftest.$ac_ext < #include *************** iconv_t cd = iconv_open("",""); *** 5792,5798 **** iconv_close(cd); ; return 0; } EOF ! if { (eval echo configure:5796: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* am_cv_lib_iconv=yes am_cv_func_iconv=yes --- 5872,5878 ---- iconv_close(cd); ; return 0; } EOF ! if { (eval echo configure:5876: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* am_cv_lib_iconv=yes am_cv_func_iconv=yes *************** echo "$ac_t""$am_cv_func_iconv" 1>&6 *** 5813,5825 **** EOF echo $ac_n "checking for iconv declaration""... $ac_c" 1>&6 ! echo "configure:5817: checking for iconv declaration" >&5 if eval "test \"`echo '$''{'am_cv_proto_iconv'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < --- 5893,5905 ---- EOF echo $ac_n "checking for iconv declaration""... $ac_c" 1>&6 ! echo "configure:5897: checking for iconv declaration" >&5 if eval "test \"`echo '$''{'am_cv_proto_iconv'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < *************** int main() { *** 5838,5844 **** ; return 0; } EOF ! if { (eval echo configure:5842: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* am_cv_proto_iconv_arg1="" else --- 5918,5924 ---- ; return 0; } EOF ! if { (eval echo configure:5922: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* am_cv_proto_iconv_arg1="" else *************** EOF *** 5867,5885 **** echo $ac_n "checking for nl_langinfo and CODESET""... $ac_c" 1>&6 ! echo "configure:5871: checking for nl_langinfo and CODESET" >&5 if eval "test \"`echo '$''{'am_cv_langinfo_codeset'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { char* cs = nl_langinfo(CODESET); ; return 0; } EOF ! if { (eval echo configure:5883: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* am_cv_langinfo_codeset=yes else --- 5947,5965 ---- echo $ac_n "checking for nl_langinfo and CODESET""... $ac_c" 1>&6 ! echo "configure:5951: checking for nl_langinfo and CODESET" >&5 if eval "test \"`echo '$''{'am_cv_langinfo_codeset'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { char* cs = nl_langinfo(CODESET); ; return 0; } EOF ! if { (eval echo configure:5963: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* am_cv_langinfo_codeset=yes else *************** EOF *** 5902,5920 **** if test $ac_cv_header_locale_h = yes; then echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6 ! echo "configure:5906: checking for LC_MESSAGES" >&5 if eval "test \"`echo '$''{'am_cv_val_LC_MESSAGES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { return LC_MESSAGES ; return 0; } EOF ! if { (eval echo configure:5918: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* am_cv_val_LC_MESSAGES=yes else --- 5982,6000 ---- if test $ac_cv_header_locale_h = yes; then echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6 ! echo "configure:5986: checking for LC_MESSAGES" >&5 if eval "test \"`echo '$''{'am_cv_val_LC_MESSAGES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { return LC_MESSAGES ; return 0; } EOF ! if { (eval echo configure:5998: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* am_cv_val_LC_MESSAGES=yes else *************** EOF *** 5935,5941 **** fi fi echo $ac_n "checking whether NLS is requested""... $ac_c" 1>&6 ! echo "configure:5939: checking whether NLS is requested" >&5 # Check whether --enable-nls or --disable-nls was given. if test "${enable_nls+set}" = set; then enableval="$enable_nls" --- 6015,6021 ---- fi fi echo $ac_n "checking whether NLS is requested""... $ac_c" 1>&6 ! echo "configure:6019: checking whether NLS is requested" >&5 # Check whether --enable-nls or --disable-nls was given. if test "${enable_nls+set}" = set; then enableval="$enable_nls" *************** fi *** 5958,5964 **** EOF echo $ac_n "checking whether included gettext is requested""... $ac_c" 1>&6 ! echo "configure:5962: checking whether included gettext is requested" >&5 # Check whether --with-included-gettext or --without-included-gettext was given. if test "${with_included_gettext+set}" = set; then withval="$with_included_gettext" --- 6038,6044 ---- EOF echo $ac_n "checking whether included gettext is requested""... $ac_c" 1>&6 ! echo "configure:6042: checking whether included gettext is requested" >&5 # Check whether --with-included-gettext or --without-included-gettext was given. if test "${with_included_gettext+set}" = set; then withval="$with_included_gettext" *************** fi *** 5978,5994 **** ac_safe=`echo "libintl.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for libintl.h""... $ac_c" 1>&6 ! echo "configure:5982: checking for libintl.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:5992: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* --- 6058,6074 ---- ac_safe=`echo "libintl.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for libintl.h""... $ac_c" 1>&6 ! echo "configure:6062: checking for libintl.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:6072: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* *************** if eval "test \"`echo '$ac_cv_header_'$a *** 6009,6020 **** EOF echo $ac_n "checking for GNU gettext in libc""... $ac_c" 1>&6 ! echo "configure:6013: checking for GNU gettext in libc" >&5 if eval "test \"`echo '$''{'gt_cv_func_gnugettext1_libc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < extern int _nl_msg_cat_cntr; --- 6089,6100 ---- EOF echo $ac_n "checking for GNU gettext in libc""... $ac_c" 1>&6 ! echo "configure:6093: checking for GNU gettext in libc" >&5 if eval "test \"`echo '$''{'gt_cv_func_gnugettext1_libc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < extern int _nl_msg_cat_cntr; *************** bindtextdomain ("", ""); *** 6023,6029 **** return (int) gettext ("") + _nl_msg_cat_cntr ; return 0; } EOF ! if { (eval echo configure:6027: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* gt_cv_func_gnugettext1_libc=yes else --- 6103,6109 ---- return (int) gettext ("") + _nl_msg_cat_cntr ; return 0; } EOF ! if { (eval echo configure:6107: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* gt_cv_func_gnugettext1_libc=yes else *************** echo "$ac_t""$gt_cv_func_gnugettext1_lib *** 6039,6052 **** if test "$gt_cv_func_gnugettext1_libc" != "yes"; then echo $ac_n "checking for GNU gettext in libintl""... $ac_c" 1>&6 ! echo "configure:6043: checking for GNU gettext in libintl" >&5 if eval "test \"`echo '$''{'gt_cv_func_gnugettext1_libintl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else gt_save_LIBS="$LIBS" LIBS="$LIBS -lintl $LIBICONV" cat > conftest.$ac_ext < extern int _nl_msg_cat_cntr; --- 6119,6132 ---- if test "$gt_cv_func_gnugettext1_libc" != "yes"; then echo $ac_n "checking for GNU gettext in libintl""... $ac_c" 1>&6 ! echo "configure:6123: checking for GNU gettext in libintl" >&5 if eval "test \"`echo '$''{'gt_cv_func_gnugettext1_libintl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else gt_save_LIBS="$LIBS" LIBS="$LIBS -lintl $LIBICONV" cat > conftest.$ac_ext < extern int _nl_msg_cat_cntr; *************** bindtextdomain ("", ""); *** 6055,6061 **** return (int) gettext ("") + _nl_msg_cat_cntr ; return 0; } EOF ! if { (eval echo configure:6059: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* gt_cv_func_gnugettext1_libintl=yes else --- 6135,6141 ---- return (int) gettext ("") + _nl_msg_cat_cntr ; return 0; } EOF ! if { (eval echo configure:6139: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* gt_cv_func_gnugettext1_libintl=yes else *************** EOF *** 6088,6099 **** for ac_func in dcgettext do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 ! echo "configure:6092: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:6172: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else --- 6196,6202 ---- ; return 0; } EOF ! if { (eval echo configure:6200: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else *************** done *** 6145,6151 **** # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:6149: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 6225,6231 ---- # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:6229: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** fi *** 6179,6185 **** # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:6183: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 6259,6265 ---- # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:6263: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** fi *** 6216,6222 **** # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:6220: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 6296,6302 ---- # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:6300: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** fi *** 6266,6272 **** # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:6270: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 6346,6352 ---- # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:6350: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** fi *** 6300,6306 **** # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:6304: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 6380,6386 ---- # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:6384: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** fi *** 6336,6342 **** # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:6340: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 6416,6422 ---- # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:6420: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** do *** 6408,6414 **** # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:6412: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_INTLBISON'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 6488,6494 ---- # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:6492: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_INTLBISON'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** done *** 6441,6447 **** ac_verc_fail=yes else echo $ac_n "checking version of bison""... $ac_c" 1>&6 ! echo "configure:6445: checking version of bison" >&5 ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` case $ac_prog_version in '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; --- 6521,6527 ---- ac_verc_fail=yes else echo $ac_n "checking version of bison""... $ac_c" 1>&6 ! echo "configure:6525: checking version of bison" >&5 ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` case $ac_prog_version in '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; *************** EOF *** 6486,6492 **** if test "x$CATOBJEXT" != x; then echo $ac_n "checking for catalogs to be installed""... $ac_c" 1>&6 ! echo "configure:6490: checking for catalogs to be installed" >&5 # Look for .po and .gmo files in the source directory. CATALOGS= XLINGUAS= --- 6566,6572 ---- if test "x$CATOBJEXT" != x; then echo $ac_n "checking for catalogs to be installed""... $ac_c" 1>&6 ! echo "configure:6570: checking for catalogs to be installed" >&5 # Look for .po and .gmo files in the source directory. CATALOGS= XLINGUAS= *************** fi *** 6544,6550 **** case $host_os in win32 | pe | cygwin* | mingw32* | uwin*) echo $ac_n "checking whether windows registry support is requested""... $ac_c" 1>&6 ! echo "configure:6548: checking whether windows registry support is requested" >&5 if test "x$enable_win32_registry" != xno; then cat >> confdefs.h <<\EOF #define ENABLE_WIN32_REGISTRY 1 --- 6624,6630 ---- case $host_os in win32 | pe | cygwin* | mingw32* | uwin*) echo $ac_n "checking whether windows registry support is requested""... $ac_c" 1>&6 ! echo "configure:6628: checking whether windows registry support is requested" >&5 if test "x$enable_win32_registry" != xno; then cat >> confdefs.h <<\EOF #define ENABLE_WIN32_REGISTRY 1 *************** EOF *** 6553,6566 **** echo "$ac_t""yes" 1>&6 echo $ac_n "checking for library containing RegOpenKeyExA""... $ac_c" 1>&6 ! echo "configure:6557: checking for library containing RegOpenKeyExA" >&5 if eval "test \"`echo '$''{'ac_cv_search_RegOpenKeyExA'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_func_search_save_LIBS="$LIBS" ac_cv_search_RegOpenKeyExA="no" cat > conftest.$ac_ext <&6 echo $ac_n "checking for library containing RegOpenKeyExA""... $ac_c" 1>&6 ! echo "configure:6637: checking for library containing RegOpenKeyExA" >&5 if eval "test \"`echo '$''{'ac_cv_search_RegOpenKeyExA'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_func_search_save_LIBS="$LIBS" ac_cv_search_RegOpenKeyExA="no" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_RegOpenKeyExA="none required" else --- 6651,6657 ---- RegOpenKeyExA() ; return 0; } EOF ! if { (eval echo configure:6655: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_RegOpenKeyExA="none required" else *************** rm -f conftest* *** 6582,6588 **** test "$ac_cv_search_RegOpenKeyExA" = "no" && for i in advapi32; do LIBS="-l$i $ac_func_search_save_LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_RegOpenKeyExA="-l$i" break --- 6673,6679 ---- RegOpenKeyExA() ; return 0; } EOF ! if { (eval echo configure:6677: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_RegOpenKeyExA="-l$i" break *************** esac *** 6635,6641 **** if test "x$enable_win32_registry" != xno; then echo $ac_n "checking registry key on windows hosts""... $ac_c" 1>&6 ! echo "configure:6639: checking registry key on windows hosts" >&5 cat >> confdefs.h <&6 ! echo "configure:6719: checking registry key on windows hosts" >&5 cat >> confdefs.h <&6 ! echo "configure:6853: checking what assembler to use" >&5 gcc_cv_as= gcc_cv_gas_major_version= gcc_cv_gas_minor_version= --- 6931,6937 ---- # Figure out what assembler we will be using. echo $ac_n "checking what assembler to use""... $ac_c" 1>&6 ! echo "configure:6935: checking what assembler to use" >&5 gcc_cv_as= gcc_cv_gas_major_version= gcc_cv_gas_minor_version= *************** fi *** 6943,6949 **** # Figure out what linker we will be using. echo $ac_n "checking what linker to use""... $ac_c" 1>&6 ! echo "configure:6947: checking what linker to use" >&5 gcc_cv_ld= gcc_cv_gld_major_version= gcc_cv_gld_minor_version= --- 7025,7031 ---- # Figure out what linker we will be using. echo $ac_n "checking what linker to use""... $ac_c" 1>&6 ! echo "configure:7029: checking what linker to use" >&5 gcc_cv_ld= gcc_cv_gld_major_version= gcc_cv_gld_minor_version= *************** fi *** 7036,7042 **** # Figure out what nm we will be using. echo $ac_n "checking what nm to use""... $ac_c" 1>&6 ! echo "configure:7040: checking what nm to use" >&5 if test -x nm$host_exeext; then gcc_cv_nm=./nm$host_exeext elif test "x$program_prefix" != xNONE; then --- 7118,7124 ---- # Figure out what nm we will be using. echo $ac_n "checking what nm to use""... $ac_c" 1>&6 ! echo "configure:7122: checking what nm to use" >&5 if test -x nm$host_exeext; then gcc_cv_nm=./nm$host_exeext elif test "x$program_prefix" != xNONE; then *************** echo "$ac_t""$gcc_cv_nm" 1>&6 *** 7048,7054 **** # Figure out what objdump we will be using. echo $ac_n "checking what objdump to use""... $ac_c" 1>&6 ! echo "configure:7052: checking what objdump to use" >&5 if test -x objdump$host_exeext; then gcc_cv_objdump=./objdump$host_exeext elif test "x$program_prefix" != xNONE; then --- 7130,7136 ---- # Figure out what objdump we will be using. echo $ac_n "checking what objdump to use""... $ac_c" 1>&6 ! echo "configure:7134: checking what objdump to use" >&5 if test -x objdump$host_exeext; then gcc_cv_objdump=./objdump$host_exeext elif test "x$program_prefix" != xNONE; then *************** echo "$ac_t""$gcc_cv_objdump" 1>&6 *** 7060,7066 **** # Figure out what assembler alignment features are present. echo $ac_n "checking assembler alignment features""... $ac_c" 1>&6 ! echo "configure:7064: checking assembler alignment features" >&5 gcc_cv_as_alignment_features=none if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then # Gas version 2.6 and later support for .balign and .p2align. --- 7142,7148 ---- # Figure out what assembler alignment features are present. echo $ac_n "checking assembler alignment features""... $ac_c" 1>&6 ! echo "configure:7146: checking assembler alignment features" >&5 gcc_cv_as_alignment_features=none if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then # Gas version 2.6 and later support for .balign and .p2align. *************** fi *** 7108,7114 **** echo "$ac_t""$gcc_cv_as_alignment_features" 1>&6 echo $ac_n "checking assembler subsection support""... $ac_c" 1>&6 ! echo "configure:7112: checking assembler subsection support" >&5 gcc_cv_as_subsections=no if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 9 -o "$gcc_cv_gas_major_version" -gt 2 && grep 'obj_format = elf' ../gas/Makefile > /dev/null; then --- 7190,7196 ---- echo "$ac_t""$gcc_cv_as_alignment_features" 1>&6 echo $ac_n "checking assembler subsection support""... $ac_c" 1>&6 ! echo "configure:7194: checking assembler subsection support" >&5 gcc_cv_as_subsections=no if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 9 -o "$gcc_cv_gas_major_version" -gt 2 && grep 'obj_format = elf' ../gas/Makefile > /dev/null; then *************** fi *** 7148,7154 **** echo "$ac_t""$gcc_cv_as_subsections" 1>&6 echo $ac_n "checking assembler weak support""... $ac_c" 1>&6 ! echo "configure:7152: checking assembler weak support" >&5 gcc_cv_as_weak=no if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 2 -o "$gcc_cv_gas_major_version" -gt 2; then --- 7230,7236 ---- echo "$ac_t""$gcc_cv_as_subsections" 1>&6 echo $ac_n "checking assembler weak support""... $ac_c" 1>&6 ! echo "configure:7234: checking assembler weak support" >&5 gcc_cv_as_weak=no if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 2 -o "$gcc_cv_gas_major_version" -gt 2; then *************** fi *** 7171,7177 **** echo "$ac_t""$gcc_cv_as_weak" 1>&6 echo $ac_n "checking assembler hidden support""... $ac_c" 1>&6 ! echo "configure:7175: checking assembler hidden support" >&5 gcc_cv_as_hidden=no if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then if test "$gcc_cv_gas_major_version" -eq 2 \ --- 7253,7259 ---- echo "$ac_t""$gcc_cv_as_weak" 1>&6 echo $ac_n "checking assembler hidden support""... $ac_c" 1>&6 ! echo "configure:7257: checking assembler hidden support" >&5 gcc_cv_as_hidden=no if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then if test "$gcc_cv_gas_major_version" -eq 2 \ *************** libgcc_visibility=$gcc_cv_as_hidden *** 7237,7243 **** echo $ac_n "checking assembler leb128 support""... $ac_c" 1>&6 ! echo "configure:7241: checking assembler leb128 support" >&5 gcc_cv_as_leb128=no if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 11 -o "$gcc_cv_gas_major_version" -gt 2 && grep 'obj_format = elf' ../gas/Makefile > /dev/null; then --- 7319,7325 ---- echo $ac_n "checking assembler leb128 support""... $ac_c" 1>&6 ! echo "configure:7323: checking assembler leb128 support" >&5 gcc_cv_as_leb128=no if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 11 -o "$gcc_cv_gas_major_version" -gt 2 && grep 'obj_format = elf' ../gas/Makefile > /dev/null; then *************** fi *** 7282,7288 **** echo "$ac_t""$gcc_cv_as_leb128" 1>&6 echo $ac_n "checking assembler eh_frame optimization""... $ac_c" 1>&6 ! echo "configure:7286: checking assembler eh_frame optimization" >&5 gcc_cv_as_eh_frame=no if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 12 -o "$gcc_cv_gas_major_version" -gt 2 && grep 'obj_format = elf' ../gas/Makefile > /dev/null; then --- 7364,7370 ---- echo "$ac_t""$gcc_cv_as_leb128" 1>&6 echo $ac_n "checking assembler eh_frame optimization""... $ac_c" 1>&6 ! echo "configure:7368: checking assembler eh_frame optimization" >&5 gcc_cv_as_eh_frame=no if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 12 -o "$gcc_cv_gas_major_version" -gt 2 && grep 'obj_format = elf' ../gas/Makefile > /dev/null; then *************** fi *** 7363,7369 **** echo "$ac_t""$gcc_cv_as_eh_frame" 1>&6 echo $ac_n "checking assembler section merging support""... $ac_c" 1>&6 ! echo "configure:7367: checking assembler section merging support" >&5 gcc_cv_as_shf_merge=no if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 12 -o "$gcc_cv_gas_major_version" -gt 2 && grep 'obj_format = elf' ../gas/Makefile > /dev/null; then --- 7445,7451 ---- echo "$ac_t""$gcc_cv_as_eh_frame" 1>&6 echo $ac_n "checking assembler section merging support""... $ac_c" 1>&6 ! echo "configure:7449: checking assembler section merging support" >&5 gcc_cv_as_shf_merge=no if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 12 -o "$gcc_cv_gas_major_version" -gt 2 && grep 'obj_format = elf' ../gas/Makefile > /dev/null; then *************** fi *** 7386,7392 **** echo "$ac_t""$gcc_cv_as_shf_merge" 1>&6 echo $ac_n "checking assembler thread-local storage support""... $ac_c" 1>&6 ! echo "configure:7390: checking assembler thread-local storage support" >&5 gcc_cv_as_tls=no conftest_s= tls_first_major= --- 7468,7474 ---- echo "$ac_t""$gcc_cv_as_shf_merge" 1>&6 echo $ac_n "checking assembler thread-local storage support""... $ac_c" 1>&6 ! echo "configure:7472: checking assembler thread-local storage support" >&5 gcc_cv_as_tls=no conftest_s= tls_first_major= *************** case "$target" in *** 7529,7535 **** # All TARGET_ABI_OSF targets. alpha*-*-osf* | alpha*-*-linux* | alpha*-*-*bsd*) echo $ac_n "checking assembler supports explicit relocations""... $ac_c" 1>&6 ! echo "configure:7533: checking assembler supports explicit relocations" >&5 if eval "test \"`echo '$''{'gcc_cv_as_explicit_relocs'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 7611,7617 ---- # All TARGET_ABI_OSF targets. alpha*-*-osf* | alpha*-*-linux* | alpha*-*-*bsd*) echo $ac_n "checking assembler supports explicit relocations""... $ac_c" 1>&6 ! echo "configure:7615: checking assembler supports explicit relocations" >&5 if eval "test \"`echo '$''{'gcc_cv_as_explicit_relocs'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** EOF *** 7579,7585 **** ;; sparc*-*-*) echo $ac_n "checking assembler .register pseudo-op support""... $ac_c" 1>&6 ! echo "configure:7583: checking assembler .register pseudo-op support" >&5 if eval "test \"`echo '$''{'gcc_cv_as_register_pseudo_op'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 7661,7667 ---- ;; sparc*-*-*) echo $ac_n "checking assembler .register pseudo-op support""... $ac_c" 1>&6 ! echo "configure:7665: checking assembler .register pseudo-op support" >&5 if eval "test \"`echo '$''{'gcc_cv_as_register_pseudo_op'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** EOF *** 7607,7613 **** fi echo $ac_n "checking assembler supports -relax""... $ac_c" 1>&6 ! echo "configure:7611: checking assembler supports -relax" >&5 if eval "test \"`echo '$''{'gcc_cv_as_relax_opt'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 7689,7695 ---- fi echo $ac_n "checking assembler supports -relax""... $ac_c" 1>&6 ! echo "configure:7693: checking assembler supports -relax" >&5 if eval "test \"`echo '$''{'gcc_cv_as_relax_opt'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** EOF *** 7635,7641 **** fi echo $ac_n "checking assembler and linker support unaligned pc related relocs""... $ac_c" 1>&6 ! echo "configure:7639: checking assembler and linker support unaligned pc related relocs" >&5 if eval "test \"`echo '$''{'gcc_cv_as_sparc_ua_pcrel'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 7717,7723 ---- fi echo $ac_n "checking assembler and linker support unaligned pc related relocs""... $ac_c" 1>&6 ! echo "configure:7721: checking assembler and linker support unaligned pc related relocs" >&5 if eval "test \"`echo '$''{'gcc_cv_as_sparc_ua_pcrel'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** EOF *** 7662,7668 **** fi echo $ac_n "checking assembler and linker support unaligned pc related relocs against hidden symbols""... $ac_c" 1>&6 ! echo "configure:7666: checking assembler and linker support unaligned pc related relocs against hidden symbols" >&5 if eval "test \"`echo '$''{'gcc_cv_as_sparc_ua_pcrel_hidden'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 7744,7750 ---- fi echo $ac_n "checking assembler and linker support unaligned pc related relocs against hidden symbols""... $ac_c" 1>&6 ! echo "configure:7748: checking assembler and linker support unaligned pc related relocs against hidden symbols" >&5 if eval "test \"`echo '$''{'gcc_cv_as_sparc_ua_pcrel_hidden'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** EOF *** 7702,7708 **** fi echo $ac_n "checking for assembler offsetable %lo() support""... $ac_c" 1>&6 ! echo "configure:7706: checking for assembler offsetable %lo() support" >&5 if eval "test \"`echo '$''{'gcc_cv_as_offsetable_lo10'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 7784,7790 ---- fi echo $ac_n "checking for assembler offsetable %lo() support""... $ac_c" 1>&6 ! echo "configure:7788: checking for assembler offsetable %lo() support" >&5 if eval "test \"`echo '$''{'gcc_cv_as_offsetable_lo10'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** EOF *** 7741,7747 **** i[34567]86-*-* | x86_64-*-*) echo $ac_n "checking assembler instructions""... $ac_c" 1>&6 ! echo "configure:7745: checking assembler instructions" >&5 gcc_cv_as_instructions= if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 9 -o "$gcc_cv_gas_major_version" -gt 2; then --- 7823,7829 ---- i[34567]86-*-* | x86_64-*-*) echo $ac_n "checking assembler instructions""... $ac_c" 1>&6 ! echo "configure:7827: checking assembler instructions" >&5 gcc_cv_as_instructions= if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 9 -o "$gcc_cv_gas_major_version" -gt 2; then *************** EOF *** 7768,7774 **** echo "$ac_t""$gcc_cv_as_instructions" 1>&6 echo $ac_n "checking cmov syntax""... $ac_c" 1>&6 ! echo "configure:7772: checking cmov syntax" >&5 gcc_cv_as_ix86_cmov_sun_syntax=no if test x$gcc_cv_as != x; then echo 'cmovl.l %edx, %eax' > conftest.s --- 7850,7856 ---- echo "$ac_t""$gcc_cv_as_instructions" 1>&6 echo $ac_n "checking cmov syntax""... $ac_c" 1>&6 ! echo "configure:7854: checking cmov syntax" >&5 gcc_cv_as_ix86_cmov_sun_syntax=no if test x$gcc_cv_as != x; then echo 'cmovl.l %edx, %eax' > conftest.s *************** EOF *** 7786,7792 **** echo "$ac_t""$gcc_cv_as_ix86_cmov_sun_syntax" 1>&6 echo $ac_n "checking assembler GOTOFF in data directives""... $ac_c" 1>&6 ! echo "configure:7790: checking assembler GOTOFF in data directives" >&5 gcc_cv_as_gotoff_in_data=no if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x then --- 7868,7874 ---- echo "$ac_t""$gcc_cv_as_ix86_cmov_sun_syntax" 1>&6 echo $ac_n "checking assembler GOTOFF in data directives""... $ac_c" 1>&6 ! echo "configure:7872: checking assembler GOTOFF in data directives" >&5 gcc_cv_as_gotoff_in_data=no if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x then *************** EOF *** 7816,7822 **** ia64*-*-*) echo $ac_n "checking assembler supports ltoffx and ldxmov""... $ac_c" 1>&6 ! echo "configure:7820: checking assembler supports ltoffx and ldxmov" >&5 if eval "test \"`echo '$''{'gcc_cv_as_ltoffx_ldxmov_relocs'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 7898,7904 ---- ia64*-*-*) echo $ac_n "checking assembler supports ltoffx and ldxmov""... $ac_c" 1>&6 ! echo "configure:7902: checking assembler supports ltoffx and ldxmov" >&5 if eval "test \"`echo '$''{'gcc_cv_as_ltoffx_ldxmov_relocs'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** EOF *** 7858,7864 **** esac echo $ac_n "checking assembler dwarf2 debug_line support""... $ac_c" 1>&6 ! echo "configure:7862: checking assembler dwarf2 debug_line support" >&5 gcc_cv_as_dwarf2_debug_line=no # ??? Not all targets support dwarf2 debug_line, even within a version # of gas. Moreover, we need to emit a valid instruction to trigger any --- 7940,7946 ---- esac echo $ac_n "checking assembler dwarf2 debug_line support""... $ac_c" 1>&6 ! echo "configure:7944: checking assembler dwarf2 debug_line support" >&5 gcc_cv_as_dwarf2_debug_line=no # ??? Not all targets support dwarf2 debug_line, even within a version # of gas. Moreover, we need to emit a valid instruction to trigger any *************** fi *** 7915,7921 **** echo "$ac_t""$gcc_cv_as_dwarf2_debug_line" 1>&6 echo $ac_n "checking assembler --gdwarf2 support""... $ac_c" 1>&6 ! echo "configure:7919: checking assembler --gdwarf2 support" >&5 gcc_cv_as_gdwarf2_flag=no if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then --- 7997,8003 ---- echo "$ac_t""$gcc_cv_as_dwarf2_debug_line" 1>&6 echo $ac_n "checking assembler --gdwarf2 support""... $ac_c" 1>&6 ! echo "configure:8001: checking assembler --gdwarf2 support" >&5 gcc_cv_as_gdwarf2_flag=no if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then *************** fi *** 7944,7950 **** echo "$ac_t""$gcc_cv_as_gdwarf2_flag" 1>&6 echo $ac_n "checking assembler --gstabs support""... $ac_c" 1>&6 ! echo "configure:7948: checking assembler --gstabs support" >&5 gcc_cv_as_gstabs_flag=no if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then --- 8026,8032 ---- echo "$ac_t""$gcc_cv_as_gdwarf2_flag" 1>&6 echo $ac_n "checking assembler --gstabs support""... $ac_c" 1>&6 ! echo "configure:8030: checking assembler --gstabs support" >&5 gcc_cv_as_gstabs_flag=no if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then *************** fi *** 7979,7985 **** echo "$ac_t""$gcc_cv_as_gstabs_flag" 1>&6 echo $ac_n "checking linker read-only and read-write section mixing""... $ac_c" 1>&6 ! echo "configure:7983: checking linker read-only and read-write section mixing" >&5 gcc_cv_ld_ro_rw_mix=unknown if test x$gcc_cv_gld_major_version != x -a x$gcc_cv_gld_minor_version != x; then if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 10 -o "$gcc_cv_gld_major_version" -gt 2 && grep 'EMUL = elf' ../ld/Makefile > /dev/null; then --- 8061,8067 ---- echo "$ac_t""$gcc_cv_as_gstabs_flag" 1>&6 echo $ac_n "checking linker read-only and read-write section mixing""... $ac_c" 1>&6 ! echo "configure:8065: checking linker read-only and read-write section mixing" >&5 gcc_cv_ld_ro_rw_mix=unknown if test x$gcc_cv_gld_major_version != x -a x$gcc_cv_gld_minor_version != x; then if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 10 -o "$gcc_cv_gld_major_version" -gt 2 && grep 'EMUL = elf' ../ld/Makefile > /dev/null; then *************** fi *** 8017,8023 **** echo "$ac_t""$gcc_cv_ld_ro_rw_mix" 1>&6 echo $ac_n "checking linker PT_GNU_EH_FRAME support""... $ac_c" 1>&6 ! echo "configure:8021: checking linker PT_GNU_EH_FRAME support" >&5 gcc_cv_ld_eh_frame_hdr=no if test x$gcc_cv_gld_major_version != x -a x$gcc_cv_gld_minor_version != x; then if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 12 -o "$gcc_cv_gld_major_version" -gt 2 && grep 'EMUL = elf' ../ld/Makefile > /dev/null; then --- 8099,8105 ---- echo "$ac_t""$gcc_cv_ld_ro_rw_mix" 1>&6 echo $ac_n "checking linker PT_GNU_EH_FRAME support""... $ac_c" 1>&6 ! echo "configure:8103: checking linker PT_GNU_EH_FRAME support" >&5 gcc_cv_ld_eh_frame_hdr=no if test x$gcc_cv_gld_major_version != x -a x$gcc_cv_gld_minor_version != x; then if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 12 -o "$gcc_cv_gld_major_version" -gt 2 && grep 'EMUL = elf' ../ld/Makefile > /dev/null; then *************** echo "$ac_t""$gcc_cv_ld_eh_frame_hdr" 1> *** 8041,8047 **** case "$target" in mips*-*-*) echo $ac_n "checking whether libgloss uses STARTUP directives consistently""... $ac_c" 1>&6 ! echo "configure:8045: checking whether libgloss uses STARTUP directives consistently" >&5 gcc_cv_mips_libgloss_startup=no gcc_cv_libgloss_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/libgloss if test "x$exec_prefix" = xNONE; then --- 8123,8129 ---- case "$target" in mips*-*-*) echo $ac_n "checking whether libgloss uses STARTUP directives consistently""... $ac_c" 1>&6 ! echo "configure:8127: checking whether libgloss uses STARTUP directives consistently" >&5 gcc_cv_mips_libgloss_startup=no gcc_cv_libgloss_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/libgloss if test "x$exec_prefix" = xNONE; then *************** EOF *** 8070,8076 **** ;; esac ! if test "$prefix" != "/usr" && test "x$prefix" != "x$local_prefix" ; then cat >> confdefs.h <> confdefs.h <&6 ! echo "configure:8249: checking whether to enable maintainer-specific portions of Makefiles" >&5 # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then enableval="$enable_maintainer_mode" --- 8328,8334 ---- echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6 ! echo "configure:8332: checking whether to enable maintainer-specific portions of Makefiles" >&5 # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then enableval="$enable_maintainer_mode" *************** s%@includedir@%$includedir%g *** 8726,8731 **** --- 8809,8817 ---- s%@oldincludedir@%$oldincludedir%g s%@infodir@%$infodir%g s%@mandir@%$mandir%g + s%@TARGET_SYSTEM_ROOT@%$TARGET_SYSTEM_ROOT%g + s%@TARGET_SYSTEM_ROOT_DEFINE@%$TARGET_SYSTEM_ROOT_DEFINE%g + s%@CROSS_SYSTEM_HEADER_DIR@%$CROSS_SYSTEM_HEADER_DIR%g s%@host@%$host%g s%@host_alias@%$host_alias%g s%@host_cpu@%$host_cpu%g diff -Nrc3pad gcc-3.3.2/gcc/configure.in gcc-3.3.3/gcc/configure.in *** gcc-3.3.2/gcc/configure.in Wed Sep 17 23:37:52 2003 --- gcc-3.3.3/gcc/configure.in Tue Dec 2 01:56:12 2003 *************** changequote([, ])dnl *** 177,182 **** --- 177,218 ---- fi fi + AC_ARG_WITH(sysroot, + [ --with-sysroot[=DIR] Search for usr/lib, usr/include, et al, within DIR.], + [ + case ${with_sysroot} in + yes) TARGET_SYSTEM_ROOT='${exec_prefix}/${target_alias}/sys-root' ;; + *) TARGET_SYSTEM_ROOT=$with_sysroot ;; + esac + + TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"$(TARGET_SYSTEM_ROOT)\"' + CROSS_SYSTEM_HEADER_DIR='$(TARGET_SYSTEM_ROOT)$(NATIVE_SYSTEM_HEADER_DIR)' + + if test "x$exec_prefix" = xNONE; then + if test "x$prefix" = xNONE; then + test_prefix=/usr/local + else + test_prefix=$prefix + fi + else + test_prefix=$exec_prefix + fi + case ${TARGET_SYSTEM_ROOT} in + "${test_prefix}"|"${test_prefix}/"*|\ + '${exec_prefix}'|'${exec_prefix}/'*) + t="$TARGET_SYSTEM_ROOT_DEFINE -DTARGET_SYSTEM_ROOT_RELOCATABLE" + TARGET_SYSTEM_ROOT_DEFINE="$t" + ;; + esac + ], [ + TARGET_SYSTEM_ROOT= + TARGET_SYSTEM_ROOT_DEFINE= + CROSS_SYSTEM_HEADER_DIR='$(gcc_tooldir)/sys-include' + ]) + AC_SUBST(TARGET_SYSTEM_ROOT) + AC_SUBST(TARGET_SYSTEM_ROOT_DEFINE) + AC_SUBST(CROSS_SYSTEM_HEADER_DIR) + # Determine the host, build, and target systems AC_CANONICAL_SYSTEM *************** if test $gcc_cv_type_clock_t = yes; then *** 781,786 **** --- 817,835 ---- [Define if defines clock_t.]) fi + AC_CACHE_CHECK(for uchar, gcc_cv_type_uchar, + [AC_TRY_COMPILE([ + #include "ansidecl.h" + #include "system.h" + ], + [if ((uchar *)0) return 0; + if (sizeof(uchar)) return 0;], + ac_cv_type_uchar=yes, ac_cv_type_uchar=no)]) + if test $ac_cv_type_uchar = yes; then + AC_DEFINE(HAVE_UCHAR, 1, + [Define if provides uchar.]) + fi + AC_ARG_ENABLE(initfini-array, [ --enable-initfini-array use .init_array/.fini_array sections], gcc_cv_initfinit_array=$enableval, [gcc_AC_INITFINI_ARRAY]) *************** then *** 1214,1219 **** --- 1263,1271 ---- | powerpc*-*-*,powerpc64*-*-*) CROSS="$CROSS -DNATIVE_CROSS" ;; esac + elif test "x$TARGET_SYSTEM_ROOT" != x; then + # This is just $(TARGET_SYSTEM_ROOT)$(NATIVE_SYSTEM_HEADER_DIR) + SYSTEM_HEADER_DIR='$(CROSS_SYSTEM_HEADER_DIR)' fi # If this is a cross-compiler that does not *************** fi *** 1224,1235 **** # This prevents libgcc2 from containing any code which requires libc # support. inhibit_libc= ! if [test x$host != x$target] && [test x$with_headers = x]; then inhibit_libc=-Dinhibit_libc - else - if [test x$with_newlib = xyes]; then - inhibit_libc=-Dinhibit_libc - fi fi AC_SUBST(inhibit_libc) --- 1276,1284 ---- # This prevents libgcc2 from containing any code which requires libc # support. inhibit_libc= ! if { test x$host != x$target && test "x$with_headers" = x && ! test "x$with_sysroot" = x ; } || test x$with_newlib = xyes ; then inhibit_libc=-Dinhibit_libc fi AC_SUBST(inhibit_libc) *************** then *** 1256,1263 **** HOST_CC='$(CC_FOR_BUILD)' HOST_CFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS_FOR_BUILD) $(XCFLAGS)' ! STMP_FIXINC= ! STMP_FIXPROTO= fi # Expand extra_headers to include complete path. --- 1305,1314 ---- HOST_CC='$(CC_FOR_BUILD)' HOST_CFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS_FOR_BUILD) $(XCFLAGS)' ! if test "x$TARGET_SYSTEM_ROOT" = x; then ! STMP_FIXINC= ! STMP_FIXPROTO= ! fi fi # Expand extra_headers to include complete path. *************** case "$target" in *** 2417,2423 **** ;; esac ! if test "$prefix" != "/usr" && test "x$prefix" != "x$local_prefix" ; then AC_DEFINE_UNQUOTED(PREFIX_INCLUDE_DIR, "$prefix/include") fi --- 2468,2475 ---- ;; esac ! if test x$with_sysroot = x && test x$host = x$target \ ! && test "$prefix" != "/usr" && test "x$prefix" != "x$local_prefix" ; then AC_DEFINE_UNQUOTED(PREFIX_INCLUDE_DIR, "$prefix/include") fi diff -Nrc3pad gcc-3.3.2/gcc/cp/ChangeLog gcc-3.3.3/gcc/cp/ChangeLog *** gcc-3.3.2/gcc/cp/ChangeLog Thu Oct 16 19:43:43 2003 --- gcc-3.3.3/gcc/cp/ChangeLog Sat Feb 14 20:18:15 2004 *************** *** 1,3 **** --- 1,239 ---- + 2004-02-14 Release Manager + + * GCC 3.3.3 Released. + + 2004-02-05 Giovanni Bajo + + PR c++/13086 + * init.c (build_delete): Emit a more informative error message in + case of an incomplete type, and on the correct source line. + + 2004-01-30 Giovanni Bajo + + PR c++/13683 + * call.c (convert_arg_to_ellipsis): Don't emit a warning if within + a sizeof expression.block + + 2004-01-29 Aldy Hernandez + + Backport: + + 2004-01-17 Fred Fish + + PR c++/11895 + * cp/decl.c (reshape_init): Handle VECTOR_TYPE like ARRAY_TYPE, + except don't call array_type_nelts() with a VECTOR_TYPE. + + 2004-01-29 Aldy Hernandez + + Backport: + 2003-06-03 Jason Merrill + + * cp/cp-tree.h (CP_AGGREGATE_TYPE_P): Accept vectors. + + * cp/decl.c (reshape_init): Handle vectors. + + * testsuite/g++.dg/init/array10.C: New. + + 2004-01-25 Kriang Lerdsuwanakij + + PR c++/13797 + * pt.c (instantiate_class_template): Add an error_mark_node + check. + (tsubst_decl) : Likewise. + + Backport from mainline + 2003-05-09 Kriang Lerdsuwanakij + + PR c++/10555, c++/10576 + * pt.c (lookup_template_class): Handle class template with + multiple levels of parameters when one of the levels contain + errors. + + 2004-01-21 Gabriel Dos Reis + + Backport from mainline + 2004-01-16 Mark Mitchell + + PR c++/13574 + * decl.c (compute_array_index_type): Fix grammar in comment. + * init.c (build_zero_init): Handle zero-sized arrays correctly. + + 2004-01-21 Gabriel Dos Reis + + Backport from mainline + 2004-01-16 Mark Mitchell + + PR c++/13478 + * call.c (initialize_reference): Pass -1 for inner parameter to + convert_like_real. + + 2004-01-21 Gabriel Dos Reis + + Backport from mainline + 2004-01-05 Mark Mitchell + + PR c++/13057 + * class.c (build_clone): Copy type attributes from the original + function to the clone. + + 2004-01-21 Gabriel Dos Reis + + Backport from mainline + 2003-12-28 Mark Mitchell + + PR c++/13009 + * call.c (build_special_member_call): Do not assume that we have a + pointer to the complete object in an assignment operator. + + 2004-01-20 Kriang Lerdsuwanakij + + PR c++/13289 + * pt.c (instantiate_decl): Set DECL_TEMPLATE_INSTANTIATED before + calling regenerate_decl_from_template. + + 2004-01-14 Gabriel Dos Reis + + Backport from mainline + 2004-01-05 Mark Mitchell + + PR c++/12816 + * class.c (build_vtbl_ref_1): Do not unconditionally mark vtable + references as constant. + + 2004-01-11 Gabriel Dos Reis + + PR c++/13544 + * decl.c (build_enumerator): Set DECL_CONTEXT after the enumerator + has been pushed. + (pushdecl): Don't use DECL_NAMESPACE_SCOPE_P to test whether a + decl has a namespace-scope; that isn't really what it means. + + 2004-01-02 Matthias Klose + + Backport from mainline: + 2003-12-28 Mark Mitchell + + PR c++/13081 + * decl.c (duplicate_decls): Preserve inline-ness when redeclaring + a function template. + + 2003-12-20 Andrew Pinski + + Backport from mainline: + 2003-12-30 Nathan Sidwell + + PR c++/13507 + * decl.c (duplicate_decls): Use build_type_attribute_variant to + merge attributes. + + 2003-12-30 Nathan Sidwell + + PR c++/13445 + * pt.c (instantiate_class_template): Push to class's scope before + tsubsting base. + + 2003-12-28 Roger Sayle + + PR c++/13070 + * decl.c (duplicate_decls): When setting the type of an anticipated + declaration, merge the existing type attributes. + + 2003-12-27 Giovanni Bajo + + Backport from mainline: + 2003-12-16 Giovanni Bajo + + PR c++/2294 + * decl.c (push_overloaded_decl): always construct an OVERLOAD + if the declaration comes from an using declaration. + + 2003-12-26 Gabriel Dos Reis + + Backport from mainline: + 2003-12-16 Mark Mitchell + + PR c++/12696 + * decl.c (reshape_init): Recover quickly from errors. + + 2003-12-26 Gabriel Dos Reis + + Backport from mainline: + 2003-12-22 Mark Mitchell + + PR C++/12862 + * decl.c (pushdecl): Look up all namespace-scope entities in their + corresponding namespace. + + 2003-12-22 Andrew Pinski + + PR c++/5050 + * tree.c (cp_start_inlining): Remove. + (cp_end_inlining): Remove. + * cp-lang.c (LANG_HOOKS_TREE_INLINING_START_INLINING): Do not define. + (LANG_HOOKS_TREE_INLINING_END_INLINING): Do not define. + * cp-tree.h (cp_start_inlining): Do not declare. + (cp_end_inlining): Do not declare. + + 2003-12-21 Mark Mitchell + + PR c++/11554 + * init.c (sort_mem_initializers): Add warning. + + 2003-12-19 Jason Merrill + + PR c++/13371 + * typeck.c (build_modify_expr): Stabilize lhs if we're narrowing. + + 2003-12-18 Jason Merrill + + PR c++/12253 + * init.c (build_vec_init): Initialization of an element from + an initializer list is also a full-expression. + + 2003-12-18 Kriang Lerdsuwanakij + + PR c++/13262 + * pt.c (instantiate_decl): Wrap push_nested_class and + pop_nested_class around cp_finish_decl call for static member + variable. + + 2003-12-06 Mark Mitchell + + PR c++/13323 + * class.c (same_signature_p): Handle conversion operators + correctly. + (check_for_override): Likewise. + + 2003-11-14 Bernardo Innocenti + + Backport from 3.4-branch. + + 2003-06-25 Giovanni Bajo + + PR c++/2094 + * pt.c (unify): Add support for PTRMEM_CST and + FIELD_DECL unification. + + 2003-11-08 Bernardo Innocenti + + Backport from 3.4-branch. + + 2003-10-08 Giovanni Bajo + + * cp_tree.h: Added TFF_NO_FUNCTION_ARGUMENTS. + * error.c (dump_function_decl): Use it to skip the dump of the + arguments. + (dump_expr): When dumping a declaration found within an + expression, always set TFF_NO_FUNCTION_ARGUMENTS + in the flags. + + 2003-10-23 Jason Merrill + + PR c++/12726 + * tree.c (build_target_expr_with_type): Don't call force_rvalue + for CONSTRUCTORs. + 2003-10-16 Release Manager * GCC 3.3.2 Released. diff -Nrc3pad gcc-3.3.2/gcc/cp/call.c gcc-3.3.3/gcc/cp/call.c *** gcc-3.3.2/gcc/cp/call.c Tue Oct 7 05:56:58 2003 --- gcc-3.3.3/gcc/cp/call.c Fri Jan 30 18:20:54 2004 *************** convert_arg_to_ellipsis (arg) *** 4308,4323 **** arg = require_complete_type (arg); ! if (arg != error_mark_node && ! pod_type_p (TREE_TYPE (arg))) ! { ! /* Undefined behavior [expr.call] 5.2.2/7. We used to just warn ! here and do a bitwise copy, but now cp_expr_size will abort if we ! try to do that. */ ! warning ("cannot pass objects of non-POD type `%#T' through `...'; \ ! call will abort at runtime", ! TREE_TYPE (arg)); ! arg = call_builtin_trap (); ! } return arg; } --- 4308,4327 ---- arg = require_complete_type (arg); ! if (arg != error_mark_node ! && !pod_type_p (TREE_TYPE (arg))) ! { ! /* Undefined behavior [expr.call] 5.2.2/7. We used to just warn ! here and do a bitwise copy, but now cp_expr_size will abort if we ! try to do that. ! If the call appears in the context of a sizeof expression, ! there is no need to emit a warning, since the expression won't be ! evaluated. We keep the builtin_trap just as a safety check. */ ! if (!skip_evaluation) ! warning ("cannot pass objects of non-POD type `%#T' through `...'; " ! "call will abort at runtime", TREE_TYPE (arg)); ! arg = call_builtin_trap (); ! } return arg; } *************** build_special_member_call (tree instance *** 4878,4891 **** || name == deleting_dtor_identifier) my_friendly_assert (args == NULL_TREE, 20020712); ! /* We must perform the conversion here so that we do not ! subsequently check to see whether BINFO is an accessible ! base. (It is OK for a constructor to call a constructor in ! an inaccessible base as long as the constructor being called ! is accessible.) */ if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (instance), BINFO_TYPE (binfo))) ! instance = convert_to_base_statically (instance, binfo); } my_friendly_assert (instance != NULL_TREE, 20020712); --- 4882,4904 ---- || name == deleting_dtor_identifier) my_friendly_assert (args == NULL_TREE, 20020712); ! /* Convert to the base class, if necessary. */ if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (instance), BINFO_TYPE (binfo))) ! { ! if (name != ansi_assopname (NOP_EXPR)) ! /* For constructors and destructors, either the base is ! non-virtual, or it is virtual but we are doing the ! conversion from a constructor or destructor for the ! complete object. In either case, we can convert ! statically. */ ! instance = convert_to_base_statically (instance, binfo); ! else ! /* However, for assignment operators, we must convert ! dynamically if the base is virtual. */ ! instance = build_base_path (PLUS_EXPR, instance, ! binfo, /*nonnull=*/1); ! } } my_friendly_assert (instance != NULL_TREE, 20020712); *************** initialize_reference (type, expr, decl, *** 6164,6170 **** else base_conv_type = NULL_TREE; /* Perform the remainder of the conversion. */ ! expr = convert_like (conv, expr); if (!real_non_cast_lvalue_p (expr)) { tree init; --- 6177,6186 ---- else base_conv_type = NULL_TREE; /* Perform the remainder of the conversion. */ ! expr = convert_like_real (conv, expr, ! /*fn=*/NULL_TREE, /*argnum=*/0, ! /*inner=*/-1, ! /*issue_conversion_warnings=*/true); if (!real_non_cast_lvalue_p (expr)) { tree init; diff -Nrc3pad gcc-3.3.2/gcc/cp/class.c gcc-3.3.3/gcc/cp/class.c *** gcc-3.3.2/gcc/cp/class.c Sun Oct 5 03:46:56 2003 --- gcc-3.3.3/gcc/cp/class.c Wed Jan 21 05:52:28 2004 *************** build_vtbl_ref_1 (instance, idx) *** 497,503 **** assemble_external (vtbl); aref = build_array_ref (vtbl, idx); ! TREE_CONSTANT (aref) = 1; return aref; } --- 497,503 ---- assemble_external (vtbl); aref = build_array_ref (vtbl, idx); ! TREE_CONSTANT (aref) |= TREE_CONSTANT (vtbl) && TREE_CONSTANT (idx); return aref; } *************** same_signature_p (fndecl, base_fndecl) *** 2204,2210 **** if (DECL_DESTRUCTOR_P (base_fndecl) || DECL_DESTRUCTOR_P (fndecl)) return 0; ! if (DECL_NAME (fndecl) == DECL_NAME (base_fndecl)) { tree types, base_types; types = TYPE_ARG_TYPES (TREE_TYPE (fndecl)); --- 2204,2214 ---- if (DECL_DESTRUCTOR_P (base_fndecl) || DECL_DESTRUCTOR_P (fndecl)) return 0; ! if (DECL_NAME (fndecl) == DECL_NAME (base_fndecl) ! || (DECL_CONV_FN_P (fndecl) ! && DECL_CONV_FN_P (base_fndecl) ! && same_type_p (DECL_CONV_FN_TYPE (fndecl), ! DECL_CONV_FN_TYPE (base_fndecl)))) { tree types, base_types; types = TYPE_ARG_TYPES (TREE_TYPE (fndecl)); *************** check_for_override (decl, ctype) *** 2631,2637 **** override a virtual function from a base class. */ return; if ((DECL_DESTRUCTOR_P (decl) ! || IDENTIFIER_VIRTUAL_P (DECL_NAME (decl))) && look_for_overrides (ctype, decl) && !DECL_STATIC_FUNCTION_P (decl)) /* Set DECL_VINDEX to a value that is neither an INTEGER_CST nor --- 2635,2642 ---- override a virtual function from a base class. */ return; if ((DECL_DESTRUCTOR_P (decl) ! || IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) ! || DECL_CONV_FN_P (decl)) && look_for_overrides (ctype, decl) && !DECL_STATIC_FUNCTION_P (decl)) /* Set DECL_VINDEX to a value that is neither an INTEGER_CST nor *************** build_clone (fn, name) *** 4098,4103 **** --- 4103,4111 ---- if (exceptions) TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone), exceptions); + TREE_TYPE (clone) + = build_type_attribute_variant (TREE_TYPE (clone), + TYPE_ATTRIBUTES (TREE_TYPE (fn))); } /* Copy the function parameters. But, DECL_ARGUMENTS on a TEMPLATE_DECL diff -Nrc3pad gcc-3.3.2/gcc/cp/cp-lang.c gcc-3.3.3/gcc/cp/cp-lang.c *** gcc-3.3.2/gcc/cp/cp-lang.c Mon Mar 10 07:28:40 2003 --- gcc-3.3.3/gcc/cp/cp-lang.c Mon Dec 22 21:00:53 2003 *************** static bool cp_var_mod_type_p PARAMS ((t *** 129,138 **** #define LANG_HOOKS_TREE_INLINING_ANON_AGGR_TYPE_P anon_aggr_type_p #undef LANG_HOOKS_TREE_INLINING_VAR_MOD_TYPE_P #define LANG_HOOKS_TREE_INLINING_VAR_MOD_TYPE_P cp_var_mod_type_p - #undef LANG_HOOKS_TREE_INLINING_START_INLINING - #define LANG_HOOKS_TREE_INLINING_START_INLINING cp_start_inlining - #undef LANG_HOOKS_TREE_INLINING_END_INLINING - #define LANG_HOOKS_TREE_INLINING_END_INLINING cp_end_inlining #undef LANG_HOOKS_TREE_DUMP_DUMP_TREE_FN #define LANG_HOOKS_TREE_DUMP_DUMP_TREE_FN cp_dump_tree #undef LANG_HOOKS_TREE_DUMP_TYPE_QUALS_FN --- 129,134 ---- diff -Nrc3pad gcc-3.3.2/gcc/cp/cp-tree.h gcc-3.3.3/gcc/cp/cp-tree.h *** gcc-3.3.2/gcc/cp/cp-tree.h Thu Oct 2 12:00:48 2003 --- gcc-3.3.3/gcc/cp/cp-tree.h Fri Jan 30 00:41:01 2004 *************** struct lang_decl GTY(()) *** 2546,2554 **** An aggregate is an array or a class with no user-declared constructors, no private or protected non-static data members, no ! base classes, and no virtual functions. */ #define CP_AGGREGATE_TYPE_P(TYPE) \ (TREE_CODE (TYPE) == ARRAY_TYPE \ || (CLASS_TYPE_P (TYPE) \ && !CLASSTYPE_NON_AGGREGATE (TYPE))) --- 2546,2557 ---- An aggregate is an array or a class with no user-declared constructors, no private or protected non-static data members, no ! base classes, and no virtual functions. ! ! As an extension, we also treat vectors as aggregates. */ #define CP_AGGREGATE_TYPE_P(TYPE) \ (TREE_CODE (TYPE) == ARRAY_TYPE \ + || TREE_CODE (TYPE) == VECTOR_TYPE \ || (CLASS_TYPE_P (TYPE) \ && !CLASSTYPE_NON_AGGREGATE (TYPE))) *************** enum overload_flags { NO_SPECIAL = 0, DT *** 3548,3554 **** TFF_TEMPLATE_HEADER: show the template<...> header in a template-declaration. TFF_TEMPLATE_NAME: show only template-name. ! TFF_EXPR_IN_PARENS: Parenthesize expressions. */ #define TFF_PLAIN_IDENTIFIER (0) #define TFF_SCOPE (1) --- 3551,3558 ---- TFF_TEMPLATE_HEADER: show the template<...> header in a template-declaration. TFF_TEMPLATE_NAME: show only template-name. ! TFF_EXPR_IN_PARENS: parenthesize expressions. ! TFF_NO_FUNCTION_ARGUMENTS: don't show function arguments. */ #define TFF_PLAIN_IDENTIFIER (0) #define TFF_SCOPE (1) *************** enum overload_flags { NO_SPECIAL = 0, DT *** 3561,3566 **** --- 3565,3571 ---- #define TFF_TEMPLATE_HEADER (1 << 7) #define TFF_TEMPLATE_NAME (1 << 8) #define TFF_EXPR_IN_PARENS (1 << 9) + #define TFF_NO_FUNCTION_ARGUMENTS (1 << 10) /* Returns the TEMPLATE_DECL associated to a TEMPLATE_TEMPLATE_PARM node. */ *************** extern int cp_is_overload_p PARAMS ((tre *** 4377,4384 **** extern int cp_auto_var_in_fn_p PARAMS ((tree,tree)); extern tree cp_copy_res_decl_for_inlining PARAMS ((tree, tree, tree, void*, int*, void*)); - extern int cp_start_inlining PARAMS ((tree)); - extern void cp_end_inlining PARAMS ((tree)); /* in typeck.c */ extern int string_conv_p PARAMS ((tree, tree, int)); --- 4382,4387 ---- diff -Nrc3pad gcc-3.3.2/gcc/cp/decl.c gcc-3.3.3/gcc/cp/decl.c *** gcc-3.3.2/gcc/cp/decl.c Thu Oct 16 09:33:52 2003 --- gcc-3.3.3/gcc/cp/decl.c Fri Jan 30 00:42:22 2004 *************** duplicate_decls (newdecl, olddecl) *** 3415,3421 **** /* Even if the types match, prefer the new declarations type for anitipated built-ins, for exception lists, etc... */ else if (DECL_ANTICIPATED (olddecl)) ! TREE_TYPE (olddecl) = TREE_TYPE (newdecl); /* Whether or not the builtin can throw exceptions has no bearing on this declarator. */ --- 3415,3428 ---- /* Even if the types match, prefer the new declarations type for anitipated built-ins, for exception lists, etc... */ else if (DECL_ANTICIPATED (olddecl)) ! { ! tree type = TREE_TYPE (newdecl); ! tree attribs = (*targetm.merge_type_attributes) ! (TREE_TYPE (olddecl), type); ! ! type = build_type_attribute_variant (type, attribs); ! TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type; ! } /* Whether or not the builtin can throw exceptions has no bearing on this declarator. */ *************** duplicate_decls (newdecl, olddecl) *** 3737,3742 **** --- 3744,3757 ---- = DECL_SOURCE_LOCATION (newdecl); } + if (DECL_FUNCTION_TEMPLATE_P (newdecl)) + { + DECL_INLINE (DECL_TEMPLATE_RESULT (olddecl)) + |= DECL_INLINE (DECL_TEMPLATE_RESULT (newdecl)); + DECL_DECLARED_INLINE_P (DECL_TEMPLATE_RESULT (olddecl)) + |= DECL_DECLARED_INLINE_P (DECL_TEMPLATE_RESULT (newdecl)); + } + return 1; } *************** pushdecl (x) *** 4127,4135 **** /* In case this decl was explicitly namespace-qualified, look it up in its namespace context. */ ! if (TREE_CODE (x) == VAR_DECL && DECL_NAMESPACE_SCOPE_P (x) ! && namespace_bindings_p ()) ! t = namespace_binding (name, DECL_CONTEXT (x)); else t = lookup_name_current_level (name); --- 4142,4150 ---- /* In case this decl was explicitly namespace-qualified, look it up in its namespace context. */ ! if ((DECL_CONTEXT (x) && TREE_CODE (DECL_CONTEXT (x)) == NAMESPACE_DECL) ! && namespace_bindings_p ()) ! t = namespace_binding (name, DECL_CONTEXT (x)); else t = lookup_name_current_level (name); *************** push_overloaded_decl (decl, flags) *** 4919,4925 **** } } ! if (old || TREE_CODE (decl) == TEMPLATE_DECL) { if (old && TREE_CODE (old) != OVERLOAD) new_binding = ovl_cons (decl, ovl_cons (old, NULL_TREE)); --- 4934,4944 ---- } } ! if (old || TREE_CODE (decl) == TEMPLATE_DECL ! /* If it's a using declaration, we always need to build an OVERLOAD, ! because it's the only way to remember that the declaration comes ! from 'using', and have the lookup behave correctly. */ ! || (flags & PUSH_USING)) { if (old && TREE_CODE (old) != OVERLOAD) new_binding = ovl_cons (decl, ovl_cons (old, NULL_TREE)); *************** reshape_init (tree type, tree *initp) *** 8221,8227 **** /* If the initializer is brace-enclosed, pull initializers from the enclosed elements. Advance past the brace-enclosed initializer now. */ ! if (TREE_CODE (old_init_value) == CONSTRUCTOR && TREE_HAS_CONSTRUCTOR (old_init_value)) { *initp = TREE_CHAIN (old_init); --- 8240,8247 ---- /* If the initializer is brace-enclosed, pull initializers from the enclosed elements. Advance past the brace-enclosed initializer now. */ ! if (TREE_CODE (old_init_value) == CONSTRUCTOR ! && TREE_TYPE (old_init_value) == NULL_TREE && TREE_HAS_CONSTRUCTOR (old_init_value)) { *initp = TREE_CHAIN (old_init); *************** reshape_init (tree type, tree *initp) *** 8266,8273 **** non-empty subaggregate, brace elision is assumed and the initializer is considered for the initialization of the first member of the subaggregate. */ ! if (CLASS_TYPE_P (type) ! && !brace_enclosed_p && can_convert_arg (type, TREE_TYPE (old_init_value), old_init_value)) { *initp = TREE_CHAIN (old_init); --- 8286,8292 ---- non-empty subaggregate, brace elision is assumed and the initializer is considered for the initialization of the first member of the subaggregate. */ ! if (!brace_enclosed_p && can_convert_arg (type, TREE_TYPE (old_init_value), old_init_value)) { *initp = TREE_CHAIN (old_init); *************** reshape_init (tree type, tree *initp) *** 8310,8317 **** empty class shall have the form of an empty initializer-list {}. */ if (!brace_enclosed_p) ! error ("initializer for `%T' must be brace-enclosed", ! type); } else { --- 8329,8339 ---- empty class shall have the form of an empty initializer-list {}. */ if (!brace_enclosed_p) ! { ! error ("initializer for `%T' must be brace-enclosed", ! type); ! return error_mark_node; ! } } else { *************** reshape_init (tree type, tree *initp) *** 8336,8341 **** --- 8358,8365 ---- break; field_init = reshape_init (TREE_TYPE (field), initp); + if (field_init == error_mark_node) + return error_mark_node; TREE_CHAIN (field_init) = CONSTRUCTOR_ELTS (new_init); CONSTRUCTOR_ELTS (new_init) = field_init; /* [dcl.init.aggr] *************** reshape_init (tree type, tree *initp) *** 8349,8362 **** } } } ! else if (TREE_CODE (type) == ARRAY_TYPE) { tree index; tree max_index; /* If the bound of the array is known, take no more initializers than are allowed. */ ! max_index = (TYPE_DOMAIN (type) ? array_type_nelts (type) : NULL_TREE); /* Loop through the array elements, gathering initializers. */ for (index = size_zero_node; --- 8373,8386 ---- } } } ! else if ((TREE_CODE (type) == ARRAY_TYPE)|| (TREE_CODE (type) == VECTOR_TYPE)) { tree index; tree max_index; /* If the bound of the array is known, take no more initializers than are allowed. */ ! max_index = ((TYPE_DOMAIN (type) && (TREE_CODE (type) == ARRAY_TYPE)) ? array_type_nelts (type) : NULL_TREE); /* Loop through the array elements, gathering initializers. */ for (index = size_zero_node; *************** reshape_init (tree type, tree *initp) *** 8366,8371 **** --- 8390,8397 ---- tree element_init; element_init = reshape_init (TREE_TYPE (type), initp); + if (element_init == error_mark_node) + return error_mark_node; TREE_CHAIN (element_init) = CONSTRUCTOR_ELTS (new_init); CONSTRUCTOR_ELTS (new_init) = element_init; if (TREE_PURPOSE (element_init)) *************** compute_array_index_type (name, size) *** 10150,10158 **** error ("size of array is negative"); size = integer_one_node; } ! /* Except that an extension we allow zero-sized arrays. We ! always allow them in system headers because glibc uses ! them. */ else if (integer_zerop (size) && pedantic && !in_system_header) { if (name) --- 10176,10183 ---- error ("size of array is negative"); size = integer_one_node; } ! /* As an extension we allow zero-sized arrays. We always allow ! them in system headers because glibc uses them. */ else if (integer_zerop (size) && pedantic && !in_system_header) { if (name) *************** build_enumerator (name, value, enumtype) *** 14160,14166 **** a function could mean local to a class method. */ decl = build_decl (CONST_DECL, name, type); - DECL_CONTEXT (decl) = FROB_CONTEXT (context); DECL_INITIAL (decl) = value; TREE_READONLY (decl) = 1; --- 14185,14190 ---- *************** build_enumerator (name, value, enumtype) *** 14170,14176 **** things like `S::i' later.) */ finish_member_declaration (decl); else ! pushdecl (decl); /* Add this enumeration constant to the list for this type. */ TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype)); --- 14194,14207 ---- things like `S::i' later.) */ finish_member_declaration (decl); else ! { ! pushdecl (decl); ! /* Contrary to finish_member_declaration, pushdecl does not properly ! set the DECL_CONTEXT. Do that now here. Doing that before calling ! pushdecl will confuse the logic used in that function. Hopefully, ! future versions will implement a more straight logic. */ ! DECL_CONTEXT (decl) = FROB_CONTEXT (context); ! } /* Add this enumeration constant to the list for this type. */ TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype)); diff -Nrc3pad gcc-3.3.2/gcc/cp/error.c gcc-3.3.3/gcc/cp/error.c *** gcc-3.3.2/gcc/cp/error.c Thu Jul 10 17:05:26 2003 --- gcc-3.3.3/gcc/cp/error.c Sat Nov 8 08:36:14 2003 *************** dump_function_decl (t, flags) *** 1162,1168 **** dump_function_name (t, flags); ! if (1) { dump_parameters (parmtypes, flags); --- 1162,1168 ---- dump_function_name (t, flags); ! if (!(flags & TFF_NO_FUNCTION_ARGUMENTS)) { dump_parameters (parmtypes, flags); *************** dump_expr (t, flags) *** 1458,1464 **** case TEMPLATE_DECL: case NAMESPACE_DECL: case OVERLOAD: ! dump_decl (t, flags & ~TFF_DECL_SPECIFIERS); break; case INTEGER_CST: --- 1458,1464 ---- case TEMPLATE_DECL: case NAMESPACE_DECL: case OVERLOAD: ! dump_decl (t, (flags & ~TFF_DECL_SPECIFIERS) | TFF_NO_FUNCTION_ARGUMENTS); break; case INTEGER_CST: diff -Nrc3pad gcc-3.3.2/gcc/cp/init.c gcc-3.3.3/gcc/cp/init.c *** gcc-3.3.2/gcc/cp/init.c Tue Oct 7 05:56:59 2003 --- gcc-3.3.3/gcc/cp/init.c Thu Feb 5 13:22:09 2004 *************** build_zero_init (tree type, tree nelts, *** 245,259 **** max_index = nelts ? nelts : array_type_nelts (type); my_friendly_assert (TREE_CODE (max_index) == INTEGER_CST, 20030618); ! for (index = size_zero_node; ! !tree_int_cst_lt (max_index, index); ! index = size_binop (PLUS_EXPR, index, size_one_node)) ! inits = tree_cons (index, ! build_zero_init (TREE_TYPE (type), ! /*nelts=*/NULL_TREE, ! static_storage_p), ! inits); ! CONSTRUCTOR_ELTS (init) = nreverse (inits); } else if (TREE_CODE (type) == REFERENCE_TYPE) ; --- 245,262 ---- max_index = nelts ? nelts : array_type_nelts (type); my_friendly_assert (TREE_CODE (max_index) == INTEGER_CST, 20030618); ! /* A zero-sized array, which is accepted as an extension, will ! have an upper bound of -1. */ ! if (!tree_int_cst_equal (max_index, integer_minus_one_node)) ! for (index = size_zero_node; ! !tree_int_cst_lt (max_index, index); ! index = size_binop (PLUS_EXPR, index, size_one_node)) ! inits = tree_cons (index, ! build_zero_init (TREE_TYPE (type), ! /*nelts=*/NULL_TREE, ! static_storage_p), ! inits); ! CONSTRUCTOR_ELTS (init) = nreverse (inits); } else if (TREE_CODE (type) == REFERENCE_TYPE) ; *************** sort_mem_initializers (tree t, tree mem_ *** 544,549 **** --- 547,553 ---- cp_warning_at (" `%#D'", subobject); else warning (" base `%T'", subobject); + warning (" when initialized here"); } /* Look again, from the beginning of the list. */ *************** build_vec_init (base, maxindex, init, fr *** 2832,2842 **** --- 2836,2848 ---- num_initialized_elts++; + current_stmt_tree ()->stmts_are_full_exprs_p = 1; if (IS_AGGR_TYPE (type) || TREE_CODE (type) == ARRAY_TYPE) finish_expr_stmt (build_aggr_init (baseref, elt, 0)); else finish_expr_stmt (build_modify_expr (baseref, NOP_EXPR, elt)); + current_stmt_tree ()->stmts_are_full_exprs_p = 0; finish_expr_stmt (build_unary_op (PREINCREMENT_EXPR, base, 0)); finish_expr_stmt (build_unary_op (PREDECREMENT_EXPR, iterator, 0)); *************** build_delete (type, addr, auto_delete, f *** 3092,3114 **** if (TREE_CODE (type) == POINTER_TYPE) { type = TYPE_MAIN_VARIANT (TREE_TYPE (type)); if (TREE_CODE (type) == ARRAY_TYPE) goto handle_array; ! if (VOID_TYPE_P (type) ! /* We don't want to warn about delete of void*, only other ! incomplete types. Deleting other incomplete types ! invokes undefined behavior, but it is not ill-formed, so ! compile to something that would even do The Right Thing ! (TM) should the type have a trivial dtor and no delete ! operator. */ ! || !complete_type_or_diagnostic (type, addr, 1) ! || !IS_AGGR_TYPE (type)) { ! /* Call the builtin operator delete. */ ! return build_builtin_delete_call (addr); } if (TREE_SIDE_EFFECTS (addr)) addr = save_expr (addr); --- 3098,3132 ---- if (TREE_CODE (type) == POINTER_TYPE) { + bool complete_p = true; + type = TYPE_MAIN_VARIANT (TREE_TYPE (type)); if (TREE_CODE (type) == ARRAY_TYPE) goto handle_array; ! /* We don't want to warn about delete of void*, only other ! incomplete types. Deleting other incomplete types ! invokes undefined behavior, but it is not ill-formed, so ! compile to something that would even do The Right Thing ! (TM) should the type have a trivial dtor and no delete ! operator. */ ! if (!VOID_TYPE_P (type)) { ! complete_type (type); ! if (!COMPLETE_TYPE_P (type)) ! { ! warning ("possible problem detected in invocation of " ! "delete operator:"); ! cxx_incomplete_type_diagnostic (addr, type, 1); ! inform ("neither the destructor nor the class-specific " ! "operator delete will be called, even if they are " ! "declared when the class is defined."); ! complete_p = false; ! } } + if (VOID_TYPE_P (type) || !complete_p || !IS_AGGR_TYPE (type)) + /* Call the builtin operator delete. */ + return build_builtin_delete_call (addr); if (TREE_SIDE_EFFECTS (addr)) addr = save_expr (addr); diff -Nrc3pad gcc-3.3.2/gcc/cp/parse.c gcc-3.3.3/gcc/cp/parse.c *** gcc-3.3.2/gcc/cp/parse.c Thu Oct 16 20:47:06 2003 --- gcc-3.3.3/gcc/cp/parse.c Sat Feb 14 20:44:00 2004 *************** *** 1,5 **** /* A Bison parser, made from parse.y ! by GNU bison 1.35. */ #define YYBISON 1 /* Identify Bison output. */ --- 1,5 ---- /* A Bison parser, made from parse.y ! by GNU bison 1.33. */ #define YYBISON 1 /* Identify Bison output. */ *************** typedef union { GTY(()) *** 341,347 **** struct unparsed_text *pi; } yystype; # define YYSTYPE yystype - # define YYSTYPE_IS_TRIVIAL 1 #endif #line 478 "parse.y" --- 341,346 ---- *************** static const short yycheck[] = *** 4359,4364 **** --- 4358,4373 ---- define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ + #ifdef __cplusplus + # define YYSTD(x) std::x + #else + # define YYSTD(x) x + #endif + + #ifndef YYPARSE_RETURN_TYPE + #define YYPARSE_RETURN_TYPE int + #endif + #if ! defined (yyoverflow) || defined (YYERROR_VERBOSE) /* The parser invokes alloca or malloc; define the necessary symbols. */ *************** static const short yycheck[] = *** 4381,4399 **** /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) # else ! # if defined (__STDC__) || defined (__cplusplus) ! # include /* INFRINGES ON USER NAME SPACE */ ! # define YYSIZE_T size_t # endif ! # define YYSTACK_ALLOC malloc ! # define YYSTACK_FREE free # endif - #endif /* ! defined (yyoverflow) || defined (YYERROR_VERBOSE) */ - - - #if (! defined (yyoverflow) \ - && (! defined (__cplusplus) \ - || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc --- 4390,4407 ---- /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) # else ! # ifdef __cplusplus ! # include /* INFRINGES ON USER NAME SPACE */ ! # define YYSIZE_T std::size_t ! # else ! # ifdef __STDC__ ! # include /* INFRINGES ON USER NAME SPACE */ ! # define YYSIZE_T size_t ! # endif # endif ! # define YYSTACK_ALLOC YYSTD (malloc) ! # define YYSTACK_FREE YYSTD (free) # endif /* A type that is properly aligned for any stack member. */ union yyalloc *************** union yyalloc *** 4420,4460 **** + YYSTACK_GAP_MAX) # endif ! /* Copy COUNT objects from FROM to TO. The source and destination do ! not overlap. */ ! # ifndef YYCOPY ! # if 1 < __GNUC__ ! # define YYCOPY(To, From, Count) \ ! __builtin_memcpy (To, From, (Count) * sizeof (*(From))) ! # else ! # define YYCOPY(To, From, Count) \ ! do \ ! { \ ! register YYSIZE_T yyi; \ ! for (yyi = 0; yyi < (Count); yyi++) \ ! (To)[yyi] = (From)[yyi]; \ ! } \ ! while (0) ! # endif ! # endif ! ! /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ ! # define YYSTACK_RELOCATE(Stack) \ do \ { \ YYSIZE_T yynewbytes; \ ! YYCOPY (&yyptr->Stack, Stack, yysize); \ Stack = &yyptr->Stack; \ ! yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (0) ! #endif #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) --- 4428,4451 ---- + YYSTACK_GAP_MAX) # endif ! /* Relocate the TYPE STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ ! # define YYSTACK_RELOCATE(Type, Stack) \ do \ { \ YYSIZE_T yynewbytes; \ ! yymemcpy ((char *) yyptr, (char *) (Stack), \ ! yysize * (YYSIZE_T) sizeof (Type)); \ Stack = &yyptr->Stack; \ ! yynewbytes = yystacksize * sizeof (Type) + YYSTACK_GAP_MAX; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (0) ! #endif /* ! defined (yyoverflow) || defined (YYERROR_VERBOSE) */ #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) *************** union yyalloc *** 4464,4472 **** # define YYSIZE_T size_t #endif #if ! defined (YYSIZE_T) ! # if defined (__STDC__) || defined (__cplusplus) ! # include /* INFRINGES ON USER NAME SPACE */ ! # define YYSIZE_T size_t # endif #endif #if ! defined (YYSIZE_T) --- 4455,4468 ---- # define YYSIZE_T size_t #endif #if ! defined (YYSIZE_T) ! # ifdef __cplusplus ! # include /* INFRINGES ON USER NAME SPACE */ ! # define YYSIZE_T std::size_t ! # else ! # ifdef __STDC__ ! # include /* INFRINGES ON USER NAME SPACE */ ! # define YYSIZE_T size_t ! # endif # endif #endif #if ! defined (YYSIZE_T) *************** while (0) *** 4545,4552 **** #if YYDEBUG # ifndef YYFPRINTF ! # include /* INFRINGES ON USER NAME SPACE */ ! # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ --- 4541,4552 ---- #if YYDEBUG # ifndef YYFPRINTF ! # ifdef __cplusplus ! # include /* INFRINGES ON USER NAME SPACE */ ! # else ! # include /* INFRINGES ON USER NAME SPACE */ ! # endif ! # define YYFPRINTF YYSTD (fprintf) # endif # define YYDPRINTF(Args) \ *************** do { \ *** 4554,4561 **** if (yydebug) \ YYFPRINTF Args; \ } while (0) ! /* Nonzero means print parse trace. It is left uninitialized so that ! multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) --- 4554,4563 ---- if (yydebug) \ YYFPRINTF Args; \ } while (0) ! /* Nonzero means print parse trace. [The following comment makes no ! sense to me. Could someone clarify it? --akim] Since this is ! uninitialized, it does not stop multiple parsers from coexisting. ! */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) *************** int yydebug; *** 4581,4586 **** --- 4583,4615 ---- # define YYMAXDEPTH 10000 #endif + #if ! defined (yyoverflow) && ! defined (yymemcpy) + # if __GNUC__ > 1 /* GNU C and GNU C++ define this. */ + # define yymemcpy __builtin_memcpy + # else /* not GNU C or C++ */ + + /* This is the most reliable way to avoid incompatibilities + in available built-in functions on various systems. */ + static void + # if defined (__STDC__) || defined (__cplusplus) + yymemcpy (char *yyto, const char *yyfrom, YYSIZE_T yycount) + # else + yymemcpy (yyto, yyfrom, yycount) + char *yyto; + const char *yyfrom; + YYSIZE_T yycount; + # endif + { + register const char *yyf = yyfrom; + register char *yyt = yyto; + register YYSIZE_T yyi = yycount; + + while (yyi-- != 0) + *yyt++ = *yyf++; + } + # endif + #endif + #ifdef YYERROR_VERBOSE # ifndef yystrlen *************** yystpcpy (yydest, yysrc) *** 4633,4639 **** # endif #endif ! #line 315 "/usr/share/bison/bison.simple" /* The user can define YYPARSE_PARAM as the name of an argument to be passed --- 4662,4668 ---- # endif #endif ! #line 345 "/usr/share/bison/bison.simple" /* The user can define YYPARSE_PARAM as the name of an argument to be passed *************** yystpcpy (yydest, yysrc) *** 4643,4655 **** to the proper pointer type. */ #ifdef YYPARSE_PARAM ! # if defined (__STDC__) || defined (__cplusplus) # define YYPARSE_PARAM_ARG void *YYPARSE_PARAM # define YYPARSE_PARAM_DECL ! # else # define YYPARSE_PARAM_ARG YYPARSE_PARAM # define YYPARSE_PARAM_DECL void *YYPARSE_PARAM; ! # endif #else /* !YYPARSE_PARAM */ # define YYPARSE_PARAM_ARG # define YYPARSE_PARAM_DECL --- 4672,4684 ---- to the proper pointer type. */ #ifdef YYPARSE_PARAM ! # ifdef __cplusplus # define YYPARSE_PARAM_ARG void *YYPARSE_PARAM # define YYPARSE_PARAM_DECL ! # else /* !__cplusplus */ # define YYPARSE_PARAM_ARG YYPARSE_PARAM # define YYPARSE_PARAM_DECL void *YYPARSE_PARAM; ! # endif /* !__cplusplus */ #else /* !YYPARSE_PARAM */ # define YYPARSE_PARAM_ARG # define YYPARSE_PARAM_DECL *************** yystpcpy (yydest, yysrc) *** 4658,4666 **** /* Prevent warning if -Wstrict-prototypes. */ #ifdef __GNUC__ # ifdef YYPARSE_PARAM ! int yyparse (void *); # else ! int yyparse (void); # endif #endif --- 4687,4695 ---- /* Prevent warning if -Wstrict-prototypes. */ #ifdef __GNUC__ # ifdef YYPARSE_PARAM ! YYPARSE_RETURN_TYPE yyparse (void *); # else ! YYPARSE_RETURN_TYPE yyparse (void); # endif #endif *************** YY_DECL_NON_LSP_VARIABLES *** 4695,4701 **** YY_DECL_VARIABLES #endif /* !YYPURE */ ! int yyparse (YYPARSE_PARAM_ARG) YYPARSE_PARAM_DECL { --- 4724,4730 ---- YY_DECL_VARIABLES #endif /* !YYPURE */ ! YYPARSE_RETURN_TYPE yyparse (YYPARSE_PARAM_ARG) YYPARSE_PARAM_DECL { *************** yyparse (YYPARSE_PARAM_ARG) *** 4823,4831 **** yyvs = yyvs1; } #else /* no yyoverflow */ - # ifndef YYSTACK_RELOCATE - goto yyoverflowlab; - # else /* Extend the stack our own way. */ if (yystacksize >= YYMAXDEPTH) goto yyoverflowlab; --- 4852,4857 ---- *************** yyparse (YYPARSE_PARAM_ARG) *** 4839,4854 **** (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyoverflowlab; ! YYSTACK_RELOCATE (yyss); ! YYSTACK_RELOCATE (yyvs); # if YYLSP_NEEDED ! YYSTACK_RELOCATE (yyls); # endif # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } - # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; --- 4865,4879 ---- (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyoverflowlab; ! YYSTACK_RELOCATE (short, yyss); ! YYSTACK_RELOCATE (YYSTYPE, yyvs); # if YYLSP_NEEDED ! YYSTACK_RELOCATE (YYLTYPE, yyls); # endif # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; *************** case 929: *** 9032,9038 **** break;} } ! #line 705 "/usr/share/bison/bison.simple" yyvsp -= yylen; --- 9057,9063 ---- break;} } ! #line 731 "/usr/share/bison/bison.simple" yyvsp -= yylen; diff -Nrc3pad gcc-3.3.2/gcc/cp/parse.h gcc-3.3.3/gcc/cp/parse.h *** gcc-3.3.2/gcc/cp/parse.h Thu Oct 16 20:47:06 2003 --- gcc-3.3.3/gcc/cp/parse.h Sat Feb 14 20:44:00 2004 *************** *** 1,5 **** ! #ifndef BISON_P9195_H ! # define BISON_P9195_H #ifndef YYSTYPE typedef union { GTY(()) --- 1,5 ---- ! #ifndef BISON_P5627_H ! # define BISON_P5627_H #ifndef YYSTYPE typedef union { GTY(()) *************** typedef union { GTY(()) *** 11,17 **** struct unparsed_text *pi; } yystype; # define YYSTYPE yystype - # define YYSTYPE_IS_TRIVIAL 1 #endif # define IDENTIFIER 257 # define tTYPENAME 258 --- 11,16 ---- *************** typedef union { GTY(()) *** 104,108 **** extern YYSTYPE yylval; ! #endif /* not BISON_P9195_H */ #define YYEMPTY -2 --- 103,107 ---- extern YYSTYPE yylval; ! #endif /* not BISON_P5627_H */ #define YYEMPTY -2 diff -Nrc3pad gcc-3.3.2/gcc/cp/pt.c gcc-3.3.3/gcc/cp/pt.c *** gcc-3.3.2/gcc/cp/pt.c Mon Sep 8 16:58:59 2003 --- gcc-3.3.3/gcc/cp/pt.c Sun Jan 25 15:08:17 2004 *************** *** 1,6 **** /* Handle parameterized types (templates) for GNU C++. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, ! 2001, 2002 Free Software Foundation, Inc. Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing. Rewritten by Jason Merrill (jason@cygnus.com). --- 1,6 ---- /* Handle parameterized types (templates) for GNU C++. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, ! 2001, 2002, 2004 Free Software Foundation, Inc. Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing. Rewritten by Jason Merrill (jason@cygnus.com). *************** lookup_template_class (d1, arglist, in_d *** 4255,4260 **** --- 4255,4269 ---- tree a = coerce_template_parms (TREE_VALUE (t), arglist, template, complain, /*require_all_args=*/1); + + /* Don't process further if one of the levels fails. */ + if (a == error_mark_node) + { + /* Restore the ARGLIST to its full size. */ + TREE_VEC_LENGTH (arglist) = saved_depth; + POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node); + } + SET_TMPL_ARGS_LEVEL (bound_args, i, a); /* We temporarily reduce the length of the ARGLIST so *************** instantiate_class_template (type) *** 5383,5390 **** --- 5392,5405 ---- { tree base_list = NULL_TREE; tree pbases = TYPE_BINFO_BASETYPES (pattern); + tree context = TYPE_CONTEXT (type); int i; + /* We must enter the scope containing the type, as that is where + the accessibility of types named in dependent bases are + looked up from. */ + push_scope (context ? context : global_namespace); + /* Substitute into each of the bases to determine the actual basetypes. */ for (i = 0; i < TREE_VEC_LENGTH (pbases); ++i) *************** instantiate_class_template (type) *** 5429,5434 **** --- 5444,5451 ---- /* Now call xref_basetypes to set up all the base-class information. */ xref_basetypes (type, base_list); + + pop_scope (context ? context : global_namespace); } /* Now that our base classes are set up, enter the scope of the *************** instantiate_class_template (type) *** 5454,5460 **** tree newtag; newtag = tsubst (tag, args, tf_error, NULL_TREE); ! my_friendly_assert (newtag != error_mark_node, 20010206); if (TREE_CODE (newtag) != ENUMERAL_TYPE) { if (TYPE_LANG_SPECIFIC (tag) && CLASSTYPE_IS_TEMPLATE (tag)) --- 5471,5479 ---- tree newtag; newtag = tsubst (tag, args, tf_error, NULL_TREE); ! if (newtag == error_mark_node) ! continue; ! if (TREE_CODE (newtag) != ENUMERAL_TYPE) { if (TYPE_LANG_SPECIFIC (tag) && CLASSTYPE_IS_TEMPLATE (tag)) *************** tsubst_decl (t, args, type, complain) *** 5993,5998 **** --- 6012,6020 ---- if (TREE_CODE (decl) == TYPE_DECL) { tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl); + if (new_type == error_mark_node) + return error_mark_node; + TREE_TYPE (r) = new_type; CLASSTYPE_TI_TEMPLATE (new_type) = r; DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type); *************** unify (tparms, targs, parm, arg, strict) *** 9130,9135 **** --- 9152,9178 ---- TREE_VEC_ELT (targs, idx) = arg; return 0; + case PTRMEM_CST: + { + /* A pointer-to-member constant can be unified only with + another constant. */ + if (TREE_CODE (arg) != PTRMEM_CST) + return 1; + + /* Just unify the class member. It would be useless (and possibly + wrong, depending on the strict flags) to unify also + PTRMEM_CST_CLASS, because we want to be sure that both parm and + arg refer to the same variable, even if through different + classes. For instance: + + struct A { int x; }; + struct B : A { }; + + Unification of &A::x and &B::x must succeed. */ + return unify (tparms, targs, PTRMEM_CST_MEMBER (parm), + PTRMEM_CST_MEMBER (arg), strict); + } + case POINTER_TYPE: { if (TREE_CODE (arg) != POINTER_TYPE) *************** unify (tparms, targs, parm, arg, strict) *** 9329,9334 **** --- 9372,9378 ---- return 1; return 0; + case FIELD_DECL: case TEMPLATE_DECL: /* Matched cases are handled by the ARG == PARM test above. */ return 1; *************** instantiate_decl (d, defer_ok) *** 10419,10424 **** --- 10463,10472 ---- if (need_push) push_to_top_level (); + /* Mark D as instantiated so that recursive calls to + instantiate_decl do not try to instantiate it again. */ + DECL_TEMPLATE_INSTANTIATED (d) = 1; + /* Regenerate the declaration in case the template has been modified by a subsequent redeclaration. */ regenerate_decl_from_template (d, td); *************** instantiate_decl (d, defer_ok) *** 10455,10481 **** instantiation. There, we cannot implicitly instantiate a defined static data member in more than one translation unit, so import_export_decl marks the declaration as ! external; we must rely on explicit instantiation. */ } else { ! /* Mark D as instantiated so that recursive calls to ! instantiate_decl do not try to instantiate it again. */ ! DECL_TEMPLATE_INSTANTIATED (d) = 1; cp_finish_decl (d, (!DECL_INITIALIZED_IN_CLASS_P (d) ? DECL_INITIAL (d) : NULL_TREE), NULL_TREE, 0); } } else if (TREE_CODE (d) == FUNCTION_DECL) { htab_t saved_local_specializations; - /* Mark D as instantiated so that recursive calls to - instantiate_decl do not try to instantiate it again. */ - DECL_TEMPLATE_INSTANTIATED (d) = 1; - /* Save away the current list, in case we are instantiating one template from within the body of another. */ saved_local_specializations = local_specializations; --- 10503,10536 ---- instantiation. There, we cannot implicitly instantiate a defined static data member in more than one translation unit, so import_export_decl marks the declaration as ! external; we must rely on explicit instantiation. ! ! Reset instantiated marker to make sure that later ! explicit instantiation will be processed. */ ! DECL_TEMPLATE_INSTANTIATED (d) = 0; } else { ! /* This is done in analogous to `start_decl'. It is ! required for correct access checking. */ ! push_nested_class (DECL_CONTEXT (d), 2); cp_finish_decl (d, (!DECL_INITIALIZED_IN_CLASS_P (d) ? DECL_INITIAL (d) : NULL_TREE), NULL_TREE, 0); + /* Normally, pop_nested_class is called by cp_finish_decl + above. But when instantiate_decl is triggered during + instantiate_class_template processing, its DECL_CONTEXT + is still not completed yet, and pop_nested_class isn't + called. */ + if (!COMPLETE_TYPE_P (DECL_CONTEXT (d))) + pop_nested_class (); } } else if (TREE_CODE (d) == FUNCTION_DECL) { htab_t saved_local_specializations; /* Save away the current list, in case we are instantiating one template from within the body of another. */ saved_local_specializations = local_specializations; diff -Nrc3pad gcc-3.3.2/gcc/cp/tree.c gcc-3.3.3/gcc/cp/tree.c *** gcc-3.3.2/gcc/cp/tree.c Tue Oct 14 20:45:39 2003 --- gcc-3.3.3/gcc/cp/tree.c Mon Dec 22 21:00:54 2003 *************** build_target_expr_with_type (init, type) *** 358,367 **** if (TREE_CODE (init) == TARGET_EXPR) return init; else if (CLASS_TYPE_P (type) && !TYPE_HAS_TRIVIAL_INIT_REF (type) ! && TREE_CODE (init) != COND_EXPR) /* We need to build up a copy constructor call. COND_EXPR is a special case because we already have copies on the arms and we don't want ! another one here. */ return force_rvalue (init); slot = build (VAR_DECL, type); --- 358,369 ---- if (TREE_CODE (init) == TARGET_EXPR) return init; else if (CLASS_TYPE_P (type) && !TYPE_HAS_TRIVIAL_INIT_REF (type) ! && TREE_CODE (init) != COND_EXPR ! && TREE_CODE (init) != CONSTRUCTOR) /* We need to build up a copy constructor call. COND_EXPR is a special case because we already have copies on the arms and we don't want ! another one here. A CONSTRUCTOR is aggregate initialization, which ! is handled separately. */ return force_rvalue (init); slot = build (VAR_DECL, type); *************** cp_copy_res_decl_for_inlining (result, f *** 2300,2329 **** return var; } - /* Record that we're about to start inlining FN, and return nonzero if - that's OK. Used for lang_hooks.tree_inlining.start_inlining. */ - - int - cp_start_inlining (fn) - tree fn; - { - if (DECL_TEMPLATE_INSTANTIATION (fn)) - return push_tinst_level (fn); - else - return 1; - } - - /* Record that we're done inlining FN. Used for - lang_hooks.tree_inlining.end_inlining. */ - - void - cp_end_inlining (fn) - tree fn ATTRIBUTE_UNUSED; - { - if (DECL_TEMPLATE_INSTANTIATION (fn)) - pop_tinst_level (); - } - /* Initialize tree.c. */ void --- 2302,2307 ---- diff -Nrc3pad gcc-3.3.2/gcc/cp/typeck.c gcc-3.3.3/gcc/cp/typeck.c *** gcc-3.3.2/gcc/cp/typeck.c Thu Oct 16 02:30:56 2003 --- gcc-3.3.3/gcc/cp/typeck.c Fri Dec 19 20:23:39 2003 *************** build_modify_expr (lhs, modifycode, rhs) *** 5210,5216 **** tree newrhs = rhs; tree lhstype = TREE_TYPE (lhs); tree olhstype = lhstype; ! tree olhs = lhs; /* Avoid duplicate error messages from operands that had errors. */ if (lhs == error_mark_node || rhs == error_mark_node) --- 5210,5216 ---- tree newrhs = rhs; tree lhstype = TREE_TYPE (lhs); tree olhstype = lhstype; ! tree olhs = NULL_TREE; /* Avoid duplicate error messages from operands that had errors. */ if (lhs == error_mark_node || rhs == error_mark_node) *************** build_modify_expr (lhs, modifycode, rhs) *** 5446,5451 **** --- 5446,5460 ---- if (lhstype != TREE_TYPE (lhs)) { + /* Avoid warnings converting integral types back into enums for + enum bit fields. */ + if (TREE_CODE (lhstype) == INTEGER_TYPE + && TREE_CODE (olhstype) == ENUMERAL_TYPE) + { + if (TREE_SIDE_EFFECTS (lhs)) + lhs = stabilize_reference (lhs); + olhs = lhs; + } lhs = copy_node (lhs); TREE_TYPE (lhs) = lhstype; } *************** build_modify_expr (lhs, modifycode, rhs) *** 5518,5527 **** if (olhstype == TREE_TYPE (result)) return result; ! /* Avoid warnings converting integral types back into enums ! for enum bit fields. */ ! if (TREE_CODE (TREE_TYPE (result)) == INTEGER_TYPE ! && TREE_CODE (olhstype) == ENUMERAL_TYPE) { result = build (COMPOUND_EXPR, olhstype, result, olhs); TREE_NO_UNUSED_WARNING (result) = 1; --- 5527,5533 ---- if (olhstype == TREE_TYPE (result)) return result; ! if (olhs) { result = build (COMPOUND_EXPR, olhstype, result, olhs); TREE_NO_UNUSED_WARNING (result) = 1; diff -Nrc3pad gcc-3.3.2/gcc/cppdefault.c gcc-3.3.3/gcc/cppdefault.c *** gcc-3.3.2/gcc/cppdefault.c Sat Sep 29 18:22:02 2001 --- gcc-3.3.3/gcc/cppdefault.c Thu Nov 6 23:13:31 2003 *************** const struct default_include cpp_include *** 33,76 **** = { #ifdef GPLUSPLUS_INCLUDE_DIR /* Pick up GNU C++ generic include files. */ ! { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1 }, #endif #ifdef GPLUSPLUS_TOOL_INCLUDE_DIR /* Pick up GNU C++ target-dependent include files. */ ! { GPLUSPLUS_TOOL_INCLUDE_DIR, "G++", 1, 1 }, #endif #ifdef GPLUSPLUS_BACKWARD_INCLUDE_DIR /* Pick up GNU C++ backward and deprecated include files. */ ! { GPLUSPLUS_BACKWARD_INCLUDE_DIR, "G++", 1, 1 }, #endif #ifdef LOCAL_INCLUDE_DIR /* /usr/local/include comes before the fixincluded header files. */ ! { LOCAL_INCLUDE_DIR, 0, 0, 1 }, #endif #ifdef PREFIX_INCLUDE_DIR ! { PREFIX_INCLUDE_DIR, 0, 0, 1 }, #endif #ifdef GCC_INCLUDE_DIR /* This is the dir for fixincludes and for gcc's private headers. */ ! { GCC_INCLUDE_DIR, "GCC", 0, 0 }, #endif #ifdef CROSS_INCLUDE_DIR /* One place the target system's headers might be. */ ! { CROSS_INCLUDE_DIR, "GCC", 0, 0 }, #endif #ifdef TOOL_INCLUDE_DIR /* Another place the target system's headers might be. */ ! { TOOL_INCLUDE_DIR, "BINUTILS", 0, 1 }, #endif #ifdef SYSTEM_INCLUDE_DIR /* Some systems have an extra dir of include files. */ ! { SYSTEM_INCLUDE_DIR, 0, 0, 0 }, #endif #ifdef STANDARD_INCLUDE_DIR /* /usr/include comes dead last. */ ! { STANDARD_INCLUDE_DIR, STANDARD_INCLUDE_COMPONENT, 0, 0 }, #endif ! { 0, 0, 0, 0 } }; #endif /* no INCLUDE_DEFAULTS */ --- 33,76 ---- = { #ifdef GPLUSPLUS_INCLUDE_DIR /* Pick up GNU C++ generic include files. */ ! { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1, 0 }, #endif #ifdef GPLUSPLUS_TOOL_INCLUDE_DIR /* Pick up GNU C++ target-dependent include files. */ ! { GPLUSPLUS_TOOL_INCLUDE_DIR, "G++", 1, 1, 0 }, #endif #ifdef GPLUSPLUS_BACKWARD_INCLUDE_DIR /* Pick up GNU C++ backward and deprecated include files. */ ! { GPLUSPLUS_BACKWARD_INCLUDE_DIR, "G++", 1, 1, 0 }, #endif #ifdef LOCAL_INCLUDE_DIR /* /usr/local/include comes before the fixincluded header files. */ ! { LOCAL_INCLUDE_DIR, 0, 0, 1, 1 }, #endif #ifdef PREFIX_INCLUDE_DIR ! { PREFIX_INCLUDE_DIR, 0, 0, 1, 0 }, #endif #ifdef GCC_INCLUDE_DIR /* This is the dir for fixincludes and for gcc's private headers. */ ! { GCC_INCLUDE_DIR, "GCC", 0, 0, 0 }, #endif #ifdef CROSS_INCLUDE_DIR /* One place the target system's headers might be. */ ! { CROSS_INCLUDE_DIR, "GCC", 0, 0, 0 }, #endif #ifdef TOOL_INCLUDE_DIR /* Another place the target system's headers might be. */ ! { TOOL_INCLUDE_DIR, "BINUTILS", 0, 1, 0 }, #endif #ifdef SYSTEM_INCLUDE_DIR /* Some systems have an extra dir of include files. */ ! { SYSTEM_INCLUDE_DIR, 0, 0, 0, 1 }, #endif #ifdef STANDARD_INCLUDE_DIR /* /usr/include comes dead last. */ ! { STANDARD_INCLUDE_DIR, STANDARD_INCLUDE_COMPONENT, 0, 0, 1 }, #endif ! { 0, 0, 0, 0, 0 } }; #endif /* no INCLUDE_DEFAULTS */ *************** const size_t cpp_GCC_INCLUDE_DIR_len = s *** 81,83 **** --- 81,89 ---- const char cpp_GCC_INCLUDE_DIR[] = ""; const size_t cpp_GCC_INCLUDE_DIR_len = 0; #endif + + #ifdef TARGET_SYSTEM_ROOT + const char *cpp_SYSROOT = TARGET_SYSTEM_ROOT; + #else + const char *cpp_SYSROOT = ""; + #endif diff -Nrc3pad gcc-3.3.2/gcc/cppdefault.h gcc-3.3.3/gcc/cppdefault.h *** gcc-3.3.2/gcc/cppdefault.h Thu May 16 19:02:59 2002 --- gcc-3.3.3/gcc/cppdefault.h Thu Nov 6 23:13:31 2003 *************** Foundation, 59 Temple Place - Suite 330, *** 34,45 **** #define STANDARD_INCLUDE_COMPONENT 0 #endif ! #ifdef CROSS_COMPILE ! #undef LOCAL_INCLUDE_DIR ! #undef SYSTEM_INCLUDE_DIR ! #undef STANDARD_INCLUDE_DIR #else ! #undef CROSS_INCLUDE_DIR #endif /* This is the default list of directories to search for include files. --- 34,45 ---- #define STANDARD_INCLUDE_COMPONENT 0 #endif ! #if defined (CROSS_COMPILE) && !defined (TARGET_SYSTEM_ROOT) ! # undef LOCAL_INCLUDE_DIR ! # undef SYSTEM_INCLUDE_DIR ! # undef STANDARD_INCLUDE_DIR #else ! # undef CROSS_INCLUDE_DIR #endif /* This is the default list of directories to search for include files. *************** struct default_include *** 61,70 **** --- 61,74 ---- const int cxx_aware; /* Includes in this directory don't need to be wrapped in extern "C" when compiling C++. */ + const int add_sysroot; /* FNAME should be prefixed by + cpp_SYSROOT. */ }; extern const struct default_include cpp_include_defaults[]; extern const char cpp_GCC_INCLUDE_DIR[]; extern const size_t cpp_GCC_INCLUDE_DIR_len; + extern const char *cpp_SYSROOT; + #endif /* ! GCC_CPPDEFAULT_H */ diff -Nrc3pad gcc-3.3.2/gcc/cpphash.h gcc-3.3.3/gcc/cpphash.h *** gcc-3.3.2/gcc/cpphash.h Fri Feb 21 18:14:07 2003 --- gcc-3.3.3/gcc/cpphash.h Tue Dec 2 01:56:18 2003 *************** struct directive; /* Deliberately incom *** 29,35 **** --- 29,37 ---- struct pending_option; struct op; + #ifndef HAVE_UCHAR typedef unsigned char uchar; + #endif #define U (const uchar *) /* Intended use: U"string" */ #define BITS_PER_CPPCHAR_T (CHAR_BIT * sizeof (cppchar_t)) diff -Nrc3pad gcc-3.3.2/gcc/cppinit.c gcc-3.3.3/gcc/cppinit.c *** gcc-3.3.2/gcc/cppinit.c Sun Mar 16 14:13:09 2003 --- gcc-3.3.3/gcc/cppinit.c Tue Nov 18 22:23:47 2003 *************** *** 1,6 **** /* CPP Library. Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Per Bothner, 1994-95. Based on CCCP program by Paul Rubin, June 1986 Adapted to ANSI C, Richard Stallman, Jan 1987 --- 1,6 ---- /* CPP Library. Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by Per Bothner, 1994-95. Based on CCCP program by Paul Rubin, June 1986 Adapted to ANSI C, Richard Stallman, Jan 1987 *************** cpp_create_reader (lang) *** 530,535 **** --- 530,536 ---- CPP_OPTION (pfile, operator_names) = 1; CPP_OPTION (pfile, warn_endif_labels) = 1; CPP_OPTION (pfile, warn_long_long) = !CPP_OPTION (pfile, c99); + CPP_OPTION (pfile, sysroot) = cpp_SYSROOT; CPP_OPTION (pfile, pending) = (struct cpp_pending *) xcalloc (1, sizeof (struct cpp_pending)); *************** init_standard_includes (pfile) *** 758,763 **** --- 759,766 ---- char *path; const struct default_include *p; const char *specd_prefix = CPP_OPTION (pfile, include_prefix); + int default_len, specd_len; + char *default_prefix; /* Several environment variables may add to the include search path. CPATH specifies an additional list of directories to be searched *************** init_standard_includes (pfile) *** 789,801 **** /* Search "translated" versions of GNU directories. These have /usr/local/lib/gcc... replaced by specd_prefix. */ if (specd_prefix != 0 && cpp_GCC_INCLUDE_DIR_len) { /* Remove the `include' from /usr/local/lib/gcc.../include. GCC_INCLUDE_DIR will always end in /include. */ ! int default_len = cpp_GCC_INCLUDE_DIR_len; ! char *default_prefix = (char *) alloca (default_len + 1); ! int specd_len = strlen (specd_prefix); memcpy (default_prefix, cpp_GCC_INCLUDE_DIR, default_len); default_prefix[default_len] = '\0'; --- 792,807 ---- /* Search "translated" versions of GNU directories. These have /usr/local/lib/gcc... replaced by specd_prefix. */ + default_len = 0; + specd_len = 0; + default_prefix = NULL; if (specd_prefix != 0 && cpp_GCC_INCLUDE_DIR_len) { /* Remove the `include' from /usr/local/lib/gcc.../include. GCC_INCLUDE_DIR will always end in /include. */ ! default_len = cpp_GCC_INCLUDE_DIR_len; ! default_prefix = (char *) alloca (default_len + 1); ! specd_len = strlen (specd_prefix); memcpy (default_prefix, cpp_GCC_INCLUDE_DIR, default_len); default_prefix[default_len] = '\0'; *************** init_standard_includes (pfile) *** 807,819 **** || (CPP_OPTION (pfile, cplusplus) && !CPP_OPTION (pfile, no_standard_cplusplus_includes))) { /* Does this dir start with the prefix? */ if (!strncmp (p->fname, default_prefix, default_len)) { /* Yes; change prefix and add to search list. */ int flen = strlen (p->fname); int this_len = specd_len + flen - default_len; ! char *str = (char *) xmalloc (this_len + 1); memcpy (str, specd_prefix, specd_len); memcpy (str + specd_len, p->fname + default_len, --- 813,834 ---- || (CPP_OPTION (pfile, cplusplus) && !CPP_OPTION (pfile, no_standard_cplusplus_includes))) { + char *str; + + /* Should we be translating sysrooted dirs too? Assume + that iprefix and sysroot are mutually exclusive, for + now. */ + if (p->add_sysroot && CPP_OPTION (pfile, sysroot)) + continue; + /* Does this dir start with the prefix? */ if (!strncmp (p->fname, default_prefix, default_len)) { /* Yes; change prefix and add to search list. */ int flen = strlen (p->fname); int this_len = specd_len + flen - default_len; ! ! str = (char *) xmalloc (this_len + 1); memcpy (str, specd_prefix, specd_len); memcpy (str + specd_len, p->fname + default_len, *************** init_standard_includes (pfile) *** 825,831 **** } } - /* Search ordinary names for GNU include directories. */ for (p = cpp_include_defaults; p->fname; p++) { /* Some standard dirs are only for C++. */ --- 840,845 ---- *************** init_standard_includes (pfile) *** 833,839 **** || (CPP_OPTION (pfile, cplusplus) && !CPP_OPTION (pfile, no_standard_cplusplus_includes))) { ! char *str = update_path (p->fname, p->component); append_include_chain (pfile, str, SYSTEM, p->cxx_aware); } } --- 847,861 ---- || (CPP_OPTION (pfile, cplusplus) && !CPP_OPTION (pfile, no_standard_cplusplus_includes))) { ! char *str; ! ! /* Should this dir start with the sysroot? */ ! if (p->add_sysroot && CPP_OPTION (pfile, sysroot)) ! str = concat (CPP_OPTION (pfile, sysroot), p->fname, NULL); ! ! else ! str = update_path (p->fname, p->component); ! append_include_chain (pfile, str, SYSTEM, p->cxx_aware); } } *************** new_pending_directive (pend, text, handl *** 1178,1183 **** --- 1200,1206 ---- DEF_OPT("imacros", no_fil, OPT_imacros) \ DEF_OPT("include", no_fil, OPT_include) \ DEF_OPT("iprefix", no_pth, OPT_iprefix) \ + DEF_OPT("isysroot", no_dir, OPT_isysroot) \ DEF_OPT("isystem", no_dir, OPT_isystem) \ DEF_OPT("iwithprefix", no_dir, OPT_iwithprefix) \ DEF_OPT("iwithprefixbefore", no_dir, OPT_iwithprefixbefore) *************** cpp_handle_option (pfile, argc, argv) *** 1322,1327 **** --- 1345,1354 ---- CPP_OPTION (pfile, include_prefix_len) = strlen (arg); break; + case OPT_isysroot: + CPP_OPTION (pfile, sysroot) = arg; + break; + case OPT_A: if (arg[0] == '-') new_pending_directive (pend, arg + 1, cpp_unassert); diff -Nrc3pad gcc-3.3.2/gcc/cpplib.h gcc-3.3.3/gcc/cpplib.h *** gcc-3.3.2/gcc/cpplib.h Thu Sep 26 22:25:12 2002 --- gcc-3.3.3/gcc/cpplib.h Thu Nov 6 23:13:31 2003 *************** struct cpp_options *** 240,245 **** --- 240,249 ---- const char *include_prefix; unsigned int include_prefix_len; + /* Directory prefix for system include directories in the standard search + path. */ + const char *sysroot; + /* The language we're preprocessing. */ enum c_lang lang; diff -Nrc3pad gcc-3.3.2/gcc/cpptrad.c gcc-3.3.3/gcc/cpptrad.c *** gcc-3.3.2/gcc/cpptrad.c Wed Apr 23 01:31:33 2003 --- gcc-3.3.3/gcc/cpptrad.c Wed Dec 10 16:57:01 2003 *************** scan_out_logical_line (pfile, macro) *** 438,443 **** --- 438,444 ---- unsigned int c, paren_depth = 0, quote; enum ls lex_state = ls_none; bool header_ok; + const uchar *start_of_input_line; fmacro.buff = NULL; *************** scan_out_logical_line (pfile, macro) *** 448,453 **** --- 449,457 ---- RLIMIT (pfile->context) = pfile->buffer->rlimit; pfile->out.cur = pfile->out.base; pfile->out.first_line = pfile->line; + /* start_of_input_line is needed to make sure that directives really, + really start at the first character of the line. */ + start_of_input_line = pfile->buffer->cur; new_context: context = pfile->context; cur = CUR (context); *************** scan_out_logical_line (pfile, macro) *** 682,688 **** break; case '#': ! if (out - 1 == pfile->out.base /* A '#' from a macro doesn't start a directive. */ && !pfile->context->prev && !pfile->state.in_directive) --- 686,692 ---- break; case '#': ! if (cur - 1 == start_of_input_line /* A '#' from a macro doesn't start a directive. */ && !pfile->context->prev && !pfile->state.in_directive) diff -Nrc3pad gcc-3.3.2/gcc/dbxout.c gcc-3.3.3/gcc/dbxout.c *** gcc-3.3.2/gcc/dbxout.c Tue Jul 15 16:53:25 2003 --- gcc-3.3.3/gcc/dbxout.c Wed Oct 22 14:29:02 2003 *************** dbxout_typedefs (syms) *** 524,530 **** tree type = TREE_TYPE (syms); if (TYPE_NAME (type) && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL ! && COMPLETE_TYPE_P (type) && ! TREE_ASM_WRITTEN (TYPE_NAME (type))) dbxout_symbol (TYPE_NAME (type), 0); } --- 524,530 ---- tree type = TREE_TYPE (syms); if (TYPE_NAME (type) && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL ! && COMPLETE_OR_VOID_TYPE_P (type) && ! TREE_ASM_WRITTEN (TYPE_NAME (type))) dbxout_symbol (TYPE_NAME (type), 0); } diff -Nrc3pad gcc-3.3.2/gcc/doc/c-tree.texi gcc-3.3.3/gcc/doc/c-tree.texi *** gcc-3.3.2/gcc/doc/c-tree.texi Sat Jul 19 15:15:06 2003 --- gcc-3.3.3/gcc/doc/c-tree.texi Fri Jan 2 12:21:49 2004 *************** *** 1,4 **** ! @c Copyright (c) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. @c Free Software Foundation, Inc. @c This is part of the GCC manual. @c For copying conditions, see the file gcc.texi. --- 1,4 ---- ! @c Copyright (c) 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. @c Free Software Foundation, Inc. @c This is part of the GCC manual. @c For copying conditions, see the file gcc.texi. *************** This predicate holds whenever its argume *** 790,796 **** default constructor. @item CLASSTYPE_HAS_MUTABLE ! @item TYPE_HAS_MUTABLE_P These predicates hold for a class-type having a mutable data member. @item CLASSTYPE_NON_POD_P --- 790,796 ---- default constructor. @item CLASSTYPE_HAS_MUTABLE ! @itemx TYPE_HAS_MUTABLE_P These predicates hold for a class-type having a mutable data member. @item CLASSTYPE_NON_POD_P *************** This is used for branch prediction. *** 1547,1556 **** Used to represent a C++ @code{catch} block. The @code{HANDLER_TYPE} is the type of exception that will be caught by this handler; it is ! equal (by pointer equality) to @code{CATCH_ALL_TYPE} if this handler ! is for all types. @code{HANDLER_PARMS} is the @code{DECL_STMT} for ! the catch parameter, and @code{HANDLER_BODY} is the ! @code{COMPOUND_STMT} for the block itself. @item IF_STMT --- 1547,1556 ---- Used to represent a C++ @code{catch} block. The @code{HANDLER_TYPE} is the type of exception that will be caught by this handler; it is ! equal (by pointer equality) to @code{NULL} if this handler is for all ! types. @code{HANDLER_PARMS} is the @code{DECL_STMT} for the catch ! parameter, and @code{HANDLER_BODY} is the @code{COMPOUND_STMT} for the ! block itself. @item IF_STMT *************** real part and the second operand is the *** 1974,1980 **** These nodes represent the conjugate of their operand. @item REALPART_EXPR ! @item IMAGPART_EXPR These nodes represent respectively the real and the imaginary parts of complex numbers (their sole argument). --- 1974,1980 ---- These nodes represent the conjugate of their operand. @item REALPART_EXPR ! @itemx IMAGPART_EXPR These nodes represent respectively the real and the imaginary parts of complex numbers (their sole argument). diff -Nrc3pad gcc-3.3.2/gcc/doc/contrib.texi gcc-3.3.3/gcc/doc/contrib.texi *** gcc-3.3.2/gcc/doc/contrib.texi Tue Jul 1 14:40:01 2003 --- gcc-3.3.3/gcc/doc/contrib.texi Mon Nov 3 22:09:32 2003 *************** the Intel 80387 register stack. *** 32,37 **** --- 32,40 ---- Alasdair Baird for various bug fixes. @item + Giovanni Bajo for analyzing lots of complicated C++ problem reports. + + @item Gerald Baumgartner added the signature extension to the C++ front end. @item *************** the c30/c40 ports functional. Lots of l *** 297,302 **** --- 300,308 ---- fixes. @item + Dara Hazeghi for wading through myriads of target-specific bug reports. + + @item Kate Hedstrom for staking the g77 folks with an initial testsuite. @item *************** Steve Holmgren for MachTen patches. *** 327,332 **** --- 333,341 ---- Jan Hubicka for his x86 port improvements. @item + Falk Hueffner for working on C and optimization bug reports. + + @item Christian Iseli for various bug fixes. @item *************** out lots of problems we need to solve, m *** 620,625 **** --- 629,637 ---- taking care of documentation maintenance in general. @item + Andrew Pinski for processing bug reports by the dozen. + + @item Ovidiu Predescu for his work on the Objective-C front end and runtime libraries. diff -Nrc3pad gcc-3.3.2/gcc/doc/cpp.1 gcc-3.3.3/gcc/doc/cpp.1 *** gcc-3.3.2/gcc/doc/cpp.1 Thu Oct 16 20:24:05 2003 --- gcc-3.3.3/gcc/doc/cpp.1 Sat Feb 14 20:38:11 2004 *************** *** 1,7 **** ! .\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13 .\" .\" Standard preamble: ! .\" ======================================================================== .de Sh \" Subsection heading .br .if t .Sp --- 1,8 ---- ! .\" Automatically generated by Pod::Man version 1.15 ! .\" Sat Feb 14 20:38:10 2004 .\" .\" Standard preamble: ! .\" ====================================================================== .de Sh \" Subsection heading .br .if t .Sp *************** *** 14,19 **** --- 15,26 ---- .if t .sp .5v .if n .sp .. + .de Ip \" List item + .br + .ie \\n(.$>=3 .ne \\$3 + .el .ne 3 + .IP "\\$1" \\$2 + .. .de Vb \" Begin verbatim text .ft CW .nf *************** *** 21,34 **** .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. | will give a ! .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to ! .\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' ! .\" expand to `' in nroff, nothing in troff, for use with C<>. .tr \(*W-|\(bv\*(Tr .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ --- 28,42 ---- .. .de Ve \" End verbatim text .ft R + .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. | will give a ! .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used ! .\" to do unbreakable dashes and therefore won't be available. \*(C` and ! .\" \*(C' expand to `' in nroff, nothing in troff, for use with C<> .tr \(*W-|\(bv\*(Tr .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ *************** *** 48,57 **** . ds R" '' 'br\} .\" ! .\" If the F register is turned on, we'll generate index entries on stderr for ! .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index ! .\" entries marked with X<> in POD. Of course, you'll have to process the ! .\" output yourself in some meaningful fashion. .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" --- 56,65 ---- . ds R" '' 'br\} .\" ! .\" If the F register is turned on, we'll generate index entries on stderr ! .\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and ! .\" index entries marked with X<> in POD. Of course, you'll have to process ! .\" the output yourself in some meaningful fashion. .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" *************** *** 60,72 **** . rr F .\} .\" ! .\" For nroff, turn off justification. Always turn off hyphenation; it makes ! .\" way too many mistakes in technical documents. .hy 0 .if n .na .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 --- 68,81 ---- . rr F .\} .\" ! .\" For nroff, turn off justification. Always turn off hyphenation; it ! .\" makes way too many mistakes in technical documents. .hy 0 .if n .na .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. + .bd B 3 . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 *************** *** 126,135 **** . ds Ae AE .\} .rm #[ #] #H #V #F C ! .\" ======================================================================== .\" .IX Title "CPP 1" ! .TH CPP 1 "2003-10-16" "gcc-3.3.2" "GNU" .SH "NAME" cpp \- The C Preprocessor .SH "SYNOPSIS" --- 135,145 ---- . ds Ae AE .\} .rm #[ #] #H #V #F C ! .\" ====================================================================== .\" .IX Title "CPP 1" ! .TH CPP 1 "gcc-3.3.3" "2004-02-14" "GNU" ! .UC .SH "NAME" cpp \- The C Preprocessor .SH "SYNOPSIS" *************** text processor. It will choke on input *** 156,167 **** rules. For example, apostrophes will be interpreted as the beginning of character constants, and cause errors. Also, you cannot rely on it preserving characteristics of the input which are not significant to ! C\-family languages. If a Makefile is preprocessed, all the hard tabs will be removed, and the Makefile will not work. .PP Having said that, you can often get away with using cpp on things which are not C. Other Algol-ish programming languages are often safe ! (Pascal, Ada, etc.) So is assembly, with caution. \fB\-traditional\-cpp\fR mode preserves more white space, and is otherwise more permissive. Many of the problems can be avoided by writing C or \*(C+ style comments instead of native language comments, and keeping macros simple. --- 166,177 ---- rules. For example, apostrophes will be interpreted as the beginning of character constants, and cause errors. Also, you cannot rely on it preserving characteristics of the input which are not significant to ! C-family languages. If a Makefile is preprocessed, all the hard tabs will be removed, and the Makefile will not work. .PP Having said that, you can often get away with using cpp on things which are not C. Other Algol-ish programming languages are often safe ! (Pascal, Ada, etc.) So is assembly, with caution. \fB\-traditional-cpp\fR mode preserves more white space, and is otherwise more permissive. Many of the problems can be avoided by writing C or \*(C+ style comments instead of native language comments, and keeping macros simple. *************** The C preprocessor expects two file name *** 198,207 **** other files it specifies with \fB#include\fR. All the output generated by the combined input files is written in \fIoutfile\fR. .PP ! Either \fIinfile\fR or \fIoutfile\fR may be \fB\-\fR, which as \&\fIinfile\fR means to read from standard input and as \fIoutfile\fR means to write to standard output. Also, if either file is omitted, it ! means the same as if \fB\-\fR had been specified for that file. .PP Unless otherwise noted, or the option ends in \fB=\fR, all options which take an argument may have that argument appear either immediately --- 208,217 ---- other files it specifies with \fB#include\fR. All the output generated by the combined input files is written in \fIoutfile\fR. .PP ! Either \fIinfile\fR or \fIoutfile\fR may be \fB-\fR, which as \&\fIinfile\fR means to read from standard input and as \fIoutfile\fR means to write to standard output. Also, if either file is omitted, it ! means the same as if \fB-\fR had been specified for that file. .PP Unless otherwise noted, or the option ends in \fB=\fR, all options which take an argument may have that argument appear either immediately *************** after the option, or with a space betwee *** 211,220 **** Many options have multi-letter names; therefore multiple single-letter options may \fInot\fR be grouped: \fB\-dM\fR is very different from \&\fB\-d\ \-M\fR. ! .IP "\fB\-D\fR \fIname\fR" 4 .IX Item "-D name" ! Predefine \fIname\fR as a macro, with definition \f(CW1\fR. ! .IP "\fB\-D\fR \fIname\fR\fB=\fR\fIdefinition\fR" 4 .IX Item "-D name=definition" Predefine \fIname\fR as a macro, with definition \fIdefinition\fR. There are no restrictions on the contents of \fIdefinition\fR, but if --- 221,230 ---- Many options have multi-letter names; therefore multiple single-letter options may \fInot\fR be grouped: \fB\-dM\fR is very different from \&\fB\-d\ \-M\fR. ! .Ip "\fB\-D\fR \fIname\fR" 4 .IX Item "-D name" ! Predefine \fIname\fR as a macro, with definition \f(CW\*(C`1\*(C'\fR. ! .Ip "\fB\-D\fR \fIname\fR\fB=\fR\fIdefinition\fR" 4 .IX Item "-D name=definition" Predefine \fIname\fR as a macro, with definition \fIdefinition\fR. There are no restrictions on the contents of \fIdefinition\fR, but if *************** to quote the option. With \fBsh\fR and *** 232,246 **** are given on the command line. All \fB\-imacros\fR \fIfile\fR and \&\fB\-include\fR \fIfile\fR options are processed after all \&\fB\-D\fR and \fB\-U\fR options. ! .IP "\fB\-U\fR \fIname\fR" 4 .IX Item "-U name" Cancel any previous definition of \fIname\fR, either built in or provided with a \fB\-D\fR option. ! .IP "\fB\-undef\fR" 4 .IX Item "-undef" Do not predefine any system-specific or GCC-specific macros. The standard predefined macros remain defined. ! .IP "\fB\-I\fR \fIdir\fR" 4 .IX Item "-I dir" Add the directory \fIdir\fR to the list of directories to be searched for header files. --- 242,256 ---- are given on the command line. All \fB\-imacros\fR \fIfile\fR and \&\fB\-include\fR \fIfile\fR options are processed after all \&\fB\-D\fR and \fB\-U\fR options. ! .Ip "\fB\-U\fR \fIname\fR" 4 .IX Item "-U name" Cancel any previous definition of \fIname\fR, either built in or provided with a \fB\-D\fR option. ! .Ip "\fB\-undef\fR" 4 .IX Item "-undef" Do not predefine any system-specific or GCC-specific macros. The standard predefined macros remain defined. ! .Ip "\fB\-I\fR \fIdir\fR" 4 .IX Item "-I dir" Add the directory \fIdir\fR to the list of directories to be searched for header files. *************** system include directory, the option is *** 251,297 **** default search order for system directories and the special treatment of system headers are not defeated \&. ! .IP "\fB\-o\fR \fIfile\fR" 4 .IX Item "-o file" Write output to \fIfile\fR. This is the same as specifying \fIfile\fR as the second non-option argument to \fBcpp\fR. \fBgcc\fR has a different interpretation of a second non-option argument, so you must use \fB\-o\fR to specify the output file. ! .IP "\fB\-Wall\fR" 4 .IX Item "-Wall" Turns on all optional warnings which are desirable for normal code. At present this is \fB\-Wcomment\fR and \fB\-Wtrigraphs\fR. Note that many of the preprocessor's warnings are on by default and have no options to control them. ! .IP "\fB\-Wcomment\fR" 4 .IX Item "-Wcomment" .PD 0 ! .IP "\fB\-Wcomments\fR" 4 .IX Item "-Wcomments" .PD Warn whenever a comment-start sequence \fB/*\fR appears in a \fB/*\fR comment, or whenever a backslash-newline appears in a \fB//\fR comment. (Both forms have the same effect.) ! .IP "\fB\-Wtrigraphs\fR" 4 .IX Item "-Wtrigraphs" Warn if any trigraphs are encountered. This option used to take effect only if \fB\-trigraphs\fR was also specified, but now works independently. Warnings are not given for trigraphs within comments, as they do not affect the meaning of the program. ! .IP "\fB\-Wtraditional\fR" 4 .IX Item "-Wtraditional" Warn about certain constructs that behave differently in traditional and \&\s-1ISO\s0 C. Also warn about \s-1ISO\s0 C constructs that have no traditional C equivalent, and problematic constructs which should be avoided. ! .IP "\fB\-Wimport\fR" 4 .IX Item "-Wimport" Warn the first time \fB#import\fR is used. ! .IP "\fB\-Wundef\fR" 4 .IX Item "-Wundef" Warn whenever an identifier which is not a macro is encountered in an \&\fB#if\fR directive, outside of \fBdefined\fR. Such identifiers are replaced with zero. ! .IP "\fB\-Wunused\-macros\fR" 4 .IX Item "-Wunused-macros" Warn about macros defined in the main file that are unused. A macro is \fIused\fR if it is expanded or tested for existence at least once. --- 261,307 ---- default search order for system directories and the special treatment of system headers are not defeated \&. ! .Ip "\fB\-o\fR \fIfile\fR" 4 .IX Item "-o file" Write output to \fIfile\fR. This is the same as specifying \fIfile\fR as the second non-option argument to \fBcpp\fR. \fBgcc\fR has a different interpretation of a second non-option argument, so you must use \fB\-o\fR to specify the output file. ! .Ip "\fB\-Wall\fR" 4 .IX Item "-Wall" Turns on all optional warnings which are desirable for normal code. At present this is \fB\-Wcomment\fR and \fB\-Wtrigraphs\fR. Note that many of the preprocessor's warnings are on by default and have no options to control them. ! .Ip "\fB\-Wcomment\fR" 4 .IX Item "-Wcomment" .PD 0 ! .Ip "\fB\-Wcomments\fR" 4 .IX Item "-Wcomments" .PD Warn whenever a comment-start sequence \fB/*\fR appears in a \fB/*\fR comment, or whenever a backslash-newline appears in a \fB//\fR comment. (Both forms have the same effect.) ! .Ip "\fB\-Wtrigraphs\fR" 4 .IX Item "-Wtrigraphs" Warn if any trigraphs are encountered. This option used to take effect only if \fB\-trigraphs\fR was also specified, but now works independently. Warnings are not given for trigraphs within comments, as they do not affect the meaning of the program. ! .Ip "\fB\-Wtraditional\fR" 4 .IX Item "-Wtraditional" Warn about certain constructs that behave differently in traditional and \&\s-1ISO\s0 C. Also warn about \s-1ISO\s0 C constructs that have no traditional C equivalent, and problematic constructs which should be avoided. ! .Ip "\fB\-Wimport\fR" 4 .IX Item "-Wimport" Warn the first time \fB#import\fR is used. ! .Ip "\fB\-Wundef\fR" 4 .IX Item "-Wundef" Warn whenever an identifier which is not a macro is encountered in an \&\fB#if\fR directive, outside of \fBdefined\fR. Such identifiers are replaced with zero. ! .Ip "\fB\-Wunused-macros\fR" 4 .IX Item "-Wunused-macros" Warn about macros defined in the main file that are unused. A macro is \fIused\fR if it is expanded or tested for existence at least once. *************** Alternatively, you could provide a dummy *** 311,317 **** \& #if defined the_macro_causing_the_warning \& #endif .Ve ! .IP "\fB\-Wendif\-labels\fR" 4 .IX Item "-Wendif-labels" Warn whenever an \fB#else\fR or an \fB#endif\fR are followed by text. This usually happens in code of the form --- 321,327 ---- \& #if defined the_macro_causing_the_warning \& #endif .Ve ! .Ip "\fB\-Wendif-labels\fR" 4 .IX Item "-Wendif-labels" Warn whenever an \fB#else\fR or an \fB#endif\fR are followed by text. This usually happens in code of the form *************** This usually happens in code of the form *** 323,354 **** \& ... \& #endif FOO .Ve - .Sp The second and third \f(CW\*(C`FOO\*(C'\fR should be in comments, but often are not in older programs. This warning is on by default. ! .IP "\fB\-Werror\fR" 4 .IX Item "-Werror" Make all warnings into hard errors. Source code which triggers warnings will be rejected. ! .IP "\fB\-Wsystem\-headers\fR" 4 .IX Item "-Wsystem-headers" Issue warnings for code in system headers. These are normally unhelpful in finding bugs in your own code, therefore suppressed. If you are responsible for the system library, you may want to see them. ! .IP "\fB\-w\fR" 4 .IX Item "-w" Suppress all warnings, including those which \s-1GNU\s0 \s-1CPP\s0 issues by default. ! .IP "\fB\-pedantic\fR" 4 .IX Item "-pedantic" Issue all the mandatory diagnostics listed in the C standard. Some of them are left out by default, since they trigger frequently on harmless code. ! .IP "\fB\-pedantic\-errors\fR" 4 .IX Item "-pedantic-errors" Issue all the mandatory diagnostics, and make all mandatory diagnostics into errors. This includes mandatory diagnostics that \s-1GCC\s0 issues without \fB\-pedantic\fR but treats as warnings. ! .IP "\fB\-M\fR" 4 .IX Item "-M" Instead of outputting the result of preprocessing, output a rule suitable for \fBmake\fR describing the dependencies of the main --- 333,363 ---- \& ... \& #endif FOO .Ve The second and third \f(CW\*(C`FOO\*(C'\fR should be in comments, but often are not in older programs. This warning is on by default. ! .Ip "\fB\-Werror\fR" 4 .IX Item "-Werror" Make all warnings into hard errors. Source code which triggers warnings will be rejected. ! .Ip "\fB\-Wsystem-headers\fR" 4 .IX Item "-Wsystem-headers" Issue warnings for code in system headers. These are normally unhelpful in finding bugs in your own code, therefore suppressed. If you are responsible for the system library, you may want to see them. ! .Ip "\fB\-w\fR" 4 .IX Item "-w" Suppress all warnings, including those which \s-1GNU\s0 \s-1CPP\s0 issues by default. ! .Ip "\fB\-pedantic\fR" 4 .IX Item "-pedantic" Issue all the mandatory diagnostics listed in the C standard. Some of them are left out by default, since they trigger frequently on harmless code. ! .Ip "\fB\-pedantic-errors\fR" 4 .IX Item "-pedantic-errors" Issue all the mandatory diagnostics, and make all mandatory diagnostics into errors. This includes mandatory diagnostics that \s-1GCC\s0 issues without \fB\-pedantic\fR but treats as warnings. ! .Ip "\fB\-M\fR" 4 .IX Item "-M" Instead of outputting the result of preprocessing, output a rule suitable for \fBmake\fR describing the dependencies of the main *************** will still be sent to the regular output *** 372,378 **** .Sp Passing \fB\-M\fR to the driver implies \fB\-E\fR, and suppresses warnings with an implicit \fB\-w\fR. ! .IP "\fB\-MM\fR" 4 .IX Item "-MM" Like \fB\-M\fR but do not mention header files that are found in system header directories, nor header files that are included, --- 381,387 ---- .Sp Passing \fB\-M\fR to the driver implies \fB\-E\fR, and suppresses warnings with an implicit \fB\-w\fR. ! .Ip "\fB\-MM\fR" 4 .IX Item "-MM" Like \fB\-M\fR but do not mention header files that are found in system header directories, nor header files that are included, *************** This implies that the choice of angle br *** 382,388 **** \&\fB#include\fR directive does not in itself determine whether that header will appear in \fB\-MM\fR dependency output. This is a slight change in semantics from \s-1GCC\s0 versions 3.0 and earlier. ! .IP "\fB\-MF\fR \fIfile\fR" 4 .IX Item "-MF file" @anchor{\-MF} When used with \fB\-M\fR or \fB\-MM\fR, specifies a --- 391,397 ---- \&\fB#include\fR directive does not in itself determine whether that header will appear in \fB\-MM\fR dependency output. This is a slight change in semantics from \s-1GCC\s0 versions 3.0 and earlier. ! .Ip "\fB\-MF\fR \fIfile\fR" 4 .IX Item "-MF file" @anchor{\-MF} When used with \fB\-M\fR or \fB\-MM\fR, specifies a *************** preprocessed output. *** 392,398 **** .Sp When used with the driver options \fB\-MD\fR or \fB\-MMD\fR, \&\fB\-MF\fR overrides the default dependency output file. ! .IP "\fB\-MG\fR" 4 .IX Item "-MG" In conjunction with an option such as \fB\-M\fR requesting dependency generation, \fB\-MG\fR assumes missing header files are --- 401,407 ---- .Sp When used with the driver options \fB\-MD\fR or \fB\-MMD\fR, \&\fB\-MF\fR overrides the default dependency output file. ! .Ip "\fB\-MG\fR" 4 .IX Item "-MG" In conjunction with an option such as \fB\-M\fR requesting dependency generation, \fB\-MG\fR assumes missing header files are *************** also suppresses preprocessed output, as *** 403,409 **** this useless. .Sp This feature is used in automatic updating of makefiles. ! .IP "\fB\-MP\fR" 4 .IX Item "-MP" This option instructs \s-1CPP\s0 to add a phony target for each dependency other than the main file, causing each to depend on nothing. These --- 412,418 ---- this useless. .Sp This feature is used in automatic updating of makefiles. ! .Ip "\fB\-MP\fR" 4 .IX Item "-MP" This option instructs \s-1CPP\s0 to add a phony target for each dependency other than the main file, causing each to depend on nothing. These *************** This is typical output: *** 415,425 **** .Vb 1 \& test.o: test.c test.h .Ve - .Sp .Vb 1 \& test.h: .Ve ! .IP "\fB\-MT\fR \fItarget\fR" 4 .IX Item "-MT target" Change the target of the rule emitted by dependency generation. By default \s-1CPP\s0 takes the name of the main input file, including any path, --- 424,433 ---- .Vb 1 \& test.o: test.c test.h .Ve .Vb 1 \& test.h: .Ve ! .Ip "\fB\-MT\fR \fItarget\fR" 4 .IX Item "-MT target" Change the target of the rule emitted by dependency generation. By default \s-1CPP\s0 takes the name of the main input file, including any path, *************** For example, \fB\-MT\ '$(objpfx)foo.o'\f *** 435,441 **** .Vb 1 \& $(objpfx)foo.o: foo.c .Ve ! .IP "\fB\-MQ\fR \fItarget\fR" 4 .IX Item "-MQ target" Same as \fB\-MT\fR, but it quotes any characters which are special to Make. \fB\-MQ\ '$(objpfx)foo.o'\fR gives --- 443,449 ---- .Vb 1 \& $(objpfx)foo.o: foo.c .Ve ! .Ip "\fB\-MQ\fR \fItarget\fR" 4 .IX Item "-MQ target" Same as \fB\-MT\fR, but it quotes any characters which are special to Make. \fB\-MQ\ '$(objpfx)foo.o'\fR gives *************** Make. \fB\-MQ\ '$(objpfx)foo.o'\fR give *** 443,452 **** .Vb 1 \& $$(objpfx)foo.o: foo.c .Ve - .Sp The default target is automatically quoted, as if it were given with \&\fB\-MQ\fR. ! .IP "\fB\-MD\fR" 4 .IX Item "-MD" \&\fB\-MD\fR is equivalent to \fB\-M \-MF\fR \fIfile\fR, except that \&\fB\-E\fR is not implied. The driver determines \fIfile\fR based on --- 451,459 ---- .Vb 1 \& $$(objpfx)foo.o: foo.c .Ve The default target is automatically quoted, as if it were given with \&\fB\-MQ\fR. ! .Ip "\fB\-MD\fR" 4 .IX Item "-MD" \&\fB\-MD\fR is equivalent to \fB\-M \-MF\fR \fIfile\fR, except that \&\fB\-E\fR is not implied. The driver determines \fIfile\fR based on *************** is understood to specify a target object *** 461,481 **** .Sp Since \fB\-E\fR is not implied, \fB\-MD\fR can be used to generate a dependency output file as a side-effect of the compilation process. ! .IP "\fB\-MMD\fR" 4 .IX Item "-MMD" Like \fB\-MD\fR except mention only user header files, not system \&\-header files. ! .IP "\fB\-x c\fR" 4 .IX Item "-x c" .PD 0 ! .IP "\fB\-x c++\fR" 4 .IX Item "-x c++" ! .IP "\fB\-x objective-c\fR" 4 .IX Item "-x objective-c" ! .IP "\fB\-x assembler-with-cpp\fR" 4 .IX Item "-x assembler-with-cpp" .PD ! Specify the source language: C, \*(C+, Objective\-C, or assembly. This has nothing to do with standards conformance or extensions; it merely selects which base syntax to expect. If you give none of these options, cpp will deduce the language from the extension of the source file: --- 468,488 ---- .Sp Since \fB\-E\fR is not implied, \fB\-MD\fR can be used to generate a dependency output file as a side-effect of the compilation process. ! .Ip "\fB\-MMD\fR" 4 .IX Item "-MMD" Like \fB\-MD\fR except mention only user header files, not system \&\-header files. ! .Ip "\fB\-x c\fR" 4 .IX Item "-x c" .PD 0 ! .Ip "\fB\-x c++\fR" 4 .IX Item "-x c++" ! .Ip "\fB\-x objective-c\fR" 4 .IX Item "-x objective-c" ! .Ip "\fB\-x assembler-with-cpp\fR" 4 .IX Item "-x assembler-with-cpp" .PD ! Specify the source language: C, \*(C+, Objective-C, or assembly. This has nothing to do with standards conformance or extensions; it merely selects which base syntax to expect. If you give none of these options, cpp will deduce the language from the extension of the source file: *************** generic mode. *** 488,497 **** which selected both the language and the standards conformance level. This option has been removed, because it conflicts with the \fB\-l\fR option. ! .IP "\fB\-std=\fR\fIstandard\fR" 4 .IX Item "-std=standard" .PD 0 ! .IP "\fB\-ansi\fR" 4 .IX Item "-ansi" .PD Specify the standard to which the code should conform. Currently \s-1CPP\s0 --- 495,504 ---- which selected both the language and the standards conformance level. This option has been removed, because it conflicts with the \fB\-l\fR option. ! .Ip "\fB\-std=\fR\fIstandard\fR" 4 .IX Item "-std=standard" .PD 0 ! .Ip "\fB\-ansi\fR" 4 .IX Item "-ansi" .PD Specify the standard to which the code should conform. Currently \s-1CPP\s0 *************** knows about C and \*(C+ standards; other *** 500,584 **** \&\fIstandard\fR may be one of: .RS 4 ! .ie n .IP """iso9899:1990""" 4 ! .el .IP "\f(CWiso9899:1990\fR" 4 .IX Item "iso9899:1990" .PD 0 ! .ie n .IP """c89""" 4 ! .el .IP "\f(CWc89\fR" 4 .IX Item "c89" .PD The \s-1ISO\s0 C standard from 1990. \fBc89\fR is the customary shorthand for this version of the standard. .Sp The \fB\-ansi\fR option is equivalent to \fB\-std=c89\fR. ! .ie n .IP """iso9899:199409""" 4 ! .el .IP "\f(CWiso9899:199409\fR" 4 .IX Item "iso9899:199409" The 1990 C standard, as amended in 1994. ! .ie n .IP """iso9899:1999""" 4 ! .el .IP "\f(CWiso9899:1999\fR" 4 .IX Item "iso9899:1999" .PD 0 ! .ie n .IP """c99""" 4 ! .el .IP "\f(CWc99\fR" 4 .IX Item "c99" ! .ie n .IP """iso9899:199x""" 4 ! .el .IP "\f(CWiso9899:199x\fR" 4 .IX Item "iso9899:199x" ! .ie n .IP """c9x""" 4 ! .el .IP "\f(CWc9x\fR" 4 .IX Item "c9x" .PD The revised \s-1ISO\s0 C standard, published in December 1999. Before publication, this was known as C9X. ! .ie n .IP """gnu89""" 4 ! .el .IP "\f(CWgnu89\fR" 4 .IX Item "gnu89" The 1990 C standard plus \s-1GNU\s0 extensions. This is the default. ! .ie n .IP """gnu99""" 4 ! .el .IP "\f(CWgnu99\fR" 4 .IX Item "gnu99" .PD 0 ! .ie n .IP """gnu9x""" 4 ! .el .IP "\f(CWgnu9x\fR" 4 .IX Item "gnu9x" .PD The 1999 C standard plus \s-1GNU\s0 extensions. ! .ie n .IP """c++98""" 4 ! .el .IP "\f(CWc++98\fR" 4 .IX Item "c++98" The 1998 \s-1ISO\s0 \*(C+ standard plus amendments. ! .ie n .IP """gnu++98""" 4 ! .el .IP "\f(CWgnu++98\fR" 4 .IX Item "gnu++98" The same as \fB\-std=c++98\fR plus \s-1GNU\s0 extensions. This is the default for \*(C+ code. .RE .RS 4 .RE ! .IP "\fB\-I\-\fR" 4 .IX Item "-I-" Split the include path. Any directories specified with \fB\-I\fR ! options before \fB\-I\-\fR are searched only for headers requested with \&\f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR; they are not searched for \&\f(CW\*(C`#include\ <\f(CIfile\f(CW>\*(C'\fR. If additional directories are ! specified with \fB\-I\fR options after the \fB\-I\-\fR, those directories are searched for all \fB#include\fR directives. .Sp ! In addition, \fB\-I\-\fR inhibits the use of the directory of the current file directory as the first search directory for \f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR. ! .IP "\fB\-nostdinc\fR" 4 .IX Item "-nostdinc" Do not search the standard system directories for header files. Only the directories you have specified with \fB\-I\fR options (and the directory of the current file, if appropriate) are searched. ! .IP "\fB\-nostdinc++\fR" 4 .IX Item "-nostdinc++" Do not search for header files in the \*(C+\-specific standard directories, but do still search the other standard directories. (This option is used when building the \*(C+ library.) ! .IP "\fB\-include\fR \fIfile\fR" 4 .IX Item "-include file" Process \fIfile\fR as if \f(CW\*(C`#include "file"\*(C'\fR appeared as the first line of the primary source file. However, the first directory searched --- 507,591 ---- \&\fIstandard\fR may be one of: .RS 4 ! .if n .Ip "\f(CW""""iso9899:1990""""\fR" 4 ! .el .Ip "\f(CWiso9899:1990\fR" 4 .IX Item "iso9899:1990" .PD 0 ! .if n .Ip "\f(CW""""c89""""\fR" 4 ! .el .Ip "\f(CWc89\fR" 4 .IX Item "c89" .PD The \s-1ISO\s0 C standard from 1990. \fBc89\fR is the customary shorthand for this version of the standard. .Sp The \fB\-ansi\fR option is equivalent to \fB\-std=c89\fR. ! .if n .Ip "\f(CW""""iso9899:199409""""\fR" 4 ! .el .Ip "\f(CWiso9899:199409\fR" 4 .IX Item "iso9899:199409" The 1990 C standard, as amended in 1994. ! .if n .Ip "\f(CW""""iso9899:1999""""\fR" 4 ! .el .Ip "\f(CWiso9899:1999\fR" 4 .IX Item "iso9899:1999" .PD 0 ! .if n .Ip "\f(CW""""c99""""\fR" 4 ! .el .Ip "\f(CWc99\fR" 4 .IX Item "c99" ! .if n .Ip "\f(CW""""iso9899:199x""""\fR" 4 ! .el .Ip "\f(CWiso9899:199x\fR" 4 .IX Item "iso9899:199x" ! .if n .Ip "\f(CW""""c9x""""\fR" 4 ! .el .Ip "\f(CWc9x\fR" 4 .IX Item "c9x" .PD The revised \s-1ISO\s0 C standard, published in December 1999. Before publication, this was known as C9X. ! .if n .Ip "\f(CW""""gnu89""""\fR" 4 ! .el .Ip "\f(CWgnu89\fR" 4 .IX Item "gnu89" The 1990 C standard plus \s-1GNU\s0 extensions. This is the default. ! .if n .Ip "\f(CW""""gnu99""""\fR" 4 ! .el .Ip "\f(CWgnu99\fR" 4 .IX Item "gnu99" .PD 0 ! .if n .Ip "\f(CW""""gnu9x""""\fR" 4 ! .el .Ip "\f(CWgnu9x\fR" 4 .IX Item "gnu9x" .PD The 1999 C standard plus \s-1GNU\s0 extensions. ! .if n .Ip "\f(CW""""c++98""""\fR" 4 ! .el .Ip "\f(CWc++98\fR" 4 .IX Item "c++98" The 1998 \s-1ISO\s0 \*(C+ standard plus amendments. ! .if n .Ip "\f(CW""""gnu++98""""\fR" 4 ! .el .Ip "\f(CWgnu++98\fR" 4 .IX Item "gnu++98" The same as \fB\-std=c++98\fR plus \s-1GNU\s0 extensions. This is the default for \*(C+ code. .RE .RS 4 .RE ! .Ip "\fB\-I-\fR" 4 .IX Item "-I-" Split the include path. Any directories specified with \fB\-I\fR ! options before \fB\-I-\fR are searched only for headers requested with \&\f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR; they are not searched for \&\f(CW\*(C`#include\ <\f(CIfile\f(CW>\*(C'\fR. If additional directories are ! specified with \fB\-I\fR options after the \fB\-I-\fR, those directories are searched for all \fB#include\fR directives. .Sp ! In addition, \fB\-I-\fR inhibits the use of the directory of the current file directory as the first search directory for \f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR. ! .Ip "\fB\-nostdinc\fR" 4 .IX Item "-nostdinc" Do not search the standard system directories for header files. Only the directories you have specified with \fB\-I\fR options (and the directory of the current file, if appropriate) are searched. ! .Ip "\fB\-nostdinc++\fR" 4 .IX Item "-nostdinc++" Do not search for header files in the \*(C+\-specific standard directories, but do still search the other standard directories. (This option is used when building the \*(C+ library.) ! .Ip "\fB\-include\fR \fIfile\fR" 4 .IX Item "-include file" Process \fIfile\fR as if \f(CW\*(C`#include "file"\*(C'\fR appeared as the first line of the primary source file. However, the first directory searched *************** chain as normal. *** 589,595 **** .Sp If multiple \fB\-include\fR options are given, the files are included in the order they appear on the command line. ! .IP "\fB\-imacros\fR \fIfile\fR" 4 .IX Item "-imacros file" Exactly like \fB\-include\fR, except that any output produced by scanning \fIfile\fR is thrown away. Macros it defines remain defined. --- 596,602 ---- .Sp If multiple \fB\-include\fR options are given, the files are included in the order they appear on the command line. ! .Ip "\fB\-imacros\fR \fIfile\fR" 4 .IX Item "-imacros file" Exactly like \fB\-include\fR, except that any output produced by scanning \fIfile\fR is thrown away. Macros it defines remain defined. *************** processing its declarations. *** 598,617 **** .Sp All files specified by \fB\-imacros\fR are processed before all files specified by \fB\-include\fR. ! .IP "\fB\-idirafter\fR \fIdir\fR" 4 .IX Item "-idirafter dir" Search \fIdir\fR for header files, but do it \fIafter\fR all directories specified with \fB\-I\fR and the standard system directories have been exhausted. \fIdir\fR is treated as a system include directory. ! .IP "\fB\-iprefix\fR \fIprefix\fR" 4 .IX Item "-iprefix prefix" Specify \fIprefix\fR as the prefix for subsequent \fB\-iwithprefix\fR options. If the prefix represents a directory, you should include the final \fB/\fR. ! .IP "\fB\-iwithprefix\fR \fIdir\fR" 4 .IX Item "-iwithprefix dir" .PD 0 ! .IP "\fB\-iwithprefixbefore\fR \fIdir\fR" 4 .IX Item "-iwithprefixbefore dir" .PD Append \fIdir\fR to the prefix specified previously with --- 605,624 ---- .Sp All files specified by \fB\-imacros\fR are processed before all files specified by \fB\-include\fR. ! .Ip "\fB\-idirafter\fR \fIdir\fR" 4 .IX Item "-idirafter dir" Search \fIdir\fR for header files, but do it \fIafter\fR all directories specified with \fB\-I\fR and the standard system directories have been exhausted. \fIdir\fR is treated as a system include directory. ! .Ip "\fB\-iprefix\fR \fIprefix\fR" 4 .IX Item "-iprefix prefix" Specify \fIprefix\fR as the prefix for subsequent \fB\-iwithprefix\fR options. If the prefix represents a directory, you should include the final \fB/\fR. ! .Ip "\fB\-iwithprefix\fR \fIdir\fR" 4 .IX Item "-iwithprefix dir" .PD 0 ! .Ip "\fB\-iwithprefixbefore\fR \fIdir\fR" 4 .IX Item "-iwithprefixbefore dir" .PD Append \fIdir\fR to the prefix specified previously with *************** path. \fB\-iwithprefixbefore\fR puts it *** 620,632 **** would; \fB\-iwithprefix\fR puts it where \fB\-idirafter\fR would. .Sp Use of these options is discouraged. ! .IP "\fB\-isystem\fR \fIdir\fR" 4 .IX Item "-isystem dir" Search \fIdir\fR for header files, after all directories specified by \&\fB\-I\fR but before the standard system directories. Mark it as a system directory, so that it gets the same special treatment as is applied to the standard system directories. ! .IP "\fB\-fpreprocessed\fR" 4 .IX Item "-fpreprocessed" Indicate to the preprocessor that the input file has already been preprocessed. This suppresses things like macro expansion, trigraph --- 627,639 ---- would; \fB\-iwithprefix\fR puts it where \fB\-idirafter\fR would. .Sp Use of these options is discouraged. ! .Ip "\fB\-isystem\fR \fIdir\fR" 4 .IX Item "-isystem dir" Search \fIdir\fR for header files, after all directories specified by \&\fB\-I\fR but before the standard system directories. Mark it as a system directory, so that it gets the same special treatment as is applied to the standard system directories. ! .Ip "\fB\-fpreprocessed\fR" 4 .IX Item "-fpreprocessed" Indicate to the preprocessor that the input file has already been preprocessed. This suppresses things like macro expansion, trigraph *************** a tokenizer for the front ends. *** 639,667 **** \&\fB\-fpreprocessed\fR is implicit if the input file has one of the extensions \fB.i\fR, \fB.ii\fR or \fB.mi\fR. These are the extensions that \s-1GCC\s0 uses for preprocessed files created by ! \&\fB\-save\-temps\fR. ! .IP "\fB\-ftabstop=\fR\fIwidth\fR" 4 .IX Item "-ftabstop=width" Set the distance between tab stops. This helps the preprocessor report correct column numbers in warnings or errors, even if tabs appear on the line. If the value is less than 1 or greater than 100, the option is ignored. The default is 8. ! .IP "\fB\-fno\-show\-column\fR" 4 .IX Item "-fno-show-column" Do not print column numbers in diagnostics. This may be necessary if diagnostics are being scanned by a program that does not understand the column numbers, such as \fBdejagnu\fR. ! .IP "\fB\-A\fR \fIpredicate\fR\fB=\fR\fIanswer\fR" 4 .IX Item "-A predicate=answer" Make an assertion with the predicate \fIpredicate\fR and answer \&\fIanswer\fR. This form is preferred to the older form \fB\-A\fR \&\fIpredicate\fR\fB(\fR\fIanswer\fR\fB)\fR, which is still supported, because it does not use shell special characters. ! .IP "\fB\-A \-\fR\fIpredicate\fR\fB=\fR\fIanswer\fR" 4 .IX Item "-A -predicate=answer" Cancel an assertion with the predicate \fIpredicate\fR and answer \&\fIanswer\fR. ! .IP "\fB\-dCHARS\fR" 4 .IX Item "-dCHARS" \&\fI\s-1CHARS\s0\fR is a sequence of one or more of the following characters, and must not be preceded by a space. Other characters are interpreted --- 646,674 ---- \&\fB\-fpreprocessed\fR is implicit if the input file has one of the extensions \fB.i\fR, \fB.ii\fR or \fB.mi\fR. These are the extensions that \s-1GCC\s0 uses for preprocessed files created by ! \&\fB\-save-temps\fR. ! .Ip "\fB\-ftabstop=\fR\fIwidth\fR" 4 .IX Item "-ftabstop=width" Set the distance between tab stops. This helps the preprocessor report correct column numbers in warnings or errors, even if tabs appear on the line. If the value is less than 1 or greater than 100, the option is ignored. The default is 8. ! .Ip "\fB\-fno-show-column\fR" 4 .IX Item "-fno-show-column" Do not print column numbers in diagnostics. This may be necessary if diagnostics are being scanned by a program that does not understand the column numbers, such as \fBdejagnu\fR. ! .Ip "\fB\-A\fR \fIpredicate\fR\fB=\fR\fIanswer\fR" 4 .IX Item "-A predicate=answer" Make an assertion with the predicate \fIpredicate\fR and answer \&\fIanswer\fR. This form is preferred to the older form \fB\-A\fR \&\fIpredicate\fR\fB(\fR\fIanswer\fR\fB)\fR, which is still supported, because it does not use shell special characters. ! .Ip "\fB\-A -\fR\fIpredicate\fR\fB=\fR\fIanswer\fR" 4 .IX Item "-A -predicate=answer" Cancel an assertion with the predicate \fIpredicate\fR and answer \&\fIanswer\fR. ! .Ip "\fB\-dCHARS\fR" 4 .IX Item "-dCHARS" \&\fI\s-1CHARS\s0\fR is a sequence of one or more of the following characters, and must not be preceded by a space. Other characters are interpreted *************** by the compiler proper, or reserved for *** 669,675 **** are silently ignored. If you specify characters whose behavior conflicts, the result is undefined. .RS 4 ! .IP "\fBM\fR" 4 .IX Item "M" Instead of the normal output, generate a list of \fB#define\fR directives for all the macros defined during the execution of the --- 676,682 ---- are silently ignored. If you specify characters whose behavior conflicts, the result is undefined. .RS 4 ! .Ip "\fBM\fR" 4 .IX Item "M" Instead of the normal output, generate a list of \fB#define\fR directives for all the macros defined during the execution of the *************** Assuming you have no file \fIfoo.h\fR, t *** 680,710 **** .Vb 1 \& touch foo.h; cpp -dM foo.h .Ve - .Sp will show all the predefined macros. ! .IP "\fBD\fR" 4 .IX Item "D" Like \fBM\fR except in two respects: it does \fInot\fR include the predefined macros, and it outputs \fIboth\fR the \fB#define\fR directives and the result of preprocessing. Both kinds of output go to the standard output file. ! .IP "\fBN\fR" 4 .IX Item "N" Like \fBD\fR, but emit only the macro names, not their expansions. ! .IP "\fBI\fR" 4 .IX Item "I" Output \fB#include\fR directives in addition to the result of preprocessing. .RE .RS 4 .RE ! .IP "\fB\-P\fR" 4 .IX Item "-P" Inhibit generation of linemarkers in the output from the preprocessor. This might be useful when running the preprocessor on something that is not C code, and will be sent to a program which might be confused by the linemarkers. ! .IP "\fB\-C\fR" 4 .IX Item "-C" Do not discard comments. All comments are passed through to the output file, except for comments in processed directives, which are deleted --- 687,716 ---- .Vb 1 \& touch foo.h; cpp -dM foo.h .Ve will show all the predefined macros. ! .Ip "\fBD\fR" 4 .IX Item "D" Like \fBM\fR except in two respects: it does \fInot\fR include the predefined macros, and it outputs \fIboth\fR the \fB#define\fR directives and the result of preprocessing. Both kinds of output go to the standard output file. ! .Ip "\fBN\fR" 4 .IX Item "N" Like \fBD\fR, but emit only the macro names, not their expansions. ! .Ip "\fBI\fR" 4 .IX Item "I" Output \fB#include\fR directives in addition to the result of preprocessing. .RE .RS 4 .RE ! .Ip "\fB\-P\fR" 4 .IX Item "-P" Inhibit generation of linemarkers in the output from the preprocessor. This might be useful when running the preprocessor on something that is not C code, and will be sent to a program which might be confused by the linemarkers. ! .Ip "\fB\-C\fR" 4 .IX Item "-C" Do not discard comments. All comments are passed through to the output file, except for comments in processed directives, which are deleted *************** causes the preprocessor to treat comment *** 715,721 **** For example, comments appearing at the start of what would be a directive line have the effect of turning that line into an ordinary source line, since the first token on the line is no longer a \fB#\fR. ! .IP "\fB\-CC\fR" 4 .IX Item "-CC" Do not discard comments, including during macro expansion. This is like \fB\-C\fR, except that comments contained within macros are --- 721,727 ---- For example, comments appearing at the start of what would be a directive line have the effect of turning that line into an ordinary source line, since the first token on the line is no longer a \fB#\fR. ! .Ip "\fB\-CC\fR" 4 .IX Item "-CC" Do not discard comments, including during macro expansion. This is like \fB\-C\fR, except that comments contained within macros are *************** also passed through to the output file w *** 723,766 **** .Sp In addition to the side-effects of the \fB\-C\fR option, the \&\fB\-CC\fR option causes all \*(C+\-style comments inside a macro ! to be converted to C\-style comments. This is to prevent later use of that macro from inadvertently commenting out the remainder of the source line. .Sp The \fB\-CC\fR option is generally used to support lint comments. ! .IP "\fB\-traditional\-cpp\fR" 4 .IX Item "-traditional-cpp" Try to imitate the behavior of old-fashioned C preprocessors, as opposed to \s-1ISO\s0 C preprocessors. ! .IP "\fB\-trigraphs\fR" 4 .IX Item "-trigraphs" Process trigraph sequences. ! .IP "\fB\-remap\fR" 4 .IX Item "-remap" Enable special code to work around file systems which only permit very ! short file names, such as \s-1MS\-DOS\s0. ! .IP "\fB\-\-help\fR" 4 ! .IX Item "--help" .PD 0 ! .IP "\fB\-\-target\-help\fR" 4 ! .IX Item "--target-help" .PD Print text describing all the command line options instead of preprocessing anything. ! .IP "\fB\-v\fR" 4 .IX Item "-v" Verbose mode. Print out \s-1GNU\s0 \s-1CPP\s0's version number at the beginning of execution, and report the final form of the include path. ! .IP "\fB\-H\fR" 4 .IX Item "-H" Print the name of each header file used, in addition to other normal activities. Each name is indented to show how deep in the \&\fB#include\fR stack it is. ! .IP "\fB\-version\fR" 4 .IX Item "-version" .PD 0 ! .IP "\fB\-\-version\fR" 4 ! .IX Item "--version" .PD Print out \s-1GNU\s0 \s-1CPP\s0's version number. With one dash, proceed to preprocess as normal. With two dashes, exit immediately. --- 729,772 ---- .Sp In addition to the side-effects of the \fB\-C\fR option, the \&\fB\-CC\fR option causes all \*(C+\-style comments inside a macro ! to be converted to C-style comments. This is to prevent later use of that macro from inadvertently commenting out the remainder of the source line. .Sp The \fB\-CC\fR option is generally used to support lint comments. ! .Ip "\fB\-traditional-cpp\fR" 4 .IX Item "-traditional-cpp" Try to imitate the behavior of old-fashioned C preprocessors, as opposed to \s-1ISO\s0 C preprocessors. ! .Ip "\fB\-trigraphs\fR" 4 .IX Item "-trigraphs" Process trigraph sequences. ! .Ip "\fB\-remap\fR" 4 .IX Item "-remap" Enable special code to work around file systems which only permit very ! short file names, such as \s-1MS-DOS\s0. ! .Ip "\fB\*(--help\fR" 4 ! .IX Item "help" .PD 0 ! .Ip "\fB\*(--target-help\fR" 4 ! .IX Item "target-help" .PD Print text describing all the command line options instead of preprocessing anything. ! .Ip "\fB\-v\fR" 4 .IX Item "-v" Verbose mode. Print out \s-1GNU\s0 \s-1CPP\s0's version number at the beginning of execution, and report the final form of the include path. ! .Ip "\fB\-H\fR" 4 .IX Item "-H" Print the name of each header file used, in addition to other normal activities. Each name is indented to show how deep in the \&\fB#include\fR stack it is. ! .Ip "\fB\-version\fR" 4 .IX Item "-version" .PD 0 ! .Ip "\fB\*(--version\fR" 4 ! .IX Item "version" .PD Print out \s-1GNU\s0 \s-1CPP\s0's version number. With one dash, proceed to preprocess as normal. With two dashes, exit immediately. *************** Note that you can also specify places to *** 775,788 **** \&\fB\-M\fR. These take precedence over environment variables, which in turn take precedence over the configuration of \s-1GCC\s0. ! .IP "\fB\s-1CPATH\s0\fR" 4 .IX Item "CPATH" .PD 0 ! .IP "\fBC_INCLUDE_PATH\fR" 4 .IX Item "C_INCLUDE_PATH" ! .IP "\fB\s-1CPLUS_INCLUDE_PATH\s0\fR" 4 .IX Item "CPLUS_INCLUDE_PATH" ! .IP "\fB\s-1OBJC_INCLUDE_PATH\s0\fR" 4 .IX Item "OBJC_INCLUDE_PATH" .PD Each variable's value is a list of directories separated by a special --- 781,794 ---- \&\fB\-M\fR. These take precedence over environment variables, which in turn take precedence over the configuration of \s-1GCC\s0. ! .Ip "\fB\s-1CPATH\s0\fR" 4 .IX Item "CPATH" .PD 0 ! .Ip "\fBC_INCLUDE_PATH\fR" 4 .IX Item "C_INCLUDE_PATH" ! .Ip "\fB\s-1CPLUS_INCLUDE_PATH\s0\fR" 4 .IX Item "CPLUS_INCLUDE_PATH" ! .Ip "\fB\s-1OBJC_INCLUDE_PATH\s0\fR" 4 .IX Item "OBJC_INCLUDE_PATH" .PD Each variable's value is a list of directories separated by a special *************** search its current working directory. E *** 806,812 **** beginning or end of a path. For instance, if the value of \&\fB\s-1CPATH\s0\fR is \f(CW\*(C`:/special/include\*(C'\fR, that has the same effect as \fB\-I.\ \-I/special/include\fR. ! .IP "\fB\s-1DEPENDENCIES_OUTPUT\s0\fR" 4 .IX Item "DEPENDENCIES_OUTPUT" If this variable is set, its value specifies how to output dependencies for Make based on the non-system header files processed --- 812,818 ---- beginning or end of a path. For instance, if the value of \&\fB\s-1CPATH\s0\fR is \f(CW\*(C`:/special/include\*(C'\fR, that has the same effect as \fB\-I.\ \-I/special/include\fR. ! .Ip "\fB\s-1DEPENDENCIES_OUTPUT\s0\fR" 4 .IX Item "DEPENDENCIES_OUTPUT" If this variable is set, its value specifies how to output dependencies for Make based on the non-system header files processed *************** file \fIfile\fR using \fItarget\fR as th *** 822,828 **** In other words, this environment variable is equivalent to combining the options \fB\-MM\fR and \fB\-MF\fR, with an optional \fB\-MT\fR switch too. ! .IP "\fB\s-1SUNPRO_DEPENDENCIES\s0\fR" 4 .IX Item "SUNPRO_DEPENDENCIES" This variable is the same as \fB\s-1DEPENDENCIES_OUTPUT\s0\fR (see above), except that system header files are not ignored, so it implies --- 828,834 ---- In other words, this environment variable is equivalent to combining the options \fB\-MM\fR and \fB\-MF\fR, with an optional \fB\-MT\fR switch too. ! .Ip "\fB\s-1SUNPRO_DEPENDENCIES\s0\fR" 4 .IX Item "SUNPRO_DEPENDENCIES" This variable is the same as \fB\s-1DEPENDENCIES_OUTPUT\s0\fR (see above), except that system header files are not ignored, so it implies *************** except that system header files are not *** 830,842 **** main input file is omitted. .SH "SEE ALSO" .IX Header "SEE ALSO" ! \&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf\-funding\fR\|(7), \&\fIgcc\fR\|(1), \fIas\fR\|(1), \fIld\fR\|(1), and the Info entries for \fIcpp\fR, \fIgcc\fR, and \&\fIbinutils\fR. .SH "COPYRIGHT" .IX Header "COPYRIGHT" Copyright (c) 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996, ! 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. .PP Permission is granted to copy, distribute and/or modify this document --- 836,848 ---- main input file is omitted. .SH "SEE ALSO" .IX Header "SEE ALSO" ! \&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf-funding\fR\|(7), \&\fIgcc\fR\|(1), \fIas\fR\|(1), \fIld\fR\|(1), and the Info entries for \fIcpp\fR, \fIgcc\fR, and \&\fIbinutils\fR. .SH "COPYRIGHT" .IX Header "COPYRIGHT" Copyright (c) 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996, ! 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. .PP Permission is granted to copy, distribute and/or modify this document *************** This manual contains no Invariant Sectio *** 852,858 **** .Vb 1 \& A GNU Manual .Ve - .PP (b) The \s-1FSF\s0's Back-Cover Text is: .PP .Vb 3 --- 858,863 ---- diff -Nrc3pad gcc-3.3.2/gcc/doc/cpp.info gcc-3.3.3/gcc/doc/cpp.info *** gcc-3.3.2/gcc/doc/cpp.info Thu Oct 16 20:23:49 2003 --- gcc-3.3.3/gcc/doc/cpp.info Sat Feb 14 20:38:08 2004 *************** *** 1,8 **** ! This is doc/cpp.info, produced by makeinfo version 4.2 from ! doc/cpp.texi. Copyright (C) 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, ! 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or --- 1,8 ---- ! Ceci est le fichier Info doc/cpp.info, produit par Makeinfo version 4.6 ! à partir doc/cpp.texi. Copyright (C) 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, ! 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or *************** File: cpp.info, Node: Top, Next: Overv *** 32,38 **** ! The C preprocessor implements the macro language used to transform C, C++, and Objective-C programs before they are compiled. It can also be useful on its own. --- 32,38 ---- ! The C preprocessor implements the macro language used to transform C, C++, and Objective-C programs before they are compiled. It can also be useful on its own. *************** Obsolete Features *** 131,137 **** * Obsolete once-only headers:: Copyright (C) 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, ! 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or --- 131,137 ---- * Obsolete once-only headers:: Copyright (C) 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, ! 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or *************** File: cpp.info, Node: Overview, Next: *** 157,164 **** Overview ******** ! The C preprocessor, often known as "cpp", is a "macro processor" ! that is used automatically by the C compiler to transform your program before compilation. It is called a macro processor because it allows you to define "macros", which are brief abbreviations for longer constructs. --- 157,164 ---- Overview ******** ! The C preprocessor, often known as "cpp", is a "macro processor" that ! is used automatically by the C compiler to transform your program before compilation. It is called a macro processor because it allows you to define "macros", which are brief abbreviations for longer constructs. *************** File: cpp.info, Node: Initial processin *** 216,222 **** Initial processing ================== ! The preprocessor performs a series of textual transformations on its input. These happen before all other processing. Conceptually, they happen in a rigid order, and the entire file is run through each transformation before the next one begins. CPP actually does them all --- 216,222 ---- Initial processing ================== ! The preprocessor performs a series of textual transformations on its input. These happen before all other processing. Conceptually, they happen in a rigid order, and the entire file is run through each transformation before the next one begins. CPP actually does them all *************** File: cpp.info, Node: Tokenization, Ne *** 358,364 **** Tokenization ============ ! After the textual transformations are finished, the input file is converted into a sequence of "preprocessing tokens". These mostly correspond to the syntactic tokens used by the C compiler, but there are a few differences. White space separates tokens; it is not itself a --- 358,364 ---- Tokenization ============ ! After the textual transformations are finished, the input file is converted into a sequence of "preprocessing tokens". These mostly correspond to the syntactic tokens used by the C compiler, but there are a few differences. White space separates tokens; it is not itself a *************** File: cpp.info, Node: The preprocessing *** 506,516 **** The preprocessing language ========================== ! After tokenization, the stream of tokens may simply be passed ! straight to the compiler's parser. However, if it contains any ! operations in the "preprocessing language", it will be transformed ! first. This stage corresponds roughly to the standard's "translation ! phase 4" and is what most people think of as the preprocessor's job. The preprocessing language consists of "directives" to be executed and "macros" to be expanded. Its primary capabilities are: --- 506,516 ---- The preprocessing language ========================== ! After tokenization, the stream of tokens may simply be passed straight ! to the compiler's parser. However, if it contains any operations in the ! "preprocessing language", it will be transformed first. This stage ! corresponds roughly to the standard's "translation phase 4" and is what ! most people think of as the preprocessor's job. The preprocessing language consists of "directives" to be executed and "macros" to be expanded. Its primary capabilities are: *************** File: cpp.info, Node: Header Files, Ne *** 569,578 **** Header Files ************ ! A header file is a file containing C declarations and macro ! definitions (*note Macros::) to be shared between several source files. ! You request the use of a header file in your program by "including" ! it, with the C preprocessing directive `#include'. Header files serve two purposes. --- 569,578 ---- Header Files ************ ! A header file is a file containing C declarations and macro definitions ! (*note Macros::) to be shared between several source files. You request ! the use of a header file in your program by "including" it, with the C ! preprocessing directive `#include'. Header files serve two purposes. *************** File: cpp.info, Node: Include Syntax, *** 617,624 **** Include Syntax ============== ! Both user and system header files are included using the ! preprocessing directive `#include'. It has two variants: `#include ' This variant is used for system header files. It searches for a --- 617,624 ---- Include Syntax ============== ! Both user and system header files are included using the preprocessing ! directive `#include'. It has two variants: `#include ' This variant is used for system header files. It searches for a *************** File: cpp.info, Node: Include Operation *** 653,660 **** Include Operation ================= ! The `#include' directive works by directing the C preprocessor to ! scan the specified file as input before continuing with the rest of the current file. The output from the preprocessor contains the output already generated, followed by the output resulting from the included file, followed by the output that comes from the text after the --- 653,660 ---- Include Operation ================= ! The `#include' directive works by directing the C preprocessor to scan ! the specified file as input before continuing with the rest of the current file. The output from the preprocessor contains the output already generated, followed by the output resulting from the included file, followed by the output that comes from the text after the *************** File: cpp.info, Node: Search Path, Nex *** 711,717 **** Search Path =========== ! GCC looks in several different places for headers. On a normal Unix system, if you do not instruct it otherwise, it will look for headers requested with `#include ' in: --- 711,717 ---- Search Path =========== ! GCC looks in several different places for headers. On a normal Unix system, if you do not instruct it otherwise, it will look for headers requested with `#include ' in: *************** File: cpp.info, Node: Once-Only Headers *** 779,788 **** Once-Only Headers ================= ! If a header file happens to be included twice, the compiler will ! process its contents twice. This is very likely to cause an error, ! e.g. when the compiler sees the same structure definition twice. Even ! if it does not, it will certainly waste time. The standard way to prevent this is to enclose the entire real contents of the file in a conditional, like this: --- 779,788 ---- Once-Only Headers ================= ! If a header file happens to be included twice, the compiler will process ! its contents twice. This is very likely to cause an error, e.g. when ! the compiler sees the same structure definition twice. Even if it does ! not, it will certainly waste time. The standard way to prevent this is to enclose the entire real contents of the file in a conditional, like this: *************** File: cpp.info, Node: Computed Includes *** 821,827 **** Computed Includes ================= ! Sometimes it is necessary to select one of several different header files to be included into your program. They might specify configuration parameters to be used on different sorts of operating systems, for instance. You could do this with a series of conditionals, --- 821,827 ---- Computed Includes ================= ! Sometimes it is necessary to select one of several different header files to be included into your program. They might specify configuration parameters to be used on different sorts of operating systems, for instance. You could do this with a series of conditionals, *************** File: cpp.info, Node: Wrapper Headers, *** 895,901 **** Wrapper Headers =============== ! Sometimes it is necessary to adjust the contents of a system-provided header file without editing it directly. GCC's `fixincludes' operation does this, for example. One way to do that would be to create a new header file with the same name and insert it in the search path before --- 895,901 ---- Wrapper Headers =============== ! Sometimes it is necessary to adjust the contents of a system-provided header file without editing it directly. GCC's `fixincludes' operation does this, for example. One way to do that would be to create a new header file with the same name and insert it in the search path before *************** File: cpp.info, Node: System Headers, *** 946,952 **** System Headers ============== ! The header files declaring interfaces to the operating system and runtime libraries often cannot be written in strictly conforming C. Therefore, GCC gives code found in "system headers" special treatment. All warnings, other than those generated by `#warning' (*note --- 946,952 ---- System Headers ============== ! The header files declaring interfaces to the operating system and runtime libraries often cannot be written in strictly conforming C. Therefore, GCC gives code found in "system headers" special treatment. All warnings, other than those generated by `#warning' (*note *************** File: cpp.info, Node: Macros, Next: Co *** 989,999 **** Macros ****** ! A "macro" is a fragment of code which has been given a name. ! Whenever the name is used, it is replaced by the contents of the macro. ! There are two kinds of macros. They differ mostly in what they look ! like when they are used. "Object-like" macros resemble data objects ! when used, "function-like" macros resemble function calls. You may define any valid identifier as a macro, even if it is a C keyword. The preprocessor does not know anything about keywords. This --- 989,999 ---- Macros ****** ! A "macro" is a fragment of code which has been given a name. Whenever ! the name is used, it is replaced by the contents of the macro. There ! are two kinds of macros. They differ mostly in what they look like ! when they are used. "Object-like" macros resemble data objects when ! used, "function-like" macros resemble function calls. You may define any valid identifier as a macro, even if it is a C keyword. The preprocessor does not know anything about keywords. This *************** File: cpp.info, Node: Object-like Macro *** 1022,1030 **** Object-like Macros ================== ! An "object-like macro" is a simple identifier which will be replaced ! by a code fragment. It is called object-like because it looks like a ! data object in code that uses it. They are most commonly used to give symbolic names to numeric constants. You create macros with the `#define' directive. `#define' is --- 1022,1030 ---- Object-like Macros ================== ! An "object-like macro" is a simple identifier which will be replaced by ! a code fragment. It is called object-like because it looks like a data ! object in code that uses it. They are most commonly used to give symbolic names to numeric constants. You create macros with the `#define' directive. `#define' is *************** File: cpp.info, Node: Function-like Mac *** 1124,1133 **** Function-like Macros ==================== ! You can also define macros whose use looks like a function call. ! These are called "function-like macros". To define a function-like ! macro, you use the same `#define' directive, but you put a pair of ! parentheses immediately after the macro name. For example, #define lang_init() c_init() lang_init() --- 1124,1133 ---- Function-like Macros ==================== ! You can also define macros whose use looks like a function call. These ! are called "function-like macros". To define a function-like macro, ! you use the same `#define' directive, but you put a pair of parentheses ! immediately after the macro name. For example, #define lang_init() c_init() lang_init() *************** File: cpp.info, Node: Macro Arguments, *** 1168,1174 **** Macro Arguments =============== ! Function-like macros can take "arguments", just like true functions. To define a macro that uses arguments, you insert "parameters" between the pair of parentheses in the macro definition that make the macro function-like. The parameters must be valid C identifiers, separated --- 1168,1174 ---- Macro Arguments =============== ! Function-like macros can take "arguments", just like true functions. To define a macro that uses arguments, you insert "parameters" between the pair of parentheses in the macro definition that make the macro function-like. The parameters must be valid C identifiers, separated *************** File: cpp.info, Node: Stringification, *** 1261,1267 **** Stringification =============== ! Sometimes you may want to convert a macro argument into a string constant. Parameters are not replaced inside string constants, but you can use the `#' preprocessing operator instead. When a macro parameter is used with a leading `#', the preprocessor replaces it with the --- 1261,1267 ---- Stringification =============== ! Sometimes you may want to convert a macro argument into a string constant. Parameters are not replaced inside string constants, but you can use the `#' preprocessing operator instead. When a macro parameter is used with a leading `#', the preprocessor replaces it with the *************** File: cpp.info, Node: Concatenation, N *** 1339,1347 **** Concatenation ============= ! It is often useful to merge two tokens into one while expanding ! macros. This is called "token pasting" or "token concatenation". The ! `##' preprocessing operator performs token pasting. When a macro is expanded, the two tokens on either side of each `##' operator are combined into a single token, which then replaces the `##' and the two original tokens in the macro expansion. Usually both will be --- 1339,1347 ---- Concatenation ============= ! It is often useful to merge two tokens into one while expanding macros. ! This is called "token pasting" or "token concatenation". The `##' ! preprocessing operator performs token pasting. When a macro is expanded, the two tokens on either side of each `##' operator are combined into a single token, which then replaces the `##' and the two original tokens in the macro expansion. Usually both will be *************** File: cpp.info, Node: Variadic Macros, *** 1413,1421 **** Variadic Macros =============== ! A macro can be declared to accept a variable number of arguments ! much as a function can. The syntax for defining the macro is similar ! to that of a function. Here is an example: #define eprintf(...) fprintf (stderr, __VA_ARGS__) --- 1413,1421 ---- Variadic Macros =============== ! A macro can be declared to accept a variable number of arguments much as ! a function can. The syntax for defining the macro is similar to that of ! a function. Here is an example: #define eprintf(...) fprintf (stderr, __VA_ARGS__) *************** File: cpp.info, Node: Predefined Macros *** 1518,1524 **** Predefined Macros ================= ! Several object-like macros are predefined; you use them without supplying their definitions. They fall into three classes: standard, common, and system-specific. --- 1518,1524 ---- Predefined Macros ================= ! Several object-like macros are predefined; you use them without supplying their definitions. They fall into three classes: standard, common, and system-specific. *************** File: cpp.info, Node: Standard Predefin *** 1538,1547 **** Standard Predefined Macros -------------------------- ! The standard predefined macros are specified by the relevant ! language standards, so they are available with all compilers that ! implement those standards. Older compilers may not provide all of ! them. Their names all start with double underscores. `__FILE__' This macro expands to the name of the current input file, in the --- 1538,1547 ---- Standard Predefined Macros -------------------------- ! The standard predefined macros are specified by the relevant language ! standards, so they are available with all compilers that implement ! those standards. Older compilers may not provide all of them. Their ! names all start with double underscores. `__FILE__' This macro expands to the name of the current input file, in the *************** with `__FILE__' and `__LINE__', though. *** 1662,1676 **** This macro is defined with value 1 when preprocessing assembly language.  File: cpp.info, Node: Common Predefined Macros, Next: System-specific Predefined Macros, Prev: Standard Predefined Macros, Up: Predefined Macros Common Predefined Macros ------------------------ ! The common predefined macros are GNU C extensions. They are ! available with the same meanings regardless of the machine or operating ! system on which you are using GNU C. Their names all start with double underscores. `__GNUC__' --- 1662,1677 ---- This macro is defined with value 1 when preprocessing assembly language. +  File: cpp.info, Node: Common Predefined Macros, Next: System-specific Predefined Macros, Prev: Standard Predefined Macros, Up: Predefined Macros Common Predefined Macros ------------------------ ! The common predefined macros are GNU C extensions. They are available ! with the same meanings regardless of the machine or operating system on ! which you are using GNU C. Their names all start with double underscores. `__GNUC__' *************** underscores. *** 1836,1842 **** being used. `__LP64__' - `_LP64' These macros are defined, with value 1, if (and only if) the compilation is for a target where `long int' and pointer both use --- 1837,1842 ---- *************** File: cpp.info, Node: System-specific P *** 1848,1858 **** System-specific Predefined Macros --------------------------------- ! The C preprocessor normally predefines several macros that indicate ! what type of system and machine is in use. They are obviously ! different on each target supported by GCC. This manual, being for all ! systems and machines, cannot tell you what their names are, but you can ! use `cpp -dM' to see them all. *Note Invocation::. All system-specific predefined macros expand to the constant 1, so you can test them with either `#ifdef' or `#if'. --- 1848,1858 ---- System-specific Predefined Macros --------------------------------- ! The C preprocessor normally predefines several macros that indicate what ! type of system and machine is in use. They are obviously different on ! each target supported by GCC. This manual, being for all systems and ! machines, cannot tell you what their names are, but you can use `cpp ! -dM' to see them all. *Note Invocation::. All system-specific predefined macros expand to the constant 1, so you can test them with either `#ifdef' or `#if'. *************** File: cpp.info, Node: C++ Named Operato *** 1886,1898 **** C++ Named Operators ------------------- ! In C++, there are eleven keywords which are simply alternate ! spellings of operators normally written with punctuation. These ! keywords are treated as such even in the preprocessor. They function ! as operators in `#if', and they cannot be defined as macros or ! poisoned. In C, you can request that those keywords take their C++ ! meaning by including `iso646.h'. That header defines each one as a ! normal object-like macro expanding to the appropriate punctuator. These are the named operators and their corresponding punctuators: --- 1886,1898 ---- C++ Named Operators ------------------- ! In C++, there are eleven keywords which are simply alternate spellings ! of operators normally written with punctuation. These keywords are ! treated as such even in the preprocessor. They function as operators in ! `#if', and they cannot be defined as macros or poisoned. In C, you can ! request that those keywords take their C++ meaning by including ! `iso646.h'. That header defines each one as a normal object-like macro ! expanding to the appropriate punctuator. These are the named operators and their corresponding punctuators: *************** File: cpp.info, Node: Undefining and Re *** 1915,1923 **** Undefining and Redefining Macros ================================ ! If a macro ceases to be useful, it may be "undefined" with the ! `#undef' directive. `#undef' takes a single argument, the name of the ! macro to undefine. You use the bare macro name, even if the macro is function-like. It is an error if anything appears on the line after the macro name. `#undef' has no effect if the name is not a macro. --- 1915,1923 ---- Undefining and Redefining Macros ================================ ! If a macro ceases to be useful, it may be "undefined" with the `#undef' ! directive. `#undef' takes a single argument, the name of the macro to ! undefine. You use the bare macro name, even if the macro is function-like. It is an error if anything appears on the line after the macro name. `#undef' has no effect if the name is not a macro. *************** File: cpp.info, Node: Directives Within *** 1967,1975 **** Directives Within Macro Arguments ================================= ! Occasionally it is convenient to use preprocessor directives within ! the arguments of a macro. The C and C++ standards declare that ! behavior in these cases is undefined. Versions of CPP prior to 3.2 would reject such constructs with an error message. This was the only syntactic difference between normal --- 1967,1975 ---- Directives Within Macro Arguments ================================= ! Occasionally it is convenient to use preprocessor directives within the ! arguments of a macro. The C and C++ standards declare that behavior in ! these cases is undefined. Versions of CPP prior to 3.2 would reject such constructs with an error message. This was the only syntactic difference between normal *************** File: cpp.info, Node: Macro Pitfalls, *** 2007,2014 **** Macro Pitfalls ============== ! In this section we describe some special rules that apply to macros ! and macro expansion, and point out certain cases in which the rules have counter-intuitive consequences that you must watch out for. * Menu: --- 2007,2014 ---- Macro Pitfalls ============== ! In this section we describe some special rules that apply to macros and ! macro expansion, and point out certain cases in which the rules have counter-intuitive consequences that you must watch out for. * Menu: *************** File: cpp.info, Node: Misnesting, Next *** 2027,2033 **** Misnesting ---------- ! When a macro is called with arguments, the arguments are substituted into the macro body and the result is checked, together with the rest of the input file, for more macro calls. It is possible to piece together a macro call coming partially from the macro body and partially from the --- 2027,2033 ---- Misnesting ---------- ! When a macro is called with arguments, the arguments are substituted into the macro body and the result is checked, together with the rest of the input file, for more macro calls. It is possible to piece together a macro call coming partially from the macro body and partially from the *************** File: cpp.info, Node: Operator Preceden *** 2059,2069 **** Operator Precedence Problems ---------------------------- ! You may have noticed that in most of the macro definition examples ! shown above, each occurrence of a macro argument name had parentheses ! around it. In addition, another pair of parentheses usually surround ! the entire macro definition. Here is why it is best to write macros ! that way. Suppose you define a macro as follows, --- 2059,2069 ---- Operator Precedence Problems ---------------------------- ! You may have noticed that in most of the macro definition examples shown ! above, each occurrence of a macro argument name had parentheses around ! it. In addition, another pair of parentheses usually surround the ! entire macro definition. Here is why it is best to write macros that ! way. Suppose you define a macro as follows, *************** File: cpp.info, Node: Swallowing the Se *** 2113,2119 **** Swallowing the Semicolon ------------------------ ! Often it is desirable to define a macro that expands into a compound statement. Consider, for example, the following macro, that advances a pointer (the argument `p' says where to find it) across whitespace characters: --- 2113,2119 ---- Swallowing the Semicolon ------------------------ ! Often it is desirable to define a macro that expands into a compound statement. Consider, for example, the following macro, that advances a pointer (the argument `p' says where to find it) across whitespace characters: *************** File: cpp.info, Node: Duplication of Si *** 2169,2175 **** Duplication of Side Effects --------------------------- ! Many C programs define a macro `min', for "minimum", like this: #define min(X, Y) ((X) < (Y) ? (X) : (Y)) --- 2169,2175 ---- Duplication of Side Effects --------------------------- ! Many C programs define a macro `min', for "minimum", like this: #define min(X, Y) ((X) < (Y) ? (X) : (Y)) *************** File: cpp.info, Node: Self-Referential *** 2228,2239 **** Self-Referential Macros ----------------------- ! A "self-referential" macro is one whose name appears in its ! definition. Recall that all macro definitions are rescanned for more ! macros to replace. If the self-reference were considered a use of the ! macro, it would produce an infinitely large expansion. To prevent this, ! the self-reference is not considered a macro call. It is passed into ! the preprocessor output unchanged. Let's consider an example: #define foo (4 + foo) --- 2228,2239 ---- Self-Referential Macros ----------------------- ! A "self-referential" macro is one whose name appears in its definition. ! Recall that all macro definitions are rescanned for more macros to ! replace. If the self-reference were considered a use of the macro, it ! would produce an infinitely large expansion. To prevent this, the ! self-reference is not considered a macro call. It is passed into the ! preprocessor output unchanged. Let's consider an example: #define foo (4 + foo) *************** File: cpp.info, Node: Argument Prescan, *** 2289,2295 **** Argument Prescan ---------------- ! Macro arguments are completely macro-expanded before they are substituted into a macro body, unless they are stringified or pasted with other tokens. After substitution, the entire macro body, including the substituted arguments, is scanned again for macros to be expanded. --- 2289,2295 ---- Argument Prescan ---------------- ! Macro arguments are completely macro-expanded before they are substituted into a macro body, unless they are stringified or pasted with other tokens. After substitution, the entire macro body, including the substituted arguments, is scanned again for macros to be expanded. *************** File: cpp.info, Node: Newlines in Argum *** 2376,2382 **** Newlines in Arguments --------------------- ! The invocation of a function-like macro can extend over many logical lines. However, in the present implementation, the entire expansion comes out on one line. Thus line numbers emitted by the compiler or debugger refer to the line the invocation started on, which might be --- 2376,2382 ---- Newlines in Arguments --------------------- ! The invocation of a function-like macro can extend over many logical lines. However, in the present implementation, the entire expansion comes out on one line. Thus line numbers emitted by the compiler or debugger refer to the line the invocation started on, which might be *************** File: cpp.info, Node: Conditionals, Ne *** 2402,2408 **** Conditionals ************ ! A "conditional" is a directive that instructs the preprocessor to select whether or not to include a chunk of code in the final token stream passed to the compiler. Preprocessor conditionals can test arithmetic expressions, or whether a name is defined as a macro, or both --- 2402,2408 ---- Conditionals ************ ! A "conditional" is a directive that instructs the preprocessor to select whether or not to include a chunk of code in the final token stream passed to the compiler. Preprocessor conditionals can test arithmetic expressions, or whether a name is defined as a macro, or both *************** File: cpp.info, Node: Conditional Uses, *** 2443,2449 **** Conditional Uses ================ ! There are three general reasons to use a conditional. * A program may need to use different code depending on the machine or operating system it is to run on. In some cases the code for --- 2443,2449 ---- Conditional Uses ================ ! There are three general reasons to use a conditional. * A program may need to use different code depending on the machine or operating system it is to run on. In some cases the code for *************** File: cpp.info, Node: Conditional Synta *** 2474,2480 **** Conditional Syntax ================== ! A conditional in the C preprocessor begins with a "conditional directive": `#if', `#ifdef' or `#ifndef'. * Menu: --- 2474,2480 ---- Conditional Syntax ================== ! A conditional in the C preprocessor begins with a "conditional directive": `#if', `#ifdef' or `#ifndef'. * Menu: *************** File: cpp.info, Node: Ifdef, Next: If, *** 2491,2497 **** Ifdef ----- ! The simplest sort of conditional is #ifdef MACRO --- 2491,2497 ---- Ifdef ----- ! The simplest sort of conditional is #ifdef MACRO *************** File: cpp.info, Node: If, Next: Define *** 2563,2569 **** If -- ! The `#if' directive allows you to test the value of an arithmetic expression, rather than the mere existence of one macro. Its syntax is #if EXPRESSION --- 2563,2569 ---- If -- ! The `#if' directive allows you to test the value of an arithmetic expression, rather than the mere existence of one macro. Its syntax is #if EXPRESSION *************** File: cpp.info, Node: Defined, Next: E *** 2624,2634 **** Defined ------- ! The special operator `defined' is used in `#if' and `#elif' ! expressions to test whether a certain name is defined as a macro. ! `defined NAME' and `defined (NAME)' are both expressions whose value is ! 1 if NAME is defined as a macro at the current point in the program, ! and 0 otherwise. Thus, `#if defined MACRO' is precisely equivalent to `#ifdef MACRO'. `defined' is useful when you wish to test more than one macro for --- 2624,2634 ---- Defined ------- ! The special operator `defined' is used in `#if' and `#elif' expressions ! to test whether a certain name is defined as a macro. `defined NAME' ! and `defined (NAME)' are both expressions whose value is 1 if NAME is ! defined as a macro at the current point in the program, and 0 ! otherwise. Thus, `#if defined MACRO' is precisely equivalent to `#ifdef MACRO'. `defined' is useful when you wish to test more than one macro for *************** File: cpp.info, Node: Else, Next: Elif *** 2659,2665 **** Else ---- ! The `#else' directive can be added to a conditional to provide alternative text to be used if the condition fails. This is what it looks like: --- 2659,2665 ---- Else ---- ! The `#else' directive can be added to a conditional to provide alternative text to be used if the condition fails. This is what it looks like: *************** File: cpp.info, Node: Elif, Prev: Else *** 2680,2687 **** Elif ---- ! One common case of nested conditionals is used to check for more ! than two possible alternatives. For example, you might have #if X == 1 ... --- 2680,2687 ---- Elif ---- ! One common case of nested conditionals is used to check for more than ! two possible alternatives. For example, you might have #if X == 1 ... *************** File: cpp.info, Node: Deleted Code, Pr *** 2725,2732 **** Deleted Code ============ ! If you replace or delete a part of the program but want to keep the ! old code around for future reference, you often cannot simply comment it out. Block comments do not nest, so the first comment inside the old code will end the commenting-out. The probable result is a flood of syntax errors. --- 2725,2732 ---- Deleted Code ============ ! If you replace or delete a part of the program but want to keep the old ! code around for future reference, you often cannot simply comment it out. Block comments do not nest, so the first comment inside the old code will end the commenting-out. The probable result is a flood of syntax errors. *************** File: cpp.info, Node: Diagnostics, Nex *** 2753,2761 **** Diagnostics *********** ! The directive `#error' causes the preprocessor to report a fatal ! error. The tokens forming the rest of the line following `#error' are ! used as the error message. You would use `#error' inside of a conditional that detects a combination of parameters which you know the program does not properly --- 2753,2761 ---- Diagnostics *********** ! The directive `#error' causes the preprocessor to report a fatal error. ! The tokens forming the rest of the line following `#error' are used as ! the error message. You would use `#error' inside of a conditional that detects a combination of parameters which you know the program does not properly *************** File: cpp.info, Node: Line Control, Ne *** 2793,2804 **** Line Control ************ ! The C preprocessor informs the C compiler of the location in your ! source code where each token came from. Presently, this is just the ! file name and line number. All the tokens resulting from macro ! expansion are reported as having appeared on the line of the source ! file where the outermost macro was used. We intend to be more accurate ! in the future. If you write a program which generates source code, such as the `bison' parser generator, you may want to adjust the preprocessor's --- 2793,2803 ---- Line Control ************ ! The C preprocessor informs the C compiler of the location in your source ! code where each token came from. Presently, this is just the file name ! and line number. All the tokens resulting from macro expansion are ! reported as having appeared on the line of the source file where the ! outermost macro was used. We intend to be more accurate in the future. If you write a program which generates source code, such as the `bison' parser generator, you may want to adjust the preprocessor's *************** File: cpp.info, Node: Pragmas, Next: O *** 2872,2879 **** Pragmas ******* ! The `#pragma' directive is the method specified by the C standard ! for providing additional information to the compiler, beyond what is conveyed in the language itself. Three forms of this directive (commonly known as "pragmas") are specified by the 1999 C standard. A C compiler is free to attach any meaning it likes to other pragmas. --- 2871,2878 ---- Pragmas ******* ! The `#pragma' directive is the method specified by the C standard for ! providing additional information to the compiler, beyond what is conveyed in the language itself. Three forms of this directive (commonly known as "pragmas") are specified by the 1999 C standard. A C compiler is free to attach any meaning it likes to other pragmas. *************** compilers. They are documented in the G *** 2963,2977 **** the current file to be treated as if it came from a system header. *Note System Headers::.  File: cpp.info, Node: Other Directives, Next: Preprocessor Output, Prev: Pragmas, Up: Top Other Directives **************** ! The `#ident' directive takes one argument, a string constant. On ! some systems, that string constant is copied into a special segment of ! the object file. On other systems, the directive is ignored. This directive is not part of the C standard, but it is not an official GNU extension either. We believe it came from System V. --- 2962,2977 ---- the current file to be treated as if it came from a system header. *Note System Headers::. +  File: cpp.info, Node: Other Directives, Next: Preprocessor Output, Prev: Pragmas, Up: Top Other Directives **************** ! The `#ident' directive takes one argument, a string constant. On some ! systems, that string constant is copied into a special segment of the ! object file. On other systems, the directive is ignored. This directive is not part of the C standard, but it is not an official GNU extension either. We believe it came from System V. *************** File: cpp.info, Node: Preprocessor Outp *** 2995,3001 **** Preprocessor Output ******************* ! When the C preprocessor is used with the C, C++, or Objective-C compilers, it is integrated into the compiler and communicates a stream of binary tokens directly to the compiler's parser. However, it can also be used in the more conventional standalone mode, where it produces --- 2995,3001 ---- Preprocessor Output ******************* ! When the C preprocessor is used with the C, C++, or Objective-C compilers, it is integrated into the compiler and communicates a stream of binary tokens directly to the compiler's parser. However, it can also be used in the more conventional standalone mode, where it produces *************** File: cpp.info, Node: Traditional Mode, *** 3068,3075 **** Traditional Mode **************** ! Traditional (pre-standard) C preprocessing is rather different from ! the preprocessing specified by the standard. When GCC is given the `-traditional-cpp' option, it attempts to emulate a traditional preprocessor. --- 3068,3075 ---- Traditional Mode **************** ! Traditional (pre-standard) C preprocessing is rather different from the ! preprocessing specified by the standard. When GCC is given the `-traditional-cpp' option, it attempts to emulate a traditional preprocessor. *************** File: cpp.info, Node: Traditional lexic *** 3097,3103 **** Traditional lexical analysis ============================ ! The traditional preprocessor does not decompose its input into tokens the same way a standards-conforming preprocessor does. The input is simply treated as a stream of text with minimal internal form. --- 3097,3103 ---- Traditional lexical analysis ============================ ! The traditional preprocessor does not decompose its input into tokens the same way a standards-conforming preprocessor does. The input is simply treated as a stream of text with minimal internal form. *************** File: cpp.info, Node: Traditional macro *** 3159,3165 **** Traditional macros ================== ! The major difference between traditional and ISO macros is that the former expand to text rather than to a token sequence. CPP removes all leading and trailing horizontal whitespace from a macro's replacement text before storing it, but preserves the form of internal whitespace. --- 3159,3165 ---- Traditional macros ================== ! The major difference between traditional and ISO macros is that the former expand to text rather than to a token sequence. CPP removes all leading and trailing horizontal whitespace from a macro's replacement text before storing it, but preserves the form of internal whitespace. *************** File: cpp.info, Node: Traditional misce *** 3245,3251 **** Traditional miscellany ====================== ! Here are some things to be aware of when using the traditional preprocessor. * Preprocessing directives are recognized only when their leading --- 3245,3251 ---- Traditional miscellany ====================== ! Here are some things to be aware of when using the traditional preprocessor. * Preprocessing directives are recognized only when their leading *************** File: cpp.info, Node: Traditional warni *** 3273,3279 **** Traditional warnings ==================== ! You can request warnings about features that did not exist, or worked differently, in traditional C with the `-Wtraditional' option. GCC does not warn about features of ISO C which you must use when you are using a conforming compiler, such as the `#' and `##' operators. --- 3273,3279 ---- Traditional warnings ==================== ! You can request warnings about features that did not exist, or worked differently, in traditional C with the `-Wtraditional' option. GCC does not warn about features of ISO C which you must use when you are using a conforming compiler, such as the `#' and `##' operators. *************** File: cpp.info, Node: Implementation De *** 3319,3325 **** Implementation Details ********************** ! Here we document details of how the preprocessor's implementation affects its user-visible behavior. You should try to avoid undue reliance on behavior described here, as it is possible that it will change subtly in future implementations. --- 3319,3325 ---- Implementation Details ********************** ! Here we document details of how the preprocessor's implementation affects its user-visible behavior. You should try to avoid undue reliance on behavior described here, as it is possible that it will change subtly in future implementations. *************** File: cpp.info, Node: Implementation-de *** 3340,3349 **** Implementation-defined behavior =============================== ! This is how CPP behaves in all the cases which the C standard ! describes as "implementation-defined". This term means that the ! implementation is free to do what it likes, but must document its choice ! and stick to it. * The mapping of physical source file multi-byte characters to the execution character set. --- 3340,3349 ---- Implementation-defined behavior =============================== ! This is how CPP behaves in all the cases which the C standard describes ! as "implementation-defined". This term means that the implementation ! is free to do what it likes, but must document its choice and stick to ! it. * The mapping of physical source file multi-byte characters to the execution character set. *************** File: cpp.info, Node: Implementation li *** 3408,3414 **** Implementation limits ===================== ! CPP has a small number of internal limits. This section lists the limits which the C standard requires to be no lower than some minimum, and all the others we are aware of. We intend there to be as few limits as possible. If you encounter an undocumented or inconvenient limit, --- 3408,3414 ---- Implementation limits ===================== ! CPP has a small number of internal limits. This section lists the limits which the C standard requires to be no lower than some minimum, and all the others we are aware of. We intend there to be as few limits as possible. If you encounter an undocumented or inconvenient limit, *************** File: cpp.info, Node: Obsolete Features *** 3475,3483 **** Obsolete Features ================= ! CPP has a number of features which are present mainly for ! compatibility with older programs. We discourage their use in new code. ! In some cases, we plan to remove the feature in a future version of GCC. * Menu: --- 3475,3483 ---- Obsolete Features ================= ! CPP has a number of features which are present mainly for compatibility ! with older programs. We discourage their use in new code. In some ! cases, we plan to remove the feature in a future version of GCC. * Menu: *************** File: cpp.info, Node: Assertions, Next *** 3490,3496 **** Assertions ---------- ! "Assertions" are a deprecated alternative to macros in writing conditionals to test what sort of computer or system the compiled program will run on. Assertions are usually predefined, but you can define them with preprocessing directives or command-line options. --- 3490,3496 ---- Assertions ---------- ! "Assertions" are a deprecated alternative to macros in writing conditionals to test what sort of computer or system the compiled program will run on. Assertions are usually predefined, but you can define them with preprocessing directives or command-line options. *************** File: cpp.info, Node: Obsolete once-onl *** 3556,3562 **** Obsolete once-only headers -------------------------- ! CPP supports two more ways of indicating that a header file should be read only once. Neither one is as portable as a wrapper `#ifndef', and we recommend you do not use them in new programs. --- 3556,3562 ---- Obsolete once-only headers -------------------------- ! CPP supports two more ways of indicating that a header file should be read only once. Neither one is as portable as a wrapper `#ifndef', and we recommend you do not use them in new programs. *************** File: cpp.info, Node: Differences from *** 3594,3602 **** Differences from previous versions ================================== ! This section details behavior which has changed from previous ! versions of CPP. We do not plan to change it again in the near future, ! but we do not promise not to, either. The "previous versions" discussed here are 2.95 and before. The behavior of GCC 3.0 is mostly the same as the behavior of the widely --- 3594,3602 ---- Differences from previous versions ================================== ! This section details behavior which has changed from previous versions ! of CPP. We do not plan to change it again in the near future, but we ! do not promise not to, either. The "previous versions" discussed here are 2.95 and before. The behavior of GCC 3.0 is mostly the same as the behavior of the widely *************** File: cpp.info, Node: Invocation, Next *** 3681,3692 **** Invocation ********** ! Most often when you use the C preprocessor you will not have to ! invoke it explicitly: the C compiler will do so automatically. ! However, the preprocessor is sometimes useful on its own. All the ! options listed here are also acceptable to the C compiler and have the ! same meaning, except that the C compiler has different rules for ! specifying the output file. *Note:* Whether you use the preprocessor by way of `gcc' or `cpp', the "compiler driver" is run first. This program's purpose is to --- 3681,3692 ---- Invocation ********** ! Most often when you use the C preprocessor you will not have to invoke ! it explicitly: the C compiler will do so automatically. However, the ! preprocessor is sometimes useful on its own. All the options listed ! here are also acceptable to the C compiler and have the same meaning, ! except that the C compiler has different rules for specifying the output ! file. *Note:* Whether you use the preprocessor by way of `gcc' or `cpp', the "compiler driver" is run first. This program's purpose is to *************** File: cpp.info, Node: Environment Varia *** 4209,4215 **** Environment Variables ********************* ! This section describes the environment variables that affect how CPP operates. You can use them to specify directories or prefixes to use when searching for include files, or to control dependency output. --- 4209,4215 ---- Environment Variables ********************* ! This section describes the environment variables that affect how CPP operates. You can use them to specify directories or prefixes to use when searching for include files, or to control dependency output. *************** GNU Free Documentation License *** 4672,4678 **** ADDENDUM: How to use this License for your documents ==================================================== ! To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: --- 4672,4678 ---- ADDENDUM: How to use this License for your documents ==================================================== ! To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: *************** Concept Index *** 4926,5000 ****  Tag Table: ! Node: Top1016 ! Node: Overview2808 ! Node: Initial processing6434 ! Ref: trigraphs8552 ! Node: Tokenization12658 ! Ref: Tokenization-Footnote-119707 ! Node: The preprocessing language19818 ! Node: Header Files22691 ! Node: Include Syntax24569 ! Node: Include Operation26071 ! Node: Search Path27924 ! Node: Once-Only Headers31001 ! Node: Computed Includes32651 ! Node: Wrapper Headers35790 ! Node: System Headers38209 ! Node: Macros40254 ! Node: Object-like Macros41392 ! Node: Function-like Macros44978 ! Node: Macro Arguments46588 ! Node: Stringification50733 ! Node: Concatenation53934 ! Node: Variadic Macros57048 ! Node: Predefined Macros61830 ! Node: Standard Predefined Macros62413 ! Node: Common Predefined Macros68319 ! Node: System-specific Predefined Macros76155 ! Node: C++ Named Operators78167 ! Node: Undefining and Redefining Macros79122 ! Node: Directives Within Macro Arguments81219 ! Node: Macro Pitfalls82762 ! Node: Misnesting83288 ! Node: Operator Precedence Problems84389 ! Node: Swallowing the Semicolon86244 ! Node: Duplication of Side Effects88256 ! Node: Self-Referential Macros90428 ! Node: Argument Prescan92838 ! Node: Newlines in Arguments96581 ! Node: Conditionals97526 ! Node: Conditional Uses99355 ! Node: Conditional Syntax100708 ! Node: Ifdef101023 ! Node: If104185 ! Node: Defined106598 ! Node: Else107871 ! Node: Elif108432 ! Node: Deleted Code109712 ! Node: Diagnostics110954 ! Node: Line Control112571 ! Node: Pragmas116374 ! Node: Other Directives120642 ! Node: Preprocessor Output121834 ! Node: Traditional Mode125034 ! Node: Traditional lexical analysis126089 ! Node: Traditional macros128585 ! Node: Traditional miscellany132379 ! Node: Traditional warnings133369 ! Node: Implementation Details135559 ! Node: Implementation-defined behavior136177 ! Node: Implementation limits138851 ! Node: Obsolete Features141542 ! Node: Assertions141989 ! Node: Obsolete once-only headers144519 ! Node: Differences from previous versions146243 ! Node: Invocation150315 ! Ref: -MF158911 ! Node: Environment Variables171572 ! Node: GNU Free Documentation License174525 ! Node: Index of Directives196955 ! Node: Option Index198335 ! Node: Concept Index202086  End Tag Table --- 4926,5000 ----  Tag Table: ! Node: Top1043 ! Node: Overview3663 ! Node: Initial processing6461 ! Ref: trigraphs8576 ! Node: Tokenization12682 ! Ref: Tokenization-Footnote-119728 ! Node: The preprocessing language19839 ! Node: Header Files22709 ! Node: Include Syntax24585 ! Node: Include Operation26084 ! Node: Search Path27934 ! Node: Once-Only Headers31008 ! Node: Computed Includes32655 ! Node: Wrapper Headers35791 ! Node: System Headers38207 ! Node: Macros40249 ! Node: Object-like Macros41386 ! Node: Function-like Macros44969 ! Node: Macro Arguments46577 ! Node: Stringification50719 ! Node: Concatenation53917 ! Node: Variadic Macros57027 ! Node: Predefined Macros61806 ! Node: Standard Predefined Macros62386 ! Node: Common Predefined Macros68290 ! Node: System-specific Predefined Macros76122 ! Node: C++ Named Operators78131 ! Node: Undefining and Redefining Macros79083 ! Node: Directives Within Macro Arguments81177 ! Node: Macro Pitfalls82717 ! Node: Misnesting83240 ! Node: Operator Precedence Problems84338 ! Node: Swallowing the Semicolon86190 ! Node: Duplication of Side Effects88199 ! Node: Self-Referential Macros90368 ! Node: Argument Prescan92774 ! Node: Newlines in Arguments96514 ! Node: Conditionals97456 ! Node: Conditional Uses99282 ! Node: Conditional Syntax100632 ! Node: Ifdef100944 ! Node: If104103 ! Node: Defined106513 ! Node: Else107784 ! Node: Elif108342 ! Node: Deleted Code109619 ! Node: Diagnostics110858 ! Node: Line Control112471 ! Node: Pragmas116271 ! Node: Other Directives120537 ! Node: Preprocessor Output121726 ! Node: Traditional Mode124923 ! Node: Traditional lexical analysis125975 ! Node: Traditional macros128468 ! Node: Traditional miscellany132259 ! Node: Traditional warnings133246 ! Node: Implementation Details135433 ! Node: Implementation-defined behavior136048 ! Node: Implementation limits138719 ! Node: Obsolete Features141407 ! Node: Assertions141852 ! Node: Obsolete once-only headers144379 ! Node: Differences from previous versions146100 ! Node: Invocation150169 ! Ref: -MF158763 ! Node: Environment Variables171424 ! Node: GNU Free Documentation License174374 ! Node: Index of Directives196801 ! Node: Option Index198181 ! Node: Concept Index201932  End Tag Table diff -Nrc3pad gcc-3.3.2/gcc/doc/cpp.texi gcc-3.3.3/gcc/doc/cpp.texi *** gcc-3.3.2/gcc/doc/cpp.texi Sat Jul 19 15:15:06 2003 --- gcc-3.3.3/gcc/doc/cpp.texi Fri Jan 2 12:21:49 2004 *************** *** 9,15 **** @copying @c man begin COPYRIGHT Copyright @copyright{} 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996, ! 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document --- 9,15 ---- @copying @c man begin COPYRIGHT Copyright @copyright{} 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996, ! 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document *************** runtime is used, this macro is not defin *** 2041,2047 **** macro to determine which runtime (NeXT or GNU) is being used. @item __LP64__ ! @item _LP64 These macros are defined, with value 1, if (and only if) the compilation is for a target where @code{long int} and pointer both use 64-bits and @code{int} uses 32-bit. --- 2041,2047 ---- macro to determine which runtime (NeXT or GNU) is being used. @item __LP64__ ! @itemx _LP64 These macros are defined, with value 1, if (and only if) the compilation is for a target where @code{long int} and pointer both use 64-bits and @code{int} uses 32-bit. diff -Nrc3pad gcc-3.3.2/gcc/doc/cppinternals.info gcc-3.3.3/gcc/doc/cppinternals.info *** gcc-3.3.2/gcc/doc/cppinternals.info Thu Oct 16 20:24:03 2003 --- gcc-3.3.3/gcc/doc/cppinternals.info Sat Feb 14 20:38:10 2004 *************** *** 1,5 **** ! This is doc/cppinternals.info, produced by makeinfo version 4.2 from ! doc/cppinternals.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY --- 1,5 ---- ! Ceci est le fichier Info doc/cppinternals.info, produit par Makeinfo ! version 4.6 à partir doc/cppinternals.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY *************** File: cppinternals.info, Node: Top, Ne *** 31,38 **** Cpplib--the GNU C Preprocessor ****************************** ! The GNU C preprocessor in GCC 3.x has been completely rewritten. It ! is now implemented as a library, "cpplib", so it can be easily shared between a stand-alone preprocessor, and a preprocessor integrated with the C, C++ and Objective-C front ends. It is also available for use by other programs, though this is not recommended as its exposed interface --- 31,38 ---- Cpplib--the GNU C Preprocessor ****************************** ! The GNU C preprocessor in GCC 3.x has been completely rewritten. It is ! now implemented as a library, "cpplib", so it can be easily shared between a stand-alone preprocessor, and a preprocessor integrated with the C, C++ and Objective-C front ends. It is also available for use by other programs, though this is not recommended as its exposed interface *************** File: cppinternals.info, Node: Conventi *** 68,74 **** Conventions *********** ! cpplib has two interfaces--one is exposed internally only, and the other is for both internal and external use. The convention is that functions and types that are exposed to --- 68,74 ---- Conventions *********** ! cpplib has two interfaces--one is exposed internally only, and the other is for both internal and external use. The convention is that functions and types that are exposed to *************** The Lexer *** 94,100 **** Overview ======== ! The lexer is contained in the file `cpplex.c'. It is a hand-coded lexer, and not implemented as a state machine. It can understand C, C++ and Objective-C source code, and has been extended to allow reasonably successful preprocessing of assembly language. The lexer does not make --- 94,100 ---- Overview ======== ! The lexer is contained in the file `cpplex.c'. It is a hand-coded lexer, and not implemented as a state machine. It can understand C, C++ and Objective-C source code, and has been extended to allow reasonably successful preprocessing of assembly language. The lexer does not make *************** generating diagnostics, and for emitting *** 113,122 **** Lexing a token ============== ! Lexing of an individual token is handled by `_cpp_lex_direct' and ! its subroutines. In its current form the code is quite complicated, ! with read ahead characters and such-like, since it strives to not step ! back in the character stream in preparation for handling non-ASCII file encodings. The current plan is to convert any such files to UTF-8 before processing them. This complexity is therefore unnecessary and will be removed, so I'll not discuss it further here. --- 113,122 ---- Lexing a token ============== ! Lexing of an individual token is handled by `_cpp_lex_direct' and its ! subroutines. In its current form the code is quite complicated, with ! read ahead characters and such-like, since it strives to not step back ! in the character stream in preparation for handling non-ASCII file encodings. The current plan is to convert any such files to UTF-8 before processing them. This complexity is therefore unnecessary and will be removed, so I'll not discuss it further here. *************** program calls cpp_destroy, probably at t *** 277,283 **** Lexing a line ============= ! When the preprocessor was changed to return pointers to tokens, one feature I wanted was some sort of guarantee regarding how long a returned pointer remains valid. This is important to the stand-alone preprocessor, the future direction of the C family front ends, and even --- 277,283 ---- Lexing a line ============= ! When the preprocessor was changed to return pointers to tokens, one feature I wanted was some sort of guarantee regarding how long a returned pointer remains valid. This is important to the stand-alone preprocessor, the future direction of the C family front ends, and even *************** File: cppinternals.info, Node: Hash Nod *** 365,376 **** Hash Nodes ********** ! When cpplib encounters an "identifier", it generates a hash code for ! it and stores it in the hash table. By "identifier" we mean tokens ! with type `CPP_NAME'; this includes identifiers in the usual C sense, ! as well as keywords, directive names, macro names and so on. For ! example, all of `pragma', `int', `foo' and `__GNUC__' are identifiers ! and hashed when lexed. Each node in the hash table contain various information about the identifier it represents. For example, its length and type. At any one --- 365,376 ---- Hash Nodes ********** ! When cpplib encounters an "identifier", it generates a hash code for it ! and stores it in the hash table. By "identifier" we mean tokens with ! type `CPP_NAME'; this includes identifiers in the usual C sense, as ! well as keywords, directive names, macro names and so on. For example, ! all of `pragma', `int', `foo' and `__GNUC__' are identifiers and hashed ! when lexed. Each node in the hash table contain various information about the identifier it represents. For example, its length and type. At any one *************** File: cppinternals.info, Node: Macro Ex *** 426,435 **** Macro Expansion Algorithm ************************* ! Macro expansion is a tricky operation, fraught with nasty corner ! cases and situations that render what you thought was a nifty way to ! optimize the preprocessor's expansion algorithm wrong in quite subtle ! ways. I strongly recommend you have a good grasp of how the C and C++ standards require macros to be expanded before diving into this --- 426,434 ---- Macro Expansion Algorithm ************************* ! Macro expansion is a tricky operation, fraught with nasty corner cases ! and situations that render what you thought was a nifty way to optimize ! the preprocessor's expansion algorithm wrong in quite subtle ways. I strongly recommend you have a good grasp of how the C and C++ standards require macros to be expanded before diving into this *************** pasting are supposed to work, damage to *** 440,447 **** Internal representation of macros ================================= ! The preprocessor stores macro expansions in tokenized form. This ! saves repeated lexing passes during expansion, at the cost of a small increase in memory consumption on average. The tokens are stored contiguously in memory, so a pointer to the first one and a token count is all you need to get the replacement list of a macro. --- 439,446 ---- Internal representation of macros ================================= ! The preprocessor stores macro expansions in tokenized form. This saves ! repeated lexing passes during expansion, at the cost of a small increase in memory consumption on average. The tokens are stored contiguously in memory, so a pointer to the first one and a token count is all you need to get the replacement list of a macro. *************** changed. *** 461,469 **** Macro expansion overview ======================== ! The preprocessor maintains a "context stack", implemented as a ! linked list of `cpp_context' structures, which together represent the ! macro expansion state at any one time. The `struct cpp_reader' member variable `context' points to the current top of this stack. The top normally holds the unexpanded replacement list of the innermost macro under expansion, except when cpplib is about to pre-expand an argument, --- 460,468 ---- Macro expansion overview ======================== ! The preprocessor maintains a "context stack", implemented as a linked ! list of `cpp_context' structures, which together represent the macro ! expansion state at any one time. The `struct cpp_reader' member variable `context' points to the current top of this stack. The top normally holds the unexpanded replacement list of the innermost macro under expansion, except when cpplib is about to pre-expand an argument, *************** being expanded. *** 506,512 **** Scanning the replacement list for macros to expand ================================================== ! The C standard states that, after any parameters have been replaced with their possibly-expanded arguments, the replacement list is scanned for nested macros. Further, any identifiers in the replacement list that are not expanded during this scan are never again eligible for --- 505,511 ---- Scanning the replacement list for macros to expand ================================================== ! The C standard states that, after any parameters have been replaced with their possibly-expanded arguments, the replacement list is scanned for nested macros. Further, any identifiers in the replacement list that are not expanded during this scan are never again eligible for *************** it a second time. *** 556,562 **** Looking for a function-like macro's opening parenthesis ======================================================= ! Function-like macros only expand when immediately followed by a parenthesis. To do this cpplib needs to temporarily disable macros and read the next token. Unfortunately, because of spacing issues (*note Token Spacing::), there can be fake padding tokens in-between, and if --- 555,561 ---- Looking for a function-like macro's opening parenthesis ======================================================= ! Function-like macros only expand when immediately followed by a parenthesis. To do this cpplib needs to temporarily disable macros and read the next token. Unfortunately, because of spacing issues (*note Token Spacing::), there can be fake padding tokens in-between, and if *************** context just containing the padding info *** 576,582 **** Marking tokens ineligible for future expansion ============================================== ! As discussed above, cpplib needs a way of marking tokens as unexpandable. Since the tokens cpplib handles are read-only once they have been lexed, it instead makes a copy of the token and adds the flag `NO_EXPAND' to the copy. --- 575,581 ---- Marking tokens ineligible for future expansion ============================================== ! As discussed above, cpplib needs a way of marking tokens as unexpandable. Since the tokens cpplib handles are read-only once they have been lexed, it instead makes a copy of the token and adds the flag `NO_EXPAND' to the copy. *************** File: cppinternals.info, Node: Token Sp *** 599,605 **** Token Spacing ************* ! First, let's look at an issue that only concerns the stand-alone preprocessor: we want to guarantee that re-reading its preprocessed output results in an identical token stream. Without taking special measures, this might not be the case because of macro substitution. --- 598,604 ---- Token Spacing ************* ! First, let's look at an issue that only concerns the stand-alone preprocessor: we want to guarantee that re-reading its preprocessed output results in an identical token stream. Without taking special measures, this might not be the case because of macro substitution. *************** Line numbering *** 730,737 **** Just which line number anyway? ============================== ! There are three reasonable requirements a cpplib client might have ! for the line number of a token passed to it: * The source line it was lexed on. --- 729,736 ---- Just which line number anyway? ============================== ! There are three reasonable requirements a cpplib client might have for ! the line number of a token passed to it: * The source line it was lexed on. *************** produce correct output. *** 786,795 **** Representation of line numbers ============================== ! As mentioned above, cpplib stores with each token the line number ! that it was lexed on. In fact, this number is not the number of the ! line in the source file, but instead bears more resemblance to the ! number of the line in the translation unit. The preprocessor maintains a monotonic increasing line count, which is incremented at every new line character (and also at the end of any --- 785,794 ---- Representation of line numbers ============================== ! As mentioned above, cpplib stores with each token the line number that ! it was lexed on. In fact, this number is not the number of the line in ! the source file, but instead bears more resemblance to the number of the ! line in the translation unit. The preprocessor maintains a monotonic increasing line count, which is incremented at every new line character (and also at the end of any *************** File: cppinternals.info, Node: Guard Ma *** 817,823 **** The Multiple-Include Optimization ********************************* ! Header files are often of the form #ifndef FOO #define FOO --- 816,822 ---- The Multiple-Include Optimization ********************************* ! Header files are often of the form #ifndef FOO #define FOO *************** File: cppinternals.info, Node: Files, *** 923,932 **** File Handling ************* ! Fairly obviously, the file handling code of cpplib resides in the ! file `cppfiles.c'. It takes care of the details of file searching, ! opening, reading and caching, for both the main source file and all the ! headers it recursively includes. The basic strategy is to minimize the number of system calls. On many systems, the basic `open ()' and `fstat ()' system calls can be --- 922,931 ---- File Handling ************* ! Fairly obviously, the file handling code of cpplib resides in the file ! `cppfiles.c'. It takes care of the details of file searching, opening, ! reading and caching, for both the main source file and all the headers ! it recursively includes. The basic strategy is to minimize the number of system calls. On many systems, the basic `open ()' and `fstat ()' system calls can be *************** Index *** 1018,1034 ****  Tag Table: ! Node: Top910 ! Node: Conventions2579 ! Node: Lexer3523 ! Ref: Invalid identifiers11446 ! Ref: Lexing a line13395 ! Node: Hash Nodes18168 ! Node: Macro Expansion21050 ! Node: Token Spacing30015 ! Node: Line Numbering35897 ! Node: Guard Macros39988 ! Node: Files44786 ! Node: Index48250  End Tag Table --- 1017,1033 ----  Tag Table: ! Node: Top931 ! Node: Conventions2597 ! Node: Lexer3538 ! Ref: Invalid identifiers11455 ! Ref: Lexing a line13404 ! Node: Hash Nodes18174 ! Node: Macro Expansion21053 ! Node: Token Spacing30000 ! Node: Line Numbering35879 ! Node: Guard Macros39964 ! Node: Files44759 ! Node: Index48220  End Tag Table diff -Nrc3pad gcc-3.3.2/gcc/doc/extend.texi gcc-3.3.3/gcc/doc/extend.texi *** gcc-3.3.2/gcc/doc/extend.texi Sat Oct 4 11:08:27 2003 --- gcc-3.3.3/gcc/doc/extend.texi Fri Feb 6 19:43:32 2004 *************** Currently, the attribute is ignored for *** 2554,2560 **** attribute is applied to a symbol @emph{definition}, an error is reported. If a symbol previously declared @code{dllimport} is later defined, the attribute is ignored in subsequent references, and a warning is emitted. ! The attribute is also overriden by a subsequent declaration as @code{dllexport}. When applied to C++ classes, the attribute marks non-inlined --- 2554,2560 ---- attribute is applied to a symbol @emph{definition}, an error is reported. If a symbol previously declared @code{dllimport} is later defined, the attribute is ignored in subsequent references, and a warning is emitted. ! The attribute is also overridden by a subsequent declaration as @code{dllexport}. When applied to C++ classes, the attribute marks non-inlined *************** the single copy in the library. *** 3666,3672 **** Since GCC eventually will implement ISO C99 semantics for inline functions, it is best to use @code{static inline} only ! to guarentee compatibility. (The existing semantics will remain available when @option{-std=gnu89} is specified, but eventually the default will be @option{-std=gnu99} and that will implement the C99 semantics, though it does not do so yet.) --- 3666,3672 ---- Since GCC eventually will implement ISO C99 semantics for inline functions, it is best to use @code{static inline} only ! to guarantee compatibility. (The existing semantics will remain available when @option{-std=gnu89} is specified, but eventually the default will be @option{-std=gnu99} and that will implement the C99 semantics, though it does not do so yet.) *************** represents the condition codes as a spec *** 3844,3856 **** condition code is handled differently, and specifying @samp{cc} has no effect. But it is valid no matter what the machine. ! If your assembler instruction modifies memory in an unpredictable fashion, add @samp{memory} to the list of clobbered registers. This ! will cause GCC to not keep memory values cached in registers across ! the assembler instruction. You will also want to add the ! @code{volatile} keyword if the memory affected is not listed in the ! inputs or outputs of the @code{asm}, as the @samp{memory} clobber does ! not count as a side-effect of the @code{asm}. You can put multiple assembler instructions together in a single @code{asm} template, separated by the characters normally used in assembly --- 3844,3878 ---- condition code is handled differently, and specifying @samp{cc} has no effect. But it is valid no matter what the machine. ! If your assembler instructions access memory in an unpredictable fashion, add @samp{memory} to the list of clobbered registers. This ! will cause GCC to not keep memory values cached in registers across the ! assembler instruction and not optimize stores or loads to that memory. ! You will also want to add the @code{volatile} keyword if the memory ! affected is not listed in the inputs or outputs of the @code{asm}, as ! the @samp{memory} clobber does not count as a side-effect of the ! @code{asm}. If you know how large the accessed memory is, you can add ! it as input or output but if this is not known, you should add ! @samp{memory}. As an example, if you access ten bytes of a string, you ! can use a memory input like: ! ! @example ! @{"m"( (@{ struct @{ char x[10]; @} *p = (void *)ptr ; *p; @}) )@}. ! @end example ! ! Note that in the following example the memory input is necessary, ! otherwise GCC might optimize the store to @code{x} away: ! @example ! int foo () ! @{ ! int x = 42; ! int *y = &x; ! int result; ! asm ("magic stuff accessing an 'int' pointed to by '%1'" ! "=&d" (r) : "a" (y), "m" (*y)); ! return result; ! @} ! @end example You can put multiple assembler instructions together in a single @code{asm} template, separated by the characters normally used in assembly *************** Generates the @code{movhps} machine inst *** 5315,5320 **** --- 5337,5367 ---- Generates the @code{movlps} machine instruction as a store to memory. @end table + The following built-in functions are available when @option{-msse3} is used. + All of them generate the machine instruction that is part of the name. + + @example + v2df __builtin_ia32_addsubpd (v2df, v2df) + v2df __builtin_ia32_addsubps (v2df, v2df) + v2df __builtin_ia32_haddpd (v2df, v2df) + v2df __builtin_ia32_haddps (v2df, v2df) + v2df __builtin_ia32_hsubpd (v2df, v2df) + v2df __builtin_ia32_hsubps (v2df, v2df) + v16qi __builtin_ia32_lddqu (char const *) + void __builtin_ia32_monitor (void *, unsigned int, unsigned int) + v2df __builtin_ia32_movddup (v2df) + v4sf __builtin_ia32_movshdup (v4sf) + v4sf __builtin_ia32_movsldup (v4sf) + void __builtin_ia32_mwait (unsigned int, unsigned int) + @end example + + The following built-in functions are available when @option{-msse3} is used. + + @table @code + @item v2df __builtin_ia32_loadddup (double const *) + Generates the @code{movddup} machine instruction as a load from memory. + @end table + The following built-in functions are available when @option{-m3dnow} is used. All of them generate the machine instruction that is part of the name. diff -Nrc3pad gcc-3.3.2/gcc/doc/fsf-funding.7 gcc-3.3.3/gcc/doc/fsf-funding.7 *** gcc-3.3.2/gcc/doc/fsf-funding.7 Thu Oct 16 20:24:20 2003 --- gcc-3.3.3/gcc/doc/fsf-funding.7 Sat Feb 14 20:38:15 2004 *************** *** 1,7 **** ! .\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13 .\" .\" Standard preamble: ! .\" ======================================================================== .de Sh \" Subsection heading .br .if t .Sp --- 1,8 ---- ! .\" Automatically generated by Pod::Man version 1.15 ! .\" Sat Feb 14 20:38:15 2004 .\" .\" Standard preamble: ! .\" ====================================================================== .de Sh \" Subsection heading .br .if t .Sp *************** *** 14,19 **** --- 15,26 ---- .if t .sp .5v .if n .sp .. + .de Ip \" List item + .br + .ie \\n(.$>=3 .ne \\$3 + .el .ne 3 + .IP "\\$1" \\$2 + .. .de Vb \" Begin verbatim text .ft CW .nf *************** *** 21,34 **** .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. | will give a ! .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to ! .\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' ! .\" expand to `' in nroff, nothing in troff, for use with C<>. .tr \(*W-|\(bv\*(Tr .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ --- 28,42 ---- .. .de Ve \" End verbatim text .ft R + .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. | will give a ! .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used ! .\" to do unbreakable dashes and therefore won't be available. \*(C` and ! .\" \*(C' expand to `' in nroff, nothing in troff, for use with C<> .tr \(*W-|\(bv\*(Tr .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ *************** *** 48,57 **** . ds R" '' 'br\} .\" ! .\" If the F register is turned on, we'll generate index entries on stderr for ! .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index ! .\" entries marked with X<> in POD. Of course, you'll have to process the ! .\" output yourself in some meaningful fashion. .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" --- 56,65 ---- . ds R" '' 'br\} .\" ! .\" If the F register is turned on, we'll generate index entries on stderr ! .\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and ! .\" index entries marked with X<> in POD. Of course, you'll have to process ! .\" the output yourself in some meaningful fashion. .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" *************** *** 60,72 **** . rr F .\} .\" ! .\" For nroff, turn off justification. Always turn off hyphenation; it makes ! .\" way too many mistakes in technical documents. .hy 0 .if n .na .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 --- 68,81 ---- . rr F .\} .\" ! .\" For nroff, turn off justification. Always turn off hyphenation; it ! .\" makes way too many mistakes in technical documents. .hy 0 .if n .na .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. + .bd B 3 . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 *************** *** 126,137 **** . ds Ae AE .\} .rm #[ #] #H #V #F C ! .\" ======================================================================== .\" ! .IX Title "FSF-FUNDING 7" ! .TH FSF-FUNDING 7 "2003-10-16" "gcc-3.3.2" "GNU" .SH "NAME" ! fsf\-funding \- Funding Free Software .SH "DESCRIPTION" .IX Header "DESCRIPTION" .Sh "Funding Free Software" --- 135,147 ---- . ds Ae AE .\} .rm #[ #] #H #V #F C ! .\" ====================================================================== .\" ! .IX Title "fsf-funding 7" ! .TH fsf-funding 7 "gcc-3.3.3" "2004-02-14" "GNU" ! .UC .SH "NAME" ! fsf-funding \- Funding Free Software .SH "DESCRIPTION" .IX Header "DESCRIPTION" .Sh "Funding Free Software" diff -Nrc3pad gcc-3.3.2/gcc/doc/gcc.1 gcc-3.3.3/gcc/doc/gcc.1 *** gcc-3.3.2/gcc/doc/gcc.1 Thu Oct 16 20:24:18 2003 --- gcc-3.3.3/gcc/doc/gcc.1 Sat Feb 14 20:38:14 2004 *************** *** 1,7 **** ! .\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13 .\" .\" Standard preamble: ! .\" ======================================================================== .de Sh \" Subsection heading .br .if t .Sp --- 1,8 ---- ! .\" Automatically generated by Pod::Man version 1.15 ! .\" Sat Feb 14 20:38:11 2004 .\" .\" Standard preamble: ! .\" ====================================================================== .de Sh \" Subsection heading .br .if t .Sp *************** *** 14,19 **** --- 15,26 ---- .if t .sp .5v .if n .sp .. + .de Ip \" List item + .br + .ie \\n(.$>=3 .ne \\$3 + .el .ne 3 + .IP "\\$1" \\$2 + .. .de Vb \" Begin verbatim text .ft CW .nf *************** *** 21,34 **** .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. | will give a ! .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to ! .\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' ! .\" expand to `' in nroff, nothing in troff, for use with C<>. .tr \(*W-|\(bv\*(Tr .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ --- 28,42 ---- .. .de Ve \" End verbatim text .ft R + .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. | will give a ! .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used ! .\" to do unbreakable dashes and therefore won't be available. \*(C` and ! .\" \*(C' expand to `' in nroff, nothing in troff, for use with C<> .tr \(*W-|\(bv\*(Tr .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ *************** *** 48,57 **** . ds R" '' 'br\} .\" ! .\" If the F register is turned on, we'll generate index entries on stderr for ! .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index ! .\" entries marked with X<> in POD. Of course, you'll have to process the ! .\" output yourself in some meaningful fashion. .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" --- 56,65 ---- . ds R" '' 'br\} .\" ! .\" If the F register is turned on, we'll generate index entries on stderr ! .\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and ! .\" index entries marked with X<> in POD. Of course, you'll have to process ! .\" the output yourself in some meaningful fashion. .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" *************** *** 60,72 **** . rr F .\} .\" ! .\" For nroff, turn off justification. Always turn off hyphenation; it makes ! .\" way too many mistakes in technical documents. .hy 0 .if n .na .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 --- 68,81 ---- . rr F .\} .\" ! .\" For nroff, turn off justification. Always turn off hyphenation; it ! .\" makes way too many mistakes in technical documents. .hy 0 .if n .na .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. + .bd B 3 . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 *************** *** 126,137 **** . ds Ae AE .\} .rm #[ #] #H #V #F C ! .\" ======================================================================== .\" .IX Title "GCC 1" ! .TH GCC 1 "2003-10-16" "gcc-3.3.2" "GNU" .SH "NAME" ! gcc \- GNU project C and C++ compiler .SH "SYNOPSIS" .IX Header "SYNOPSIS" gcc [\fB\-c\fR|\fB\-S\fR|\fB\-E\fR] [\fB\-std=\fR\fIstandard\fR] --- 135,147 ---- . ds Ae AE .\} .rm #[ #] #H #V #F C ! .\" ====================================================================== .\" .IX Title "GCC 1" ! .TH GCC 1 "gcc-3.3.3" "2004-02-14" "GNU" ! .UC .SH "NAME" ! gcc \- \s-1GNU\s0 project C and \*(C+ compiler .SH "SYNOPSIS" .IX Header "SYNOPSIS" gcc [\fB\-c\fR|\fB\-S\fR|\fB\-E\fR] [\fB\-std=\fR\fIstandard\fR] *************** of the same kind; for example, if you sp *** 173,182 **** the directories are searched in the order specified. .PP Many options have long names starting with \fB\-f\fR or with ! \&\fB\-W\fR\-\-\-for example, \fB\-fforce\-mem\fR, ! \&\fB\-fstrength\-reduce\fR, \fB\-Wformat\fR and so on. Most of these have both positive and negative forms; the negative form of ! \&\fB\-ffoo\fR would be \fB\-fno\-foo\fR. This manual documents only one of these two forms, whichever one is not the default. .SH "OPTIONS" .IX Header "OPTIONS" --- 183,192 ---- the directories are searched in the order specified. .PP Many options have long names starting with \fB\-f\fR or with ! \&\fB\-W\fR\-\-\-for example, \fB\-fforce-mem\fR, ! \&\fB\-fstrength-reduce\fR, \fB\-Wformat\fR and so on. Most of these have both positive and negative forms; the negative form of ! \&\fB\-ffoo\fR would be \fB\-fno-foo\fR. This manual documents only one of these two forms, whichever one is not the default. .SH "OPTIONS" .IX Header "OPTIONS" *************** only one of these two forms, whichever o *** 184,317 **** .IX Subsection "Option Summary" Here is a summary of all the options, grouped by type. Explanations are in the following sections. ! .IP "\fIOverall Options\fR" 4 .IX Item "Overall Options" ! \&\fB\-c \-S \-E \-o\fR \fIfile\fR \fB\-pipe \-pass\-exit\-codes ! \&\-x\fR \fIlanguage\fR \fB\-v \-### \-\-help \-\-target\-help \-\-version\fR ! .IP "\fIC Language Options\fR" 4 .IX Item "C Language Options" ! \&\fB\-ansi \-std=\fR\fIstandard\fR \fB\-aux\-info\fR \fIfilename\fR ! \&\fB\-fno\-asm \-fno\-builtin \-fno\-builtin\-\fR\fIfunction\fR ! \&\fB\-fhosted \-ffreestanding \-fms\-extensions ! \&\-trigraphs \-no\-integrated\-cpp \-traditional \-traditional\-cpp ! \&\-fallow\-single\-precision \-fcond\-mismatch ! \&\-fsigned\-bitfields \-fsigned\-char ! \&\-funsigned\-bitfields \-funsigned\-char ! \&\-fwritable\-strings\fR ! .IP "\fI\*(C+ Language Options\fR" 4 .IX Item " Language Options" ! \&\fB\-fabi\-version=\fR\fIn\fR \fB\-fno\-access\-control \-fcheck\-new ! \&\-fconserve\-space \-fno\-const\-strings \-fdollars\-in\-identifiers ! \&\-fno\-elide\-constructors ! \&\-fno\-enforce\-eh\-specs \-fexternal\-templates ! \&\-falt\-external\-templates ! \&\-ffor\-scope \-fno\-for\-scope \-fno\-gnu\-keywords ! \&\-fno\-implicit\-templates ! \&\-fno\-implicit\-inline\-templates ! \&\-fno\-implement\-inlines \-fms\-extensions ! \&\-fno\-nonansi\-builtins \-fno\-operator\-names ! \&\-fno\-optional\-diags \-fpermissive ! \&\-frepo \-fno\-rtti \-fstats \-ftemplate\-depth\-\fR\fIn\fR ! \&\fB\-fuse\-cxa\-atexit \-fvtable\-gc \-fno\-weak \-nostdinc++ ! \&\-fno\-default\-inline \-Wabi \-Wctor\-dtor\-privacy ! \&\-Wnon\-virtual\-dtor \-Wreorder ! \&\-Weffc++ \-Wno\-deprecated ! \&\-Wno\-non\-template\-friend \-Wold\-style\-cast ! \&\-Woverloaded\-virtual \-Wno\-pmf\-conversions ! \&\-Wsign\-promo \-Wsynth\fR ! .IP "\fIObjective-C Language Options\fR" 4 .IX Item "Objective-C Language Options" ! \&\fB\-fconstant\-string\-class=\fR\fIclass-name\fR ! \&\fB\-fgnu\-runtime \-fnext\-runtime \-gen\-decls ! \&\-Wno\-protocol \-Wselector \-Wundeclared\-selector\fR ! .IP "\fILanguage Independent Options\fR" 4 .IX Item "Language Independent Options" ! \&\fB\-fmessage\-length=\fR\fIn\fR ! \&\fB\-fdiagnostics\-show\-location=\fR[\fBonce\fR|\fBevery-line\fR] ! .IP "\fIWarning Options\fR" 4 .IX Item "Warning Options" ! \&\fB\-fsyntax\-only \-pedantic \-pedantic\-errors ! \&\-w \-W \-Wall \-Waggregate\-return ! \&\-Wcast\-align \-Wcast\-qual \-Wchar\-subscripts \-Wcomment ! \&\-Wconversion \-Wno\-deprecated\-declarations ! \&\-Wdisabled\-optimization \-Wno\-div\-by\-zero \-Werror ! \&\-Wfloat\-equal \-Wformat \-Wformat=2 ! \&\-Wformat\-nonliteral \-Wformat\-security ! \&\-Wimplicit \-Wimplicit\-int ! \&\-Wimplicit\-function\-declaration ! \&\-Werror\-implicit\-function\-declaration ! \&\-Wimport \-Winline \-Wno\-endif\-labels ! \&\-Wlarger\-than\-\fR\fIlen\fR \fB\-Wlong\-long ! \&\-Wmain \-Wmissing\-braces ! \&\-Wmissing\-format\-attribute \-Wmissing\-noreturn ! \&\-Wno\-multichar \-Wno\-format\-extra\-args \-Wno\-format\-y2k ! \&\-Wno\-import \-Wnonnull \-Wpacked \-Wpadded ! \&\-Wparentheses \-Wpointer\-arith \-Wredundant\-decls ! \&\-Wreturn\-type \-Wsequence\-point \-Wshadow ! \&\-Wsign\-compare \-Wstrict\-aliasing ! \&\-Wswitch \-Wswitch\-default \-Wswitch\-enum ! \&\-Wsystem\-headers \-Wtrigraphs \-Wundef \-Wuninitialized ! \&\-Wunknown\-pragmas \-Wunreachable\-code ! \&\-Wunused \-Wunused\-function \-Wunused\-label \-Wunused\-parameter ! \&\-Wunused\-value \-Wunused\-variable \-Wwrite\-strings\fR ! .IP "\fIC\-only Warning Options\fR" 4 .IX Item "C-only Warning Options" ! \&\fB\-Wbad\-function\-cast \-Wmissing\-declarations ! \&\-Wmissing\-prototypes \-Wnested\-externs ! \&\-Wstrict\-prototypes \-Wtraditional\fR ! .IP "\fIDebugging Options\fR" 4 .IX Item "Debugging Options" \&\fB\-d\fR\fIletters\fR \fB\-dumpspecs \-dumpmachine \-dumpversion ! \&\-fdump\-unnumbered \-fdump\-translation\-unit\fR[\fB\-\fR\fIn\fR] ! \&\fB\-fdump\-class\-hierarchy\fR[\fB\-\fR\fIn\fR] ! \&\fB\-fdump\-tree\-original\fR[\fB\-\fR\fIn\fR] ! \&\fB\-fdump\-tree\-optimized\fR[\fB\-\fR\fIn\fR] ! \&\fB\-fdump\-tree\-inlined\fR[\fB\-\fR\fIn\fR] ! \&\fB\-feliminate\-dwarf2\-dups \-fmem\-report ! \&\-fprofile\-arcs \-frandom\-seed=\fR\fIn\fR ! \&\fB\-fsched\-verbose=\fR\fIn\fR \fB\-ftest\-coverage \-ftime\-report ! \&\-g \-g\fR\fIlevel\fR \fB\-gcoff \-gdwarf \-gdwarf\-1 \-gdwarf\-1+ \-gdwarf\-2 \&\-ggdb \-gstabs \-gstabs+ \-gvms \-gxcoff \-gxcoff+ ! \&\-p \-pg \-print\-file\-name=\fR\fIlibrary\fR \fB\-print\-libgcc\-file\-name ! \&\-print\-multi\-directory \-print\-multi\-lib ! \&\-print\-prog\-name=\fR\fIprogram\fR \fB\-print\-search\-dirs \-Q ! \&\-save\-temps \-time\fR ! .IP "\fIOptimization Options\fR" 4 .IX Item "Optimization Options" ! \&\fB\-falign\-functions=\fR\fIn\fR \fB\-falign\-jumps=\fR\fIn\fR ! \&\fB\-falign\-labels=\fR\fIn\fR \fB\-falign\-loops=\fR\fIn\fR ! \&\fB\-fbranch\-probabilities \-fcaller\-saves \-fcprop\-registers ! \&\-fcse\-follow\-jumps \-fcse\-skip\-blocks \-fdata\-sections ! \&\-fdelayed\-branch \-fdelete\-null\-pointer\-checks ! \&\-fexpensive\-optimizations \-ffast\-math \-ffloat\-store ! \&\-fforce\-addr \-fforce\-mem \-ffunction\-sections ! \&\-fgcse \-fgcse\-lm \-fgcse\-sm \-floop\-optimize \-fcrossjumping ! \&\-fif\-conversion \-fif\-conversion2 ! \&\-finline\-functions \-finline\-limit=\fR\fIn\fR \fB\-fkeep\-inline\-functions ! \&\-fkeep\-static\-consts \-fmerge\-constants \-fmerge\-all\-constants ! \&\-fmove\-all\-movables \-fnew\-ra \-fno\-branch\-count\-reg ! \&\-fno\-default\-inline \-fno\-defer\-pop ! \&\-fno\-function\-cse \-fno\-guess\-branch\-probability ! \&\-fno\-inline \-fno\-math\-errno \-fno\-peephole \-fno\-peephole2 ! \&\-funsafe\-math\-optimizations \-ffinite\-math\-only ! \&\-fno\-trapping\-math \-fno\-zero\-initialized\-in\-bss ! \&\-fomit\-frame\-pointer \-foptimize\-register\-move ! \&\-foptimize\-sibling\-calls \-fprefetch\-loop\-arrays ! \&\-freduce\-all\-givs \-fregmove \-frename\-registers ! \&\-freorder\-blocks \-freorder\-functions ! \&\-frerun\-cse\-after\-loop \-frerun\-loop\-opt ! \&\-fschedule\-insns \-fschedule\-insns2 ! \&\-fno\-sched\-interblock \-fno\-sched\-spec \-fsched\-spec\-load ! \&\-fsched\-spec\-load\-dangerous \-fsignaling\-nans ! \&\-fsingle\-precision\-constant \-fssa \-fssa\-ccp \-fssa\-dce ! \&\-fstrength\-reduce \-fstrict\-aliasing \-ftracer \-fthread\-jumps ! \&\-funroll\-all\-loops \-funroll\-loops \&\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR \&\fB\-O \-O0 \-O1 \-O2 \-O3 \-Os\fR ! .IP "\fIPreprocessor Options\fR" 4 .IX Item "Preprocessor Options" \&\fB\-$ \-A\fR\fIquestion\fR\fB=\fR\fIanswer\fR ! \&\fB\-A\-\fR\fIquestion\fR[\fB=\fR\fIanswer\fR] \&\fB\-C \-dD \-dI \-dM \-dN \&\-D\fR\fImacro\fR[\fB=\fR\fIdefn\fR] \fB\-E \-H \&\-idirafter\fR \fIdir\fR --- 194,327 ---- .IX Subsection "Option Summary" Here is a summary of all the options, grouped by type. Explanations are in the following sections. ! .Ip "\fIOverall Options\fR" 4 .IX Item "Overall Options" ! \&\fB\-c \-S \-E \-o\fR \fIfile\fR \fB\-pipe \-pass-exit-codes ! \&\-x\fR \fIlanguage\fR \fB\-v \-### \-\-help \-\-target-help \-\-version\fR ! .Ip "\fIC Language Options\fR" 4 .IX Item "C Language Options" ! \&\fB\-ansi \-std=\fR\fIstandard\fR \fB\-aux-info\fR \fIfilename\fR ! \&\fB\-fno-asm \-fno-builtin \-fno-builtin-\fR\fIfunction\fR ! \&\fB\-fhosted \-ffreestanding \-fms-extensions ! \&\-trigraphs \-no-integrated-cpp \-traditional \-traditional-cpp ! \&\-fallow-single-precision \-fcond-mismatch ! \&\-fsigned-bitfields \-fsigned-char ! \&\-funsigned-bitfields \-funsigned-char ! \&\-fwritable-strings\fR ! .Ip "\fI\*(C+ Language Options\fR" 4 .IX Item " Language Options" ! \&\fB\-fabi-version=\fR\fIn\fR \fB\-fno-access-control \-fcheck-new ! \&\-fconserve-space \-fno-const-strings \-fdollars-in-identifiers ! \&\-fno-elide-constructors ! \&\-fno-enforce-eh-specs \-fexternal-templates ! \&\-falt-external-templates ! \&\-ffor-scope \-fno-for-scope \-fno-gnu-keywords ! \&\-fno-implicit-templates ! \&\-fno-implicit-inline-templates ! \&\-fno-implement-inlines \-fms-extensions ! \&\-fno-nonansi-builtins \-fno-operator-names ! \&\-fno-optional-diags \-fpermissive ! \&\-frepo \-fno-rtti \-fstats \-ftemplate-depth-\fR\fIn\fR ! \&\fB\-fuse-cxa-atexit \-fvtable-gc \-fno-weak \-nostdinc++ ! \&\-fno-default-inline \-Wabi \-Wctor-dtor-privacy ! \&\-Wnon-virtual-dtor \-Wreorder ! \&\-Weffc++ \-Wno-deprecated ! \&\-Wno-non-template-friend \-Wold-style-cast ! \&\-Woverloaded-virtual \-Wno-pmf-conversions ! \&\-Wsign-promo \-Wsynth\fR ! .Ip "\fIObjective-C Language Options\fR" 4 .IX Item "Objective-C Language Options" ! \&\fB\-fconstant-string-class=\fR\fIclass-name\fR ! \&\fB\-fgnu-runtime \-fnext-runtime \-gen-decls ! \&\-Wno-protocol \-Wselector \-Wundeclared-selector\fR ! .Ip "\fILanguage Independent Options\fR" 4 .IX Item "Language Independent Options" ! \&\fB\-fmessage-length=\fR\fIn\fR ! \&\fB\-fdiagnostics-show-location=\fR[\fBonce\fR|\fBevery-line\fR] ! .Ip "\fIWarning Options\fR" 4 .IX Item "Warning Options" ! \&\fB\-fsyntax-only \-pedantic \-pedantic-errors ! \&\-w \-W \-Wall \-Waggregate-return ! \&\-Wcast-align \-Wcast-qual \-Wchar-subscripts \-Wcomment ! \&\-Wconversion \-Wno-deprecated-declarations ! \&\-Wdisabled-optimization \-Wno-div-by-zero \-Werror ! \&\-Wfloat-equal \-Wformat \-Wformat=2 ! \&\-Wformat-nonliteral \-Wformat-security ! \&\-Wimplicit \-Wimplicit-int ! \&\-Wimplicit-function-declaration ! \&\-Werror-implicit-function-declaration ! \&\-Wimport \-Winline \-Wno-endif-labels ! \&\-Wlarger-than-\fR\fIlen\fR \fB\-Wlong-long ! \&\-Wmain \-Wmissing-braces ! \&\-Wmissing-format-attribute \-Wmissing-noreturn ! \&\-Wno-multichar \-Wno-format-extra-args \-Wno-format-y2k ! \&\-Wno-import \-Wnonnull \-Wpacked \-Wpadded ! \&\-Wparentheses \-Wpointer-arith \-Wredundant-decls ! \&\-Wreturn-type \-Wsequence-point \-Wshadow ! \&\-Wsign-compare \-Wstrict-aliasing ! \&\-Wswitch \-Wswitch-default \-Wswitch-enum ! \&\-Wsystem-headers \-Wtrigraphs \-Wundef \-Wuninitialized ! \&\-Wunknown-pragmas \-Wunreachable-code ! \&\-Wunused \-Wunused-function \-Wunused-label \-Wunused-parameter ! \&\-Wunused-value \-Wunused-variable \-Wwrite-strings\fR ! .Ip "\fIC-only Warning Options\fR" 4 .IX Item "C-only Warning Options" ! \&\fB\-Wbad-function-cast \-Wmissing-declarations ! \&\-Wmissing-prototypes \-Wnested-externs ! \&\-Wstrict-prototypes \-Wtraditional\fR ! .Ip "\fIDebugging Options\fR" 4 .IX Item "Debugging Options" \&\fB\-d\fR\fIletters\fR \fB\-dumpspecs \-dumpmachine \-dumpversion ! \&\-fdump-unnumbered \-fdump-translation-unit\fR[\fB-\fR\fIn\fR] ! \&\fB\-fdump-class-hierarchy\fR[\fB-\fR\fIn\fR] ! \&\fB\-fdump-tree-original\fR[\fB-\fR\fIn\fR] ! \&\fB\-fdump-tree-optimized\fR[\fB-\fR\fIn\fR] ! \&\fB\-fdump-tree-inlined\fR[\fB-\fR\fIn\fR] ! \&\fB\-feliminate-dwarf2\-dups \-fmem-report ! \&\-fprofile-arcs \-frandom-seed=\fR\fIn\fR ! \&\fB\-fsched-verbose=\fR\fIn\fR \fB\-ftest-coverage \-ftime-report ! \&\-g \-g\fR\fIlevel\fR \fB\-gcoff \-gdwarf \-gdwarf-1 \-gdwarf-1+ \-gdwarf-2 \&\-ggdb \-gstabs \-gstabs+ \-gvms \-gxcoff \-gxcoff+ ! \&\-p \-pg \-print-file-name=\fR\fIlibrary\fR \fB\-print-libgcc-file-name ! \&\-print-multi-directory \-print-multi-lib ! \&\-print-prog-name=\fR\fIprogram\fR \fB\-print-search-dirs \-Q ! \&\-save-temps \-time\fR ! .Ip "\fIOptimization Options\fR" 4 .IX Item "Optimization Options" ! \&\fB\-falign-functions=\fR\fIn\fR \fB\-falign-jumps=\fR\fIn\fR ! \&\fB\-falign-labels=\fR\fIn\fR \fB\-falign-loops=\fR\fIn\fR ! \&\fB\-fbranch-probabilities \-fcaller-saves \-fcprop-registers ! \&\-fcse-follow-jumps \-fcse-skip-blocks \-fdata-sections ! \&\-fdelayed-branch \-fdelete-null-pointer-checks ! \&\-fexpensive-optimizations \-ffast-math \-ffloat-store ! \&\-fforce-addr \-fforce-mem \-ffunction-sections ! \&\-fgcse \-fgcse-lm \-fgcse-sm \-floop-optimize \-fcrossjumping ! \&\-fif-conversion \-fif-conversion2 ! \&\-finline-functions \-finline-limit=\fR\fIn\fR \fB\-fkeep-inline-functions ! \&\-fkeep-static-consts \-fmerge-constants \-fmerge-all-constants ! \&\-fmove-all-movables \-fnew-ra \-fno-branch-count-reg ! \&\-fno-default-inline \-fno-defer-pop ! \&\-fno-function-cse \-fno-guess-branch-probability ! \&\-fno-inline \-fno-math-errno \-fno-peephole \-fno-peephole2 ! \&\-funsafe-math-optimizations \-ffinite-math-only ! \&\-fno-trapping-math \-fno-zero-initialized-in-bss ! \&\-fomit-frame-pointer \-foptimize-register-move ! \&\-foptimize-sibling-calls \-fprefetch-loop-arrays ! \&\-freduce-all-givs \-fregmove \-frename-registers ! \&\-freorder-blocks \-freorder-functions ! \&\-frerun-cse-after-loop \-frerun-loop-opt ! \&\-fschedule-insns \-fschedule-insns2 ! \&\-fno-sched-interblock \-fno-sched-spec \-fsched-spec-load ! \&\-fsched-spec-load-dangerous \-fsignaling-nans ! \&\-fsingle-precision-constant \-fssa \-fssa-ccp \-fssa-dce ! \&\-fstrength-reduce \-fstrict-aliasing \-ftracer \-fthread-jumps ! \&\-funroll-all-loops \-funroll-loops \&\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR \&\fB\-O \-O0 \-O1 \-O2 \-O3 \-Os\fR ! .Ip "\fIPreprocessor Options\fR" 4 .IX Item "Preprocessor Options" \&\fB\-$ \-A\fR\fIquestion\fR\fB=\fR\fIanswer\fR ! \&\fB\-A-\fR\fIquestion\fR[\fB=\fR\fIanswer\fR] \&\fB\-C \-dD \-dI \-dM \-dN \&\-D\fR\fImacro\fR[\fB=\fR\fIdefn\fR] \fB\-E \-H \&\-idirafter\fR \fIdir\fR *************** in the following sections. *** 320,353 **** \&\fB\-iwithprefixbefore\fR \fIdir\fR \fB\-isystem\fR \fIdir\fR \&\fB\-M \-MM \-MF \-MG \-MP \-MQ \-MT \-nostdinc \-P \-remap \&\-trigraphs \-undef \-U\fR\fImacro\fR \fB\-Wp,\fR\fIoption\fR ! .IP "\fIAssembler Option\fR" 4 .IX Item "Assembler Option" \&\fB\-Wa,\fR\fIoption\fR ! .IP "\fILinker Options\fR" 4 .IX Item "Linker Options" \&\fIobject-file-name\fR \fB\-l\fR\fIlibrary\fR \&\fB\-nostartfiles \-nodefaultlibs \-nostdlib ! \&\-s \-static \-static\-libgcc \-shared \-shared\-libgcc \-symbolic \&\-Wl,\fR\fIoption\fR \fB\-Xlinker\fR \fIoption\fR \&\fB\-u\fR \fIsymbol\fR ! .IP "\fIDirectory Options\fR" 4 .IX Item "Directory Options" ! \&\fB\-B\fR\fIprefix\fR \fB\-I\fR\fIdir\fR \fB\-I\- \-L\fR\fIdir\fR \fB\-specs=\fR\fIfile\fR ! .IP "\fITarget Options\fR" 4 .IX Item "Target Options" \&\fB\-V\fR \fIversion\fR \fB\-b\fR \fImachine\fR ! .IP "\fIMachine Dependent Options\fR" 4 .IX Item "Machine Dependent Options" \&\fIM680x0 Options\fR \&\fB\-m68000 \-m68020 \-m68020\-40 \-m68020\-60 \-m68030 \-m68040 \&\-m68060 \-mcpu32 \-m5200 \-m68881 \-mbitfield \-mc68000 \-mc68020 ! \&\-mfpa \-mnobitfield \-mrtd \-mshort \-msoft\-float \-mpcrel ! \&\-malign\-int \-mstrict\-align\fR .Sp \&\fIM68hc1x Options\fR \&\fB\-m6811 \-m6812 \-m68hc11 \-m68hc12 \-m68hcs12 ! \&\-mauto\-incdec \-minmax \-mlong\-calls \-mshort ! \&\-msoft\-reg\-count=\fR\fIcount\fR .Sp \&\fI\s-1VAX\s0 Options\fR \&\fB\-mg \-mgnu \-munix\fR --- 330,363 ---- \&\fB\-iwithprefixbefore\fR \fIdir\fR \fB\-isystem\fR \fIdir\fR \&\fB\-M \-MM \-MF \-MG \-MP \-MQ \-MT \-nostdinc \-P \-remap \&\-trigraphs \-undef \-U\fR\fImacro\fR \fB\-Wp,\fR\fIoption\fR ! .Ip "\fIAssembler Option\fR" 4 .IX Item "Assembler Option" \&\fB\-Wa,\fR\fIoption\fR ! .Ip "\fILinker Options\fR" 4 .IX Item "Linker Options" \&\fIobject-file-name\fR \fB\-l\fR\fIlibrary\fR \&\fB\-nostartfiles \-nodefaultlibs \-nostdlib ! \&\-s \-static \-static-libgcc \-shared \-shared-libgcc \-symbolic \&\-Wl,\fR\fIoption\fR \fB\-Xlinker\fR \fIoption\fR \&\fB\-u\fR \fIsymbol\fR ! .Ip "\fIDirectory Options\fR" 4 .IX Item "Directory Options" ! \&\fB\-B\fR\fIprefix\fR \fB\-I\fR\fIdir\fR \fB\-I- \-L\fR\fIdir\fR \fB\-specs=\fR\fIfile\fR ! .Ip "\fITarget Options\fR" 4 .IX Item "Target Options" \&\fB\-V\fR \fIversion\fR \fB\-b\fR \fImachine\fR ! .Ip "\fIMachine Dependent Options\fR" 4 .IX Item "Machine Dependent Options" \&\fIM680x0 Options\fR \&\fB\-m68000 \-m68020 \-m68020\-40 \-m68020\-60 \-m68030 \-m68040 \&\-m68060 \-mcpu32 \-m5200 \-m68881 \-mbitfield \-mc68000 \-mc68020 ! \&\-mfpa \-mnobitfield \-mrtd \-mshort \-msoft-float \-mpcrel ! \&\-malign-int \-mstrict-align\fR .Sp \&\fIM68hc1x Options\fR \&\fB\-m6811 \-m6812 \-m68hc11 \-m68hc12 \-m68hcs12 ! \&\-mauto-incdec \-minmax \-mlong-calls \-mshort ! \&\-msoft-reg-count=\fR\fIcount\fR .Sp \&\fI\s-1VAX\s0 Options\fR \&\fB\-mg \-mgnu \-munix\fR *************** in the following sections. *** 357,441 **** \&\fB\-mtune=\fR\fIcpu-type\fR \&\fB\-mcmodel=\fR\fIcode-model\fR \&\fB\-m32 \-m64 ! \&\-mapp\-regs \-mbroken\-saverestore \-mcypress ! \&\-mfaster\-structs \-mflat ! \&\-mfpu \-mhard\-float \-mhard\-quad\-float ! \&\-mimpure\-text \-mlittle\-endian \-mlive\-g0 \-mno\-app\-regs ! \&\-mno\-faster\-structs \-mno\-flat \-mno\-fpu ! \&\-mno\-impure\-text \-mno\-stack\-bias \-mno\-unaligned\-doubles ! \&\-msoft\-float \-msoft\-quad\-float \-msparclite \-mstack\-bias ! \&\-msupersparc \-munaligned\-doubles \-mv8\fR .Sp \&\fI\s-1ARM\s0 Options\fR ! \&\fB\-mapcs\-frame \-mno\-apcs\-frame ! \&\-mapcs\-26 \-mapcs\-32 ! \&\-mapcs\-stack\-check \-mno\-apcs\-stack\-check ! \&\-mapcs\-float \-mno\-apcs\-float ! \&\-mapcs\-reentrant \-mno\-apcs\-reentrant ! \&\-msched\-prolog \-mno\-sched\-prolog ! \&\-mlittle\-endian \-mbig\-endian \-mwords\-little\-endian ! \&\-malignment\-traps \-mno\-alignment\-traps ! \&\-msoft\-float \-mhard\-float \-mfpe ! \&\-mthumb\-interwork \-mno\-thumb\-interwork \&\-mcpu=\fR\fIname\fR \fB\-march=\fR\fIname\fR \fB\-mfpe=\fR\fIname\fR ! \&\fB\-mstructure\-size\-boundary=\fR\fIn\fR ! \&\fB\-mabort\-on\-noreturn ! \&\-mlong\-calls \-mno\-long\-calls ! \&\-msingle\-pic\-base \-mno\-single\-pic\-base ! \&\-mpic\-register=\fR\fIreg\fR ! \&\fB\-mnop\-fun\-dllimport ! \&\-mpoke\-function\-name \&\-mthumb \-marm ! \&\-mtpcs\-frame \-mtpcs\-leaf\-frame ! \&\-mcaller\-super\-interworking \-mcallee\-super\-interworking\fR .Sp \&\fI\s-1MN10200\s0 Options\fR \&\fB\-mrelax\fR .Sp \&\fI\s-1MN10300\s0 Options\fR ! \&\fB\-mmult\-bug \-mno\-mult\-bug ! \&\-mam33 \-mno\-am33 ! \&\-mno\-crt0 \-mrelax\fR .Sp \&\fIM32R/D Options\fR ! \&\fB\-m32rx \-m32r \-mcode\-model=\fR\fImodel-type\fR \&\fB\-msdata=\fR\fIsdata-type\fR \fB\-G\fR \fInum\fR .Sp \&\fIM88K Options\fR ! \&\fB\-m88000 \-m88100 \-m88110 \-mbig\-pic ! \&\-mcheck\-zero\-division \-mhandle\-large\-shift ! \&\-midentify\-revision \-mno\-check\-zero\-division ! \&\-mno\-ocs\-debug\-info \-mno\-ocs\-frame\-position ! \&\-mno\-optimize\-arg\-area \-mno\-serialize\-volatile ! \&\-mno\-underscores \-mocs\-debug\-info ! \&\-mocs\-frame\-position \-moptimize\-arg\-area ! \&\-mserialize\-volatile \-mshort\-data\-\fR\fInum\fR \fB\-msvr3 ! \&\-msvr4 \-mtrap\-large\-shift \-muse\-div\-instruction ! \&\-mversion\-03.00 \-mwarn\-passed\-structs\fR .Sp \&\fI\s-1RS/6000\s0 and PowerPC Options\fR \&\fB\-mcpu=\fR\fIcpu-type\fR \&\fB\-mtune=\fR\fIcpu-type\fR ! \&\fB\-mpower \-mno\-power \-mpower2 \-mno\-power2 ! \&\-mpowerpc \-mpowerpc64 \-mno\-powerpc ! \&\-maltivec \-mno\-altivec ! \&\-mpowerpc\-gpopt \-mno\-powerpc\-gpopt ! \&\-mpowerpc\-gfxopt \-mno\-powerpc\-gfxopt ! \&\-mnew\-mnemonics \-mold\-mnemonics ! \&\-mfull\-toc \-mminimal\-toc \-mno\-fp\-in\-toc \-mno\-sum\-in\-toc ! \&\-m64 \-m32 \-mxl\-call \-mno\-xl\-call \-mpe ! \&\-msoft\-float \-mhard\-float \-mmultiple \-mno\-multiple ! \&\-mstring \-mno\-string \-mupdate \-mno\-update ! \&\-mfused\-madd \-mno\-fused\-madd \-mbit\-align \-mno\-bit\-align ! \&\-mstrict\-align \-mno\-strict\-align \-mrelocatable ! \&\-mno\-relocatable \-mrelocatable\-lib \-mno\-relocatable\-lib ! \&\-mtoc \-mno\-toc \-mlittle \-mlittle\-endian \-mbig \-mbig\-endian ! \&\-mcall\-aix \-mcall\-sysv \-mcall\-netbsd ! \&\-maix\-struct\-return \-msvr4\-struct\-return ! \&\-mabi=altivec \-mabi=no\-altivec ! \&\-mabi=spe \-mabi=no\-spe \&\-misel=yes \-misel=no ! \&\-mprototype \-mno\-prototype \&\-msim \-mmvme \-mads \-myellowknife \-memb \-msdata \&\-msdata=\fR\fIopt\fR \fB\-mvxworks \-mwindiss \-G\fR \fInum\fR \fB\-pthread\fR .Sp --- 367,451 ---- \&\fB\-mtune=\fR\fIcpu-type\fR \&\fB\-mcmodel=\fR\fIcode-model\fR \&\fB\-m32 \-m64 ! \&\-mapp-regs \-mbroken-saverestore \-mcypress ! \&\-mfaster-structs \-mflat ! \&\-mfpu \-mhard-float \-mhard-quad-float ! \&\-mimpure-text \-mlittle-endian \-mlive-g0 \-mno-app-regs ! \&\-mno-faster-structs \-mno-flat \-mno-fpu ! \&\-mno-impure-text \-mno-stack-bias \-mno-unaligned-doubles ! \&\-msoft-float \-msoft-quad-float \-msparclite \-mstack-bias ! \&\-msupersparc \-munaligned-doubles \-mv8\fR .Sp \&\fI\s-1ARM\s0 Options\fR ! \&\fB\-mapcs-frame \-mno-apcs-frame ! \&\-mapcs-26 \-mapcs-32 ! \&\-mapcs-stack-check \-mno-apcs-stack-check ! \&\-mapcs-float \-mno-apcs-float ! \&\-mapcs-reentrant \-mno-apcs-reentrant ! \&\-msched-prolog \-mno-sched-prolog ! \&\-mlittle-endian \-mbig-endian \-mwords-little-endian ! \&\-malignment-traps \-mno-alignment-traps ! \&\-msoft-float \-mhard-float \-mfpe ! \&\-mthumb-interwork \-mno-thumb-interwork \&\-mcpu=\fR\fIname\fR \fB\-march=\fR\fIname\fR \fB\-mfpe=\fR\fIname\fR ! \&\fB\-mstructure-size-boundary=\fR\fIn\fR ! \&\fB\-mabort-on-noreturn ! \&\-mlong-calls \-mno-long-calls ! \&\-msingle-pic-base \-mno-single-pic-base ! \&\-mpic-register=\fR\fIreg\fR ! \&\fB\-mnop-fun-dllimport ! \&\-mpoke-function-name \&\-mthumb \-marm ! \&\-mtpcs-frame \-mtpcs-leaf-frame ! \&\-mcaller-super-interworking \-mcallee-super-interworking\fR .Sp \&\fI\s-1MN10200\s0 Options\fR \&\fB\-mrelax\fR .Sp \&\fI\s-1MN10300\s0 Options\fR ! \&\fB\-mmult-bug \-mno-mult-bug ! \&\-mam33 \-mno-am33 ! \&\-mno-crt0 \-mrelax\fR .Sp \&\fIM32R/D Options\fR ! \&\fB\-m32rx \-m32r \-mcode-model=\fR\fImodel-type\fR \&\fB\-msdata=\fR\fIsdata-type\fR \fB\-G\fR \fInum\fR .Sp \&\fIM88K Options\fR ! \&\fB\-m88000 \-m88100 \-m88110 \-mbig-pic ! \&\-mcheck-zero-division \-mhandle-large-shift ! \&\-midentify-revision \-mno-check-zero-division ! \&\-mno-ocs-debug-info \-mno-ocs-frame-position ! \&\-mno-optimize-arg-area \-mno-serialize-volatile ! \&\-mno-underscores \-mocs-debug-info ! \&\-mocs-frame-position \-moptimize-arg-area ! \&\-mserialize-volatile \-mshort-data-\fR\fInum\fR \fB\-msvr3 ! \&\-msvr4 \-mtrap-large-shift \-muse-div-instruction ! \&\-mversion-03.00 \-mwarn-passed-structs\fR .Sp \&\fI\s-1RS/6000\s0 and PowerPC Options\fR \&\fB\-mcpu=\fR\fIcpu-type\fR \&\fB\-mtune=\fR\fIcpu-type\fR ! \&\fB\-mpower \-mno-power \-mpower2 \-mno-power2 ! \&\-mpowerpc \-mpowerpc64 \-mno-powerpc ! \&\-maltivec \-mno-altivec ! \&\-mpowerpc-gpopt \-mno-powerpc-gpopt ! \&\-mpowerpc-gfxopt \-mno-powerpc-gfxopt ! \&\-mnew-mnemonics \-mold-mnemonics ! \&\-mfull-toc \-mminimal-toc \-mno-fp-in-toc \-mno-sum-in-toc ! \&\-m64 \-m32 \-mxl-call \-mno-xl-call \-mpe ! \&\-msoft-float \-mhard-float \-mmultiple \-mno-multiple ! \&\-mstring \-mno-string \-mupdate \-mno-update ! \&\-mfused-madd \-mno-fused-madd \-mbit-align \-mno-bit-align ! \&\-mstrict-align \-mno-strict-align \-mrelocatable ! \&\-mno-relocatable \-mrelocatable-lib \-mno-relocatable-lib ! \&\-mtoc \-mno-toc \-mlittle \-mlittle-endian \-mbig \-mbig-endian ! \&\-mcall-aix \-mcall-sysv \-mcall-netbsd ! \&\-maix-struct-return \-msvr4\-struct-return ! \&\-mabi=altivec \-mabi=no-altivec ! \&\-mabi=spe \-mabi=no-spe \&\-misel=yes \-misel=no ! \&\-mprototype \-mno-prototype \&\-msim \-mmvme \-mads \-myellowknife \-memb \-msdata \&\-msdata=\fR\fIopt\fR \fB\-mvxworks \-mwindiss \-G\fR \fInum\fR \fB\-pthread\fR .Sp *************** in the following sections. *** 444,450 **** \&\fB\-all_load \-allowable_client \-arch \-arch_errors_fatal \&\-arch_only \-bind_at_load \-bundle \-bundle_loader \&\-client_name \-compatibility_version \-current_version ! \&\-dependency\-file \-dylib_file \-dylinker_install_name \&\-dynamic \-dynamiclib \-exported_symbols_list \&\-filelist \-flat_namespace \-force_cpusubtype_ALL \&\-force_flat_namespace \-headerpad_max_install_names --- 454,460 ---- \&\fB\-all_load \-allowable_client \-arch \-arch_errors_fatal \&\-arch_only \-bind_at_load \-bundle \-bundle_loader \&\-client_name \-compatibility_version \-current_version ! \&\-dependency-file \-dylib_file \-dylinker_install_name \&\-dynamic \-dynamiclib \-exported_symbols_list \&\-filelist \-flat_namespace \-force_cpusubtype_ALL \&\-force_flat_namespace \-headerpad_max_install_names *************** in the following sections. *** 462,550 **** \&\-unexported_symbols_list \-weak_reference_mismatches \-whatsloaded\fR .Sp \&\fI\s-1RT\s0 Options\fR ! \&\fB\-mcall\-lib\-mul \-mfp\-arg\-in\-fpregs \-mfp\-arg\-in\-gregs ! \&\-mfull\-fp\-blocks \-mhc\-struct\-return \-min\-line\-mul ! \&\-mminimum\-fp\-blocks \-mnohc\-struct\-return\fR .Sp \&\fI\s-1MIPS\s0 Options\fR \&\fB\-mabicalls \-march=\fR\fIcpu-type\fR \fB\-mtune=\fR\fIcpu=type\fR ! \&\fB\-mcpu=\fR\fIcpu-type\fR \fB\-membedded\-data \-muninit\-const\-in\-rodata ! \&\-membedded\-pic \-mfp32 \-mfp64 \-mfused\-madd \-mno\-fused\-madd \&\-mgas \-mgp32 \-mgp64 ! \&\-mgpopt \-mhalf\-pic \-mhard\-float \-mint64 \-mips1 ! \&\-mips2 \-mips3 \-mips4 \-mlong64 \-mlong32 \-mlong\-calls \-mmemcpy ! \&\-mmips\-as \-mmips\-tfile \-mno\-abicalls ! \&\-mno\-embedded\-data \-mno\-uninit\-const\-in\-rodata ! \&\-mno\-embedded\-pic \-mno\-gpopt \-mno\-long\-calls ! \&\-mno\-memcpy \-mno\-mips\-tfile \-mno\-rnames \-mno\-stats ! \&\-mrnames \-msoft\-float ! \&\-m4650 \-msingle\-float \-mmad \&\-mstats \-EL \-EB \-G\fR \fInum\fR \fB\-nocpp \&\-mabi=32 \-mabi=n32 \-mabi=64 \-mabi=eabi ! \&\-mfix7000 \-mno\-crt0 \-mflush\-func=\fR\fIfunc\fR \fB\-mno\-flush\-func ! \&\-mbranch\-likely \-mno\-branch\-likely\fR .Sp \&\fIi386 and x86\-64 Options\fR \&\fB\-mcpu=\fR\fIcpu-type\fR \fB\-march=\fR\fIcpu-type\fR ! \&\fB\-mfpmath=\fR\fIunit\fR \fB\-masm=\fR\fIdialect\fR \fB\-mno\-fancy\-math\-387 ! \&\-mno\-fp\-ret\-in\-387 \-msoft\-float \-msvr3\-shlib ! \&\-mno\-wide\-multiply \-mrtd \-malign\-double ! \&\-mpreferred\-stack\-boundary=\fR\fInum\fR ! \&\fB\-mmmx \-msse \-msse2 \-m3dnow ! \&\-mthreads \-mno\-align\-stringops \-minline\-all\-stringops ! \&\-mpush\-args \-maccumulate\-outgoing\-args \-m128bit\-long\-double ! \&\-m96bit\-long\-double \-mregparm=\fR\fInum\fR \fB\-momit\-leaf\-frame\-pointer ! \&\-mno\-red\-zone \&\-mcmodel=\fR\fIcode-model\fR \&\fB\-m32 \-m64\fR .Sp \&\fI\s-1HPPA\s0 Options\fR \&\fB\-march=\fR\fIarchitecture-type\fR ! \&\fB\-mbig\-switch \-mdisable\-fpregs \-mdisable\-indexing ! \&\-mfast\-indirect\-calls \-mgas \-mgnu\-ld \-mhp\-ld ! \&\-mjump\-in\-delay \-mlinker\-opt \-mlong\-calls ! \&\-mlong\-load\-store \-mno\-big\-switch \-mno\-disable\-fpregs ! \&\-mno\-disable\-indexing \-mno\-fast\-indirect\-calls \-mno\-gas ! \&\-mno\-jump\-in\-delay \-mno\-long\-load\-store ! \&\-mno\-portable\-runtime \-mno\-soft\-float ! \&\-mno\-space\-regs \-msoft\-float \-mpa\-risc\-1\-0 ! \&\-mpa\-risc\-1\-1 \-mpa\-risc\-2\-0 \-mportable\-runtime ! \&\-mschedule=\fR\fIcpu-type\fR \fB\-mspace\-regs \-msio \-mwsio \&\-nolibdld \-static \-threads\fR .Sp \&\fIIntel 960 Options\fR ! \&\fB\-m\fR\fIcpu-type\fR \fB\-masm\-compat \-mclean\-linkage ! \&\-mcode\-align \-mcomplex\-addr \-mleaf\-procedures ! \&\-mic\-compat \-mic2.0\-compat \-mic3.0\-compat ! \&\-mintel\-asm \-mno\-clean\-linkage \-mno\-code\-align ! \&\-mno\-complex\-addr \-mno\-leaf\-procedures ! \&\-mno\-old\-align \-mno\-strict\-align \-mno\-tail\-call ! \&\-mnumerics \-mold\-align \-msoft\-float \-mstrict\-align ! \&\-mtail\-call\fR .Sp \&\fI\s-1DEC\s0 Alpha Options\fR ! \&\fB\-mno\-fp\-regs \-msoft\-float \-malpha\-as \-mgas ! \&\-mieee \-mieee\-with\-inexact \-mieee\-conformant ! \&\-mfp\-trap\-mode=\fR\fImode\fR \fB\-mfp\-rounding\-mode=\fR\fImode\fR ! \&\fB\-mtrap\-precision=\fR\fImode\fR \fB\-mbuild\-constants \&\-mcpu=\fR\fIcpu-type\fR \fB\-mtune=\fR\fIcpu-type\fR \&\fB\-mbwx \-mmax \-mfix \-mcix ! \&\-mfloat\-vax \-mfloat\-ieee ! \&\-mexplicit\-relocs \-msmall\-data \-mlarge\-data ! \&\-mmemory\-latency=\fR\fItime\fR .Sp \&\fI\s-1DEC\s0 Alpha/VMS Options\fR ! \&\fB\-mvms\-return\-codes\fR .Sp \&\fIH8/300 Options\fR ! \&\fB\-mrelax \-mh \-ms \-mn \-mint32 \-malign\-300\fR .Sp \&\fI\s-1SH\s0 Options\fR \&\fB\-m1 \-m2 \-m3 \-m3e ! \&\-m4\-nofpu \-m4\-single\-only \-m4\-single \-m4 ! \&\-m5\-64media \-m5\-64media\-nofpu ! \&\-m5\-32media \-m5\-32media\-nofpu ! \&\-m5\-compact \-m5\-compact\-nofpu \&\-mb \-ml \-mdalign \-mrelax \&\-mbigtable \-mfmovd \-mhitachi \-mnomacsave \&\-mieee \-misize \-mpadstruct \-mspace --- 472,560 ---- \&\-unexported_symbols_list \-weak_reference_mismatches \-whatsloaded\fR .Sp \&\fI\s-1RT\s0 Options\fR ! \&\fB\-mcall-lib-mul \-mfp-arg-in-fpregs \-mfp-arg-in-gregs ! \&\-mfull-fp-blocks \-mhc-struct-return \-min-line-mul ! \&\-mminimum-fp-blocks \-mnohc-struct-return\fR .Sp \&\fI\s-1MIPS\s0 Options\fR \&\fB\-mabicalls \-march=\fR\fIcpu-type\fR \fB\-mtune=\fR\fIcpu=type\fR ! \&\fB\-mcpu=\fR\fIcpu-type\fR \fB\-membedded-data \-muninit-const-in-rodata ! \&\-membedded-pic \-mfp32 \-mfp64 \-mfused-madd \-mno-fused-madd \&\-mgas \-mgp32 \-mgp64 ! \&\-mgpopt \-mhalf-pic \-mhard-float \-mint64 \-mips1 ! \&\-mips2 \-mips3 \-mips4 \-mlong64 \-mlong32 \-mlong-calls \-mmemcpy ! \&\-mmips-as \-mmips-tfile \-mno-abicalls ! \&\-mno-embedded-data \-mno-uninit-const-in-rodata ! \&\-mno-embedded-pic \-mno-gpopt \-mno-long-calls ! \&\-mno-memcpy \-mno-mips-tfile \-mno-rnames \-mno-stats ! \&\-mrnames \-msoft-float ! \&\-m4650 \-msingle-float \-mmad \&\-mstats \-EL \-EB \-G\fR \fInum\fR \fB\-nocpp \&\-mabi=32 \-mabi=n32 \-mabi=64 \-mabi=eabi ! \&\-mfix7000 \-mno-crt0 \-mflush-func=\fR\fIfunc\fR \fB\-mno-flush-func ! \&\-mbranch-likely \-mno-branch-likely\fR .Sp \&\fIi386 and x86\-64 Options\fR \&\fB\-mcpu=\fR\fIcpu-type\fR \fB\-march=\fR\fIcpu-type\fR ! \&\fB\-mfpmath=\fR\fIunit\fR \fB\-masm=\fR\fIdialect\fR \fB\-mno-fancy-math-387 ! \&\-mno-fp-ret-in-387 \-msoft-float \-msvr3\-shlib ! \&\-mno-wide-multiply \-mrtd \-malign-double ! \&\-mpreferred-stack-boundary=\fR\fInum\fR ! \&\fB\-mmmx \-msse \-msse2 \-msse3 \-m3dnow ! \&\-mthreads \-mno-align-stringops \-minline-all-stringops ! \&\-mpush-args \-maccumulate-outgoing-args \-m128bit-long-double ! \&\-m96bit-long-double \-mregparm=\fR\fInum\fR \fB\-momit-leaf-frame-pointer ! \&\-mno-red-zone \&\-mcmodel=\fR\fIcode-model\fR \&\fB\-m32 \-m64\fR .Sp \&\fI\s-1HPPA\s0 Options\fR \&\fB\-march=\fR\fIarchitecture-type\fR ! \&\fB\-mbig-switch \-mdisable-fpregs \-mdisable-indexing ! \&\-mfast-indirect-calls \-mgas \-mgnu-ld \-mhp-ld ! \&\-mjump-in-delay \-mlinker-opt \-mlong-calls ! \&\-mlong-load-store \-mno-big-switch \-mno-disable-fpregs ! \&\-mno-disable-indexing \-mno-fast-indirect-calls \-mno-gas ! \&\-mno-jump-in-delay \-mno-long-load-store ! \&\-mno-portable-runtime \-mno-soft-float ! \&\-mno-space-regs \-msoft-float \-mpa-risc-1\-0 ! \&\-mpa-risc-1\-1 \-mpa-risc-2\-0 \-mportable-runtime ! \&\-mschedule=\fR\fIcpu-type\fR \fB\-mspace-regs \-msio \-mwsio \&\-nolibdld \-static \-threads\fR .Sp \&\fIIntel 960 Options\fR ! \&\fB\-m\fR\fIcpu-type\fR \fB\-masm-compat \-mclean-linkage ! \&\-mcode-align \-mcomplex-addr \-mleaf-procedures ! \&\-mic-compat \-mic2.0\-compat \-mic3.0\-compat ! \&\-mintel-asm \-mno-clean-linkage \-mno-code-align ! \&\-mno-complex-addr \-mno-leaf-procedures ! \&\-mno-old-align \-mno-strict-align \-mno-tail-call ! \&\-mnumerics \-mold-align \-msoft-float \-mstrict-align ! \&\-mtail-call\fR .Sp \&\fI\s-1DEC\s0 Alpha Options\fR ! \&\fB\-mno-fp-regs \-msoft-float \-malpha-as \-mgas ! \&\-mieee \-mieee-with-inexact \-mieee-conformant ! \&\-mfp-trap-mode=\fR\fImode\fR \fB\-mfp-rounding-mode=\fR\fImode\fR ! \&\fB\-mtrap-precision=\fR\fImode\fR \fB\-mbuild-constants \&\-mcpu=\fR\fIcpu-type\fR \fB\-mtune=\fR\fIcpu-type\fR \&\fB\-mbwx \-mmax \-mfix \-mcix ! \&\-mfloat-vax \-mfloat-ieee ! \&\-mexplicit-relocs \-msmall-data \-mlarge-data ! \&\-mmemory-latency=\fR\fItime\fR .Sp \&\fI\s-1DEC\s0 Alpha/VMS Options\fR ! \&\fB\-mvms-return-codes\fR .Sp \&\fIH8/300 Options\fR ! \&\fB\-mrelax \-mh \-ms \-mn \-mint32 \-malign-300\fR .Sp \&\fI\s-1SH\s0 Options\fR \&\fB\-m1 \-m2 \-m3 \-m3e ! \&\-m4\-nofpu \-m4\-single-only \-m4\-single \-m4 ! \&\-m5\-64media \-m5\-64media-nofpu ! \&\-m5\-32media \-m5\-32media-nofpu ! \&\-m5\-compact \-m5\-compact-nofpu \&\-mb \-ml \-mdalign \-mrelax \&\-mbigtable \-mfmovd \-mhitachi \-mnomacsave \&\-mieee \-misize \-mpadstruct \-mspace *************** in the following sections. *** 555,684 **** .Sp \&\fI\s-1ARC\s0 Options\fR \&\fB\-EB \-EL ! \&\-mmangle\-cpu \-mcpu=\fR\fIcpu\fR \fB\-mtext=\fR\fItext-section\fR \&\fB\-mdata=\fR\fIdata-section\fR \fB\-mrodata=\fR\fIreadonly-data-section\fR .Sp \&\fITMS320C3x/C4x Options\fR \&\fB\-mcpu=\fR\fIcpu\fR \fB\-mbig \-msmall \-mregparm \-mmemparm ! \&\-mfast\-fix \-mmpyi \-mbk \-mti \-mdp\-isr\-reload ! \&\-mrpts=\fR\fIcount\fR \fB\-mrptb \-mdb \-mloop\-unsigned ! \&\-mparallel\-insns \-mparallel\-mpy \-mpreserve\-float\fR .Sp \&\fIV850 Options\fR ! \&\fB\-mlong\-calls \-mno\-long\-calls \-mep \-mno\-ep ! \&\-mprolog\-function \-mno\-prolog\-function \-mspace \&\-mtda=\fR\fIn\fR \fB\-msda=\fR\fIn\fR \fB\-mzda=\fR\fIn\fR ! \&\fB\-mapp\-regs \-mno\-app\-regs ! \&\-mdisable\-callt \-mno\-disable\-callt \&\-mv850e ! \&\-mv850 \-mbig\-switch\fR .Sp \&\fI\s-1NS32K\s0 Options\fR \&\fB\-m32032 \-m32332 \-m32532 \-m32081 \-m32381 ! \&\-mmult\-add \-mnomult\-add \-msoft\-float \-mrtd \-mnortd \&\-mregparam \-mnoregparam \-msb \-mnosb \&\-mbitfield \-mnobitfield \-mhimem \-mnohimem\fR .Sp \&\fI\s-1AVR\s0 Options\fR ! \&\fB\-mmcu=\fR\fImcu\fR \fB\-msize \-minit\-stack=\fR\fIn\fR \fB\-mno\-interrupts ! \&\-mcall\-prologues \-mno\-tablejump \-mtiny\-stack\fR .Sp \&\fIMCore Options\fR ! \&\fB\-mhardlit \-mno\-hardlit \-mdiv \-mno\-div \-mrelax\-immediates ! \&\-mno\-relax\-immediates \-mwide\-bitfields \-mno\-wide\-bitfields ! \&\-m4byte\-functions \-mno\-4byte\-functions \-mcallgraph\-data ! \&\-mno\-callgraph\-data \-mslow\-bytes \-mno\-slow\-bytes \-mno\-lsim ! \&\-mlittle\-endian \-mbig\-endian \-m210 \-m340 \-mstack\-increment\fR .Sp \&\fI\s-1MMIX\s0 Options\fR ! \&\fB\-mlibfuncs \-mno\-libfuncs \-mepsilon \-mno\-epsilon \-mabi=gnu ! \&\-mabi=mmixware \-mzero\-extend \-mknuthdiv \-mtoplevel\-symbols ! \&\-melf \-mbranch\-predict \-mno\-branch\-predict \-mbase\-addresses ! \&\-mno\-base\-addresses \-msingle\-exit \-mno\-single\-exit\fR .Sp ! \&\fI\s-1IA\-64\s0 Options\fR ! \&\fB\-mbig\-endian \-mlittle\-endian \-mgnu\-as \-mgnu\-ld \-mno\-pic ! \&\-mvolatile\-asm\-stop \-mb\-step \-mregister\-names \-mno\-sdata ! \&\-mconstant\-gp \-mauto\-pic \-minline\-float\-divide\-min\-latency ! \&\-minline\-float\-divide\-max\-throughput ! \&\-minline\-int\-divide\-min\-latency ! \&\-minline\-int\-divide\-max\-throughput \-mno\-dwarf2\-asm ! \&\-mfixed\-range=\fR\fIregister-range\fR .Sp \&\fID30V Options\fR ! \&\fB\-mextmem \-mextmemory \-monchip \-mno\-asm\-optimize ! \&\-masm\-optimize \-mbranch\-cost=\fR\fIn\fR \fB\-mcond\-exec=\fR\fIn\fR .Sp \&\fIS/390 and zSeries Options\fR ! \&\fB\-mhard\-float \-msoft\-float \-mbackchain \-mno\-backchain ! \&\-msmall\-exec \-mno\-small\-exec \-mmvcle \-mno\-mvcle ! \&\-m64 \-m31 \-mdebug \-mno\-debug\fR .Sp \&\fI\s-1CRIS\s0 Options\fR \&\fB\-mcpu=\fR\fIcpu\fR \fB\-march=\fR\fIcpu\fR \fB\-mtune=\fR\fIcpu\fR ! \&\fB\-mmax\-stack\-frame=\fR\fIn\fR \fB\-melinux\-stacksize=\fR\fIn\fR ! \&\fB\-metrax4 \-metrax100 \-mpdebug \-mcc\-init \-mno\-side\-effects ! \&\-mstack\-align \-mdata\-align \-mconst\-align ! \&\-m32\-bit \-m16\-bit \-m8\-bit \-mno\-prologue\-epilogue \-mno\-gotplt \&\-melf \-maout \-melinux \-mlinux \-sim \-sim2\fR .Sp ! \&\fI\s-1PDP\-11\s0 Options\fR ! \&\fB\-mfpu \-msoft\-float \-mac0 \-mno\-ac0 \-m40 \-m45 \-m10 ! \&\-mbcopy \-mbcopy\-builtin \-mint32 \-mno\-int16 ! \&\-mint16 \-mno\-int32 \-mfloat32 \-mno\-float64 ! \&\-mfloat64 \-mno\-float32 \-mabshi \-mno\-abshi ! \&\-mbranch\-expensive \-mbranch\-cheap ! \&\-msplit \-mno\-split \-munix\-asm \-mdec\-asm\fR .Sp \&\fIXstormy16 Options\fR \&\fB\-msim\fR .Sp \&\fIXtensa Options\fR ! \&\fB\-mbig\-endian \-mlittle\-endian ! \&\-mdensity \-mno\-density ! \&\-mmac16 \-mno\-mac16 ! \&\-mmul16 \-mno\-mul16 ! \&\-mmul32 \-mno\-mul32 ! \&\-mnsa \-mno\-nsa ! \&\-mminmax \-mno\-minmax ! \&\-msext \-mno\-sext ! \&\-mbooleans \-mno\-booleans ! \&\-mhard\-float \-msoft\-float ! \&\-mfused\-madd \-mno\-fused\-madd ! \&\-mserialize\-volatile \-mno\-serialize\-volatile ! \&\-mtext\-section\-literals \-mno\-text\-section\-literals ! \&\-mtarget\-align \-mno\-target\-align ! \&\-mlongcalls \-mno\-longcalls\fR .Sp \&\fI\s-1FRV\s0 Options\fR ! \&\fB\-mgpr\-32 \-mgpr\-64 \-mfpr\-32 \-mfpr\-64 ! \&\-mhard\-float \-msoft\-float \-malloc\-cc \-mfixed\-cc ! \&\-mdword \-mno\-dword \-mdouble \-mno\-double ! \&\-mmedia \-mno\-media \-mmuladd \-mno\-muladd \-mlibrary\-pic ! \&\-macc\-4 \-macc\-8 \-mpack \-mno\-pack \-mno\-eflags ! \&\-mcond\-move \-mno\-cond\-move \-mscc \-mno\-scc ! \&\-mcond\-exec \-mno\-cond\-exec \-mvliw\-branch \-mno\-vliw\-branch ! \&\-mmulti\-cond\-exec \-mno\-multi\-cond\-exec \-mnested\-cond\-exec ! \&\-mno\-nested\-cond\-exec \-mtomcat\-stats \&\-mcpu=\fR\fIcpu\fR ! .IP "\fICode Generation Options\fR" 4 .IX Item "Code Generation Options" ! \&\fB\-fcall\-saved\-\fR\fIreg\fR \fB\-fcall\-used\-\fR\fIreg\fR ! \&\fB\-ffixed\-\fR\fIreg\fR \fB\-fexceptions ! \&\-fnon\-call\-exceptions \-funwind\-tables ! \&\-fasynchronous\-unwind\-tables ! \&\-finhibit\-size\-directive \-finstrument\-functions ! \&\-fno\-common \-fno\-ident \-fno\-gnu\-linker ! \&\-fpcc\-struct\-return \-fpic \-fPIC ! \&\-freg\-struct\-return \-fshared\-data \-fshort\-enums ! \&\-fshort\-double \-fshort\-wchar \-fvolatile ! \&\-fvolatile\-global \-fvolatile\-static ! \&\-fverbose\-asm \-fpack\-struct \-fstack\-check ! \&\-fstack\-limit\-register=\fR\fIreg\fR \fB\-fstack\-limit\-symbol=\fR\fIsym\fR ! \&\fB\-fargument\-alias \-fargument\-noalias ! \&\-fargument\-noalias\-global \-fleading\-underscore ! \&\-ftls\-model=\fR\fImodel\fR ! \&\fB\-ftrapv \-fbounds\-check\fR .Sh "Options Controlling the Kind of Output" .IX Subsection "Options Controlling the Kind of Output" Compilation can involve up to four stages: preprocessing, compilation --- 565,694 ---- .Sp \&\fI\s-1ARC\s0 Options\fR \&\fB\-EB \-EL ! \&\-mmangle-cpu \-mcpu=\fR\fIcpu\fR \fB\-mtext=\fR\fItext-section\fR \&\fB\-mdata=\fR\fIdata-section\fR \fB\-mrodata=\fR\fIreadonly-data-section\fR .Sp \&\fITMS320C3x/C4x Options\fR \&\fB\-mcpu=\fR\fIcpu\fR \fB\-mbig \-msmall \-mregparm \-mmemparm ! \&\-mfast-fix \-mmpyi \-mbk \-mti \-mdp-isr-reload ! \&\-mrpts=\fR\fIcount\fR \fB\-mrptb \-mdb \-mloop-unsigned ! \&\-mparallel-insns \-mparallel-mpy \-mpreserve-float\fR .Sp \&\fIV850 Options\fR ! \&\fB\-mlong-calls \-mno-long-calls \-mep \-mno-ep ! \&\-mprolog-function \-mno-prolog-function \-mspace \&\-mtda=\fR\fIn\fR \fB\-msda=\fR\fIn\fR \fB\-mzda=\fR\fIn\fR ! \&\fB\-mapp-regs \-mno-app-regs ! \&\-mdisable-callt \-mno-disable-callt \&\-mv850e ! \&\-mv850 \-mbig-switch\fR .Sp \&\fI\s-1NS32K\s0 Options\fR \&\fB\-m32032 \-m32332 \-m32532 \-m32081 \-m32381 ! \&\-mmult-add \-mnomult-add \-msoft-float \-mrtd \-mnortd \&\-mregparam \-mnoregparam \-msb \-mnosb \&\-mbitfield \-mnobitfield \-mhimem \-mnohimem\fR .Sp \&\fI\s-1AVR\s0 Options\fR ! \&\fB\-mmcu=\fR\fImcu\fR \fB\-msize \-minit-stack=\fR\fIn\fR \fB\-mno-interrupts ! \&\-mcall-prologues \-mno-tablejump \-mtiny-stack\fR .Sp \&\fIMCore Options\fR ! \&\fB\-mhardlit \-mno-hardlit \-mdiv \-mno-div \-mrelax-immediates ! \&\-mno-relax-immediates \-mwide-bitfields \-mno-wide-bitfields ! \&\-m4byte-functions \-mno-4byte-functions \-mcallgraph-data ! \&\-mno-callgraph-data \-mslow-bytes \-mno-slow-bytes \-mno-lsim ! \&\-mlittle-endian \-mbig-endian \-m210 \-m340 \-mstack-increment\fR .Sp \&\fI\s-1MMIX\s0 Options\fR ! \&\fB\-mlibfuncs \-mno-libfuncs \-mepsilon \-mno-epsilon \-mabi=gnu ! \&\-mabi=mmixware \-mzero-extend \-mknuthdiv \-mtoplevel-symbols ! \&\-melf \-mbranch-predict \-mno-branch-predict \-mbase-addresses ! \&\-mno-base-addresses \-msingle-exit \-mno-single-exit\fR .Sp ! \&\fI\s-1IA-64\s0 Options\fR ! \&\fB\-mbig-endian \-mlittle-endian \-mgnu-as \-mgnu-ld \-mno-pic ! \&\-mvolatile-asm-stop \-mb-step \-mregister-names \-mno-sdata ! \&\-mconstant-gp \-mauto-pic \-minline-float-divide-min-latency ! \&\-minline-float-divide-max-throughput ! \&\-minline-int-divide-min-latency ! \&\-minline-int-divide-max-throughput \-mno-dwarf2\-asm ! \&\-mfixed-range=\fR\fIregister-range\fR .Sp \&\fID30V Options\fR ! \&\fB\-mextmem \-mextmemory \-monchip \-mno-asm-optimize ! \&\-masm-optimize \-mbranch-cost=\fR\fIn\fR \fB\-mcond-exec=\fR\fIn\fR .Sp \&\fIS/390 and zSeries Options\fR ! \&\fB\-mhard-float \-msoft-float \-mbackchain \-mno-backchain ! \&\-msmall-exec \-mno-small-exec \-mmvcle \-mno-mvcle ! \&\-m64 \-m31 \-mdebug \-mno-debug\fR .Sp \&\fI\s-1CRIS\s0 Options\fR \&\fB\-mcpu=\fR\fIcpu\fR \fB\-march=\fR\fIcpu\fR \fB\-mtune=\fR\fIcpu\fR ! \&\fB\-mmax-stack-frame=\fR\fIn\fR \fB\-melinux-stacksize=\fR\fIn\fR ! \&\fB\-metrax4 \-metrax100 \-mpdebug \-mcc-init \-mno-side-effects ! \&\-mstack-align \-mdata-align \-mconst-align ! \&\-m32\-bit \-m16\-bit \-m8\-bit \-mno-prologue-epilogue \-mno-gotplt \&\-melf \-maout \-melinux \-mlinux \-sim \-sim2\fR .Sp ! \&\fI\s-1PDP-11\s0 Options\fR ! \&\fB\-mfpu \-msoft-float \-mac0 \-mno-ac0 \-m40 \-m45 \-m10 ! \&\-mbcopy \-mbcopy-builtin \-mint32 \-mno-int16 ! \&\-mint16 \-mno-int32 \-mfloat32 \-mno-float64 ! \&\-mfloat64 \-mno-float32 \-mabshi \-mno-abshi ! \&\-mbranch-expensive \-mbranch-cheap ! \&\-msplit \-mno-split \-munix-asm \-mdec-asm\fR .Sp \&\fIXstormy16 Options\fR \&\fB\-msim\fR .Sp \&\fIXtensa Options\fR ! \&\fB\-mbig-endian \-mlittle-endian ! \&\-mdensity \-mno-density ! \&\-mmac16 \-mno-mac16 ! \&\-mmul16 \-mno-mul16 ! \&\-mmul32 \-mno-mul32 ! \&\-mnsa \-mno-nsa ! \&\-mminmax \-mno-minmax ! \&\-msext \-mno-sext ! \&\-mbooleans \-mno-booleans ! \&\-mhard-float \-msoft-float ! \&\-mfused-madd \-mno-fused-madd ! \&\-mserialize-volatile \-mno-serialize-volatile ! \&\-mtext-section-literals \-mno-text-section-literals ! \&\-mtarget-align \-mno-target-align ! \&\-mlongcalls \-mno-longcalls\fR .Sp \&\fI\s-1FRV\s0 Options\fR ! \&\fB\-mgpr-32 \-mgpr-64 \-mfpr-32 \-mfpr-64 ! \&\-mhard-float \-msoft-float \-malloc-cc \-mfixed-cc ! \&\-mdword \-mno-dword \-mdouble \-mno-double ! \&\-mmedia \-mno-media \-mmuladd \-mno-muladd \-mlibrary-pic ! \&\-macc-4 \-macc-8 \-mpack \-mno-pack \-mno-eflags ! \&\-mcond-move \-mno-cond-move \-mscc \-mno-scc ! \&\-mcond-exec \-mno-cond-exec \-mvliw-branch \-mno-vliw-branch ! \&\-mmulti-cond-exec \-mno-multi-cond-exec \-mnested-cond-exec ! \&\-mno-nested-cond-exec \-mtomcat-stats \&\-mcpu=\fR\fIcpu\fR ! .Ip "\fICode Generation Options\fR" 4 .IX Item "Code Generation Options" ! \&\fB\-fcall-saved-\fR\fIreg\fR \fB\-fcall-used-\fR\fIreg\fR ! \&\fB\-ffixed-\fR\fIreg\fR \fB\-fexceptions ! \&\-fnon-call-exceptions \-funwind-tables ! \&\-fasynchronous-unwind-tables ! \&\-finhibit-size-directive \-finstrument-functions ! \&\-fno-common \-fno-ident \-fno-gnu-linker ! \&\-fpcc-struct-return \-fpic \-fPIC ! \&\-freg-struct-return \-fshared-data \-fshort-enums ! \&\-fshort-double \-fshort-wchar \-fvolatile ! \&\-fvolatile-global \-fvolatile-static ! \&\-fverbose-asm \-fpack-struct \-fstack-check ! \&\-fstack-limit-register=\fR\fIreg\fR \fB\-fstack-limit-symbol=\fR\fIsym\fR ! \&\fB\-fargument-alias \-fargument-noalias ! \&\-fargument-noalias-global \-fleading-underscore ! \&\-ftls-model=\fR\fImodel\fR ! \&\fB\-ftrapv \-fbounds-check\fR .Sh "Options Controlling the Kind of Output" .IX Subsection "Options Controlling the Kind of Output" Compilation can involve up to four stages: preprocessing, compilation *************** compiled, and those specified as input) *** 689,777 **** .PP For any given input file, the file name suffix determines what kind of compilation is done: ! .IP "\fIfile\fR\fB.c\fR" 4 .IX Item "file.c" C source code which must be preprocessed. ! .IP "\fIfile\fR\fB.i\fR" 4 .IX Item "file.i" C source code which should not be preprocessed. ! .IP "\fIfile\fR\fB.ii\fR" 4 .IX Item "file.ii" \&\*(C+ source code which should not be preprocessed. ! .IP "\fIfile\fR\fB.m\fR" 4 .IX Item "file.m" Objective-C source code. Note that you must link with the library \&\fIlibobjc.a\fR to make an Objective-C program work. ! .IP "\fIfile\fR\fB.mi\fR" 4 .IX Item "file.mi" Objective-C source code which should not be preprocessed. ! .IP "\fIfile\fR\fB.h\fR" 4 .IX Item "file.h" C header file (not to be compiled or linked). ! .IP "\fIfile\fR\fB.cc\fR" 4 .IX Item "file.cc" .PD 0 ! .IP "\fIfile\fR\fB.cp\fR" 4 .IX Item "file.cp" ! .IP "\fIfile\fR\fB.cxx\fR" 4 .IX Item "file.cxx" ! .IP "\fIfile\fR\fB.cpp\fR" 4 .IX Item "file.cpp" ! .IP "\fIfile\fR\fB.c++\fR" 4 .IX Item "file.c++" ! .IP "\fIfile\fR\fB.C\fR" 4 .IX Item "file.C" .PD \&\*(C+ source code which must be preprocessed. Note that in \fB.cxx\fR, the last two letters must both be literally \fBx\fR. Likewise, \&\fB.C\fR refers to a literal capital C. ! .IP "\fIfile\fR\fB.f\fR" 4 .IX Item "file.f" .PD 0 ! .IP "\fIfile\fR\fB.for\fR" 4 .IX Item "file.for" ! .IP "\fIfile\fR\fB.FOR\fR" 4 .IX Item "file.FOR" .PD Fortran source code which should not be preprocessed. ! .IP "\fIfile\fR\fB.F\fR" 4 .IX Item "file.F" .PD 0 ! .IP "\fIfile\fR\fB.fpp\fR" 4 .IX Item "file.fpp" ! .IP "\fIfile\fR\fB.FPP\fR" 4 .IX Item "file.FPP" .PD Fortran source code which must be preprocessed (with the traditional preprocessor). ! .IP "\fIfile\fR\fB.r\fR" 4 .IX Item "file.r" Fortran source code which must be preprocessed with a \s-1RATFOR\s0 preprocessor (not included with \s-1GCC\s0). ! .IP "\fIfile\fR\fB.ads\fR" 4 .IX Item "file.ads" Ada source code file which contains a library unit declaration (a declaration of a package, subprogram, or generic, or a generic instantiation), or a library unit renaming declaration (a package, generic, or subprogram renaming declaration). Such files are also called \fIspecs\fR. ! .IP "\fIfile\fR\fB.adb\fR" 4 .IX Item "file.adb" Ada source code file containing a library unit body (a subprogram or package body). Such files are also called \fIbodies\fR. ! .IP "\fIfile\fR\fB.s\fR" 4 .IX Item "file.s" Assembler code. ! .IP "\fIfile\fR\fB.S\fR" 4 .IX Item "file.S" Assembler code which must be preprocessed. ! .IP "\fIother\fR" 4 .IX Item "other" An object file to be fed straight into linking. Any file name with no recognized suffix is treated this way. .PP You can specify the input language explicitly with the \fB\-x\fR option: ! .IP "\fB\-x\fR \fIlanguage\fR" 4 .IX Item "-x language" Specify explicitly the \fIlanguage\fR for the following input files (rather than letting the compiler choose a default based on the file --- 699,787 ---- .PP For any given input file, the file name suffix determines what kind of compilation is done: ! .Ip "\fIfile\fR\fB.c\fR" 4 .IX Item "file.c" C source code which must be preprocessed. ! .Ip "\fIfile\fR\fB.i\fR" 4 .IX Item "file.i" C source code which should not be preprocessed. ! .Ip "\fIfile\fR\fB.ii\fR" 4 .IX Item "file.ii" \&\*(C+ source code which should not be preprocessed. ! .Ip "\fIfile\fR\fB.m\fR" 4 .IX Item "file.m" Objective-C source code. Note that you must link with the library \&\fIlibobjc.a\fR to make an Objective-C program work. ! .Ip "\fIfile\fR\fB.mi\fR" 4 .IX Item "file.mi" Objective-C source code which should not be preprocessed. ! .Ip "\fIfile\fR\fB.h\fR" 4 .IX Item "file.h" C header file (not to be compiled or linked). ! .Ip "\fIfile\fR\fB.cc\fR" 4 .IX Item "file.cc" .PD 0 ! .Ip "\fIfile\fR\fB.cp\fR" 4 .IX Item "file.cp" ! .Ip "\fIfile\fR\fB.cxx\fR" 4 .IX Item "file.cxx" ! .Ip "\fIfile\fR\fB.cpp\fR" 4 .IX Item "file.cpp" ! .Ip "\fIfile\fR\fB.c++\fR" 4 .IX Item "file.c++" ! .Ip "\fIfile\fR\fB.C\fR" 4 .IX Item "file.C" .PD \&\*(C+ source code which must be preprocessed. Note that in \fB.cxx\fR, the last two letters must both be literally \fBx\fR. Likewise, \&\fB.C\fR refers to a literal capital C. ! .Ip "\fIfile\fR\fB.f\fR" 4 .IX Item "file.f" .PD 0 ! .Ip "\fIfile\fR\fB.for\fR" 4 .IX Item "file.for" ! .Ip "\fIfile\fR\fB.FOR\fR" 4 .IX Item "file.FOR" .PD Fortran source code which should not be preprocessed. ! .Ip "\fIfile\fR\fB.F\fR" 4 .IX Item "file.F" .PD 0 ! .Ip "\fIfile\fR\fB.fpp\fR" 4 .IX Item "file.fpp" ! .Ip "\fIfile\fR\fB.FPP\fR" 4 .IX Item "file.FPP" .PD Fortran source code which must be preprocessed (with the traditional preprocessor). ! .Ip "\fIfile\fR\fB.r\fR" 4 .IX Item "file.r" Fortran source code which must be preprocessed with a \s-1RATFOR\s0 preprocessor (not included with \s-1GCC\s0). ! .Ip "\fIfile\fR\fB.ads\fR" 4 .IX Item "file.ads" Ada source code file which contains a library unit declaration (a declaration of a package, subprogram, or generic, or a generic instantiation), or a library unit renaming declaration (a package, generic, or subprogram renaming declaration). Such files are also called \fIspecs\fR. ! .Ip "\fIfile\fR\fB.adb\fR" 4 .IX Item "file.adb" Ada source code file containing a library unit body (a subprogram or package body). Such files are also called \fIbodies\fR. ! .Ip "\fIfile\fR\fB.s\fR" 4 .IX Item "file.s" Assembler code. ! .Ip "\fIfile\fR\fB.S\fR" 4 .IX Item "file.S" Assembler code which must be preprocessed. ! .Ip "\fIother\fR" 4 .IX Item "other" An object file to be fed straight into linking. Any file name with no recognized suffix is treated this way. .PP You can specify the input language explicitly with the \fB\-x\fR option: ! .Ip "\fB\-x\fR \fIlanguage\fR" 4 .IX Item "-x language" Specify explicitly the \fIlanguage\fR for the following input files (rather than letting the compiler choose a default based on the file *************** the next \fB\-x\fR option. Possible val *** 788,803 **** \& java \& treelang .Ve ! .IP "\fB\-x none\fR" 4 .IX Item "-x none" Turn off any specification of a language, so that subsequent files are handled according to their file name suffixes (as they are if \fB\-x\fR has not been used at all). ! .IP "\fB\-pass\-exit\-codes\fR" 4 .IX Item "-pass-exit-codes" Normally the \fBgcc\fR program will exit with the code of 1 if any phase of the compiler returns a non-success return code. If you specify ! \&\fB\-pass\-exit\-codes\fR, the \fBgcc\fR program will instead return with numerically highest error produced by any phase that returned an error indication. .PP --- 798,813 ---- \& java \& treelang .Ve ! .Ip "\fB\-x none\fR" 4 .IX Item "-x none" Turn off any specification of a language, so that subsequent files are handled according to their file name suffixes (as they are if \fB\-x\fR has not been used at all). ! .Ip "\fB\-pass-exit-codes\fR" 4 .IX Item "-pass-exit-codes" Normally the \fBgcc\fR program will exit with the code of 1 if any phase of the compiler returns a non-success return code. If you specify ! \&\fB\-pass-exit-codes\fR, the \fBgcc\fR program will instead return with numerically highest error produced by any phase that returned an error indication. .PP *************** If you only want some of the stages of c *** 806,812 **** one of the options \fB\-c\fR, \fB\-S\fR, or \fB\-E\fR to say where \&\fBgcc\fR is to stop. Note that some combinations (for example, \&\fB\-x cpp-output \-E\fR) instruct \fBgcc\fR to do nothing at all. ! .IP "\fB\-c\fR" 4 .IX Item "-c" Compile or assemble the source files, but do not link. The linking stage simply is not done. The ultimate output is in the form of an --- 816,822 ---- one of the options \fB\-c\fR, \fB\-S\fR, or \fB\-E\fR to say where \&\fBgcc\fR is to stop. Note that some combinations (for example, \&\fB\-x cpp-output \-E\fR) instruct \fBgcc\fR to do nothing at all. ! .Ip "\fB\-c\fR" 4 .IX Item "-c" Compile or assemble the source files, but do not link. The linking stage simply is not done. The ultimate output is in the form of an *************** the suffix \fB.c\fR, \fB.i\fR, \fB.s\fR, *** 817,823 **** .Sp Unrecognized input files, not requiring compilation or assembly, are ignored. ! .IP "\fB\-S\fR" 4 .IX Item "-S" Stop after the stage of compilation proper; do not assemble. The output is in the form of an assembler code file for each non-assembler input --- 827,833 ---- .Sp Unrecognized input files, not requiring compilation or assembly, are ignored. ! .Ip "\fB\-S\fR" 4 .IX Item "-S" Stop after the stage of compilation proper; do not assemble. The output is in the form of an assembler code file for each non-assembler input *************** By default, the assembler file name for *** 827,840 **** replacing the suffix \fB.c\fR, \fB.i\fR, etc., with \fB.s\fR. .Sp Input files that don't require compilation are ignored. ! .IP "\fB\-E\fR" 4 .IX Item "-E" Stop after the preprocessing stage; do not run the compiler proper. The output is in the form of preprocessed source code, which is sent to the standard output. .Sp Input files which don't require preprocessing are ignored. ! .IP "\fB\-o\fR \fIfile\fR" 4 .IX Item "-o file" Place output in file \fIfile\fR. This applies regardless to whatever sort of output is being produced, whether it be an executable file, --- 837,850 ---- replacing the suffix \fB.c\fR, \fB.i\fR, etc., with \fB.s\fR. .Sp Input files that don't require compilation are ignored. ! .Ip "\fB\-E\fR" 4 .IX Item "-E" Stop after the preprocessing stage; do not run the compiler proper. The output is in the form of preprocessed source code, which is sent to the standard output. .Sp Input files which don't require preprocessing are ignored. ! .Ip "\fB\-o\fR \fIfile\fR" 4 .IX Item "-o file" Place output in file \fIfile\fR. This applies regardless to whatever sort of output is being produced, whether it be an executable file, *************** If \fB\-o\fR is not specified, the defau *** 848,884 **** in \fIa.out\fR, the object file for \fI\fIsource\fI.\fIsuffix\fI\fR in \&\fI\fIsource\fI.o\fR, its assembler file in \fI\fIsource\fI.s\fR, and all preprocessed C source on standard output. ! .IP "\fB\-v\fR" 4 .IX Item "-v" Print (on standard error output) the commands executed to run the stages of compilation. Also print the version number of the compiler driver program and of the preprocessor and the compiler proper. ! .IP "\fB\-###\fR" 4 .IX Item "-###" Like \fB\-v\fR except the commands are not executed and all command arguments are quoted. This is useful for shell scripts to capture the driver-generated command lines. ! .IP "\fB\-pipe\fR" 4 .IX Item "-pipe" Use pipes rather than temporary files for communication between the various stages of compilation. This fails to work on some systems where the assembler is unable to read from a pipe; but the \s-1GNU\s0 assembler has no trouble. ! .IP "\fB\-\-help\fR" 4 ! .IX Item "--help" Print (on the standard output) a description of the command line options understood by \fBgcc\fR. If the \fB\-v\fR option is also specified ! then \fB\-\-help\fR will also be passed on to the various processes invoked by \fBgcc\fR, so that they can display the command line options they accept. If the \fB\-W\fR option is also specified then command line options which have no documentation associated with them will also be displayed. ! .IP "\fB\-\-target\-help\fR" 4 ! .IX Item "--target-help" Print (on the standard output) a description of target specific command line options for each tool. ! .IP "\fB\-\-version\fR" 4 ! .IX Item "--version" Display the version number and copyrights of the invoked \s-1GCC\s0. .Sh "Compiling \*(C+ Programs" .IX Subsection "Compiling Programs" --- 858,894 ---- in \fIa.out\fR, the object file for \fI\fIsource\fI.\fIsuffix\fI\fR in \&\fI\fIsource\fI.o\fR, its assembler file in \fI\fIsource\fI.s\fR, and all preprocessed C source on standard output. ! .Ip "\fB\-v\fR" 4 .IX Item "-v" Print (on standard error output) the commands executed to run the stages of compilation. Also print the version number of the compiler driver program and of the preprocessor and the compiler proper. ! .Ip "\fB\-###\fR" 4 .IX Item "-###" Like \fB\-v\fR except the commands are not executed and all command arguments are quoted. This is useful for shell scripts to capture the driver-generated command lines. ! .Ip "\fB\-pipe\fR" 4 .IX Item "-pipe" Use pipes rather than temporary files for communication between the various stages of compilation. This fails to work on some systems where the assembler is unable to read from a pipe; but the \s-1GNU\s0 assembler has no trouble. ! .Ip "\fB\*(--help\fR" 4 ! .IX Item "help" Print (on the standard output) a description of the command line options understood by \fBgcc\fR. If the \fB\-v\fR option is also specified ! then \fB\*(--help\fR will also be passed on to the various processes invoked by \fBgcc\fR, so that they can display the command line options they accept. If the \fB\-W\fR option is also specified then command line options which have no documentation associated with them will also be displayed. ! .Ip "\fB\*(--target-help\fR" 4 ! .IX Item "target-help" Print (on the standard output) a description of target specific command line options for each tool. ! .Ip "\fB\*(--version\fR" 4 ! .IX Item "version" Display the version number and copyrights of the invoked \s-1GCC\s0. .Sh "Compiling \*(C+ Programs" .IX Subsection "Compiling Programs" *************** languages; or options that are meaningfu *** 905,912 **** .Sh "Options Controlling C Dialect" .IX Subsection "Options Controlling C Dialect" The following options control the dialect of C (or languages derived ! from C, such as \*(C+ and Objective\-C) that the compiler accepts: ! .IP "\fB\-ansi\fR" 4 .IX Item "-ansi" In C mode, support all \s-1ISO\s0 C90 programs. In \*(C+ mode, remove \s-1GNU\s0 extensions that conflict with \s-1ISO\s0 \*(C+. --- 915,922 ---- .Sh "Options Controlling C Dialect" .IX Subsection "Options Controlling C Dialect" The following options control the dialect of C (or languages derived ! from C, such as \*(C+ and Objective-C) that the compiler accepts: ! .Ip "\fB\-ansi\fR" 4 .IX Item "-ansi" In C mode, support all \s-1ISO\s0 C90 programs. In \*(C+ mode, remove \s-1GNU\s0 extensions that conflict with \s-1ISO\s0 \*(C+. *************** programs that might use these names for *** 941,990 **** Functions which would normally be built in but do not have semantics defined by \s-1ISO\s0 C (such as \f(CW\*(C`alloca\*(C'\fR and \f(CW\*(C`ffs\*(C'\fR) are not built-in functions with \fB\-ansi\fR is used. ! .IP "\fB\-std=\fR" 4 .IX Item "-std=" Determine the language standard. This option is currently only supported when compiling C or \*(C+. A value for this option must be provided; possible values are .RS 4 ! .IP "\fBc89\fR" 4 .IX Item "c89" .PD 0 ! .IP "\fBiso9899:1990\fR" 4 .IX Item "iso9899:1990" .PD \&\s-1ISO\s0 C90 (same as \fB\-ansi\fR). ! .IP "\fBiso9899:199409\fR" 4 .IX Item "iso9899:199409" \&\s-1ISO\s0 C90 as modified in amendment 1. ! .IP "\fBc99\fR" 4 .IX Item "c99" .PD 0 ! .IP "\fBc9x\fR" 4 .IX Item "c9x" ! .IP "\fBiso9899:1999\fR" 4 .IX Item "iso9899:1999" ! .IP "\fBiso9899:199x\fR" 4 .IX Item "iso9899:199x" .PD \&\s-1ISO\s0 C99. Note that this standard is not yet fully supported; see ! <\fBhttp://gcc.gnu.org/gcc\-3.3/c99status.html\fR> for more information. The names \fBc9x\fR and \fBiso9899:199x\fR are deprecated. ! .IP "\fBgnu89\fR" 4 .IX Item "gnu89" Default, \s-1ISO\s0 C90 plus \s-1GNU\s0 extensions (including some C99 features). ! .IP "\fBgnu99\fR" 4 .IX Item "gnu99" .PD 0 ! .IP "\fBgnu9x\fR" 4 .IX Item "gnu9x" .PD \&\s-1ISO\s0 C99 plus \s-1GNU\s0 extensions. When \s-1ISO\s0 C99 is fully implemented in \s-1GCC\s0, this will become the default. The name \fBgnu9x\fR is deprecated. ! .IP "\fBc++98\fR" 4 .IX Item "c++98" The 1998 \s-1ISO\s0 \*(C+ standard plus amendments. ! .IP "\fBgnu++98\fR" 4 .IX Item "gnu++98" The same as \fB\-std=c++98\fR plus \s-1GNU\s0 extensions. This is the default for \*(C+ code. --- 951,1000 ---- Functions which would normally be built in but do not have semantics defined by \s-1ISO\s0 C (such as \f(CW\*(C`alloca\*(C'\fR and \f(CW\*(C`ffs\*(C'\fR) are not built-in functions with \fB\-ansi\fR is used. ! .Ip "\fB\-std=\fR" 4 .IX Item "-std=" Determine the language standard. This option is currently only supported when compiling C or \*(C+. A value for this option must be provided; possible values are .RS 4 ! .Ip "\fBc89\fR" 4 .IX Item "c89" .PD 0 ! .Ip "\fBiso9899:1990\fR" 4 .IX Item "iso9899:1990" .PD \&\s-1ISO\s0 C90 (same as \fB\-ansi\fR). ! .Ip "\fBiso9899:199409\fR" 4 .IX Item "iso9899:199409" \&\s-1ISO\s0 C90 as modified in amendment 1. ! .Ip "\fBc99\fR" 4 .IX Item "c99" .PD 0 ! .Ip "\fBc9x\fR" 4 .IX Item "c9x" ! .Ip "\fBiso9899:1999\fR" 4 .IX Item "iso9899:1999" ! .Ip "\fBiso9899:199x\fR" 4 .IX Item "iso9899:199x" .PD \&\s-1ISO\s0 C99. Note that this standard is not yet fully supported; see ! <\fBhttp://gcc.gnu.org/gcc-3.3/c99status.html\fR> for more information. The names \fBc9x\fR and \fBiso9899:199x\fR are deprecated. ! .Ip "\fBgnu89\fR" 4 .IX Item "gnu89" Default, \s-1ISO\s0 C90 plus \s-1GNU\s0 extensions (including some C99 features). ! .Ip "\fBgnu99\fR" 4 .IX Item "gnu99" .PD 0 ! .Ip "\fBgnu9x\fR" 4 .IX Item "gnu9x" .PD \&\s-1ISO\s0 C99 plus \s-1GNU\s0 extensions. When \s-1ISO\s0 C99 is fully implemented in \s-1GCC\s0, this will become the default. The name \fBgnu9x\fR is deprecated. ! .Ip "\fBc++98\fR" 4 .IX Item "c++98" The 1998 \s-1ISO\s0 \*(C+ standard plus amendments. ! .Ip "\fBgnu++98\fR" 4 .IX Item "gnu++98" The same as \fB\-std=c++98\fR plus \s-1GNU\s0 extensions. This is the default for \*(C+ code. *************** effects as \fB\-ansi\fR, except that fea *** 1001,1007 **** but are in the specified version (for example, \fB//\fR comments and the \f(CW\*(C`inline\*(C'\fR keyword in \s-1ISO\s0 C99) are not disabled. .RE ! .IP "\fB\-aux\-info\fR \fIfilename\fR" 4 .IX Item "-aux-info filename" Output to the given filename prototyped declarations for all functions declared and/or defined in a translation unit, including those in header --- 1011,1017 ---- but are in the specified version (for example, \fB//\fR comments and the \f(CW\*(C`inline\*(C'\fR keyword in \s-1ISO\s0 C99) are not disabled. .RE ! .Ip "\fB\-aux-info\fR \fIfilename\fR" 4 .IX Item "-aux-info filename" Output to the given filename prototyped declarations for all functions declared and/or defined in a translation unit, including those in header *************** implicit, prototyped or unprototyped (\f *** 1013,1038 **** \&\fBO\fR for old, respectively, in the first character after the line number and the colon), and whether it came from a declaration or a definition (\fBC\fR or \fBF\fR, respectively, in the following ! character). In the case of function definitions, a K&R\-style list of arguments followed by their declarations is also provided, inside comments, after the declaration. ! .IP "\fB\-fno\-asm\fR" 4 .IX Item "-fno-asm" Do not recognize \f(CW\*(C`asm\*(C'\fR, \f(CW\*(C`inline\*(C'\fR or \f(CW\*(C`typeof\*(C'\fR as a keyword, so that code can use these words as identifiers. You can use the keywords \f(CW\*(C`_\|_asm_\|_\*(C'\fR, \f(CW\*(C`_\|_inline_\|_\*(C'\fR and \f(CW\*(C`_\|_typeof_\|_\*(C'\fR ! instead. \fB\-ansi\fR implies \fB\-fno\-asm\fR. .Sp In \*(C+, this switch only affects the \f(CW\*(C`typeof\*(C'\fR keyword, since \&\f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`inline\*(C'\fR are standard keywords. You may want to ! use the \fB\-fno\-gnu\-keywords\fR flag instead, which has the same effect. In C99 mode (\fB\-std=c99\fR or \fB\-std=gnu99\fR), this switch only affects the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR keywords, since \&\f(CW\*(C`inline\*(C'\fR is a standard keyword in \s-1ISO\s0 C99. ! .IP "\fB\-fno\-builtin\fR" 4 .IX Item "-fno-builtin" .PD 0 ! .IP "\fB\-fno\-builtin\-\fR\fIfunction\fR" 4 .IX Item "-fno-builtin-function" .PD Don't recognize built-in functions that do not begin with --- 1023,1048 ---- \&\fBO\fR for old, respectively, in the first character after the line number and the colon), and whether it came from a declaration or a definition (\fBC\fR or \fBF\fR, respectively, in the following ! character). In the case of function definitions, a K&R-style list of arguments followed by their declarations is also provided, inside comments, after the declaration. ! .Ip "\fB\-fno-asm\fR" 4 .IX Item "-fno-asm" Do not recognize \f(CW\*(C`asm\*(C'\fR, \f(CW\*(C`inline\*(C'\fR or \f(CW\*(C`typeof\*(C'\fR as a keyword, so that code can use these words as identifiers. You can use the keywords \f(CW\*(C`_\|_asm_\|_\*(C'\fR, \f(CW\*(C`_\|_inline_\|_\*(C'\fR and \f(CW\*(C`_\|_typeof_\|_\*(C'\fR ! instead. \fB\-ansi\fR implies \fB\-fno-asm\fR. .Sp In \*(C+, this switch only affects the \f(CW\*(C`typeof\*(C'\fR keyword, since \&\f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`inline\*(C'\fR are standard keywords. You may want to ! use the \fB\-fno-gnu-keywords\fR flag instead, which has the same effect. In C99 mode (\fB\-std=c99\fR or \fB\-std=gnu99\fR), this switch only affects the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR keywords, since \&\f(CW\*(C`inline\*(C'\fR is a standard keyword in \s-1ISO\s0 C99. ! .Ip "\fB\-fno-builtin\fR" 4 .IX Item "-fno-builtin" .PD 0 ! .Ip "\fB\-fno-builtin-\fR\fIfunction\fR" 4 .IX Item "-fno-builtin-function" .PD Don't recognize built-in functions that do not begin with *************** and faster, but since the function calls *** 1046,1086 **** cannot set a breakpoint on those calls, nor can you change the behavior of the functions by linking with a different library. .Sp ! With the \fB\-fno\-builtin\-\fR\fIfunction\fR option only the built-in function \fIfunction\fR is disabled. \fIfunction\fR must not begin with \fB_\|_builtin_\fR. If a function is named this is not built-in in this version of \s-1GCC\s0, this option is ignored. There is no corresponding ! \&\fB\-fbuiltin\-\fR\fIfunction\fR option; if you wish to enable ! built-in functions selectively when using \fB\-fno\-builtin\fR or \&\fB\-ffreestanding\fR, you may define macros such as: .Sp .Vb 2 \& #define abs(n) __builtin_abs ((n)) \& #define strcpy(d, s) __builtin_strcpy ((d), (s)) .Ve ! .IP "\fB\-fhosted\fR" 4 .IX Item "-fhosted" Assert that compilation takes place in a hosted environment. This implies \&\fB\-fbuiltin\fR. A hosted environment is one in which the entire standard library is available, and in which \f(CW\*(C`main\*(C'\fR has a return type of \f(CW\*(C`int\*(C'\fR. Examples are nearly everything except a kernel. ! This is equivalent to \fB\-fno\-freestanding\fR. ! .IP "\fB\-ffreestanding\fR" 4 .IX Item "-ffreestanding" Assert that compilation takes place in a freestanding environment. This ! implies \fB\-fno\-builtin\fR. A freestanding environment is one in which the standard library may not exist, and program startup may not necessarily be at \f(CW\*(C`main\*(C'\fR. The most obvious example is an \s-1OS\s0 kernel. ! This is equivalent to \fB\-fno\-hosted\fR. ! .IP "\fB\-fms\-extensions\fR" 4 .IX Item "-fms-extensions" Accept some non-standard constructs used in Microsoft header files. ! .IP "\fB\-trigraphs\fR" 4 .IX Item "-trigraphs" Support \s-1ISO\s0 C trigraphs. The \fB\-ansi\fR option (and \fB\-std\fR options for strict \s-1ISO\s0 C conformance) implies \fB\-trigraphs\fR. ! .IP "\fB\-no\-integrated\-cpp\fR" 4 .IX Item "-no-integrated-cpp" Performs a compilation in two passes: preprocessing and compiling. This option allows a user supplied \*(L"cc1\*(R", \*(L"cc1plus\*(R", or \*(L"cc1obj\*(R" via the --- 1056,1096 ---- cannot set a breakpoint on those calls, nor can you change the behavior of the functions by linking with a different library. .Sp ! With the \fB\-fno-builtin-\fR\fIfunction\fR option only the built-in function \fIfunction\fR is disabled. \fIfunction\fR must not begin with \fB_\|_builtin_\fR. If a function is named this is not built-in in this version of \s-1GCC\s0, this option is ignored. There is no corresponding ! \&\fB\-fbuiltin-\fR\fIfunction\fR option; if you wish to enable ! built-in functions selectively when using \fB\-fno-builtin\fR or \&\fB\-ffreestanding\fR, you may define macros such as: .Sp .Vb 2 \& #define abs(n) __builtin_abs ((n)) \& #define strcpy(d, s) __builtin_strcpy ((d), (s)) .Ve ! .Ip "\fB\-fhosted\fR" 4 .IX Item "-fhosted" Assert that compilation takes place in a hosted environment. This implies \&\fB\-fbuiltin\fR. A hosted environment is one in which the entire standard library is available, and in which \f(CW\*(C`main\*(C'\fR has a return type of \f(CW\*(C`int\*(C'\fR. Examples are nearly everything except a kernel. ! This is equivalent to \fB\-fno-freestanding\fR. ! .Ip "\fB\-ffreestanding\fR" 4 .IX Item "-ffreestanding" Assert that compilation takes place in a freestanding environment. This ! implies \fB\-fno-builtin\fR. A freestanding environment is one in which the standard library may not exist, and program startup may not necessarily be at \f(CW\*(C`main\*(C'\fR. The most obvious example is an \s-1OS\s0 kernel. ! This is equivalent to \fB\-fno-hosted\fR. ! .Ip "\fB\-fms-extensions\fR" 4 .IX Item "-fms-extensions" Accept some non-standard constructs used in Microsoft header files. ! .Ip "\fB\-trigraphs\fR" 4 .IX Item "-trigraphs" Support \s-1ISO\s0 C trigraphs. The \fB\-ansi\fR option (and \fB\-std\fR options for strict \s-1ISO\s0 C conformance) implies \fB\-trigraphs\fR. ! .Ip "\fB\-no-integrated-cpp\fR" 4 .IX Item "-no-integrated-cpp" Performs a compilation in two passes: preprocessing and compiling. This option allows a user supplied \*(L"cc1\*(R", \*(L"cc1plus\*(R", or \*(L"cc1obj\*(R" via the *************** compiling. The default is to use the int *** 1090,1111 **** .Sp The semantics of this option will change if \*(L"cc1\*(R", \*(L"cc1plus\*(R", and \&\*(L"cc1obj\*(R" are merged. ! .IP "\fB\-traditional\fR" 4 .IX Item "-traditional" .PD 0 ! .IP "\fB\-traditional\-cpp\fR" 4 .IX Item "-traditional-cpp" .PD Formerly, these options caused \s-1GCC\s0 to attempt to emulate a pre-standard C compiler. They are now only supported with the \fB\-E\fR switch. The preprocessor continues to support a pre-standard mode. See the \s-1GNU\s0 \&\s-1CPP\s0 manual for details. ! .IP "\fB\-fcond\-mismatch\fR" 4 .IX Item "-fcond-mismatch" Allow conditional expressions with mismatched types in the second and third arguments. The value of such an expression is void. This option is not supported for \*(C+. ! .IP "\fB\-funsigned\-char\fR" 4 .IX Item "-funsigned-char" Let the type \f(CW\*(C`char\*(C'\fR be unsigned, like \f(CW\*(C`unsigned char\*(C'\fR. .Sp --- 1100,1121 ---- .Sp The semantics of this option will change if \*(L"cc1\*(R", \*(L"cc1plus\*(R", and \&\*(L"cc1obj\*(R" are merged. ! .Ip "\fB\-traditional\fR" 4 .IX Item "-traditional" .PD 0 ! .Ip "\fB\-traditional-cpp\fR" 4 .IX Item "-traditional-cpp" .PD Formerly, these options caused \s-1GCC\s0 to attempt to emulate a pre-standard C compiler. They are now only supported with the \fB\-E\fR switch. The preprocessor continues to support a pre-standard mode. See the \s-1GNU\s0 \&\s-1CPP\s0 manual for details. ! .Ip "\fB\-fcond-mismatch\fR" 4 .IX Item "-fcond-mismatch" Allow conditional expressions with mismatched types in the second and third arguments. The value of such an expression is void. This option is not supported for \*(C+. ! .Ip "\fB\-funsigned-char\fR" 4 .IX Item "-funsigned-char" Let the type \f(CW\*(C`char\*(C'\fR be unsigned, like \f(CW\*(C`unsigned char\*(C'\fR. .Sp *************** make such a program work with the opposi *** 1123,1150 **** The type \f(CW\*(C`char\*(C'\fR is always a distinct type from each of \&\f(CW\*(C`signed char\*(C'\fR or \f(CW\*(C`unsigned char\*(C'\fR, even though its behavior is always just like one of those two. ! .IP "\fB\-fsigned\-char\fR" 4 .IX Item "-fsigned-char" Let the type \f(CW\*(C`char\*(C'\fR be signed, like \f(CW\*(C`signed char\*(C'\fR. .Sp ! Note that this is equivalent to \fB\-fno\-unsigned\-char\fR, which is ! the negative form of \fB\-funsigned\-char\fR. Likewise, the option ! \&\fB\-fno\-signed\-char\fR is equivalent to \fB\-funsigned\-char\fR. ! .IP "\fB\-fsigned\-bitfields\fR" 4 .IX Item "-fsigned-bitfields" .PD 0 ! .IP "\fB\-funsigned\-bitfields\fR" 4 .IX Item "-funsigned-bitfields" ! .IP "\fB\-fno\-signed\-bitfields\fR" 4 .IX Item "-fno-signed-bitfields" ! .IP "\fB\-fno\-unsigned\-bitfields\fR" 4 .IX Item "-fno-unsigned-bitfields" .PD These options control whether a bit-field is signed or unsigned, when the declaration does not use either \f(CW\*(C`signed\*(C'\fR or \f(CW\*(C`unsigned\*(C'\fR. By default, such a bit-field is signed, because this is consistent: the basic integer types such as \f(CW\*(C`int\*(C'\fR are signed types. ! .IP "\fB\-fwritable\-strings\fR" 4 .IX Item "-fwritable-strings" Store string constants in the writable data segment and don't uniquize them. This is for compatibility with old programs which assume they can --- 1133,1160 ---- The type \f(CW\*(C`char\*(C'\fR is always a distinct type from each of \&\f(CW\*(C`signed char\*(C'\fR or \f(CW\*(C`unsigned char\*(C'\fR, even though its behavior is always just like one of those two. ! .Ip "\fB\-fsigned-char\fR" 4 .IX Item "-fsigned-char" Let the type \f(CW\*(C`char\*(C'\fR be signed, like \f(CW\*(C`signed char\*(C'\fR. .Sp ! Note that this is equivalent to \fB\-fno-unsigned-char\fR, which is ! the negative form of \fB\-funsigned-char\fR. Likewise, the option ! \&\fB\-fno-signed-char\fR is equivalent to \fB\-funsigned-char\fR. ! .Ip "\fB\-fsigned-bitfields\fR" 4 .IX Item "-fsigned-bitfields" .PD 0 ! .Ip "\fB\-funsigned-bitfields\fR" 4 .IX Item "-funsigned-bitfields" ! .Ip "\fB\-fno-signed-bitfields\fR" 4 .IX Item "-fno-signed-bitfields" ! .Ip "\fB\-fno-unsigned-bitfields\fR" 4 .IX Item "-fno-unsigned-bitfields" .PD These options control whether a bit-field is signed or unsigned, when the declaration does not use either \f(CW\*(C`signed\*(C'\fR or \f(CW\*(C`unsigned\*(C'\fR. By default, such a bit-field is signed, because this is consistent: the basic integer types such as \f(CW\*(C`int\*(C'\fR are signed types. ! .Ip "\fB\-fwritable-strings\fR" 4 .IX Item "-fwritable-strings" Store string constants in the writable data segment and don't uniquize them. This is for compatibility with old programs which assume they can *************** might compile a file \f(CW\*(C`firstClas *** 1162,1174 **** .Vb 1 \& g++ -g -frepo -O -c firstClass.C .Ve - .PP In this example, only \fB\-frepo\fR is an option meant only for \*(C+ programs; you can use the other options with any language supported by \s-1GCC\s0. .PP Here is a list of options that are \fIonly\fR for compiling \*(C+ programs: ! .IP "\fB\-fabi\-version=\fR\fIn\fR" 4 .IX Item "-fabi-version=n" Use version \fIn\fR of the \*(C+ \s-1ABI\s0. Version 1 is the version of the \*(C+ \&\s-1ABI\s0 that first appeared in G++ 3.2. Version 0 will always be the --- 1172,1183 ---- .Vb 1 \& g++ -g -frepo -O -c firstClass.C .Ve In this example, only \fB\-frepo\fR is an option meant only for \*(C+ programs; you can use the other options with any language supported by \s-1GCC\s0. .PP Here is a list of options that are \fIonly\fR for compiling \*(C+ programs: ! .Ip "\fB\-fabi-version=\fR\fIn\fR" 4 .IX Item "-fabi-version=n" Use version \fIn\fR of the \*(C+ \s-1ABI\s0. Version 1 is the version of the \*(C+ \&\s-1ABI\s0 that first appeared in G++ 3.2. Version 0 will always be the *************** Therefore, the \s-1ABI\s0 obtained using *** 1177,1198 **** fixed. .Sp The default is version 1. ! .IP "\fB\-fno\-access\-control\fR" 4 .IX Item "-fno-access-control" Turn off all access checking. This switch is mainly useful for working around bugs in the access control code. ! .IP "\fB\-fcheck\-new\fR" 4 .IX Item "-fcheck-new" Check that the pointer returned by \f(CW\*(C`operator new\*(C'\fR is non-null before attempting to modify the storage allocated. This check is normally unnecessary because the \*(C+ standard specifies that ! \&\f(CW\*(C`operator new\*(C'\fR will only return \f(CW0\fR if it is declared \&\fB\f(BIthrow()\fB\fR, in which case the compiler will always check the return value even without this option. In all other cases, when \&\f(CW\*(C`operator new\*(C'\fR has a non-empty exception specification, memory exhaustion is signalled by throwing \f(CW\*(C`std::bad_alloc\*(C'\fR. See also \&\fBnew (nothrow)\fR. ! .IP "\fB\-fconserve\-space\fR" 4 .IX Item "-fconserve-space" Put uninitialized or runtime-initialized global variables into the common segment, as C does. This saves space in the executable at the --- 1186,1207 ---- fixed. .Sp The default is version 1. ! .Ip "\fB\-fno-access-control\fR" 4 .IX Item "-fno-access-control" Turn off all access checking. This switch is mainly useful for working around bugs in the access control code. ! .Ip "\fB\-fcheck-new\fR" 4 .IX Item "-fcheck-new" Check that the pointer returned by \f(CW\*(C`operator new\*(C'\fR is non-null before attempting to modify the storage allocated. This check is normally unnecessary because the \*(C+ standard specifies that ! \&\f(CW\*(C`operator new\*(C'\fR will only return \f(CW\*(C`0\*(C'\fR if it is declared \&\fB\f(BIthrow()\fB\fR, in which case the compiler will always check the return value even without this option. In all other cases, when \&\f(CW\*(C`operator new\*(C'\fR has a non-empty exception specification, memory exhaustion is signalled by throwing \f(CW\*(C`std::bad_alloc\*(C'\fR. See also \&\fBnew (nothrow)\fR. ! .Ip "\fB\-fconserve-space\fR" 4 .IX Item "-fconserve-space" Put uninitialized or runtime-initialized global variables into the common segment, as C does. This saves space in the executable at the *************** two definitions were merged. *** 1203,1261 **** .Sp This option is no longer useful on most targets, now that support has been added for putting variables into \s-1BSS\s0 without making them common. ! .IP "\fB\-fno\-const\-strings\fR" 4 .IX Item "-fno-const-strings" Give string constants type \f(CW\*(C`char *\*(C'\fR instead of type \f(CW\*(C`const char *\*(C'\fR. By default, G++ uses type \f(CW\*(C`const char *\*(C'\fR as required by ! the standard. Even if you use \fB\-fno\-const\-strings\fR, you cannot actually modify the value of a string constant, unless you also use ! \&\fB\-fwritable\-strings\fR. .Sp This option might be removed in a future release of G++. For maximum portability, you should structure your code so that it works with string constants that have type \f(CW\*(C`const char *\*(C'\fR. ! .IP "\fB\-fdollars\-in\-identifiers\fR" 4 .IX Item "-fdollars-in-identifiers" Accept \fB$\fR in identifiers. You can also explicitly prohibit use of ! \&\fB$\fR with the option \fB\-fno\-dollars\-in\-identifiers\fR. (\s-1GNU\s0 C allows \&\fB$\fR by default on most target systems, but there are a few exceptions.) Traditional C allowed the character \fB$\fR to form part of identifiers. However, \s-1ISO\s0 C and \*(C+ forbid \fB$\fR in identifiers. ! .IP "\fB\-fno\-elide\-constructors\fR" 4 .IX Item "-fno-elide-constructors" The \*(C+ standard allows an implementation to omit creating a temporary which is only used to initialize another object of the same type. Specifying this option disables that optimization, and forces G++ to call the copy constructor in all cases. ! .IP "\fB\-fno\-enforce\-eh\-specs\fR" 4 .IX Item "-fno-enforce-eh-specs" Don't check for violation of exception specifications at runtime. This option violates the \*(C+ standard, but may be useful for reducing code size in production builds, much like defining \fB\s-1NDEBUG\s0\fR. The compiler will still optimize based on the exception specifications. ! .IP "\fB\-fexternal\-templates\fR" 4 .IX Item "-fexternal-templates" Cause \fB#pragma interface\fR and \fBimplementation\fR to apply to template instantiation; template instances are emitted or not according to the location of the template definition. .Sp This option is deprecated. ! .IP "\fB\-falt\-external\-templates\fR" 4 .IX Item "-falt-external-templates" ! Similar to \fB\-fexternal\-templates\fR, but template instances are emitted or not according to the place where they are first instantiated. .Sp This option is deprecated. ! .IP "\fB\-ffor\-scope\fR" 4 .IX Item "-ffor-scope" .PD 0 ! .IP "\fB\-fno\-for\-scope\fR" 4 .IX Item "-fno-for-scope" .PD ! If \fB\-ffor\-scope\fR is specified, the scope of variables declared in a \fIfor-init-statement\fR is limited to the \fBfor\fR loop itself, as specified by the \*(C+ standard. ! If \fB\-fno\-for\-scope\fR is specified, the scope of variables declared in a \fIfor-init-statement\fR extends to the end of the enclosing scope, as was the case in old versions of G++, and other (traditional) implementations of \*(C+. --- 1212,1270 ---- .Sp This option is no longer useful on most targets, now that support has been added for putting variables into \s-1BSS\s0 without making them common. ! .Ip "\fB\-fno-const-strings\fR" 4 .IX Item "-fno-const-strings" Give string constants type \f(CW\*(C`char *\*(C'\fR instead of type \f(CW\*(C`const char *\*(C'\fR. By default, G++ uses type \f(CW\*(C`const char *\*(C'\fR as required by ! the standard. Even if you use \fB\-fno-const-strings\fR, you cannot actually modify the value of a string constant, unless you also use ! \&\fB\-fwritable-strings\fR. .Sp This option might be removed in a future release of G++. For maximum portability, you should structure your code so that it works with string constants that have type \f(CW\*(C`const char *\*(C'\fR. ! .Ip "\fB\-fdollars-in-identifiers\fR" 4 .IX Item "-fdollars-in-identifiers" Accept \fB$\fR in identifiers. You can also explicitly prohibit use of ! \&\fB$\fR with the option \fB\-fno-dollars-in-identifiers\fR. (\s-1GNU\s0 C allows \&\fB$\fR by default on most target systems, but there are a few exceptions.) Traditional C allowed the character \fB$\fR to form part of identifiers. However, \s-1ISO\s0 C and \*(C+ forbid \fB$\fR in identifiers. ! .Ip "\fB\-fno-elide-constructors\fR" 4 .IX Item "-fno-elide-constructors" The \*(C+ standard allows an implementation to omit creating a temporary which is only used to initialize another object of the same type. Specifying this option disables that optimization, and forces G++ to call the copy constructor in all cases. ! .Ip "\fB\-fno-enforce-eh-specs\fR" 4 .IX Item "-fno-enforce-eh-specs" Don't check for violation of exception specifications at runtime. This option violates the \*(C+ standard, but may be useful for reducing code size in production builds, much like defining \fB\s-1NDEBUG\s0\fR. The compiler will still optimize based on the exception specifications. ! .Ip "\fB\-fexternal-templates\fR" 4 .IX Item "-fexternal-templates" Cause \fB#pragma interface\fR and \fBimplementation\fR to apply to template instantiation; template instances are emitted or not according to the location of the template definition. .Sp This option is deprecated. ! .Ip "\fB\-falt-external-templates\fR" 4 .IX Item "-falt-external-templates" ! Similar to \fB\-fexternal-templates\fR, but template instances are emitted or not according to the place where they are first instantiated. .Sp This option is deprecated. ! .Ip "\fB\-ffor-scope\fR" 4 .IX Item "-ffor-scope" .PD 0 ! .Ip "\fB\-fno-for-scope\fR" 4 .IX Item "-fno-for-scope" .PD ! If \fB\-ffor-scope\fR is specified, the scope of variables declared in a \fIfor-init-statement\fR is limited to the \fBfor\fR loop itself, as specified by the \*(C+ standard. ! If \fB\-fno-for-scope\fR is specified, the scope of variables declared in a \fIfor-init-statement\fR extends to the end of the enclosing scope, as was the case in old versions of G++, and other (traditional) implementations of \*(C+. *************** implementations of \*(C+. *** 1263,1316 **** The default if neither flag is given to follow the standard, but to allow and give a warning for old-style code that would otherwise be invalid, or have different behavior. ! .IP "\fB\-fno\-gnu\-keywords\fR" 4 .IX Item "-fno-gnu-keywords" Do not recognize \f(CW\*(C`typeof\*(C'\fR as a keyword, so that code can use this word as an identifier. You can use the keyword \f(CW\*(C`_\|_typeof_\|_\*(C'\fR instead. ! \&\fB\-ansi\fR implies \fB\-fno\-gnu\-keywords\fR. ! .IP "\fB\-fno\-implicit\-templates\fR" 4 .IX Item "-fno-implicit-templates" Never emit code for non-inline templates which are instantiated implicitly (i.e. by use); only emit code for explicit instantiations. ! .IP "\fB\-fno\-implicit\-inline\-templates\fR" 4 .IX Item "-fno-implicit-inline-templates" Don't emit code for implicit instantiations of inline templates, either. The default is to handle inlines differently so that compiles with and without optimization will need the same set of explicit instantiations. ! .IP "\fB\-fno\-implement\-inlines\fR" 4 .IX Item "-fno-implement-inlines" To save space, do not emit out-of-line copies of inline functions controlled by \fB#pragma implementation\fR. This will cause linker errors if these functions are not inlined everywhere they are called. ! .IP "\fB\-fms\-extensions\fR" 4 .IX Item "-fms-extensions" Disable pedantic warnings about constructs used in \s-1MFC\s0, such as implicit int and getting a pointer to member function via non-standard syntax. ! .IP "\fB\-fno\-nonansi\-builtins\fR" 4 .IX Item "-fno-nonansi-builtins" Disable built-in declarations of functions that are not mandated by \&\s-1ANSI/ISO\s0 C. These include \f(CW\*(C`ffs\*(C'\fR, \f(CW\*(C`alloca\*(C'\fR, \f(CW\*(C`_exit\*(C'\fR, \&\f(CW\*(C`index\*(C'\fR, \f(CW\*(C`bzero\*(C'\fR, \f(CW\*(C`conjf\*(C'\fR, and other related functions. ! .IP "\fB\-fno\-operator\-names\fR" 4 .IX Item "-fno-operator-names" Do not treat the operator name keywords \f(CW\*(C`and\*(C'\fR, \f(CW\*(C`bitand\*(C'\fR, \&\f(CW\*(C`bitor\*(C'\fR, \f(CW\*(C`compl\*(C'\fR, \f(CW\*(C`not\*(C'\fR, \f(CW\*(C`or\*(C'\fR and \f(CW\*(C`xor\*(C'\fR as synonyms as keywords. ! .IP "\fB\-fno\-optional\-diags\fR" 4 .IX Item "-fno-optional-diags" Disable diagnostics that the standard says a compiler does not need to issue. Currently, the only such diagnostic issued by G++ is the one for a name having multiple meanings within a class. ! .IP "\fB\-fpermissive\fR" 4 .IX Item "-fpermissive" Downgrade some diagnostics about nonconformant code from errors to warnings. Thus, using \fB\-fpermissive\fR will allow some nonconforming code to compile. ! .IP "\fB\-frepo\fR" 4 .IX Item "-frepo" Enable automatic template instantiation at link time. This option also ! implies \fB\-fno\-implicit\-templates\fR. ! .IP "\fB\-fno\-rtti\fR" 4 .IX Item "-fno-rtti" Disable generation of information about every class with virtual functions for use by the \*(C+ runtime type identification features --- 1272,1325 ---- The default if neither flag is given to follow the standard, but to allow and give a warning for old-style code that would otherwise be invalid, or have different behavior. ! .Ip "\fB\-fno-gnu-keywords\fR" 4 .IX Item "-fno-gnu-keywords" Do not recognize \f(CW\*(C`typeof\*(C'\fR as a keyword, so that code can use this word as an identifier. You can use the keyword \f(CW\*(C`_\|_typeof_\|_\*(C'\fR instead. ! \&\fB\-ansi\fR implies \fB\-fno-gnu-keywords\fR. ! .Ip "\fB\-fno-implicit-templates\fR" 4 .IX Item "-fno-implicit-templates" Never emit code for non-inline templates which are instantiated implicitly (i.e. by use); only emit code for explicit instantiations. ! .Ip "\fB\-fno-implicit-inline-templates\fR" 4 .IX Item "-fno-implicit-inline-templates" Don't emit code for implicit instantiations of inline templates, either. The default is to handle inlines differently so that compiles with and without optimization will need the same set of explicit instantiations. ! .Ip "\fB\-fno-implement-inlines\fR" 4 .IX Item "-fno-implement-inlines" To save space, do not emit out-of-line copies of inline functions controlled by \fB#pragma implementation\fR. This will cause linker errors if these functions are not inlined everywhere they are called. ! .Ip "\fB\-fms-extensions\fR" 4 .IX Item "-fms-extensions" Disable pedantic warnings about constructs used in \s-1MFC\s0, such as implicit int and getting a pointer to member function via non-standard syntax. ! .Ip "\fB\-fno-nonansi-builtins\fR" 4 .IX Item "-fno-nonansi-builtins" Disable built-in declarations of functions that are not mandated by \&\s-1ANSI/ISO\s0 C. These include \f(CW\*(C`ffs\*(C'\fR, \f(CW\*(C`alloca\*(C'\fR, \f(CW\*(C`_exit\*(C'\fR, \&\f(CW\*(C`index\*(C'\fR, \f(CW\*(C`bzero\*(C'\fR, \f(CW\*(C`conjf\*(C'\fR, and other related functions. ! .Ip "\fB\-fno-operator-names\fR" 4 .IX Item "-fno-operator-names" Do not treat the operator name keywords \f(CW\*(C`and\*(C'\fR, \f(CW\*(C`bitand\*(C'\fR, \&\f(CW\*(C`bitor\*(C'\fR, \f(CW\*(C`compl\*(C'\fR, \f(CW\*(C`not\*(C'\fR, \f(CW\*(C`or\*(C'\fR and \f(CW\*(C`xor\*(C'\fR as synonyms as keywords. ! .Ip "\fB\-fno-optional-diags\fR" 4 .IX Item "-fno-optional-diags" Disable diagnostics that the standard says a compiler does not need to issue. Currently, the only such diagnostic issued by G++ is the one for a name having multiple meanings within a class. ! .Ip "\fB\-fpermissive\fR" 4 .IX Item "-fpermissive" Downgrade some diagnostics about nonconformant code from errors to warnings. Thus, using \fB\-fpermissive\fR will allow some nonconforming code to compile. ! .Ip "\fB\-frepo\fR" 4 .IX Item "-frepo" Enable automatic template instantiation at link time. This option also ! implies \fB\-fno-implicit-templates\fR. ! .Ip "\fB\-fno-rtti\fR" 4 .IX Item "-fno-rtti" Disable generation of information about every class with virtual functions for use by the \*(C+ runtime type identification features *************** functions for use by the \*(C+ runtime t *** 1318,1358 **** of the language, you can save some space by using this flag. Note that exception handling uses the same information, but it will generate it as needed. ! .IP "\fB\-fstats\fR" 4 .IX Item "-fstats" Emit statistics about front-end processing at the end of the compilation. This information is generally only useful to the G++ development team. ! .IP "\fB\-ftemplate\-depth\-\fR\fIn\fR" 4 .IX Item "-ftemplate-depth-n" Set the maximum instantiation depth for template classes to \fIn\fR. A limit on the template instantiation depth is needed to detect endless recursions during template class instantiation. \s-1ANSI/ISO\s0 \*(C+ conforming programs must not rely on a maximum depth greater than 17. ! .IP "\fB\-fuse\-cxa\-atexit\fR" 4 .IX Item "-fuse-cxa-atexit" Register destructors for objects with static storage duration with the \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR function rather than the \f(CW\*(C`atexit\*(C'\fR function. This option is required for fully standards-compliant handling of static destructors, but will only work if your C library supports \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR. ! .IP "\fB\-fvtable\-gc\fR" 4 .IX Item "-fvtable-gc" Emit special relocations for vtables and virtual function references so that the linker can identify unused virtual functions and zero out vtable slots that refer to them. This is most useful with ! \&\fB\-ffunction\-sections\fR and \fB\-Wl,\-\-gc\-sections\fR, in order to also discard the functions themselves. .Sp This optimization requires \s-1GNU\s0 as and \s-1GNU\s0 ld. Not all systems support ! this option. \fB\-Wl,\-\-gc\-sections\fR is ignored without \fB\-static\fR. ! .IP "\fB\-fno\-weak\fR" 4 .IX Item "-fno-weak" Do not use weak symbol support, even if it is provided by the linker. By default, G++ will use weak symbols if they are available. This ! option exists only for testing, and should not be used by end\-users; it will result in inferior code and has no benefits. This option may be removed in a future release of G++. ! .IP "\fB\-nostdinc++\fR" 4 .IX Item "-nostdinc++" Do not search for header files in the standard directories specific to \&\*(C+, but do still search the other standard directories. (This option --- 1327,1367 ---- of the language, you can save some space by using this flag. Note that exception handling uses the same information, but it will generate it as needed. ! .Ip "\fB\-fstats\fR" 4 .IX Item "-fstats" Emit statistics about front-end processing at the end of the compilation. This information is generally only useful to the G++ development team. ! .Ip "\fB\-ftemplate-depth-\fR\fIn\fR" 4 .IX Item "-ftemplate-depth-n" Set the maximum instantiation depth for template classes to \fIn\fR. A limit on the template instantiation depth is needed to detect endless recursions during template class instantiation. \s-1ANSI/ISO\s0 \*(C+ conforming programs must not rely on a maximum depth greater than 17. ! .Ip "\fB\-fuse-cxa-atexit\fR" 4 .IX Item "-fuse-cxa-atexit" Register destructors for objects with static storage duration with the \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR function rather than the \f(CW\*(C`atexit\*(C'\fR function. This option is required for fully standards-compliant handling of static destructors, but will only work if your C library supports \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR. ! .Ip "\fB\-fvtable-gc\fR" 4 .IX Item "-fvtable-gc" Emit special relocations for vtables and virtual function references so that the linker can identify unused virtual functions and zero out vtable slots that refer to them. This is most useful with ! \&\fB\-ffunction-sections\fR and \fB\-Wl,\-\-gc-sections\fR, in order to also discard the functions themselves. .Sp This optimization requires \s-1GNU\s0 as and \s-1GNU\s0 ld. Not all systems support ! this option. \fB\-Wl,\-\-gc-sections\fR is ignored without \fB\-static\fR. ! .Ip "\fB\-fno-weak\fR" 4 .IX Item "-fno-weak" Do not use weak symbol support, even if it is provided by the linker. By default, G++ will use weak symbols if they are available. This ! option exists only for testing, and should not be used by end-users; it will result in inferior code and has no benefits. This option may be removed in a future release of G++. ! .Ip "\fB\-nostdinc++\fR" 4 .IX Item "-nostdinc++" Do not search for header files in the standard directories specific to \&\*(C+, but do still search the other standard directories. (This option *************** is used when building the \*(C+ library. *** 1360,1372 **** .PP In addition, these optimization, warning, and code generation options have meanings only for \*(C+ programs: ! .IP "\fB\-fno\-default\-inline\fR" 4 .IX Item "-fno-default-inline" Do not assume \fBinline\fR for functions defined inside a class scope. Note that these functions will have linkage like inline functions; they just won't be inlined by default. ! .IP "\fB\-Wabi\fR (\*(C+ only)" 4 .IX Item "-Wabi ( only)" Warn when G++ generates code that is probably not compatible with the vendor-neutral \*(C+ \s-1ABI\s0. Although an effort has been made to warn about --- 1369,1381 ---- .PP In addition, these optimization, warning, and code generation options have meanings only for \*(C+ programs: ! .Ip "\fB\-fno-default-inline\fR" 4 .IX Item "-fno-default-inline" Do not assume \fBinline\fR for functions defined inside a class scope. Note that these functions will have linkage like inline functions; they just won't be inlined by default. ! .Ip "\fB\-Wabi\fR (\*(C+ only)" 4 .IX Item "-Wabi ( only)" Warn when G++ generates code that is probably not compatible with the vendor-neutral \*(C+ \s-1ABI\s0. Although an effort has been made to warn about *************** compatible with code generated by other *** 1381,1401 **** .Sp The known incompatibilities at this point include: .RS 4 ! .IP "\(bu" 4 ! Incorrect handling of tail-padding for bit\-fields. G++ may attempt to pack data into the same byte as a base class. For example: .Sp .Vb 2 \& struct A { virtual void f(); int f1 : 1; }; \& struct B : public A { int f2 : 1; }; .Ve - .Sp In this case, G++ will place \f(CW\*(C`B::f2\*(C'\fR into the same byte as\f(CW\*(C`A::f1\*(C'\fR; other compilers will not. You can avoid this problem by explicitly padding \f(CW\*(C`A\*(C'\fR so that its size is a multiple of the byte size on your platform; that will cause G++ and other compilers to layout \f(CW\*(C`B\*(C'\fR identically. ! .IP "\(bu" 4 Incorrect handling of tail-padding for virtual bases. G++ does not use tail padding when laying out virtual bases. For example: .Sp --- 1390,1409 ---- .Sp The known incompatibilities at this point include: .RS 4 ! .Ip "\(bu" 4 ! Incorrect handling of tail-padding for bit-fields. G++ may attempt to pack data into the same byte as a base class. For example: .Sp .Vb 2 \& struct A { virtual void f(); int f1 : 1; }; \& struct B : public A { int f2 : 1; }; .Ve In this case, G++ will place \f(CW\*(C`B::f2\*(C'\fR into the same byte as\f(CW\*(C`A::f1\*(C'\fR; other compilers will not. You can avoid this problem by explicitly padding \f(CW\*(C`A\*(C'\fR so that its size is a multiple of the byte size on your platform; that will cause G++ and other compilers to layout \f(CW\*(C`B\*(C'\fR identically. ! .Ip "\(bu" 4 Incorrect handling of tail-padding for virtual bases. G++ does not use tail padding when laying out virtual bases. For example: .Sp *************** tail padding when laying out virtual bas *** 1404,1416 **** \& struct B { B(); char c2; }; \& struct C : public A, public virtual B {}; .Ve - .Sp In this case, G++ will not place \f(CW\*(C`B\*(C'\fR into the tail-padding for \&\f(CW\*(C`A\*(C'\fR; other compilers will. You can avoid this problem by explicitly padding \f(CW\*(C`A\*(C'\fR so that its size is a multiple of its alignment (ignoring virtual base classes); that will cause G++ and other compilers to layout \f(CW\*(C`C\*(C'\fR identically. ! .IP "\(bu" 4 Incorrect handling of bit-fields with declared widths greater than that of their underlying types, when the bit-fields appear in a union. For example: --- 1412,1423 ---- \& struct B { B(); char c2; }; \& struct C : public A, public virtual B {}; .Ve In this case, G++ will not place \f(CW\*(C`B\*(C'\fR into the tail-padding for \&\f(CW\*(C`A\*(C'\fR; other compilers will. You can avoid this problem by explicitly padding \f(CW\*(C`A\*(C'\fR so that its size is a multiple of its alignment (ignoring virtual base classes); that will cause G++ and other compilers to layout \f(CW\*(C`C\*(C'\fR identically. ! .Ip "\(bu" 4 Incorrect handling of bit-fields with declared widths greater than that of their underlying types, when the bit-fields appear in a union. For example: *************** example: *** 1418,1448 **** .Vb 1 \& union U { int i : 4096; }; .Ve - .Sp Assuming that an \f(CW\*(C`int\*(C'\fR does not have 4096 bits, G++ will make the union too small by the number of bits in an \f(CW\*(C`int\*(C'\fR. ! .IP "\(bu" 4 Empty classes can be placed at incorrect offsets. For example: .Sp .Vb 1 \& struct A {}; .Ve - .Sp .Vb 4 \& struct B { \& A a; \& virtual void f (); \& }; .Ve - .Sp .Vb 1 \& struct C : public B, public A {}; .Ve - .Sp G++ will place the \f(CW\*(C`A\*(C'\fR base class of \f(CW\*(C`C\*(C'\fR at a nonzero offset; it should be placed at offset zero. G++ mistakenly believes that the \&\f(CW\*(C`A\*(C'\fR data member of \f(CW\*(C`B\*(C'\fR is already at offset zero. ! .IP "\(bu" 4 Names of template functions whose types involve \f(CW\*(C`typename\*(C'\fR or template template parameters can be mangled incorrectly. .Sp --- 1425,1451 ---- .Vb 1 \& union U { int i : 4096; }; .Ve Assuming that an \f(CW\*(C`int\*(C'\fR does not have 4096 bits, G++ will make the union too small by the number of bits in an \f(CW\*(C`int\*(C'\fR. ! .Ip "\(bu" 4 Empty classes can be placed at incorrect offsets. For example: .Sp .Vb 1 \& struct A {}; .Ve .Vb 4 \& struct B { \& A a; \& virtual void f (); \& }; .Ve .Vb 1 \& struct C : public B, public A {}; .Ve G++ will place the \f(CW\*(C`A\*(C'\fR base class of \f(CW\*(C`C\*(C'\fR at a nonzero offset; it should be placed at offset zero. G++ mistakenly believes that the \&\f(CW\*(C`A\*(C'\fR data member of \f(CW\*(C`B\*(C'\fR is already at offset zero. ! .Ip "\(bu" 4 Names of template functions whose types involve \f(CW\*(C`typename\*(C'\fR or template template parameters can be mangled incorrectly. .Sp *************** template template parameters can be mang *** 1450,1476 **** \& template \& void f(typename Q::X) {} .Ve - .Sp .Vb 2 \& template