aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/init.c
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2022-01-14 16:56:44 +0100
committerMartin Liska <mliska@suse.cz>2022-01-17 22:12:04 +0100
commit5c69acb32329d49e58c26fa41ae74229a52b9106 (patch)
treeddb05f9d73afb6f998457d2ac4b720e3b3b60483 /gcc/ada/init.c
parent490e23032baaece71f2ec09fa1805064b150fbc2 (diff)
downloadgcc-5c69acb32329d49e58c26fa41ae74229a52b9106.zip
gcc-5c69acb32329d49e58c26fa41ae74229a52b9106.tar.gz
gcc-5c69acb32329d49e58c26fa41ae74229a52b9106.tar.bz2
Rename .c files to .cc files.
gcc/ada/ChangeLog: * adadecode.c: Moved to... * adadecode.cc: ...here. * affinity.c: Moved to... * affinity.cc: ...here. * argv-lynxos178-raven-cert.c: Moved to... * argv-lynxos178-raven-cert.cc: ...here. * argv.c: Moved to... * argv.cc: ...here. * aux-io.c: Moved to... * aux-io.cc: ...here. * cio.c: Moved to... * cio.cc: ...here. * cstreams.c: Moved to... * cstreams.cc: ...here. * env.c: Moved to... * env.cc: ...here. * exit.c: Moved to... * exit.cc: ...here. * expect.c: Moved to... * expect.cc: ...here. * final.c: Moved to... * final.cc: ...here. * gcc-interface/cuintp.c: Moved to... * gcc-interface/cuintp.cc: ...here. * gcc-interface/decl.c: Moved to... * gcc-interface/decl.cc: ...here. * gcc-interface/misc.c: Moved to... * gcc-interface/misc.cc: ...here. * gcc-interface/targtyps.c: Moved to... * gcc-interface/targtyps.cc: ...here. * gcc-interface/trans.c: Moved to... * gcc-interface/trans.cc: ...here. * gcc-interface/utils.c: Moved to... * gcc-interface/utils.cc: ...here. * gcc-interface/utils2.c: Moved to... * gcc-interface/utils2.cc: ...here. * init.c: Moved to... * init.cc: ...here. * initialize.c: Moved to... * initialize.cc: ...here. * libgnarl/thread.c: Moved to... * libgnarl/thread.cc: ...here. * link.c: Moved to... * link.cc: ...here. * locales.c: Moved to... * locales.cc: ...here. * mkdir.c: Moved to... * mkdir.cc: ...here. * raise.c: Moved to... * raise.cc: ...here. * rtfinal.c: Moved to... * rtfinal.cc: ...here. * rtinit.c: Moved to... * rtinit.cc: ...here. * seh_init.c: Moved to... * seh_init.cc: ...here. * sigtramp-armdroid.c: Moved to... * sigtramp-armdroid.cc: ...here. * sigtramp-ios.c: Moved to... * sigtramp-ios.cc: ...here. * sigtramp-qnx.c: Moved to... * sigtramp-qnx.cc: ...here. * sigtramp-vxworks.c: Moved to... * sigtramp-vxworks.cc: ...here. * socket.c: Moved to... * socket.cc: ...here. * tracebak.c: Moved to... * tracebak.cc: ...here. * version.c: Moved to... * version.cc: ...here. * vx_stack_info.c: Moved to... * vx_stack_info.cc: ...here. gcc/ChangeLog: * adjust-alignment.c: Moved to... * adjust-alignment.cc: ...here. * alias.c: Moved to... * alias.cc: ...here. * alloc-pool.c: Moved to... * alloc-pool.cc: ...here. * asan.c: Moved to... * asan.cc: ...here. * attribs.c: Moved to... * attribs.cc: ...here. * auto-inc-dec.c: Moved to... * auto-inc-dec.cc: ...here. * auto-profile.c: Moved to... * auto-profile.cc: ...here. * bb-reorder.c: Moved to... * bb-reorder.cc: ...here. * bitmap.c: Moved to... * bitmap.cc: ...here. * btfout.c: Moved to... * btfout.cc: ...here. * builtins.c: Moved to... * builtins.cc: ...here. * caller-save.c: Moved to... * caller-save.cc: ...here. * calls.c: Moved to... * calls.cc: ...here. * ccmp.c: Moved to... * ccmp.cc: ...here. * cfg.c: Moved to... * cfg.cc: ...here. * cfganal.c: Moved to... * cfganal.cc: ...here. * cfgbuild.c: Moved to... * cfgbuild.cc: ...here. * cfgcleanup.c: Moved to... * cfgcleanup.cc: ...here. * cfgexpand.c: Moved to... * cfgexpand.cc: ...here. * cfghooks.c: Moved to... * cfghooks.cc: ...here. * cfgloop.c: Moved to... * cfgloop.cc: ...here. * cfgloopanal.c: Moved to... * cfgloopanal.cc: ...here. * cfgloopmanip.c: Moved to... * cfgloopmanip.cc: ...here. * cfgrtl.c: Moved to... * cfgrtl.cc: ...here. * cgraph.c: Moved to... * cgraph.cc: ...here. * cgraphbuild.c: Moved to... * cgraphbuild.cc: ...here. * cgraphclones.c: Moved to... * cgraphclones.cc: ...here. * cgraphunit.c: Moved to... * cgraphunit.cc: ...here. * collect-utils.c: Moved to... * collect-utils.cc: ...here. * collect2-aix.c: Moved to... * collect2-aix.cc: ...here. * collect2.c: Moved to... * collect2.cc: ...here. * combine-stack-adj.c: Moved to... * combine-stack-adj.cc: ...here. * combine.c: Moved to... * combine.cc: ...here. * common/common-targhooks.c: Moved to... * common/common-targhooks.cc: ...here. * common/config/aarch64/aarch64-common.c: Moved to... * common/config/aarch64/aarch64-common.cc: ...here. * common/config/alpha/alpha-common.c: Moved to... * common/config/alpha/alpha-common.cc: ...here. * common/config/arc/arc-common.c: Moved to... * common/config/arc/arc-common.cc: ...here. * common/config/arm/arm-common.c: Moved to... * common/config/arm/arm-common.cc: ...here. * common/config/avr/avr-common.c: Moved to... * common/config/avr/avr-common.cc: ...here. * common/config/bfin/bfin-common.c: Moved to... * common/config/bfin/bfin-common.cc: ...here. * common/config/bpf/bpf-common.c: Moved to... * common/config/bpf/bpf-common.cc: ...here. * common/config/c6x/c6x-common.c: Moved to... * common/config/c6x/c6x-common.cc: ...here. * common/config/cr16/cr16-common.c: Moved to... * common/config/cr16/cr16-common.cc: ...here. * common/config/cris/cris-common.c: Moved to... * common/config/cris/cris-common.cc: ...here. * common/config/csky/csky-common.c: Moved to... * common/config/csky/csky-common.cc: ...here. * common/config/default-common.c: Moved to... * common/config/default-common.cc: ...here. * common/config/epiphany/epiphany-common.c: Moved to... * common/config/epiphany/epiphany-common.cc: ...here. * common/config/fr30/fr30-common.c: Moved to... * common/config/fr30/fr30-common.cc: ...here. * common/config/frv/frv-common.c: Moved to... * common/config/frv/frv-common.cc: ...here. * common/config/gcn/gcn-common.c: Moved to... * common/config/gcn/gcn-common.cc: ...here. * common/config/h8300/h8300-common.c: Moved to... * common/config/h8300/h8300-common.cc: ...here. * common/config/i386/i386-common.c: Moved to... * common/config/i386/i386-common.cc: ...here. * common/config/ia64/ia64-common.c: Moved to... * common/config/ia64/ia64-common.cc: ...here. * common/config/iq2000/iq2000-common.c: Moved to... * common/config/iq2000/iq2000-common.cc: ...here. * common/config/lm32/lm32-common.c: Moved to... * common/config/lm32/lm32-common.cc: ...here. * common/config/m32r/m32r-common.c: Moved to... * common/config/m32r/m32r-common.cc: ...here. * common/config/m68k/m68k-common.c: Moved to... * common/config/m68k/m68k-common.cc: ...here. * common/config/mcore/mcore-common.c: Moved to... * common/config/mcore/mcore-common.cc: ...here. * common/config/microblaze/microblaze-common.c: Moved to... * common/config/microblaze/microblaze-common.cc: ...here. * common/config/mips/mips-common.c: Moved to... * common/config/mips/mips-common.cc: ...here. * common/config/mmix/mmix-common.c: Moved to... * common/config/mmix/mmix-common.cc: ...here. * common/config/mn10300/mn10300-common.c: Moved to... * common/config/mn10300/mn10300-common.cc: ...here. * common/config/msp430/msp430-common.c: Moved to... * common/config/msp430/msp430-common.cc: ...here. * common/config/nds32/nds32-common.c: Moved to... * common/config/nds32/nds32-common.cc: ...here. * common/config/nios2/nios2-common.c: Moved to... * common/config/nios2/nios2-common.cc: ...here. * common/config/nvptx/nvptx-common.c: Moved to... * common/config/nvptx/nvptx-common.cc: ...here. * common/config/or1k/or1k-common.c: Moved to... * common/config/or1k/or1k-common.cc: ...here. * common/config/pa/pa-common.c: Moved to... * common/config/pa/pa-common.cc: ...here. * common/config/pdp11/pdp11-common.c: Moved to... * common/config/pdp11/pdp11-common.cc: ...here. * common/config/pru/pru-common.c: Moved to... * common/config/pru/pru-common.cc: ...here. * common/config/riscv/riscv-common.c: Moved to... * common/config/riscv/riscv-common.cc: ...here. * common/config/rs6000/rs6000-common.c: Moved to... * common/config/rs6000/rs6000-common.cc: ...here. * common/config/rx/rx-common.c: Moved to... * common/config/rx/rx-common.cc: ...here. * common/config/s390/s390-common.c: Moved to... * common/config/s390/s390-common.cc: ...here. * common/config/sh/sh-common.c: Moved to... * common/config/sh/sh-common.cc: ...here. * common/config/sparc/sparc-common.c: Moved to... * common/config/sparc/sparc-common.cc: ...here. * common/config/tilegx/tilegx-common.c: Moved to... * common/config/tilegx/tilegx-common.cc: ...here. * common/config/tilepro/tilepro-common.c: Moved to... * common/config/tilepro/tilepro-common.cc: ...here. * common/config/v850/v850-common.c: Moved to... * common/config/v850/v850-common.cc: ...here. * common/config/vax/vax-common.c: Moved to... * common/config/vax/vax-common.cc: ...here. * common/config/visium/visium-common.c: Moved to... * common/config/visium/visium-common.cc: ...here. * common/config/xstormy16/xstormy16-common.c: Moved to... * common/config/xstormy16/xstormy16-common.cc: ...here. * common/config/xtensa/xtensa-common.c: Moved to... * common/config/xtensa/xtensa-common.cc: ...here. * compare-elim.c: Moved to... * compare-elim.cc: ...here. * config/aarch64/aarch64-bti-insert.c: Moved to... * config/aarch64/aarch64-bti-insert.cc: ...here. * config/aarch64/aarch64-builtins.c: Moved to... * config/aarch64/aarch64-builtins.cc: ...here. * config/aarch64/aarch64-c.c: Moved to... * config/aarch64/aarch64-c.cc: ...here. * config/aarch64/aarch64-d.c: Moved to... * config/aarch64/aarch64-d.cc: ...here. * config/aarch64/aarch64.c: Moved to... * config/aarch64/aarch64.cc: ...here. * config/aarch64/cortex-a57-fma-steering.c: Moved to... * config/aarch64/cortex-a57-fma-steering.cc: ...here. * config/aarch64/driver-aarch64.c: Moved to... * config/aarch64/driver-aarch64.cc: ...here. * config/aarch64/falkor-tag-collision-avoidance.c: Moved to... * config/aarch64/falkor-tag-collision-avoidance.cc: ...here. * config/aarch64/host-aarch64-darwin.c: Moved to... * config/aarch64/host-aarch64-darwin.cc: ...here. * config/alpha/alpha.c: Moved to... * config/alpha/alpha.cc: ...here. * config/alpha/driver-alpha.c: Moved to... * config/alpha/driver-alpha.cc: ...here. * config/arc/arc-c.c: Moved to... * config/arc/arc-c.cc: ...here. * config/arc/arc.c: Moved to... * config/arc/arc.cc: ...here. * config/arc/driver-arc.c: Moved to... * config/arc/driver-arc.cc: ...here. * config/arm/aarch-common.c: Moved to... * config/arm/aarch-common.cc: ...here. * config/arm/arm-builtins.c: Moved to... * config/arm/arm-builtins.cc: ...here. * config/arm/arm-c.c: Moved to... * config/arm/arm-c.cc: ...here. * config/arm/arm-d.c: Moved to... * config/arm/arm-d.cc: ...here. * config/arm/arm.c: Moved to... * config/arm/arm.cc: ...here. * config/arm/driver-arm.c: Moved to... * config/arm/driver-arm.cc: ...here. * config/avr/avr-c.c: Moved to... * config/avr/avr-c.cc: ...here. * config/avr/avr-devices.c: Moved to... * config/avr/avr-devices.cc: ...here. * config/avr/avr-log.c: Moved to... * config/avr/avr-log.cc: ...here. * config/avr/avr.c: Moved to... * config/avr/avr.cc: ...here. * config/avr/driver-avr.c: Moved to... * config/avr/driver-avr.cc: ...here. * config/avr/gen-avr-mmcu-specs.c: Moved to... * config/avr/gen-avr-mmcu-specs.cc: ...here. * config/avr/gen-avr-mmcu-texi.c: Moved to... * config/avr/gen-avr-mmcu-texi.cc: ...here. * config/bfin/bfin.c: Moved to... * config/bfin/bfin.cc: ...here. * config/bpf/bpf.c: Moved to... * config/bpf/bpf.cc: ...here. * config/bpf/coreout.c: Moved to... * config/bpf/coreout.cc: ...here. * config/c6x/c6x.c: Moved to... * config/c6x/c6x.cc: ...here. * config/cr16/cr16.c: Moved to... * config/cr16/cr16.cc: ...here. * config/cris/cris.c: Moved to... * config/cris/cris.cc: ...here. * config/csky/csky.c: Moved to... * config/csky/csky.cc: ...here. * config/darwin-c.c: Moved to... * config/darwin-c.cc: ...here. * config/darwin-d.c: Moved to... * config/darwin-d.cc: ...here. * config/darwin-driver.c: Moved to... * config/darwin-driver.cc: ...here. * config/darwin-f.c: Moved to... * config/darwin-f.cc: ...here. * config/darwin.c: Moved to... * config/darwin.cc: ...here. * config/default-c.c: Moved to... * config/default-c.cc: ...here. * config/default-d.c: Moved to... * config/default-d.cc: ...here. * config/dragonfly-d.c: Moved to... * config/dragonfly-d.cc: ...here. * config/epiphany/epiphany.c: Moved to... * config/epiphany/epiphany.cc: ...here. * config/epiphany/mode-switch-use.c: Moved to... * config/epiphany/mode-switch-use.cc: ...here. * config/epiphany/resolve-sw-modes.c: Moved to... * config/epiphany/resolve-sw-modes.cc: ...here. * config/fr30/fr30.c: Moved to... * config/fr30/fr30.cc: ...here. * config/freebsd-d.c: Moved to... * config/freebsd-d.cc: ...here. * config/frv/frv.c: Moved to... * config/frv/frv.cc: ...here. * config/ft32/ft32.c: Moved to... * config/ft32/ft32.cc: ...here. * config/gcn/driver-gcn.c: Moved to... * config/gcn/driver-gcn.cc: ...here. * config/gcn/gcn-run.c: Moved to... * config/gcn/gcn-run.cc: ...here. * config/gcn/gcn-tree.c: Moved to... * config/gcn/gcn-tree.cc: ...here. * config/gcn/gcn.c: Moved to... * config/gcn/gcn.cc: ...here. * config/gcn/mkoffload.c: Moved to... * config/gcn/mkoffload.cc: ...here. * config/glibc-c.c: Moved to... * config/glibc-c.cc: ...here. * config/glibc-d.c: Moved to... * config/glibc-d.cc: ...here. * config/h8300/h8300.c: Moved to... * config/h8300/h8300.cc: ...here. * config/host-darwin.c: Moved to... * config/host-darwin.cc: ...here. * config/host-hpux.c: Moved to... * config/host-hpux.cc: ...here. * config/host-linux.c: Moved to... * config/host-linux.cc: ...here. * config/host-netbsd.c: Moved to... * config/host-netbsd.cc: ...here. * config/host-openbsd.c: Moved to... * config/host-openbsd.cc: ...here. * config/host-solaris.c: Moved to... * config/host-solaris.cc: ...here. * config/i386/djgpp.c: Moved to... * config/i386/djgpp.cc: ...here. * config/i386/driver-i386.c: Moved to... * config/i386/driver-i386.cc: ...here. * config/i386/driver-mingw32.c: Moved to... * config/i386/driver-mingw32.cc: ...here. * config/i386/gnu-property.c: Moved to... * config/i386/gnu-property.cc: ...here. * config/i386/host-cygwin.c: Moved to... * config/i386/host-cygwin.cc: ...here. * config/i386/host-i386-darwin.c: Moved to... * config/i386/host-i386-darwin.cc: ...here. * config/i386/host-mingw32.c: Moved to... * config/i386/host-mingw32.cc: ...here. * config/i386/i386-builtins.c: Moved to... * config/i386/i386-builtins.cc: ...here. * config/i386/i386-c.c: Moved to... * config/i386/i386-c.cc: ...here. * config/i386/i386-d.c: Moved to... * config/i386/i386-d.cc: ...here. * config/i386/i386-expand.c: Moved to... * config/i386/i386-expand.cc: ...here. * config/i386/i386-features.c: Moved to... * config/i386/i386-features.cc: ...here. * config/i386/i386-options.c: Moved to... * config/i386/i386-options.cc: ...here. * config/i386/i386.c: Moved to... * config/i386/i386.cc: ...here. * config/i386/intelmic-mkoffload.c: Moved to... * config/i386/intelmic-mkoffload.cc: ...here. * config/i386/msformat-c.c: Moved to... * config/i386/msformat-c.cc: ...here. * config/i386/winnt-cxx.c: Moved to... * config/i386/winnt-cxx.cc: ...here. * config/i386/winnt-d.c: Moved to... * config/i386/winnt-d.cc: ...here. * config/i386/winnt-stubs.c: Moved to... * config/i386/winnt-stubs.cc: ...here. * config/i386/winnt.c: Moved to... * config/i386/winnt.cc: ...here. * config/i386/x86-tune-sched-atom.c: Moved to... * config/i386/x86-tune-sched-atom.cc: ...here. * config/i386/x86-tune-sched-bd.c: Moved to... * config/i386/x86-tune-sched-bd.cc: ...here. * config/i386/x86-tune-sched-core.c: Moved to... * config/i386/x86-tune-sched-core.cc: ...here. * config/i386/x86-tune-sched.c: Moved to... * config/i386/x86-tune-sched.cc: ...here. * config/ia64/ia64-c.c: Moved to... * config/ia64/ia64-c.cc: ...here. * config/ia64/ia64.c: Moved to... * config/ia64/ia64.cc: ...here. * config/iq2000/iq2000.c: Moved to... * config/iq2000/iq2000.cc: ...here. * config/linux.c: Moved to... * config/linux.cc: ...here. * config/lm32/lm32.c: Moved to... * config/lm32/lm32.cc: ...here. * config/m32c/m32c-pragma.c: Moved to... * config/m32c/m32c-pragma.cc: ...here. * config/m32c/m32c.c: Moved to... * config/m32c/m32c.cc: ...here. * config/m32r/m32r.c: Moved to... * config/m32r/m32r.cc: ...here. * config/m68k/m68k.c: Moved to... * config/m68k/m68k.cc: ...here. * config/mcore/mcore.c: Moved to... * config/mcore/mcore.cc: ...here. * config/microblaze/microblaze-c.c: Moved to... * config/microblaze/microblaze-c.cc: ...here. * config/microblaze/microblaze.c: Moved to... * config/microblaze/microblaze.cc: ...here. * config/mips/driver-native.c: Moved to... * config/mips/driver-native.cc: ...here. * config/mips/frame-header-opt.c: Moved to... * config/mips/frame-header-opt.cc: ...here. * config/mips/mips-d.c: Moved to... * config/mips/mips-d.cc: ...here. * config/mips/mips.c: Moved to... * config/mips/mips.cc: ...here. * config/mmix/mmix.c: Moved to... * config/mmix/mmix.cc: ...here. * config/mn10300/mn10300.c: Moved to... * config/mn10300/mn10300.cc: ...here. * config/moxie/moxie.c: Moved to... * config/moxie/moxie.cc: ...here. * config/msp430/driver-msp430.c: Moved to... * config/msp430/driver-msp430.cc: ...here. * config/msp430/msp430-c.c: Moved to... * config/msp430/msp430-c.cc: ...here. * config/msp430/msp430-devices.c: Moved to... * config/msp430/msp430-devices.cc: ...here. * config/msp430/msp430.c: Moved to... * config/msp430/msp430.cc: ...here. * config/nds32/nds32-cost.c: Moved to... * config/nds32/nds32-cost.cc: ...here. * config/nds32/nds32-fp-as-gp.c: Moved to... * config/nds32/nds32-fp-as-gp.cc: ...here. * config/nds32/nds32-intrinsic.c: Moved to... * config/nds32/nds32-intrinsic.cc: ...here. * config/nds32/nds32-isr.c: Moved to... * config/nds32/nds32-isr.cc: ...here. * config/nds32/nds32-md-auxiliary.c: Moved to... * config/nds32/nds32-md-auxiliary.cc: ...here. * config/nds32/nds32-memory-manipulation.c: Moved to... * config/nds32/nds32-memory-manipulation.cc: ...here. * config/nds32/nds32-pipelines-auxiliary.c: Moved to... * config/nds32/nds32-pipelines-auxiliary.cc: ...here. * config/nds32/nds32-predicates.c: Moved to... * config/nds32/nds32-predicates.cc: ...here. * config/nds32/nds32-relax-opt.c: Moved to... * config/nds32/nds32-relax-opt.cc: ...here. * config/nds32/nds32-utils.c: Moved to... * config/nds32/nds32-utils.cc: ...here. * config/nds32/nds32.c: Moved to... * config/nds32/nds32.cc: ...here. * config/netbsd-d.c: Moved to... * config/netbsd-d.cc: ...here. * config/netbsd.c: Moved to... * config/netbsd.cc: ...here. * config/nios2/nios2.c: Moved to... * config/nios2/nios2.cc: ...here. * config/nvptx/mkoffload.c: Moved to... * config/nvptx/mkoffload.cc: ...here. * config/nvptx/nvptx-c.c: Moved to... * config/nvptx/nvptx-c.cc: ...here. * config/nvptx/nvptx.c: Moved to... * config/nvptx/nvptx.cc: ...here. * config/openbsd-d.c: Moved to... * config/openbsd-d.cc: ...here. * config/or1k/or1k.c: Moved to... * config/or1k/or1k.cc: ...here. * config/pa/pa-d.c: Moved to... * config/pa/pa-d.cc: ...here. * config/pa/pa.c: Moved to... * config/pa/pa.cc: ...here. * config/pdp11/pdp11.c: Moved to... * config/pdp11/pdp11.cc: ...here. * config/pru/pru-passes.c: Moved to... * config/pru/pru-passes.cc: ...here. * config/pru/pru-pragma.c: Moved to... * config/pru/pru-pragma.cc: ...here. * config/pru/pru.c: Moved to... * config/pru/pru.cc: ...here. * config/riscv/riscv-builtins.c: Moved to... * config/riscv/riscv-builtins.cc: ...here. * config/riscv/riscv-c.c: Moved to... * config/riscv/riscv-c.cc: ...here. * config/riscv/riscv-d.c: Moved to... * config/riscv/riscv-d.cc: ...here. * config/riscv/riscv-shorten-memrefs.c: Moved to... * config/riscv/riscv-shorten-memrefs.cc: ...here. * config/riscv/riscv-sr.c: Moved to... * config/riscv/riscv-sr.cc: ...here. * config/riscv/riscv.c: Moved to... * config/riscv/riscv.cc: ...here. * config/rl78/rl78-c.c: Moved to... * config/rl78/rl78-c.cc: ...here. * config/rl78/rl78.c: Moved to... * config/rl78/rl78.cc: ...here. * config/rs6000/driver-rs6000.c: Moved to... * config/rs6000/driver-rs6000.cc: ...here. * config/rs6000/host-darwin.c: Moved to... * config/rs6000/host-darwin.cc: ...here. * config/rs6000/host-ppc64-darwin.c: Moved to... * config/rs6000/host-ppc64-darwin.cc: ...here. * config/rs6000/rbtree.c: Moved to... * config/rs6000/rbtree.cc: ...here. * config/rs6000/rs6000-c.c: Moved to... * config/rs6000/rs6000-c.cc: ...here. * config/rs6000/rs6000-call.c: Moved to... * config/rs6000/rs6000-call.cc: ...here. * config/rs6000/rs6000-d.c: Moved to... * config/rs6000/rs6000-d.cc: ...here. * config/rs6000/rs6000-gen-builtins.c: Moved to... * config/rs6000/rs6000-gen-builtins.cc: ...here. * config/rs6000/rs6000-linux.c: Moved to... * config/rs6000/rs6000-linux.cc: ...here. * config/rs6000/rs6000-logue.c: Moved to... * config/rs6000/rs6000-logue.cc: ...here. * config/rs6000/rs6000-p8swap.c: Moved to... * config/rs6000/rs6000-p8swap.cc: ...here. * config/rs6000/rs6000-pcrel-opt.c: Moved to... * config/rs6000/rs6000-pcrel-opt.cc: ...here. * config/rs6000/rs6000-string.c: Moved to... * config/rs6000/rs6000-string.cc: ...here. * config/rs6000/rs6000.c: Moved to... * config/rs6000/rs6000.cc: ...here. * config/rx/rx.c: Moved to... * config/rx/rx.cc: ...here. * config/s390/driver-native.c: Moved to... * config/s390/driver-native.cc: ...here. * config/s390/s390-c.c: Moved to... * config/s390/s390-c.cc: ...here. * config/s390/s390-d.c: Moved to... * config/s390/s390-d.cc: ...here. * config/s390/s390.c: Moved to... * config/s390/s390.cc: ...here. * config/sh/divtab-sh4-300.c: Moved to... * config/sh/divtab-sh4-300.cc: ...here. * config/sh/divtab-sh4.c: Moved to... * config/sh/divtab-sh4.cc: ...here. * config/sh/divtab.c: Moved to... * config/sh/divtab.cc: ...here. * config/sh/sh-c.c: Moved to... * config/sh/sh-c.cc: ...here. * config/sh/sh.c: Moved to... * config/sh/sh.cc: ...here. * config/sol2-c.c: Moved to... * config/sol2-c.cc: ...here. * config/sol2-cxx.c: Moved to... * config/sol2-cxx.cc: ...here. * config/sol2-d.c: Moved to... * config/sol2-d.cc: ...here. * config/sol2-stubs.c: Moved to... * config/sol2-stubs.cc: ...here. * config/sol2.c: Moved to... * config/sol2.cc: ...here. * config/sparc/driver-sparc.c: Moved to... * config/sparc/driver-sparc.cc: ...here. * config/sparc/sparc-c.c: Moved to... * config/sparc/sparc-c.cc: ...here. * config/sparc/sparc-d.c: Moved to... * config/sparc/sparc-d.cc: ...here. * config/sparc/sparc.c: Moved to... * config/sparc/sparc.cc: ...here. * config/stormy16/stormy16.c: Moved to... * config/stormy16/stormy16.cc: ...here. * config/tilegx/mul-tables.c: Moved to... * config/tilegx/mul-tables.cc: ...here. * config/tilegx/tilegx-c.c: Moved to... * config/tilegx/tilegx-c.cc: ...here. * config/tilegx/tilegx.c: Moved to... * config/tilegx/tilegx.cc: ...here. * config/tilepro/mul-tables.c: Moved to... * config/tilepro/mul-tables.cc: ...here. * config/tilepro/tilepro-c.c: Moved to... * config/tilepro/tilepro-c.cc: ...here. * config/tilepro/tilepro.c: Moved to... * config/tilepro/tilepro.cc: ...here. * config/v850/v850-c.c: Moved to... * config/v850/v850-c.cc: ...here. * config/v850/v850.c: Moved to... * config/v850/v850.cc: ...here. * config/vax/vax.c: Moved to... * config/vax/vax.cc: ...here. * config/visium/visium.c: Moved to... * config/visium/visium.cc: ...here. * config/vms/vms-c.c: Moved to... * config/vms/vms-c.cc: ...here. * config/vms/vms-f.c: Moved to... * config/vms/vms-f.cc: ...here. * config/vms/vms.c: Moved to... * config/vms/vms.cc: ...here. * config/vxworks-c.c: Moved to... * config/vxworks-c.cc: ...here. * config/vxworks.c: Moved to... * config/vxworks.cc: ...here. * config/winnt-c.c: Moved to... * config/winnt-c.cc: ...here. * config/xtensa/xtensa.c: Moved to... * config/xtensa/xtensa.cc: ...here. * context.c: Moved to... * context.cc: ...here. * convert.c: Moved to... * convert.cc: ...here. * coverage.c: Moved to... * coverage.cc: ...here. * cppbuiltin.c: Moved to... * cppbuiltin.cc: ...here. * cppdefault.c: Moved to... * cppdefault.cc: ...here. * cprop.c: Moved to... * cprop.cc: ...here. * cse.c: Moved to... * cse.cc: ...here. * cselib.c: Moved to... * cselib.cc: ...here. * ctfc.c: Moved to... * ctfc.cc: ...here. * ctfout.c: Moved to... * ctfout.cc: ...here. * data-streamer-in.c: Moved to... * data-streamer-in.cc: ...here. * data-streamer-out.c: Moved to... * data-streamer-out.cc: ...here. * data-streamer.c: Moved to... * data-streamer.cc: ...here. * dbgcnt.c: Moved to... * dbgcnt.cc: ...here. * dbxout.c: Moved to... * dbxout.cc: ...here. * dce.c: Moved to... * dce.cc: ...here. * ddg.c: Moved to... * ddg.cc: ...here. * debug.c: Moved to... * debug.cc: ...here. * df-core.c: Moved to... * df-core.cc: ...here. * df-problems.c: Moved to... * df-problems.cc: ...here. * df-scan.c: Moved to... * df-scan.cc: ...here. * dfp.c: Moved to... * dfp.cc: ...here. * diagnostic-color.c: Moved to... * diagnostic-color.cc: ...here. * diagnostic-show-locus.c: Moved to... * diagnostic-show-locus.cc: ...here. * diagnostic-spec.c: Moved to... * diagnostic-spec.cc: ...here. * diagnostic.c: Moved to... * diagnostic.cc: ...here. * dojump.c: Moved to... * dojump.cc: ...here. * dominance.c: Moved to... * dominance.cc: ...here. * domwalk.c: Moved to... * domwalk.cc: ...here. * double-int.c: Moved to... * double-int.cc: ...here. * dse.c: Moved to... * dse.cc: ...here. * dumpfile.c: Moved to... * dumpfile.cc: ...here. * dwarf2asm.c: Moved to... * dwarf2asm.cc: ...here. * dwarf2cfi.c: Moved to... * dwarf2cfi.cc: ...here. * dwarf2ctf.c: Moved to... * dwarf2ctf.cc: ...here. * dwarf2out.c: Moved to... * dwarf2out.cc: ...here. * early-remat.c: Moved to... * early-remat.cc: ...here. * edit-context.c: Moved to... * edit-context.cc: ...here. * emit-rtl.c: Moved to... * emit-rtl.cc: ...here. * errors.c: Moved to... * errors.cc: ...here. * et-forest.c: Moved to... * et-forest.cc: ...here. * except.c: Moved to... * except.cc: ...here. * explow.c: Moved to... * explow.cc: ...here. * expmed.c: Moved to... * expmed.cc: ...here. * expr.c: Moved to... * expr.cc: ...here. * fibonacci_heap.c: Moved to... * fibonacci_heap.cc: ...here. * file-find.c: Moved to... * file-find.cc: ...here. * file-prefix-map.c: Moved to... * file-prefix-map.cc: ...here. * final.c: Moved to... * final.cc: ...here. * fixed-value.c: Moved to... * fixed-value.cc: ...here. * fold-const-call.c: Moved to... * fold-const-call.cc: ...here. * fold-const.c: Moved to... * fold-const.cc: ...here. * fp-test.c: Moved to... * fp-test.cc: ...here. * function-tests.c: Moved to... * function-tests.cc: ...here. * function.c: Moved to... * function.cc: ...here. * fwprop.c: Moved to... * fwprop.cc: ...here. * gcc-ar.c: Moved to... * gcc-ar.cc: ...here. * gcc-main.c: Moved to... * gcc-main.cc: ...here. * gcc-rich-location.c: Moved to... * gcc-rich-location.cc: ...here. * gcc.c: Moved to... * gcc.cc: ...here. * gcov-dump.c: Moved to... * gcov-dump.cc: ...here. * gcov-io.c: Moved to... * gcov-io.cc: ...here. * gcov-tool.c: Moved to... * gcov-tool.cc: ...here. * gcov.c: Moved to... * gcov.cc: ...here. * gcse-common.c: Moved to... * gcse-common.cc: ...here. * gcse.c: Moved to... * gcse.cc: ...here. * genattr-common.c: Moved to... * genattr-common.cc: ...here. * genattr.c: Moved to... * genattr.cc: ...here. * genattrtab.c: Moved to... * genattrtab.cc: ...here. * genautomata.c: Moved to... * genautomata.cc: ...here. * gencfn-macros.c: Moved to... * gencfn-macros.cc: ...here. * gencheck.c: Moved to... * gencheck.cc: ...here. * genchecksum.c: Moved to... * genchecksum.cc: ...here. * gencodes.c: Moved to... * gencodes.cc: ...here. * genconditions.c: Moved to... * genconditions.cc: ...here. * genconfig.c: Moved to... * genconfig.cc: ...here. * genconstants.c: Moved to... * genconstants.cc: ...here. * genemit.c: Moved to... * genemit.cc: ...here. * genenums.c: Moved to... * genenums.cc: ...here. * generic-match-head.c: Moved to... * generic-match-head.cc: ...here. * genextract.c: Moved to... * genextract.cc: ...here. * genflags.c: Moved to... * genflags.cc: ...here. * gengenrtl.c: Moved to... * gengenrtl.cc: ...here. * gengtype-parse.c: Moved to... * gengtype-parse.cc: ...here. * gengtype-state.c: Moved to... * gengtype-state.cc: ...here. * gengtype.c: Moved to... * gengtype.cc: ...here. * genhooks.c: Moved to... * genhooks.cc: ...here. * genmatch.c: Moved to... * genmatch.cc: ...here. * genmddeps.c: Moved to... * genmddeps.cc: ...here. * genmddump.c: Moved to... * genmddump.cc: ...here. * genmodes.c: Moved to... * genmodes.cc: ...here. * genopinit.c: Moved to... * genopinit.cc: ...here. * genoutput.c: Moved to... * genoutput.cc: ...here. * genpeep.c: Moved to... * genpeep.cc: ...here. * genpreds.c: Moved to... * genpreds.cc: ...here. * genrecog.c: Moved to... * genrecog.cc: ...here. * gensupport.c: Moved to... * gensupport.cc: ...here. * gentarget-def.c: Moved to... * gentarget-def.cc: ...here. * genversion.c: Moved to... * genversion.cc: ...here. * ggc-common.c: Moved to... * ggc-common.cc: ...here. * ggc-none.c: Moved to... * ggc-none.cc: ...here. * ggc-page.c: Moved to... * ggc-page.cc: ...here. * ggc-tests.c: Moved to... * ggc-tests.cc: ...here. * gimple-builder.c: Moved to... * gimple-builder.cc: ...here. * gimple-expr.c: Moved to... * gimple-expr.cc: ...here. * gimple-fold.c: Moved to... * gimple-fold.cc: ...here. * gimple-iterator.c: Moved to... * gimple-iterator.cc: ...here. * gimple-laddress.c: Moved to... * gimple-laddress.cc: ...here. * gimple-loop-jam.c: Moved to... * gimple-loop-jam.cc: ...here. * gimple-low.c: Moved to... * gimple-low.cc: ...here. * gimple-match-head.c: Moved to... * gimple-match-head.cc: ...here. * gimple-pretty-print.c: Moved to... * gimple-pretty-print.cc: ...here. * gimple-ssa-backprop.c: Moved to... * gimple-ssa-backprop.cc: ...here. * gimple-ssa-evrp-analyze.c: Moved to... * gimple-ssa-evrp-analyze.cc: ...here. * gimple-ssa-evrp.c: Moved to... * gimple-ssa-evrp.cc: ...here. * gimple-ssa-isolate-paths.c: Moved to... * gimple-ssa-isolate-paths.cc: ...here. * gimple-ssa-nonnull-compare.c: Moved to... * gimple-ssa-nonnull-compare.cc: ...here. * gimple-ssa-split-paths.c: Moved to... * gimple-ssa-split-paths.cc: ...here. * gimple-ssa-sprintf.c: Moved to... * gimple-ssa-sprintf.cc: ...here. * gimple-ssa-store-merging.c: Moved to... * gimple-ssa-store-merging.cc: ...here. * gimple-ssa-strength-reduction.c: Moved to... * gimple-ssa-strength-reduction.cc: ...here. * gimple-ssa-warn-alloca.c: Moved to... * gimple-ssa-warn-alloca.cc: ...here. * gimple-ssa-warn-restrict.c: Moved to... * gimple-ssa-warn-restrict.cc: ...here. * gimple-streamer-in.c: Moved to... * gimple-streamer-in.cc: ...here. * gimple-streamer-out.c: Moved to... * gimple-streamer-out.cc: ...here. * gimple-walk.c: Moved to... * gimple-walk.cc: ...here. * gimple-warn-recursion.c: Moved to... * gimple-warn-recursion.cc: ...here. * gimple.c: Moved to... * gimple.cc: ...here. * gimplify-me.c: Moved to... * gimplify-me.cc: ...here. * gimplify.c: Moved to... * gimplify.cc: ...here. * godump.c: Moved to... * godump.cc: ...here. * graph.c: Moved to... * graph.cc: ...here. * graphds.c: Moved to... * graphds.cc: ...here. * graphite-dependences.c: Moved to... * graphite-dependences.cc: ...here. * graphite-isl-ast-to-gimple.c: Moved to... * graphite-isl-ast-to-gimple.cc: ...here. * graphite-optimize-isl.c: Moved to... * graphite-optimize-isl.cc: ...here. * graphite-poly.c: Moved to... * graphite-poly.cc: ...here. * graphite-scop-detection.c: Moved to... * graphite-scop-detection.cc: ...here. * graphite-sese-to-poly.c: Moved to... * graphite-sese-to-poly.cc: ...here. * graphite.c: Moved to... * graphite.cc: ...here. * haifa-sched.c: Moved to... * haifa-sched.cc: ...here. * hash-map-tests.c: Moved to... * hash-map-tests.cc: ...here. * hash-set-tests.c: Moved to... * hash-set-tests.cc: ...here. * hash-table.c: Moved to... * hash-table.cc: ...here. * hooks.c: Moved to... * hooks.cc: ...here. * host-default.c: Moved to... * host-default.cc: ...here. * hw-doloop.c: Moved to... * hw-doloop.cc: ...here. * hwint.c: Moved to... * hwint.cc: ...here. * ifcvt.c: Moved to... * ifcvt.cc: ...here. * inchash.c: Moved to... * inchash.cc: ...here. * incpath.c: Moved to... * incpath.cc: ...here. * init-regs.c: Moved to... * init-regs.cc: ...here. * input.c: Moved to... * input.cc: ...here. * internal-fn.c: Moved to... * internal-fn.cc: ...here. * intl.c: Moved to... * intl.cc: ...here. * ipa-comdats.c: Moved to... * ipa-comdats.cc: ...here. * ipa-cp.c: Moved to... * ipa-cp.cc: ...here. * ipa-devirt.c: Moved to... * ipa-devirt.cc: ...here. * ipa-fnsummary.c: Moved to... * ipa-fnsummary.cc: ...here. * ipa-icf-gimple.c: Moved to... * ipa-icf-gimple.cc: ...here. * ipa-icf.c: Moved to... * ipa-icf.cc: ...here. * ipa-inline-analysis.c: Moved to... * ipa-inline-analysis.cc: ...here. * ipa-inline-transform.c: Moved to... * ipa-inline-transform.cc: ...here. * ipa-inline.c: Moved to... * ipa-inline.cc: ...here. * ipa-modref-tree.c: Moved to... * ipa-modref-tree.cc: ...here. * ipa-modref.c: Moved to... * ipa-modref.cc: ...here. * ipa-param-manipulation.c: Moved to... * ipa-param-manipulation.cc: ...here. * ipa-polymorphic-call.c: Moved to... * ipa-polymorphic-call.cc: ...here. * ipa-predicate.c: Moved to... * ipa-predicate.cc: ...here. * ipa-profile.c: Moved to... * ipa-profile.cc: ...here. * ipa-prop.c: Moved to... * ipa-prop.cc: ...here. * ipa-pure-const.c: Moved to... * ipa-pure-const.cc: ...here. * ipa-ref.c: Moved to... * ipa-ref.cc: ...here. * ipa-reference.c: Moved to... * ipa-reference.cc: ...here. * ipa-split.c: Moved to... * ipa-split.cc: ...here. * ipa-sra.c: Moved to... * ipa-sra.cc: ...here. * ipa-utils.c: Moved to... * ipa-utils.cc: ...here. * ipa-visibility.c: Moved to... * ipa-visibility.cc: ...here. * ipa.c: Moved to... * ipa.cc: ...here. * ira-build.c: Moved to... * ira-build.cc: ...here. * ira-color.c: Moved to... * ira-color.cc: ...here. * ira-conflicts.c: Moved to... * ira-conflicts.cc: ...here. * ira-costs.c: Moved to... * ira-costs.cc: ...here. * ira-emit.c: Moved to... * ira-emit.cc: ...here. * ira-lives.c: Moved to... * ira-lives.cc: ...here. * ira.c: Moved to... * ira.cc: ...here. * jump.c: Moved to... * jump.cc: ...here. * langhooks.c: Moved to... * langhooks.cc: ...here. * lcm.c: Moved to... * lcm.cc: ...here. * lists.c: Moved to... * lists.cc: ...here. * loop-doloop.c: Moved to... * loop-doloop.cc: ...here. * loop-init.c: Moved to... * loop-init.cc: ...here. * loop-invariant.c: Moved to... * loop-invariant.cc: ...here. * loop-iv.c: Moved to... * loop-iv.cc: ...here. * loop-unroll.c: Moved to... * loop-unroll.cc: ...here. * lower-subreg.c: Moved to... * lower-subreg.cc: ...here. * lra-assigns.c: Moved to... * lra-assigns.cc: ...here. * lra-coalesce.c: Moved to... * lra-coalesce.cc: ...here. * lra-constraints.c: Moved to... * lra-constraints.cc: ...here. * lra-eliminations.c: Moved to... * lra-eliminations.cc: ...here. * lra-lives.c: Moved to... * lra-lives.cc: ...here. * lra-remat.c: Moved to... * lra-remat.cc: ...here. * lra-spills.c: Moved to... * lra-spills.cc: ...here. * lra.c: Moved to... * lra.cc: ...here. * lto-cgraph.c: Moved to... * lto-cgraph.cc: ...here. * lto-compress.c: Moved to... * lto-compress.cc: ...here. * lto-opts.c: Moved to... * lto-opts.cc: ...here. * lto-section-in.c: Moved to... * lto-section-in.cc: ...here. * lto-section-out.c: Moved to... * lto-section-out.cc: ...here. * lto-streamer-in.c: Moved to... * lto-streamer-in.cc: ...here. * lto-streamer-out.c: Moved to... * lto-streamer-out.cc: ...here. * lto-streamer.c: Moved to... * lto-streamer.cc: ...here. * lto-wrapper.c: Moved to... * lto-wrapper.cc: ...here. * main.c: Moved to... * main.cc: ...here. * mcf.c: Moved to... * mcf.cc: ...here. * mode-switching.c: Moved to... * mode-switching.cc: ...here. * modulo-sched.c: Moved to... * modulo-sched.cc: ...here. * multiple_target.c: Moved to... * multiple_target.cc: ...here. * omp-expand.c: Moved to... * omp-expand.cc: ...here. * omp-general.c: Moved to... * omp-general.cc: ...here. * omp-low.c: Moved to... * omp-low.cc: ...here. * omp-offload.c: Moved to... * omp-offload.cc: ...here. * omp-simd-clone.c: Moved to... * omp-simd-clone.cc: ...here. * opt-suggestions.c: Moved to... * opt-suggestions.cc: ...here. * optabs-libfuncs.c: Moved to... * optabs-libfuncs.cc: ...here. * optabs-query.c: Moved to... * optabs-query.cc: ...here. * optabs-tree.c: Moved to... * optabs-tree.cc: ...here. * optabs.c: Moved to... * optabs.cc: ...here. * opts-common.c: Moved to... * opts-common.cc: ...here. * opts-global.c: Moved to... * opts-global.cc: ...here. * opts.c: Moved to... * opts.cc: ...here. * passes.c: Moved to... * passes.cc: ...here. * plugin.c: Moved to... * plugin.cc: ...here. * postreload-gcse.c: Moved to... * postreload-gcse.cc: ...here. * postreload.c: Moved to... * postreload.cc: ...here. * predict.c: Moved to... * predict.cc: ...here. * prefix.c: Moved to... * prefix.cc: ...here. * pretty-print.c: Moved to... * pretty-print.cc: ...here. * print-rtl-function.c: Moved to... * print-rtl-function.cc: ...here. * print-rtl.c: Moved to... * print-rtl.cc: ...here. * print-tree.c: Moved to... * print-tree.cc: ...here. * profile-count.c: Moved to... * profile-count.cc: ...here. * profile.c: Moved to... * profile.cc: ...here. * read-md.c: Moved to... * read-md.cc: ...here. * read-rtl-function.c: Moved to... * read-rtl-function.cc: ...here. * read-rtl.c: Moved to... * read-rtl.cc: ...here. * real.c: Moved to... * real.cc: ...here. * realmpfr.c: Moved to... * realmpfr.cc: ...here. * recog.c: Moved to... * recog.cc: ...here. * ree.c: Moved to... * ree.cc: ...here. * reg-stack.c: Moved to... * reg-stack.cc: ...here. * regcprop.c: Moved to... * regcprop.cc: ...here. * reginfo.c: Moved to... * reginfo.cc: ...here. * regrename.c: Moved to... * regrename.cc: ...here. * regstat.c: Moved to... * regstat.cc: ...here. * reload.c: Moved to... * reload.cc: ...here. * reload1.c: Moved to... * reload1.cc: ...here. * reorg.c: Moved to... * reorg.cc: ...here. * resource.c: Moved to... * resource.cc: ...here. * rtl-error.c: Moved to... * rtl-error.cc: ...here. * rtl-tests.c: Moved to... * rtl-tests.cc: ...here. * rtl.c: Moved to... * rtl.cc: ...here. * rtlanal.c: Moved to... * rtlanal.cc: ...here. * rtlhash.c: Moved to... * rtlhash.cc: ...here. * rtlhooks.c: Moved to... * rtlhooks.cc: ...here. * rtx-vector-builder.c: Moved to... * rtx-vector-builder.cc: ...here. * run-rtl-passes.c: Moved to... * run-rtl-passes.cc: ...here. * sancov.c: Moved to... * sancov.cc: ...here. * sanopt.c: Moved to... * sanopt.cc: ...here. * sbitmap.c: Moved to... * sbitmap.cc: ...here. * sched-deps.c: Moved to... * sched-deps.cc: ...here. * sched-ebb.c: Moved to... * sched-ebb.cc: ...here. * sched-rgn.c: Moved to... * sched-rgn.cc: ...here. * sel-sched-dump.c: Moved to... * sel-sched-dump.cc: ...here. * sel-sched-ir.c: Moved to... * sel-sched-ir.cc: ...here. * sel-sched.c: Moved to... * sel-sched.cc: ...here. * selftest-diagnostic.c: Moved to... * selftest-diagnostic.cc: ...here. * selftest-rtl.c: Moved to... * selftest-rtl.cc: ...here. * selftest-run-tests.c: Moved to... * selftest-run-tests.cc: ...here. * selftest.c: Moved to... * selftest.cc: ...here. * sese.c: Moved to... * sese.cc: ...here. * shrink-wrap.c: Moved to... * shrink-wrap.cc: ...here. * simplify-rtx.c: Moved to... * simplify-rtx.cc: ...here. * sparseset.c: Moved to... * sparseset.cc: ...here. * spellcheck-tree.c: Moved to... * spellcheck-tree.cc: ...here. * spellcheck.c: Moved to... * spellcheck.cc: ...here. * sreal.c: Moved to... * sreal.cc: ...here. * stack-ptr-mod.c: Moved to... * stack-ptr-mod.cc: ...here. * statistics.c: Moved to... * statistics.cc: ...here. * stmt.c: Moved to... * stmt.cc: ...here. * stor-layout.c: Moved to... * stor-layout.cc: ...here. * store-motion.c: Moved to... * store-motion.cc: ...here. * streamer-hooks.c: Moved to... * streamer-hooks.cc: ...here. * stringpool.c: Moved to... * stringpool.cc: ...here. * substring-locations.c: Moved to... * substring-locations.cc: ...here. * symtab.c: Moved to... * symtab.cc: ...here. * target-globals.c: Moved to... * target-globals.cc: ...here. * targhooks.c: Moved to... * targhooks.cc: ...here. * timevar.c: Moved to... * timevar.cc: ...here. * toplev.c: Moved to... * toplev.cc: ...here. * tracer.c: Moved to... * tracer.cc: ...here. * trans-mem.c: Moved to... * trans-mem.cc: ...here. * tree-affine.c: Moved to... * tree-affine.cc: ...here. * tree-call-cdce.c: Moved to... * tree-call-cdce.cc: ...here. * tree-cfg.c: Moved to... * tree-cfg.cc: ...here. * tree-cfgcleanup.c: Moved to... * tree-cfgcleanup.cc: ...here. * tree-chrec.c: Moved to... * tree-chrec.cc: ...here. * tree-complex.c: Moved to... * tree-complex.cc: ...here. * tree-data-ref.c: Moved to... * tree-data-ref.cc: ...here. * tree-dfa.c: Moved to... * tree-dfa.cc: ...here. * tree-diagnostic.c: Moved to... * tree-diagnostic.cc: ...here. * tree-dump.c: Moved to... * tree-dump.cc: ...here. * tree-eh.c: Moved to... * tree-eh.cc: ...here. * tree-emutls.c: Moved to... * tree-emutls.cc: ...here. * tree-if-conv.c: Moved to... * tree-if-conv.cc: ...here. * tree-inline.c: Moved to... * tree-inline.cc: ...here. * tree-into-ssa.c: Moved to... * tree-into-ssa.cc: ...here. * tree-iterator.c: Moved to... * tree-iterator.cc: ...here. * tree-loop-distribution.c: Moved to... * tree-loop-distribution.cc: ...here. * tree-nested.c: Moved to... * tree-nested.cc: ...here. * tree-nrv.c: Moved to... * tree-nrv.cc: ...here. * tree-object-size.c: Moved to... * tree-object-size.cc: ...here. * tree-outof-ssa.c: Moved to... * tree-outof-ssa.cc: ...here. * tree-parloops.c: Moved to... * tree-parloops.cc: ...here. * tree-phinodes.c: Moved to... * tree-phinodes.cc: ...here. * tree-predcom.c: Moved to... * tree-predcom.cc: ...here. * tree-pretty-print.c: Moved to... * tree-pretty-print.cc: ...here. * tree-profile.c: Moved to... * tree-profile.cc: ...here. * tree-scalar-evolution.c: Moved to... * tree-scalar-evolution.cc: ...here. * tree-sra.c: Moved to... * tree-sra.cc: ...here. * tree-ssa-address.c: Moved to... * tree-ssa-address.cc: ...here. * tree-ssa-alias.c: Moved to... * tree-ssa-alias.cc: ...here. * tree-ssa-ccp.c: Moved to... * tree-ssa-ccp.cc: ...here. * tree-ssa-coalesce.c: Moved to... * tree-ssa-coalesce.cc: ...here. * tree-ssa-copy.c: Moved to... * tree-ssa-copy.cc: ...here. * tree-ssa-dce.c: Moved to... * tree-ssa-dce.cc: ...here. * tree-ssa-dom.c: Moved to... * tree-ssa-dom.cc: ...here. * tree-ssa-dse.c: Moved to... * tree-ssa-dse.cc: ...here. * tree-ssa-forwprop.c: Moved to... * tree-ssa-forwprop.cc: ...here. * tree-ssa-ifcombine.c: Moved to... * tree-ssa-ifcombine.cc: ...here. * tree-ssa-live.c: Moved to... * tree-ssa-live.cc: ...here. * tree-ssa-loop-ch.c: Moved to... * tree-ssa-loop-ch.cc: ...here. * tree-ssa-loop-im.c: Moved to... * tree-ssa-loop-im.cc: ...here. * tree-ssa-loop-ivcanon.c: Moved to... * tree-ssa-loop-ivcanon.cc: ...here. * tree-ssa-loop-ivopts.c: Moved to... * tree-ssa-loop-ivopts.cc: ...here. * tree-ssa-loop-manip.c: Moved to... * tree-ssa-loop-manip.cc: ...here. * tree-ssa-loop-niter.c: Moved to... * tree-ssa-loop-niter.cc: ...here. * tree-ssa-loop-prefetch.c: Moved to... * tree-ssa-loop-prefetch.cc: ...here. * tree-ssa-loop-split.c: Moved to... * tree-ssa-loop-split.cc: ...here. * tree-ssa-loop-unswitch.c: Moved to... * tree-ssa-loop-unswitch.cc: ...here. * tree-ssa-loop.c: Moved to... * tree-ssa-loop.cc: ...here. * tree-ssa-math-opts.c: Moved to... * tree-ssa-math-opts.cc: ...here. * tree-ssa-operands.c: Moved to... * tree-ssa-operands.cc: ...here. * tree-ssa-phiopt.c: Moved to... * tree-ssa-phiopt.cc: ...here. * tree-ssa-phiprop.c: Moved to... * tree-ssa-phiprop.cc: ...here. * tree-ssa-pre.c: Moved to... * tree-ssa-pre.cc: ...here. * tree-ssa-propagate.c: Moved to... * tree-ssa-propagate.cc: ...here. * tree-ssa-reassoc.c: Moved to... * tree-ssa-reassoc.cc: ...here. * tree-ssa-sccvn.c: Moved to... * tree-ssa-sccvn.cc: ...here. * tree-ssa-scopedtables.c: Moved to... * tree-ssa-scopedtables.cc: ...here. * tree-ssa-sink.c: Moved to... * tree-ssa-sink.cc: ...here. * tree-ssa-strlen.c: Moved to... * tree-ssa-strlen.cc: ...here. * tree-ssa-structalias.c: Moved to... * tree-ssa-structalias.cc: ...here. * tree-ssa-tail-merge.c: Moved to... * tree-ssa-tail-merge.cc: ...here. * tree-ssa-ter.c: Moved to... * tree-ssa-ter.cc: ...here. * tree-ssa-threadbackward.c: Moved to... * tree-ssa-threadbackward.cc: ...here. * tree-ssa-threadedge.c: Moved to... * tree-ssa-threadedge.cc: ...here. * tree-ssa-threadupdate.c: Moved to... * tree-ssa-threadupdate.cc: ...here. * tree-ssa-uncprop.c: Moved to... * tree-ssa-uncprop.cc: ...here. * tree-ssa-uninit.c: Moved to... * tree-ssa-uninit.cc: ...here. * tree-ssa.c: Moved to... * tree-ssa.cc: ...here. * tree-ssanames.c: Moved to... * tree-ssanames.cc: ...here. * tree-stdarg.c: Moved to... * tree-stdarg.cc: ...here. * tree-streamer-in.c: Moved to... * tree-streamer-in.cc: ...here. * tree-streamer-out.c: Moved to... * tree-streamer-out.cc: ...here. * tree-streamer.c: Moved to... * tree-streamer.cc: ...here. * tree-switch-conversion.c: Moved to... * tree-switch-conversion.cc: ...here. * tree-tailcall.c: Moved to... * tree-tailcall.cc: ...here. * tree-vect-data-refs.c: Moved to... * tree-vect-data-refs.cc: ...here. * tree-vect-generic.c: Moved to... * tree-vect-generic.cc: ...here. * tree-vect-loop-manip.c: Moved to... * tree-vect-loop-manip.cc: ...here. * tree-vect-loop.c: Moved to... * tree-vect-loop.cc: ...here. * tree-vect-patterns.c: Moved to... * tree-vect-patterns.cc: ...here. * tree-vect-slp-patterns.c: Moved to... * tree-vect-slp-patterns.cc: ...here. * tree-vect-slp.c: Moved to... * tree-vect-slp.cc: ...here. * tree-vect-stmts.c: Moved to... * tree-vect-stmts.cc: ...here. * tree-vector-builder.c: Moved to... * tree-vector-builder.cc: ...here. * tree-vectorizer.c: Moved to... * tree-vectorizer.cc: ...here. * tree-vrp.c: Moved to... * tree-vrp.cc: ...here. * tree.c: Moved to... * tree.cc: ...here. * tsan.c: Moved to... * tsan.cc: ...here. * typed-splay-tree.c: Moved to... * typed-splay-tree.cc: ...here. * ubsan.c: Moved to... * ubsan.cc: ...here. * valtrack.c: Moved to... * valtrack.cc: ...here. * value-prof.c: Moved to... * value-prof.cc: ...here. * var-tracking.c: Moved to... * var-tracking.cc: ...here. * varasm.c: Moved to... * varasm.cc: ...here. * varpool.c: Moved to... * varpool.cc: ...here. * vec-perm-indices.c: Moved to... * vec-perm-indices.cc: ...here. * vec.c: Moved to... * vec.cc: ...here. * vmsdbgout.c: Moved to... * vmsdbgout.cc: ...here. * vr-values.c: Moved to... * vr-values.cc: ...here. * vtable-verify.c: Moved to... * vtable-verify.cc: ...here. * web.c: Moved to... * web.cc: ...here. * xcoffout.c: Moved to... * xcoffout.cc: ...here. gcc/c-family/ChangeLog: * c-ada-spec.c: Moved to... * c-ada-spec.cc: ...here. * c-attribs.c: Moved to... * c-attribs.cc: ...here. * c-common.c: Moved to... * c-common.cc: ...here. * c-cppbuiltin.c: Moved to... * c-cppbuiltin.cc: ...here. * c-dump.c: Moved to... * c-dump.cc: ...here. * c-format.c: Moved to... * c-format.cc: ...here. * c-gimplify.c: Moved to... * c-gimplify.cc: ...here. * c-indentation.c: Moved to... * c-indentation.cc: ...here. * c-lex.c: Moved to... * c-lex.cc: ...here. * c-omp.c: Moved to... * c-omp.cc: ...here. * c-opts.c: Moved to... * c-opts.cc: ...here. * c-pch.c: Moved to... * c-pch.cc: ...here. * c-ppoutput.c: Moved to... * c-ppoutput.cc: ...here. * c-pragma.c: Moved to... * c-pragma.cc: ...here. * c-pretty-print.c: Moved to... * c-pretty-print.cc: ...here. * c-semantics.c: Moved to... * c-semantics.cc: ...here. * c-ubsan.c: Moved to... * c-ubsan.cc: ...here. * c-warn.c: Moved to... * c-warn.cc: ...here. * cppspec.c: Moved to... * cppspec.cc: ...here. * stub-objc.c: Moved to... * stub-objc.cc: ...here. gcc/c/ChangeLog: * c-aux-info.c: Moved to... * c-aux-info.cc: ...here. * c-convert.c: Moved to... * c-convert.cc: ...here. * c-decl.c: Moved to... * c-decl.cc: ...here. * c-errors.c: Moved to... * c-errors.cc: ...here. * c-fold.c: Moved to... * c-fold.cc: ...here. * c-lang.c: Moved to... * c-lang.cc: ...here. * c-objc-common.c: Moved to... * c-objc-common.cc: ...here. * c-parser.c: Moved to... * c-parser.cc: ...here. * c-typeck.c: Moved to... * c-typeck.cc: ...here. * gccspec.c: Moved to... * gccspec.cc: ...here. * gimple-parser.c: Moved to... * gimple-parser.cc: ...here. gcc/cp/ChangeLog: * call.c: Moved to... * call.cc: ...here. * class.c: Moved to... * class.cc: ...here. * constexpr.c: Moved to... * constexpr.cc: ...here. * cp-gimplify.c: Moved to... * cp-gimplify.cc: ...here. * cp-lang.c: Moved to... * cp-lang.cc: ...here. * cp-objcp-common.c: Moved to... * cp-objcp-common.cc: ...here. * cp-ubsan.c: Moved to... * cp-ubsan.cc: ...here. * cvt.c: Moved to... * cvt.cc: ...here. * cxx-pretty-print.c: Moved to... * cxx-pretty-print.cc: ...here. * decl.c: Moved to... * decl.cc: ...here. * decl2.c: Moved to... * decl2.cc: ...here. * dump.c: Moved to... * dump.cc: ...here. * error.c: Moved to... * error.cc: ...here. * except.c: Moved to... * except.cc: ...here. * expr.c: Moved to... * expr.cc: ...here. * friend.c: Moved to... * friend.cc: ...here. * g++spec.c: Moved to... * g++spec.cc: ...here. * init.c: Moved to... * init.cc: ...here. * lambda.c: Moved to... * lambda.cc: ...here. * lex.c: Moved to... * lex.cc: ...here. * mangle.c: Moved to... * mangle.cc: ...here. * method.c: Moved to... * method.cc: ...here. * name-lookup.c: Moved to... * name-lookup.cc: ...here. * optimize.c: Moved to... * optimize.cc: ...here. * parser.c: Moved to... * parser.cc: ...here. * pt.c: Moved to... * pt.cc: ...here. * ptree.c: Moved to... * ptree.cc: ...here. * rtti.c: Moved to... * rtti.cc: ...here. * search.c: Moved to... * search.cc: ...here. * semantics.c: Moved to... * semantics.cc: ...here. * tree.c: Moved to... * tree.cc: ...here. * typeck.c: Moved to... * typeck.cc: ...here. * typeck2.c: Moved to... * typeck2.cc: ...here. * vtable-class-hierarchy.c: Moved to... * vtable-class-hierarchy.cc: ...here. gcc/fortran/ChangeLog: * arith.c: Moved to... * arith.cc: ...here. * array.c: Moved to... * array.cc: ...here. * bbt.c: Moved to... * bbt.cc: ...here. * check.c: Moved to... * check.cc: ...here. * class.c: Moved to... * class.cc: ...here. * constructor.c: Moved to... * constructor.cc: ...here. * convert.c: Moved to... * convert.cc: ...here. * cpp.c: Moved to... * cpp.cc: ...here. * data.c: Moved to... * data.cc: ...here. * decl.c: Moved to... * decl.cc: ...here. * dependency.c: Moved to... * dependency.cc: ...here. * dump-parse-tree.c: Moved to... * dump-parse-tree.cc: ...here. * error.c: Moved to... * error.cc: ...here. * expr.c: Moved to... * expr.cc: ...here. * f95-lang.c: Moved to... * f95-lang.cc: ...here. * frontend-passes.c: Moved to... * frontend-passes.cc: ...here. * gfortranspec.c: Moved to... * gfortranspec.cc: ...here. * interface.c: Moved to... * interface.cc: ...here. * intrinsic.c: Moved to... * intrinsic.cc: ...here. * io.c: Moved to... * io.cc: ...here. * iresolve.c: Moved to... * iresolve.cc: ...here. * match.c: Moved to... * match.cc: ...here. * matchexp.c: Moved to... * matchexp.cc: ...here. * misc.c: Moved to... * misc.cc: ...here. * module.c: Moved to... * module.cc: ...here. * openmp.c: Moved to... * openmp.cc: ...here. * options.c: Moved to... * options.cc: ...here. * parse.c: Moved to... * parse.cc: ...here. * primary.c: Moved to... * primary.cc: ...here. * resolve.c: Moved to... * resolve.cc: ...here. * scanner.c: Moved to... * scanner.cc: ...here. * simplify.c: Moved to... * simplify.cc: ...here. * st.c: Moved to... * st.cc: ...here. * symbol.c: Moved to... * symbol.cc: ...here. * target-memory.c: Moved to... * target-memory.cc: ...here. * trans-array.c: Moved to... * trans-array.cc: ...here. * trans-common.c: Moved to... * trans-common.cc: ...here. * trans-const.c: Moved to... * trans-const.cc: ...here. * trans-decl.c: Moved to... * trans-decl.cc: ...here. * trans-expr.c: Moved to... * trans-expr.cc: ...here. * trans-intrinsic.c: Moved to... * trans-intrinsic.cc: ...here. * trans-io.c: Moved to... * trans-io.cc: ...here. * trans-openmp.c: Moved to... * trans-openmp.cc: ...here. * trans-stmt.c: Moved to... * trans-stmt.cc: ...here. * trans-types.c: Moved to... * trans-types.cc: ...here. * trans.c: Moved to... * trans.cc: ...here. gcc/go/ChangeLog: * go-backend.c: Moved to... * go-backend.cc: ...here. * go-lang.c: Moved to... * go-lang.cc: ...here. * gospec.c: Moved to... * gospec.cc: ...here. gcc/jit/ChangeLog: * dummy-frontend.c: Moved to... * dummy-frontend.cc: ...here. * jit-builtins.c: Moved to... * jit-builtins.cc: ...here. * jit-logging.c: Moved to... * jit-logging.cc: ...here. * jit-playback.c: Moved to... * jit-playback.cc: ...here. * jit-recording.c: Moved to... * jit-recording.cc: ...here. * jit-result.c: Moved to... * jit-result.cc: ...here. * jit-spec.c: Moved to... * jit-spec.cc: ...here. * jit-tempdir.c: Moved to... * jit-tempdir.cc: ...here. * jit-w32.c: Moved to... * jit-w32.cc: ...here. * libgccjit.c: Moved to... * libgccjit.cc: ...here. gcc/lto/ChangeLog: * common.c: Moved to... * common.cc: ...here. * lto-common.c: Moved to... * lto-common.cc: ...here. * lto-dump.c: Moved to... * lto-dump.cc: ...here. * lto-lang.c: Moved to... * lto-lang.cc: ...here. * lto-object.c: Moved to... * lto-object.cc: ...here. * lto-partition.c: Moved to... * lto-partition.cc: ...here. * lto-symtab.c: Moved to... * lto-symtab.cc: ...here. * lto.c: Moved to... * lto.cc: ...here. gcc/objc/ChangeLog: * objc-act.c: Moved to... * objc-act.cc: ...here. * objc-encoding.c: Moved to... * objc-encoding.cc: ...here. * objc-gnu-runtime-abi-01.c: Moved to... * objc-gnu-runtime-abi-01.cc: ...here. * objc-lang.c: Moved to... * objc-lang.cc: ...here. * objc-map.c: Moved to... * objc-map.cc: ...here. * objc-next-runtime-abi-01.c: Moved to... * objc-next-runtime-abi-01.cc: ...here. * objc-next-runtime-abi-02.c: Moved to... * objc-next-runtime-abi-02.cc: ...here. * objc-runtime-shared-support.c: Moved to... * objc-runtime-shared-support.cc: ...here. gcc/objcp/ChangeLog: * objcp-decl.c: Moved to... * objcp-decl.cc: ...here. * objcp-lang.c: Moved to... * objcp-lang.cc: ...here. libcpp/ChangeLog: * charset.c: Moved to... * charset.cc: ...here. * directives.c: Moved to... * directives.cc: ...here. * errors.c: Moved to... * errors.cc: ...here. * expr.c: Moved to... * expr.cc: ...here. * files.c: Moved to... * files.cc: ...here. * identifiers.c: Moved to... * identifiers.cc: ...here. * init.c: Moved to... * init.cc: ...here. * lex.c: Moved to... * lex.cc: ...here. * line-map.c: Moved to... * line-map.cc: ...here. * macro.c: Moved to... * macro.cc: ...here. * makeucnid.c: Moved to... * makeucnid.cc: ...here. * mkdeps.c: Moved to... * mkdeps.cc: ...here. * pch.c: Moved to... * pch.cc: ...here. * symtab.c: Moved to... * symtab.cc: ...here. * traditional.c: Moved to... * traditional.cc: ...here.
Diffstat (limited to 'gcc/ada/init.c')
-rw-r--r--gcc/ada/init.c2921
1 files changed, 0 insertions, 2921 deletions
diff --git a/gcc/ada/init.c b/gcc/ada/init.c
deleted file mode 100644
index 9b15a16..0000000
--- a/gcc/ada/init.c
+++ /dev/null
@@ -1,2921 +0,0 @@
-/****************************************************************************
- * *
- * GNAT COMPILER COMPONENTS *
- * *
- * I N I T *
- * *
- * C Implementation File *
- * *
- * Copyright (C) 1992-2022, Free Software Foundation, Inc. *
- * *
- * GNAT is free software; you can redistribute it and/or modify it under *
- * terms of the GNU General Public License as published by the Free Soft- *
- * ware Foundation; either version 3, or (at your option) any later ver- *
- * sion. GNAT is distributed in the hope that it will be useful, but WITH- *
- * OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY *
- * or FITNESS FOR A PARTICULAR PURPOSE. *
- * *
- * As a special exception under Section 7 of GPL version 3, you are granted *
- * additional permissions described in the GCC Runtime Library Exception, *
- * version 3.1, as published by the Free Software Foundation. *
- * *
- * You should have received a copy of the GNU General Public License and *
- * a copy of the GCC Runtime Library Exception along with this program; *
- * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see *
- * <http://www.gnu.org/licenses/>. *
- * *
- * GNAT was originally developed by the GNAT team at New York University. *
- * Extensive contributions were provided by Ada Core Technologies Inc. *
- * *
- ****************************************************************************/
-
-/* This unit contains initialization circuits that are system dependent.
- A major part of the functionality involves stack overflow checking.
- The GCC backend generates probe instructions to test for stack overflow.
- For details on the exact approach used to generate these probes, see the
- "Using and Porting GCC" manual, in particular the "Stack Checking" section
- and the subsection "Specifying How Stack Checking is Done". The handlers
- installed by this file are used to catch the resulting signals that come
- from these probes failing (i.e. touching protected pages). */
-
-/* This file should be kept synchronized with s-init.ads, s-init.adb and the
- s-init-*.adb variants. All these files implement the required functionality
- for different targets. */
-
-/* The following include is here to meet the published VxWorks requirement
- that the __vxworks header appear before any other include. */
-#ifdef __vxworks
-#include "vxWorks.h"
-#include "version.h" /* for _WRS_VXWORKS_MAJOR */
-#endif
-
-#ifdef __ANDROID__
-#undef __linux__
-#endif
-
-#ifdef IN_RTS
-
-#ifdef STANDALONE
-#include "runtime.h"
-#else
-#include "tconfig.h"
-#include "tsystem.h"
-#endif
-
-#include <sys/stat.h>
-
-/* We don't have libiberty, so use malloc. */
-#define xmalloc(S) malloc (S)
-#else
-#include "config.h"
-#include "system.h"
-#endif
-
-#include "adaint.h"
-#include "raise.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern void __gnat_raise_program_error (const void *, int);
-
-/* Addresses of exception data blocks for predefined exceptions. Tasking_Error
- is not used in this unit, and the abort signal is only used on IRIX.
- ??? Revisit this part since IRIX is no longer supported. */
-extern struct Exception_Data constraint_error;
-extern struct Exception_Data numeric_error;
-extern struct Exception_Data program_error;
-extern struct Exception_Data storage_error;
-
-/* For the Cert run time we use the regular raise exception routine because
- __gnat_raise_from_signal_handler is not available. */
-#ifdef CERT
-#define Raise_From_Signal_Handler __gnat_raise_exception
-#else
-#define Raise_From_Signal_Handler __gnat_raise_from_signal_handler
-#endif
-
-extern void Raise_From_Signal_Handler (struct Exception_Data *, const void *)
- ATTRIBUTE_NORETURN;
-
-/* Global values computed by the binder. Note that these variables are
- declared here, not in the binder file, to avoid having unresolved
- references in the shared libgnat. */
-int __gl_main_priority = -1;
-int __gl_main_cpu = -1;
-int __gl_time_slice_val = -1;
-char __gl_wc_encoding = 'n';
-char __gl_locking_policy = ' ';
-char __gl_queuing_policy = ' ';
-char __gl_task_dispatching_policy = ' ';
-char *__gl_priority_specific_dispatching = 0;
-int __gl_num_specific_dispatching = 0;
-char *__gl_interrupt_states = 0;
-int __gl_num_interrupt_states = 0;
-int __gl_unreserve_all_interrupts = 0;
-int __gl_exception_tracebacks = 0;
-int __gl_exception_tracebacks_symbolic = 0;
-int __gl_detect_blocking = 0;
-int __gl_default_stack_size = -1;
-int __gl_leap_seconds_support = 0;
-int __gl_canonical_streams = 0;
-char *__gl_bind_env_addr = NULL;
-int __gl_xdr_stream = 0;
-
-/* This value is not used anymore, but kept for bootstrapping purpose. */
-int __gl_zero_cost_exceptions = 0;
-
-/* Indication of whether synchronous signal handler has already been
- installed by a previous call to adainit. */
-int __gnat_handler_installed = 0;
-
-#ifndef IN_RTS
-int __gnat_inside_elab_final_code = 0;
-/* ??? This variable is obsolete since 2001-08-29 but is kept to allow
- bootstrap from old GNAT versions (< 3.15). */
-#endif
-
-/* HAVE_GNAT_INIT_FLOAT must be set on every targets where a __gnat_init_float
- is defined. If this is not set then a void implementation will be defined
- at the end of this unit. */
-#undef HAVE_GNAT_INIT_FLOAT
-
-/******************************/
-/* __gnat_get_interrupt_state */
-/******************************/
-
-char __gnat_get_interrupt_state (int);
-
-/* This routine is called from the runtime as needed to determine the state
- of an interrupt, as set by an Interrupt_State pragma appearing anywhere
- in the current partition. The input argument is the interrupt number,
- and the result is one of the following:
-
- 'n' this interrupt not set by any Interrupt_State pragma
- 'u' Interrupt_State pragma set state to User
- 'r' Interrupt_State pragma set state to Runtime
- 's' Interrupt_State pragma set state to System */
-
-char
-__gnat_get_interrupt_state (int intrup)
-{
- if (intrup >= __gl_num_interrupt_states)
- return 'n';
- else
- return __gl_interrupt_states [intrup];
-}
-
-/***********************************/
-/* __gnat_get_specific_dispatching */
-/***********************************/
-
-char __gnat_get_specific_dispatching (int);
-
-/* This routine is called from the runtime as needed to determine the
- priority specific dispatching policy, as set by a
- Priority_Specific_Dispatching pragma appearing anywhere in the current
- partition. The input argument is the priority number, and the result
- is the upper case first character of the policy name, e.g. 'F' for
- FIFO_Within_Priorities. A space ' ' is returned if no
- Priority_Specific_Dispatching pragma is used in the partition. */
-
-char
-__gnat_get_specific_dispatching (int priority)
-{
- if (__gl_num_specific_dispatching == 0)
- return ' ';
- else if (priority >= __gl_num_specific_dispatching)
- return 'F';
- else
- return __gl_priority_specific_dispatching [priority];
-}
-
-#ifndef IN_RTS
-
-/**********************/
-/* __gnat_set_globals */
-/**********************/
-
-/* This routine is kept for bootstrapping purposes, since the binder generated
- file now sets the __gl_* variables directly. */
-
-void
-__gnat_set_globals (void)
-{
-}
-
-#endif
-
-/***************/
-/* AIX Section */
-/***************/
-
-#if defined (_AIX)
-
-#include <signal.h>
-#include <sys/time.h>
-
-/* Some versions of AIX don't define SA_NODEFER. */
-
-#ifndef SA_NODEFER
-#define SA_NODEFER 0
-#endif /* SA_NODEFER */
-
-/* Versions of AIX before 4.3 don't have nanosleep but provide
- nsleep instead. */
-
-#ifndef _AIXVERSION_430
-
-extern int nanosleep (struct timestruc_t *, struct timestruc_t *);
-
-int
-nanosleep (struct timestruc_t *Rqtp, struct timestruc_t *Rmtp)
-{
- return nsleep (Rqtp, Rmtp);
-}
-
-#endif /* _AIXVERSION_430 */
-
-static void
-__gnat_error_handler (int sig,
- siginfo_t *si ATTRIBUTE_UNUSED,
- void *ucontext ATTRIBUTE_UNUSED)
-{
- struct Exception_Data *exception;
- const char *msg;
-
- switch (sig)
- {
- case SIGSEGV:
- /* FIXME: we need to detect the case of a *real* SIGSEGV. */
- exception = &storage_error;
- msg = "stack overflow or erroneous memory access";
- break;
-
- case SIGBUS:
- exception = &constraint_error;
- msg = "SIGBUS";
- break;
-
- case SIGFPE:
- exception = &constraint_error;
- msg = "SIGFPE";
- break;
-
- default:
- exception = &program_error;
- msg = "unhandled signal";
- }
-
- Raise_From_Signal_Handler (exception, msg);
-}
-
-void
-__gnat_install_handler (void)
-{
- struct sigaction act;
-
- /* Set up signal handler to map synchronous signals to appropriate
- exceptions. Make sure that the handler isn't interrupted by another
- signal that might cause a scheduling event! */
-
- act.sa_flags = SA_NODEFER | SA_RESTART | SA_SIGINFO;
- act.sa_sigaction = __gnat_error_handler;
- sigemptyset (&act.sa_mask);
-
- /* Do not install handlers if interrupt state is "System". */
- if (__gnat_get_interrupt_state (SIGABRT) != 's')
- sigaction (SIGABRT, &act, NULL);
- if (__gnat_get_interrupt_state (SIGFPE) != 's')
- sigaction (SIGFPE, &act, NULL);
- if (__gnat_get_interrupt_state (SIGILL) != 's')
- sigaction (SIGILL, &act, NULL);
- if (__gnat_get_interrupt_state (SIGSEGV) != 's')
- sigaction (SIGSEGV, &act, NULL);
- if (__gnat_get_interrupt_state (SIGBUS) != 's')
- sigaction (SIGBUS, &act, NULL);
-
- __gnat_handler_installed = 1;
-}
-
-/*****************/
-/* HP-UX section */
-/*****************/
-
-#elif defined (__hpux__)
-
-#include <signal.h>
-#include <sys/ucontext.h>
-
-#if defined (IN_RTS) && defined (__ia64__)
-
-#include <sys/uc_access.h>
-
-#define HAVE_GNAT_ADJUST_CONTEXT_FOR_RAISE
-
-void
-__gnat_adjust_context_for_raise (int signo ATTRIBUTE_UNUSED, void *ucontext)
-{
- ucontext_t *uc = (ucontext_t *) ucontext;
- uint64_t ip;
-
- /* Adjust on itanium, as GetIPInfo is not supported. */
- __uc_get_ip (uc, &ip);
- __uc_set_ip (uc, ip + 1);
-}
-#endif /* IN_RTS && __ia64__ */
-
-/* Tasking and Non-tasking signal handler. Map SIGnal to Ada exception
- propagation after the required low level adjustments. */
-
-static void
-__gnat_error_handler (int sig, siginfo_t *si ATTRIBUTE_UNUSED, void *ucontext)
-{
- struct Exception_Data *exception;
- const char *msg;
-
- __gnat_adjust_context_for_raise (sig, ucontext);
-
- switch (sig)
- {
- case SIGSEGV:
- /* FIXME: we need to detect the case of a *real* SIGSEGV. */
- exception = &storage_error;
- msg = "stack overflow or erroneous memory access";
- break;
-
- case SIGBUS:
- exception = &constraint_error;
- msg = "SIGBUS";
- break;
-
- case SIGFPE:
- exception = &constraint_error;
- msg = "SIGFPE";
- break;
-
- default:
- exception = &program_error;
- msg = "unhandled signal";
- }
-
- Raise_From_Signal_Handler (exception, msg);
-}
-
-/* This must be in keeping with System.OS_Interface.Alternate_Stack_Size. */
-#if defined (__hppa__)
-char __gnat_alternate_stack[16 * 1024]; /* 2 * SIGSTKSZ */
-#else
-char __gnat_alternate_stack[128 * 1024]; /* MINSIGSTKSZ */
-#endif
-
-void
-__gnat_install_handler (void)
-{
- struct sigaction act;
-
- /* Set up signal handler to map synchronous signals to appropriate
- exceptions. Make sure that the handler isn't interrupted by another
- signal that might cause a scheduling event! Also setup an alternate
- stack region for the handler execution so that stack overflows can be
- handled properly, avoiding a SEGV generation from stack usage by the
- handler itself. */
-
- stack_t stack;
- stack.ss_sp = __gnat_alternate_stack;
- stack.ss_size = sizeof (__gnat_alternate_stack);
- stack.ss_flags = 0;
- sigaltstack (&stack, NULL);
-
- act.sa_sigaction = __gnat_error_handler;
- act.sa_flags = SA_NODEFER | SA_RESTART | SA_SIGINFO;
- sigemptyset (&act.sa_mask);
-
- /* Do not install handlers if interrupt state is "System". */
- if (__gnat_get_interrupt_state (SIGABRT) != 's')
- sigaction (SIGABRT, &act, NULL);
- if (__gnat_get_interrupt_state (SIGFPE) != 's')
- sigaction (SIGFPE, &act, NULL);
- if (__gnat_get_interrupt_state (SIGILL) != 's')
- sigaction (SIGILL, &act, NULL);
- if (__gnat_get_interrupt_state (SIGBUS) != 's')
- sigaction (SIGBUS, &act, NULL);
- act.sa_flags |= SA_ONSTACK;
- if (__gnat_get_interrupt_state (SIGSEGV) != 's')
- sigaction (SIGSEGV, &act, NULL);
-
- __gnat_handler_installed = 1;
-}
-
-/*********************/
-/* GNU/Linux Section */
-/*********************/
-
-#elif defined (__linux__)
-
-#include <signal.h>
-
-#define __USE_GNU 1 /* required to get REG_EIP/RIP from glibc's ucontext.h */
-#include <sys/ucontext.h>
-
-/* GNU/Linux, which uses glibc, does not define NULL in included
- header files. */
-
-#if !defined (NULL)
-#define NULL ((void *) 0)
-#endif
-
-#if defined (MaRTE)
-
-/* MaRTE OS provides its own version of sigaction, sigfillset, and
- sigemptyset (overriding these symbol names). We want to make sure that
- the versions provided by the underlying C library are used here (these
- versions are renamed by MaRTE to linux_sigaction, fake_linux_sigfillset,
- and fake_linux_sigemptyset, respectively). The MaRTE library will not
- always be present (it will not be linked if no tasking constructs are
- used), so we use the weak symbol mechanism to point always to the symbols
- defined within the C library. */
-
-#pragma weak linux_sigaction
-int linux_sigaction (int signum, const struct sigaction *act,
- struct sigaction *oldact)
-{
- return sigaction (signum, act, oldact);
-}
-#define sigaction(signum, act, oldact) linux_sigaction (signum, act, oldact)
-
-#pragma weak fake_linux_sigfillset
-void fake_linux_sigfillset (sigset_t *set)
-{
- sigfillset (set);
-}
-#define sigfillset(set) fake_linux_sigfillset (set)
-
-#pragma weak fake_linux_sigemptyset
-void fake_linux_sigemptyset (sigset_t *set)
-{
- sigemptyset (set);
-}
-#define sigemptyset(set) fake_linux_sigemptyset (set)
-
-#endif
-
-#if defined (__i386__) || defined (__x86_64__) || defined (__ia64__) \
- || defined (__ARMEL__)
-
-#define HAVE_GNAT_ADJUST_CONTEXT_FOR_RAISE
-
-void
-__gnat_adjust_context_for_raise (int signo ATTRIBUTE_UNUSED, void *ucontext)
-{
-#ifndef STANDALONE
- mcontext_t *mcontext = &((ucontext_t *) ucontext)->uc_mcontext;
-
- /* On the i386 and x86-64 architectures, stack checking is performed by
- means of probes with moving stack pointer, that is to say the probed
- address is always the value of the stack pointer. Upon hitting the
- guard page, the stack pointer therefore points to an inaccessible
- address and an alternate signal stack is needed to run the handler.
- But there is an additional twist: on these architectures, the EH
- return code writes the address of the handler at the target CFA's
- value on the stack before doing the jump. As a consequence, if
- there is an active handler in the frame whose stack has overflowed,
- the stack pointer must nevertheless point to an accessible address
- by the time the EH return is executed.
-
- We therefore adjust the saved value of the stack pointer by the size
- of one page + a small dope of 4 words, in order to make sure that it
- points to an accessible address in case it's used as the target CFA.
- The stack checking code guarantees that this address is unused by the
- time this happens. */
-
-#if defined (__i386__)
- unsigned long *pc = (unsigned long *)mcontext->gregs[REG_EIP];
- /* The pattern is "orl $0x0,(%esp)" for a probe in 32-bit mode. */
- if (signo == SIGSEGV && pc && *pc == 0x00240c83)
- mcontext->gregs[REG_ESP] += 4096 + 4 * sizeof (unsigned long);
-#elif defined (__x86_64__)
- unsigned long long *pc = (unsigned long long *)mcontext->gregs[REG_RIP];
- if (signo == SIGSEGV && pc
- /* The pattern is "orq $0x0,(%rsp)" for a probe in 64-bit mode. */
- && ((*pc & 0xffffffffffLL) == 0x00240c8348LL
- /* The pattern may also be "orl $0x0,(%esp)" for a probe in
- x32 mode. */
- || (*pc & 0xffffffffLL) == 0x00240c83LL))
- mcontext->gregs[REG_RSP] += 4096 + 4 * sizeof (unsigned long);
-#elif defined (__ia64__)
- /* ??? The IA-64 unwinder doesn't compensate for signals. */
- mcontext->sc_ip++;
-#elif defined (__ARMEL__)
- /* ARM Bump has to be an even number because of odd/even architecture. */
- mcontext->arm_pc+=2;
-#ifdef __thumb2__
-#define CPSR_THUMB_BIT 5
- /* For thumb, the return address much have the low order bit set, otherwise
- the unwinder will reset to "arm" mode upon return. As long as the
- compilation unit containing the landing pad is compiled with the same
- mode (arm vs thumb) as the signaling compilation unit, this works. */
- if (mcontext->arm_cpsr & (1<<CPSR_THUMB_BIT))
- mcontext->arm_pc+=1;
-#endif
-#endif
-#endif
-}
-
-#endif
-
-static void
-__gnat_error_handler (int sig, siginfo_t *si ATTRIBUTE_UNUSED, void *ucontext)
-{
- struct Exception_Data *exception;
- const char *msg;
-
- /* Adjusting is required for every fault context, so adjust for this one
- now, before we possibly trigger a recursive fault below. */
- __gnat_adjust_context_for_raise (sig, ucontext);
-
- switch (sig)
- {
- case SIGSEGV:
- /* Here we would like a discrimination test to see whether the page
- before the faulting address is accessible. Unfortunately, Linux
- seems to have no way of giving us the faulting address.
-
- In old versions of init.c, we had a test of the page before the
- stack pointer:
-
- ((volatile char *)
- ((long) si->esp_at_signal & - getpagesize ()))[getpagesize ()];
-
- but that's wrong since it tests the stack pointer location and the
- stack probing code may not move it until all probes succeed.
-
- For now we simply do not attempt any discrimination at all. Note
- that this is quite acceptable, since a "real" SIGSEGV can only
- occur as the result of an erroneous program. */
- exception = &storage_error;
- msg = "stack overflow or erroneous memory access";
- break;
-
- case SIGBUS:
- exception = &storage_error;
- msg = "SIGBUS: possible stack overflow";
- break;
-
- case SIGFPE:
- exception = &constraint_error;
- msg = "SIGFPE";
- break;
-
- default:
- exception = &program_error;
- msg = "unhandled signal";
- }
-
- Raise_From_Signal_Handler (exception, msg);
-}
-
-#ifndef __ia64__
-#define HAVE_GNAT_ALTERNATE_STACK 1
-/* This must be in keeping with System.OS_Interface.Alternate_Stack_Size. */
-char __gnat_alternate_stack[32 * 1024];
-#endif
-
-#ifdef __XENO__
-#include <sys/mman.h>
-#include <native/task.h>
-
-RT_TASK main_task;
-#endif
-
-void
-__gnat_install_handler (void)
-{
- struct sigaction act;
-
-#ifdef __XENO__
- int prio;
-
- if (__gl_main_priority == -1)
- prio = 49;
- else
- prio = __gl_main_priority;
-
- /* Avoid memory swapping for this program */
-
- mlockall (MCL_CURRENT|MCL_FUTURE);
-
- /* Turn the current Linux task into a native Xenomai task */
-
- rt_task_shadow (&main_task, "environment_task", prio, T_FPU);
-#endif
-
- /* Set up signal handler to map synchronous signals to appropriate
- exceptions. Make sure that the handler isn't interrupted by another
- signal that might cause a scheduling event! Also setup an alternate
- stack region for the handler execution so that stack overflows can be
- handled properly, avoiding a SEGV generation from stack usage by the
- handler itself. */
-
- act.sa_sigaction = __gnat_error_handler;
- act.sa_flags = SA_NODEFER | SA_RESTART | SA_SIGINFO;
- sigemptyset (&act.sa_mask);
-
- /* Do not install handlers if interrupt state is "System". */
- if (__gnat_get_interrupt_state (SIGABRT) != 's')
- sigaction (SIGABRT, &act, NULL);
- if (__gnat_get_interrupt_state (SIGFPE) != 's')
- sigaction (SIGFPE, &act, NULL);
- if (__gnat_get_interrupt_state (SIGILL) != 's')
- sigaction (SIGILL, &act, NULL);
- if (__gnat_get_interrupt_state (SIGBUS) != 's')
- sigaction (SIGBUS, &act, NULL);
- if (__gnat_get_interrupt_state (SIGSEGV) != 's')
- {
-#ifdef HAVE_GNAT_ALTERNATE_STACK
- /* Setup an alternate stack region for the handler execution so that
- stack overflows can be handled properly, avoiding a SEGV generation
- from stack usage by the handler itself. */
- stack_t stack;
-
- stack.ss_sp = __gnat_alternate_stack;
- stack.ss_size = sizeof (__gnat_alternate_stack);
- stack.ss_flags = 0;
- sigaltstack (&stack, NULL);
-
- act.sa_flags |= SA_ONSTACK;
-#endif
- sigaction (SIGSEGV, &act, NULL);
- }
-
- __gnat_handler_installed = 1;
-}
-
-/*******************/
-/* LynxOS Section */
-/*******************/
-
-#elif defined (__Lynx__)
-
-#include <signal.h>
-#include <unistd.h>
-
-/* SA_SIGINFO is not supported by default on LynxOS, so all we have
- available here is the "sig" argument. On newer LynxOS versions it's
- possible to support SA_SIGINFO by setting a kernel configuration macro.
-
- To wit:
-
- #define NONPOSIX_SA_HANDLER_PROTO (0)
-
- This macro must be set to 1 in either sys/bsp.<bspname>/uparam.h
- or in the associated uparam.h customization file sys/bsp.<bspname>/xparam.h
- (uparam.h includes xparam.h for customization)
-
- The NONPOSIX_SA_HANDLER_PROTO macro makes it possible to provide
- signal-catching function with 'info' and 'context' input parameters
- even if SA_SIGINFO flag is not set or it is set for a non-realtime signal.
-
- It also allows signal-catching function to update thread context even
- if SA_UPDATECTX flag is not set.
-
- This would be useful, but relying on that would transmit the requirement
- to users to configure that feature as well, which is undesirable. */
-
-static void
-__gnat_error_handler (int sig)
-{
- struct Exception_Data *exception;
- const char *msg;
-
- switch(sig)
- {
- case SIGFPE:
- exception = &constraint_error;
- msg = "SIGFPE";
- break;
- case SIGILL:
- exception = &constraint_error;
- msg = "SIGILL";
- break;
- case SIGSEGV:
- exception = &storage_error;
- msg = "stack overflow or erroneous memory access";
- break;
- case SIGBUS:
- exception = &constraint_error;
- msg = "SIGBUS";
- break;
- default:
- exception = &program_error;
- msg = "unhandled signal";
- }
-
- Raise_From_Signal_Handler (exception, msg);
-}
-
-void
-__gnat_install_handler (void)
-{
- struct sigaction act;
-
- act.sa_handler = __gnat_error_handler;
- act.sa_flags = 0x0;
- sigemptyset (&act.sa_mask);
-
- /* Do not install handlers if interrupt state is "System". */
- if (__gnat_get_interrupt_state (SIGFPE) != 's')
- sigaction (SIGFPE, &act, NULL);
- if (__gnat_get_interrupt_state (SIGILL) != 's')
- sigaction (SIGILL, &act, NULL);
- if (__gnat_get_interrupt_state (SIGSEGV) != 's')
- sigaction (SIGSEGV, &act, NULL);
- if (__gnat_get_interrupt_state (SIGBUS) != 's')
- sigaction (SIGBUS, &act, NULL);
-
- __gnat_handler_installed = 1;
-}
-
-/*******************/
-/* Solaris Section */
-/*******************/
-
-#elif defined (__sun__) && !defined (__vxworks)
-
-#include <signal.h>
-#include <siginfo.h>
-#include <sys/ucontext.h>
-#include <sys/regset.h>
-
-static void
-__gnat_error_handler (int sig, siginfo_t *si, void *ucontext ATTRIBUTE_UNUSED)
-{
- struct Exception_Data *exception;
- static int recurse = 0;
- const char *msg;
-
- switch (sig)
- {
- case SIGSEGV:
- /* If the problem was permissions, this is a constraint error.
- Likewise if the failing address isn't maximally aligned or if
- we've recursed.
-
- ??? Using a static variable here isn't task-safe, but it's
- much too hard to do anything else and we're just determining
- which exception to raise. */
- if (si->si_code == SEGV_ACCERR
- || (long) si->si_addr == 0
- || (((long) si->si_addr) & 3) != 0
- || recurse)
- {
- exception = &constraint_error;
- msg = "SIGSEGV";
- }
- else
- {
- /* See if the page before the faulting page is accessible. Do that
- by trying to access it. We'd like to simply try to access
- 4096 + the faulting address, but it's not guaranteed to be
- the actual address, just to be on the same page. */
- recurse++;
- ((volatile char *)
- ((long) si->si_addr & - getpagesize ()))[getpagesize ()];
- exception = &storage_error;
- msg = "stack overflow or erroneous memory access";
- }
- break;
-
- case SIGBUS:
- exception = &program_error;
- msg = "SIGBUS";
- break;
-
- case SIGFPE:
- exception = &constraint_error;
- msg = "SIGFPE";
- break;
-
- default:
- exception = &program_error;
- msg = "unhandled signal";
- }
-
- recurse = 0;
- Raise_From_Signal_Handler (exception, msg);
-}
-
-void
-__gnat_install_handler (void)
-{
- struct sigaction act;
-
- /* Set up signal handler to map synchronous signals to appropriate
- exceptions. Make sure that the handler isn't interrupted by another
- signal that might cause a scheduling event! */
-
- act.sa_sigaction = __gnat_error_handler;
- act.sa_flags = SA_NODEFER | SA_RESTART | SA_SIGINFO;
- sigemptyset (&act.sa_mask);
-
- /* Do not install handlers if interrupt state is "System". */
- if (__gnat_get_interrupt_state (SIGABRT) != 's')
- sigaction (SIGABRT, &act, NULL);
- if (__gnat_get_interrupt_state (SIGFPE) != 's')
- sigaction (SIGFPE, &act, NULL);
- if (__gnat_get_interrupt_state (SIGSEGV) != 's')
- sigaction (SIGSEGV, &act, NULL);
- if (__gnat_get_interrupt_state (SIGBUS) != 's')
- sigaction (SIGBUS, &act, NULL);
-
- __gnat_handler_installed = 1;
-}
-
-/***************/
-/* VMS Section */
-/***************/
-
-#elif defined (VMS)
-
-/* Routine called from binder to override default feature values. */
-void __gnat_set_features (void);
-int __gnat_features_set = 0;
-void (*__gnat_ctrl_c_handler) (void) = 0;
-
-#ifdef __IA64
-#define lib_get_curr_invo_context LIB$I64_GET_CURR_INVO_CONTEXT
-#define lib_get_prev_invo_context LIB$I64_GET_PREV_INVO_CONTEXT
-#define lib_get_invo_handle LIB$I64_GET_INVO_HANDLE
-#else
-#define lib_get_curr_invo_context LIB$GET_CURR_INVO_CONTEXT
-#define lib_get_prev_invo_context LIB$GET_PREV_INVO_CONTEXT
-#define lib_get_invo_handle LIB$GET_INVO_HANDLE
-#endif
-
-/* Masks for facility identification. */
-#define FAC_MASK 0x0fff0000
-#define DECADA_M_FACILITY 0x00310000
-
-/* Define macro symbols for the VMS conditions that become Ada exceptions.
- It would be better to just include <ssdef.h> */
-
-#define SS$_CONTINUE 1
-#define SS$_ACCVIO 12
-#define SS$_HPARITH 1284
-#define SS$_INTDIV 1156
-#define SS$_STKOVF 1364
-#define SS$_CONTROLC 1617
-#define SS$_RESIGNAL 2328
-
-#define MTH$_FLOOVEMAT 1475268 /* Some ACVC_21 CXA tests */
-
-/* The following codes must be resignalled, and not handled here. */
-
-/* These codes are in standard message libraries. */
-extern int C$_SIGKILL;
-extern int C$_SIGINT;
-extern int SS$_DEBUG;
-extern int LIB$_KEYNOTFOU;
-extern int LIB$_ACTIMAGE;
-
-/* These codes are non standard, which is to say the author is
- not sure if they are defined in the standard message libraries
- so keep them as macros for now. */
-#define RDB$_STREAM_EOF 20480426
-#define FDL$_UNPRIKW 11829410
-#define CMA$_EXIT_THREAD 4227492
-
-struct cond_sigargs
-{
- unsigned int sigarg;
- unsigned int sigargval;
-};
-
-struct cond_subtests
-{
- unsigned int num;
- const struct cond_sigargs sigargs[];
-};
-
-struct cond_except
-{
- unsigned int cond;
- const struct Exception_Data *except;
- unsigned int needs_adjust; /* 1 = adjust PC, 0 = no adjust */
- const struct cond_subtests *subtests;
-};
-
-struct descriptor_s
-{
- unsigned short len, mbz;
- __char_ptr32 adr;
-};
-
-/* Conditions that don't have an Ada exception counterpart must raise
- Non_Ada_Error. Since this is defined in s-auxdec, it should only be
- referenced by user programs, not the compiler or tools. Hence the
- #ifdef IN_RTS. */
-
-#ifdef IN_RTS
-
-#define Status_Error ada__io_exceptions__status_error
-extern struct Exception_Data Status_Error;
-
-#define Mode_Error ada__io_exceptions__mode_error
-extern struct Exception_Data Mode_Error;
-
-#define Name_Error ada__io_exceptions__name_error
-extern struct Exception_Data Name_Error;
-
-#define Use_Error ada__io_exceptions__use_error
-extern struct Exception_Data Use_Error;
-
-#define Device_Error ada__io_exceptions__device_error
-extern struct Exception_Data Device_Error;
-
-#define End_Error ada__io_exceptions__end_error
-extern struct Exception_Data End_Error;
-
-#define Data_Error ada__io_exceptions__data_error
-extern struct Exception_Data Data_Error;
-
-#define Layout_Error ada__io_exceptions__layout_error
-extern struct Exception_Data Layout_Error;
-
-#define Non_Ada_Error system__aux_dec__non_ada_error
-extern struct Exception_Data Non_Ada_Error;
-
-#define Coded_Exception system__vms_exception_table__coded_exception
-extern struct Exception_Data *Coded_Exception (void *);
-
-#define Base_Code_In system__vms_exception_table__base_code_in
-extern void *Base_Code_In (void *);
-
-/* DEC Ada exceptions are not defined in a header file, so they
- must be declared. */
-
-#define ADA$_ALREADY_OPEN 0x0031a594
-#define ADA$_CONSTRAINT_ERRO 0x00318324
-#define ADA$_DATA_ERROR 0x003192c4
-#define ADA$_DEVICE_ERROR 0x003195e4
-#define ADA$_END_ERROR 0x00319904
-#define ADA$_FAC_MODE_MISMAT 0x0031a8b3
-#define ADA$_IOSYSFAILED 0x0031af04
-#define ADA$_KEYSIZERR 0x0031aa3c
-#define ADA$_KEY_MISMATCH 0x0031a8e3
-#define ADA$_LAYOUT_ERROR 0x00319c24
-#define ADA$_LINEXCMRS 0x0031a8f3
-#define ADA$_MAXLINEXC 0x0031a8eb
-#define ADA$_MODE_ERROR 0x00319f44
-#define ADA$_MRN_MISMATCH 0x0031a8db
-#define ADA$_MRS_MISMATCH 0x0031a8d3
-#define ADA$_NAME_ERROR 0x0031a264
-#define ADA$_NOT_OPEN 0x0031a58c
-#define ADA$_ORG_MISMATCH 0x0031a8bb
-#define ADA$_PROGRAM_ERROR 0x00318964
-#define ADA$_RAT_MISMATCH 0x0031a8cb
-#define ADA$_RFM_MISMATCH 0x0031a8c3
-#define ADA$_STAOVF 0x00318cac
-#define ADA$_STATUS_ERROR 0x0031a584
-#define ADA$_STORAGE_ERROR 0x00318c84
-#define ADA$_UNSUPPORTED 0x0031a8ab
-#define ADA$_USE_ERROR 0x0031a8a4
-
-/* DEC Ada specific conditions. */
-static const struct cond_except dec_ada_cond_except_table [] =
-{
- {ADA$_PROGRAM_ERROR, &program_error, 0, 0},
- {ADA$_USE_ERROR, &Use_Error, 0, 0},
- {ADA$_KEYSIZERR, &program_error, 0, 0},
- {ADA$_STAOVF, &storage_error, 0, 0},
- {ADA$_CONSTRAINT_ERRO, &constraint_error, 0, 0},
- {ADA$_IOSYSFAILED, &Device_Error, 0, 0},
- {ADA$_LAYOUT_ERROR, &Layout_Error, 0, 0},
- {ADA$_STORAGE_ERROR, &storage_error, 0, 0},
- {ADA$_DATA_ERROR, &Data_Error, 0, 0},
- {ADA$_DEVICE_ERROR, &Device_Error, 0, 0},
- {ADA$_END_ERROR, &End_Error, 0, 0},
- {ADA$_MODE_ERROR, &Mode_Error, 0, 0},
- {ADA$_NAME_ERROR, &Name_Error, 0, 0},
- {ADA$_STATUS_ERROR, &Status_Error, 0, 0},
- {ADA$_NOT_OPEN, &Use_Error, 0, 0},
- {ADA$_ALREADY_OPEN, &Use_Error, 0, 0},
- {ADA$_USE_ERROR, &Use_Error, 0, 0},
- {ADA$_UNSUPPORTED, &Use_Error, 0, 0},
- {ADA$_FAC_MODE_MISMAT, &Use_Error, 0, 0},
- {ADA$_ORG_MISMATCH, &Use_Error, 0, 0},
- {ADA$_RFM_MISMATCH, &Use_Error, 0, 0},
- {ADA$_RAT_MISMATCH, &Use_Error, 0, 0},
- {ADA$_MRS_MISMATCH, &Use_Error, 0, 0},
- {ADA$_MRN_MISMATCH, &Use_Error, 0, 0},
- {ADA$_KEY_MISMATCH, &Use_Error, 0, 0},
- {ADA$_MAXLINEXC, &constraint_error, 0, 0},
- {ADA$_LINEXCMRS, &constraint_error, 0, 0},
-
-#if 0
- /* Already handled by a pragma Import_Exception
- in Aux_IO_Exceptions */
- {ADA$_LOCK_ERROR, &Lock_Error, 0, 0},
- {ADA$_EXISTENCE_ERROR, &Existence_Error, 0, 0},
- {ADA$_KEY_ERROR, &Key_Error, 0, 0},
-#endif
-
- {0, 0, 0, 0}
-};
-
-#endif /* IN_RTS */
-
-/* Non-DEC Ada specific conditions that map to Ada exceptions. */
-
-/* Subtest for ACCVIO Constraint_Error, kept for compatibility,
- in hindsight should have just made ACCVIO == Storage_Error. */
-#define ACCVIO_VIRTUAL_ADDR 3
-static const struct cond_subtests accvio_c_e =
-{1, /* number of subtests below */
- {
- { ACCVIO_VIRTUAL_ADDR, 0 }
- }
-};
-
-/* Macro flag to adjust PC which gets off by one for some conditions,
- not sure if this is reliably true, PC could be off by more for
- HPARITH for example, unless a trapb is inserted. */
-#define NEEDS_ADJUST 1
-
-static const struct cond_except system_cond_except_table [] =
-{
- {MTH$_FLOOVEMAT, &constraint_error, 0, 0},
- {SS$_INTDIV, &constraint_error, 0, 0},
- {SS$_HPARITH, &constraint_error, NEEDS_ADJUST, 0},
- {SS$_ACCVIO, &constraint_error, NEEDS_ADJUST, &accvio_c_e},
- {SS$_ACCVIO, &storage_error, NEEDS_ADJUST, 0},
- {SS$_STKOVF, &storage_error, NEEDS_ADJUST, 0},
- {0, 0, 0, 0}
-};
-
-/* To deal with VMS conditions and their mapping to Ada exceptions,
- the __gnat_error_handler routine below is installed as an exception
- vector having precedence over DEC frame handlers. Some conditions
- still need to be handled by such handlers, however, in which case
- __gnat_error_handler needs to return SS$_RESIGNAL. Consider for
- instance the use of a third party library compiled with DECAda and
- performing its own exception handling internally.
-
- To allow some user-level flexibility, which conditions should be
- resignaled is controlled by a predicate function, provided with the
- condition value and returning a boolean indication stating whether
- this condition should be resignaled or not.
-
- That predicate function is called indirectly, via a function pointer,
- by __gnat_error_handler, and changing that pointer is allowed to the
- user code by way of the __gnat_set_resignal_predicate interface.
-
- The user level function may then implement what it likes, including
- for instance the maintenance of a dynamic data structure if the set
- of to be resignalled conditions has to change over the program's
- lifetime.
-
- ??? This is not a perfect solution to deal with the possible
- interactions between the GNAT and the DECAda exception handling
- models and better (more general) schemes are studied. This is so
- just provided as a convenient workaround in the meantime, and
- should be use with caution since the implementation has been kept
- very simple. */
-
-typedef int resignal_predicate (int code);
-
-static const int * const cond_resignal_table [] =
-{
- &C$_SIGKILL,
- (int *)CMA$_EXIT_THREAD,
- &SS$_DEBUG,
- &LIB$_KEYNOTFOU,
- &LIB$_ACTIMAGE,
- (int *) RDB$_STREAM_EOF,
- (int *) FDL$_UNPRIKW,
- 0
-};
-
-static const int facility_resignal_table [] =
-{
- 0x1380000, /* RDB */
- 0x2220000, /* SQL */
- 0
-};
-
-/* Default GNAT predicate for resignaling conditions. */
-
-static int
-__gnat_default_resignal_p (int code)
-{
- int i, iexcept;
-
- for (i = 0; facility_resignal_table [i]; i++)
- if ((code & FAC_MASK) == facility_resignal_table [i])
- return 1;
-
- for (i = 0, iexcept = 0;
- cond_resignal_table [i]
- && !(iexcept = LIB$MATCH_COND (&code, &cond_resignal_table [i]));
- i++);
-
- return iexcept;
-}
-
-/* Static pointer to predicate that the __gnat_error_handler exception
- vector invokes to determine if it should resignal a condition. */
-
-static resignal_predicate *__gnat_resignal_p = __gnat_default_resignal_p;
-
-/* User interface to change the predicate pointer to PREDICATE. Reset to
- the default if PREDICATE is null. */
-
-void
-__gnat_set_resignal_predicate (resignal_predicate *predicate)
-{
- if (predicate == NULL)
- __gnat_resignal_p = __gnat_default_resignal_p;
- else
- __gnat_resignal_p = predicate;
-}
-
-/* Should match System.Parameters.Default_Exception_Msg_Max_Length. */
-#define Default_Exception_Msg_Max_Length 512
-
-/* Action routine for SYS$PUTMSG. There may be multiple
- conditions, each with text to be appended to MESSAGE
- and separated by line termination. */
-static int
-copy_msg (struct descriptor_s *msgdesc, char *message)
-{
- int len = strlen (message);
- int copy_len;
-
- /* Check for buffer overflow and skip. */
- if (len > 0 && len <= Default_Exception_Msg_Max_Length - 3)
- {
- strcat (message, "\r\n");
- len += 2;
- }
-
- /* Check for buffer overflow and truncate if necessary. */
- copy_len = (len + msgdesc->len <= Default_Exception_Msg_Max_Length - 1 ?
- msgdesc->len :
- Default_Exception_Msg_Max_Length - 1 - len);
- strncpy (&message [len], msgdesc->adr, copy_len);
- message [len + copy_len] = 0;
-
- return 0;
-}
-
-/* Scan TABLE for a match for the condition contained in SIGARGS,
- and return the entry, or the empty entry if no match found. */
-static const struct cond_except *
-scan_conditions ( int *sigargs, const struct cond_except *table [])
-{
- int i;
- struct cond_except entry;
-
- /* Scan the exception condition table for a match and fetch
- the associated GNAT exception pointer. */
- for (i = 0; (*table) [i].cond; i++)
- {
- unsigned int match = LIB$MATCH_COND (&sigargs [1], &(*table) [i].cond);
- const struct cond_subtests *subtests = (*table) [i].subtests;
-
- if (match)
- {
- if (!subtests)
- {
- return &(*table) [i];
- }
- else
- {
- unsigned int ii;
- int num = (*subtests).num;
-
- /* Perform subtests to differentiate exception. */
- for (ii = 0; ii < num; ii++)
- {
- unsigned int arg = (*subtests).sigargs [ii].sigarg;
- unsigned int argval = (*subtests).sigargs [ii].sigargval;
-
- if (sigargs [arg] != argval)
- {
- num = 0;
- break;
- }
- }
-
- /* All subtests passed. */
- if (num == (*subtests).num)
- return &(*table) [i];
- }
- }
- }
-
- /* No match, return the null terminating entry. */
- return &(*table) [i];
-}
-
-/* __gnat_handle_vms_condtition is both a frame based handler
- for the runtime, and an exception vector for the compiler. */
-long
-__gnat_handle_vms_condition (int *sigargs, void *mechargs)
-{
- struct Exception_Data *exception = 0;
- unsigned int needs_adjust = 0;
- void *base_code;
- struct descriptor_s gnat_facility = {4, 0, "GNAT"};
- char message [Default_Exception_Msg_Max_Length];
-
- const char *msg = "";
-
- /* Check for conditions to resignal which aren't effected by pragma
- Import_Exception. */
- if (__gnat_resignal_p (sigargs [1]))
- return SS$_RESIGNAL;
-#ifndef IN_RTS
- /* toplev.c handles this for compiler. */
- if (sigargs [1] == SS$_HPARITH)
- return SS$_RESIGNAL;
-#endif
-
-#ifdef IN_RTS
- /* See if it's an imported exception. Beware that registered exceptions
- are bound to their base code, with the severity bits masked off. */
- base_code = Base_Code_In ((void *) sigargs[1]);
- exception = Coded_Exception (base_code);
-#endif
-
- if (exception == 0)
-#ifdef IN_RTS
- {
- int i;
- struct cond_except cond;
- const struct cond_except *cond_table;
- const struct cond_except *cond_tables [] = {dec_ada_cond_except_table,
- system_cond_except_table,
- 0};
- unsigned int ctrlc = SS$_CONTROLC;
- unsigned int *sigint = &C$_SIGINT;
- int ctrlc_match = LIB$MATCH_COND (&sigargs [1], &ctrlc);
- int sigint_match = LIB$MATCH_COND (&sigargs [1], &sigint);
-
- extern int SYS$DCLAST (void (*astadr)(), unsigned long long astprm,
- unsigned int acmode);
-
- /* If SS$_CONTROLC has been imported as an exception, it will take
- priority over a Ctrl/C handler. See above. SIGINT has a
- different condition value due to it's DECCCRTL roots and it's
- the condition that gets raised for a "kill -INT". */
- if ((ctrlc_match || sigint_match) && __gnat_ctrl_c_handler)
- {
- SYS$DCLAST (__gnat_ctrl_c_handler, 0, 0);
- return SS$_CONTINUE;
- }
-
- i = 0;
- while ((cond_table = cond_tables[i++]) && !exception)
- {
- cond = *scan_conditions (sigargs, &cond_table);
- exception = (struct Exception_Data *) cond.except;
- }
-
- if (exception)
- needs_adjust = cond.needs_adjust;
- else
- /* User programs expect Non_Ada_Error to be raised if no match,
- reference DEC Ada test CXCONDHAN. */
- exception = &Non_Ada_Error;
- }
-#else
- {
- /* Pretty much everything is just a program error in the compiler */
- exception = &program_error;
- }
-#endif
-
- message[0] = 0;
- /* Subtract PC & PSL fields as per ABI for SYS$PUTMSG. */
- sigargs[0] -= 2;
-
- extern int SYS$PUTMSG (void *, int (*)(), void *, unsigned long long);
-
- /* If it was a DEC Ada specific condtiion, make it GNAT otherwise
- keep the old facility. */
- if ((sigargs [1] & FAC_MASK) == DECADA_M_FACILITY)
- SYS$PUTMSG (sigargs, copy_msg, &gnat_facility,
- (unsigned long long ) message);
- else
- SYS$PUTMSG (sigargs, copy_msg, 0,
- (unsigned long long ) message);
-
- /* Add back PC & PSL fields as per ABI for SYS$PUTMSG. */
- sigargs[0] += 2;
- msg = message;
-
- if (needs_adjust)
- __gnat_adjust_context_for_raise (sigargs [1], (void *)mechargs);
-
- Raise_From_Signal_Handler (exception, msg);
-}
-
-#if defined (IN_RTS) && defined (__IA64)
-/* Called only from adasigio.b32. This is a band aid to avoid going
- through the VMS signal handling code which results in a 0x8000 per
- handled exception memory leak in P2 space (see VMS source listing
- sys/lis/exception.lis) due to the allocation of working space that
- is expected to be deallocated upon return from the condition handler,
- which doesn't return in GNAT compiled code. */
-void
-GNAT$STOP (int *sigargs)
-{
- /* Note that there are no mechargs. We rely on the fact that condtions
- raised from DEClib I/O do not require an "adjust". Also the count
- will be off by 2, since LIB$STOP didn't get a chance to add the
- PC and PSL fields, so we bump it so PUTMSG comes out right. */
- sigargs [0] += 2;
- __gnat_handle_vms_condition (sigargs, 0);
-}
-#endif
-
-void
-__gnat_install_handler (void)
-{
- long prvhnd ATTRIBUTE_UNUSED;
-
-#if !defined (IN_RTS)
- extern int SYS$SETEXV (unsigned int vector, int (*addres)(),
- unsigned int accmode, void *(*(prvhnd)));
- SYS$SETEXV (1, __gnat_handle_vms_condition, 3, &prvhnd);
-#endif
-
- __gnat_handler_installed = 1;
-}
-
-/* __gnat_adjust_context_for_raise for Alpha - see comments along with the
- default version later in this file. */
-
-#if defined (IN_RTS) && defined (__alpha__)
-
-#include <vms/chfctxdef.h>
-#include <vms/chfdef.h>
-
-#define HAVE_GNAT_ADJUST_CONTEXT_FOR_RAISE
-
-void
-__gnat_adjust_context_for_raise (int signo ATTRIBUTE_UNUSED, void *ucontext)
-{
- if (signo == SS$_HPARITH)
- {
- /* Sub one to the address of the instruction signaling the condition,
- located in the sigargs array. */
-
- CHF$MECH_ARRAY * mechargs = (CHF$MECH_ARRAY *) ucontext;
- CHF$SIGNAL_ARRAY * sigargs
- = (CHF$SIGNAL_ARRAY *) mechargs->chf$q_mch_sig_addr;
-
- int vcount = sigargs->chf$is_sig_args;
- int * pc_slot = & (&sigargs->chf$l_sig_name)[vcount-2];
-
- (*pc_slot)--;
- }
-}
-
-#endif
-
-/* __gnat_adjust_context_for_raise for ia64. */
-
-#if defined (IN_RTS) && defined (__IA64)
-
-#include <vms/chfctxdef.h>
-#include <vms/chfdef.h>
-
-#define HAVE_GNAT_ADJUST_CONTEXT_FOR_RAISE
-
-typedef unsigned long long u64;
-
-void
-__gnat_adjust_context_for_raise (int signo ATTRIBUTE_UNUSED, void *ucontext)
-{
- /* Add one to the address of the instruction signaling the condition,
- located in the 64bits sigargs array. */
-
- CHF$MECH_ARRAY * mechargs = (CHF$MECH_ARRAY *) ucontext;
-
- CHF64$SIGNAL_ARRAY *chfsig64
- = (CHF64$SIGNAL_ARRAY *) mechargs->chf$ph_mch_sig64_addr;
-
- u64 * post_sigarray
- = (u64 *)chfsig64 + 1 + chfsig64->chf64$l_sig_args;
-
- u64 * ih_pc_loc = post_sigarray - 2;
-
- (*ih_pc_loc) ++;
-}
-
-#endif
-
-/* Easier interface for LIB$GET_LOGICAL: put the equivalence of NAME into BUF,
- always NUL terminated. In case of error or if the result is longer than
- LEN (length of BUF) an empty string is written info BUF. */
-
-static void
-__gnat_vms_get_logical (const char *name, char *buf, int len)
-{
- struct descriptor_s name_desc, result_desc;
- int status;
- unsigned short rlen;
-
- /* Build the descriptor for NAME. */
- name_desc.len = strlen (name);
- name_desc.mbz = 0;
- name_desc.adr = (char *)name;
-
- /* Build the descriptor for the result. */
- result_desc.len = len;
- result_desc.mbz = 0;
- result_desc.adr = buf;
-
- status = LIB$GET_LOGICAL (&name_desc, &result_desc, &rlen);
-
- if ((status & 1) == 1 && rlen < len)
- buf[rlen] = 0;
- else
- buf[0] = 0;
-}
-
-/* Size of a page on ia64 and alpha VMS. */
-#define VMS_PAGESIZE 8192
-
-/* User mode. */
-#define PSL__C_USER 3
-
-/* No access. */
-#define PRT__C_NA 0
-
-/* Descending region. */
-#define VA__M_DESCEND 1
-
-/* Get by virtual address. */
-#define VA___REGSUM_BY_VA 1
-
-/* Memory region summary. */
-struct regsum
-{
- unsigned long long q_region_id;
- unsigned int l_flags;
- unsigned int l_region_protection;
- void *pq_start_va;
- unsigned long long q_region_size;
- void *pq_first_free_va;
-};
-
-extern int SYS$GET_REGION_INFO (unsigned int, unsigned long long *,
- void *, void *, unsigned int,
- void *, unsigned int *);
-extern int SYS$EXPREG_64 (unsigned long long *, unsigned long long,
- unsigned int, unsigned int, void **,
- unsigned long long *);
-extern int SYS$SETPRT_64 (void *, unsigned long long, unsigned int,
- unsigned int, void **, unsigned long long *,
- unsigned int *);
-
-/* Add a guard page in the memory region containing ADDR at ADDR +/- SIZE.
- (The sign depends on the kind of the memory region). */
-
-static int
-__gnat_set_stack_guard_page (void *addr, unsigned long size)
-{
- int status;
- void *ret_va;
- unsigned long long ret_len;
- unsigned int ret_prot;
- void *start_va;
- unsigned long long length;
- unsigned int retlen;
- struct regsum buffer;
-
- /* Get the region for ADDR. */
- status = SYS$GET_REGION_INFO
- (VA___REGSUM_BY_VA, NULL, addr, NULL, sizeof (buffer), &buffer, &retlen);
-
- if ((status & 1) != 1)
- return -1;
-
- /* Extend the region. */
- status = SYS$EXPREG_64 (&buffer.q_region_id,
- size, 0, 0, &start_va, &length);
-
- if ((status & 1) != 1)
- return -1;
-
- /* Create a guard page. */
- if (!(buffer.l_flags & VA__M_DESCEND))
- start_va = (void *)((unsigned long long)start_va + length - VMS_PAGESIZE);
-
- status = SYS$SETPRT_64 (start_va, VMS_PAGESIZE, PSL__C_USER, PRT__C_NA,
- &ret_va, &ret_len, &ret_prot);
-
- if ((status & 1) != 1)
- return -1;
- return 0;
-}
-
-/* Read logicals to limit the stack(s) size. */
-
-static void
-__gnat_set_stack_limit (void)
-{
-#ifdef __ia64__
- void *sp;
- unsigned long size;
- char value[16];
- char *e;
-
- /* The main stack. */
- __gnat_vms_get_logical ("GNAT_STACK_SIZE", value, sizeof (value));
- size = strtoul (value, &e, 0);
- if (e > value && *e == 0)
- {
- asm ("mov %0=sp" : "=r" (sp));
- __gnat_set_stack_guard_page (sp, size * 1024);
- }
-
- /* The register stack. */
- __gnat_vms_get_logical ("GNAT_RBS_SIZE", value, sizeof (value));
- size = strtoul (value, &e, 0);
- if (e > value && *e == 0)
- {
- asm ("mov %0=ar.bsp" : "=r" (sp));
- __gnat_set_stack_guard_page (sp, size * 1024);
- }
-#endif
-}
-
-#ifdef IN_RTS
-extern int SYS$IEEE_SET_FP_CONTROL (void *, void *, void *);
-#define K_TRUE 1
-#define __int64 long long
-#define __NEW_STARLET
-#include <vms/ieeedef.h>
-#endif
-
-/* Feature logical name and global variable address pair.
- If we ever add another feature logical to this list, the
- feature struct will need to be enhanced to take into account
- possible values for *gl_addr. */
-struct feature {
- const char *name;
- int *gl_addr;
-};
-
-/* Default values for GNAT features set by environment or binder. */
-int __gl_heap_size = 64;
-
-/* Default float format is 'I' meaning IEEE. If gnatbind detetcts that a
- VAX Float format is specified, it will set this global variable to 'V'.
- Subsequently __gnat_set_features will test the variable and if set for
- VAX Float will call a Starlet function to enable trapping for invalid
- operation, drivide by zero, and overflow. This will prevent the VMS runtime
- (specifically OTS$CHECK_FP_MODE) from complaining about inconsistent
- floating point settings in a mixed language program. Ideally the setting
- would be determined at link time based on settings in the object files,
- however the VMS linker seems to take the setting from the first object
- in the link, e.g. pcrt0.o which is float representation neutral. */
-char __gl_float_format = 'I';
-
-/* Array feature logical names and global variable addresses. */
-static const struct feature features[] =
-{
- {"GNAT$NO_MALLOC_64", &__gl_heap_size},
- {0, 0}
-};
-
-void
-__gnat_set_features (void)
-{
- int i;
- char buff[16];
-#ifdef IN_RTS
- IEEE clrmsk, setmsk, prvmsk;
-
- clrmsk.ieee$q_flags = 0LL;
- setmsk.ieee$q_flags = 0LL;
-#endif
-
- /* Loop through features array and test name for enable/disable. */
- for (i = 0; features[i].name; i++)
- {
- __gnat_vms_get_logical (features[i].name, buff, sizeof (buff));
-
- if (strcmp (buff, "ENABLE") == 0
- || strcmp (buff, "TRUE") == 0
- || strcmp (buff, "1") == 0)
- *features[i].gl_addr = 32;
- else if (strcmp (buff, "DISABLE") == 0
- || strcmp (buff, "FALSE") == 0
- || strcmp (buff, "0") == 0)
- *features[i].gl_addr = 64;
- }
-
- /* Features to artificially limit the stack size. */
- __gnat_set_stack_limit ();
-
-#ifdef IN_RTS
- if (__gl_float_format == 'V')
- {
- setmsk.ieee$v_trap_enable_inv = K_TRUE;
- setmsk.ieee$v_trap_enable_dze = K_TRUE;
- setmsk.ieee$v_trap_enable_ovf = K_TRUE;
- SYS$IEEE_SET_FP_CONTROL (&clrmsk, &setmsk, &prvmsk);
- }
-#endif
-
- __gnat_features_set = 1;
-}
-
-/* Return true if the VMS version is 7.x. */
-
-extern unsigned int LIB$GETSYI (int *, ...);
-
-#define SYI$_VERSION 0x1000
-
-int
-__gnat_is_vms_v7 (void)
-{
- struct descriptor_s desc;
- char version[8];
- int status;
- int code = SYI$_VERSION;
-
- desc.len = sizeof (version);
- desc.mbz = 0;
- desc.adr = version;
-
- status = LIB$GETSYI (&code, 0, &desc);
- if ((status & 1) == 1 && version[1] == '7' && version[2] == '.')
- return 1;
- else
- return 0;
-}
-
-/*******************/
-/* FreeBSD Section */
-/*******************/
-
-#elif defined (__FreeBSD__) || defined (__DragonFly__)
-
-#include <signal.h>
-#include <sys/ucontext.h>
-#include <unistd.h>
-
-static void
-__gnat_error_handler (int sig,
- siginfo_t *si ATTRIBUTE_UNUSED,
- void *ucontext ATTRIBUTE_UNUSED)
-{
- struct Exception_Data *exception;
- const char *msg;
-
- switch (sig)
- {
- case SIGFPE:
- exception = &constraint_error;
- msg = "SIGFPE";
- break;
-
- case SIGILL:
- exception = &constraint_error;
- msg = "SIGILL";
- break;
-
- case SIGSEGV:
- exception = &storage_error;
- msg = "stack overflow or erroneous memory access";
- break;
-
- case SIGBUS:
- exception = &storage_error;
- msg = "SIGBUS: possible stack overflow";
- break;
-
- default:
- exception = &program_error;
- msg = "unhandled signal";
- }
-
- Raise_From_Signal_Handler (exception, msg);
-}
-
-void
-__gnat_install_handler (void)
-{
- struct sigaction act;
-
- /* Set up signal handler to map synchronous signals to appropriate
- exceptions. Make sure that the handler isn't interrupted by another
- signal that might cause a scheduling event! */
-
- act.sa_sigaction
- = (void (*)(int, struct __siginfo *, void*)) __gnat_error_handler;
- act.sa_flags = SA_NODEFER | SA_RESTART | SA_SIGINFO;
- (void) sigemptyset (&act.sa_mask);
-
- (void) sigaction (SIGILL, &act, NULL);
- (void) sigaction (SIGFPE, &act, NULL);
- (void) sigaction (SIGSEGV, &act, NULL);
- (void) sigaction (SIGBUS, &act, NULL);
-
- __gnat_handler_installed = 1;
-}
-
-/*************************************/
-/* VxWorks Section (including Vx653) */
-/*************************************/
-
-#elif defined(__vxworks)
-
-#include <signal.h>
-#include <taskLib.h>
-#if (defined (__i386__) || defined (__x86_64__)) && !defined (VTHREADS)
-#include <sysLib.h>
-#endif
-
-#include "sigtramp.h"
-
-#ifndef __RTP__
-#include <intLib.h>
-#include <iv.h>
-#endif
-
-#if ((defined (ARMEL) && (_WRS_VXWORKS_MAJOR == 6))) && !defined(__RTP__)
-#define VXWORKS_FORCE_GUARD_PAGE 1
-#include <vmLib.h>
-extern size_t vxIntStackOverflowSize;
-#define INT_OVERFLOW_SIZE vxIntStackOverflowSize
-#endif
-
-#ifdef VTHREADS
-#include "private/vThreadsP.h"
-#endif
-
-#ifndef __RTP__
-
-/* Directly vectored Interrupt routines are not supported when using RTPs. */
-
-extern void * __gnat_inum_to_ivec (int);
-
-/* This is needed by the GNAT run time to handle Vxworks interrupts. */
-void *
-__gnat_inum_to_ivec (int num)
-{
- return (void *) INUM_TO_IVEC (num);
-}
-#endif
-
-#if !defined(__alpha_vxworks) && ((_WRS_VXWORKS_MAJOR != 6) && (_WRS_VXWORKS_MAJOR != 7)) && !defined(__RTP__)
-
-/* getpid is used by s-parint.adb, but is not defined by VxWorks, except
- on Alpha VxWorks and VxWorks 6.x (including RTPs). */
-
-extern long getpid (void);
-
-long
-getpid (void)
-{
- return taskIdSelf ();
-}
-#endif
-
-/* When stack checking is performed by probing a guard page on the stack,
- sometimes this guard page is not properly reset on VxWorks. We need to
- manually reset it in this case.
- This function returns TRUE in case the guard page was hit by the
- signal. */
-static int
-__gnat_reset_guard_page (int sig)
-{
- /* On ARM VxWorks 6.x and x86_64 VxWorks 7, the guard page is left un-armed
- by the kernel after being violated, so subsequent violations aren't
- detected.
- So we retrieve the address of the guard page from the TCB and compare it
- with the page that is violated and re-arm that page if there's a match. */
-#if defined (VXWORKS_FORCE_GUARD_PAGE)
-
- /* Ignore signals that are not stack overflow signals */
- if (sig != SIGSEGV && sig != SIGBUS && sig != SIGILL) return FALSE;
-
- /* If the target does not support guard pages, INT_OVERFLOW_SIZE will be 0 */
- if (INT_OVERFLOW_SIZE == 0) return FALSE;
-
- TASK_ID tid = taskIdSelf ();
- WIND_TCB *pTcb = taskTcb (tid);
- VIRT_ADDR guardPage = (VIRT_ADDR) pTcb->pStackEnd - INT_OVERFLOW_SIZE;
- UINT stateMask = VM_STATE_MASK_VALID;
- UINT guardState = VM_STATE_VALID_NOT;
-
-#if (_WRS_VXWORKS_MAJOR >= 7)
- stateMask |= MMU_ATTR_SPL_MSK;
- guardState |= MMU_ATTR_NO_BLOCK;
-#endif
-
- UINT nState;
- vmStateGet (NULL, guardPage, &nState);
- if ((nState & VM_STATE_MASK_VALID) != VM_STATE_VALID_NOT)
- {
- /* If the guard page has a valid state, we need to reset to
- invalid state here */
- vmStateSet (NULL, guardPage, INT_OVERFLOW_SIZE, stateMask, guardState);
- return TRUE;
- }
-#endif /* VXWORKS_FORCE_GUARD_PAGE */
- return FALSE;
-}
-
-/* VxWorks 653 vThreads expects the field excCnt to be zeroed when a signal is.
- handled. The VxWorks version of longjmp does this; GCC's builtin_longjmp
- doesn't. */
-void
-__gnat_clear_exception_count (void)
-{
-#ifdef VTHREADS
- WIND_TCB *currentTask = (WIND_TCB *) taskIdSelf();
-
- currentTask->vThreads.excCnt = 0;
-#endif
-}
-
-/* Handle different SIGnal to exception mappings in different VxWorks
- versions. */
-void
-__gnat_map_signal (int sig,
- siginfo_t *si ATTRIBUTE_UNUSED,
- void *sc ATTRIBUTE_UNUSED)
-{
- struct Exception_Data *exception;
- const char *msg;
-
- switch (sig)
- {
- case SIGFPE:
- exception = &constraint_error;
- msg = "SIGFPE";
- break;
-#ifdef VTHREADS
-#ifdef __VXWORKSMILS__
- case SIGILL:
- exception = &storage_error;
- msg = "SIGILL: possible stack overflow";
- break;
- case SIGSEGV:
- exception = &storage_error;
- msg = "SIGSEGV";
- break;
- case SIGBUS:
- exception = &program_error;
- msg = "SIGBUS";
- break;
-#else
- case SIGILL:
- exception = &constraint_error;
- msg = "Floating point exception or SIGILL";
- break;
- case SIGSEGV:
- exception = &storage_error;
- msg = "SIGSEGV";
- break;
- case SIGBUS:
- exception = &storage_error;
- msg = "SIGBUS: possible stack overflow";
- break;
-#endif
-#elif (_WRS_VXWORKS_MAJOR >= 6)
- case SIGILL:
- exception = &constraint_error;
- msg = "SIGILL";
- break;
-#ifdef __RTP__
- /* In RTP mode a SIGSEGV is most likely due to a stack overflow,
- since stack checking uses the probing mechanism. */
- case SIGSEGV:
- exception = &storage_error;
- msg = "SIGSEGV: possible stack overflow";
- break;
- case SIGBUS:
- exception = &program_error;
- msg = "SIGBUS";
- break;
-#else
- /* VxWorks 6 kernel mode with probing. SIGBUS for guard page hit */
- case SIGSEGV:
- exception = &storage_error;
- msg = "SIGSEGV";
- break;
- case SIGBUS:
- exception = &storage_error;
- msg = "SIGBUS: possible stack overflow";
- break;
-#endif
-#else
- /* VxWorks 5: a SIGILL is most likely due to a stack overflow,
- since stack checking uses the stack limit mechanism. */
- case SIGILL:
- exception = &storage_error;
- msg = "SIGILL: possible stack overflow";
- break;
- case SIGSEGV:
- exception = &storage_error;
- msg = "SIGSEGV";
- break;
- case SIGBUS:
- exception = &program_error;
- msg = "SIGBUS";
- break;
-#endif
- default:
- exception = &program_error;
- msg = "unhandled signal";
- }
-
- if (__gnat_reset_guard_page (sig))
- {
- /* Set the exception message: we know for sure that we have a
- stack overflow here */
- exception = &storage_error;
-
- switch (sig)
- {
- case SIGSEGV:
- msg = "SIGSEGV: stack overflow";
- break;
- case SIGBUS:
- msg = "SIGBUS: stack overflow";
- break;
- case SIGILL:
- msg = "SIGILL: stack overflow";
- break;
- }
- }
- __gnat_clear_exception_count ();
- Raise_From_Signal_Handler (exception, msg);
-}
-
-#if defined (ARMEL) && (_WRS_VXWORKS_MAJOR >= 7) && !defined (__aarch64__)
-
-/* ARM-vx7 case with arm unwinding exceptions */
-#define HAVE_GNAT_ADJUST_CONTEXT_FOR_RAISE
-
-#include <arch/../regs.h>
-#ifndef __RTP__
-#include <sigLib.h>
-#else
-#include <signal.h>
-#include <regs.h>
-#include <ucontext.h>
-#endif /* __RTP__ */
-
-void
-__gnat_adjust_context_for_raise (int signo ATTRIBUTE_UNUSED,
- void *sc ATTRIBUTE_UNUSED)
-{
- /* In case of ARM exceptions, the registers context have the PC pointing
- to the instruction that raised the signal. However the unwinder expects
- the instruction to be in the range ]PC,PC+1]. */
- uintptr_t *pc_addr;
-#ifdef __RTP__
- mcontext_t *mcontext = &((ucontext_t *) sc)->uc_mcontext;
- pc_addr = (uintptr_t*)&mcontext->regs.pc;
-#else
- struct sigcontext * sctx = (struct sigcontext *) sc;
- pc_addr = (uintptr_t*)&sctx->sc_pregs->pc;
-#endif
- /* ARM Bump has to be an even number because of odd/even architecture. */
- *pc_addr += 2;
-}
-#endif /* ARMEL && _WRS_VXWORKS_MAJOR >= 7 */
-
-/* Tasking and Non-tasking signal handler. Map SIGnal to Ada exception
- propagation after the required low level adjustments. */
-
-static void
-__gnat_error_handler (int sig, siginfo_t *si, void *sc)
-{
- sigset_t mask;
-
- /* VxWorks on e500v2 clears the SPE bit of the MSR when entering CPU
- exception state. To allow the handler and exception to work properly
- when they contain SPE instructions, we need to set it back before doing
- anything else.
- This mechanism is only need in kernel mode. */
-#if !(defined (__RTP__) || defined (VTHREADS)) && ((CPU == PPCE500V2) || (CPU == PPC85XX))
- unsigned msr;
- /* Read the MSR value */
- asm volatile ("mfmsr %0" : "=r" (msr));
- /* Force the SPE bit if not set. */
- if ((msr & 0x02000000) == 0)
- {
- msr |= 0x02000000;
- /* Store to MSR */
- asm volatile ("mtmsr %0" : : "r" (msr));
- }
-#endif
-
- /* VxWorks will always mask out the signal during the signal handler and
- will reenable it on a longjmp. GNAT does not generate a longjmp to
- return from a signal handler so the signal will still be masked unless
- we unmask it. */
- sigprocmask (SIG_SETMASK, NULL, &mask);
- sigdelset (&mask, sig);
- sigprocmask (SIG_SETMASK, &mask, NULL);
-
-#if defined (__ARMEL__) || defined (__PPC__) || defined (__i386__) || defined (__x86_64__) || defined (__aarch64__)
- /* On certain targets, kernel mode, we process signals through a Call Frame
- Info trampoline, voiding the need for myriads of fallback_frame_state
- variants in the ZCX runtime. We have no simple way to distinguish ZCX
- from SJLJ here, so we do this for SJLJ as well even though this is not
- necessary. This only incurs a few extra instructions and a tiny
- amount of extra stack usage. */
-
-#ifdef HAVE_GNAT_ADJUST_CONTEXT_FOR_RAISE
- /* We need to sometimes to adjust the PC in case of signals so that it
- doesn't reference the exception that actually raised the signal but the
- instruction before it. */
- __gnat_adjust_context_for_raise (sig, sc);
-#endif
-
- __gnat_sigtramp (sig, (void *)si, (void *)sc,
- (__sigtramphandler_t *)&__gnat_map_signal);
-
-#else
- __gnat_map_signal (sig, si, sc);
-#endif
-}
-
-#if defined(__leon__) && defined(_WRS_KERNEL)
-/* For LEON VxWorks we need to install a trap handler for stack overflow */
-
-extern void excEnt (void);
-/* VxWorks exception handler entry */
-
-struct trap_entry {
- unsigned long inst_first;
- unsigned long inst_second;
- unsigned long inst_third;
- unsigned long inst_fourth;
-};
-/* Four instructions representing entries in the trap table */
-
-struct trap_entry *trap_0_entry;
-/* We will set the location of the entry for software trap 0 in the trap
- table. */
-#endif
-
-void
-__gnat_install_handler (void)
-{
- struct sigaction act;
-
- /* Setup signal handler to map synchronous signals to appropriate
- exceptions. Make sure that the handler isn't interrupted by another
- signal that might cause a scheduling event! */
-
- act.sa_sigaction = __gnat_error_handler;
- act.sa_flags = SA_SIGINFO | SA_ONSTACK;
- sigemptyset (&act.sa_mask);
-
- /* For VxWorks, install all signal handlers, since pragma Interrupt_State
- applies to vectored hardware interrupts, not signals. */
- sigaction (SIGFPE, &act, NULL);
- sigaction (SIGILL, &act, NULL);
- sigaction (SIGSEGV, &act, NULL);
- sigaction (SIGBUS, &act, NULL);
-
-#if defined(__leon__) && defined(_WRS_KERNEL)
- /* Specific to the LEON VxWorks kernel run-time library */
-
- /* For stack checking the compiler triggers a software trap 0 (ta 0) in
- case of overflow (we use the stack limit mechanism). We need to install
- the trap handler here for this software trap (the OS does not handle
- it) as if it were a data_access_exception (trap 9). We do the same as
- if we put in the trap table a VXSPARC_BAD_TRAP(9). Software trap 0 is
- located at vector 0x80, and each entry takes 4 words. */
-
- trap_0_entry = (struct trap_entry *)(intVecBaseGet () + 0x80 * 4);
-
- /* mov 0x9, %l7 */
-
- trap_0_entry->inst_first = 0xae102000 + 9;
-
- /* sethi %hi(excEnt), %l6 */
-
- /* The 22 most significant bits of excEnt are obtained shifting 10 times
- to the right. */
-
- trap_0_entry->inst_second = 0x2d000000 + ((unsigned long)excEnt >> 10);
-
- /* jmp %l6+%lo(excEnt) */
-
- /* The 10 least significant bits of excEnt are obtained by masking */
-
- trap_0_entry->inst_third = 0x81c5a000 + ((unsigned long)excEnt & 0x3ff);
-
- /* rd %psr, %l0 */
-
- trap_0_entry->inst_fourth = 0xa1480000;
-#endif
-
-#ifdef __HANDLE_VXSIM_SC
- /* By experiment, found that sysModel () returns the following string
- prefix for vxsim when running on Linux and Windows. */
- {
- char *model = sysModel ();
- if ((strncmp (model, "Linux", 5) == 0)
- || (strncmp (model, "Windows", 7) == 0)
- || (strncmp (model, "SIMLINUX", 8) == 0) /* vx7 */
- || (strncmp (model, "SIMNT", 5) == 0)) /* ditto */
- __gnat_set_is_vxsim (TRUE);
- }
-#endif
-
- __gnat_handler_installed = 1;
-}
-
-#define HAVE_GNAT_INIT_FLOAT
-
-void
-__gnat_init_float (void)
-{
- /* Disable overflow/underflow exceptions on the PPC processor, needed
- to get correct Ada semantics. Note that for AE653 vThreads, the HW
- overflow settings are an OS configuration issue. The instructions
- below have no effect. */
-#if defined (_ARCH_PPC) && !defined (_SOFT_FLOAT) && (!defined (VTHREADS) || defined (__VXWORKSMILS__))
-#if defined (__SPE__)
- {
- /* For e500v2, do nothing and leave the responsibility to install the
- handler and enable the exceptions to the BSP. */
- }
-#else
- asm ("mtfsb0 25");
- asm ("mtfsb0 26");
-#endif
-#endif
-
-#if (defined (__i386__) || defined (__x86_64__)) && !defined (VTHREADS)
- /* This is used to properly initialize the FPU on an x86 for each
- process thread. */
- asm ("finit");
-#endif
-
- /* Similarly for SPARC64. Achieved by masking bits in the Trap Enable Mask
- field of the Floating-point Status Register (see the SPARC Architecture
- Manual Version 9, p 48). */
-#if defined (sparc64)
-
-#define FSR_TEM_NVM (1 << 27) /* Invalid operand */
-#define FSR_TEM_OFM (1 << 26) /* Overflow */
-#define FSR_TEM_UFM (1 << 25) /* Underflow */
-#define FSR_TEM_DZM (1 << 24) /* Division by Zero */
-#define FSR_TEM_NXM (1 << 23) /* Inexact result */
- {
- unsigned int fsr;
-
- __asm__("st %%fsr, %0" : "=m" (fsr));
- fsr &= ~(FSR_TEM_OFM | FSR_TEM_UFM);
- __asm__("ld %0, %%fsr" : : "m" (fsr));
- }
-#endif
-}
-
-/* This subprogram is called by System.Task_Primitives.Operations.Enter_Task
- (if not null) when a new task is created. It is initialized by
- System.Stack_Checking.Operations.Initialize_Stack_Limit.
- The use of a hook avoids to drag stack checking subprograms if stack
- checking is not used. */
-void (*__gnat_set_stack_limit_hook)(void) = (void (*)(void))0;
-
-/******************/
-/* NetBSD Section */
-/******************/
-
-#elif defined(__NetBSD__)
-
-#include <signal.h>
-#include <unistd.h>
-
-static void
-__gnat_error_handler (int sig)
-{
- struct Exception_Data *exception;
- const char *msg;
-
- switch(sig)
- {
- case SIGFPE:
- exception = &constraint_error;
- msg = "SIGFPE";
- break;
- case SIGILL:
- exception = &constraint_error;
- msg = "SIGILL";
- break;
- case SIGSEGV:
- exception = &storage_error;
- msg = "stack overflow or erroneous memory access";
- break;
- case SIGBUS:
- exception = &constraint_error;
- msg = "SIGBUS";
- break;
- default:
- exception = &program_error;
- msg = "unhandled signal";
- }
-
- Raise_From_Signal_Handler (exception, msg);
-}
-
-void
-__gnat_install_handler (void)
-{
- struct sigaction act;
-
- act.sa_handler = __gnat_error_handler;
- act.sa_flags = SA_NODEFER | SA_RESTART;
- sigemptyset (&act.sa_mask);
-
- /* Do not install handlers if interrupt state is "System". */
- if (__gnat_get_interrupt_state (SIGFPE) != 's')
- sigaction (SIGFPE, &act, NULL);
- if (__gnat_get_interrupt_state (SIGILL) != 's')
- sigaction (SIGILL, &act, NULL);
- if (__gnat_get_interrupt_state (SIGSEGV) != 's')
- sigaction (SIGSEGV, &act, NULL);
- if (__gnat_get_interrupt_state (SIGBUS) != 's')
- sigaction (SIGBUS, &act, NULL);
-
- __gnat_handler_installed = 1;
-}
-
-/*******************/
-/* OpenBSD Section */
-/*******************/
-
-#elif defined(__OpenBSD__)
-
-#include <signal.h>
-#include <unistd.h>
-
-static void
-__gnat_error_handler (int sig)
-{
- struct Exception_Data *exception;
- const char *msg;
-
- switch(sig)
- {
- case SIGFPE:
- exception = &constraint_error;
- msg = "SIGFPE";
- break;
- case SIGILL:
- exception = &constraint_error;
- msg = "SIGILL";
- break;
- case SIGSEGV:
- exception = &storage_error;
- msg = "stack overflow or erroneous memory access";
- break;
- case SIGBUS:
- exception = &constraint_error;
- msg = "SIGBUS";
- break;
- default:
- exception = &program_error;
- msg = "unhandled signal";
- }
-
- Raise_From_Signal_Handler (exception, msg);
-}
-
-void
-__gnat_install_handler (void)
-{
- struct sigaction act;
-
- act.sa_handler = __gnat_error_handler;
- act.sa_flags = SA_NODEFER | SA_RESTART;
- sigemptyset (&act.sa_mask);
-
- /* Do not install handlers if interrupt state is "System" */
- if (__gnat_get_interrupt_state (SIGFPE) != 's')
- sigaction (SIGFPE, &act, NULL);
- if (__gnat_get_interrupt_state (SIGILL) != 's')
- sigaction (SIGILL, &act, NULL);
- if (__gnat_get_interrupt_state (SIGSEGV) != 's')
- sigaction (SIGSEGV, &act, NULL);
- if (__gnat_get_interrupt_state (SIGBUS) != 's')
- sigaction (SIGBUS, &act, NULL);
-
- __gnat_handler_installed = 1;
-}
-
-/******************/
-/* Darwin Section */
-/******************/
-
-#elif defined(__APPLE__)
-
-#include <TargetConditionals.h>
-#include <signal.h>
-#include <stdlib.h>
-#include <sys/syscall.h>
-#include <sys/sysctl.h>
-
-/* This must be in keeping with System.OS_Interface.Alternate_Stack_Size. */
-char __gnat_alternate_stack[32 * 1024]; /* 1 * MINSIGSTKSZ */
-
-/* Defined in xnu unix_signal.c.
- Tell the kernel to re-use alt stack when delivering a signal. */
-#define UC_RESET_ALT_STACK 0x80000000
-
-#if !(defined (__arm__) || defined (__arm64__) || TARGET_IPHONE_SIMULATOR)
-#include <mach/mach_vm.h>
-#include <mach/mach_init.h>
-#include <mach/vm_statistics.h>
-#endif
-
-#ifdef __arm64__
-#include <sys/ucontext.h>
-#include "sigtramp.h"
-#endif
-
-/* Return true if ADDR is within a stack guard area. */
-static int
-__gnat_is_stack_guard (mach_vm_address_t addr)
-{
-#if !(defined (__arm__) || defined (__arm64__) || TARGET_IPHONE_SIMULATOR)
- kern_return_t kret;
- vm_region_submap_info_data_64_t info;
- mach_vm_address_t start;
- mach_vm_size_t size;
- natural_t depth;
- mach_msg_type_number_t count;
-
- count = VM_REGION_SUBMAP_INFO_COUNT_64;
- start = addr;
- size = -1;
- depth = 9999;
- kret = mach_vm_region_recurse (mach_task_self (), &start, &size, &depth,
- (vm_region_recurse_info_t) &info, &count);
- if (kret == KERN_SUCCESS
- && addr >= start && addr < (start + size)
- && info.protection == VM_PROT_NONE
- && info.user_tag == VM_MEMORY_STACK)
- return 1;
- return 0;
-#else
- /* Pagezero for arm. */
- return addr >= 4096;
-#endif
-}
-
-#define HAVE_GNAT_ADJUST_CONTEXT_FOR_RAISE
-
-#if defined (__x86_64__)
-static int
-__darwin_major_version (void)
-{
- static int cache = -1;
- if (cache < 0)
- {
- int mib[2] = {CTL_KERN, KERN_OSRELEASE};
- size_t len;
-
- /* Find out how big the buffer needs to be (and set cache to 0
- on failure). */
- if (sysctl (mib, 2, NULL, &len, NULL, 0) == 0)
- {
- char release[len];
- sysctl (mib, 2, release, &len, NULL, 0);
- /* Darwin releases are of the form L.M.N where L is the major
- version, so strtol will return L. */
- cache = (int) strtol (release, NULL, 10);
- }
- else
- {
- cache = 0;
- }
- }
- return cache;
-}
-#endif
-
-void
-__gnat_adjust_context_for_raise (int signo ATTRIBUTE_UNUSED,
- void *ucontext ATTRIBUTE_UNUSED)
-{
-#if defined (__x86_64__)
- if (__darwin_major_version () < 12)
- {
- /* Work around radar #10302855, where the unwinders (libunwind or
- libgcc_s depending on the system revision) and the DWARF unwind
- data for sigtramp have different ideas about register numbering,
- causing rbx and rdx to be transposed. */
- ucontext_t *uc = (ucontext_t *)ucontext;
- unsigned long t = uc->uc_mcontext->__ss.__rbx;
-
- uc->uc_mcontext->__ss.__rbx = uc->uc_mcontext->__ss.__rdx;
- uc->uc_mcontext->__ss.__rdx = t;
- }
-#elif defined(__arm64__)
- /* Even though the CFI is marked as a signal frame, we need this. */
- ucontext_t *uc = (ucontext_t *)ucontext;
- uc->uc_mcontext->__ss.__pc++;
-#endif
-}
-
-static void
-__gnat_map_signal (int sig, siginfo_t *si, void *mcontext ATTRIBUTE_UNUSED)
-{
- struct Exception_Data *exception;
- const char *msg;
-
- switch (sig)
- {
- case SIGSEGV:
- case SIGBUS:
- if (__gnat_is_stack_guard ((unsigned long)si->si_addr))
- {
-#ifdef __arm64__
- /* ??? This is a kludge to make stack checking work. The problem is
- that the trampoline doesn't restore LR and, consequently, doesn't
- make it possible to unwind past an interrupted frame which hasn"t
- saved LR on the stack yet. Therefore, for probes in the prologue
- (32-bit probes as opposed to standard 64-bit probes), we make the
- unwinder skip the not-yet-established frame altogether. */
- mcontext_t mc = (mcontext_t)mcontext;
- if (!(*(unsigned int *)(mc->__ss.__pc-1) & ((unsigned int)1 << 30)))
- mc->__ss.__pc = mc->__ss.__lr;
-#endif
- exception = &storage_error;
- msg = "stack overflow";
- }
- else
- {
- exception = &constraint_error;
- msg = "erroneous memory access";
- }
-
- /* Reset the use of alt stack, so that the alt stack will be used
- for the next signal delivery.
- The stack can't be used in case of stack checking. */
- syscall (SYS_sigreturn, NULL, UC_RESET_ALT_STACK);
- break;
-
- case SIGFPE:
- exception = &constraint_error;
- msg = "SIGFPE";
- break;
-
- default:
- exception = &program_error;
- msg = "unhandled signal";
- }
-
- Raise_From_Signal_Handler (exception, msg);
-}
-
-static void
-__gnat_error_handler (int sig, siginfo_t *si, void *ucontext)
-{
- __gnat_adjust_context_for_raise (sig, ucontext);
-
- /* The Darwin libc comes with a signal trampoline, except for ARM64. */
-#ifdef __arm64__
- __gnat_sigtramp (sig, (void *)si, ucontext,
- (__sigtramphandler_t *)&__gnat_map_signal);
-#else
- __gnat_map_signal (sig, si, ucontext);
-#endif
-}
-
-void
-__gnat_install_handler (void)
-{
- struct sigaction act;
-
- /* Set up signal handler to map synchronous signals to appropriate
- exceptions. Make sure that the handler isn't interrupted by another
- signal that might cause a scheduling event! Also setup an alternate
- stack region for the handler execution so that stack overflows can be
- handled properly, avoiding a SEGV generation from stack usage by the
- handler itself (and it is required by Darwin). */
-
- stack_t stack;
- stack.ss_sp = __gnat_alternate_stack;
- stack.ss_size = sizeof (__gnat_alternate_stack);
- stack.ss_flags = 0;
- sigaltstack (&stack, NULL);
-
- act.sa_flags = SA_NODEFER | SA_RESTART | SA_SIGINFO;
- act.sa_sigaction = __gnat_error_handler;
- sigemptyset (&act.sa_mask);
-
- /* Do not install handlers if interrupt state is "System". */
- if (__gnat_get_interrupt_state (SIGABRT) != 's')
- sigaction (SIGABRT, &act, NULL);
- if (__gnat_get_interrupt_state (SIGFPE) != 's')
- sigaction (SIGFPE, &act, NULL);
- if (__gnat_get_interrupt_state (SIGILL) != 's')
- sigaction (SIGILL, &act, NULL);
-
- act.sa_flags |= SA_ONSTACK;
- if (__gnat_get_interrupt_state (SIGSEGV) != 's')
- sigaction (SIGSEGV, &act, NULL);
- if (__gnat_get_interrupt_state (SIGBUS) != 's')
- sigaction (SIGBUS, &act, NULL);
-
- __gnat_handler_installed = 1;
-}
-
-#elif defined(__QNX__)
-
-/***************/
-/* QNX Section */
-/***************/
-
-#include <signal.h>
-#include <unistd.h>
-#include <string.h>
-#include <errno.h>
-#include "sigtramp.h"
-
-void
-__gnat_map_signal (int sig,
- siginfo_t *si ATTRIBUTE_UNUSED,
- void *mcontext ATTRIBUTE_UNUSED)
-{
- struct Exception_Data *exception;
- const char *msg;
-
- switch(sig)
- {
- case SIGFPE:
- exception = &constraint_error;
- msg = "SIGFPE";
- break;
- case SIGILL:
- exception = &constraint_error;
- msg = "SIGILL";
- break;
- case SIGSEGV:
- exception = &storage_error;
- msg = "stack overflow or erroneous memory access";
- break;
- case SIGBUS:
- exception = &constraint_error;
- msg = "SIGBUS";
- break;
- default:
- exception = &program_error;
- msg = "unhandled signal";
- }
-
- Raise_From_Signal_Handler (exception, msg);
-}
-
-static void
-__gnat_error_handler (int sig, siginfo_t *si, void *ucontext)
-{
- __gnat_sigtramp (sig, (void *) si, (void *) ucontext,
- (__sigtramphandler_t *)&__gnat_map_signal);
-}
-
-/* This must be in keeping with System.OS_Interface.Alternate_Stack_Size. */
-/* sigaltstack is currently not supported by QNX7 */
-char __gnat_alternate_stack[0];
-
-void
-__gnat_install_handler (void)
-{
- struct sigaction act;
- int err;
-
- act.sa_handler = __gnat_error_handler;
- act.sa_flags = SA_NODEFER | SA_SIGINFO;
- sigemptyset (&act.sa_mask);
-
- /* Do not install handlers if interrupt state is "System" */
- if (__gnat_get_interrupt_state (SIGFPE) != 's') {
- err = sigaction (SIGFPE, &act, NULL);
- if (err == -1) {
- err = errno;
- perror ("error while attaching SIGFPE");
- perror (strerror (err));
- }
- }
- if (__gnat_get_interrupt_state (SIGILL) != 's') {
- sigaction (SIGILL, &act, NULL);
- if (err == -1) {
- err = errno;
- perror ("error while attaching SIGFPE");
- perror (strerror (err));
- }
- }
- if (__gnat_get_interrupt_state (SIGSEGV) != 's') {
- sigaction (SIGSEGV, &act, NULL);
- if (err == -1) {
- err = errno;
- perror ("error while attaching SIGFPE");
- perror (strerror (err));
- }
- }
- if (__gnat_get_interrupt_state (SIGBUS) != 's') {
- sigaction (SIGBUS, &act, NULL);
- if (err == -1) {
- err = errno;
- perror ("error while attaching SIGFPE");
- perror (strerror (err));
- }
- }
- __gnat_handler_installed = 1;
-}
-
-/*****************/
-/* RTEMS Section */
-/*****************/
-
-#elif defined(__rtems__)
-
-#include <signal.h>
-#include <unistd.h>
-
-static void
-__gnat_error_handler (int sig)
-{
- struct Exception_Data *exception;
- const char *msg;
-
- switch(sig)
- {
- case SIGFPE:
- exception = &constraint_error;
- msg = "SIGFPE";
- break;
- case SIGILL:
- exception = &constraint_error;
- msg = "SIGILL";
- break;
- case SIGSEGV:
- exception = &storage_error;
- msg = "erroneous memory access";
- break;
- case SIGBUS:
- exception = &constraint_error;
- msg = "SIGBUS";
- break;
- default:
- exception = &program_error;
- msg = "unhandled signal";
- }
-
- Raise_From_Signal_Handler (exception, msg);
-}
-
-void
-__gnat_install_handler (void)
-{
- struct sigaction act;
-
- act.sa_handler = __gnat_error_handler;
- sigemptyset (&act.sa_mask);
-
- /* Do not install handlers if interrupt state is "System". */
- if (__gnat_get_interrupt_state (SIGFPE) != 's')
- sigaction (SIGFPE, &act, NULL);
- if (__gnat_get_interrupt_state (SIGILL) != 's')
- sigaction (SIGILL, &act, NULL);
- if (__gnat_get_interrupt_state (SIGSEGV) != 's')
- sigaction (SIGSEGV, &act, NULL);
- if (__gnat_get_interrupt_state (SIGBUS) != 's')
- sigaction (SIGBUS, &act, NULL);
-
- __gnat_handler_installed = 1;
-}
-
-#elif defined (__DJGPP__)
-
-void
-__gnat_install_handler ()
-{
- __gnat_handler_installed = 1;
-}
-
-#elif defined(__ANDROID__)
-
-/*******************/
-/* Android Section */
-/*******************/
-
-#include <signal.h>
-#include <sys/ucontext.h>
-#include "sigtramp.h"
-
-#define HAVE_GNAT_ADJUST_CONTEXT_FOR_RAISE
-
-void
-__gnat_adjust_context_for_raise (int signo ATTRIBUTE_UNUSED, void *ucontext)
-{
- mcontext_t *mcontext = &((ucontext_t *) ucontext)->uc_mcontext;
-
- /* ARM Bump has to be an even number because of odd/even architecture. */
- ((mcontext_t *) mcontext)->arm_pc += 2;
-}
-
-static void
-__gnat_map_signal (int sig,
- siginfo_t *si ATTRIBUTE_UNUSED,
- void *mcontext ATTRIBUTE_UNUSED)
-{
- struct Exception_Data *exception;
- const char *msg;
-
- switch (sig)
- {
- case SIGSEGV:
- exception = &storage_error;
- msg = "stack overflow or erroneous memory access";
- break;
-
- case SIGBUS:
- exception = &constraint_error;
- msg = "SIGBUS";
- break;
-
- case SIGFPE:
- exception = &constraint_error;
- msg = "SIGFPE";
- break;
-
- default:
- exception = &program_error;
- msg = "unhandled signal";
- }
-
- Raise_From_Signal_Handler (exception, msg);
-}
-
-static void
-__gnat_error_handler (int sig, siginfo_t *si, void *ucontext)
-{
- __gnat_adjust_context_for_raise (sig, ucontext);
-
- __gnat_sigtramp (sig, (void *) si, (void *) ucontext,
- (__sigtramphandler_t *)&__gnat_map_signal);
-}
-
-/* This must be in keeping with System.OS_Interface.Alternate_Stack_Size. */
-char __gnat_alternate_stack[16 * 1024];
-
-void
-__gnat_install_handler (void)
-{
- struct sigaction act;
-
- /* Set up signal handler to map synchronous signals to appropriate
- exceptions. Make sure that the handler isn't interrupted by another
- signal that might cause a scheduling event! Also setup an alternate
- stack region for the handler execution so that stack overflows can be
- handled properly, avoiding a SEGV generation from stack usage by the
- handler itself. */
-
- stack_t stack;
- stack.ss_sp = __gnat_alternate_stack;
- stack.ss_size = sizeof (__gnat_alternate_stack);
- stack.ss_flags = 0;
- sigaltstack (&stack, NULL);
-
- act.sa_sigaction = __gnat_error_handler;
- act.sa_flags = SA_NODEFER | SA_RESTART | SA_SIGINFO;
- sigemptyset (&act.sa_mask);
-
- sigaction (SIGABRT, &act, NULL);
- sigaction (SIGFPE, &act, NULL);
- sigaction (SIGILL, &act, NULL);
- sigaction (SIGBUS, &act, NULL);
- act.sa_flags |= SA_ONSTACK;
- sigaction (SIGSEGV, &act, NULL);
-
- __gnat_handler_installed = 1;
-}
-
-#else
-
-/* For all other versions of GNAT, the handler does nothing. */
-
-/*******************/
-/* Default Section */
-/*******************/
-
-void
-__gnat_install_handler (void)
-{
- __gnat_handler_installed = 1;
-}
-
-#endif
-
-/*********************/
-/* __gnat_init_float */
-/*********************/
-
-#if defined (_WIN32) || defined (__INTERIX) || defined (__linux__) \
- || defined (__Lynx__) || defined(__NetBSD__) || defined(__FreeBSD__) \
- || defined (__OpenBSD__) || defined (__DragonFly__) || defined(__QNX__)
-
-#define HAVE_GNAT_INIT_FLOAT
-
-void
-__gnat_init_float (void)
-{
-#if defined (__i386__) || defined (__x86_64__)
- /* This is used to properly initialize the FPU to 64-bit precision on an x86
- for each process thread and also for floating-point I/O. */
- asm ("finit");
-#endif
-}
-#endif
-
-#ifndef HAVE_GNAT_INIT_FLOAT
-
-/* All targets without a specific __gnat_init_float will use an empty one. */
-void
-__gnat_init_float (void)
-{
-}
-#endif
-
-/***********************************/
-/* __gnat_adjust_context_for_raise */
-/***********************************/
-
-#ifndef HAVE_GNAT_ADJUST_CONTEXT_FOR_RAISE
-
-/* All targets without a specific version will use an empty one. */
-
-/* Given UCONTEXT a pointer to a context structure received by a signal
- handler for SIGNO, perform the necessary adjustments to let the handler
- raise an exception. Calls to this routine are not conditioned by the
- propagation scheme in use. */
-
-void
-__gnat_adjust_context_for_raise (int signo ATTRIBUTE_UNUSED,
- void *ucontext ATTRIBUTE_UNUSED)
-{
- /* We used to compensate here for the raised from call vs raised from signal
- exception discrepancy with the GCC ZCX scheme, but this now can be dealt
- with generically in the unwinder (see GCC PR other/26208). This however
- requires the use of the _Unwind_GetIPInfo routine in raise-gcc.c, which
- is predicated on the definition of HAVE_GETIPINFO at compile time. Only
- the VMS ports still do the compensation described in the few lines below.
-
- *** Call vs signal exception discrepancy with GCC ZCX scheme ***
-
- The GCC unwinder expects to be dealing with call return addresses, since
- this is the "nominal" case of what we retrieve while unwinding a regular
- call chain.
-
- To evaluate if a handler applies at some point identified by a return
- address, the propagation engine needs to determine what region the
- corresponding call instruction pertains to. Because the return address
- may not be attached to the same region as the call, the unwinder always
- subtracts "some" amount from a return address to search the region
- tables, amount chosen to ensure that the resulting address is inside the
- call instruction.
-
- When we raise an exception from a signal handler, e.g. to transform a
- SIGSEGV into Storage_Error, things need to appear as if the signal
- handler had been "called" by the instruction which triggered the signal,
- so that exception handlers that apply there are considered. What the
- unwinder will retrieve as the return address from the signal handler is
- what it will find as the faulting instruction address in the signal
- context pushed by the kernel. Leaving this address untouched looses, if
- the triggering instruction happens to be the very first of a region, as
- the later adjustments performed by the unwinder would yield an address
- outside that region. We need to compensate for the unwinder adjustments
- at some point, and this is what this routine is expected to do.
-
- signo is passed because on some targets for some signals the PC in
- context points to the instruction after the faulting one, in which case
- the unwinder adjustment is still desired. */
-}
-
-#endif
-
-#ifdef __cplusplus
-}
-#endif