diff options
author | Martin Liska <mliska@suse.cz> | 2022-01-14 16:56:44 +0100 |
---|---|---|
committer | Martin Liska <mliska@suse.cz> | 2022-01-17 22:12:04 +0100 |
commit | 5c69acb32329d49e58c26fa41ae74229a52b9106 (patch) | |
tree | ddb05f9d73afb6f998457d2ac4b720e3b3b60483 /gcc/lto-wrapper.c | |
parent | 490e23032baaece71f2ec09fa1805064b150fbc2 (diff) | |
download | gcc-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/lto-wrapper.c')
-rw-r--r-- | gcc/lto-wrapper.c | 2146 |
1 files changed, 0 insertions, 2146 deletions
diff --git a/gcc/lto-wrapper.c b/gcc/lto-wrapper.c deleted file mode 100644 index e270928..0000000 --- a/gcc/lto-wrapper.c +++ /dev/null @@ -1,2146 +0,0 @@ -/* Wrapper to call lto. Used by collect2 and the linker plugin. - Copyright (C) 2009-2022 Free Software Foundation, Inc. - - Factored out of collect2 by Rafael Espindola <espindola@google.com> - -This file is part of GCC. - -GCC is free software; you can redistribute it and/or modify it under -the terms of the GNU General Public License as published by the Free -Software Foundation; either version 3, or (at your option) any later -version. - -GCC is distributed in the hope that it will be useful, but WITHOUT ANY -WARRANTY; without even the implied warranty of MERCHANTABILITY or -FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING3. If not see -<http://www.gnu.org/licenses/>. */ - - -/* This program is passed a gcc, a list of gcc arguments and a list of - object files containing IL. It scans the argument list to check if - we are in whopr mode or not modifies the arguments and needed and - prints a list of output files on stdout. - - Example: - - $ lto-wrapper gcc/xgcc -B gcc a.o b.o -o test -flto - - The above will print something like - /tmp/ccwbQ8B2.lto.o - - If WHOPR is used instead, more than one file might be produced - ./ccXj2DTk.lto.ltrans.o - ./ccCJuXGv.lto.ltrans.o -*/ - -#include "config.h" -#include "system.h" -#include "coretypes.h" -#include "intl.h" -#include "diagnostic.h" -#include "obstack.h" -#include "opts.h" -#include "options.h" -#include "simple-object.h" -#include "lto-section-names.h" -#include "collect-utils.h" -#include "opts-diagnostic.h" - -/* Environment variable, used for passing the names of offload targets from GCC - driver to lto-wrapper. */ -#define OFFLOAD_TARGET_NAMES_ENV "OFFLOAD_TARGET_NAMES" -#define OFFLOAD_TARGET_DEFAULT_ENV "OFFLOAD_TARGET_DEFAULT" - -/* By default there is no special suffix for target executables. */ -#ifdef TARGET_EXECUTABLE_SUFFIX -#define HAVE_TARGET_EXECUTABLE_SUFFIX -#else -#define TARGET_EXECUTABLE_SUFFIX "" -#endif - -enum lto_mode_d { - LTO_MODE_NONE, /* Not doing LTO. */ - LTO_MODE_LTO, /* Normal LTO. */ - LTO_MODE_WHOPR /* WHOPR. */ -}; - -/* Current LTO mode. */ -static enum lto_mode_d lto_mode = LTO_MODE_NONE; - -static char *ltrans_output_file; -static char *flto_out; -static unsigned int nr; -static int *ltrans_priorities; -static char **input_names; -static char **output_names; -static char **offload_names; -static char *offload_objects_file_name; -static char *makefile; -static unsigned int num_deb_objs; -static const char **early_debug_object_names; -static bool xassembler_options_error = false; - -const char tool_name[] = "lto-wrapper"; - -/* Delete tempfiles. Called from utils_cleanup. */ - -void -tool_cleanup (bool) -{ - unsigned int i; - - if (ltrans_output_file) - maybe_unlink (ltrans_output_file); - if (flto_out) - maybe_unlink (flto_out); - if (offload_objects_file_name) - maybe_unlink (offload_objects_file_name); - if (makefile) - maybe_unlink (makefile); - if (early_debug_object_names) - for (i = 0; i < num_deb_objs; ++i) - if (early_debug_object_names[i]) - maybe_unlink (early_debug_object_names[i]); - for (i = 0; i < nr; ++i) - { - maybe_unlink (input_names[i]); - if (output_names[i]) - maybe_unlink (output_names[i]); - } -} - -static void -lto_wrapper_cleanup (void) -{ - utils_cleanup (false); -} - -/* Unlink a temporary LTRANS file unless requested otherwise. */ - -void -maybe_unlink (const char *file) -{ - if (!save_temps) - { - if (unlink_if_ordinary (file) - && errno != ENOENT) - fatal_error (input_location, "deleting LTRANS file %s: %m", file); - } - else if (verbose) - fprintf (stderr, "[Leaving LTRANS %s]\n", file); -} - -/* Template of LTRANS dumpbase suffix. */ -#define DUMPBASE_SUFFIX "ltrans18446744073709551615" - -/* Create decoded options from the COLLECT_GCC and COLLECT_GCC_OPTIONS - environment. */ - -static vec<cl_decoded_option> -get_options_from_collect_gcc_options (const char *collect_gcc, - const char *collect_gcc_options) -{ - cl_decoded_option *decoded_options; - unsigned int decoded_options_count; - struct obstack argv_obstack; - const char **argv; - int argc; - - obstack_init (&argv_obstack); - obstack_ptr_grow (&argv_obstack, collect_gcc); - - parse_options_from_collect_gcc_options (collect_gcc_options, - &argv_obstack, &argc); - argv = XOBFINISH (&argv_obstack, const char **); - - decode_cmdline_options_to_array (argc, (const char **)argv, CL_DRIVER, - &decoded_options, &decoded_options_count); - vec<cl_decoded_option> decoded; - decoded.create (decoded_options_count); - for (unsigned i = 0; i < decoded_options_count; ++i) - decoded.quick_push (decoded_options[i]); - free (decoded_options); - - obstack_free (&argv_obstack, NULL); - - return decoded; -} - -/* Find option in OPTIONS based on OPT_INDEX. -1 value is returned - if the option is not present. */ - -static int -find_option (vec<cl_decoded_option> &options, size_t opt_index) -{ - for (unsigned i = 0; i < options.length (); ++i) - if (options[i].opt_index == opt_index) - return i; - - return -1; -} - -static int -find_option (vec<cl_decoded_option> &options, cl_decoded_option *option) -{ - return find_option (options, option->opt_index); -} - -/* Merge -flto FOPTION into vector of DECODED_OPTIONS. */ - -static void -merge_flto_options (vec<cl_decoded_option> &decoded_options, - cl_decoded_option *foption) -{ - int existing_opt = find_option (decoded_options, foption); - if (existing_opt == -1) - decoded_options.safe_push (*foption); - else - { - if (strcmp (foption->arg, decoded_options[existing_opt].arg) != 0) - { - /* -flto=auto is preferred. */ - if (strcmp (decoded_options[existing_opt].arg, "auto") == 0) - ; - else if (strcmp (foption->arg, "auto") == 0 - || strcmp (foption->arg, "jobserver") == 0) - decoded_options[existing_opt].arg = foption->arg; - else if (strcmp (decoded_options[existing_opt].arg, - "jobserver") != 0) - { - int n = atoi (foption->arg); - int original_n = atoi (decoded_options[existing_opt].arg); - if (n > original_n) - decoded_options[existing_opt].arg = foption->arg; - } - } - } -} - -/* Try to merge and complain about options FDECODED_OPTIONS when applied - ontop of DECODED_OPTIONS. */ - -static void -merge_and_complain (vec<cl_decoded_option> &decoded_options, - vec<cl_decoded_option> fdecoded_options, - vec<cl_decoded_option> decoded_cl_options) -{ - unsigned int i, j; - cl_decoded_option *pic_option = NULL; - cl_decoded_option *pie_option = NULL; - cl_decoded_option *cf_protection_option = NULL; - - /* ??? Merge options from files. Most cases can be - handled by either unioning or intersecting - (for example -fwrapv is a case for unioning, - -ffast-math is for intersection). Most complaints - about real conflicts between different options can - be deferred to the compiler proper. Options that - we can neither safely handle by intersection nor - unioning would need to be complained about here. - Ideally we'd have a flag in the opt files that - tells whether to union or intersect or reject. - In absence of that it's unclear what a good default is. - It's also difficult to get positional handling correct. */ - - /* Look for a -fcf-protection option in the link-time options - which overrides any -fcf-protection from the lto sections. */ - for (i = 0; i < decoded_cl_options.length (); ++i) - { - cl_decoded_option *foption = &decoded_cl_options[i]; - if (foption->opt_index == OPT_fcf_protection_) - { - cf_protection_option = foption; - } - } - - /* The following does what the old LTO option code did, - union all target and a selected set of common options. */ - for (i = 0; i < fdecoded_options.length (); ++i) - { - cl_decoded_option *foption = &fdecoded_options[i]; - int existing_opt = find_option (decoded_options, foption); - switch (foption->opt_index) - { - case OPT_SPECIAL_unknown: - case OPT_SPECIAL_ignore: - case OPT_SPECIAL_warn_removed: - case OPT_SPECIAL_program_name: - case OPT_SPECIAL_input_file: - break; - - default: - if (!(cl_options[foption->opt_index].flags & CL_TARGET)) - break; - - /* Fallthru. */ - case OPT_fdiagnostics_show_caret: - case OPT_fdiagnostics_show_labels: - case OPT_fdiagnostics_show_line_numbers: - case OPT_fdiagnostics_show_option: - case OPT_fdiagnostics_show_location_: - case OPT_fshow_column: - case OPT_fcommon: - case OPT_fgnu_tm: - case OPT_g: - /* Do what the old LTO code did - collect exactly one option - setting per OPT code, we pick the first we encounter. - ??? This doesn't make too much sense, but when it doesn't - then we should complain. */ - if (existing_opt == -1) - decoded_options.safe_push (*foption); - break; - - /* Figure out what PIC/PIE level wins and merge the results. */ - case OPT_fPIC: - case OPT_fpic: - pic_option = foption; - break; - case OPT_fPIE: - case OPT_fpie: - pie_option = foption; - break; - - case OPT_fopenmp: - case OPT_fopenacc: - /* For selected options we can merge conservatively. */ - if (existing_opt == -1) - decoded_options.safe_push (*foption); - /* -fopenmp > -fno-openmp, - -fopenacc > -fno-openacc */ - else if (foption->value > decoded_options[existing_opt].value) - decoded_options[existing_opt] = *foption; - break; - - case OPT_fopenacc_dim_: - /* Append or check identical. */ - if (existing_opt == -1) - decoded_options.safe_push (*foption); - else if (strcmp (decoded_options[existing_opt].arg, foption->arg)) - fatal_error (input_location, - "option %s with different values", - foption->orig_option_with_args_text); - break; - - case OPT_fcf_protection_: - /* Default to link-time option, else append or check identical. */ - if (!cf_protection_option - || cf_protection_option->value == CF_CHECK) - { - if (existing_opt == -1) - decoded_options.safe_push (*foption); - else if (decoded_options[existing_opt].value != foption->value) - { - if (cf_protection_option - && cf_protection_option->value == CF_CHECK) - fatal_error (input_location, - "option %qs with mismatching values" - " (%s, %s)", - "-fcf-protection", - decoded_options[existing_opt].arg, - foption->arg); - else - { - /* Merge and update the -fcf-protection option. */ - decoded_options[existing_opt].value - &= (foption->value & CF_FULL); - switch (decoded_options[existing_opt].value) - { - case CF_NONE: - decoded_options[existing_opt].arg = "none"; - break; - case CF_BRANCH: - decoded_options[existing_opt].arg = "branch"; - break; - case CF_RETURN: - decoded_options[existing_opt].arg = "return"; - break; - default: - gcc_unreachable (); - } - } - } - } - break; - - case OPT_O: - case OPT_Ofast: - case OPT_Og: - case OPT_Os: - case OPT_Oz: - existing_opt = -1; - for (j = 0; j < decoded_options.length (); ++j) - if (decoded_options[j].opt_index == OPT_O - || decoded_options[j].opt_index == OPT_Ofast - || decoded_options[j].opt_index == OPT_Og - || decoded_options[j].opt_index == OPT_Os - || decoded_options[j].opt_index == OPT_Oz) - { - existing_opt = j; - break; - } - if (existing_opt == -1) - decoded_options.safe_push (*foption); - else if (decoded_options[existing_opt].opt_index == foption->opt_index - && foption->opt_index != OPT_O) - /* Exact same options get merged. */ - ; - else - { - /* For mismatched option kinds preserve the optimization - level only, thus merge it as -On. This also handles - merging of same optimization level -On. */ - int level = 0; - switch (foption->opt_index) - { - case OPT_O: - if (foption->arg[0] == '\0') - level = MAX (level, 1); - else - level = MAX (level, atoi (foption->arg)); - break; - case OPT_Ofast: - level = MAX (level, 3); - break; - case OPT_Og: - level = MAX (level, 1); - break; - case OPT_Os: - case OPT_Oz: - level = MAX (level, 2); - break; - default: - gcc_unreachable (); - } - switch (decoded_options[existing_opt].opt_index) - { - case OPT_O: - if (decoded_options[existing_opt].arg[0] == '\0') - level = MAX (level, 1); - else - level = MAX (level, - atoi (decoded_options[existing_opt].arg)); - break; - case OPT_Ofast: - level = MAX (level, 3); - break; - case OPT_Og: - level = MAX (level, 1); - break; - case OPT_Os: - case OPT_Oz: - level = MAX (level, 2); - break; - default: - gcc_unreachable (); - } - decoded_options[existing_opt].opt_index = OPT_O; - char *tem; - tem = xasprintf ("-O%d", level); - decoded_options[existing_opt].arg = &tem[2]; - decoded_options[existing_opt].canonical_option[0] = tem; - decoded_options[existing_opt].value = 1; - } - break; - - - case OPT_foffload_abi_: - if (existing_opt == -1) - decoded_options.safe_push (*foption); - else if (foption->value != decoded_options[existing_opt].value) - fatal_error (input_location, - "option %s not used consistently in all LTO input" - " files", foption->orig_option_with_args_text); - break; - - - case OPT_foffload_options_: - decoded_options.safe_push (*foption); - break; - - case OPT_flto_: - merge_flto_options (decoded_options, foption); - break; - } - } - - /* Merge PIC options: - -fPIC + -fpic = -fpic - -fPIC + -fno-pic = -fno-pic - -fpic/-fPIC + nothing = nothing. - It is a common mistake to mix few -fPIC compiled objects into otherwise - non-PIC code. We do not want to build everything with PIC then. - - Similarly we merge PIE options, however in addition we keep - -fPIC + -fPIE = -fPIE - -fpic + -fPIE = -fpie - -fPIC/-fpic + -fpie = -fpie - - It would be good to warn on mismatches, but it is bit hard to do as - we do not know what nothing translates to. */ - - for (unsigned int j = 0; j < decoded_options.length ();) - if (decoded_options[j].opt_index == OPT_fPIC - || decoded_options[j].opt_index == OPT_fpic) - { - /* -fno-pic in one unit implies -fno-pic everywhere. */ - if (decoded_options[j].value == 0) - j++; - /* If we have no pic option or merge in -fno-pic, we still may turn - existing pic/PIC mode into pie/PIE if -fpie/-fPIE is present. */ - else if ((pic_option && pic_option->value == 0) - || !pic_option) - { - if (pie_option) - { - bool big = decoded_options[j].opt_index == OPT_fPIC - && pie_option->opt_index == OPT_fPIE; - decoded_options[j].opt_index = big ? OPT_fPIE : OPT_fpie; - if (pie_option->value) - decoded_options[j].canonical_option[0] - = big ? "-fPIE" : "-fpie"; - else - decoded_options[j].canonical_option[0] = "-fno-pie"; - decoded_options[j].value = pie_option->value; - j++; - } - else if (pic_option) - { - decoded_options[j] = *pic_option; - j++; - } - /* We do not know if target defaults to pic or not, so just remove - option if it is missing in one unit but enabled in other. */ - else - decoded_options.ordered_remove (j); - } - else if (pic_option->opt_index == OPT_fpic - && decoded_options[j].opt_index == OPT_fPIC) - { - decoded_options[j] = *pic_option; - j++; - } - else - j++; - } - else if (decoded_options[j].opt_index == OPT_fPIE - || decoded_options[j].opt_index == OPT_fpie) - { - /* -fno-pie in one unit implies -fno-pie everywhere. */ - if (decoded_options[j].value == 0) - j++; - /* If we have no pie option or merge in -fno-pie, we still preserve - PIE/pie if pic/PIC is present. */ - else if ((pie_option && pie_option->value == 0) - || !pie_option) - { - /* If -fPIC/-fpic is given, merge it with -fPIE/-fpie. */ - if (pic_option) - { - if (pic_option->opt_index == OPT_fpic - && decoded_options[j].opt_index == OPT_fPIE) - { - decoded_options[j].opt_index = OPT_fpie; - decoded_options[j].canonical_option[0] - = pic_option->value ? "-fpie" : "-fno-pie"; - } - else if (!pic_option->value) - decoded_options[j].canonical_option[0] = "-fno-pie"; - decoded_options[j].value = pic_option->value; - j++; - } - else if (pie_option) - { - decoded_options[j] = *pie_option; - j++; - } - /* Because we always append pic/PIE options this code path should - not happen unless the LTO object was built by old lto1 which - did not contain that logic yet. */ - else - decoded_options.ordered_remove (j); - } - else if (pie_option->opt_index == OPT_fpie - && decoded_options[j].opt_index == OPT_fPIE) - { - decoded_options[j] = *pie_option; - j++; - } - else - j++; - } - else - j++; - - if (!xassembler_options_error) - for (i = j = 0; ; i++, j++) - { - int existing_opt_index - = find_option (decoded_options, OPT_Xassembler); - int existing_opt2_index - = find_option (fdecoded_options, OPT_Xassembler); - - cl_decoded_option *existing_opt = NULL; - cl_decoded_option *existing_opt2 = NULL; - if (existing_opt_index != -1) - existing_opt = &decoded_options[existing_opt_index]; - if (existing_opt2_index != -1) - existing_opt2 = &fdecoded_options[existing_opt2_index]; - - if (existing_opt == NULL && existing_opt2 == NULL) - break; - else if (existing_opt != NULL && existing_opt2 == NULL) - { - warning (0, "Extra option to %<-Xassembler%>: %s," - " dropping all %<-Xassembler%> and %<-Wa%> options.", - existing_opt->arg); - xassembler_options_error = true; - break; - } - else if (existing_opt == NULL && existing_opt2 != NULL) - { - warning (0, "Extra option to %<-Xassembler%>: %s," - " dropping all %<-Xassembler%> and %<-Wa%> options.", - existing_opt2->arg); - xassembler_options_error = true; - break; - } - else if (strcmp (existing_opt->arg, existing_opt2->arg) != 0) - { - warning (0, "Options to %<-Xassembler%> do not match: %s, %s," - " dropping all %<-Xassembler%> and %<-Wa%> options.", - existing_opt->arg, existing_opt2->arg); - xassembler_options_error = true; - break; - } - } -} - -/* Auxiliary function that frees elements of PTR and PTR itself. - N is number of elements to be freed. If PTR is NULL, nothing is freed. - If an element is NULL, subsequent elements are not freed. */ - -static void ** -free_array_of_ptrs (void **ptr, unsigned n) -{ - if (!ptr) - return NULL; - for (unsigned i = 0; i < n; i++) - { - if (!ptr[i]) - break; - free (ptr[i]); - } - free (ptr); - return NULL; -} - -/* Parse STR, saving found tokens into PVALUES and return their number. - Tokens are assumed to be delimited by ':'. If APPEND is non-null, - append it to every token we find. */ - -static unsigned -parse_env_var (const char *str, char ***pvalues, const char *append) -{ - const char *curval, *nextval; - char **values; - unsigned num = 1, i; - - curval = strchr (str, ':'); - while (curval) - { - num++; - curval = strchr (curval + 1, ':'); - } - - values = (char**) xmalloc (num * sizeof (char*)); - curval = str; - nextval = strchr (curval, ':'); - if (nextval == NULL) - nextval = strchr (curval, '\0'); - - int append_len = append ? strlen (append) : 0; - for (i = 0; i < num; i++) - { - int l = nextval - curval; - values[i] = (char*) xmalloc (l + 1 + append_len); - memcpy (values[i], curval, l); - values[i][l] = 0; - if (append) - strcat (values[i], append); - curval = nextval + 1; - nextval = strchr (curval, ':'); - if (nextval == NULL) - nextval = strchr (curval, '\0'); - } - *pvalues = values; - return num; -} - -/* Append options OPTS from lto or offload_lto sections to ARGV_OBSTACK. */ - -static void -append_compiler_options (obstack *argv_obstack, vec<cl_decoded_option> opts) -{ - /* Append compiler driver arguments as far as they were merged. */ - for (unsigned int j = 1; j < opts.length (); ++j) - { - cl_decoded_option *option = &opts[j]; - - /* File options have been properly filtered by lto-opts.c. */ - switch (option->opt_index) - { - /* Drop arguments that we want to take from the link line. */ - case OPT_flto_: - case OPT_flto: - case OPT_flto_partition_: - continue; - - default: - break; - } - - /* For now do what the original LTO option code was doing - pass - on any CL_TARGET flag and a few selected others. */ - switch (option->opt_index) - { - case OPT_fdiagnostics_show_caret: - case OPT_fdiagnostics_show_labels: - case OPT_fdiagnostics_show_line_numbers: - case OPT_fdiagnostics_show_option: - case OPT_fdiagnostics_show_location_: - case OPT_fshow_column: - case OPT_fPIC: - case OPT_fpic: - case OPT_fPIE: - case OPT_fpie: - case OPT_fcommon: - case OPT_fgnu_tm: - case OPT_fopenmp: - case OPT_fopenacc: - case OPT_fopenacc_dim_: - case OPT_foffload_abi_: - case OPT_fcf_protection_: - case OPT_g: - case OPT_O: - case OPT_Ofast: - case OPT_Og: - case OPT_Os: - case OPT_Oz: - break; - - case OPT_Xassembler: - /* When we detected a mismatch in assembler options between - the input TU's fall back to previous behavior of ignoring them. */ - if (xassembler_options_error) - continue; - break; - - default: - if (!(cl_options[option->opt_index].flags & CL_TARGET)) - continue; - } - - /* Pass the option on. */ - for (unsigned int i = 0; i < option->canonical_option_num_elements; ++i) - obstack_ptr_grow (argv_obstack, option->canonical_option[i]); - } -} - -/* Append diag options in OPTS to ARGV_OBSTACK. */ - -static void -append_diag_options (obstack *argv_obstack, vec<cl_decoded_option> opts) -{ - /* Append compiler driver arguments as far as they were merged. */ - for (unsigned int j = 1; j < opts.length (); ++j) - { - cl_decoded_option *option = &opts[j]; - - switch (option->opt_index) - { - case OPT_fdiagnostics_color_: - case OPT_fdiagnostics_format_: - case OPT_fdiagnostics_show_caret: - case OPT_fdiagnostics_show_labels: - case OPT_fdiagnostics_show_line_numbers: - case OPT_fdiagnostics_show_option: - case OPT_fdiagnostics_show_location_: - case OPT_fshow_column: - break; - default: - continue; - } - - /* Pass the option on. */ - for (unsigned int i = 0; i < option->canonical_option_num_elements; ++i) - obstack_ptr_grow (argv_obstack, option->canonical_option[i]); - } -} - - -/* Append linker options OPTS to ARGV_OBSTACK. */ - -static void -append_linker_options (obstack *argv_obstack, vec<cl_decoded_option> opts) -{ - /* Append linker driver arguments. Compiler options from the linker - driver arguments will override / merge with those from the compiler. */ - for (unsigned int j = 1; j < opts.length (); ++j) - { - cl_decoded_option *option = &opts[j]; - - /* Do not pass on frontend specific flags not suitable for lto. */ - if (!(cl_options[option->opt_index].flags - & (CL_COMMON|CL_TARGET|CL_DRIVER|CL_LTO))) - continue; - - switch (option->opt_index) - { - case OPT_o: - case OPT_flto_: - case OPT_flto: - /* We've handled these LTO options, do not pass them on. */ - continue; - - case OPT_fopenmp: - case OPT_fopenacc: - /* Ignore -fno-XXX form of these options, as otherwise - corresponding builtins will not be enabled. */ - if (option->value == 0) - continue; - break; - - default: - break; - } - - /* Pass the option on. */ - for (unsigned int i = 0; i < option->canonical_option_num_elements; ++i) - obstack_ptr_grow (argv_obstack, option->canonical_option[i]); - } -} - -/* Extract options for TARGET offload compiler from OPTIONS and append - them to ARGV_OBSTACK. */ - -static void -append_offload_options (obstack *argv_obstack, const char *target, - vec<cl_decoded_option> options) -{ - for (unsigned i = 0; i < options.length (); i++) - { - const char *cur, *next, *opts; - char **argv; - unsigned argc; - cl_decoded_option *option = &options[i]; - - if (option->opt_index != OPT_foffload_options_) - continue; - - /* If option argument starts with '-' then no target is specified. That - means offload options are specified for all targets, so we need to - append them. */ - if (option->arg[0] == '-') - opts = option->arg; - else - { - opts = strchr (option->arg, '='); - gcc_assert (opts); - cur = option->arg; - - while (cur < opts) - { - next = strchr (cur, ','); - if (next == NULL) - next = opts; - next = (next > opts) ? opts : next; - - /* Are we looking for this offload target? */ - if (strlen (target) == (size_t) (next - cur) - && strncmp (target, cur, next - cur) == 0) - break; - - /* Skip the comma or equal sign. */ - cur = next + 1; - } - - if (cur >= opts) - continue; - - opts++; - } - - argv = buildargv (opts); - for (argc = 0; argv[argc]; argc++) - obstack_ptr_grow (argv_obstack, argv[argc]); - } -} - -/* Check whether NAME can be accessed in MODE. This is like access, - except that it never considers directories to be executable. */ - -static int -access_check (const char *name, int mode) -{ - if (mode == X_OK) - { - struct stat st; - - if (stat (name, &st) < 0 - || S_ISDIR (st.st_mode)) - return -1; - } - - return access (name, mode); -} - -/* Prepare a target image for offload TARGET, using mkoffload tool from - COMPILER_PATH. Return the name of the resultant object file. */ - -static char * -compile_offload_image (const char *target, const char *compiler_path, - unsigned in_argc, char *in_argv[], - vec<cl_decoded_option> compiler_opts, - vec<cl_decoded_option> linker_opts) -{ - char *filename = NULL; - char *dumpbase; - char **argv; - char *suffix - = XALLOCAVEC (char, sizeof ("/accel//mkoffload") + strlen (target)); - strcpy (suffix, "/accel/"); - strcat (suffix, target); - strcat (suffix, "/mkoffload"); - - char **paths = NULL; - unsigned n_paths = parse_env_var (compiler_path, &paths, suffix); - - const char *compiler = NULL; - for (unsigned i = 0; i < n_paths; i++) - if (access_check (paths[i], X_OK) == 0) - { - compiler = paths[i]; - break; - } -#if OFFLOAD_DEFAULTED - if (!compiler && getenv (OFFLOAD_TARGET_DEFAULT_ENV)) - { - free_array_of_ptrs ((void **) paths, n_paths); - return NULL; - } -#endif - - if (!compiler) - fatal_error (input_location, - "could not find %s in %s (consider using %<-B%>)", - suffix + 1, compiler_path); - - dumpbase = concat (dumppfx, "x", target, NULL); - - /* Generate temporary output file name. */ - if (save_temps) - filename = concat (dumpbase, ".o", NULL); - else - filename = make_temp_file (".target.o"); - - struct obstack argv_obstack; - obstack_init (&argv_obstack); - obstack_ptr_grow (&argv_obstack, compiler); - if (save_temps) - obstack_ptr_grow (&argv_obstack, "-save-temps"); - if (verbose) - obstack_ptr_grow (&argv_obstack, "-v"); - obstack_ptr_grow (&argv_obstack, "-o"); - obstack_ptr_grow (&argv_obstack, filename); - - /* Append names of input object files. */ - for (unsigned i = 0; i < in_argc; i++) - obstack_ptr_grow (&argv_obstack, in_argv[i]); - - /* Append options from offload_lto sections. */ - append_compiler_options (&argv_obstack, compiler_opts); - append_diag_options (&argv_obstack, linker_opts); - - obstack_ptr_grow (&argv_obstack, "-dumpbase"); - obstack_ptr_grow (&argv_obstack, dumpbase); - - /* Append options specified by -foffload last. In case of conflicting - options we expect offload compiler to choose the latest. */ - append_offload_options (&argv_obstack, target, compiler_opts); - append_offload_options (&argv_obstack, target, linker_opts); - - obstack_ptr_grow (&argv_obstack, NULL); - argv = XOBFINISH (&argv_obstack, char **); - fork_execute (argv[0], argv, true, "offload_args"); - obstack_free (&argv_obstack, NULL); - - free_array_of_ptrs ((void **) paths, n_paths); - return filename; -} - - -/* The main routine dealing with offloading. - The routine builds a target image for each offload target. IN_ARGC and - IN_ARGV specify options and input object files. As all of them could contain - target sections, we pass them all to target compilers. */ - -static void -compile_images_for_offload_targets (unsigned in_argc, char *in_argv[], - vec<cl_decoded_option> compiler_opts, - vec<cl_decoded_option> linker_opts) -{ - char **names = NULL; - const char *target_names = getenv (OFFLOAD_TARGET_NAMES_ENV); - if (!target_names) - return; - unsigned num_targets = parse_env_var (target_names, &names, NULL); - int next_name_entry = 0; - - const char *compiler_path = getenv ("COMPILER_PATH"); - if (!compiler_path) - goto out; - - /* Prepare an image for each target and save the name of the resultant object - file to the OFFLOAD_NAMES array. It is terminated by a NULL entry. */ - offload_names = XCNEWVEC (char *, num_targets + 1); - for (unsigned i = 0; i < num_targets; i++) - { - offload_names[next_name_entry] - = compile_offload_image (names[i], compiler_path, in_argc, in_argv, - compiler_opts, linker_opts); - if (!offload_names[next_name_entry]) -#if OFFLOAD_DEFAULTED - continue; -#else - fatal_error (input_location, - "problem with building target image for %s", names[i]); -#endif - next_name_entry++; - } - -#if OFFLOAD_DEFAULTED - if (next_name_entry == 0) - { - free (offload_names); - offload_names = NULL; - } -#endif - - out: - free_array_of_ptrs ((void **) names, num_targets); -} - -/* Copy a file from SRC to DEST. */ - -static void -copy_file (const char *dest, const char *src) -{ - FILE *d = fopen (dest, "wb"); - FILE *s = fopen (src, "rb"); - char buffer[512]; - while (!feof (s)) - { - size_t len = fread (buffer, 1, 512, s); - if (ferror (s) != 0) - fatal_error (input_location, "reading input file"); - if (len > 0) - { - fwrite (buffer, 1, len, d); - if (ferror (d) != 0) - fatal_error (input_location, "writing output file"); - } - } - fclose (d); - fclose (s); -} - -/* Find the crtoffloadtable.o file in LIBRARY_PATH, make copy and pass name of - the copy to the linker. */ - -static void -find_crtoffloadtable (int save_temps, const char *dumppfx) -{ - char **paths = NULL; - const char *library_path = getenv ("LIBRARY_PATH"); - if (!library_path) - return; - unsigned n_paths = parse_env_var (library_path, &paths, "/crtoffloadtable.o"); - - unsigned i; - for (i = 0; i < n_paths; i++) - if (access_check (paths[i], R_OK) == 0) - { - /* The linker will delete the filename we give it, so make a copy. */ - char *crtoffloadtable; - if (!save_temps) - crtoffloadtable = make_temp_file (".crtoffloadtable.o"); - else - crtoffloadtable = concat (dumppfx, "crtoffloadtable.o", NULL); - copy_file (crtoffloadtable, paths[i]); - printf ("%s\n", crtoffloadtable); - XDELETEVEC (crtoffloadtable); - break; - } - if (i == n_paths) - fatal_error (input_location, - "installation error, cannot find %<crtoffloadtable.o%>"); - - free_array_of_ptrs ((void **) paths, n_paths); -} - -/* A subroutine of run_gcc. Examine the open file FD for lto sections with - name prefix PREFIX, at FILE_OFFSET, and store any options we find in OPTS. - Return true if we found a matching section, false - otherwise. COLLECT_GCC holds the value of the environment variable with - the same name. */ - -static bool -find_and_merge_options (int fd, off_t file_offset, const char *prefix, - vec<cl_decoded_option> decoded_cl_options, - vec<cl_decoded_option> *opts, const char *collect_gcc) -{ - off_t offset, length; - char *data; - char *fopts; - const char *errmsg; - int err; - vec<cl_decoded_option> fdecoded_options; - - simple_object_read *sobj; - sobj = simple_object_start_read (fd, file_offset, "__GNU_LTO", - &errmsg, &err); - if (!sobj) - return false; - - char *secname = XALLOCAVEC (char, strlen (prefix) + sizeof (".opts")); - strcpy (secname, prefix); - strcat (secname, ".opts"); - if (!simple_object_find_section (sobj, secname, &offset, &length, - &errmsg, &err)) - { - simple_object_release_read (sobj); - return false; - } - - lseek (fd, file_offset + offset, SEEK_SET); - data = (char *)xmalloc (length); - read (fd, data, length); - fopts = data; - bool first = true; - do - { - vec<cl_decoded_option> f2decoded_options - = get_options_from_collect_gcc_options (collect_gcc, fopts); - if (first) - { - fdecoded_options = f2decoded_options; - first = false; - } - else - merge_and_complain (fdecoded_options, f2decoded_options, - decoded_cl_options); - - fopts += strlen (fopts) + 1; - } - while (fopts - data < length); - - free (data); - simple_object_release_read (sobj); - *opts = fdecoded_options; - return true; -} - -/* Copy early debug info sections from INFILE to a new file whose name - is returned. Return NULL on error. */ - -const char * -debug_objcopy (const char *infile, bool rename) -{ - char *outfile; - const char *errmsg; - int err; - - const char *p; - const char *orig_infile = infile; - off_t inoff = 0; - long loffset; - int consumed; - if ((p = strrchr (infile, '@')) - && p != infile - && sscanf (p, "@%li%n", &loffset, &consumed) >= 1 - && strlen (p) == (unsigned int) consumed) - { - char *fname = xstrdup (infile); - fname[p - infile] = '\0'; - infile = fname; - inoff = (off_t) loffset; - } - int infd = open (infile, O_RDONLY | O_BINARY); - if (infd == -1) - return NULL; - simple_object_read *inobj = simple_object_start_read (infd, inoff, - "__GNU_LTO", - &errmsg, &err); - if (!inobj) - return NULL; - - off_t off, len; - if (simple_object_find_section (inobj, ".gnu.debuglto_.debug_info", - &off, &len, &errmsg, &err) != 1) - { - if (errmsg) - fatal_error (0, "%s: %s", errmsg, xstrerror (err)); - - simple_object_release_read (inobj); - close (infd); - return NULL; - } - - if (save_temps) - outfile = concat (orig_infile, ".debug.temp.o", NULL); - else - outfile = make_temp_file (".debug.temp.o"); - errmsg = simple_object_copy_lto_debug_sections (inobj, outfile, &err, rename); - if (errmsg) - { - unlink_if_ordinary (outfile); - fatal_error (0, "%s: %s", errmsg, xstrerror (err)); - } - - simple_object_release_read (inobj); - close (infd); - - return outfile; -} - -/* Helper for qsort: compare priorities for parallel compilation. */ - -int -cmp_priority (const void *a, const void *b) -{ - return *((const int *)b)-*((const int *)a); -} - -/* Number of CPUs that can be used for parallel LTRANS phase. */ - -static unsigned long nthreads_var = 0; - -#ifdef HAVE_PTHREAD_AFFINITY_NP -unsigned long cpuset_size; -static unsigned long get_cpuset_size; -cpu_set_t *cpusetp; - -unsigned long -static cpuset_popcount (unsigned long cpusetsize, cpu_set_t *cpusetp) -{ -#ifdef CPU_COUNT_S - /* glibc 2.7 and above provide a macro for this. */ - return CPU_COUNT_S (cpusetsize, cpusetp); -#else -#ifdef CPU_COUNT - if (cpusetsize == sizeof (cpu_set_t)) - /* glibc 2.6 and above provide a macro for this. */ - return CPU_COUNT (cpusetp); -#endif - size_t i; - unsigned long ret = 0; - STATIC_ASSERT (sizeof (cpusetp->__bits[0]) == sizeof (unsigned long int)); - for (i = 0; i < cpusetsize / sizeof (cpusetp->__bits[0]); i++) - { - unsigned long int mask = cpusetp->__bits[i]; - if (mask == 0) - continue; - ret += __builtin_popcountl (mask); - } - return ret; -#endif -} -#endif - -/* At startup, determine the default number of threads. It would seem - this should be related to the number of cpus online. */ - -static void -init_num_threads (void) -{ -#ifdef HAVE_PTHREAD_AFFINITY_NP -#if defined (_SC_NPROCESSORS_CONF) && defined (CPU_ALLOC_SIZE) - cpuset_size = sysconf (_SC_NPROCESSORS_CONF); - cpuset_size = CPU_ALLOC_SIZE (cpuset_size); -#else - cpuset_size = sizeof (cpu_set_t); -#endif - - cpusetp = (cpu_set_t *) xmalloc (gomp_cpuset_size); - do - { - int ret = pthread_getaffinity_np (pthread_self (), gomp_cpuset_size, - cpusetp); - if (ret == 0) - { - /* Count only the CPUs this process can use. */ - nthreads_var = cpuset_popcount (cpuset_size, cpusetp); - if (nthreads_var == 0) - break; - get_cpuset_size = cpuset_size; -#ifdef CPU_ALLOC_SIZE - unsigned long i; - for (i = cpuset_size * 8; i; i--) - if (CPU_ISSET_S (i - 1, cpuset_size, cpusetp)) - break; - cpuset_size = CPU_ALLOC_SIZE (i); -#endif - return; - } - if (ret != EINVAL) - break; -#ifdef CPU_ALLOC_SIZE - if (cpuset_size < sizeof (cpu_set_t)) - cpuset_size = sizeof (cpu_set_t); - else - cpuset_size = cpuset_size * 2; - if (cpuset_size < 8 * sizeof (cpu_set_t)) - cpusetp - = (cpu_set_t *) realloc (cpusetp, cpuset_size); - else - { - /* Avoid fatal if too large memory allocation would be - requested, e.g. kernel returning EINVAL all the time. */ - void *p = realloc (cpusetp, cpuset_size); - if (p == NULL) - break; - cpusetp = (cpu_set_t *) p; - } -#else - break; -#endif - } - while (1); - cpuset_size = 0; - nthreads_var = 1; - free (cpusetp); - cpusetp = NULL; -#endif -#ifdef _SC_NPROCESSORS_ONLN - nthreads_var = sysconf (_SC_NPROCESSORS_ONLN); -#endif -} - -/* Test and return reason why a jobserver cannot be detected. */ - -static const char * -jobserver_active_p (void) -{ - #define JS_PREFIX "jobserver is not available: " - #define JS_NEEDLE "--jobserver-auth=" - - const char *makeflags = getenv ("MAKEFLAGS"); - if (makeflags == NULL) - return JS_PREFIX "%<MAKEFLAGS%> environment variable is unset"; - - const char *n = strstr (makeflags, JS_NEEDLE); - if (n == NULL) - return JS_PREFIX "%<" JS_NEEDLE "%> is not present in %<MAKEFLAGS%>"; - - int rfd = -1; - int wfd = -1; - - if (sscanf (n + strlen (JS_NEEDLE), "%d,%d", &rfd, &wfd) == 2 - && rfd > 0 - && wfd > 0 - && is_valid_fd (rfd) - && is_valid_fd (wfd)) - return NULL; - else - return JS_PREFIX "cannot access %<" JS_NEEDLE "%> file descriptors"; -} - -/* Print link to -flto documentation with a hint message. */ - -void -print_lto_docs_link () -{ - const char *url = get_option_url (NULL, OPT_flto); - - pretty_printer pp; - pp.url_format = URL_FORMAT_DEFAULT; - pp_string (&pp, "see the "); - pp_begin_url (&pp, url); - pp_string (&pp, "%<-flto%> option documentation"); - pp_end_url (&pp); - pp_string (&pp, " for more information"); - inform (UNKNOWN_LOCATION, pp_formatted_text (&pp)); -} - -/* Test that a make command is present and working, return true if so. */ - -static bool -make_exists (void) -{ - const char *make = "make"; - char **make_argv = buildargv (getenv ("MAKE")); - if (make_argv) - make = make_argv[0]; - const char *make_args[] = {make, "--version", NULL}; - - int exit_status = 0; - int err = 0; - const char *errmsg - = pex_one (PEX_SEARCH, make_args[0], CONST_CAST (char **, make_args), - "make", NULL, NULL, &exit_status, &err); - freeargv (make_argv); - return errmsg == NULL && exit_status == 0 && err == 0; -} - -/* Execute gcc. ARGC is the number of arguments. ARGV contains the arguments. */ - -static void -run_gcc (unsigned argc, char *argv[]) -{ - unsigned i, j; - const char **new_argv; - const char **argv_ptr; - char *list_option_full = NULL; - const char *linker_output = NULL; - const char *collect_gcc; - char *collect_gcc_options; - int parallel = 0; - int jobserver = 0; - bool jobserver_requested = false; - int auto_parallel = 0; - bool no_partition = false; - const char *jobserver_error = NULL; - vec<cl_decoded_option> fdecoded_options; - fdecoded_options.create (16); - vec<cl_decoded_option> offload_fdecoded_options = vNULL; - struct obstack argv_obstack; - int new_head_argc; - bool have_lto = false; - bool have_offload = false; - unsigned lto_argc = 0, ltoobj_argc = 0; - char **lto_argv, **ltoobj_argv; - bool linker_output_rel = false; - bool skip_debug = false; - unsigned n_debugobj; - const char *incoming_dumppfx = dumppfx = NULL; - static char current_dir[] = { '.', DIR_SEPARATOR, '\0' }; - - /* Get the driver and options. */ - collect_gcc = getenv ("COLLECT_GCC"); - if (!collect_gcc) - fatal_error (input_location, - "environment variable %<COLLECT_GCC%> must be set"); - collect_gcc_options = getenv ("COLLECT_GCC_OPTIONS"); - if (!collect_gcc_options) - fatal_error (input_location, - "environment variable %<COLLECT_GCC_OPTIONS%> must be set"); - - char *collect_as_options = getenv ("COLLECT_AS_OPTIONS"); - - /* Prepend -Xassembler to each option, and append the string - to collect_gcc_options. */ - if (collect_as_options) - { - obstack temporary_obstack; - obstack_init (&temporary_obstack); - - prepend_xassembler_to_collect_as_options (collect_as_options, - &temporary_obstack); - obstack_1grow (&temporary_obstack, '\0'); - - char *xassembler_opts_string - = XOBFINISH (&temporary_obstack, char *); - collect_gcc_options = concat (collect_gcc_options, xassembler_opts_string, - NULL); - } - - vec<cl_decoded_option> decoded_options - = get_options_from_collect_gcc_options (collect_gcc, collect_gcc_options); - - /* Allocate array for input object files with LTO IL, - and for possible preceding arguments. */ - lto_argv = XNEWVEC (char *, argc); - ltoobj_argv = XNEWVEC (char *, argc); - - /* Look at saved options in the IL files. */ - for (i = 1; i < argc; ++i) - { - char *p; - int fd; - off_t file_offset = 0; - long loffset; - int consumed; - char *filename = argv[i]; - - if (startswith (argv[i], "-foffload-objects=")) - { - have_offload = true; - offload_objects_file_name - = argv[i] + sizeof ("-foffload-objects=") - 1; - continue; - } - - if ((p = strrchr (argv[i], '@')) - && p != argv[i] - && sscanf (p, "@%li%n", &loffset, &consumed) >= 1 - && strlen (p) == (unsigned int) consumed) - { - filename = XNEWVEC (char, p - argv[i] + 1); - memcpy (filename, argv[i], p - argv[i]); - filename[p - argv[i]] = '\0'; - file_offset = (off_t) loffset; - } - fd = open (filename, O_RDONLY | O_BINARY); - /* Linker plugin passes -fresolution and -flinker-output options. - -flinker-output is passed only when user did not specify one and thus - we do not need to worry about duplicities with the option handling - below. */ - if (fd == -1) - { - lto_argv[lto_argc++] = argv[i]; - if (strcmp (argv[i], "-flinker-output=rel") == 0) - linker_output_rel = true; - continue; - } - - if (find_and_merge_options (fd, file_offset, LTO_SECTION_NAME_PREFIX, - decoded_options, &fdecoded_options, - collect_gcc)) - { - have_lto = true; - ltoobj_argv[ltoobj_argc++] = argv[i]; - } - close (fd); - } - - /* Initalize the common arguments for the driver. */ - obstack_init (&argv_obstack); - obstack_ptr_grow (&argv_obstack, collect_gcc); - obstack_ptr_grow (&argv_obstack, "-xlto"); - obstack_ptr_grow (&argv_obstack, "-c"); - - append_compiler_options (&argv_obstack, fdecoded_options); - append_linker_options (&argv_obstack, decoded_options); - - /* Scan linker driver arguments for things that are of relevance to us. */ - for (j = 1; j < decoded_options.length (); ++j) - { - cl_decoded_option *option = &decoded_options[j]; - switch (option->opt_index) - { - case OPT_o: - linker_output = option->arg; - break; - - /* We don't have to distinguish between -save-temps=* and - -save-temps, -dumpdir already carries that - information. */ - case OPT_save_temps_: - case OPT_save_temps: - save_temps = 1; - break; - - case OPT_v: - verbose = 1; - break; - - case OPT_flto_partition_: - if (strcmp (option->arg, "none") == 0) - no_partition = true; - break; - - case OPT_flto_: - /* Merge linker -flto= option with what we have in IL files. */ - merge_flto_options (fdecoded_options, option); - if (strcmp (option->arg, "jobserver") == 0) - jobserver_requested = true; - break; - - case OPT_flinker_output_: - linker_output_rel = !strcmp (option->arg, "rel"); - break; - - case OPT_g: - /* Recognize -g0. */ - skip_debug = option->arg && !strcmp (option->arg, "0"); - break; - - case OPT_dumpdir: - incoming_dumppfx = dumppfx = option->arg; - break; - - default: - break; - } - } - - /* Process LTO-related options on merged options. */ - for (j = 1; j < fdecoded_options.length (); ++j) - { - cl_decoded_option *option = &fdecoded_options[j]; - switch (option->opt_index) - { - case OPT_flto_: - if (strcmp (option->arg, "jobserver") == 0) - { - parallel = 1; - jobserver = 1; - } - else if (strcmp (option->arg, "auto") == 0) - { - parallel = 1; - auto_parallel = 1; - } - else - { - parallel = atoi (option->arg); - if (parallel <= 1) - parallel = 0; - } - /* Fallthru. */ - - case OPT_flto: - lto_mode = LTO_MODE_WHOPR; - break; - } - } - - /* Output lto-wrapper invocation command. */ - if (verbose) - { - for (i = 0; i < argc; ++i) - { - fputs (argv[i], stderr); - fputc (' ', stderr); - } - fputc ('\n', stderr); - } - - if (linker_output_rel) - no_partition = true; - - if (no_partition) - { - lto_mode = LTO_MODE_LTO; - jobserver = 0; - jobserver_requested = false; - auto_parallel = 0; - parallel = 0; - } - else - { - jobserver_error = jobserver_active_p (); - if (jobserver && jobserver_error != NULL) - { - /* Fall back to auto parallelism. */ - jobserver = 0; - auto_parallel = 1; - } - else if (!jobserver && jobserver_error == NULL) - { - parallel = 1; - jobserver = 1; - } - } - - /* We need make working for a parallel execution. */ - if (parallel && !make_exists ()) - parallel = 0; - - if (!dumppfx) - { - if (!linker_output - || strcmp (linker_output, HOST_BIT_BUCKET) == 0) - dumppfx = "a."; - else - { - const char *obase = lbasename (linker_output), *temp; - - /* Strip the executable extension. */ - size_t blen = strlen (obase), xlen; - if ((temp = strrchr (obase + 1, '.')) - && (xlen = strlen (temp)) - && (strcmp (temp, ".exe") == 0 -#if defined(HAVE_TARGET_EXECUTABLE_SUFFIX) - || strcmp (temp, TARGET_EXECUTABLE_SUFFIX) == 0 -#endif - || strcmp (obase, "a.out") == 0)) - dumppfx = xstrndup (linker_output, - obase - linker_output + blen - xlen + 1); - else - dumppfx = concat (linker_output, ".", NULL); - } - } - - /* If there's no directory component in the dumppfx, add one, so - that, when it is used as -dumpbase, it overrides any occurrence - of -dumpdir that might have been passed in. */ - if (!dumppfx || lbasename (dumppfx) == dumppfx) - dumppfx = concat (current_dir, dumppfx, NULL); - - /* Make sure some -dumpdir is passed, so as to get predictable - -dumpbase overriding semantics. If we got an incoming -dumpdir - argument, we'll pass it on, so don't bother with another one - then. */ - if (!incoming_dumppfx) - { - obstack_ptr_grow (&argv_obstack, "-dumpdir"); - obstack_ptr_grow (&argv_obstack, ""); - } - obstack_ptr_grow (&argv_obstack, "-dumpbase"); - - /* Remember at which point we can scrub args to re-use the commons. */ - new_head_argc = obstack_object_size (&argv_obstack) / sizeof (void *); - - if (have_offload) - { - unsigned i, num_offload_files; - char **offload_argv; - FILE *f; - - f = fopen (offload_objects_file_name, "r"); - if (f == NULL) - fatal_error (input_location, "cannot open %s: %m", - offload_objects_file_name); - if (fscanf (f, "%u ", &num_offload_files) != 1) - fatal_error (input_location, "cannot read %s: %m", - offload_objects_file_name); - offload_argv = XCNEWVEC (char *, num_offload_files); - - /* Read names of object files with offload. */ - for (i = 0; i < num_offload_files; i++) - { - const unsigned piece = 32; - char *buf, *filename = XNEWVEC (char, piece); - size_t len; - - buf = filename; -cont1: - if (!fgets (buf, piece, f)) - break; - len = strlen (filename); - if (filename[len - 1] != '\n') - { - filename = XRESIZEVEC (char, filename, len + piece); - buf = filename + len; - goto cont1; - } - filename[len - 1] = '\0'; - offload_argv[i] = filename; - } - fclose (f); - if (offload_argv[num_offload_files - 1] == NULL) - fatal_error (input_location, "invalid format of %s", - offload_objects_file_name); - maybe_unlink (offload_objects_file_name); - offload_objects_file_name = NULL; - - /* Look at saved offload options in files. */ - for (i = 0; i < num_offload_files; i++) - { - char *p; - long loffset; - int fd, consumed; - off_t file_offset = 0; - char *filename = offload_argv[i]; - - if ((p = strrchr (offload_argv[i], '@')) - && p != offload_argv[i] - && sscanf (p, "@%li%n", &loffset, &consumed) >= 1 - && strlen (p) == (unsigned int) consumed) - { - filename = XNEWVEC (char, p - offload_argv[i] + 1); - memcpy (filename, offload_argv[i], p - offload_argv[i]); - filename[p - offload_argv[i]] = '\0'; - file_offset = (off_t) loffset; - } - fd = open (filename, O_RDONLY | O_BINARY); - if (fd == -1) - fatal_error (input_location, "cannot open %s: %m", filename); - if (!find_and_merge_options (fd, file_offset, - OFFLOAD_SECTION_NAME_PREFIX, - decoded_options, &offload_fdecoded_options, - collect_gcc)) - fatal_error (input_location, "cannot read %s: %m", filename); - close (fd); - if (filename != offload_argv[i]) - XDELETEVEC (filename); - } - - compile_images_for_offload_targets (num_offload_files, offload_argv, - offload_fdecoded_options, decoded_options); - - free_array_of_ptrs ((void **) offload_argv, num_offload_files); - - if (offload_names) - { - find_crtoffloadtable (save_temps, dumppfx); - for (i = 0; offload_names[i]; i++) - printf ("%s\n", offload_names[i]); - free_array_of_ptrs ((void **) offload_names, i); - } - } - - /* If object files contain offload sections, but do not contain LTO sections, - then there is no need to perform a link-time recompilation, i.e. - lto-wrapper is used only for a compilation of offload images. */ - if (have_offload && !have_lto) - goto finish; - - if (lto_mode == LTO_MODE_LTO) - { - /* -dumpbase argument for LTO. */ - flto_out = concat (dumppfx, "lto.o", NULL); - obstack_ptr_grow (&argv_obstack, flto_out); - - if (!save_temps) - flto_out = make_temp_file (".lto.o"); - obstack_ptr_grow (&argv_obstack, "-o"); - obstack_ptr_grow (&argv_obstack, flto_out); - } - else - { - const char *list_option = "-fltrans-output-list="; - - /* -dumpbase argument for WPA. */ - char *dumpbase = concat (dumppfx, "wpa", NULL); - obstack_ptr_grow (&argv_obstack, dumpbase); - - if (save_temps) - ltrans_output_file = concat (dumppfx, "ltrans.out", NULL); - else - ltrans_output_file = make_temp_file (".ltrans.out"); - list_option_full = concat (list_option, ltrans_output_file, NULL); - obstack_ptr_grow (&argv_obstack, list_option_full); - - if (jobserver) - { - if (verbose) - fprintf (stderr, "Using make jobserver\n"); - obstack_ptr_grow (&argv_obstack, xstrdup ("-fwpa=jobserver")); - } - else if (auto_parallel) - { - char buf[256]; - init_num_threads (); - if (nthreads_var == 0) - nthreads_var = 1; - if (verbose) - fprintf (stderr, "LTO parallelism level set to %ld\n", - nthreads_var); - sprintf (buf, "-fwpa=%ld", nthreads_var); - obstack_ptr_grow (&argv_obstack, xstrdup (buf)); - } - else if (parallel > 1) - { - char buf[256]; - sprintf (buf, "-fwpa=%i", parallel); - obstack_ptr_grow (&argv_obstack, xstrdup (buf)); - } - else - obstack_ptr_grow (&argv_obstack, "-fwpa"); - } - - /* Append input arguments. */ - for (i = 0; i < lto_argc; ++i) - obstack_ptr_grow (&argv_obstack, lto_argv[i]); - /* Append the input objects. */ - for (i = 0; i < ltoobj_argc; ++i) - obstack_ptr_grow (&argv_obstack, ltoobj_argv[i]); - obstack_ptr_grow (&argv_obstack, NULL); - - new_argv = XOBFINISH (&argv_obstack, const char **); - argv_ptr = &new_argv[new_head_argc]; - fork_execute (new_argv[0], CONST_CAST (char **, new_argv), true, - "ltrans_args"); - - /* Copy the early generated debug info from the objects to temporary - files and append those to the partial link commandline. */ - n_debugobj = 0; - early_debug_object_names = NULL; - if (! skip_debug) - { - early_debug_object_names = XCNEWVEC (const char *, ltoobj_argc+ 1); - num_deb_objs = ltoobj_argc; - for (i = 0; i < ltoobj_argc; ++i) - { - const char *tem; - if ((tem = debug_objcopy (ltoobj_argv[i], !linker_output_rel))) - { - early_debug_object_names[i] = tem; - n_debugobj++; - } - } - } - - if (lto_mode == LTO_MODE_LTO) - { - printf ("%s\n", flto_out); - if (!skip_debug) - { - for (i = 0; i < ltoobj_argc; ++i) - if (early_debug_object_names[i] != NULL) - printf ("%s\n", early_debug_object_names[i]); - } - /* These now belong to collect2. */ - free (flto_out); - flto_out = NULL; - free (early_debug_object_names); - early_debug_object_names = NULL; - } - else - { - FILE *stream = fopen (ltrans_output_file, "r"); - FILE *mstream = NULL; - struct obstack env_obstack; - int priority; - - if (!stream) - fatal_error (input_location, "%<fopen%>: %s: %m", ltrans_output_file); - - /* Parse the list of LTRANS inputs from the WPA stage. */ - obstack_init (&env_obstack); - nr = 0; - for (;;) - { - const unsigned piece = 32; - char *output_name = NULL; - char *buf, *input_name = (char *)xmalloc (piece); - size_t len; - - buf = input_name; - if (fscanf (stream, "%i\n", &priority) != 1) - { - if (!feof (stream)) - fatal_error (input_location, - "corrupted ltrans output file %s", - ltrans_output_file); - break; - } -cont: - if (!fgets (buf, piece, stream)) - break; - len = strlen (input_name); - if (input_name[len - 1] != '\n') - { - input_name = (char *)xrealloc (input_name, len + piece); - buf = input_name + len; - goto cont; - } - input_name[len - 1] = '\0'; - - if (input_name[0] == '*') - output_name = &input_name[1]; - - nr++; - ltrans_priorities - = (int *)xrealloc (ltrans_priorities, nr * sizeof (int) * 2); - input_names = (char **)xrealloc (input_names, nr * sizeof (char *)); - output_names = (char **)xrealloc (output_names, nr * sizeof (char *)); - ltrans_priorities[(nr-1)*2] = priority; - ltrans_priorities[(nr-1)*2+1] = nr-1; - input_names[nr-1] = input_name; - output_names[nr-1] = output_name; - } - fclose (stream); - maybe_unlink (ltrans_output_file); - ltrans_output_file = NULL; - - if (nr > 1) - { - if (jobserver_requested && jobserver_error != NULL) - { - warning (0, jobserver_error); - print_lto_docs_link (); - } - else if (parallel == 0) - { - warning (0, "using serial compilation of %d LTRANS jobs", nr); - print_lto_docs_link (); - } - } - - if (parallel) - { - makefile = make_temp_file (".mk"); - mstream = fopen (makefile, "w"); - qsort (ltrans_priorities, nr, sizeof (int) * 2, cmp_priority); - } - - /* Execute the LTRANS stage for each input file (or prepare a - makefile to invoke this in parallel). */ - for (i = 0; i < nr; ++i) - { - char *output_name; - char *input_name = input_names[i]; - /* If it's a pass-through file do nothing. */ - if (output_names[i]) - continue; - - /* Replace the .o suffix with a .ltrans.o suffix and write - the resulting name to the LTRANS output list. */ - obstack_grow (&env_obstack, input_name, strlen (input_name) - 2); - obstack_grow (&env_obstack, ".ltrans.o", sizeof (".ltrans.o")); - output_name = XOBFINISH (&env_obstack, char *); - - /* Adjust the dumpbase if the linker output file was seen. */ - int dumpbase_len = (strlen (dumppfx) - + sizeof (DUMPBASE_SUFFIX) - + sizeof (".ltrans")); - char *dumpbase = (char *) xmalloc (dumpbase_len + 1); - snprintf (dumpbase, dumpbase_len, "%sltrans%u.ltrans", dumppfx, i); - argv_ptr[0] = dumpbase; - - argv_ptr[1] = "-fltrans"; - argv_ptr[2] = "-o"; - argv_ptr[3] = output_name; - argv_ptr[4] = input_name; - argv_ptr[5] = NULL; - if (parallel) - { - fprintf (mstream, "%s:\n\t@%s ", output_name, new_argv[0]); - for (j = 1; new_argv[j] != NULL; ++j) - fprintf (mstream, " '%s'", new_argv[j]); - fprintf (mstream, "\n"); - /* If we are not preserving the ltrans input files then - truncate them as soon as we have processed it. This - reduces temporary disk-space usage. */ - if (! save_temps) - fprintf (mstream, "\t@-touch -r %s %s.tem > /dev/null 2>&1 " - "&& mv %s.tem %s\n", - input_name, input_name, input_name, input_name); - } - else - { - char argsuffix[sizeof (DUMPBASE_SUFFIX) - + sizeof (".ltrans_args") + 1]; - if (save_temps) - snprintf (argsuffix, - sizeof (DUMPBASE_SUFFIX) + sizeof (".ltrans_args"), - "ltrans%u.ltrans_args", i); - fork_execute (new_argv[0], CONST_CAST (char **, new_argv), - true, save_temps ? argsuffix : NULL); - maybe_unlink (input_name); - } - - output_names[i] = output_name; - } - if (parallel) - { - struct pex_obj *pex; - char jobs[32]; - - fprintf (mstream, - ".PHONY: all\n" - "all:"); - for (i = 0; i < nr; ++i) - { - int j = ltrans_priorities[i*2 + 1]; - fprintf (mstream, " \\\n\t%s", output_names[j]); - } - fprintf (mstream, "\n"); - fclose (mstream); - if (!jobserver) - { - /* Avoid passing --jobserver-fd= and similar flags - unless jobserver mode is explicitly enabled. */ - putenv (xstrdup ("MAKEFLAGS=")); - putenv (xstrdup ("MFLAGS=")); - } - - char **make_argv = buildargv (getenv ("MAKE")); - if (make_argv) - { - for (unsigned argc = 0; make_argv[argc]; argc++) - obstack_ptr_grow (&argv_obstack, make_argv[argc]); - } - else - obstack_ptr_grow (&argv_obstack, "make"); - - obstack_ptr_grow (&argv_obstack, "-f"); - obstack_ptr_grow (&argv_obstack, makefile); - if (!jobserver) - { - snprintf (jobs, 31, "-j%ld", - auto_parallel ? nthreads_var : parallel); - obstack_ptr_grow (&argv_obstack, jobs); - } - obstack_ptr_grow (&argv_obstack, "all"); - obstack_ptr_grow (&argv_obstack, NULL); - new_argv = XOBFINISH (&argv_obstack, const char **); - - pex = collect_execute (new_argv[0], CONST_CAST (char **, new_argv), - NULL, NULL, PEX_SEARCH, false, NULL); - do_wait (new_argv[0], pex); - freeargv (make_argv); - maybe_unlink (makefile); - makefile = NULL; - for (i = 0; i < nr; ++i) - maybe_unlink (input_names[i]); - } - for (i = 0; i < nr; ++i) - { - fputs (output_names[i], stdout); - putc ('\n', stdout); - free (input_names[i]); - } - if (!skip_debug) - { - for (i = 0; i < ltoobj_argc; ++i) - if (early_debug_object_names[i] != NULL) - printf ("%s\n", early_debug_object_names[i]); - } - nr = 0; - free (ltrans_priorities); - free (output_names); - output_names = NULL; - free (early_debug_object_names); - early_debug_object_names = NULL; - free (input_names); - free (list_option_full); - obstack_free (&env_obstack, NULL); - } - - finish: - XDELETE (lto_argv); - obstack_free (&argv_obstack, NULL); -} - - -/* Entry point. */ - -int -main (int argc, char *argv[]) -{ - const char *p; - - init_opts_obstack (); - - p = argv[0] + strlen (argv[0]); - while (p != argv[0] && !IS_DIR_SEPARATOR (p[-1])) - --p; - progname = p; - - xmalloc_set_program_name (progname); - - gcc_init_libintl (); - - diagnostic_initialize (global_dc, 0); - - if (atexit (lto_wrapper_cleanup) != 0) - fatal_error (input_location, "%<atexit%> failed"); - - setup_signals (); - - /* We may be called with all the arguments stored in some file and - passed with @file. Expand them into argv before processing. */ - expandargv (&argc, &argv); - - run_gcc (argc, argv); - - return 0; -} |